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

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

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

Метод 1: Использование сегментов номенклатуры

Это наиболее «чистый» типовой способ, не требующий программирования. Сегменты позволяют объединять товары в группы по произвольным признакам, при этом один товар может входить в неограниченное количество сегментов одновременно. Разберем, как это настроить.

Проанализируем алгоритм действий:

  1. Перейдем в раздел CRM и маркетинг — Настройки и справочники — Сегменты номенклатуры.
  2. Создадим новый сегмент. Например, «Товары для детей» или «Материалы ГОСТ 12345».
  3. В поле Способ формирования выберем «Формировать вручную» или «Периодически обновлять» (если можно задать жесткое правило отбора).
  4. Если выбран ручной способ, в карточке сегмента нажмем «Состав сегмента» и добавим нужные позиции Номенклатура.

Важный нюанс: Сегменты отлично подходят для отборов в отчетах. В большинстве стандартных отчетов УТ 11 можно добавить фильтр по полю «Номенклатура в сегменте». Однако стоит помнить об ограничении: вид сравнения «не равно» для сегментов работает специфически. Если товар входит в два сегмента, и вы исключаете один из них, товар все равно может попасть в выборку через второй сегмент.

Метод 2: Механизм характеристик номенклатуры

Если «множественность» значений определяет складской учет (нам важно знать остатки каждой вариации), следует использовать Характеристики. Разберем ситуацию, когда один вид номенклатуры (например, «Краски») имеет свойство «Цвет». Если мы продаем набор из трех цветов, мы можем создать характеристику «Красный-Синий-Зеленый».

Этот подход позволяет:

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

Метод 3: Расширение конфигурации и добавление табличных частей

Для программистов наиболее надежным способом реализации связи «многие ко многим» является использование Расширения. Мы можем добавить к справочнику Номенклатура новую табличную часть. Рассмотрим пример реализации.

Посмотрим на шаги реализации в конфигураторе:

  1. Создадим новое расширение.
  2. Добавим в него справочник Номенклатура.
  3. Создадим табличную часть, например, ДополнительныеТеги.
  4. В табличной части создадим реквизит Значение с типом СправочникСсылка.ДополнительныеРеквизиты или Строка.

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


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	НоменклатураДополнительныеТеги.Значение КАК Тег
    |ИЗ
    |	Справочник.Номенклатура.ДополнительныеТеги КАК НоменклатураДополнительныеТеги
    |ГДЕ
    |	НоменклатураДополнительныеТеги.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", ТекущаяНоменклатура);
РезультатЗапроса = Запрос.Выполнить();

Метод 4: Использование регистра сведений (архитектурный подход)

Если мы не хотим изменять структуру самого справочника Номенклатура, чтобы не замедлять его работу, проанализируем вариант с использованием внешнего регистра сведений. Это профессиональный подход, сохраняющий высокую производительность базы данных.

Создадим непериодический регистр сведений МножественныеСвойстваНоменклатуры со следующей структурой:

Такая структура позволяет одной номенклатуре назначить сколько угодно значений одного и того же свойства. Для визуализации на форме Номенклатура достаточно динамического списка, связанного с этим регистром по основной ссылке.

Метод 5: Использование дополнительных сведений

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

Рассмотрим пример кода для записи дополнительного сведения напрямую в регистр:


МенеджерЗаписи = РегистрыСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Объект = СсылкаНаНоменклатуру;
МенеджерЗаписи.Свойство = СсылкаНаСвойство;
МенеджерЗаписи.Значение = НовоеЗначение;
МенеджерЗаписи.Записать(Истина);

Важно: При использовании этого метода стандартная форма «Дополнительные сведения» будет отображать только последнюю запись. Вам потребуется создать свою форму или обработку для управления такими «множественными» сведениями.

Метод 6: Строковый реквизит и полнотекстовый поиск (Теги)

Если задача стоит исключительно в плоскости быстрого поиска товара менеджером, разберем простейший «костыль», который часто оказывается самым эффективным. Создадим обычный строковый дополнительный реквизит «Теги» или «Ключевые слова».

Алгоритм работы:

  1. Менеджер записывает значения через запятую: «ГОСТ 123, Красный, Металл, 2023».
  2. В форме подбора или списке номенклатуры используется стандартный поиск (Ctrl+F).
  3. Благодаря механизму ПолнотекстовыйПоиск, система мгновенно находит вхождения любых слов.

Ограничение: Этот метод не подходит для строгой аналитики (например, «построить отчет по остаткам всех товаров с тегом Красный»), так как для системы это просто одна длинная строка, а не набор ссылок.

Резюме и рекомендации

Выбор метода зависит от целей учета:

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

← На главную