В процессе автоматизации розничной торговли специалисты часто сталкиваются со сложными сценариями взаимодействия торгового оборудования различных производителей. Одним из ярких примеров является связка управляющей программы 1С:Розница, фискального регистратора АТol (например, популярной модели АТОЛ 55Ф) и эквайрингового терминала от Сбербанка. В этой статье мы подробно разберем природу возникновения крайне неприятной ошибки «Поле "items" отсутствует» при попытке пробить чек или закрыть смену с банковской сверкой итогов, а также найдем эффективные способы ее устранения.
Для того чтобы решить проблему, нам необходимо проанализировать цепочку передачи данных между информационной базой 1С, драйвером ККТ и эквайринговым терминалом. Схема работы при безналичной оплате выглядит следующим образом:
items (товарные позиции) является строго обязательной. Поскольку в слип-чеке товаров нет, драйвер ККТ возвращает критическую ошибку «Поле "items" отсутствует».Важное следствие аварийного завершения: Чтобы защитить деньги покупателя от ситуации «деньги списали, а чек не выдали», в системе 1С реализован механизм автоматической отмены операции. Если физическая печать чека прерывается ошибкой, 1С мгновенно отправляет на пин-пад команду отмены (коллбэк), и происходит автоматический возврат средств на карту клиента. В результате продажа срывается, хотя транзакция изначально была успешной.
Как показывает практика интеграции, корень проблемы кроется в рассинхронизации управляющих кодов завершения печати (символов отреза бумаги) между конфигурационным файлом пин-пада Сбербанка и настройками торгового оборудования в самой 1С. Разберем по шагам, как настроить корректное взаимодействие оборудования.
Шаг 1. Настройка конфигурационного файла эквайринга Сбербанка
Нам необходимо отредактировать конфигурационный файл Сбербанка pinpad.ini, который отвечает за параметры работы терминала. Обычно этот файл находится в рабочей директории утилиты интеграции Сбербанка на локальном диске (стандартные пути: C:\sc552\ или C:\sberbank\).
pinpad.ini и откроем его с помощью любого текстового редактора (например, Блокнота) с правами администратора.PrinterEnd. Этот параметр указывает пин-паду, какие именно символы отправлять принтеру кассы в конце чека для инициации отреза бумаги и разделения копии клиента и копии продавца.01. Если данного параметра нет в файле, его необходимо дописать вручную в секцию настроек. Пример корректной секции параметров представлен ниже:
[SBRF]
Port=1
Speed=115200
PrinterEnd=01
PrinterModel=p_comm.dll
После внесения изменений обязательно сохраним файл pinpad.ini.
Шаг 2. Настройка параметров подключения эквайринга в 1С
Теперь нам нужно настроить аналогичный параметр внутри информационной базы 1С, чтобы управляющие символы отреза полностью совпадали.
01 (это должно соответствовать значению параметра PrinterEnd в конфигурационном файле Сбербанка).После выполнения этих двух шагов ККТ АТОЛ 55Ф начнет корректно принимать текстовый поток слип-чека, своевременно производить отрез бумаги без прерывания сессии печати, и ошибка «Поле "items" отсутствует» полностью исчезнет как при пробитии чеков продажи, так и при проведении операции закрытия смены (сверки итогов по банку).
Стоит отметить, что в зависимости от установленной прошивки ККТ АТОЛ, версии внутреннего софта пин-пада Сбербанка и используемой версии драйверов ДТО (Драйвер торгового оборудования), стандартное значение 01 может не всегда срабатывать одинаково успешно. Проанализируем альтернативные рабочие связки параметров, которые могут помочь решить проблему:
pinpad.ini требуется указать шестнадцатеричный код отреза. Попробуйте установить значение PrinterEnd=16 (в HEX-формате), а в настройках подключения эквайринга в 1С в поле «Последовательность частичного отреза» прописать значение 22 (десятичный эквивалент данного управляющего символа).010D0A, что заставляет кассу прокрутить ленту вперед перед отрезом, исключая замятие бумаги.Рассмотрим, как данная проблема решается на современном этапе развития интеграционных технологий. В последних обновлениях программных продуктов 1С и программного обеспечения Сбербанка разработчики приложили немало усилий для того, чтобы уйти от ручной правки конфигурационных файлов типа pinpad.ini.
Фирма 1С признала наличие этой ошибки парсинга слип-чеков на уровне интеграционной компоненты Сбербанка и выпустила обновленную версию сертифицированного драйвера «1С:Эквайринговые терминалы Сбербанк 2.Х» (начиная с релиза 2.7.5.2 и выше). В новой архитектуре драйвера:
Многие технические специалисты помнят времена, когда интеграция со Сбербанком накладывала жесткое ограничение: вся система должна была работать исключительно под 32-битным (x86) клиентом платформы 1С. Попытка запустить эквайринг на 64-битной версии платформы приводила к критическому сбою из-за того, что библиотека связи sbrfcom.dll поставлялась только в 32-битном исполнении и операционная система физически не могла ее зарегистрировать в 64-битном адресном пространстве процесса 1С.
Проанализируем текущую ситуацию. На сегодняшний день эта проблема полностью решена благодаря переходу на современную технологию взаимодействия:
sb_pilot осуществляется через стандартизированные механизмы обмена данными, что полностью снимает ограничения на разрядность клиентского приложения.Таким образом, если вы до сих пор используете устаревшую технологию интеграции через sbrfcom.dll, настоятельно рекомендуется выполнить переход на новый драйвер с поддержкой технологии sb_pilot. Это не только решит проблему с совместимостью архитектур x86/x64, но и навсегда избавит вас от ошибок парсинга макетов слип-чеков при печати на современных кассовых аппаратах АТОЛ.