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