Как вывести дополнительный реквизит на форму документа в 1С:УТ 11?

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

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

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

Шаг 1. Включение объекта в определяемые типы

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

  1. Найдем в дереве метаданных ветку Общие — Определяемые типы.
  2. Откроем тип ВладелецДополнительныхСведений.
  3. Добавим в тип данных ссылку на наш документ (в нашем случае — ДокументСсылка.ВозвратТоваровПоставщику).

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

Шаг 2. Подготовка формы документа

Дополнительные реквизиты не выводятся на форму автоматически в случайное место. БСП ищет конкретный элемент формы, куда следует поместить сгенерированные поля. Разберем, что нужно сделать на форме документа:

  1. Откроем форму нужного документа (форму документа «Возврат товаров поставщику»).
  2. Добавим новую пустую группу (Обычная группа).
  3. Обязательно зададим ей строгое системное имя: ГруппаДополнительныеРеквизиты.

Именно в эту группу программный код БСП будет динамически добавлять элементы управления, включая нашу галочку «Не выгружать».

Шаг 3. Интеграция программного кода БСП

Теперь перейдем к самому важному — написанию кода. Нам необходимо инициировать работу подсистемы свойств при открытии, записи и проверке заполнения документа. Откроем модуль формы и добавим вызовы стандартов БСП в соответствующие обработчики событий.

Рассмотрим код для события ПриСозданииНаСервере:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Подготовка параметров для вывода доп. реквизитов
    ДополнительныеПараметры = УправлениеСвойствами.ПараметрыСвойствОбъекта();
    
    // Вызов процедуры БСП для генерации элементов на форме
    УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры);
    
КонецПроцедуры

Далее добавим обработку чтения данных, чтобы сохраненные свойства корректно подтягивались при открытии существующего документа:


&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
    
    УправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
    
КонецПроцедуры

Обеспечим сохранение наших дополнительных реквизитов перед записью документа:


&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    
    УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект);
    
КонецПроцедуры

Если для дополнительных реквизитов будут настроены правила обязательного заполнения, нам нужно перехватить их проверку:


&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
    
    УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
    
КонецПроцедуры

Шаг 4. Регистрация наборов свойств в базе данных

Даже если мы все сделали правильно в конфигураторе, вкладка с нашим документом в справочнике «Наборы дополнительных реквизитов и сведений» может быть неактивна или отсутствовать. Это происходит потому, что новые наборы свойств необходимо зарегистрировать.

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

/С ЗапуститьОбновлениеИнформационнойБазы

В качестве альтернативы, если вы не хотите перезапускать базу с ключами, можно создать простую внешнюю обработку и выполнить в ней следующий метод:

УправлениеСвойствамиСлужебный.СоздатьПредопределенныеНаборыСвойств();

Шаг 5. Проверка служебных реквизитов в режиме Предприятия

Посмотрим на еще один подводный камень, который часто упускают. У каждого элемента справочника наборов дополнительных реквизитов есть служебный реквизит Используется. Если его значение установлено в «Ложь», механизм для данного документа блокируется.

Выясним причину и исправим ее, если это произошло:

  1. Откроем справочник Наборы дополнительных реквизитов и сведений (в УТ 11 находится в разделе НСИ и администрирование -> Общие настройки).
  2. Если наш документ виден, но не дает добавить реквизиты, воспользуемся стандартной обработкой Групповое изменение реквизитов.
  3. В настройках обработки обязательно включим флаг «Показывать служебные реквизиты».
  4. Выберем наш набор для документа «Возврат товаров поставщику» и установим реквизиту Используется значение Истина.

Альтернативное решение: Дополнительные сведения

Проанализируем изначальную задачу: нам нужно было всего лишь добавить галочку «Не выгружать» для правил обмена. Стоит ли ради этого снимать документ с поддержки, добавлять табличные части и писать код?

В 1С существует отличная альтернатива — Дополнительные сведения. В отличие от реквизитов, сведения хранятся в отдельном независимом регистре сведений, а не в самом документе.

Рассмотрим преимущества этого подхода:

  1. Не нужно изменять структуру документа в конфигураторе.
  2. Не нужно писать код на форме.
  3. Достаточно только включить документ в определяемый тип ВладелецДополнительныхСведений.

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

← На главную