Как настроить контроль заполнения реквизитов справочника перед записью в 1С 7.7?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При разработке и настройке конфигураций на платформе 1С 7.7 часто возникает необходимость запретить пользователю сохранять элемент справочника, если не заполнены обязательные поля (например, ИИН, КПП, наименование или артикул). Разберем, как правильно реализовать такую проверку в модуле формы элемента справочника и какие особенности платформы нужно учитывать.

Анализ проблемы и особенности платформы 1С 7.7

Разработчики, переходящие на 1С 7.7 с более новых платформ или других языков программирования, часто ищут события вроде ПередЗаписью(). Однако штатно в платформах 1С 7.7 процедура ПередЗаписью() отсутствует (она доступна только при использовании сторонних расширений, таких как FormEx.dll). Стандартным событием для интерактивной проверки данных формы перед отработкой записи является предопределенная процедура ПриЗаписи().

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

Решение: Использование процедуры ПриЗаписи()

Для выполнения интерактивной проверки перейдем в модуль формы элемента справочника и напишем обработчик события ПриЗаписи(). Проанализируем базовый пример кода:


Процедура ПриЗаписи()
    Если ПустоеЗначение(ИИН) = 1 Тогда
        Предупреждение("Заполните реквизит ИИН!");
        СтатусВозврата(0);
        Возврат;
    КонецЕсли;
КонецПроцедуры

Посмотрим, как работает этот алгоритм:

  1. При нажатии пользователем кнопки «ОК» или «Записать» платформа вызывает предопределенную процедуру ПриЗаписи().
  2. Функция ПустоеЗначение() проверяет, введены ли данные в реквизит ИИН. Если значение не заполнено, функция возвращает 1.
  3. Выводится интерактивное окно с предупреждением.
  4. Команда СтатусВозврата(0) отменяет дальнейшее выполнение штатного механизма записи элемента.
  5. Оператор Возврат завершает выполнение процедуры.

Улучшение проверки: удаление пробелов и фокусировка на поле

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


Процедура ПриЗаписи()
    // Проверяем заполненность строки с усечением пробелов
    Если ПустоеЗначение(СокрЛП(ИИН)) = 1 Тогда
        Предупреждение("Необходимо заполнить реквизит ""ИИН""!");
        Активизировать("ИИН"); // Помещаем курсор в поле ввода
        СтатусВозврата(0);
        Возврат;
    КонецЕсли;
    
    // При необходимости можно проверить длину строки
    Если СтрДлина(СокрЛП(ИИН)) <> 12 Тогда
        Предупреждение("Реквизит ""ИИН"" должен содержать ровно 12 цифр!");
        Активизировать("ИИН");
        СтатусВозврата(0);
        Возврат;
    КонецЕсли;
КонецПроцедуры

Важные ограничения и проверка при программной записи

Выясним важную особенность платформы 1С 7.7: предопределенная процедура ПриЗаписи() находится в **модуле формы** элемента. Это означает, что приведенная проверка срабатывает **только при интерактивных действиях пользователя** через форму справочника.

Если элемент справочника создается или изменяется программно из внешней обработки или документа (например, через методы Спр.Новый() и Спр.Записать()), код модуля формы не исполняется. Для обеспечения полноты контроля при программной записи рекомендуется:

  1. Выносить алгоритмы валидации в функции Глобального модуля (например, глПроверитьЗаполнениеИИН()).
  2. Вызывать процедуру проверки перед выполнением метода Записать() во всех внешних обработках и алгоритмах проведения документов.
← На главную