Как программно запретить запись документа в 1С:Предприятие 7.7?

Программист 1С v7.7
← На главную

В процессе разработки конфигураций на платформе 1С:Предприятие 7.7 часто возникает задача контроля корректности вводимых данных. Например, необходимо убедиться, что акцизные марки у товаров заполнены верно, и если это не так — запретить сохранение документа. Давайте разберем, как реализовать такой запрет, какие инструменты платформы для этого использовать и почему важно учитывать удобство пользователя.

Использование процедуры ПриЗаписи() и СтатусВозврата(0)

Для управления процессом записи в 1С 7.7 предусмотрено событие формы ПриЗаписи(). Когда пользователь нажимает кнопку «ОК» или «Записать», система вызывает эту процедуру. Чтобы отменить запись, нам необходимо воспользоваться методом СтатусВозврата(0).

Рассмотрим базовый пример реализации блокировки:


Процедура ПриЗаписи()
    // Проводим проверку условий
    Если УсловиеНеВыполнено Тогда
        Предупреждение("Запись невозможна: найдены ошибки!");
        СтатусВозврата(0); // Отменяем запись
        Возврат;
    КонецЕсли;
КонецПроцедуры

Важно понимать: если СтатусВозврата(0) вызван, система прекращает выполнение текущего действия, и данные не записываются в базу данных. Метод Возврат после установки статуса обязателен, чтобы выполнение кода процедуры прервалось немедленно.

Оптимизация проверки: пакетный контроль вместо цикличных предупреждений

Одной из распространенных ошибок является вызов Предупреждение() прямо внутри цикла обхода строк табличной части. Представьте документ на 300 строк: если 50 из них содержат ошибки, пользователю придется нажимать «ОК» 50 раз. Это крайне неэффективно и вызывает негатив.

Разберем, как сделать проверку более профессиональной и удобной для пользователя:


Процедура ПриЗаписи()
    ОчиститьОкноСообщений();
    НашлиОшибку = 0;
    
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
        // Проверяем условие (например, длину строки марки)
        Если СтрДлина(СокрЛП(Марка)) <> 68 Тогда
            Сообщить("Строка " + НомерСтроки + ": у товара " + Товар + " некорректная марка!", "!");
            НашлиОшибку = 1;
        КонецЕсли;
    КонецЦикла;
    
    Если НашлиОшибку = 1 Тогда
        Предупреждение("В документе найдены ошибки. Запись отменена.");
        СтатусВозврата(0);
        Возврат;
    КонецЕсли;
КонецПроцедуры

Такой подход позволяет пользователю один раз увидеть полный отчет об ошибках в окне сообщений, исправить их и только после этого повторно нажать кнопку сохранения.

Разделение логики: Запись vs Проведение

В профессиональной среде разработчиков 1С существует важное правило: разделяйте «Запись» и «Проведение». Рассмотрим аргументы «за» и «против» жесткой блокировки:

  1. Риски повреждения базы: Если вы запретите запись «черновика» документа, пользователь, который вынужден срочно завершить работу, может принудительно выключить компьютер, что в файловой системе 1С 7.7 часто приводит к повреждению файлов базы данных.
  2. Гибкость процесса: Позволяя сохранить документ с ошибками, вы даете пользователю возможность накопить данные и вернуться к ним позже, не теряя проделанную работу.
  3. Контроль при проведении: Строгие проверки лучше перенести в процедуру ОбработкаПроведения(). Таким образом, документ всегда можно будет записать, но система не позволит сформировать движения по регистрам (провести документ), пока все критические ошибки не будут устранены.

Используйте СтатусВозврата(0) в процедуре ОбработкаПроведения() аналогично тому, как мы делали это при записи — это позволит достичь баланса между строгим учетом и удобством работы в системе.

Заключение

Мы выяснили, что для отмены записи используется связка СтатусВозврата(0) и Возврат. Однако всегда стремитесь к тому, чтобы интерфейс программы оставался дружелюбным: не блокируйте работу пользователя без необходимости, выводите подробные списки ошибок в окно сообщений и старайтесь выносить строгие логические проверки на этап проведения документа.

← На главную