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