Как настроить работу 1С:Розница 1.0 с ТС ПИОТ для разрешительного режима маркировки

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

С введением разрешительного режима (РР) для маркированных товаров перед пользователями устаревших конфигураций, таких как 1С:Розница 1.0 или сильно кастомизированных «нетленок», встала серьезная техническая задача. Официальная поддержка этих программ прекращена, а работа через прямое облачное API «Честного Знака» (X-API-KEY) постепенно ограничивается. Решением является использование ТС ПИОТ (Техническое средство получения информации о товаре). Рассмотрим подробно, как реализовать интеграцию своими силами, используя HTTP-запросы и имитацию сертифицированного программного обеспечения.

Суть проблемы и стратегия решения

Основная сложность заключается в том, что для работы с ТС ПИОТ программное обеспечение (ПМСР — Программное обеспечение участника оборота товаров) должно быть сертифицировано и иметь уникальный идентификатор в реестре ГИС МТ. Проходить сертификацию для старой «Розницы 1.0» долго и дорого. Проанализируем возможность «прикинуться» актуальной версией программы. ТС ПИОТ (например, решение от АО «ЕСП») представляет собой локальную службу, которая принимает запросы по HTTP, проверяет коды маркировки в локальной базе или в облаке и возвращает ответ, который необходимо передать в кассовый аппарат.

Разберем по шагам, как настроить этот процесс в 1С.

Шаг 1. Идентификация программного обеспечения (ПМСР)

Чтобы ТС ПИОТ принял наш запрос, мы должны передать данные о том, какое ПО обращается к сервису. Опытным путем и через анализ кода современных конфигураций (БП 3.0, УТ 11) выясним необходимые параметры. Нам понадобятся ИдентификаторКассовогоПО и КонтрольнаяСумма (токен).

Для всех типовых решений 1С используется единый GUID. Рассмотрим пример функции, которую можно добавить в глобальный модуль или общую обработку:


Функция ИдентификаторПМСР_ТСПИоТ() Экспорт
    // Официальный ID решений фирмы 1С в реестре ГИС МТ
    Возврат "5af4663c-a113-4b47-b959-079ca6dda199";
КонецФункции

Также необходимо сформировать token. В типовых решениях он представляет собой хэш-сумму строки версии библиотеки. Рассмотрим фрагмент кода для получения этого значения:


ВерсияБиблиотеки = "1.6.2.1"; // Пример версии, можно использовать актуальную
Токен = ОбщегоНазначенияИС.ХэшСуммаСтроки(ВерсияБиблиотеки); 
// Для версии 1.6.2.1 хэш будет: qGwEgabxDD7OLSN8EH95M8iosQ1N+ziY+wdcfuUOiCI=

Шаг 2. Формирование HTTP-запроса к ТС ПИОТ

Взаимодействие происходит через POST-запрос к локальному адресу службы ESM/ECM (обычно https://localhost:51401/api/v1/codes/check). Проанализируем структуру тела запроса в формате JSON. Нам нужно передать массив кодов и данные о клиенте.

Пример структуры JSON-запроса:


{ 
    "codes": [ "0104650072140874215KdfXI931H3C" ], 
    "client_info": {
        "name": "1C:Retail 1.0 (Legacy)",
        "version": "1.6.2.1",
        "id": "5af4663c-a113-4b47-b959-079ca6dda199",
        "token": "qGwEgabxDD7OLSN8EH95M8iosQ1N+ziY+wdcfuUOiCI="
    }
}

В 1С 8.3 для этого используем объект HTTPЗапрос и HTTPСоединение. Обратите внимание, что ТС ПИОТ часто работает по HTTPS с самоподписанным сертификатом, поэтому при создании соединения может потребоваться игнорировать ошибки сертификата.

Шаг 3. Обработка ответа и принятие решения

После отправки запроса мы получаем JSON с результатами проверки. Выясним, на какие поля ориентироваться. Основные флаги безопасности — это verified (код проверен), realizable (товар разрешен к реализации) и isBlocked (не заблокирован).

Важнейшие поля для дальнейшей печати чека:

  1. reqId — уникальный идентификатор запроса проверки.
  2. reqTimestamp — временная метка проверки.

Рассмотрим пример обработки ответа:


// Предположим, ОтветТекст содержит JSON ответа
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(ОтветТекст);
ДанныеОтвета = ПрочитатьJSON(Чтение);

Для Каждого Результат Из ДанныеОтвета.codesResponse.codesResponse Цикл
    Если Результат.codes[0].realizable Тогда
        // Товар можно продавать
        ИдентификаторЗапроса = Результат.reqId;
        ДатаВремяЗапроса = Результат.reqTimestamp;
        // Сохраняем эти данные для формирования чека
    Иначе
        Предупреждение("Продажа товара запрещена системой маркировки!");
    КонецЕсли;
КонецЦикла;

Шаг 4. Формирование фискального чека (Тег 1260)

Это самый важный этап. Данные о проверке (разрешительный режим) должны попасть в фискальный накопитель и ОФД через тег 1260 (Отраслевой реквизит чека). В 1С это реализуется через добавление структуры IndustryAttribute в XML-пакет, отправляемый на драйвер ККТ.

Проанализируем структуру XML-пакета для драйвера АТОЛ (формат CheckPackage):


<?xml version="1.0" encoding="UTF-8"?>
<CheckPackage>
    <Parameters CashierName="Иванов" OperationType="1" TaxationSystem="0">
        <!-- Отраслевой реквизит на весь чек (необязательно, но желательно) -->
        <IndustryAttribute IdentifierFOIV="030" DocumentDate="21.11.2023" DocumentNumber="1944" 
             AttributeValue="UUID=90b42842-1cbe-4310-876a-78ffb750a73e&Time=1781528950749"/>
    </Parameters>
    <Positions>
        <FiscalString Name="Товар Маркированный" Quantity="1" PriceWithDiscount="100" AmountWithDiscount="100" 
             VATRate="20" VATAmount="16.67" MarkingCode="[Код_в_Base64]" CalculationSubject="33">
            <!-- Отраслевой реквизит на конкретную позицию -->
            <IndustryAttribute IdentifierFOIV="030" DocumentDate="21.11.2023" DocumentNumber="1944" 
                 AttributeValue="UUID=[reqId]&Time=[reqTimestamp]"/>
        </FiscalString>
    </Positions>
    <Payments Cash="100" />
</CheckPackage>

Важно: Значение AttributeValue должно строго соответствовать формату UUID=...&Time=.... Здесь UUID — это ваш reqId, а Time — это reqTimestamp.

Типичные ошибки и способы их решения

Ошибка 514: «Не удалось получить ответ от ГИС МТ»

Выясним причину: часто это происходит из-за того, что служба ТС ПИОТ теряет связь с кассой или облаком «Честного Знака». Проверьте следующие моменты:

  1. Версия прошивки ККТ: Для АТОЛ рекомендуется версия 5.16 и выше. На более старых прошивках (например, 5.15) модуль ECM может работать нестабильно.
  2. Монопольный захват порта: Если флаг «Включено» стоит в тесте драйвера ККТ, ТС ПИОТ не сможет обратиться к кассе. Флаг должен быть выключен во всех утилитах, кроме самой 1С в момент пробития.
  3. Перезапуск служб: В случае зависания помогает ручной перезапуск служб ESM: Control Module и ESM: Orchestrator. Можно настроить автоматический перезапуск через КомандаСистемы в 1С при получении 514 ошибки.

Работа с несколькими кассами на одном сервере

Если у вас несколько кассовых аппаратов подключены к одному серверу, стандартная установка ТС ПИОТ может конфликтовать за порты. Проанализируем решение: необходимо убедиться, что в настройках драйвера ККТ включен порт GRPC (по умолчанию 50051). ТС ПИОТ использует этот протокол для связи с железом. Если касс много, каждой кассе в конфигурации ПИОТ должен быть назначен свой идентификатор и порт.

Перспективы решений от 1С

Стоит отметить, что фирма «1С» выпустила собственное решение — «1С:Маркировка.ТС ПИОТ». Оно бесплатно для пользователей с договором ИТС ПРОФ. Однако его интеграция в старую «Розницу 1.0» сложнее, так как оно рассчитано на использование в составе современных БСП. Поэтому метод прямого обращения к API ТС ПИОТ от АО «ЕСП», описанный выше, остается наиболее гибким для «нетиповых» и старых систем.

Соблюдение данных инструкций позволит вам избежать автоматических штрафов, которые ГИС МТ начинает фиксировать при отсутствии данных о проверке кода в чеке. Помните, что с 1 сентября 2024 года наличие тега 1260 в чеках для большинства товарных групп является обязательным условием легальной торговли.

← На главную