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

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

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

Способ 1: Добавление обычного реквизита в конфигурацию

Если ваша конфигурация позволяет вносить изменения в структуру метаданных (то есть она не находится на «полной поддержке» или вы готовы снять её с неё), самым надежным и простым методом будет добавление обычного реквизита в Справочник.Номенклатура.

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

Этот метод является наиболее производительным, так как данные хранятся непосредственно в таблице базы данных объекта и не требуют дополнительных запросов при открытии формы.

Способ 2: Программное добавление реквизита формы через расширение

Если конфигурация находится на поддержке и менять её структуру нельзя, воспользуйтесь механизмом Расширений. Мы можем программно создать реквизит формы и заполнить его данными при инициализации формы. Для этого используем расширение стандартного метода ПриСозданииНаСервере.

Разберем логику действий:

  1. Создайте расширение для конфигурации.
  2. Создайте обработчик события ПриСозданииНаСервере для формы документа.
  3. Используйте метод ИзменитьРеквизиты() для добавления программного реквизита в форму.
  4. Добавьте элемент на форму, используя Элементы.Добавить(), и свяжите его с созданным реквизитом.
  5. Заполните данные для всех строк табличной части одним оптимизированным запросом.

Посмотрим на пример реализации такого кода:


&После("ПриСозданииНаСервере")
Процедура исПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка, ДополнительныеПараметры)
    Если НЕ Форма.Элементы.Найти("Товары") = Неопределено Тогда
        нРеквизиты = Новый Массив;
        нРеквизиты.Добавить(Новый РеквизитФормы("ДопРеквизит", Новый ОписаниеТипов("Строка"), "Объект.Товары", "ДопРеквизит", Ложь));
        Форма.ИзменитьРеквизиты(нРеквизиты);
        
        нЭлемент = Форма.Элементы.Добавить("ДопРеквизит", Тип("ПолеФормы"), Форма.Элементы.Товары);
        нЭлемент.Вид = ВидПоляФормы.ПолеВвода;
        нЭлемент.ПутьКДанным = "Объект.Товары.ДопРеквизит";
        нЭлемент.ТолькоПросмотр = Истина;
    КонецЕсли;
КонецПроцедуры

Как обеспечить актуальность данных?

Важно помнить, что программно созданный реквизит не «знает», что его нужно обновить при смене номенклатуры в строке документа. Чтобы данные всегда были актуальными:

  1. Создайте обработчик события ПриИзменении для колонки Номенклатура в табличной части.
  2. Внутри обработчика выполните запрос к Справочник.Номенклатура.ДополнительныеРеквизиты, чтобы получить значение нужного свойства для выбранной номенклатуры.
  3. Присвойте полученное значение в программно созданный реквизит текущей строки: Элементы.Товары.ТекущиеДанные.ДопРеквизит = ЗначениеСвойства;.

Важные рекомендации

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

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

← На главную