При работе с 1С:Управление торговлей редакции 11.4 многие пользователи и разработчики сталкиваются с ограничением: типовой механизм дополнительных реквизитов позволяет выбрать только одно значение для каждого свойства. Однако в реальной практике часто возникает необходимость указать несколько значений для одного реквизита — например, несколько цветов для одной модели одежды или несколько типов применимости для автозапчасти. Особенно остро этот вопрос встает при интеграции с интернет-магазинами (например, на базе 1С-Битрикс), где такие свойства используются для фильтрации товаров.
В этой статье мы подробно проанализируем ситуацию, выясним причины ограничений и разберем несколько способов решения этой задачи: от простых настроек до программной доработки системы.
Проанализируем архитектуру хранения данных. Все дополнительные реквизиты в УТ 11.4 (и других конфигурациях на базе БСП) хранятся в табличной части ДополнительныеРеквизиты объекта (справочника Номенклатура, Партнеры и т.д.). На уровне метаданных эта табличная часть имеет уникальный индекс по полю Свойство. Это означает, что система физически не позволяет записать две строки с одним и тем же свойством для одного объекта. При попытке программной записи нескольких строк БСП либо выдаст ошибку, либо "свернет" значения, оставив только последнее.
Рассмотрим способы, которыми можно обойти это ограничение.
Этот метод является самым простым и не требует программирования. Если набор значений свойства ограничен и меняется редко (например, "Цвет"), мы можем создать для каждого значения отдельный дополнительный реквизит.
Разберем по шагам:
Булево.Преимущества: работает "из коробки", не требует обновлений, корректно выгружается в типовой обмен CommerceML.
Недостатки: если значений много (например, 50-100), форма карточки товара станет перегруженной, а администрирование списка превратится в кошмар. Кроме того, создание новых значений требует прав на изменение состава дополнительных реквизитов.
Если множественность свойств напрямую влияет на складской учет (вы продаете именно синий шампунь или именно красный), правильным решением будет использование механизма Характеристики.
Проанализируем ситуацию: когда товар физически один, но имеет несколько признаков (например, шампунь "Для жирных и для ломких волос"), характеристики могут показаться избыточными. Однако, если политика компании позволяет, вы можете настроить характеристики так, чтобы одно свойство внутри характеристики принимало нужные значения. Но помните, что характеристики в 1С созданы для уникальных комбинаций, а не для перечисления набора тегов.
Это один из самых популярных методов среди разработчиков. Мы создаем один дополнительный реквизит с типом Строка, а визуальный выбор значений организуем через расширение. Для решения этой задачи можно использовать расширение для множественного выбора значений дополнительных реквизитов в УТ 11.4.
Рассмотрим алгоритм реализации:
Строка (неограниченная длина).ПриСозданииНаСервере формы карточки номенклатуры.Пример кода для программного заполнения такого реквизита может выглядеть так:
Процедура ЗаписатьМножественныйРеквизит(ОбъектНоменклатура, СвойствоСсылка, МассивЗначений)
Разделитель = "; ";
СтрокаЗначений = СтрСоединить(МассивЗначений, Разделитель);
НайденнаяСтрока = ОбъектНоменклатура.ДополнительныеРеквизиты.Найти(СвойствоСсылка, "Свойство");
Если НайденнаяСтрока = Неопределено Тогда
НайденнаяСтрока = ОбъектНоменклатура.ДополнительныеРеквизиты.Добавить();
НайденнаяСтрока.Свойство = СвойствоСсылка;
КонецЕсли;
НайденнаяСтрока.Значение = СтрокаЗначений;
КонецПроцедуры
Этот способ отлично подходит для интеграции с Битрикс. На стороне сайта достаточно написать небольшой скрипт (обработчик события OnSuccessCatalogImport1C), который будет разбивать строку по разделителю и заполнять множественное свойство инфоблока.
Этот путь самый сложный, но он позволяет сохранить использование справочника ЗначенияДополнительныхРеквизитов. Нам потребуется снять ограничение на уникальность свойства в табличной части.
Разберем основные этапы:
ДополнительныеРеквизиты у нужных объектов, убирая проверку уникальности (или игнорируя ее в коде).УправлениеСвойствами. Стандартный программный интерфейс БСП при отображении свойств на форме делает запрос и берет только первое попавшееся значение для каждого свойства.СписокЗначений или ПолеНадписи.Важный нюанс при таком подходе — работа отчетов. Стандартные отчета 1С (например, "Ведомость по товарам на складах"), если в них добавить группировку по такому свойству, начнут дублировать строки. Если у товара 3 цвета, то в отчете остаток по этому товару может увеличиться в 3 раза, так как SQL-запрос выполнит соединение с тремя строками таблицы дополнительных реквизитов.
Множественные свойства в 1С часто создаются именно ради интернет-магазина. Посмотрим на пример того, как данные должны выглядеть в файле обмена import.xml для Битрикса:
<ЗначенияСвойств>
<ЗначенияСвойства>
<Ид>Идентификатор_Свойства</Ид>
<Значение>Значение_1</Значение>
<Значение>Значение_2</Значение>
</ЗначенияСвойства>
</ЗначенияСвойств>
Если вы используете типовой модуль обмена от Битрикс, вам потребуется доработать функцию ЛогикаВыгрузкиСвойств в модуле обмена. Если в 1С вы выбрали вариант со "строкой через запятую", то в модуле обмена нужно будет добавить СтрРазделить() и в цикле сформировать несколько узлов Значение в XML-структуре. Это позволит сайту сразу "понять", что свойство множественное, и корректно отобразить его в фильтре.
Выяснив все технические детали, можно дать следующие рекомендации:
При любом выборе помните о производительности: большое количество дополнительных реквизитов может замедлить открытие карточки номенклатуры и работу списков товаров.