Как исправить ошибку авторизации МДЛП в Розница. Аптека 2.3 при проверке остатков?

Программист 1С v8.3 (Управляемые формы) 1С:Розница
← На главную

При работе с системой МДЛП (Маркировка лекарственных препаратов) в конфигурации 1С:Розница. Аптека 2.3 пользователи часто сталкиваются с критической ошибкой, когда выполняется запрос остатков из системы "Честный знак" или первичная авторизация. Система выдает сообщение: "Не удалось получить данные для подписания по причине: Ошибка при получении кода аутентификации: Не удалось установить HTTP-соединение с сервером api.mdlp.crpt.ru". Причиной указывается, что удаленный узел не прошел проверку. Проанализируем ситуацию и разберем пошагово, как восстановить работоспособность обмена.

Выясняем причину возникновения ошибки

Основная причина данной проблемы заключается в изменении цепочки сертификатов безопасности на стороне серверов ЦРПТ (Честный ЗНАК). С конца 2024 года продуктовый контур МДЛП перешел на использование TLS-сертификатов, выпущенных российским удостоверяющим центром (Минцифры). Помимо проблем с TLS, для стабильной работы в интерфейсе РМК также важно настроить автоматическое обновление токенов ИС МП, иначе авторизация будет регулярно прерываться. Если на компьютере или сервере, где выполняется код 1С, отсутствуют актуальные корневые и промежуточные сертификаты Минцифры, защищенное соединение обрывается еще до передачи данных логина и пароля.

Важно различать: сертификат вашей электронной подписи (КЭП) может быть полностью исправен и проходить проверку в 1С, но ошибка возникает на уровне протокола HTTPS. В некоторых случаях для диагностики полезно использовать инструменты, позволяющие выполнить получение информации по кодам марок из Честного знака в обход типовых механизмов (поможет универсальное решение для автоматизации интеграции с ЦРПТ и МДЛП), чтобы убедиться в доступности API.

Способ 1. Установка сертификатов в хранилище операционной системы

Первым делом необходимо убедиться, что операционная система доверяет узлу api.mdlp.crpt.ru. Рассмотрим алгоритм действий для Windows:

  1. Попробуйте открыть адрес https://api.mdlp.crpt.ru/api/v1/auth в браузере (например, Chrome или Яндекс.Браузер). Если браузер выдает предупреждение о небезопасном подключении, значит, корневые сертификаты отсутствуют.
  2. Просмотрите сертификат сайта через браузер. Перейдите на вкладку "Путь сертификации". Если верхний элемент цепочки (обычно это "Минцифры России") помечен красным крестом, его нужно экспортировать.
  3. Сохраните сертификат на рабочий стол и откройте его. Нажмите кнопку "Установить сертификат".
  4. Важный нюанс: при установке обязательно выберите путь вручную — "Поместить все сертификаты в следующее хранилище" и выберите "Доверенные корневые центры сертификации".
  5. Если база работает в клиент-серверном варианте (SQL), эти действия необходимо повторить на сервере приложений 1С под учетной записью, от имени которой запущена служба 1C:Enterprise Server Agent. Также рекомендуется установить сертификаты в хранилище "Локальный компьютер".

Способ 2. Программная модификация общего модуля (Патч кода)

Если установка сертификатов в ОС не помогает (особенно актуально для серверных баз на Windows или Linux), проблему можно решить принудительным указанием параметров защищенного соединения в коде 1С. Это позволит системе корректно обрабатывать запрос списка кодов маркировки по заданным фильтрам и другие операции обмена.

Нам необходимо внести изменения в общий модуль ТранспортМДЛПКлиентСервер. Найдем функцию ВыполнитьHTTPЗапрос. Суть правки заключается в том, чтобы при обращении к серверу МДЛП использовать объект ЗащищенноеСоединениеOpenSSL, который позволяет платформе более гибко работать с сертификатами.

Рассмотрите пример кода, который нужно внедрить (лучше всего использовать расширение с аннотацией &Вместо):


&Вместо("ВыполнитьHTTPЗапрос")
Функция EF_ВыполнитьHTTPЗапрос(ТранспортныйМодуль, ДанныеЗапроса, Перенаправления, Соединение = Неопределено)
    
    Адрес = ТранспортныйМодуль.Адрес;
    Порт = ТранспортныйМодуль.Порт;
    // ... получение логина/пароля из параметров ...

    Если Соединение = Неопределено Тогда
        Если ТранспортныйМодуль.Адрес = "api.mdlp.crpt.ru" Тогда
            // Принудительно создаем новое защищенное соединение для МДЛП
            Защита = Новый ЗащищенноеСоединениеOpenSSL();
            Соединение = Новый HTTPСоединение(Адрес, Порт, , , , ТранспортныйМодуль.Таймаут, Защита);
        Иначе
            // Стандартная логика для других узлов
            Соединение = Новый HTTPСоединение(Адрес, Порт, , , , ТранспортныйМодуль.Таймаут, ЗащищенноеСоединение);
        КонецЕсли;
    КонецЕсли;

    // Вызов метода
    Попытка
        HTTPЗапрос = Новый HTTPЗапрос(ДанныеЗапроса.АдресРесурса, ДанныеЗапроса.Заголовки);
        Если ДанныеЗапроса.ТипЗапроса = "POST" Тогда
            HTTPЗапрос.УстановитьТелоИзСтроки(ДанныеЗапроса.Тело);
        КонецЕсли;
        HTTPОтвет = Соединение.ВызватьHTTPМетод(ДанныеЗапроса.ТипЗапроса, HTTPЗапрос);
    Исключение
        // Обработка ошибок
        ВызватьИсключение;
    КонецПопытки;
    
    Возврат HTTPОтвет;
КонецФункции

Обратите внимание: При создании объекта ЗащищенноеСоединениеOpenSSL() не забудьте про пустые скобки. Правильная настройка программного интерфейса критична, если вы используете механизмы, где требуется синхронизация номенклатуры с ЕСКЛП и МДЛП, так как ошибки соединения заблокируют обновление данных о лекарственных препаратах.

Способ 3. Особенности работы на Linux (Ubuntu/PostgreSQL)

Если ваш сервер 1С работает под управлением Linux, установка сертификатов в хранилище Windows не поможет. Выполним следующие шаги для настройки окружения:

  1. Обновите пакет ca-certificates в операционной системе командами sudo apt-get update и sudo apt-get install ca-certificates.
  2. Добавьте сертификаты Минцифры (в формате .crt) в директорию /usr/local/share/ca-certificates/ и выполните sudo update-ca-certificates.
  3. Проверьте поддержку ГОСТ в OpenSSL. В файле конфигурации openssl.cnf должны быть прописаны соответствующие алгоритмы (LEGACY-GOST и т.д.).
  4. В ряде случаев помогает ручное добавление сертификатов в файл cacert.pem, который находится в каталоге установленной платформы 1С.

Способ 4. Использование патчей от разработчика (Рарус)

Разработчики отраслевого решения "Розница. Аптека" выпускают оперативные исправления. Если после настройки связи выясняется, что данные в системе и в "Честном знаке" всё равно расходятся, может потребоваться специализированная конфигурация для инвентаризации маркировки, которая поможет выявить расхождения на складе — для этого подойдёт обработка инвентаризации кодов маркировки и выравнивания остатков.

Вендор предлагает патчи, которые принудительно переносят выполнение запроса авторизации с сервера на сторону клиента (Тонкий клиент). Это эффективно, так как на клиентском рабочем месте обычно уже настроены и КриптоПро, и все необходимые цепочки сертификатов для работы в браузере. Убедитесь, что у вас установлена последняя версия конфигурации (не ниже 2.3.23.65) и все актуальные исправления.

Подведем итог: решение проблемы чаще всего кроется в комбинации установки корневых сертификатов Минцифры в системное хранилище и небольшом исправлении общего модуля для использования OpenSSL при инициализации HTTP-соединения. Проанализировав эти шаги, вы сможете восстановить обмен с МДЛП и успешно провести сверку остатков — для восстановления работы есть инструмент восстановления работоспособности маркировки.

← На главную