Доброго времени суток! Возвращаясь к теме маркировки лекарств, заметил, что не так много информации в сети о том, как провести тестовую отгрузку кодов маркировки, а затем выполнить тестовую приемку. В связи с этим, у многих клиентов возникает сложность в самостоятельном тестировании, хотя на деле все просто. А также хочу рассказать об одной частой проблеме при приемке тестовых кодов, которая может отнять у вас кучу времени на поиск решения. Обо всем по порядку.
Итак, мы будем заказывать тестовые коды маркировки при помощи станции управления заказов песочницы информационной системы честный знак. Для тех, кто в первый раз слышит о песочнице, рекомендую подробнее познакомиться https://sb.mdlp.crpt.ru/#/auth/signin?eyJlcnJvciI6MX0= и зарегистрировать вашу организацию, иначе дальнейшее тестирование будет невозможным.
Для начала нам необходимо, пройти авторизации в личном кабинете тестового контура песочница. Для этого нам потребуется электронная цифровая подпись тестового (вымышленного) производителя лекарств (организации имеющей лицензию на выпуск лекарств), который будет являться для нашей организации поставщиком. Чтобы получить тестовые личные кабинеты, необходимо написать электронное письмо на адрес support@crpt.ru, в котором максимально указать данные об организации (ИНН, КПП, номер лицензии и т.д.), с просьбой получить тестовые электронные подписи для отгрузок.
В ответном письме вам должны отправить архив с инструкциями по установке подписей и подписи в разных форматах для VipNet и КриптоПРО. Не пугайтесь названиям тестовых кабинетов))
Углубляться в установку подписей не будем, т.к. обычно процесс не вызывает сложности, если следовать по предоставленной инструкции.
После того, как мы установили подписи, мы можем авторизоваться в личном кабинете песочницы
Для перехода к станции управления заказами, нам необходимо перейти на вкладу профиль, и выбрать "Заказ SGTIN"
На вкладке заказы, необходимо нажать кнопку "Создать"
Откроется мастер создания заказа, на первом шаге необходимо заполнение, следующих данных:
В поле "субъект обращения" необходимо ввести регистрационный номер организации нашего тестового участника, со стороны которого будет выполнять выпуск и отгрузка продукции в сторону нашей организации, посмотреть его можно, если вернуться в основной кабинет песочницы на вкладку "профиль", в разделе "данные организации"
на втором шаге необходимо заполнить информацию о выпускаемых/отгружаемых товарах, выберем автоматического создание кодов маркировки и укажем количество
в поле код товара, необходимо указать GTIN товара, всего (внимание) можно использовать два GTIN, зарегистрированных в реестре лекарственных препаратов нашего тестового кабинета, т.е. собственные GTIN использовать нельзя:
далее нажимаем сохранить, откроется список ваших заказов, необходимо периодически обновлять страницу и дождаться, когда статус изменится на "активный", затем нажать кнопку "печать"
указать формат печати тестовых кодов:
необходимо сохранить этот PDF на своем компьютере.
Затем вернуться личный кабинет, во вкладку реестр документов и найти свой документ по дате, с типом 10311 - завершение упаковки, необходимо загрузить квитанцию, чтобы убедиться, что все успешно:
сохраняем квитанцию и открываем любым XML-редактором, мы должны увидеть в нем строку "успешное завершение операции", вот так это выглядит:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<documents xmlns:ns2="http://www.mdlp.org/wsdl/MdlpService.wsdl" version="1.35">
<result action_id="200" accept_time="2020-08-06T21:55:38.007+03:00">
<operation>10311</operation>
<operation_id>7fb13877-7b92-48b3-b138-777b9258b3ba</operation_id>
<operation_result>Accepted</operation_result>
<operation_comment>Успешное завершение операции</operation_comment></result></documents>
а теперь давайте нажмем кнопку скачать документ (рядом с кнопкой скачать квитанцию и посмотрим, как будет выглядеть отправленный нами ранее документ)
<documents version="1.35" xmlns:ns2="http://www.mdlp.org/wsdl/MdlpService.wsdl">
<skzkm_register_end_packing action_id="10311">
<subject_id>00000000104494</subject_id>
<operation_date>2020-08-06T18:53:00Z</operation_date>
<order_type>1</order_type>
<series_number>10101010101</series_number>
<expiration_date>31.12.2024</expiration_date>
<gtin>18901148006024</gtin>
<signs>
<sgtin>18901148006024thisisaKIZ085</sgtin>
<sgtin>18901148006024thisisaKIZ086</sgtin>
<sgtin>18901148006024thisisaKIZ082</sgtin>
<sgtin>18901148006024thisisaKIZ090</sgtin>
<sgtin>18901148006024thisisaKIZ095</sgtin>
<sgtin>18901148006024thisisaKIZ093</sgtin>
<sgtin>18901148006024thisisaKIZ081</sgtin>
<sgtin>18901148006024thisisaKIZ088</sgtin>
<sgtin>18901148006024thisisaKIZ084</sgtin>
<sgtin>18901148006024thisisaKIZ087</sgtin>
</signs>
<device_info>
<device_id>REM3491020098108</device_id>
<skzkm_origin_msg_id>55045848-1a5b-4982-a02d-a447737ca064_0</skzkm_origin_msg_id>
<skzkm_report_id>bd2c8d0d-810f-4376-9f2b-3db6f40d55ea</skzkm_report_id>
</device_info></skzkm_register_end_packing></documents>
К чему я перешел к этим схемам? для чего они? А нужно они для того, чтобы осуществлять дальнейшие операции по движению наших кодов маркировки, сейчас мы отразили только операцию по завершению упаковки лекарственного препарата и сделали это визуально при помощи мастера создания заказов, но дальше нам необходимо отразить "выпуск лекарственного препарата" и "отгрузку со склада производителя в сторону нашей организации", визуального помощника для таких операций нет, эти операции выполняются при помощи XML-схем, шаблоны которых, заранее определены для каждой операции, поэтому мы разберем ключевые теги XML документа загруженного нами ранее, т.к. дальнейшие документы будут почти идентичны:
xml version - тип кодировки;
skzkm_register_end_packing action_id - тип выполняемой операции;
subject_id - идентификатор организации;
operation_date - дата операции;
order_type - тип производственного заказа;
series_number - номер производственной серии;
expiration_date - срок годности;
gtin - международный код маркировки и учёта логистических единиц, разработанный и поддерживаемый GS1.
sgtin - контрольный идентификационный знак (GTIN + серия);
Как было сказано выше, далее необходимо отразить выпуск ЛП, для этого нам потребуется следующий шаблон:
<?xml version="1.0" encoding="UTF-8"?>-Тип кодировки
<documents session_ui="4Aa246a6-D7e2-2465-a056-0234554369a3" version="1.34" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> -Версия документа
<register_product_emission action_id="313">">-Тип выполняемой операции
<subject_id>00000000104494</subject_id>- Идентификатор места деятельности (14 знаков) - указывается идентификатор из ранее загруженной схемы 311
<operation_date>2019-08-31T11:08:03+04:00</operation_date>-Дата и время выполнения операции - указываются текущие дата и время
<release_info>
<doc_num>ds1</doc_num>- Регистрационный номер документа подтверждения соответствия
<doc_date>31.03.2017</doc_date> Дата регистрации документа подтверждения соответствия
<confirmation_num>000000010</confirmation_num> - номер документа подтверждения соответствия
</release_info>
<signs> Перечень идентификационных кодов потребительских упаковок
<sgtin>507540413987650000000000011</sgtin>-Идентификаторы SGTIN – указываются номера из ранее загруженной 311 схемы
<sgtin>507540413987650000000000012</sgtin>
<sgtin>507540413987650000000000013</sgtin>
<sgtin>507540413987650000000000014</sgtin>
</signs>
</register_product_emission>
</documents>
Его необходимо загрузить в личном кабинете честного знака, раздел реестр документов, кнопка "загрузить XML"
далее подписать электронной подписью и как мы уже делали ранее, загрузить квитанцию, чтобы убедиться в успешном выполнении операции.
Следом необходимо загрузить документ отгрузки в сторону нашей организации, для этого нам потребуется идентификатор нашей организации (тестового контура песочница), который можно узнать в разделе "профиль", "адреса":
заполнить по ниже представленному шаблону документ, и загрузить в реестр документов, убедиться в успешном выполнении:
<?xml version="1.0" encoding="UTF-8"?>-Тип кодировки
<documents session_ui="4Aa246a6-D7e2-2465-a056-0234554369a3" version="1.34" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> -Версия документа
<move_order action_id="415">-Тип выполняемой операции
<subject_id>00000000104494</subject_id> Идентификатор организации отправителя (14 симв) - указывается идентификатор из ранее загруженной схемы 313
<receiver_id>00000000104452</receiver_id> Идентификатор организации получателя (14 симв) указывается идентификатор Вашей организации
<operation_date>2019-08-31T13:10:00+04:00</operation_date> Дата и время выполнения операции - указываются текущие дата и время
<doc_num>000000010</doc_num> Реквизиты документа отгрузки: номер документа
<doc_date>30.10.2017</doc_date> Реквизиты документа отгрузки: дата документа
<turnover_type>1</turnover_type> Тип операции отгрузки со склада
<source>3</source> Источник финансирования
<contract_type>6</contract_type> Тип договора
<contract_num>18506005907 18 000044</contract_num> Реестровый номер контракта (договора) в Единой информационной системе в сфере закупок
<order_details> Список отгружаемой продукции
<union>
<sgtin>507540413987650000000000011</sgtin> Номер SGTIN указывается номер из ранее загруженной 313 схемы
<cost>300</cost> Стоимость единицы продукции (с учетом налога на добавленную стоимость)
<vat_value>54</vat_value> Сумма НДС
</union>
<union>
<sgtin>507540413987650000000000012</sgtin> Номер SGTIN указывается номер из ранее загруженной 313 схемы
<cost>300</cost>
<vat_value>54</vat_value>
</union>
</order_details>
</move_order>
</documents>
далее мы переходим с личного кабинета производителя , в личный кабинет нашей организации, во входящих документах у нас должен появиться документ с типом "601 - уведомления об отгрузке":
Отлично, теперь мы можем зайти в нашу 1С (любую конфигурацию с МДЛП), и увидеть этот документ, как не отработанную приемку товара:
дальше
самое интересное, мы выполнили тестовую отгрузку, распечатали тестовые коды, вроде бы пора взять в руки сканер и начать отрабатывать приемку, но... при сканировании тестовых кодов, мы получаем ошибку, о том, что штрихкод не распознан, GTIN не корректен, и не понимаем в чем дело?? начинаем копать настройки в программе, настройки сканера, прошивать сканер, грешить на брак сканера, что угодно, а ответ вот в чем...в библиотеке МДЛП, есть функция проверки GTIN, которая вычисляет контрольный символ и сравнивает его с последним символом, листинг представляю ниже:
// Универсальная функция расчета контрольной цифры GTIN.
// GTIN допускает в формате GTIN-8, GTIN-12, GTIN-13, GTIN-14 c контрольным символом.
//
// Параметры:
// GTIN - Текстовая строка с GTIN(c контрольным символом). Может содержать числа от 0 до 9.
//
// Возвращаемое значение:
// - Контрольный символ (число) рассчитанный по алгоритму для GTIN.
//
Функция РассчитатьКонтрольныйСимволGTIN(Знач GTIN) Экспорт
Сумма = 0;
ДлиннаGTIN = СтрДлина(GTIN);
Коэффициент = ?(ДлиннаGTIN % 2 = 0, 3, 1);
Для Сч = 1 По ДлиннаGTIN - 1 Цикл
ВремКодСимвола = КодСимвола(GTIN, Сч);
Сумма = Сумма + Коэффициент * (ВремКодСимвола - 48);
Коэффициент = 4 - Коэффициент;
КонецЦикла;
Сумма = (10 - Сумма % 10) % 10;
КонтрольныйСимвол = Символ(Сумма + 48);
Возврат КонтрольныйСимвол;
КонецФункции
// Функция проверяет корректность GTIN.
// GTIN допускает в формате GTIN-8, GTIN-12, GTIN-13, GTIN-14 c контрольным символом.
//
// Параметры:
// GTIN - Текстовая строка с GTIN(c контрольным символом). Может содержать числа от 0 до 9.
//
// Возвращаемое значение:
// - Булево
//
Функция ПроверитьКорректностьGTIN(Знач GTIN) Экспорт
Результат = (СтрДлина(GTIN) = 8) Или (СтрДлина(GTIN) = 12) Или (СтрДлина(GTIN) = 13) Или (СтрДлина(GTIN) = 14);
Сообщить("Контрольный символ: "+Строка(РассчитатьКонтрольныйСимволGTIN(GTIN)) + " должен равняться последнему симмволу: " + Строка(Прав(GTIN, 1)));
Возврат Результат И РассчитатьКонтрольныйСимволGTIN(GTIN) = Прав(GTIN, 1);
КонецФункции
ну хорошо, есть функция, так в чем же дело? для наглядности создадим простую обработку, в которой будем писать GTIN и вызывать данную проверку, а в сообщении выводить чему равен контрольный и последний символ, вспоминаем какие GTIN нам доступны для тестирования:
проверим их:
а теперь возьмем GTIN реального препарата, купленного в аптеке и проверим его:
Вот и все, GTIN в тестовых кода и правда не корректен, вот такие чудеса))
Но не отчаивайтесь и не теряйте время, можно выполнить проверку в ручную:
Вот собственно и все, мы рассмотрели принцип тестовый отгрузки, в самом простом случае при прямом порядке акцептования, соответственно для каждого другого сложного случая, есть другие аналогичные шаблоны, которое можно запросить вместе с тестовыми кабинетами в тех.поддержке честного знака. Всем удачи! И не удивляйтесь чудесам, маркировка в самом разгаре))