Работа с системой Мониторинга движения лекарственных препаратов (МДЛП) требует от разработчика и аналитика глубокого понимания стандартов маркировки. Одной из самых частых задач является разбор считанного сканером кода DataMatrix для получения SGTIN (Serial Global Trade Item Number). В этой статье мы подробно разберем, из каких частей состоит код, как программно извлечь из него серийный номер и серию, а также выясним причины возникновения популярной ошибки МДЛП под кодом 11 («Некорректное состояние»).
Рассмотрим стандартный код маркировки лекарственного препарата. Он строится на базе стандарта GS1 DataMatrix и включает в себя несколько групп данных, каждой из которых предшествует идентификатор применения (Application Identifier — AI). Разберем на примере типичного кода:
010800266002506717210831103578442189317267284382403004
Проанализируем эту последовательность по группам:
08002660025067.ГГММДД. В примере: 210831 (31 августа 2021 года).357844.SGTIN длиной 27 символов.Важный нюанс: поля переменной длины (например, серия или серийный номер), если они стоят не в конце кода, должны завершаться специальным символом-разделителем FNC1 (код ASCII 29, часто обозначается как GS). Если ваш сканер не настроен на передачу этого символа, 1С «склеит» данные, и вы не сможете корректно выделить серийный номер.
Для того чтобы система 1С понимала структуру считанного кода, мы используем алгоритмы парсинга стандартов GS1. Рассмотрим пример функции, которая помогает разобрать строку штрихкода на составляющие части:
Функция РазобратьСтрокуШтрихкодаГС1(Знач Штрихкод) Экспорт
РезультатРазбора = Новый Структура;
РезультатРазбора.Вставить("ПредставлениеШтрихкода", "");
РезультатРазбора.Вставить("ДанныеШтрихкода", Новый Массив);
// Алгоритм поиска идентификаторов (01, 21, 17, 10)
// В типовых решениях (БИМ) используется объект "КодыГС1"
КодыГС1 = КодыГС1();
Если ШтрихкодВЧеловекоЧитаемомВиде(Штрихкод) Тогда
// Разбор, если идентификаторы в скобках (01)
РазобратьСтрокуШтрихкодаГС1СоСкобками(Штрихкод, КодыГС1, РезультатРазбора);
Иначе
// Разбор "сырой" строки со сканера с учетом ASCII 29
РазобратьСтрокуШтрихкодаГС1СРазделителями(Штрихкод, КодыГС1, РезультатРазбора);
КонецЕсли;
Возврат РезультатРазбора;
КонецФункции
Выясним причину, по которой SGTIN может не находиться в системе. Часто разработчики забывают, что GTIN внутри кода DataMatrix всегда должен быть дополнен до 14 символов (обычно ведущим нулем, если это EAN-13). При формировании запроса в МДЛП (например, по схеме 211) убедитесь, что вы склеиваете именно 14 знаков GTIN и 13 знаков серийного номера.
При обмене данными с МДЛП (схемы 415, 416, 441) пользователи часто получают квитанцию с отказом и текстом: Error code 11: Некорректное состояние. Рассмотрим основные причины этой ошибки:
SGTIN через «Реестр КИЗ» в личном кабинете. Упаковка должна находиться в статусе «В обороте» (in_circulation) и числиться именно за тем местом деятельности, с которого вы пытаетесь её списать.Иногда при ручном вводе или отладке требуется проверить валидность самого GTIN. В 1С это можно сделать с помощью стандартного алгоритма расчета контрольной цифры:
Функция РассчитатьКонтрольныйСимволGTIN(Знач GTIN) Экспорт
Сумма = 0;
ДлинаGTIN = СтрДлина(GTIN);
// Коэффициент для GTIN-14: на четных позициях 3, на нечетных 1
Коэффициент = ?(ДлинаGTIN % 2 = 0, 3, 1);
Для Сч = 1 По ДлинаGTIN - 1 Цикл
ВремКодСимвола = КодСимвола(GTIN, Сч);
Сумма = Сумма + Коэффициент * (ВремКодСимвола - 48);
Коэффициент = 4 - Коэффициент;
КонецЦикла;
Сумма = (10 - Сумма % 10) % 10;
Возврат Символ(Сумма + 48);
КонецФункции
Разберем по шагам, что нужно сделать, если обмен не проходит:
Шаг 1. Настройка оборудования. Убедимся, что сканер штрихкода работает в режиме эмуляции клавиатуры или COM-порта и корректно передает скрытые символы разделителей. Без этого разбор SGTIN в 1С будет невозможен.
Шаг 2. Использование актуальных библиотек. Рекомендуем интегрировать в вашу конфигурацию актуальную БИМ (Библиотеку интеграции с МДЛП). Фирма 1С регулярно обновляет методы API в этой библиотеке, что избавляет от необходимости вручную прописывать структуры XML для каждой схемы.
Шаг 3. Подписание сообщений на сервере. Выясним важный технический момент: если ваша информационная база работает в клиент-серверном варианте, сертификат электронной подписи должен быть установлен на сервере 1С под учетной записью, от имени которой запущена служба. Используйте утилиту cryptcp от КриптоПро для проверки возможности подписания файлов непосредственно из командной строки сервера.
Шаг 4. Проверка через мобильное приложение. Если вы сомневаетесь в корректности кода, воспользуйтесь официальным приложением «Честный ЗНАК». Оно покажет текущий статус препарата и организацию-владельца. Это поможет быстро понять, на чьей стороне проблема — вашей или поставщика.
Соблюдение этих правил и понимание структуры кода позволят вам минимизировать количество ошибок при работе с маркировкой и обеспечить бесперебойное движение лекарственных средств в вашей организации.