Как исправить ошибку «Поле "items" отсутствует» при печати чеков эквайринга Сбербанка на ККТ АТОЛ 55Ф?

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

В процессе автоматизации розничной торговли специалисты часто сталкиваются со сложными сценариями взаимодействия торгового оборудования различных производителей. Одним из ярких примеров является связка управляющей программы 1С:Розница, фискального регистратора АТol (например, популярной модели АТОЛ 55Ф) и эквайрингового терминала от Сбербанка. В этой статье мы подробно разберем природу возникновения крайне неприятной ошибки «Поле "items" отсутствует» при попытке пробить чек или закрыть смену с банковской сверкой итогов, а также найдем эффективные способы ее устранения.

Выясняем причину: почему возникает ошибка «Поле "items" отсутствует»?

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

  1. Кассир в интерфейсе РМК (Рабочее место кассира) выбирает способ оплаты «Картой» и нажимает кнопку пробития чека.
  2. Программа 1С отправляет команду на эквайринговый терминал (пин-пад) Сбербанка для проведения транзакции списания денежных средств.
  3. Покупатель прикладывает карту, терминал связывается с банком-эквайером, успешно проводит операцию и возвращает в 1С положительный статус транзакции, а также текстовый макет слип-чека (банковского чека).
  4. 1С принимает этот текстовый макет слип-чека и отправляет его на ККТ АТОЛ для физической печати.
  5. В этот момент драйвер ККТ АТОЛ (например, ДТО 10) пытается разобрать полученную структуру данных. Если разметка потока данных или управляющие символы в конце текста передаются некорректно, драйвер не может распознать макет чека как нефискальный документ печати. Драйвер считает, что программа пытается напечатать стандартный фискальный чек продажи, для которого коллекция items (товарные позиции) является строго обязательной. Поскольку в слип-чеке товаров нет, драйвер ККТ возвращает критическую ошибку «Поле "items" отсутствует».

Важное следствие аварийного завершения: Чтобы защитить деньги покупателя от ситуации «деньги списали, а чек не выдали», в системе 1С реализован механизм автоматической отмены операции. Если физическая печать чека прерывается ошибкой, 1С мгновенно отправляет на пин-пад команду отмены (коллбэк), и происходит автоматический возврат средств на карту клиента. В результате продажа срывается, хотя транзакция изначально была успешной.

Пошаговое решение проблемы через настройку параметров отреза чека

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

Шаг 1. Настройка конфигурационного файла эквайринга Сбербанка

Нам необходимо отредактировать конфигурационный файл Сбербанка pinpad.ini, который отвечает за параметры работы терминала. Обычно этот файл находится в рабочей директории утилиты интеграции Сбербанка на локальном диске (стандартные пути: C:\sc552\ или C:\sberbank\).

  1. Перейдем в папку с установленным ПО Сбербанка.
  2. Найдем файл pinpad.ini и откроем его с помощью любого текстового редактора (например, Блокнота) с правами администратора.
  3. Найдем параметр PrinterEnd. Этот параметр указывает пин-паду, какие именно символы отправлять принтеру кассы в конце чека для инициации отреза бумаги и разделения копии клиента и копии продавца.
  4. Установим значение этого параметра равным 01. Если данного параметра нет в файле, его необходимо дописать вручную в секцию настроек. Пример корректной секции параметров представлен ниже:

[SBRF]
Port=1
Speed=115200
PrinterEnd=01
PrinterModel=p_comm.dll

После внесения изменений обязательно сохраним файл pinpad.ini.

Шаг 2. Настройка параметров подключения эквайринга в 1С

Теперь нам нужно настроить аналогичный параметр внутри информационной базы 1С, чтобы управляющие символы отреза полностью совпадали.

  1. Запустим программу 1С в режиме предприятия под правами администратора.
  2. Перейдем в раздел Администрирование -> Подключаемое оборудование.
  3. Откроем список Эквайринговые терминалы и выберем наш активный терминал Сбербанка.
  4. Нажмем кнопку Настроить для перехода в параметры подключения драйвера.
  5. В открывшемся окне настроек найдем поле «Последовательность частичного отреза» (в некоторых версиях драйверов этот параметр может называться «Символ отреза» или «Команда отреза»).
  6. Установим в этом поле значение 01 (это должно соответствовать значению параметра PrinterEnd в конфигурационном файле Сбербанка).
  7. Нажмем кнопку Записать и закрыть для сохранения внесенных изменений.

После выполнения этих двух шагов ККТ АТОЛ 55Ф начнет корректно принимать текстовый поток слип-чека, своевременно производить отрез бумаги без прерывания сессии печати, и ошибка «Поле "items" отсутствует» полностью исчезнет как при пробитии чеков продажи, так и при проведении операции закрытия смены (сверки итогов по банку).

Альтернативные комбинации параметров отреза

Стоит отметить, что в зависимости от установленной прошивки ККТ АТОЛ, версии внутреннего софта пин-пада Сбербанка и используемой версии драйверов ДТО (Драйвер торгового оборудования), стандартное значение 01 может не всегда срабатывать одинаково успешно. Проанализируем альтернативные рабочие связки параметров, которые могут помочь решить проблему:

Современные решения проблемы (актуально для последних релизов 1С)

Рассмотрим, как данная проблема решается на современном этапе развития интеграционных технологий. В последних обновлениях программных продуктов 1С и программного обеспечения Сбербанка разработчики приложили немало усилий для того, чтобы уйти от ручной правки конфигурационных файлов типа pinpad.ini.

Фирма 1С признала наличие этой ошибки парсинга слип-чеков на уровне интеграционной компоненты Сбербанка и выпустила обновленную версию сертифицированного драйвера «1С:Эквайринговые терминалы Сбербанк 2.Х» (начиная с релиза 2.7.5.2 и выше). В новой архитектуре драйвера:

Решена ли проблема совместимости с 64-битным клиентом 1С?

Многие технические специалисты помнят времена, когда интеграция со Сбербанком накладывала жесткое ограничение: вся система должна была работать исключительно под 32-битным (x86) клиентом платформы 1С. Попытка запустить эквайринг на 64-битной версии платформы приводила к критическому сбою из-за того, что библиотека связи sbrfcom.dll поставлялась только в 32-битном исполнении и операционная система физически не могла ее зарегистрировать в 64-битном адресном пространстве процесса 1С.

Проанализируем текущую ситуацию. На сегодняшний день эта проблема полностью решена благодаря переходу на современную технологию взаимодействия:

  1. Новый сертифицированный драйвер «1С:Эквайринговые терминалы Сбербанк 2.х» использует для работы кроссплатформенную утилиту интеграции Сбербанка — WinCLI (компонент sb_pilot).
  2. Связь между 1С и утилитой sb_pilot осуществляется через стандартизированные механизмы обмена данными, что полностью снимает ограничения на разрядность клиентского приложения.
  3. Современный драйвер Сбербанка одинаково стабильно работает как на 32-битных, так и на 64-битных версиях платформы 1С под управлением операционных систем Windows и Linux.

Таким образом, если вы до сих пор используете устаревшую технологию интеграции через sbrfcom.dll, настоятельно рекомендуется выполнить переход на новый драйвер с поддержкой технологии sb_pilot. Это не только решит проблему с совместимостью архитектур x86/x64, но и навсегда избавит вас от ошибок парсинга макетов слип-чеков при печати на современных кассовых аппаратах АТОЛ.

← На главную