В данной статье подробно разбирается механизм «Показать вопрос перед записью» в системе «1С:Предприятие 8». Эта функциональность критически важна для обеспечения целостности данных и предотвращения случайного сохранения некорректной или незавершенной информации пользователем. Мы рассмотрим технические аспекты реализации, примеры кода, а также предоставим контактную информацию официальных каналов поддержки фирмы 1С для решения сложных вопросов.
Описание функционала
Что такое «Показать вопрос перед записью»?
В платформе «1С:Предприятие 8» существует встроенный механизм контроля записи объекта (документа, справочника, плана обмена и т.д.). Перед тем как данные будут физически записаны в базу данных, платформа может вывести модальное окно с вопросом пользователю: «Записать изменения?» (или пользовательский текст).
Это реализуется двумя основными способами:
- Свойство формы
ПоказатьВопросПередЗаписью(ShowConfirmationBeforeWrite), устанавливается вИстинадля автоматического вывода стандартного диалога платформы при попытке закрытия формы с измененными данными. - Программный вызов метода
ПоказатьВопрос(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С:Фреш.
- Партнерский департамент: Аттестация партнеров, маркетинговая поддержка, обмен лидами.
- Центр обучения и аттестации (1С:Образование): Курсы, экзамены «1С:Профессионал», «1С:Специалист», «1С:Эксперт».
- Служба сервисов (1С-ЭДО, 1С-Отчетность, 1С-Линк, 1С-Документооборот): Подключение, настройка, тарификация облачных сервисов.
- Юридический отдел / Договорной отдел: Работа с договорами, офертой, НДС, актами сверки.
Руководство фирмы 1С (Ключевые лица)
- Президент фирмы 1С: Борис Юрьевич Нуралиев (основатель, главный идеолог платформы).
- Вице-президенты / Директора направлений: Руководят блоками: платформа, прикладные решения, сервисы, партнерская сеть, образование, международное развитие.
- Прямой контакт с руководством для технических вопросов разработки не предусмотрен — общение ведется через техподдержку ИТС или партнерские каналы.
Отзывы разработчиков и пользователей о механизме «Вопрос перед записью»
Агрегация мнений с форумов forum.1c.ru, infostart.ru и StackOverflow (ru.stackoverflow.com):
Положительные аспекты (Pros):
- Стандартизация UX: Свойство
ПоказатьВопросПередЗаписью = Истина«из коробки» дает единое поведение во всех формах, пользователи привыкают к паттерну «Закрыл окно -> Спросило -> Сохранил». - Гибкость асинхронности: Переход на асинхронный
ПоказатьВопросв управляемых формах решил проблему «зависаний» веб-клиента и тонкого клиента при модальных окнах. - Интеграция с
ПараметрыЗаписи: Возможность передавать структуру с флагами позволяет элегантно избегать рекурсии без использования глобальных переменных.
Проблемные зоны (Cons / Pain Points):
- Двойной диалог: Новички часто забывают выключить
ЭтаФорма.ПоказатьВопросПередЗаписьюпри кастомной логике, в результате пользователь видит два вопроса подряд: кастомный и стандартный платформы. - Сложность отладки асинхронности: Код после
ПоказатьВопросвыполняется сразу, а логика «Да/Нет» уходит в отдельную процедуру-обработчик. Это ломает привычный линейный алгоритм мышления («Спросил -> Получил ответ -> Продолжил»). - Поведение в списке (Динамический список): При навигации стрелками по списку записей вопрос срабатывает на каждой смене строки, если форма предыдущей записи была изменена. Иногда это раздражает пользователей («Листаю список — а оно мне спрашивает»). Лечится отключением свойства для форм списка или проверкой
ЭтаФорма.РежимРедактирования. - Отсутствие кастомизации стандартного диалога: Текст «Записать изменения?» жестко задан платформой (локализован), изменить его без полного отказа от стандартного механизма (написание своего в
ПриЗакрытии) нельзя.
Типовые советы сообщества (Best Practices):
- Всегда используйте
ПараметрыЗаписидля флага «Повторная попытка» при кастомных вопросах вПередЗаписью. - Для форм выбора/списков, где редактирование не основной сценарий, ставьте
ПоказатьВопросПередЗаписью = Ложь. - В веб-клиенте тестируйте модальные вопросы на мобильных устройствах — зум и скролл иногда ведут себя неожиданно.
- Используйте
РежимДиалогаВопрос.ДаНетОтмена, если действие необратимо (например, проведение документа), чтобы дать пользователю «Дверь выхода» (Отмена).
Механизм «Показать вопрос перед записью» в 1С:Предприятие 8, это мощный инструмент защиты данных от случайной потери и инструмент внедрения бизнес-логики подтверждения. Грамотное сочетание свойства формы ПоказатьВопросПередЗаписью для стандартных сценариев и программного метода ПоказатьВопрос с асинхронной обработкой результата в событиях ПередЗаписью/ПриЗакрытии позволяет строить удобные и надежные интерфейсы.
Главное правило: В управляемых формах (клиентское приложение, веб-клиент) всегда используйте асинхронный вызов с ОписаниеОповещенияОЗавершении и обязательно устанавливайте Отказ = Истина в момент показа вопроса, если запись должна зависеть от ответа пользователя.
Для глубокого изучения рекомендуется обратиться к Синтакс-помощнику (разделы: «Форма», «ПоказатьВопрос», «ПараметрыЗаписиОбъекта», «ОписаниеОповещенияОЗавершении») доступному в конфигураторе (F1) или на портале devdocs.1c.ru.
Статья подготовлена на основе документации 1С:Предприятие 8.3 и практики разработки.
Актуальность контактной информации: . Перед визитом или звонком рекомендуется уточнить данные на официальном сайте 1С.