Почему терминал Arcus (Ingenico) не печатает номер на слип-чеке и как найти файл cheq.out?

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

При интеграции кассового ПО (например, 1С:Управление торговлей 11) с банковскими терминалами Ingenico, работающими по протоколу Arcus 2 (часто встречается у банков ПСБ, ВТБ), системные администраторы сталкиваются с проблемой: на распечатанном слип-чеке отсутствует номер операции или номер чека. Это делает невозможным проведение возврата, так как банковское ПО требует ввода RRN или номера чека с оригинала слипа. Разберем подробно, почему это происходит и как заставить систему работать корректно.

Анализируем механизм работы Arcus 2

Для начала проанализируем, как терминал обменивается данными с компьютером. В протоколе Arcus 2 взаимодействие происходит через файловый обмен или через динамические библиотеки (ВК). В процессе транзакции ПО терминала создает несколько ключевых файлов в своей рабочей директории (обычно C:\Arcus2):

  1. rc.out (или иногда переименованный в chek.out) — содержит структурированные коды ответов (например, 000 — успешно).
  2. cheq.out — графический или текстовый образ самого чека, который должен быть выведен на печать. Именно в этом файле содержится строка "Чек №198" или "RRN:...".

Если в 1С номер чека пустой, это означает, что программа смогла прочитать статус операции, но не смогла получить или распарсить содержимое файла cheq.out. Выясним причину, по которой этот файл может отсутствовать или быть пустым.

Проверяем конфигурацию в cashreg.ini

Первым делом рассмотрим настройки самого Arcus. Перейдем в папку с установленным ПО терминала и найдем конфигурационный файл. Обычно он находится по пути: C:\Arcus2\INI\cashreg.ini. Проанализируем содержимое секции настроек вывода чека.

Найдем и проверим следующие параметры:


[CashReg]
; Имя файла, в который будет выводиться образ чека
CHEQ_FILE=cheq.out
; Флаг удаления файла после операции (0 - не удалять, 1 - удалять)
DELETE_CHEQ=0

Важный момент: если параметр CHEQ_FILE переопределен (например, указано CHEQ_FILE=chek.out), то образ чека будет записываться в тот же файл, что и результаты операции. Это часто приводит к конфликтам в 1С, так как драйвер ожидает найти там только коды ответов. Убедимся, что имена файлов разделены.

Почему файл cheq.out исчезает?

Рассмотрим ситуацию: в логах терминала мы видим успешную запись (write result: [0]), но в папке файла нет. Разберем три основные причины этого явления:

  1. Мгновенное удаление драйвером 1С. Большинство внешних компонент для 1С работают по принципу: "Найти файл — Прочитать в память — Удалить". Это делается для того, чтобы при следующей оплате не напечатался старый чек. Файл существует доли секунды. Чтобы проверить это, попробуем провести операцию не через 1С, а через тестовый батник (например, sale.bat в папке Arcus2). Если при запуске вручную файл cheq.out остается на месте — виновата 1С или её компонента.
  2. Виртуализация Windows (VirtualStore). Если ПО Arcus запущено без прав администратора, Windows может запретить прямую запись в C:\Arcus2. В этом случае операционная система незаметно перенаправляет файл в виртуальное хранилище пользователя. Проверим наличие файла по пути:
    %LOCALAPPDATA%\VirtualStore\Arcus2\
  3. Рабочий каталог. Если 1С запускает процесс cheq.exe без явного указания рабочей директории, файл может создаться в папке платформы 1С (bin) или в папке временных файлов пользователя.

Решение проблемы с пустым номером в 1С

Если файл создается, но номер на чеке все равно пустой, значит, 1С не может его найти внутри текста. Посмотрим на пример лога, который предоставляет банк:


RECV <- PRINT:Терм:***01 Чек 198
[cheq.out] write result: [0]
SEND -> OK
RECV <- PRINT:               ОДОБРЕНО

Проблема может заключаться в шаблоне чека. Банк ПСБ иногда настраивает шаблоны так, что номер чека идет в нестандартной строке, которую встроенный драйвер 1С просто не распознает. Рассмотрим пути решения:

Способ 1: Использование универсального драйвера

В настройках "Подключаемого оборудования" в 1С попробуем сменить обработчик драйвера. Если вы используете "Arсus 2: Эквайринговые терминалы", попробуйте обновить компоненту до последней версии или использовать драйвер "1С: Эквайринговые терминалы (Universal)". Современные версии драйверов умеют более гибко искать RRN и номер чека в текстовом полотне.

Способ 2: Настройка на стороне банка

Свяжемся с техподдержкой банка и попросим изменить параметризацию терминала. Необходимо, чтобы номер чека и RRN передавались в структурированном виде в ответе от терминала (в файл rc.out), а не только в тексте слипа. Для ПСБ это стандартная процедура, но её нужно запрашивать отдельно.

Способ 3: Ручная диагностика через логи Windows

Если подозрение падает на антивирус или права доступа, проанализируем журнал событий Windows. Посмотрим в раздел "Система" и "Приложение". Если какой-то процесс блокирует запись файла cheq.out, там могут быть записи об ошибках доступа Access Denied.

Итоги и рекомендации

Подводя итог, алгоритм наших действий будет следующим:

  1. Проверяем cashreg.ini, убеждаемся, что CHEQ_FILE указан верно.
  2. Проводим тестовую оплату через sale.bat (вне 1С).
  3. Если файл cheq.out создается и в нем ЕСТЬ номер, значит, проблема в компоненте 1С, которая либо его не читает, либо удаляет.
  4. Если файла НЕТ даже при тесте через батник, проверяем VirtualStore и права доступа на папку Arcus2 для группы "Все".

Помните, что корректная работа эквайринга зависит от слаженной настройки трех звеньев: прошивки терминала (банк), настроек локального ПО (Arcus) и драйвера интеграции (1С).

← На главную