При разработке конфигураций на платформе 1С:Предприятие часто возникает задача контроля данных перед их сохранением в информационную базу. Одной из наиболее частых проблем является необходимость проверки заполнения дополнительных реквизитов. В этом материале мы подробно разберем, как реализовать такую проверку, учитывая архитектурные особенности платформы.
Прежде чем приступать к написанию кода, важно прояснить архитектурное различие, которое часто становится камнем преткновения:
ДополнительныеРеквизиты). Поскольку они являются частью объекта, мы имеем к ним доступ еще до момента записи элемента в базу данных.Если ваша задача требует обязательного заполнения свойства, убедитесь, что вы работаете именно с дополнительными реквизитами. В этом случае задача решается значительно проще.
Если ваша конфигурация использует типовую БСП, самым правильным и эффективным способом является настройка свойств через интерфейс программы. Это избавит вас от написания лишнего кода и обеспечит единообразие работы системы.
ПланыВидовХарактеристик (обычно это ДополнительныеРеквизитыИСведения).После активации этой настройки система 1С самостоятельно будет вызывать метод ПроверитьЗаполнение() при нажатии кнопки «Записать» или «Провести». Если поле не заполнено, пользователь увидит соответствующее предупреждение, и запись будет заблокирована стандартными средствами платформы.
В ситуациях, когда стандартных настроек БСП недостаточно или требуется специфическая логика, мы можем реализовать проверку в модуле формы объекта. Рассмотрим пошагово, как это сделать правильно, чтобы предотвратить запись нежелательных данных.
Для реализации проверки используем обработчик события ПередЗаписью формы. Этот обработчик выполняется на сервере перед тем, как объект будет отправлен в СУБД для сохранения. Важно помнить, что в контексте управляемой формы мы работаем с объектом ТекущийОбъект (или Объект).
Рассмотрим пример кода для проверки заполнения:
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
// Перебираем табличную часть дополнительных реквизитов
Для Каждого СтрокаРеквизита Из ТекущийОбъект.ДополнительныеРеквизиты Цикл
// Здесь необходимо указать условие поиска вашего конкретного реквизита
Если СтрокаРеквизита.Свойство.Заголовок = \"Тип договора\" Тогда
Если ЗначениеЗаполнено(СтрокаРеквизита.Значение) = Ложь Тогда
Сообщить(\"Необходимо заполнить обязательный дополнительный реквизит: Тип договора!\");
Отказ = Истина; // Прерываем транзакцию записи
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Использование параметра Отказ = Истина является ключевым моментом. Когда платформа вызывает событие ПередЗаписью, она открывает транзакцию. Установив значение Отказ = Истина, мы даем системе команду прервать транзакцию. В результате объект не попадет в базу данных, а пользователю будет выведено сообщение об ошибке. Это гарантирует целостность данных в вашей информационной системе.
ПередЗаписью модуля объекта у вас уже есть сформированный объект в памяти. Это значит, что вы можете обращаться к его реквизитам напрямую, не дожидаясь завершения процесса записи.ПередЗаписью формы. Если проверка не проходит, можно сразу выводить предупреждение через метод ПоказатьПредупреждение(), не вызывая серверный вызов, что экономит ресурсы системы.ПроверитьЗаполнение(). Он не только проверяет обязательные поля, но и автоматически выделяет красным цветом элементы управления на форме, которые требуют внимания пользователя, что значительно упрощает навигацию по интерфейсу.Используя предложенные подходы, вы сможете надежно контролировать процесс заполнения данных в справочниках 1С, обеспечивая высокое качество информации в вашей учетной системе.