Описание проблемы
При приемке маркированной продукции необходимо убедиться, что поступившие марки, они же КиЗ (контрольные идентификационные знаки), DataMatrix соответствуют тем, что отправил поставщик в накладной через ЭДО. Перед приемкой марок необходимо сопоставить товар, который отправил поставщик с товаром в нашей информационной базе. Вот тут и кроется одна из основных проблем: значительная часть поставщиков присылает в ЭДО товары следующим образом, например:
1. F7020-3 (36-40) кроссовки - 3 пары; и список условных марок к ней:
а) 010466008301688421AAAAAAAAAAAAA
б) 010466008301689121BBBBBBBBBBBBBB
с) 010466008301689121CCCCCCCCCCCCC
В данном случае в одной позиции товара присылают несколько пар разных размеров, но как одну позицию в УПД и размер отдельно никак не выделен. При типовом сопоставлении номенклатуры с одним товаром нужно сопоставить такой же товар, если у вас в базе ведется так же, без разбивки на размеры, то все работает, но если вы в базе ведете учет остатков по размерам, а именно это способ с точки зрения учета наиболее информативный, то тут типовой способ не работает.
А зачем вообще сопоставлять, в чем суть?
Делается это в 1С для того, чтобы при считывании сканером марки можно было бы сразу получить номенклатуру и характеристику товара, тогда приемка товара сильно упростится, это работает, так как в марке зашит уникальный код товара - GTIN, который в марке находится с 3-его символа по 16-ый.
Для наших марок выше GTIN'ы:
а) 04660083016884
б) 04660083016891
в) 04660083016891
Получается, что поставщик под одним товаром нам прислал 2-а уникальных кода 04660083016884 и 04660083016891. В нашей базе это будет одна Номенклатура, но с 2-я характеристиками, которые отражают размер. Далее типовые конфигурации GTIN преобразуют в EAN13, отбрасывая первый 0 и полученный штрихкод присваивает позиции товара, в нашем случае к одному товару поставщика в типовом функционале никак не привязать две разные номенклатуры, иначе весь смысл теряется.
Как сейчас действует кладовщик? пришло поступление, из которого мы не может сделать нормальное сопоставление GTIN к нашим товарам, поэтому при считывании марки необходимо вручную сделать привязку к товару, которое определяется большей частью визуально по названию, на что тратится драгоценное время. Скажем, если приемка идет через терминал сбора данных, то сопоставлять придется на нем, на аппарате с небольшим экраном, что очень не удобно и тормозит работу, если бы сопоставление было выполнено, то на ТСД просто считывались бы марки и кладовщик-приемщик был бы чуть радостнее, а весь процесс шел бы быстрее.
Альтернативный вариант сопоставления товара
Как все-таки решить проблему сопоставления товара? Можно ориентироваться не на то описание, что нам прислал поставщик, а на описание в едином каталоге маркированных товаров, доступ к которому предоставляет все тот же Честный знак, там мы можем получить полное описание товара, главное что нам оттуда нужно - это название и размер. К примеру для приведенных выше GTIN будет такое описание из Честного знака:
1. 04660083016884 - F7020-3 (36-40) кроссовки, 36
2. 04660083016891 - F7020-3 (36-40) кроссовки, 37
Практически всегда мы будет получать товар, в котором есть и название и размер, исключение составляют только описание товара по упрощенной схеме маркировки остатков, там у нас не будет размера и приемку придется выполнятся с ручным сопоставлением марки к товару, но со временем такого товара будет все меньше и меньше. Поэтому выход мы нашли в том, что реализовали отдельную обработку сопоставления поступившего товара и номенклатуры учетной системы по описанию товара из Честного знака.
Запрос информации из Честного знака
В типовых конфигурациях уже есть реализованный функционал по запросу описания товара по GTIN и по марке, на удивление запрос по GTIN возвращает пустой результат, а по марке приходит то, что нужно. Пример кода для 1С:Розница, но работать должен во всех типовых конфигурациях 1С.
//Организация - для которой есть ЭЦП
КлючСессии = ИнтерфейсАвторизацииИСМПСлужебный.ПроверитьОбновитьКлючСессии(
ИнтерфейсИСМПКлиентСервер.ПараметрыЗапросаКлючаСессии(Организация));
// массив марок, для которых нужно получить описание
мСтроки = Новый Массив;
мСтроки.Добавить("010466008301688421AAAAAAAAAAAAA");
мСтроки.Добавить("010466008301689121BBBBBBBBBBBBBB");
МассивСтрокКодов = Новый Массив;
ДанныеКодовМаркировки = ШтрихкодированиеИС.ИнициализацияТаблицыДанныхКодовМаркировки();
Для Каждого Строка Из мСтроки Цикл
СтруктураЗначения = ШтрихкодированиеИС.НоваяСтруктураОбработкиШтрихкода(Строка, Перечисления.ВидыПродукцииИС.Обувь);
СтрокаКодаМаркировки = ДанныеКодовМаркировки.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаКодаМаркировки, СтруктураЗначения);
МассивСтрокКодов.Добавить(СтрокаКодаМаркировки);
КонецЦикла;
Результат = ИнтерфейсИСМП.СтатусыКодовМаркировки(МассивСтрокКодов, Организация);
Если Результат.РезультатОтправкиЗапроса.ОтветПолучен = Истина Тогда
// в переменной Ответ будет вся необходимая информация
Ответ = Результат.РезультатОтправкиЗапроса.ТекстВходящегоСообщенияJSON;
Иначе
//...
КонецЕсли;
Например, для марки с GTIN 04660083016884 будет такой ответ в формате JSON :
{"cis":"010466008301689121АААААААААААА",
"gtin":"04660083016891",
"producerName":"ООО \"СТРОББС\"",
"status":"INTRODUCED",
"emissionDate":1589557748011,
"packageType":"UNIT",
"ownerName":"Организация-Владелец",
"ownerInn":"ИНН Организации Владельца",
"productName":"F7020-3 (36-40) кроссовки, 37",
"brand":"STROBBS",
"prevCises":[],
"nextCises":[],
"countChildren":0,
"lastDocId":"7aa19475-9499-4649-8f37-c03376432554",
"introducedDate":1600646400000,
"agentName":"",
"lastStatusChangeDate":"2020-09-21T13:53:14.551Z",
"productGroup":"shoes"}
Нужное нам представление в поле productName. Таким образом, получаем следующий алгоритм:
1. При поступлении накладной по ЭДО вручную привязываем к документу поступления товара, которое создаем вместе с товаром вручную, возможно загрузкой. Либо если устраивает наименование из Честное знака, то товар можно генерировать по описанию из системы маркировки
2. Из файлов накладной ЭДО выделяем марки
3. По маркам получаем описание из Честного знака и формируем таблицу: GTIN из марки + описание из честного знака
4. Сводим товары из накладной с описанием из Честного знака и сопоставляем, результатом сопоставления будут записи в регистре сведения Штрихкоды вида
Номенклатура + Характеристика + сам штрихкод EAN13 (получен из GTIN).
5. Теперь при сканировании марки система сможет определить товарную позицию, а при выгрузке на ТСД будет выгружаться созданные нами Штрихкоды и точно так же ПО на ТСД (1С:Кладовщик, Магазин 15) смогут по марке находить товарную позицию и приемка сведется к сканированию только марок.
Тестировался вышеописанный подход на 1С:Розница 2.3.6.17, 1С:Кладовщик 1.0.18.1, Клеверенс Магазин 15 1.2.0.320. К публикации прикреплена обработка, которая по марке вернет описание из честного знака, для работы необходимо подключенная к 1С ЭЦП для доступа в Честный знак.