Маркировка обуви, шин, текстиля, ювелирки, парфюма -
для всех нетабачных и немолочных продукций посвящается
Для внедренца
1. Основной сайт, откуда черпать информацию и инструкции:
https://честныйзнак.рф/business/projects/footwear/
2. Страница с методическими инструкциями по теме Маркировки на сайте ИТС - только для партнеров фирмы 1С https://its.1c.ru/db/marking
3. Что значит аббревиатура ЦРПТ и что такое Честный знак - читайте в личном блоге компании ЦРПТ на Хабр https://habr.com/ru/company/chestnyznak/blog/467851/
ЦРПТ - это компания (организация), которая разработала программу "Честный знак". По закону всем участникам оборота обуви придется работать именно с этой организацией и именно через эту программу.
4. Дополнительные примеры, шаблоны файлов xml вы сможете скачать на сайте Честного знака в разделе Инструкций только после регистрации в качестве участника оборота обуви.
5. КМ = КИ + КХ
Код маркировки (КМ) состоит из Кода идентификации (КИ) и Крипто-хвоста (КХ), так называемого Кода проверки организации - см. п. 23 ниже.
или см. раздел "Почему код нельзя подделать" https://честныйзнак.рф/vopros-otvet/
6. Как хранится КМ в 1С?
Хранится только КИ = код GTIN + код Серии. Код GTIN и код Серии присваивает Честный знак. Ваша задача в будущем - сопоставить номенклатуре соответствующий код GTIN и код Серии. В 1С это реализовано через справочник "ШтрихкодыУпаковокТоваров".
7. Если вдруг столкнетесь с тем, что КМ обуви сканер считывает, а КМ с пачки сигарет не считывает, не пугайтесь. Или к примеру, при сканировании кода маркировки в текстовый блокнот с PDF-картинки - у вас выходит кириллица. Переключите раскладку в английскую клавиатуру. Список подходящих сканеров смотрите ниже по ссылке:
Проверка сканера 2D: https://честныйзнак.рф/barcode/
8. Рекомендации по считыванию маркированных кодов для сканера + особенности маркировки табачной продукции: https://cl.atol.ru/f/9bb14cfd79/
9. Создание картинки из кода маркировки КМ и тестирование онлайн
https://ru.online-qrcode-generator.com/Barcode-Generator
10. Видео-лекции на сайте ИТС.1С, которые поясняют суть маркировки:
https://its.1c.ru/video/lector20191128-1
https://its.1c.ru/video/lector20191128-2
https://its.1c.ru/video/lector20191128-3
https://its.1c.ru/video/lector20191128-4
https://its.1c.ru/video/lector20191128-5
https://its.1c.ru/video/lector20191128-6
https://its.1c.ru/video/lector20200514-6
11. Планы разработчиков фирмы 1С по обновлению типовых в контексте Маркировки обуви
https://v8.1c.ru/lawmonitor/markirovka/
12. Для тестирования кодов маркировки обуви установите на мобильный телефон сразу три приложения:
- Pharma Trax Scanner
- приложение Честный Знак
- ЧекМарк от Клеверенс
- приложения могут по-разному отображать считанный ДатаМатрикс-код.
13. Методическая инструкция по интеграции УТ 11 с системой Честный Знак
https://its.1c.ru/db/ut114doc#bookmark:StateIS:StateIS - статьи переведены в разряд архивных, но полезного в них много
https://its.1c.ru/db/ut115doc#bookmark:Integrations:Integrations - актуальные статьи и видео
14. Методическая инструкция по интеграции УТ 10.3 с системой Честный Знак
https://its.1c.ru/db/metod81#content:7478:hdoc
15. Методическая инструкция по интеграции УНФ с системой Честный Знак
https://its.1c.ru/db/metod81#content:7456:hdoc
16. Методическая инструкция по интеграции Розницы с системой Честный Знак
https://its.1c.ru/db/metod81#content:7474:hdoc
17. Вопрос: редактировать ли имеющуюся этикетку с ценой и штрихкодом EAN-13? нужно ли вставить в этот макет этикетки код ДатаМатрикс? или код ДатаМатрикс напечатать отдельной этикеткой - оставить обе этикетки на товаре?
Ответ: ЦРПТ и методисты фирмы 1С рекомендуют печатать код маркировки обуви (то есть ДатаМатрикс-код) отдельной этикеткой и не привязывать к обычной этикетке (со штрихкодом EAN-13).
Причины две:
1) на этикетке с ДатаМатрикс-кодом должны быть указаны код товара GTIN и серийный номер - который присваивает Честный Знак. Для тех случаев, когда при продаже ДатаМатрикс-код не считывается сканером, тогда необходимо внести код товара GTIN и серийный номер вручную. То есть код товара GTIN и серийный номер должны быть отражены на этикетке.
2) второй момент, если у вас изменилась цена на обувь, то вам придется распечатать заново этикетку с ценой. А ЦРПТ в своих рекомендациях запрещает повторно печатать ДатаМатрикс-код. Методисты 1С в свою очередь в своих механизмах заблокировали повторную печать ДатаМатрикс-код (по крайней мере, анонсировали так, а как по факту и в каких конфигурациях - проверяйте, пож-та, сами). Запрет наложили, чтобы не было проблем: что дважды распечатали и наклеили один ДатаМатрикс-код на разные коробки.
18. Пояснения, что такое штрихкод, что такое датамарикс-код, что такое QR-код.
Нужно понимать, что если ваш штрихкод определяется в приложениях из п.12 как Data Matrix, значит он не содержит символов-разделителей GS, и не начинается с символов FNC1 (так называемый префикс).
С другой стороны, если бы он содержал и символы-разделители GS и начинался с префикса FNC1, то он должен определяться как GS1 Data Matrix.
GS1 Data Matrix - это тоже ДатаМатрикс-код, но только другого типа.
QR-код - тоже двумерный код, как ДатаМатрикс, только другого типа.
Все это тоже условно называется штрихкодами - только штрихов нет и только двумерные, а не одномерные, как мы привыкли для EAN-13.
19. Есть статьи по настройке программы 1С в открытых источниках:
https://buh.ru/articles/documents/97590/
20. Серии в учетных программах (УТ, КА, ЕРП, УНФ, Розница) это не тоже самое, что серии в Честном знаке !
Серии в УТ - предназначены для учета рекламаций по серийным номерам товаров, для учета товаров по срокам годности, для учета остатков товаров в рулонах, бухтах, отрезках и т.д., для учета себестоимости товаров с разными сериями.
Серия в Честном знаке - это часть кода маркировки - для учета уникальности каждой пары обуви (каждой коробки).
Нужно ли их как-то связывать? Вопрос открытый.
Для размышления:
- для учета КМ меховых изделий используются серии - серия идентифицирует экземпляр товара, имеющий уникальный серийный номер, в данном случае им будет номер КиЗ (контрольный идентификационный знак, тоже самое что и код маркировки). Дополнительно в серии указывается наличие RFID метки.
- для учета алкогольной продукции серии используются в ряде сценариев, но в других сценариях могут не использоваться. Для идентификации отдельной единицы алкогольной продукции (кода маркировки) серии не применяются – для этого в подсистеме взаимодействия с ЕГАИС есть собственный механизм поштучного учета маркируемой продукции.
- продукция, подконтрольная ветеринарному надзору учитывается в разрезе партий – записей складского журнала в терминах ВетИС. В ряде сценариев для этих целей используются серии - идентифицирующие партию, плюс дополнительно в серию указываются дополнительные сведения в виде отдельных полей.
Для разработчика
Представленный код и рекомендации - это плод моих самостоятельных изысканий и тестирований. Примеры не претендуют на полноту и универсальность.
1. Код маркировки состоит из 4 групп, все группы разделены между собой или цифрами 01, 21, 91, или спецсимволами. Код GTIN и серийный номер можно получить из длиннющего кода маркировки, получаемого или из файла csv или при сканировании этикетки товара.
На входе у вас текстовый код маркировки с криптохвостом вашей организации. На выходе получаете 4 группы символов: код GTIN, серию, ключ и код проверки. Алгоритм представлен для товаров обувной продукции, но не для логистических упаковок.
Функция РазложитьКодМаркировкиНаГруппы(Знач КМ)
МассивГрупп = Новый Массив;
УдалитьСимволРазделителяГрупп(КМ);
Если Лев(КМ, 2) = "01" Тогда
GTIN = Сред(КМ, 3, 14);
МассивГрупп.Добавить(GTIN); //первый элемент массива
КМ = Прав(КМ, СтрДлина(КМ)-16);
УдалитьСимволРазделителяГрупп(КМ);
Если Лев(КМ, 2) = "21" Тогда
СерийныйНомер = Сред(КМ, 3, 13);
МассивГрупп.Добавить(СерийныйНомер); //второй элемент массива
КМ = Прав(КМ, СтрДлина(КМ) - 15);
УдалитьСимволРазделителяГрупп(КМ);
Если Лев(КМ, 2) = "91" Тогда
КлючПроверки = Сред(КМ, 3, 4);
МассивГрупп.Добавить(КлючПроверки); //третий элемент массива
КМ = Прав(КМ, СтрДлина(КМ) - 6);
УдалитьСимволРазделителяГрупп(КМ);
Если Лев(КМ, 2) = "92" Тогда
КодПроверки = Сред(КМ, 3, 88);
МассивГрупп.Добавить(КодПроверки); //четвертый элемент массива
КМ = Прав(КМ, СтрДлина(КМ) - 90);
УдалитьСимволРазделителяГрупп(КМ);
Если СтрДлина(КМ)>0 Тогда
Сообщить("Имеются нераспознанные символы " + КМ);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат МассивГрупп;
КонецФункции
Процедура УдалитьСимволРазделителяГрупп(КМ)
Если Лев(КМ, 1) = Символ(232) ИЛИ Лев(КМ, 1) = Символ(29) Тогда
КМ = Прав(КМ, СтрДлина(КМ) - 1);
КонецЕсли;
КонецПроцедуры
2. Для получения КодаМаркировки, который идет на печать марки на принтере этикеток, - требуется так называемый нормализованный код марки = "01" + КодGTIN + "21" + Серия.
3. Ввод остатков в оборот можно произвести напрямую из программы 1С: при этом надо обновить и настроить программу 1С на обмен с ИС МП (информационная система мониторинга и прослеживаемости). Также можно выгрузить коды товаров в xml-файл (или другие форматы файлов). Если вам надо выгрузить в xml-файл, который вы потом загрузите в личном кабинете Честного Знака, то воспользуйтесь инструкцией с сайта Честного Знака. В инструкции описан формат xml-файла. На сегодняшний день Честный Знак рекомендует переходить на обмен через API Честного Знака.
Процедура ВыгрузитьXMLНажатие(Элемент)
Если НЕ ЗначениеЗаполнено(Организация) ИЛИ ПустаяСтрока(Организация.ИНН) Тогда
Сообщить("Укажите организацию или проверьте ИНН по ней");
Возврат;
КонецЕсли;
Если ПустаяСтрока(ПутьКФайлуВводВОборот) Тогда
Сообщить("Выберите файл-xml для выгрузки сведений");
Возврат;
КонецЕсли;
Файл = Новый Файл(ПутьКФайлуВводВОборот);
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(Файл.ПолноеИмя);
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента("vvod_ostatky");
ЗаписьXML.ЗаписатьАтрибут("version","2");
ЗаписьXML.ЗаписатьАтрибут("action_id","5.4");
ЗаписьXML.ЗаписатьНачалоЭлемента("trade_participant_inn");
ЗаписьXML.ЗаписатьТекст(Организация.ИНН);
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьНачалоЭлемента("products_list");
Для Каждого Стр Из КодыМаркировок Цикл
Если НЕ Стр.Вкл Тогда
Продолжить;
КонецЕсли;
КИ = "01" + Стр.КодТовараGTIN + "21" + Стр.СерийныйНомер;
ЭкранироватьКИ(КИ);
ЗаписьXML.ЗаписатьНачалоЭлемента("product");
ЗаписьXML.ЗаписатьНачалоЭлемента("ki");
ЗаписьXML.ЗаписатьТекст(КИ);
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.Закрыть();
КонецПроцедуры
4. Платформа 8.3.12.1685, на которой тестировались алгоритмы, не корректно обрабатывает спец. символы. В итоге полученный файл xml содержал некорректную последовательность символов. Тогда я применил объект ЗаписьТекста для формирования xml-файла для ввода марок в оборот (см. Листинг 3).
//Пример шаблона из раздела Помощь сайта Честный Знак
//<vvod_ostatky version="2" action_id="5.4">
//<trade_participant_inn>1111111111</trade_participant_inn>
//<products_list>
//<product>
//<ki>
//<![CDATA[ 00000000000000000000000000000 ]]>
//</ki>
//<country>111</country>
//<declaration_date>12.04.2019</declaration_date>
//<declaration_number>123456</declaration_number>
//<certificate_type>CONFORMITY_CERTIFICATE</certificate_type>
//<certificate_number>123456</certificate_number>
//<certificate_date>12.04.2019</certificate_date>
//</product>
//</products_list>
//</vvod_ostatky>
Файл = Новый Файл(ПутьКФайлуВводВОборот);
Текст = Новый ЗаписьТекста(Файл.ПолноеИмя, КодировкаТекста.UTF8);
//ЗаписьXML = Новый ЗаписьXML;
//ЗаписьXML.ОткрытьФайл(Файл.ПолноеИмя);
//ЗаписьXML.ЗаписатьОбъявлениеXML();
Текст.ЗаписатьСтроку("<vvod_ostatky version=""2"" action_id=""5.4"">");
Текст.ЗаписатьСтроку("<trade_participant_inn>" + Организация.ИНН + "</trade_participant_inn>");
Текст.ЗаписатьСтроку("<products_list>");
Для Каждого Стр Из КодыМаркировок Цикл
Если НЕ Стр.Обработан Тогда
Продолжить;
КонецЕсли;
Текст.ЗаписатьСтроку("<product>");
КИ = "01" + Стр.КодТовараGTIN + "21" + Стр.СерийныйНомер;
ЭкранироватьКИ(КИ);
Текст.ЗаписатьСтроку("<ki>" + КИ + "</ki>");
Текст.ЗаписатьСтроку("</product>");
КонецЦикла;
Текст.ЗаписатьСтроку("</products_list>");
Текст.ЗаписатьСтроку("</vvod_ostatky>");
Текст.Закрыть();
Честный знак загружал XML-файл корректно, созданный таким образом. При этом, обратите внимание, сам файл xml был создан заранее и в дальнейшем только перезаписывался.
5. Если в вашем коде товара присутствуют спец. символы, которые являются невалидными для xml-формата: одинарные или двойные кавычки, амперсанд, знак "больше", знак "меньше" - тогда используйте при подготовке файла xml экранирование символов.
Процедура ЭкранироватьКИ(КИ)
КИ = "<![CDATA[" + КИ + "]]>";
КонецПроцедуры
На этом все.
Всем добра! С пользой для всех, Rustig