Как запретить запись элемента справочника в 1С, если не заполнен дополнительный реквизит?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Различие между дополнительными реквизитами и дополнительными сведениями

Прежде чем приступать к написанию кода, важно прояснить архитектурное различие, которое часто становится камнем преткновения:

Если ваша задача требует обязательного заполнения свойства, убедитесь, что вы работаете именно с дополнительными реквизитами. В этом случае задача решается значительно проще.

Вариант 1: Использование механизмов БСП (Библиотеки стандартных подсистем)

Если ваша конфигурация использует типовую БСП, самым правильным и эффективным способом является настройка свойств через интерфейс программы. Это избавит вас от написания лишнего кода и обеспечит единообразие работы системы.

  1. Откройте справочник ПланыВидовХарактеристик (обычно это ДополнительныеРеквизитыИСведения).
  2. Найдите нужный элемент, соответствующий вашему дополнительному реквизиту.
  3. Установите флаг «Заполнять обязательно».

После активации этой настройки система 1С самостоятельно будет вызывать метод ПроверитьЗаполнение() при нажатии кнопки «Записать» или «Провести». Если поле не заполнено, пользователь увидит соответствующее предупреждение, и запись будет заблокирована стандартными средствами платформы.

Вариант 2: Программная проверка в модуле формы

В ситуациях, когда стандартных настроек БСП недостаточно или требуется специфическая логика, мы можем реализовать проверку в модуле формы объекта. Рассмотрим пошагово, как это сделать правильно, чтобы предотвратить запись нежелательных данных.

Для реализации проверки используем обработчик события ПередЗаписью формы. Этот обработчик выполняется на сервере перед тем, как объект будет отправлен в СУБД для сохранения. Важно помнить, что в контексте управляемой формы мы работаем с объектом ТекущийОбъект (или Объект).

Рассмотрим пример кода для проверки заполнения:


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

КонецПроцедуры

Почему важно использовать именно «Отказ»?

Использование параметра Отказ = Истина является ключевым моментом. Когда платформа вызывает событие ПередЗаписью, она открывает транзакцию. Установив значение Отказ = Истина, мы даем системе команду прервать транзакцию. В результате объект не попадет в базу данных, а пользователю будет выведено сообщение об ошибке. Это гарантирует целостность данных в вашей информационной системе.

Советы по разработке

  1. Различайте контексты: Помните, что в событии ПередЗаписью модуля объекта у вас уже есть сформированный объект в памяти. Это значит, что вы можете обращаться к его реквизитам напрямую, не дожидаясь завершения процесса записи.
  2. Интерфейс пользователя: Если вы хотите сделать работу пользователя более комфортной, лучше всего проверять заполнение полей на клиенте в обработчике ПередЗаписью формы. Если проверка не проходит, можно сразу выводить предупреждение через метод ПоказатьПредупреждение(), не вызывая серверный вызов, что экономит ресурсы системы.
  3. Метод ПроверитьЗаполнение(): Рекомендуем использовать стандартный метод ПроверитьЗаполнение(). Он не только проверяет обязательные поля, но и автоматически выделяет красным цветом элементы управления на форме, которые требуют внимания пользователя, что значительно упрощает навигацию по интерфейсу.

Используя предложенные подходы, вы сможете надежно контролировать процесс заполнения данных в справочниках 1С, обеспечивая высокое качество информации в вашей учетной системе.

← На главную