С введением разрешительного режима (РР) для маркированных товаров перед пользователями устаревших конфигураций, таких как 1С:Розница 1.0 или сильно кастомизированных «нетленок», встала серьезная техническая задача. Официальная поддержка этих программ прекращена, а работа через прямое облачное API «Честного Знака» (X-API-KEY) постепенно ограничивается. Решением является использование ТС ПИОТ (Техническое средство получения информации о товаре). Рассмотрим подробно, как реализовать интеграцию своими силами, используя HTTP-запросы и имитацию сертифицированного программного обеспечения.
Основная сложность заключается в том, что для работы с ТС ПИОТ программное обеспечение (ПМСР — Программное обеспечение участника оборота товаров) должно быть сертифицировано и иметь уникальный идентификатор в реестре ГИС МТ. Проходить сертификацию для старой «Розницы 1.0» долго и дорого. Проанализируем возможность «прикинуться» актуальной версией программы. ТС ПИОТ (например, решение от АО «ЕСП») представляет собой локальную службу, которая принимает запросы по HTTP, проверяет коды маркировки в локальной базе или в облаке и возвращает ответ, который необходимо передать в кассовый аппарат.
Разберем по шагам, как настроить этот процесс в 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=
Взаимодействие происходит через 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 с самоподписанным сертификатом, поэтому при создании соединения может потребоваться игнорировать ошибки сертификата.
После отправки запроса мы получаем JSON с результатами проверки. Выясним, на какие поля ориентироваться. Основные флаги безопасности — это verified (код проверен), realizable (товар разрешен к реализации) и isBlocked (не заблокирован).
Важнейшие поля для дальнейшей печати чека:
reqId — уникальный идентификатор запроса проверки.reqTimestamp — временная метка проверки.Рассмотрим пример обработки ответа:
// Предположим, ОтветТекст содержит JSON ответа
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(ОтветТекст);
ДанныеОтвета = ПрочитатьJSON(Чтение);
Для Каждого Результат Из ДанныеОтвета.codesResponse.codesResponse Цикл
Если Результат.codes[0].realizable Тогда
// Товар можно продавать
ИдентификаторЗапроса = Результат.reqId;
ДатаВремяЗапроса = Результат.reqTimestamp;
// Сохраняем эти данные для формирования чека
Иначе
Предупреждение("Продажа товара запрещена системой маркировки!");
КонецЕсли;
КонецЦикла;
Это самый важный этап. Данные о проверке (разрешительный режим) должны попасть в фискальный накопитель и ОФД через тег 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.
Выясним причину: часто это происходит из-за того, что служба ТС ПИОТ теряет связь с кассой или облаком «Честного Знака». Проверьте следующие моменты:
ESM: Control Module и ESM: Orchestrator. Можно настроить автоматический перезапуск через КомандаСистемы в 1С при получении 514 ошибки.Если у вас несколько кассовых аппаратов подключены к одному серверу, стандартная установка ТС ПИОТ может конфликтовать за порты. Проанализируем решение: необходимо убедиться, что в настройках драйвера ККТ включен порт GRPC (по умолчанию 50051). ТС ПИОТ использует этот протокол для связи с железом. Если касс много, каждой кассе в конфигурации ПИОТ должен быть назначен свой идентификатор и порт.
Стоит отметить, что фирма «1С» выпустила собственное решение — «1С:Маркировка.ТС ПИОТ». Оно бесплатно для пользователей с договором ИТС ПРОФ. Однако его интеграция в старую «Розницу 1.0» сложнее, так как оно рассчитано на использование в составе современных БСП. Поэтому метод прямого обращения к API ТС ПИОТ от АО «ЕСП», описанный выше, остается наиболее гибким для «нетиповых» и старых систем.
Соблюдение данных инструкций позволит вам избежать автоматических штрафов, которые ГИС МТ начинает фиксировать при отсутствии данных о проверке кода в чеке. Помните, что с 1 сентября 2024 года наличие тега 1260 в чеках для большинства товарных групп является обязательным условием легальной торговли.