Каким образом разработчик может повлиять на стандартную проверку заполнения, выполняемую платформой?
Для этого у него есть два события. Одно событие – Обработка проверки заполнения на сервере – можно обработать в модуле формы. Другое событие – Обработка проверки заполнения – можно обработать в модуле прикладного объекта.
Все, что относится к проверкам реквизитов основного объекта формы, нужно обрабатывать в модуле объекта.
Обработчик в форме нужен потому, что форма может иметь данные, не относящиеся к объекту, и свои причины для проверки.
И тот и другой обработчик имеют два параметра: Отказ и ПроверяемыеРеквизиты.
В параметр ПроверяемыеРеквизиты платформа передает массив имен тех реквизитов, заполненность которых должна быть проверена.
Разработчик может поступить несколькими способами:
Листинг 3.41. Самостоятельная проверка всех реквизитов
Если Поставщик = Справочники.Поставщики.ПустаяСсылка() Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Необходимо заполнить поставщика!";
Сообщение.Поле = "Поставщик";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;
// Проверка остальных реквизитов
// ...
// Очистить массив проверяемых реквизитов, чтобы платформа
// не выполняла их автоматическую проверку.
ПроверяемыеРеквизиты.Очистить();
Примечание
Пример можно посмотреть в демонстрационной базе «Проверка заполнения», модуль документа Накладная, процедура ОбработкаПроверкиЗаполнения, снять комментарии для варианта «Пример 1».
Листинг 3.42. Частичная проверка заполненности реквизитов
Если Поставщик = Справочники.Поставщики.ПустаяСсылка() Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Необходимо заполнить поставщика!";
Сообщение.Поле = "Поставщик";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
Отказ = Истина;
// Удалить поставщика из массива проверяемых реквизитов.
ИндексПоляПоставщик = ПроверяемыеРеквизиты.Найти("Поставщик");
Если ИндексПоляПоставщик <> Неопределено Тогда
ПроверяемыеРеквизиты.Удалить(ИндексПоляПоставщик);
КонецЕсли;
КонецЕсли;
Примечание
Пример можно посмотреть в демонстрационной базе «Проверка заполнения», модуль документа Накладная, процедура ОбработкаПроверкиЗаполнения, снять комментарии для варианта «Пример 2».
Листинг 3.43. Добавление новых реквизитов для автоматической проверки
ПроверяемыеРеквизиты.Добавить("Комментарий");
Примечание
Пример можно посмотреть в демонстрационной базе «Проверка заполнения», модуль документа Накладная, процедура ОбработкаПроверкиЗаполнения, снять комментарии для варианта «Пример 3».
Листинг 3.44. Отказ от автоматической проверки реквизитов
ПроверяемыеРеквизиты.Очистить();
Примечание
Пример можно посмотреть в демонстрационной базе «Проверка заполнения», модуль документа Накладная, процедура ОбработкаПроверкиЗаполнения, снять комментарии для варианта «Пример 4».
Нужно заметить, что состав массива ПроверяемыеРеквизиты различен в обработчике формы и в обработчике объекта.
В обработчике объекта в этом массиве содержатся имена реквизитов объекта, которые требуют проверки (рис. 3.54).

Рис. 3.54. Массив реквизитов, проверяемых в объекте
В обработчике формы содержатся имена реквизитов формы, которые требуют проверки. И если есть реквизиты объекта, которые нужно проверять, то содержится имя основного реквизита формы, содержащего данные объекта (рис. 3.55).

Рис. 3.55. Массив реквизитов, проверяемых в форме
Параметр Отказ нужен для того, чтобы отказаться от записи объекта. Не от проверки заполненности, а именно от записи. Чтобы отказаться от проверки объектов, нужно очистить массив ПроверяемыеРеквизиты.
Если установить параметр Отказ при обработке события в объекте, то после выполнения обработчика Обработка проверки заполнения процесс записи будет прекращен (рис. 3.56).

Рис. 3.56. Использование параметра «Отказ» в обработчике объекта
Если параметр Отказ установить в форме, то дальнейшее поведение системы будет зависеть от того, есть ли в списке проверяемых реквизитов основной реквизит формы (см. рис. 3.55). Если есть, отработает проверка заполнения в объекте, и на этом все закончится (см. рис. 3.56).
Если нет (например, разработчик очистил этот список), то обработчик в модуле объекта вызываться не будет (рис. 3.57).

Рис. 3.57. Использование параметра «Отказ» в обработчике формы