Маркировка лекарственных препаратов. Часть вторая "Регистраторы выбытия"
Учетные задачи - Розничная торговля
Данная статья является второй статьей в цикле посвященном маркировке лекарственных препаратов. Ссылка на первую статью Маркировка лекарственных препаратов. Часть первая "Быстрая интеграция" //infostart.ru/1c/articles/1254468/ .
В данной статья я постараюсь поделиться собственным опытом работы с РВ, описанием работы с АПИ (для разработчиков), интересные моменты выявленные в ходе эксплуатации и уделить часть статьи пользователям, а именно ошибочным ситуациям и что с ними делать.
Регистратор выбытия (далее РВ) устройство для вывода лекарственных препаратов (далее ЛП) из оборота. На текущий момент нами используются две модели РВ – Штрих и АТОЛ. (Инструкции https://честныйзнак.рф/upload/iblock/2f6/Registrator_3.0.pdf, https://честныйзнак.рф/upload/iblock/c53/ATOL-RV-v.1.0.PDF ).


Настоятельно рекомендую регулярно проверять обновление документации на сайте Честного знака https://честныйзнак.рф/business/projects/medicines/documents/for_developers/ во избежание ошибок при разработке.
Порядок использования и основные моменты привожу по ссылке Честного Знака https://честныйзнак.рф/upload/iblock/33f/is_mp_opisanie_v2.2.0.pdf , чтобы не перегружать статью справочной информацией.
На текущий момент работа с РВ поддерживается библиотекой МДЛП (работа под веб не поддерживается) и если Вы не разработчик или Вам не актуально корректировать этот механизм можете пропустить часть статьи по разработке. Для всех интересующихся опишу свой опыт по данному вопросу.
Разработка
Взаимодействие с АПИ РВ я реализовывал еще до того как библиотека МДЛП начала поддержку РВ в своем составе, поэтому на текущий момент используются в коде те самописные методы что были реализованы ранее.
За работу с РВ отвечает документ Уведомление о выдаче в отделения. Перед отправкой документа выполняется несколько проверок во избежание ошибок обработки документа РВ.
Первая проверка это запакованность SGTIN. Если отправите не разупакованный SGTIN все равно по итогу получите ошибку. Данную проверку например можно выполнять методом АПИ МДЛП по запросу информации о SGTIN (https://честныйзнак.рф/upload/iblock/200/IS-_Markirovka_.-MDLP.-Protokol-obmena-interfeysnogo-urovnya-v3.11.pdf ) с помощью 8.3.3. Метод поиска по общедоступному реестру КИЗ по списку значений Endpoint: POST <endpoint>/<version>/reestr/sgtin/public/sgtins-by-list.
В таком случае перед отправкой будет необходимо выполнять лишний запрос в МДЛП, чего я рекомендую избегать по возможности. Альтернативой может являться ведение регистра накопления в который пишутся все движения нужных документов (в нем же хранить запакованность). Либо же можно использовать типовой регистр сведений УпаковкиМДЛП, однако в силу специфичности этого регистра и некоторых ошибок записи в него в типовой библиотеке я стараюсь избегать строить решения с его использованием.
Вторая проверка это заполнение Base64 в ТЧ упаковки. Так как в РВ отправляется SGTIN упакованный вместе с криптохвостом, то отправка документа где есть незаполненные значения приведет к ошибке.
Третья проверка это наличие и длина криптохвоста. 92 часть SGTIN должна присутствовать и иметь длину строго 44 символа (на текущий момент имеется небольшой процент ЛП на которые производители нанесли неверный криптохвост).
Четвертая проверка наличие этого SGTIN на данном Месте деятельности (далее МД). Позволяет избежать ошибок если например у организации есть 2 и более МД или выдача была уже произведена другим документом. Аналогично пункту 1 либо запросом, либо хранить в базе состояния упаковок, либо через УпаковкиМДЛП.
Пятая проверка относится к первичным упаковкам. МДЛП позволяет выдавать SGTIN частично. В АПИ за это отвечает ключ sold_part который представляет собой дробь, например 1/2, где 2 количество блистеров в упаковке, как на рисунке. Выдали из них в документе 1 блистер.

Осуществляется контроль не превышения этого количества по нескольким документам (остатки в регистре собираются по частям упаковок). Так как МДЛП не контролирует эти дробные части контроль остается на стороне 1С. Также нельзя передавать в РВ дроби типа 1/1, 5/5 и подобные, будет возвращена ошибка.
Любопытный факт – по одному SGTIN можно например выдать 5/10, 5/15, 14/15 последовательно разными документами и это не вернет ошибку. Упаковка по итогу спишется целиком если последняя отправка перекроет остаток в МДЛП на больше или равно.
Данные проверки уже позволят избежать множественных ошибок при отправке в РВ. Реализованы они на этапе Выполните проверку в документе. Пример кода проверок ниже. Вы можете адаптировать его под свои базы. Проверки количества и первичных упаковок не привожу, т.к. они работают только при наличии регистра накопления, отсутствующего в библиотеке МДЛП.
Для каждого стр из Объект.НомераУпаковок Цикл
Если Объект.ПередачаСведенийЧерезСКЗКМ Тогда
Если НЕ ЗначениеЗаполнено(стр.ШтрихкодBase64) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "У КИЗ: " + стр.НомерКИЗ + " - не заполнен штрихкод BASE64";
Сообщение.Поле = "НомераУпаковок[" + (стр.НомерСтроки - 1) + "].НомерКИЗ";
Сообщение.КлючДанных = Объект.Ссылка;
Сообщение.ПутьКДанным = "Объект";
Сообщение.Сообщить();
ОшибкиПроверки = ОшибкиПроверки + 1;
Продолжить;
КонецЕсли;
// Удаление лишних символов.
стр.ШтрихкодBase64 = СтрЗаменить(стр.ШтрихкодBase64, Символы.ВК, "");
стр.ШтрихкодBase64 = СтрЗаменить(стр.ШтрихкодBase64, Символы.ПС, "");
//проверка Base64 на наличие и корректность криптохвоста
ДвоичныеДанныеСтроки = Base64Значение(стр.ШтрихкодBase64);
Если ДвоичныеДанныеСтроки <> Неопределено Тогда
Штрихкод = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанныеСтроки);
СтруктураШтрихкода = ИнтеграцияМДЛПКлиентСервер.ДанныеШтрихкода(Штрихкод);
КриптохвостЗначение = "";
Для каждого ЧастьШтрихкода Из СтруктураШтрихкода.ДанныеШтрихкода Цикл
Если ЧастьШтрихкода.ИдентификаторПрименения = "92" Тогда
КриптохвостЗначение = ЧастьШтрихкода.Значение;
Если НЕ СтрДлина(ЧастьШтрихкода.Значение) = 44 Тогда
ЗаполненоBase64 = Ложь;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "КИЗ: " + стр.НомерКИЗ + " - имеет ошибочный криптохвост(92)";
Сообщение.Поле = "НомераУпаковок[" + (стр.НомерСтроки - 1) + "].НомерКИЗ";
Сообщение.КлючДанных = Объект.Ссылка;
Сообщение.ПутьКДанным = "Объект";
Сообщение.Сообщить();
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(КриптохвостЗначение) = Ложь Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "У КИЗ: " + стр.НомерКИЗ + " - отсутствует криптохвост(92)";
Сообщение.Поле = "НомераУпаковок[" + (стр.НомерСтроки - 1) + "].НомерКИЗ";
Сообщение.КлючДанных = Объект.Ссылка;
Сообщение.ПутьКДанным = "Объект";
Сообщение.Сообщить();
ОшибкиПроверки = ОшибкиПроверки + 1;
КонецЕсли;
Иначе
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "У КИЗ: " + стр.НомерКИЗ + " - некорректный BASE64";
Сообщение.Поле = "НомераУпаковок[" + (стр.НомерСтроки - 1) + "].НомерКИЗ";
Сообщение.КлючДанных = Объект.Ссылка;
Сообщение.ПутьКДанным = "Объект";
Сообщение.Сообщить();
ОшибкиПроверки = ОшибкиПроверки + 1;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Также перед отправкой в РВ требуется проверить не заблокирован ли РВ (данная проверка реализована на текущий момент в библиотеке МДЛП). Осуществляется методами «Запросить состояние РВ» (RequestStatusRv) и «Получить информацию об устройстве» (GetInformationRv) (документация https://честныйзнак.рф/upload/iblock/92b/TC-RV-v25_07.06.2019_Publichnaya-versiya.pdf ). Здесь нас интересует ключ «timeBlock» в котором хранится время до блокировки. Если отправить документ в заблокированный РВ, а после этого его разблокировать, то с большой долей вероятности документ так и останется висеть в очереди.
После выполнения проверок документ упаковывается в json и отправляется методом «Записать задание в очередь» (QueueUp).
Рекомендация – хранить эти идентификаторы запроса, многократно возникала ситуация когда один из документов вешал очередь в РВ и все остальные документы повисали в ожидании. Исправляется либо перезагрузками РВ, либо что более надежно очисткой очереди методом «Отменить задание» (Delete). Для очистки очереди (а также очистки задания после успешного запроса статуса) и необходимо хранить все ранее переданные идентификаторы.
В случае положения успешного ответа следом отправляется запрос статуса задания методом «Запросить статус задания» (RequestStatus), где rvRequestId это идентификатор запроса, который присваивается в 1С (GUID). При успешном запросе статуса будет получено значение ключа «mdlpRequestId» по которому этот документ в дальнейшем можно найти в ЛК и получить квитанцию(и).
Важное замечание – на один документ выдачи в 1С через РВ может быть создано несколько документов в ЛК. Документы могут быть разбиты по типам ошибок, если таковые имеются в квитанциях, либо на текущий момент разбиение по 50 SGTIN, либо по различным GTIN.
После получения mdlpRequestId рекомендуется очистить очередь от этого документа в РВ методом «Отменить задание» (Delete).
Следующий метод является не обязательным и вариативным для каждого типа РВ. Речь о методе «Получить отчёты о выбытии» (GetReports) который поддерживается РВ Штрих и на момент написания статьи не поддерживается РВ АТОЛ. Данный метод позволяет получить ответ от РВ по каждому заданию и по каждому SGTIN прошла ли проверка этих SGTIN в РВ будут ли они отправлены в МДЛП (к сожалению это не всегда так, возможна ситуация - для ЛП выпущенных до 01.07.2020 будет написано, что выдача подтверждена, а по факту они так и не уйдут в МДЛП).
Для получения квитанции последовательно реализованы несколько методов АПИ МДЛП (документация https://честныйзнак.рф/upload/iblock/200/IS-_Markirovka_.-MDLP.-Protokol-obmena-interfeysnogo-urovnya-v3.11.pdf ) .
Для начала используется метод 5.18. Прослеживание документов по отчёту из СУЗ в фильтр которого передается mdlp_request_id. Данный метод вернет список document_id которые требуется загрузить методом 5.14. Получение документа по идентификатору. После получения списка требуется методом 5.16. Получение квитанции по номеру исходящего документа получить link по которому скачивается квитанция.
Важный момент – так как один документ в 1С может разделиться на несколько в МДЛП, причем каждый из этих документов будет иметь свою квитанцию, то по части документов может уже пройти обработка, а по части нет. Соответственно на какой-то момент времени документ будет находиться в статусе частичного получения квитанции. Но может возникнуть ситуация когда РВ некоторые SGTINы не отправил и не отправит уже в МДЛП. В таком случае необходим анализ документов в ЛК и правка документа в 1С. Для упаковок которые не выдались потребуется либо повторная отправка новым документом через РВ, либо в обход РВ (по 531 схеме). В таком случае документ отправится напрямую и будет видна квитанция по нему после обработки.
Как я писал ранее работа под веб типовой библиотекой МДЛП не поддерживается, но это не значит, что данная задача не решаема. Небольшая доработка напильником и методы работы с РВ становятся доступны в браузере.
Ошибочные ситуации
При работе с РВ возможны ошибочные ситуации, как по причине ошибок в 1С, так и по причине проверок в РВ или МДЛП.
Часть проверок реализована библиотекой МДЛП, разбор ошибочных ответов от РВ так же должен разбираться корректно. При этом, как я обозначал выше, могут быть проблемные ситуации не самые очевидные.
Самой часто встречающейся ошибкой на текущий момент является ошибочность КМ при создании его поставщиком. Зачастую это относится к КМ выпущенным до 01.07.2020, но изредка встречаются КМ выпущенные позже, но имеющие те же самые проблемы.
Что происходит в данной ситуации? Документ с такими КМ отправляется в РВ, тот возвращает успешный ответ постановки в очередь, после запроса статуса он тоже будет возвращен успешный. Для РВ ШТРИХ можно запросить статусы выбытия и там они тоже будут как «Выбытие подтверждено». Но в ЛК эти КМ так и не придут.
Что предпринять в данном случае?
Первое подождать от 1 часа до 24 пока документ не появится в ЛК (возможны задержки обработки очереди).
Второе проверить КМ в ЛК на дату их выпуска на вкладке Товары и если имеются выпущенные ранее 01.07.2020, которые так и не появились в ЛК после отправки в РВ, необходимо рассмотреть возможность создания нового документа выдачи с отправкой по схеме 531, минуя РВ.
Следующая ошибка относится исключительно к РВ АТОЛ. Отправка документа вызывает ошибку – срок действия пин-кода истек, требуется ввести заново. Тут все просто, как и в ситуации с заблокированным РВ. Просто вводится новый пин-код с перезагрузкой или восстанавливается связь со спутниками.
Также есть частая ошибка, одна из самых непонятных для пользователя на текущий момент возврат ошибки из МДЛП «Недопустимый переход в товаропроводящей цепочке». Под этой ошибкой может пониматься целое подмножество ошибок:
- КМ находился не в статусе «В обороте» на момент выдачи (выдан ранее, не принят);
- КМ выбывается не с того МД на котором находится (если МД у организации несколько);
- нарушена временная последовательность выдачи (ситуация когда приемка была позже чем выдача).
Тут надо остановиться подробнее с конкретным примером. Допустим, есть ситуация когда приемка зафиксирована в 12.00, но поставщик не учел рекомендации по указанию часового пояса и отправил без +03.00 в дате. РВ игнорирует передаваемое время в json и выставляет свое время фактическое. Таким образом любая выдача до 15.00 будет приводить к ошибке. Ситуация к счастью довольно редкая, но возможная.
В такой ситуации рекомендую обратить на время указанное в xml документа приемки, а именно передал ли поставщик часовой пояс в дате.
Возможно Вы наталкиваетесь на другие ошибки при использовании РВ, которые я забыл или не встречал. Напишите, пожалуйста, о них в комментариях и возможно решения по ним я смогу включить в статью для помощи другим пользователям.
Если Вас интересуют какие-то определенные темы напишите, пожалуйста, в комментариях. Возможно я включу их в последующие статьи. Также приветствуется здоровая критика статьи, которая поможет сделать ее лучше.
P.S. Довольно часто наталкиваюсь на обвинения что маркировка ухудшает работу, Честный Знак работает плохо и т.д. Тут выражу исключительно собственное мнение по данной ситуации. Идея маркировки ЛП исходит из уменьшения контрафактных ЛП и прослеживаемости каждого этапа жизненного цикла ЛП, что в целом приведет к улучшению медицины. За маркировку требуют денег – когда Вы начнете работать бесплатно можем вернуться к этому вопросу. РВ организациям выдают бесплатно. Нестабильная работа Честного Знака – я занимаюсь маркировкой ЛП уже 3й год и хорошо видел развитие с точки зрения разработчика. Служба поддержки всегда реагировала на мои заявки адекватно, некоторые пожелания были действительно учтены в новых релизах. Документация для разработчиков очень удобная и детальная. Я брал ее за образец при написании собственных АПИ например. Нестабильная работа и ошибки – да имеют место, но как разработчик я прекрасно понимаю какой объем работы необходимо проделывать чтобы система работала стабильно по всей нашей весьма немаленькой стране.
Разумеется, есть негативные моменты которые постоянно всплывают в обсуждениях. Я со своей стороны прошу пользователей относиться с терпением к данной системе, которая все-таки становится лучше и будет стабильнее со временем. А с разработчиками готов поделиться своим опытом в данном направлении чтобы делать качественный продукты для пользователей.
P.P.S. Хочу поблагодарить свою проектную команду, благодаря которой мы успешно развиваемся. Спасибо. Эта статья и ваша заслуга.
Вступайте в нашу телеграмм-группу Инфостарт
1С:МДЛП Честный знак Маркировка лекарственных препаратов Регистратор выбытия Интеграция Ошибка Разработка Товаропроводящей цепочке криптохвост схема Место деятельности Код маркировки
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
См. также
ККМ Кассовые операции Розничная торговля НДС 22% Системный администратор Разработчик 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Бухгалтерия государственного учреждения 1С:Бухгалтерия 1.6 1С:Бухгалтерия автономного учреждения Россия Платные (руб)
Универсальная обработка для обслуживания любых фискальных регистраторов (ККТ), в том числе Веб сервер АТОЛ. Работает в соответствии с 54-ФЗ. (ФФД 1.0, ФФД 1.05, ФФД 1.1, ФФД 1.2). Подключайте любую онлайн кассу к практически любой конфигурации на обычных формах. Нет необходимости обновлять 1С. Можно бесплатно скачать и протестировать. Может работать одновременно с несколькими онлайн-кассами, либо одной с разных рабочих мест. (через RDP, TCP\IP или веб-сервер) Позволяет разделить один чек сразу на несколько ККТ или на несколько систем налогообложения. Поддерживает разрешительный режим и маркировку. Поддерживает локальный модуль честного знака для офлайн проверки. Можно настроить собственный шаблонов чека. Можно использовать эквайринг там, где он не поддерживается. Работает на LINUX и Windows Адаптировано к ставке НДС 22% и ТС ПИоТ.
6100 руб.
27.02.2017 918845 6631 10489
Оптовая торговля Розничная торговля Логистика, склад и ТМЦ Анализ продаж Пользователь 1С:Предприятие 7.7 1С:Предприятие 8 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 1.х 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 10 1С:Управление торговлей 11 1С:Розница 2 1С:Розница 3.0 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)
Автоматизация заказа поставщику через 1С. Загрузка прайсов, анализ цен, управление заказами в УТ 10.3, УТ 11, КА2, УНФ, УПП, ERP, Розница 2
39141 руб.
21.04.2017 113527 212 44
Оптовая торговля Розничная торговля Обмен с ГосИС Разработчик Бухгалтер Пользователь 1С:Предприятие 8 1C:Бухгалтерия Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Россия Бухгалтерский учет Управленческий учет Платные (руб)
Решение создано для помощи разработчикам, интеграторам и другим заинтересованным лицам по настройке системы маркировки обуви, одежды, лекарств, табака, фото, молока, духов(парфюма), питьевой воды, велосипедов и шин. Задавайте вопросы по работе с ЦРПТ, GS1, ЭДО, Национальным каталогом, накоплен опыт и знания по данным темам.
20900 руб.
18.03.2019 128364 111 115
Оптовая торговля Розничная торговля Обмен с ГосИС Бухгалтер 1С:Предприятие 8 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Рестораны, кафе и фаст-фуд Россия Бухгалтерский учет Управленческий учет Акцизы Платные (руб)
Автоматизация учета ЕГАИС в 1С для оптовой торговли, производства и импорта алкогольной продукции. Получение и отправка ТТН, отправка акта о постановке на баланс и акта о списании. Получение остатков. Загрузка и сопоставление номенклатуры и контрагентов. Оправка в ЕГАИС отчетов о производстве и импорте.
1091 руб.
15.12.2015 188380 1403 374
Рабочее место Оптовая торговля Розничная торговля Логистика, склад и ТМЦ Ценообразование, анализ цен Бухгалтер Пользователь 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)
Расширение для работы с номенклатурой: отображение остатков, цен, изображений, аналитики по каждой позиции, подбор товаров в документы через корзину и оптимизация интерфейса.
17284 руб.
26.04.2016 688157 1573 669
Разработка Адаптация типовых решений Производство готовой продукции (работ, услуг) Розничная торговля 1С:Управление торговлей 10 Россия Платные (руб)
Доработка для 1С:Управление торговлей 10.3 (релиз 10.3.88.3) добавляет поддержку маркировки новых категорий товаров согласно постановлениям Правительства РФ 2025–2026 гг. Конфигурация УТ 10.3 снята с поддержки — новые маркируемые категории в типовую поставку больше не попадают. Доработка закрывает этот пробел: новые виды номенклатуры, обмен с ГИС МТ «Честный Знак». Поставляется в виде файла .cf
14640 руб.
23.04.2026 5446 49 13
ККМ Кассовые операции Розничная торговля НДС 22% Системный администратор Разработчик 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Бухгалтерия государственного учреждения 1С:Бухгалтерия автономного учреждения Россия Платные (руб)
Обработка осуществляет обслуживание ККТ АТОЛ, Штрих, Вики Принт и Меркурий для конфигураций "УТ 10.3", "КА 1.1", "УПП 1.3", "Розница 1.0", "БП 2.0" и других отраслевых решений, построенных на основе указанных выше конфигурациях. Поддерживает возможность параллельно пробития чеков на одной ККМ несколькими пользователями. Поддерживает Веб-сервер Атол. Соответствует требованиям 54-ФЗ. Поддерживает ФФД 1.0, 1.05, 1.1 и 1.2. Разделяет чеки по нескольким СНО. Поддерживает механизмы подключения ККТ по TCP/IP, для работы через RDP или интернет. Поддержка маркировки и разрешительного режима. Поддержка пробития чеков с новыми ставками НДС 5%, НДС 7% и НДС 22%.
7900 руб.
25.05.2015 406058 2036 3372
Оптовая торговля Производство готовой продукции (работ, услуг) Розничная торговля Обмен с ГосИС Разработчик Бухгалтер Пользователь 1С:Предприятие 8 1C:Бухгалтерия Сельское хозяйство и рыболовство Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Рестораны, кафе и фаст-фуд Пищевая промышленность Россия Бухгалтерский учет Управленческий учет Платные (руб)
Универсальная конфигурация Хамелеон Меркурий для взаимодействия с системой Меркурий (тестовый+рабочий+демо контур) может использоваться для интеграции в любую конфигурацию на базе 1С, версии ПРОФ и выше. Основное отличие от других решений - работа через веб-интерфейс и API 2.0(API 2.1). Для удобства реализован общий интерфейс в виде обработки, схожей с интерфейсом Меркурий, но возможностей гораздо больше, т.к. при интеграции в Вашу учетную систему, можно на основании Ваших справочников и документов, создавать соответствующие документы и справочники в системе Меркурий и наоборот.
11000 руб.
08.11.2017 132052 293 153
•для вывода из оборота при продаже и при оказании медицинской помощи это ККТ или РВ (там, где нет ККТ), •для всех прочих операций –прямое обращение к ИС МДЛП с использованием электронной подписи участника оборота (для этого требуется компьютер с подключением к сети Интернет и установленным на нем средством криптографической защиты информации).
ссылка на первоисточник также указана в статье
В АПИ РВ кстати есть возможность отправить документ шаблон, получив который можно в него только досканировать упаковки. Я создавал механизм выгрузки шаблонов и загрузки заполненных документов обратно в 1с. Но данный механизм так никому и не пригодился, и в статью его добавлять не стал.
Подскажите пожалуйста.
Такая ситуация:
Аптека больницы.
По ошибке выдали для лечения больных несколько коробок маркированного препарата, не пропустив их при этом через РВ для выбытия.
Используем 1С Больничную аптеку.
Как можно их вывести из оборота.
Самих коробок уже нет. Но есть GTINы.
Вот у Вас 500 ТУ и в них 5000 КМ.
Вопрос номер один как Вы получаете - приход ТУ, дальнейшая разагрегация и выдача через РВ?
Примечание: выдача ТУ через РВ на текущий момент невозможна(тут так МДЛП решает).
Вопрос номер два - сканируете ли Вы в приемке КМ или исключительно ТУ.
Если Вас интересует отсутствие сканирования упаковок вообще у нас есть уже готовое решение, но тут необходимо обсуждать в личной переписке.
Пытаюсь сделать подключение из 1С 7.7 к РВ.
На v1.0 нормально отрабатывают команды состояния РВ, отправляет документ, только не проходит команда requests. А v3.0 ни в какую не хочет общаться. Дает ошибку на команде Send(). WinHttp.WinHttpRequest: Не удается установить соединение с сервером
Через РВ выводить ЛП очень не удобно: приходится нажимать кучу ненужных кнопок.
URL = "https://"+СокрЛП(Фирма.IP_РВ)+":"+СокрЛП(Фирма.Порт_РВ)+"/v1/state";
WinHttp = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Open("GET", URL, 0);
// ************************** Начало блока по отключению защищенного соединения **********
Скрипт = СоздатьОбъект("MSScriptControl.ScriptControl");
Скрипт.language="javascript";
Скрипт.AddObject("WinHttp",WinHttp);
Скрипт.Eval("WinHttp.Option(2)=65001");
Скрипт.Eval("WinHttp.Option(4)=13056");
Скрипт.Eval("WinHttp.Option(6)=true");
Скрипт.Eval("WinHttp.Option(12)=true");
// ************************** Конец блока по отключению защищенного соединения **********
WinHttp.setRequestHeader("Content-type", "application/json; charset=UTF-8");
WinHttp.setRequestHeader("Authorization", глКодироватьBase64("operator:123456"));
WinHttp.Send();
Если WinHttp.Status = 200 Тогда
//Сообщить(WinHttp.ResponseText);
Иначе
Сообщить("HTTP " + WinHttp.Status + " " + WinHttp.StatusText);
Возврат ;
КонецЕсли;
ПоказатьКак я понимаю Вы пытаетесь запросить статус документа который уже отправлен в РВ и тут падает по ошибке на этапе соединения с РВ?
Я уже думаю, что можно и без этого обойтись. Можно проверить двумя способами результат:
- запросить документы напрямую из МДЛП (не пробовал, я пишу для лечебного учреждения, а там пока немного такого товара), проверить наличие самого документа;
- пока сделал проверку статуса товара. отправленный документ можно проверить в личном документе, статус товара меняется через 15-30 минут.
- отправить документ в РВ, присвоив это запросу Новый УИД(я его храню в регистре сведений, так как бывают ситуации что документ отправляется несколько раз);
- взять метод запроса статуса и подставить этот УИД в него (пример ниже);
- отправить его и обработать ответ от РВ;
//здесь получаю свой РВ - хранится в отдельном справочнике со всеми настройками и указывается в документе
//Получаю Номер и тот самый УИД что был при отправке
РегистраторВыбытияДок = АТМ_МетодыРВСервер.ПолучитьЗначениеРеквизитаОбъекта(Документ,"РегистраторВыбытия",Истина);
Номер = АТМ_МетодыРВСервер.ПолучитьЗначениеРеквизитаОбъекта(Документ,"НомерДокумента",Истина);
УИДдок = АТМ_МетодыРВСервер.ПолучитьУИДДокумента(Документ);
Метод = "/v1/requests/" + УИДдок;
СтруктураПодключения = СформироватьСоединениеИЗапрос("Get",РегистраторВыбытияДок,Номер,УИДдок,Метод);
HTTPGET = СтруктураПодключения.Соединение;
Запрос = СтруктураПодключения.Запрос;
Каталог = КаталогВременныхФайлов();
ИмяФайла = Строка(Новый УникальныйИдентификатор);
ФайлОтвет = Каталог + ИмяФайла;
//в Ответ хранится уже нужная информация которую можно обработать
Попытка
Ответ = HTTPGET.Получить(Запрос, ФайлОтвет);
Исключение
Инфо = "Не удалось отправить запрос, проверьте регистратор выбытия";;
Сообщить(Инфо);
Прервать;
КонецПопытки;
ПоказатьВ функции СформироватьСоединениеИЗапрос я формирую структуру для запроса в РВ
//здесь укажите свои настройки, у меня они хранятся в справочнике
HTTP = Новый HTTPСоединение(НастройкиПодключения.Айпи,НастройкиПодключения.Порт,,,,,Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос(Метод);
Если ТипЗапроса = "Post" Тогда
Запрос.Заголовки.Вставить("Content-Type", "application/json");
КонецЕсли;
Если ТипЗапроса = "Get" Тогда
Запрос.Заголовки.Вставить("Accept", "application/json");
КонецЕсли;
//здесь стандартная авторизация Basic
Если НастройкиПодключения.Свойство("СтрокаАвторизации") Тогда
Запрос.Заголовки.Вставить("Authorization", НастройкиПодключения.СтрокаАвторизации);
КонецЕсли;
СтруктураВозврата.Вставить("Соединение",HTTP);
СтруктураВозврата.Вставить("Запрос",Запрос);
СтруктураВозврата.Вставить("Ошибка",Ложь);
Возврат СтруктураВозврата;
ПоказатьПопробуйте такой пример.
и метод /v1/requests/ выполняется.
Теперь осталось разобраться с v3.0
Такое ощущение, что он не принимает пароль и пользователя.
Порт и IP я храню в справочнике организаций: порт 8080, IP пингуется.
Логин и пароль какие только не пробовал:
эти мне сказали использовать в поддержке ЧЗ
user1:Pas$w0rd
user2:qwE123xx
эти я уже взял с форума и не только
operator:123456
administrator:654321
проверял результат кодировки на сайтах, строка получается такая же.
результат один HTTP 404 Not Found
− Оператор - логин: user1, пароль: Pas$w0rd; − Администратор - логин: user2, пароль: qwE123xx.
Пароли могут быть изменены через меню РВ КМ.
Какой у Вас РВ - Штрих или АТОЛ?
И если ошибка авторизации это будет не 404 ошибка.
Скорее всего тут не находит саму УРЛ.
Вам еще может помочь обработка которая на самом РВ находится - подключите его в настройках через юсб, скачайте ее. Там можно будет настроить и логины и пароли и запросить все методы доступные в АПИ.
Пример кодировки:
user2 и qwE123xx
basic dXNlcjI6cXdFMTIzeHg=
Вот как в коде:
ЛогинПароль = "" + СтруктураПодключения.Логин + ":" + СтруктураПодключения.Пароль;
СтрокаДвоичная = ПолучитьДвоичныеДанныеИзСтроки(ЛогинПароль,КодировкаТекста.UTF8);
СтрокаКодированная = Base64Строка(СтрокаДвоичная);
СтрокаАвторизации = "Basic " + СтрокаКодированная;
СтруктураПодключения.Вставить("СтрокаАвторизации", СтрокаАвторизации);
Ошибка = Ложь;
Я не обратил внимания, просто скопировал, там на команду GET была строка
WinHttp.setRequestHeader("Content-type", "application/json; charset=UTF-8");
РВ 1.0 проглатывал ))
поменял на
WinHttp.setRequestHeader("Accept", "application/json");
сразу получаю ответ:
WinHttp.WinHttpRequest: Не удается установить соединение с сервером
Обработку TestRv я запускал - там все работает.
WinHttp = СоздатьОбъект("Msxml2.XMLHTTP.6.0");
URL = "https://"+СокрЛП(Фирма.IP_РВ)+":"+СокрЛП(Фирма.Порт_РВ)+"/v1/deviceInfo";
WinHttp = СоздатьXMLHttpRequest(URL);
WinHttp.Open("GET", URL, 0);
WinHttp.SetRequestHeader("Accept", "application/json");
WinHttp.SetRequestHeader("Authorization", "Basic "+глКодироватьBase64("user1:Pas$w0rd"));
WinHttp.Send();
Только постоянно требуют подтверждения сертификата. С этим некогда возиться.
Проще один раз нажать кнопку "да" мышкой, чем сканировать и выводить ЛП с помощью РВ. ))
А почему, после отправки данных в РВ, проверку выбытия не проверять методом 8.3.3.?
Если status - "in_medical_use" у всех позиций, то можно дальше ведь не проверять.
Если нет, тогда уже заморачиваться с поиском квитанций и ошибок.
Я у себя сделал контроль приемки и вывода товара - запросом из общего КИЗ (8.3.3.).
Если после отправки документов по схеме приемки товара (601,602,702) получаю статус "в обороте" и МД организации, то товар нормально перемещен. Если нет - нужно разбираться и смотреть квитанции.
При выводе через РВ создается куча документов по каждому виду ЛП. Чтобы их не искать и не анализировать,
я тем же запросом проверяю статус sgtin`ов в КиЗ (8.3.3.). Как правило, если нет тормозов в МДЛП, то у них в течение 10 минут статус становится "выведен из оборота". Если ЛП не выводится из оборота, то в 90% случаев виноват РВ, что не отправляет документ. Были такие проблемы - документ в МДЛП не появлялся. Тогда только удаление документа и отправка по новой.
Я статью писать не буду - можете выложить код.
Отправляем Уведомление о выдаче для оказания медпомощи - все нормально.
В Кабинете ЧЗ все приходит, принято успешно.
В 1С в самом документе нажатие кнопки "Получите статус задания от РВ" ни к чему не приводит - Изменено объектов 0.
При выполнении общего обмена вылетает ошибка:
Остаток упаковки [КИЗ] меньше требуемого. Возможно, в информационной базе, упаковка (или ее часть) была выведена из оборота ранее.
При этом отправляли полную упаковку, не дробленую и в очереди обработки входящих документов МДЛП висят квитанции об успешном приеме уведомлений с этими КИЗ-ами
РВ - Штрих-М, подключен в сеть.
1. Могу посоветовать проверить регистр сведений УпаковкиМДЛП (установить фильтры по нужной упаковке и посмотреть ее движения по базе) - это по частичной отправке. Обратите внимание что при полном обмене может быть ошибка и на другой документ, так как происходит обмен всеми документами.
2. Посмотреть по идентификатору МДЛП что в документе(xml в протоколе обмена) и что в МДЛП (идентификатор отчета СУЗ - по нему ищутся квитанции к документу, его должен вернуть РВ).
3. Проверить настройки периодов загрузки в 1с (в карточке организации и в константах ГраницаЗагрузкиВходящихДокументовМДЛП и ГраницаЗагрузкиИсходящихДокументовМДЛП).
Вряд ли поможет в конкретно этой ситуации, но рекомендую:
- запросить обновления РВ и перезагрузить его.
- обновить библиотеку МДЛП до свежей версии (были изменения по обменам,1.2.4.3 актуальная на 27.05.2021)
Я не указал сразу. Мы в 1С Медицина. Больничная аптека ведем учет. Потому возможн оен в той теме вопрос задаю(
Библиотека обновлена вместе в с конфигурацией.
Самое странное что часть КИЗов-уведомлений проходит без проблем. Вот например сегодня большая часть прошла - 3 зависли.
Тоесть квитанции на них пришли, висят в очереди обработки входящих документов МДЛП, но не сопоставляются с имеющимися документами. Сообщение с ошибкой не нехватке количества.
В карточке организации настройку периодов выгрузки не нашел, в константах обе границы - пустые
Странно то, что часть проходит без проблем документов, лишь некоторые подвисают. И ответы на них - квитанции приходят, но не стыкуются.
В том то и проблема - в МДЛП все отлично - приходят все документы, все квитанции образуются со статусом:
<operation_comment>Успешное завершение операции</operation_comment>
Эти квитанции потом загружаются в 1С и оказываются в Очереди обработки входящих документов МДЛП, но вот дальше...
Есть Уведомление о выбытии с КИЗ, есть квитанция об успешной обработке в ЧЗ, но видимо при попытке их совместить (провести уведомление в статус "Исполнено") и вылетает эта ошибка в 1С, что КИЗ якобы уже частично или полностью выведен из оборота.
Сегодня проверял - РВ Штрих-М обновлен до последней версии ПО - перезагрузил его.
Нигде в 1С этот КИЗ ранее не выбывал (да и мало у нас документов в день), "Доли упаковок МДЛП (Регистры сведений)" пусто.
в "Реестр выбытия упаковок МДЛП (Регистры сведений)" Данная упаковка в единственном экземпляре с "Доля упаковки" = 1,00000"
Четкое ощущение, что при проверке на остатки долей он неправильно считает количество.
Вчера вечер ковырялся в конфигураторе, пытаясь понять, где он ошибку находит, но не осилил. УФ для меня темный лес.
Нашел только, что ошибка вылетает вот в этом куске модуля:
В общем модуле "ИндеграцияМДЛП"
| ВЫБОР
| КОГДА ЕСТЬNULL(ОстаткиДолейУпаковок.ДоляУпаковки, 1) + ЕСТЬNULL(ОстаткиДолейУпаковокВРеестреВыбытия.ДоляУпаковки, 1) - 1 < НомераУпаковок.ДоляУпаковки
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЕстьОшибкаОтсутствуетДостаточноеКоличество
Вот это вот ЕстьОшибкаОтсутствуетДостаточноеКоличество и выводит ошибку.
Так что в общем со стороны ЧЗ и РВ проблем нет - все регистрируется и выводится.
Косяк в момент изменения статума Уведомления в 1С на "Исполнено"
Приходится в 1С вручную эти Уведомления переводить через регистры в статус "Исполнено" и через "Реестр выбытия" упаковки переводить в статус "выбыли"
Писал недавно в техподдержку прислали ответ "Возможно вы пытаетесь вывести упаковку из оборота повторно"
Поковырявшись с отладчиком выяснил, при обработке глючных упаковок идет сравнение с Уведомлением с другим номером.
Тоесть допустим в базе номер уведомления (документ резерва )1440 а сравнение по КИЗу идет с уведомлением номер 1486 (последний созданный в базе при этом имеет нмоер 1485).
При этом дата и время совпадают полностью.
В продолжении темы - общение с техподдержкой пока ничего не дало. Кроме просьб записать видео и повторения вопросов.
Нашел такой вот костыль - может у кого повторится ситуация:
Если перед обменом - Запросом статуса задания от РВ запросить через обработку "Реестр выбытия" информацию об упаковках, а потом уже запрашивать статус задания от РВ - Нажимать кнопку Выполнить обмен - проблема не появляется. тестирую пока третий день - пока еще ни разу не было - хотя раньше каждый день два-три уведомления застревали.
Вообще складывается ощущение, что в процессе запроса статуса задания от РВ происходит сбой, и где-то в 1С появляется отметка, что статус изменен и информация получена, а сама информация об отправке упаковок при этом в 1С от РВ не поступает.
В итоге кнопка "Получите статус задания от РВ"ничего не дает больше - и в ЖР никаких записей при ее нажатии не появляется. В протоколе обмена с МДЛП только одна строчка висит активная "Регистрация выдачи ЛП для оказания медицинской помощи в СКЗКМ, Версия 1" и с пиктограммой "Часы", а не "Зеленая стрелка". Тоесть нет сообщения от РВ об удачной отправке. Но и повторно его не подгрузить ибо система считает, что оно подгружено. А поскольку квитанции об отправке нет - и квитанция о приеме не подвязывается и висит в очереди обработки выдавая ошибку - "Остаток упаковки КИЗ-упаковки меньше требуемого. Возможно, в информационной базе, упаковка (или ее часть) была выведена из оборота ранее."
Почему так происходит - возможно сбой сети или РВ подвисает и не всегда корректно пересылает данные об отправке. А система не может повторно их с него подгрузить. При этом использование обработки "Реестр выбытия" тормошит (будит) РВ и последующий обмен с ним идет уже без ошибок.
Неясно в общем, но костыль воде работает.
Начались такие проблемы месяца два назад, при этом месяца четыре назад нам РВ поменяли - старый безвозвратно завис.
Так что скорее всего проблемы из-за РВ, но доказать это техподдерке ЧестноЗнака будет наверно невозможно, ибо - "работайте в Фарма-просто, а в 1С мы не знаем как процессы идут.
Хорошо бы какую обработку, насильно запрашивающую статус от РВ несмотря ни на что, но тут моих знаний точно нехватит.
Может все же техподдержка 1С медицины поможет. Надежда, как говорится, умирает последней.
Пытаемся интегрировать библиотеку МДЛП в ERP 2.0. Вроде как сделали все по инструкции, настройку регистратора выбытия выполнили.
Теперь получается что в документе "Уведомление о выдаче для оказания медицинских услуг" пытаемся сканировать код упаковки регистратором - нет никакой реакции, при попытке сканировать подключенным сканером штрих кода - получаем в строке поиска полный SGITN, включающий секурный хвост.
Вопроса как обычно два, кто виноват и что делать? В смысле как лечить :))
Как я понял, оно, в данном документе должно работать из коробки, или нужно дописывать свои обработчики событий?
Телефонная поддержка 1с отправляет в почту, почта упорно молчит.
Сейчас же библиотека уже умеет работать по 2 схемам (10531 и 531) и оборудованием РВ. Рекомендую настроить справочники ОрганизацияМДЛП, МестадеятельностиМДЛП, Рабочие места, РегистраторыМДЛП и использовать функционал библиотеки МДЛП "из коробки". На скриншоте порядок настройки. Само собой РВ по сети должен быть настроен согласно инструкции из ФГИС МДЛП.
ну вроде как настройки сделаны аналогично, интеграция с "Честным знаком" настроена и работает. Сами остатки получаются. Не получается оформить документ "Уведомление о выдаче для оказания медицинских услуг" (пример на скриншоте). Может что-то не то делаю совместно с тамошней барышней. Как я понял в этом окошке, при сканировании упаковок должна заполняться таблица справа. Однако по сканированию кода его значение попадает в поле "поиск" правой табличной части.
РВ Атол версии 1 (кнопочный).
Возможно на нем что-то не донастроено?
Еще раз спасибо и извините за беспокойство!
Рейтинг: 46
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 1319821
Создание 02.11.20 09:20
Обновление 02.11.20 09:20
Просмотры 23875
Загрузки 0
Рейтинг
13
Комментарии 71
Код открыт Да
Рубрики Розничная торговля
Кому Разработчик
Тип файла Нет файла
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система Не имеет значения
Страна Россия
Отрасль Фармацевтика, аптеки
Налоги Не имеет значения
Вид учета Управленческий учет
Доступ к файлу Бесплатно (free)