В процессе разработки конфигураций на платформе 1С:Предприятие 7.7 часто возникает задача контроля корректности вводимых данных. Например, необходимо убедиться, что акцизные марки у товаров заполнены верно, и если это не так — запретить сохранение документа. Давайте разберем, как реализовать такой запрет, какие инструменты платформы для этого использовать и почему важно учитывать удобство пользователя.
Для управления процессом записи в 1С 7.7 предусмотрено событие формы ПриЗаписи(). Когда пользователь нажимает кнопку «ОК» или «Записать», система вызывает эту процедуру. Чтобы отменить запись, нам необходимо воспользоваться методом СтатусВозврата(0).
Рассмотрим базовый пример реализации блокировки:
Процедура ПриЗаписи()
// Проводим проверку условий
Если УсловиеНеВыполнено Тогда
Предупреждение("Запись невозможна: найдены ошибки!");
СтатусВозврата(0); // Отменяем запись
Возврат;
КонецЕсли;
КонецПроцедуры
Важно понимать: если СтатусВозврата(0) вызван, система прекращает выполнение текущего действия, и данные не записываются в базу данных. Метод Возврат после установки статуса обязателен, чтобы выполнение кода процедуры прервалось немедленно.
Одной из распространенных ошибок является вызов Предупреждение() прямо внутри цикла обхода строк табличной части. Представьте документ на 300 строк: если 50 из них содержат ошибки, пользователю придется нажимать «ОК» 50 раз. Это крайне неэффективно и вызывает негатив.
Разберем, как сделать проверку более профессиональной и удобной для пользователя:
Процедура ПриЗаписи()
ОчиститьОкноСообщений();
НашлиОшибку = 0;
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
// Проверяем условие (например, длину строки марки)
Если СтрДлина(СокрЛП(Марка)) <> 68 Тогда
Сообщить("Строка " + НомерСтроки + ": у товара " + Товар + " некорректная марка!", "!");
НашлиОшибку = 1;
КонецЕсли;
КонецЦикла;
Если НашлиОшибку = 1 Тогда
Предупреждение("В документе найдены ошибки. Запись отменена.");
СтатусВозврата(0);
Возврат;
КонецЕсли;
КонецПроцедуры
Такой подход позволяет пользователю один раз увидеть полный отчет об ошибках в окне сообщений, исправить их и только после этого повторно нажать кнопку сохранения.
В профессиональной среде разработчиков 1С существует важное правило: разделяйте «Запись» и «Проведение». Рассмотрим аргументы «за» и «против» жесткой блокировки:
ОбработкаПроведения(). Таким образом, документ всегда можно будет записать, но система не позволит сформировать движения по регистрам (провести документ), пока все критические ошибки не будут устранены.Используйте СтатусВозврата(0) в процедуре ОбработкаПроведения() аналогично тому, как мы делали это при записи — это позволит достичь баланса между строгим учетом и удобством работы в системе.
Мы выяснили, что для отмены записи используется связка СтатусВозврата(0) и Возврат. Однако всегда стремитесь к тому, чтобы интерфейс программы оставался дружелюбным: не блокируйте работу пользователя без необходимости, выводите подробные списки ошибок в окно сообщений и старайтесь выносить строгие логические проверки на этап проведения документа.