Как сделать поля обязательными к заполнению в 1С:Управление торговлей 11

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

В процессе работы с программами семейства «1С:Предприятие» (и в частности с «1С:Управление торговлей 11») одной из частых задач является обеспечение качества вводимых данных. Пользователи нередко забывают указать важные реквизиты: номер телефона партнера, контактное лицо в заказе поставщику, ставку НДС или договор. Без этих сведений дальнейшие бизнес-процессы могут остановиться или привести к учетным ошибкам.

В этой статье мы подробно разберем, как сделать поля обязательными к заполнению, рассмотрим четыре классических уровня проверок в системе 1С, изучим современные "no-code" инструменты и выясним, как правильно вносить изменения, чтобы не усложнить последующие обновления конфигурации.

Четыре уровня контроля заполнения реквизитов в 1С

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

  1. Уровень формы документа или справочника (интерактивный). Проверка срабатывает только тогда, когда пользователь работает непосредственно с экранной формой в режиме «1С:Предприятие». Если данные загружаются программно (например, через обработку импорта из Excel или интеграцию с сайтом), эта проверка будет полностью проигнорирована.
  2. Уровень реквизита объекта (свойство метаданных). В конфигураторе у каждого реквизита есть свойство Проверка заполнения. Если установить его в значение Выдавать ошибку, платформа автоматически будет контролировать его заполненность перед записью.
  3. Уровень проведения и регистров накопления/сведений. Контроль осуществляется в момент проведения документа в модуле проведения. Это жесткий бизнес-контроль: если нужные аналитики не заполнены, документ не запишется в регистры, даже если он был успешно сохранен как черновик.
  4. Уровень Модуля Объекта (программный). Проверка описывается на встроенном языке 1С в предопределенном обработчике ОбработкаПроверкиЗаполнения. Это самый гибкий способ, позволяющий задать любые сложные условия (например, делать поле обязательным только при выполнении определенных условий).

На форумах часто встречается вопрос: «Я установил свойство реквизита "Выдавать ошибку" в конфигураторе, но база все равно дает записывать пустые документы. Почему это происходит?». Разберем эту ситуацию. Это может происходить по двум причинам. Во-первых, если запись выполняется программно без вызова метода ПроверитьЗаполнение(). Во-вторых, если в свойствах самой формы для элемента управления переопределен режим проверки или программный код формы принудительно отключает стандартную валидацию.

Решение проблемы обновлений: Использование расширений конфигурации

Если мы начнем напрямую менять свойства реквизитов в основной конфигурации, нам придется снять ее с полной поддержки («замочка»). В результате каждое последующее типовое обновление от 1С превратится в сложный ручной процесс сопоставления объектов. Чтобы избежать этого, мы будем использовать современный и безопасный механизм — Расширения конфигурации (файлы с расширением .cfe).

Рассмотрим по шагам, как сделать реквизиты обязательными с помощью расширения:

  1. Откроем конфигуратор нашей базы данных.
  2. Перейдем в меню Конфигурация — Расширения конфигурации.
  3. Добавим новое расширение (укажем назначение «Адаптация» или «Дополнение»).
  4. Найдем в дереве основной конфигурации нужный объект (например, документ ЗаказПоставщику) или справочник (например, Контрагенты), кликнем по нему правой кнопкой мыши и выберем команду Добавить в расширение.
  5. Внутри расширения развернем ветку реквизитов добавленного объекта. Выберем интересующий нас параметр (например, КонтактноеЛицо).
  6. В окне свойств этого реквизита (вызывается по кнопке F4) найдем строку Проверка заполнения и переключим значение с Не проверять на Выдавать ошибку.
  7. Сохраним расширение и обновим конфигурацию базы данных.

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

Программный контроль: Модуль Объекта против Модуля Формы

Часто бизнес-требования звучат сложнее, чем просто «сделать поле обязательным всегда». Например, нам может потребоваться сделать реквизит Договор обязательным к заполнению только в том случае, если сумма документа превышает 100 000 рублей, или если контрагент является юридическим лицом.

Для реализации такой логики нам потребуется написать небольшой программный код. Нам нужно определиться, где именно его размещать. Существует два основных обработчика событий:

Правильный методический подход платформы 1С:Предприятие 8.3 предписывает использовать Модуль Объекта. Проверка на уровне формы — это грубая ошибка, так как она сработает только при интерактивном вводе пользователем. Если документ будет создаваться на основании другого документа, загружаться через веб-сервис или мобильное приложение, код формы просто не запустится. Код в модуле объекта выполняется всегда, когда вызывается транзакция записи объекта с проверкой заполнения.

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

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

Мы можем программно добавлять элементы в этот массив или удалять их оттуда в зависимости от условий.

Проанализируем следующий пример кода:


Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
    
    // Пример 1. Добавление реквизита в список обязательных при условии
    Если ЭтотОбъект.СуммаДокумента > 100000 Тогда
        // Если сумма больше 100 000 руб., то поле "Согласовал" становится обязательным
        Если ПроверяемыеРеквизиты.Найти("Согласовал") = Неопределено Тогда
            ПроверяемыеРеквизиты.Добавить("Согласовал");
        КонецЕсли;
    КонецЕсли;
    
    // Пример 2. Исключение реквизита из списка обязательных
    Если Не ЭтотОбъект.ЮрЛицо Тогда
        // Если это физическое лицо, то ИНН проверять не требуется,
        // даже если в конфигураторе для него настроена обязательность
        ПозицияИНН = ПроверяемыеРеквизиты.Найти("ИНН");
        Если ПозицияИНН <> Неопределено Тогда
            ПроверяемыеРеквизиты.Удалить(ПозицияИНН);
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

Используя этот механизм в расширении конфигурации (через аннотацию &После или &Вместо для обработчика), мы можем гибко управлять поведением форм любой сложности.

Настройка обязательных полей для Номенклатуры в УТ 11

В современных версиях «1С:Управление торговлей 11» карточка товара (справочник Номенклатура) имеет свои архитектурные особенности. Разработчики конфигурации внедрили динамическое управление видимостью и обязательностью реквизитов в зависимости от выбранного «Вида номенклатуры».

Если мы просто изменим свойство реквизита номенклатуры в конфигураторе на Выдавать ошибку, это может войти в конфликт со стандартными механизмами конфигурации. Правильный способ изменения правил для номенклатуры выглядит так:

  1. Контроль состава обязательных полей в УТ 11 выполняется через функцию ТаблицаНастроекРеквизитов в модуле менеджера справочника номенклатуры.
  2. Нам необходимо переопределить эту функцию в нашем расширении, используя аннотацию &После или &Вместо.
  3. В возвращаемой таблице настроек для нужной строки (соответствующей нашему реквизиту) мы должны программно установить флаг ЗаполнятьОбязательно = Истина.

Также не забывайте о стандартном функционале Дополнительных реквизитов и сведений. Для свойств, которые вы создали самостоятельно в режиме «1С:Предприятие», программирование вообще не требуется. Достаточно открыть карточку дополнительного реквизита и установить флаг Заполнять обязательно.

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

Используя предложенные методики (настройку расширений для стандартных реквизитов, использование дополнительных реквизитов для пользовательских полей и программную фильтрацию массива ПроверяемыеРеквизиты), вы сможете настроить надежную проверку вводимых данных в 1С:Управление торговлей 11, сохранив при этом базу полностью обновляемой.

← На главную