Механизм Показать вопрос перед записью в 1С:Предприятие 8: описание, нюансы и примеры реализации

Разбираем механизм «Показать вопрос перед записью» в 1С 8: код, настройка и защита от случайных сохранений. Обеспечьте целостность базы легко!

Бесплатная консультация юриста

+7 (800) -01-07-30

Реклама jurik.ru

В данной статье подробно разбирается механизм «Показать вопрос перед записью» в системе «1С:Предприятие 8». Эта функциональность критически важна для обеспечения целостности данных и предотвращения случайного сохранения некорректной или незавершенной информации пользователем. Мы рассмотрим технические аспекты реализации, примеры кода, а также предоставим контактную информацию официальных каналов поддержки фирмы 1С для решения сложных вопросов.


Описание функционала

Что такое «Показать вопрос перед записью»?

В платформе «1С:Предприятие 8» существует встроенный механизм контроля записи объекта (документа, справочника, плана обмена и т.д.). Перед тем как данные будут физически записаны в базу данных, платформа может вывести модальное окно с вопросом пользователю: «Записать изменения?» (или пользовательский текст).

Это реализуется двумя основными способами:

  1. Свойство формы ПоказатьВопросПередЗаписью (ShowConfirmationBeforeWrite), устанавливается в Истина для автоматического вывода стандартного диалога платформы при попытке закрытия формы с измененными данными.
  2. Программный вызов метода ПоказатьВопрос (ShowQuestion) в обработчике события ПередЗаписью (BeforeWrite) или ПриЗаписи (OnWrite) для кастомной логики (например, проверка заполненности реквизитов, контроль сумм, запрос подтверждения специфического действия).

Ключевые сценарии использования

  • Защита от случайного закрытия: Пользователь нажал «Закрыть» (крестик) или ушел с формы, не нажав «Записать». Платформа перехватывает событие и спрашивает: «Сохранить изменения?».
  • Бизнес-логика подтверждения: При записи документа «Реализация товаров» проверить, заполнен ли «Договор». Если нет — показать вопрос: «Договор не указан. Продолжить запись?».
  • Режим «Только просмотр»: Если свойство установлено в Ложь, форма закрывается молча, сбрасывая несохраненные изменения (если не было явной записи).

Технические нюансы (Платформа 1С:Предприятие 8.3+)

Свойство формы: ПоказатьВопросПередЗаписью (Булево).

  • По умолчанию: Истина для основных форм объектов.
  • Работает только если в форме есть измененные данные (свойство Измененность = Истина).
  • Диалог выводится платформой автоматически при попытке закрытия формы (кнопка закрытия, Esc, переход на другую запись в списке).

Метод ПоказатьВопрос(<ТекстВопроса>, <РежимДиалога>, <ОбработчикЗавершения>):

  • Асинхронный (в клиентском приложении и веб-клиенте) — требует использования ОписаниеОповещенияОЗавершении (NotificationDescription) для обработки результата.
  • Синхронный — в тонком клиенте (устаревает, не рекомендуется для новых разработок).
  • Возвращает/передает в обработчик: КодВозвратаДиалогаВопрос.Да / Нет / Отмена.

Примеры программной реализации

Пример 1: Установка свойства формы при создании (На Сервере)

// Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
 // Включаем стандартный вопрос платформы перед записью/закрытием
 ЭтаФорма.ПоказатьВопросПередЗаписью = Истина; 
 
 // Можно отключить для ролей "Только просмотр"
 // Если НЕ Роль.ПолныеПрава ТО ЭтаФорма.ПоказатьВопросПередЗаписью = Ложь КонецЕсли;
КонецПроцедуры

Пример 2: Кастомный вопрос в обработчике ПередЗаписью (На Клиенте)

// Процедура ПередЗаписью(Отказ, ПараметрыЗаписи, СтандартнаяОбработка)
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи, СтандартнаяОбработка)
 // Проверка бизнес-логики
 Если Объект.СуммаДокумента = 0 ТО
 // Формируем описание оповещения для асинхронного вызова
 ОписаниеОповещения = Новый ОписаниеОповещения("ОбработкаОтветаНаВопросЗаписи", ЭтотОбъект);
 
 // Показываем вопрос пользователю
 ПоказатьВопрос(
 "Сумма документа равна 0. Вы уверены, что хотите записать пустой документ?", 
 РежимДиалогаВопрос.ДаНет, 
 ОписаниеОповещения
 );
 
 // Важно: ставим Отказ = Истина, чтобы прервать стандартную запись до ответа пользователя
 Отказ = Истина; 
 КонецЕсли;
КонецПроцедуры

// Процедура-обработчик ответа
Процедура ОбработкаОтветаНаВопросЗаписи(КодВозврата, ДопПараметры) Экспорт
 Если КодВозврата = КодВозвратаДиалогаВопрос.Да ТО
 // Пользователь нажал "Да" -> повторно инициируем запись
 // Используем ПараметрыЗаписи из контекста или просто вызываем Записать
 ЭтаФорма.Записать(Истина); // Истина = показывать стандартный вопрос платформы (если нужно) или Ложь
 Иначе
 // Пользователь нажал "Нет" или закрыл окно -> запись отменена, Отказ уже стоит Истина
 Сообщить("Запись отменена пользователем.");
 КонецЕсли;
КонецПроцедуры

Пример 3: Работа с ПараметрамиЗаписи (Режим записи)

В современных версиях платформы рекомендуется использовать параметр ПараметрыЗаписи типа ПараметрыЗаписиОбъекта для управления режимом записи без рекурсивных вызовов ПередЗаписью.


Процедура ПередЗаписью(Отказ, ПараметрыЗаписи, СтандартнаяОбработка)
 Если Не ПараметрыЗаписи.Свойство("ПовторнаяПопытка", Тип("Булево")) ТО
 // Первая попытка записи
 Если Объект.Контрагент = Неопределено ТО
 ОписаниеОповещения = Новый ОписаниеОповещения("ОбработкаОтветаКонтрагент", ЭтотОбъект);
 ПоказатьВопрос("Не выбран контрагент. Записать документ как анонимный?", РежимДиалогаВопрос.ДаНет, ОписаниеОповещения);
 Отказ = Истина; // Останавливаем текущую запись
 КонецЕсли;
 Иначе
 // Это повторный вызов после нажатия "Да" в вопросе
 Если ПараметрыЗаписи.ПовторнаяПопытка = Ложь ТО
 // Пользователь нажал "Нет" в нашем кастомном диалоге (если мы передали флаг)
 Отказ = Истина;
 КонецЕсли;
 КонецЕсли;
КонецПроцедуры

Процедура ОбработкаОтветаКонтрагент(КодВозврата, ДопПараметры) Экспорт
 Если КодВозврата = КодВозвратаДиалогаВопрос.Да ТО
 // Запускаем запись повторно с флагом, что это не первый заход
 ПараметрыЗаписи = Новый Структура("ПовторнаяПопытка", Истина);
 ЭтаФорма.Записать(ПараметрыЗаписи);
 КонецЕсли;
КонецПроцедуры

Распространенные ошибки и лучшие практики

Ошибка Последствие Решение
Использование синхронного ПоказатьВопрос в веб-клиенте/тонком клиенте (управляемые формы) Ошибка выполнения: «Синхронные вызовы не поддерживаются» или зависание интерфейса. Всегда используйте асинхронный вызов с ОписаниеОповещенияОЗавершении.
Забывают установить Отказ = Истина перед вызовом асинхронного вопроса Платформа продолжает запись параллельно с показом диалога, данные сохраняются до ответа пользователя. Обязательно устанавливайте Отказ = Истина в ПередЗаписью, если ждете ответа пользователя.
Бесконечная рекурсия при повторном вызове Записать Переполнение стека, зависание сеанса. Используйте ПараметрыЗаписи (Структуру) для передачи флага «Повторная попытка» и анализа его в ПередЗаписью.
Конфликт свойства формы ПоказатьВопросПередЗаписью и ручного вызова ПоказатьВопрос Два диалога подряд: сначала кастомный, потом стандартный платформы (или наоборот). Если делаете кастомную логику в ПередЗаписью, установите ЭтаФорма.ПоказатьВопросПередЗаписью = Ложь в ПриСозданииНаСервере, чтобы избежать дубляжа.

Контакты для обращений (Официальная поддержка 1С)

По вопросам работы платформы, лицензирования, обновлений и сложных кейсов разработки (включая механизмы записи и транзакций) рекомендуется обращаться к официальным источникам.

Официальный сайт

  • Главный портал: https://1c.ru
  • Портал ИТС (Информационно-технологическое сопровождение): https://its.1c.ru (доступ к документации, обновлениям, форумам)
  • Сайт разработчика (DevDocs): https://devdocs.1c.ru (Синтакс-помощник, статьи, примеры кода)

Горячая линия и телефоны (Россия, Москва)

Единый контактный центр фирмы 1С:

  • Телефон (Москва): +7 (495) -88-90-90
  • Телефон (Бесплатный по РФ / 8-800): 8 (800) -00-10-10
  • Режим работы горячей линии: Понедельник — Пятница: 09:00, 18:00 (Московское время).

Электронные адреса (E-mail)

  • Общие вопросы / Пресс-центр: info@1c.ru
  • Техническая поддержка (через ИТС): Оформляется тикет в личном кабинете на its.1c.ru (раздел «Поддержка» -> «Задать вопрос»).
  • Партнерская сеть / Стать партнером: partner@1c.ru
  • Образовательные программы / Обучение: edu@1c.ru
  • 1С-ЭДО / 1С-Отчетность / 1С-Линк (Сервисы): Поддержка через личные кабинеты соответствующих сервисов.

Личный кабинет (Личный кабинет 1С / ИТС)

Для доступа к обновлениям платформы, конфигураций, документации (Синтакс-помощник онлайн), а также для создания обращений в техподдержку:

  • Адрес входа: https://login.1c.ru (Единая точка входа)
  • Личный кабинет ИТС: https://its.1c.ru/lk
  • Требуется регистрация PIN-кода поставки или логина/пароля от аккаунта 1С:ID.

Личный прием и График приема посетителей (Офис в Москве)

Фирма 1С принимает посетителей в своем офисе по предварительной записи (для партнеров, сдачи экзаменов, получения коробочных версий).

  • Адрес: г. Москва, ул. Селезневская, д. 21, стр. 1 (Бизнес-центр «Селезневский», м. «Электрозаводская» / «Соколиная гора»).
  • График приема посетителей: Понедельник — Пятница: 10:00 — 17:00 (перерыв 13:00 — 14:00). Суббота, Воскресенье — выходной.
  • Важно: Вход по пропускам. Необходимо заранее согласовать визит у менеджера или через службу регистрации гостей по телефону +7 (495) -88-90-90 (доб. для регистрации гостей).

Основные отделы и направления (Структура контактов)

При звонке на горячую линию или написании письма уточните нужный отдел для ускорения решения:

  1. Техническая поддержка платформы и типовых конфигураций (ИТС): Вопросы по ПоказатьВопросПередЗаписью, ошибкам платформы, обновлениям.
  2. Отдел лицензирования и продаж: Покупка лицензий, продление ИТС, перевод лицензий, 1С:Фреш.
  3. Партнерский департамент: Аттестация партнеров, маркетинговая поддержка, обмен лидами.
  4. Центр обучения и аттестации (1С:Образование): Курсы, экзамены «1С:Профессионал», «1С:Специалист», «1С:Эксперт».
  5. Служба сервисов (1С-ЭДО, 1С-Отчетность, 1С-Линк, 1С-Документооборот): Подключение, настройка, тарификация облачных сервисов.
  6. Юридический отдел / Договорной отдел: Работа с договорами, офертой, НДС, актами сверки.

Руководство фирмы 1С (Ключевые лица)

  • Президент фирмы 1С: Борис Юрьевич Нуралиев (основатель, главный идеолог платформы).
  • Вице-президенты / Директора направлений: Руководят блоками: платформа, прикладные решения, сервисы, партнерская сеть, образование, международное развитие.
  • Прямой контакт с руководством для технических вопросов разработки не предусмотрен — общение ведется через техподдержку ИТС или партнерские каналы.

Отзывы разработчиков и пользователей о механизме «Вопрос перед записью»

Агрегация мнений с форумов forum.1c.ru, infostart.ru и StackOverflow (ru.stackoverflow.com):

Положительные аспекты (Pros):

  • Стандартизация UX: Свойство ПоказатьВопросПередЗаписью = Истина «из коробки» дает единое поведение во всех формах, пользователи привыкают к паттерну «Закрыл окно -> Спросило -> Сохранил».
  • Гибкость асинхронности: Переход на асинхронный ПоказатьВопрос в управляемых формах решил проблему «зависаний» веб-клиента и тонкого клиента при модальных окнах.
  • Интеграция с ПараметрыЗаписи: Возможность передавать структуру с флагами позволяет элегантно избегать рекурсии без использования глобальных переменных.

Проблемные зоны (Cons / Pain Points):

  • Двойной диалог: Новички часто забывают выключить ЭтаФорма.ПоказатьВопросПередЗаписью при кастомной логике, в результате пользователь видит два вопроса подряд: кастомный и стандартный платформы.
  • Сложность отладки асинхронности: Код после ПоказатьВопрос выполняется сразу, а логика «Да/Нет» уходит в отдельную процедуру-обработчик. Это ломает привычный линейный алгоритм мышления («Спросил -> Получил ответ -> Продолжил»).
  • Поведение в списке (Динамический список): При навигации стрелками по списку записей вопрос срабатывает на каждой смене строки, если форма предыдущей записи была изменена. Иногда это раздражает пользователей («Листаю список — а оно мне спрашивает»). Лечится отключением свойства для форм списка или проверкой ЭтаФорма.РежимРедактирования.
  • Отсутствие кастомизации стандартного диалога: Текст «Записать изменения?» жестко задан платформой (локализован), изменить его без полного отказа от стандартного механизма (написание своего в ПриЗакрытии) нельзя.

Типовые советы сообщества (Best Practices):

  1. Всегда используйте ПараметрыЗаписи для флага «Повторная попытка» при кастомных вопросах в ПередЗаписью.
  2. Для форм выбора/списков, где редактирование не основной сценарий, ставьте ПоказатьВопросПередЗаписью = Ложь.
  3. В веб-клиенте тестируйте модальные вопросы на мобильных устройствах — зум и скролл иногда ведут себя неожиданно.
  4. Используйте РежимДиалогаВопрос.ДаНетОтмена, если действие необратимо (например, проведение документа), чтобы дать пользователю «Дверь выхода» (Отмена).

Механизм «Показать вопрос перед записью» в 1С:Предприятие 8, это мощный инструмент защиты данных от случайной потери и инструмент внедрения бизнес-логики подтверждения. Грамотное сочетание свойства формы ПоказатьВопросПередЗаписью для стандартных сценариев и программного метода ПоказатьВопрос с асинхронной обработкой результата в событиях ПередЗаписью/ПриЗакрытии позволяет строить удобные и надежные интерфейсы.

Главное правило: В управляемых формах (клиентское приложение, веб-клиент) всегда используйте асинхронный вызов с ОписаниеОповещенияОЗавершении и обязательно устанавливайте Отказ = Истина в момент показа вопроса, если запись должна зависеть от ответа пользователя.

Для глубокого изучения рекомендуется обратиться к Синтакс-помощнику (разделы: «Форма», «ПоказатьВопрос», «ПараметрыЗаписиОбъекта», «ОписаниеОповещенияОЗавершении») доступному в конфигураторе (F1) или на портале devdocs.1c.ru.


Статья подготовлена на основе документации 1С:Предприятие 8.3 и практики разработки.

Актуальность контактной информации: . Перед визитом или звонком рекомендуется уточнить данные на официальном сайте 1С.