В процессе работы с программами семейства «1С:Предприятие» (и в частности с «1С:Управление торговлей 11») одной из частых задач является обеспечение качества вводимых данных. Пользователи нередко забывают указать важные реквизиты: номер телефона партнера, контактное лицо в заказе поставщику, ставку НДС или договор. Без этих сведений дальнейшие бизнес-процессы могут остановиться или привести к учетным ошибкам.
В этой статье мы подробно разберем, как сделать поля обязательными к заполнению, рассмотрим четыре классических уровня проверок в системе 1С, изучим современные "no-code" инструменты и выясним, как правильно вносить изменения, чтобы не усложнить последующие обновления конфигурации.
Прежде чем переходить к практической настройке, давайте разберемся, где именно и на каком этапе платформа 1С может контролировать ввод информации. Выделяют четыре основных уровня проверок:
Проверка заполнения. Если установить его в значение Выдавать ошибку, платформа автоматически будет контролировать его заполненность перед записью.ОбработкаПроверкиЗаполнения. Это самый гибкий способ, позволяющий задать любые сложные условия (например, делать поле обязательным только при выполнении определенных условий).На форумах часто встречается вопрос: «Я установил свойство реквизита "Выдавать ошибку" в конфигураторе, но база все равно дает записывать пустые документы. Почему это происходит?». Разберем эту ситуацию. Это может происходить по двум причинам. Во-первых, если запись выполняется программно без вызова метода ПроверитьЗаполнение(). Во-вторых, если в свойствах самой формы для элемента управления переопределен режим проверки или программный код формы принудительно отключает стандартную валидацию.
Если мы начнем напрямую менять свойства реквизитов в основной конфигурации, нам придется снять ее с полной поддержки («замочка»). В результате каждое последующее типовое обновление от 1С превратится в сложный ручной процесс сопоставления объектов. Чтобы избежать этого, мы будем использовать современный и безопасный механизм — Расширения конфигурации (файлы с расширением .cfe).
Рассмотрим по шагам, как сделать реквизиты обязательными с помощью расширения:
ЗаказПоставщику) или справочник (например, Контрагенты), кликнем по нему правой кнопкой мыши и выберем команду Добавить в расширение.КонтактноеЛицо).Проверка заполнения и переключим значение с Не проверять на Выдавать ошибку.Преимущество этого метода: Основная конфигурация остается на полной поддержке. Все последующие обновления 1С будут устанавливаться в автоматическом режиме, а наше расширение продолжит работать поверх новой версии программы, накладывая правила валидации реквизитов.
Часто бизнес-требования звучат сложнее, чем просто «сделать поле обязательным всегда». Например, нам может потребоваться сделать реквизит Договор обязательным к заполнению только в том случае, если сумма документа превышает 100 000 рублей, или если контрагент является юридическим лицом.
Для реализации такой логики нам потребуется написать небольшой программный код. Нам нужно определиться, где именно его размещать. Существует два основных обработчика событий:
ОбработкаПроверкиЗаполненияНаСервере в модуле формы.ОбработкаПроверкиЗаполнения в модуле объекта.Правильный методический подход платформы 1С:Предприятие 8.3 предписывает использовать Модуль Объекта. Проверка на уровне формы — это грубая ошибка, так как она сработает только при интерактивном вводе пользователем. Если документ будет создаваться на основании другого документа, загружаться через веб-сервис или мобильное приложение, код формы просто не запустится. Код в модуле объекта выполняется всегда, когда вызывается транзакция записи объекта с проверкой заполнения.
Давайте посмотрим на практический пример реализации такой проверки. Платформа 1С предоставляет нам предопределенный обработчик ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты). В этот метод передается массив ПроверяемыеРеквизиты, содержащий список имен тех полей, которые система планирует проверить.
Мы можем программно добавлять элементы в этот массив или удалять их оттуда в зависимости от условий.
Проанализируем следующий пример кода:
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
// Пример 1. Добавление реквизита в список обязательных при условии
Если ЭтотОбъект.СуммаДокумента > 100000 Тогда
// Если сумма больше 100 000 руб., то поле "Согласовал" становится обязательным
Если ПроверяемыеРеквизиты.Найти("Согласовал") = Неопределено Тогда
ПроверяемыеРеквизиты.Добавить("Согласовал");
КонецЕсли;
КонецЕсли;
// Пример 2. Исключение реквизита из списка обязательных
Если Не ЭтотОбъект.ЮрЛицо Тогда
// Если это физическое лицо, то ИНН проверять не требуется,
// даже если в конфигураторе для него настроена обязательность
ПозицияИНН = ПроверяемыеРеквизиты.Найти("ИНН");
Если ПозицияИНН <> Неопределено Тогда
ПроверяемыеРеквизиты.Удалить(ПозицияИНН);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Используя этот механизм в расширении конфигурации (через аннотацию &После или &Вместо для обработчика), мы можем гибко управлять поведением форм любой сложности.
В современных версиях «1С:Управление торговлей 11» карточка товара (справочник Номенклатура) имеет свои архитектурные особенности. Разработчики конфигурации внедрили динамическое управление видимостью и обязательностью реквизитов в зависимости от выбранного «Вида номенклатуры».
Если мы просто изменим свойство реквизита номенклатуры в конфигураторе на Выдавать ошибку, это может войти в конфликт со стандартными механизмами конфигурации. Правильный способ изменения правил для номенклатуры выглядит так:
ТаблицаНастроекРеквизитов в модуле менеджера справочника номенклатуры.&После или &Вместо.ЗаполнятьОбязательно = Истина.Также не забывайте о стандартном функционале Дополнительных реквизитов и сведений. Для свойств, которые вы создали самостоятельно в режиме «1С:Предприятие», программирование вообще не требуется. Достаточно открыть карточку дополнительного реквизита и установить флаг Заполнять обязательно.
Однако здесь существует нюанс кэширования настроек создания в виде номенклатуры. Если вы сначала включили обязательность заполнения дополнительного реквизита, а затем отключили ее, система может продолжать требовать его заполнения. Чтобы исправить эту коллизию, зайдите в настройки конкретного Вида номенклатуры, перейдите в раздел Настройки создания и принудительно скорректируйте там правила контроля заполнения полей.
Используя предложенные методики (настройку расширений для стандартных реквизитов, использование дополнительных реквизитов для пользовательских полей и программную фильтрацию массива ПроверяемыеРеквизиты), вы сможете настроить надежную проверку вводимых данных в 1С:Управление торговлей 11, сохранив при этом базу полностью обновляемой.