В типовой конфигурации «1С:Управление торговлей 11» пользователи часто сталкиваются с ограничением: стандартные дополнительные реквизиты позволяют выбрать только одно значение из списка. Однако в реальном бизнесе одна позиция Номенклатура может обладать набором однотипных свойств. Например, один и тот же товар может соответствовать нескольким ГОСТам, подходить к разным моделям оборудования или содержать несколько цветов в одном наборе. Рассмотрим подробнее все доступные методы решения этой задачи — от штатных настроек до архитектурных изменений в коде.
Это наиболее «чистый» типовой способ, не требующий программирования. Сегменты позволяют объединять товары в группы по произвольным признакам, при этом один товар может входить в неограниченное количество сегментов одновременно. Разберем, как это настроить.
Проанализируем алгоритм действий:
Номенклатура.Важный нюанс: Сегменты отлично подходят для отборов в отчетах. В большинстве стандартных отчетов УТ 11 можно добавить фильтр по полю «Номенклатура в сегменте». Однако стоит помнить об ограничении: вид сравнения «не равно» для сегментов работает специфически. Если товар входит в два сегмента, и вы исключаете один из них, товар все равно может попасть в выборку через второй сегмент.
Если «множественность» значений определяет складской учет (нам важно знать остатки каждой вариации), следует использовать Характеристики. Разберем ситуацию, когда один вид номенклатуры (например, «Краски») имеет свойство «Цвет». Если мы продаем набор из трех цветов, мы можем создать характеристику «Красный-Синий-Зеленый».
Этот подход позволяет:
Выясним причину, почему это не всегда удобно: если нам нужно просто пометить товар тегами для поиска, создание сотен характеристик перегрузит справочник и усложнит работу менеджеров по продажам.
Для программистов наиболее надежным способом реализации связи «многие ко многим» является использование Расширения. Мы можем добавить к справочнику Номенклатура новую табличную часть. Рассмотрим пример реализации.
Посмотрим на шаги реализации в конфигураторе:
Номенклатура.ДополнительныеТеги.Значение с типом СправочникСсылка.ДополнительныеРеквизиты или Строка.Для удобства пользователя на форму элемента номенклатуры можно вывести эту таблицу или поле со списком. Пример программного получения всех значений для анализа в коде:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НоменклатураДополнительныеТеги.Значение КАК Тег
|ИЗ
| Справочник.Номенклатура.ДополнительныеТеги КАК НоменклатураДополнительныеТеги
|ГДЕ
| НоменклатураДополнительныеТеги.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", ТекущаяНоменклатура);
РезультатЗапроса = Запрос.Выполнить();
Если мы не хотим изменять структуру самого справочника Номенклатура, чтобы не замедлять его работу, проанализируем вариант с использованием внешнего регистра сведений. Это профессиональный подход, сохраняющий высокую производительность базы данных.
Создадим непериодический регистр сведений МножественныеСвойстваНоменклатуры со следующей структурой:
Номенклатура (тип СправочникСсылка.Номенклатура).Свойство (тип ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения).Значение (тип Характеристика.ДополнительныеРеквизитыИСведения).Такая структура позволяет одной номенклатуре назначить сколько угодно значений одного и того же свойства. Для визуализации на форме Номенклатура достаточно динамического списка, связанного с этим регистром по основной ссылке.
В отличие от дополнительных реквизитов, Дополнительные сведения хранятся в отдельном регистре сведений ДополнительныеСведения. Хотя штатный интерфейс предполагает выбор одного значения, технически в этот регистр можно записать несколько строк для одного объекта Номенклатура.
Рассмотрим пример кода для записи дополнительного сведения напрямую в регистр:
МенеджерЗаписи = РегистрыСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Объект = СсылкаНаНоменклатуру;
МенеджерЗаписи.Свойство = СсылкаНаСвойство;
МенеджерЗаписи.Значение = НовоеЗначение;
МенеджерЗаписи.Записать(Истина);
Важно: При использовании этого метода стандартная форма «Дополнительные сведения» будет отображать только последнюю запись. Вам потребуется создать свою форму или обработку для управления такими «множественными» сведениями.
Если задача стоит исключительно в плоскости быстрого поиска товара менеджером, разберем простейший «костыль», который часто оказывается самым эффективным. Создадим обычный строковый дополнительный реквизит «Теги» или «Ключевые слова».
Алгоритм работы:
ПолнотекстовыйПоиск, система мгновенно находит вхождения любых слов.Ограничение: Этот метод не подходит для строгой аналитики (например, «построить отчет по остаткам всех товаров с тегом Красный»), так как для системы это просто одна длинная строка, а не набор ссылок.
Выбор метода зависит от целей учета:
Сегменты.Характеристики.Регистр сведений или Табличную часть через расширение.Проанализировав ситуацию, мы видим, что штатной «галочки» для множественного выбора в дополнительных реквизитах УТ 11 не существует, так как это противоречит логике реляционных баз данных. Тем не менее, комбинируя типовые инструменты (сегменты) и возможности платформы (расширения), можно решить задачу любой сложности.