Как вывести дополнительные реквизиты номенклатуры в форму списка 1С

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

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

Рассмотрим детально, как реализовать эту задачу, начиная от простых пользовательских настроек и заканчивая программной доработкой конфигурации.

Способ 1. Настройка через пользовательский интерфейс (без программирования)

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

  1. Откроем форму списка номенклатуры в режиме «1С:Предприятие».
  2. Перейдем в меню «Еще» и выберем пункт «Изменить форму».
  3. В дереве элементов формы найдем объект «Список».
  4. Выделив элемент «Список», нажмем кнопку «Добавить поля».
  5. В появившемся окне развернем узел «Ссылка». Если в списке доступных полей присутствуют ваши дополнительные реквизиты, просто отметим их галочками.

Если в списке «Добавить поля» реквизиты отсутствуют, это означает, что в данной версии конфигурации динамический запрос списка не подготовлен для автоматического подтягивания дополнительных свойств. В этом случае перейдем к техническим методам реализации.

Способ 2. Модификация запроса динамического списка в Конфигураторе

Проанализируем ситуацию с точки зрения структуры базы данных. Дополнительные реквизиты не хранятся в основных колонках таблицы Справочник.Номенклатура. Они располагаются в подчиненной табличной части ДополнительныеРеквизиты. Чтобы вывести их в список, нам необходимо изменить текст запроса динамического списка.

Разберем по шагам, как добавить конкретный доп. реквизит (например, «Цвет») в форму списка:

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

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


ВЫБРАТЬ
    СправочникНоменклатура.Ссылка КАК Ссылка,
    СправочникНоменклатура.Код КАК Код,
    СправочникНоменклатура.Наименование КАК Наименование,
    ЕСТЬNULL(ДопРеквизитЦвет.Значение, "") КАК Цвет
ИЗ
    Справочник.Номенклатура КАК СправочникНоменклатура
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК ДопРеквизитЦвет
        ПО ДопРеквизитЦвет.Ссылка = СправочникНоменклатура.Ссылка
        И ДопРеквизитЦвет.Свойство = &СвойствоЦвет
ГДЕ
    НЕ СправочникНоменклатура.ЭтоГруппа

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Устанавливаем ссылку на конкретное свойство из Плана Видов Характеристик
    Список.Параметры.УстановитьЗначениеПараметра("СвойствоЦвет", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Цвет (Номенклатура)"));
КонецПроцедуры

Способ 3. Программное добавление колонок (для продвинутых разработчиков)

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

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

Посмотрим на пример кода, который добавляет колонку динамически:


// Добавление новой колонки в список программно
НоваяКолонка = Элементы.Добавить("СписокЦвет", Тип("ПолеФормы"), Элементы.Список);
НоваяКолонка.Вид = ВидПоляФормы.ПолеВвода;
НоваяКолонка.ПутьКДанным = "Список.Цвет";
НоваяКолонка.Заголовок = "Цвет номенклатуры";

Ограничения и производительность

Проанализируем потенциальные риски. При использовании ЛЕВОЕ СОЕДИНЕНИЕ в динамическом списке для большого количества дополнительных реквизитов (например, более 5-10) скорость работы списка может существенно снизиться. Это связано с тем, что СУБД приходится выполнять множественные соединения таблиц при каждом скроллинге или поиске.

Рассмотрим рекомендации по оптимизации:

Нюансы «Общих» дополнительных реквизитов

В 1С:Розница существует понятие «Общие реквизиты» и «Реквизиты, назначенные категории». Если реквизит является общим, его ID в системе неизменен, и его легко выводить в список. Если же для каждой категории номенклатуры созданы свои наборы свойств, то в общем списке номенклатуры колонка будет заполнена только для товаров соответствующих категорий. В остальных строках будет пусто, что является нормальным поведением системы.

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

← На главную