При интеграции 1С:Предприятия с интернет-магазинами часто возникает задача однозначной идентификации торговых предложений (модификаций товара). В типовой конфигурации 1С:Управление торговлей 11 реквизит Артикул принадлежит справочнику Номенклатура, идентифицируя товар в целом. Если на предприятии ведется учет по характеристикам (например, цвет, размер, фасовка), каждой комбинации требуется собственный уникальный код, понятный покупателю или внешним системам.
Проанализируем архитектурные ограничения типовой конфигурации и разберем практические способы решения этой задачи как штатными средствами, так и с помощью небольших доработок.
Выясним причину, по которой нельзя просто добавить реквизит или дополнительное свойство в саму характеристику. В 1С:Управление торговлей 11 в настройках справочника ВидыНоменклатуры для характеристик чаще всего выбран вариант Общие для этого вида номенклатуры. В этом случае владельцем элемента справочника ХарактеристикиНоменклатуры выступает не конкретный товар, а справочник ВидыНоменклатуры.
Это означает, что характеристика «Красный» или «Размер 42» является общей для сотен разных товаров. Если мы добавим значение артикула внутрь самой характеристики, оно станет общим для всех позиций данного вида номенклатуры. Таким образом, паре «Товар + Характеристика» требуется отдельный механизм сопоставления.
Рассмотрим самый удобный штатный способ, не требующий изменения конфигурации. В системе существует независимый регистр сведений ШтрихкодыНоменклатуры. В его структуре измерениями выступают:
Номенклатура (ссылка на товар);Характеристика (ссылка на характеристику);Упаковка (при необходимости).Ресурс регистра Штрихкод представляет собой строковое поле. Несмотря на название, в него не обязательно записывать исключительно стандартный 13-значный код EAN-13. Длина поля позволяет хранить буквенно-цифровые значения (например, формата Code 128).
Если для складского учета и кассы требуется отличать артикул от физического штрихкода на этикетке, можно использовать внутренние префиксы, например, A:ART-12345-RED. При этом типовой механизм обмена с сайтом в формате CommerceML умеет выгружать штрихкоды в составе товарных предложений, что позволяет сайту сразу использовать их в качестве уникального идентификатора модификации.
Если нет необходимости хранить артикул характеристик вручную, разберем алгоритмический путь. В протоколе CommerceML товарное предложение идентифицируется конструкцией вида Ид_Номенклатуры#Ид_Характеристики, где используются глобальные уникальные идентификаторы (GUID).
Посмотрим на пример формирования строкового артикула непосредственно в коде модуля выгрузки или подписки на событие. Мы можем сформировать читаемый артикул на лету, скомбинировав артикул номенклатуры и свойства характеристики:
Функция СформироватьАртикулПредложения(НоменклатураСсылка, ХарактеристикаСсылка) Экспорт
БазовыйАртикул = СокрЛП(НоменклатураСсылка.Артикул);
Если Не ЗначениеЗаполнено(ХарактеристикаСсылка) Тогда
Возврат БазовыйАртикул;
КонецЕсли;
// Получаем наименование или рабочий код характеристики
СуффиксХарактеристики = СокрЛП(ХарактеристикаСсылка.Наименование);
Возврат СтрШаблон("%1-%2", БазовыйАртикул, СуффиксХарактеристики);
КонецФункции
Если длина строки на стороне сайта строго ограничена или требуется компактный вид без пробелов и спецсимволов, можно использовать вычисление хеш-суммы MD5 от связки внутренних кодов или идентификаторов базы:
Хеширование = Новый ХешированиеДанных(ХешФункция.MD5);
Хеширование.Добавить(Строка(НоменклатураСсылка.УникальныйИдентификатор()));
Хеширование.Добавить(Строка(ХарактеристикаСсылка.УникальныйИдентификатор()));
УникальныйКод = СтрЗаменить(Строка(Хеширование.ХешСумма), " ", "");
Разберем вариант настройки нормативно-справочной информации, когда артикул характеристики требуется вводить вручную в пользовательском интерфейсе. В карточке Вид номенклатуры можно переключить настройку использования характеристик на Индивидуальные для номенклатуры.
При таком режиме владельцем записи в справочнике ХарактеристикиНоменклатуры становится конкретный элемент справочника Номенклатура. Добавив через механизм дополнительных реквизитов поле «Артикул характеристики», мы получим возможность указывать уникальный артикул для каждой модификации конкретного изделия.
Важное ограничение: изменить этот параметр в виде номенклатуры штатно можно только до тех пор, пока по нему не введены документы движения и складские остатки. Если учет уже ведется, переключение заблокировано платформой, и потребуется создавать новый вид номенклатуры с последующим переносом остатков.
Если конфигурацию нежелательно снимать с поддержки, но требуется гибкое хранение индивидуальных артикулов без изменения логики видов номенклатуры, оптимальным решением является добавление собственного регистра сведений через механизм расширений.
Создадим независимый непериодический регистр сведений АртикулыХарактеристикНоменклатуры со следующей структурой:
Номенклатура (тип СправочникСсылка.Номенклатура, ведущее, запрет незаполненных значений).Характеристика (тип СправочникСсылка.ХарактеристикиНоменклатуры).Артикул (тип Строка, длина от 25 до 50 символов).Такой подход полностью сохраняет типовую архитектуру общих характеристик и дает возможность переопределить заполнение XML-тега <Артикул> внутри блока <Предложение> при выгрузке на сайт, считывая точное значение для каждой пары из созданного регистра.