Почему чеки на АТОЛ 91Ф не уходят в ОФД и как правильно настроить передачу данных через драйвер 10.х?

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

При работе с контрольно-кассовой техникой (ККТ) АТОЛ, особенно с мобильными или автономными решениями вроде АТОЛ 91Ф, разработчики часто сталкиваются с ситуацией, когда чеки успешно печатаются, но «зависают» в памяти кассы и не передаются оператору фискальных данных (ОФД). Часто это проявляется странным образом: передача данных инициируется только в момент ручного запроса статуса обмена через «Тест драйвера», после чего процесс снова останавливается. Разберем детально, почему это происходит и как правильно настроить программное взаимодействие с ККТ из 1С.

Анализ проблемы: настройки драйвера vs настройки кассы

Первая и самая распространенная ошибка, которую мы совершаем при написании самописных обработок, — это путаница между настройками самого драйвера (на стороне компьютера) и настройками устройства (внутри памяти ККТ). Когда мы используем метод setSingleSetting, мы зачастую конфигурируем то, как драйвер общается с кассой, но не то, как касса должна общаться с сервером ОФД.

Проанализируем ситуацию: если чеки уходят только при активном обращении к драйверу, это может означать, что канал связи (например, EthernetOverUSB) работает нестабильно или требует постоянного «пинга» со стороны службы обмена. Чтобы решить проблему, необходимо убедиться, что параметры ОФД жестко прописаны в памяти ККТ, а канал связи настроен оптимально.

Решение 1: Программное программирование параметров ОФД

Рассмотрим, как правильно записать адрес и порт ОФД непосредственно в настройки кассы, используя Драйвер ККТ 10.х. Использование устаревших констант вроде LIBFPTR_SETTING_OFD_ADDRESS часто приводит к ошибкам, так как архитектура драйвера изменилась. Теперь для этого используются методы setParam и writeDeviceSetting.

Для программирования параметров нам понадобятся идентификаторы настроек (ID). Например, для адреса ОФД это ID 273, для порта — 274. Разберем пример кода на языке 1С:


// Создаем объект драйвера
fptr = Новый COMОбъект("AddIn.Fptr10");

// Устанавливаем связь с ККТ (порт, скорость и т.д. должны быть уже настроены)
// ...

// 1. Указываем адрес ОФД
fptr.setParam(fptr.LIBFPTR_PARAM_SETTING_ID, 273); // ID 273 - Адрес ОФД
fptr.setParam(fptr.LIBFPTR_PARAM_SETTING_VALUE, "ofdp.platformaofd.ru");
fptr.writeDeviceSetting();

// 2. Указываем порт ОФД
fptr.setParam(fptr.LIBFPTR_PARAM_SETTING_ID, 274); // ID 274 - Порт ОФД
fptr.setParam(fptr.LIBFPTR_PARAM_SETTING_VALUE, "21101");
fptr.writeDeviceSetting();

// 3. Указываем ИНН ОФД
fptr.setParam(fptr.LIBFPTR_PARAM_SETTING_ID, 275); // ID 275 - ИНН ОФД
fptr.setParam(fptr.LIBFPTR_PARAM_SETTING_VALUE, "9715260691");
fptr.writeDeviceSetting();

Важный момент: не нужно передавать эти параметры при печати каждого чека! Это распространенная ошибка, которая приводит к преждевременному износу памяти ККТ и замедлению работы. Эти настройки записываются один раз (при пусконаладке или перерегистрации). В коде печати чека они будут только мешать.

Решение 2: Настройка канала связи (EoU или EoT)

Выясним причину, по которой связь может обрываться. Для аппаратов АТОЛ 91Ф критически важен выбор канала передачи данных. Существует два основных способа передачи данных в ОФД через USB-кабель:

  1. EoU (EthernetOverUSB): создается виртуальный сетевой адаптер. Для его работы в системе должна быть запущена служба AtolDevicePacketExchange. Если чеки уходят «раз в 2-3 секунды» при открытом драйвере, скорее всего, служба конфликтует с драйвером или засыпает.
  2. EoT (EthernetOverTransport): это более современный протокол, доступный в 10-й версии драйвера. Данные в ОФД передаются внутри того же канала, по которому идут команды печати.

Проанализируем ситуацию: если вы используете драйвер 10.10.8.0, настоятельно рекомендуем переключить кассу на EoT. Для этого в «Тест драйвера» в разделе «Параметры ККТ» -> «ОФД» выберите канал связи «USB», а в настройках самого драйвера (свойства соединения) убедитесь, что включен соответствующий механизм обмена. В этом случае данные будут уходить автоматически в фоновом режиме без использования сторонних служб.

Решение 3: Проверка DNS и использование IP-адреса

Посмотрим на настройки сети. Часто ККТ не может отправить чек, потому что не может разрешить доменное имя сервера (например, ofdp.platformaofd.ru). Это происходит из-за некорректных настроек DNS на компьютере или в роутере.

Чтобы исключить влияние DNS-серверов, попробуйте прописать вместо буквенного адреса прямой IP-адрес сервера ОФД. Для «Платформы ОФД» это 185.170.204.91. Порядок действий будет аналогичным:


fptr.setParam(fptr.LIBFPTR_PARAM_SETTING_ID, 273); 
fptr.setParam(fptr.LIBFPTR_PARAM_SETTING_VALUE, "185.170.204.91");
fptr.writeDeviceSetting();

Решение 4: Проверка системных настроек электропитания

Рассмотрим ситуацию с точки зрения операционной системы. Если чеки начинают уходить только при активности в драйвере, возможно, Windows применяет политику энергосбережения к USB-порту, к которому подключена касса. Когда к порту нет обращений (нет печати), система снижает питание, и сетевой стек кассы «замирает».

Проанализируем шаги для исправления:

  1. Зайдите в «Диспетчер устройств».
  2. Найдите раздел «Контроллеры USB».
  3. Для каждого «Корневого USB-концентратора» откройте «Свойства» -> «Управление электропитанием».
  4. Снимите галочку «Разрешить отключение этого устройства для экономии энергии».

Решение 5: Завершение сеанса связи в коде 1С

Выясним, как ваше самописное ПО завершает работу с объектом драйвера. Если после печати чека объект fptr остается активным и удерживает COM-порт, ККТ может ожидать следующих команд и не переходить в режим фоновой отправки данных в ОФД.

В конце вашей процедуры печати обязательно выполняйте освобождение устройства:


fptr.setParam(fptr.LIBFPTR_PARAM_SETTING_ID, 273); 
// Код печати чека...
// ...
fptr.close(); // Закрываем соединение, чтобы касса могла заняться фоновыми задачами

Резюме: Чтобы чеки уходили стабильно, необходимо: один раз корректно запрограммировать настройки ОФД в память ККТ через writeDeviceSetting (используя правильные ID параметров), перейти на канал EoT для минимизации проблем со службами Windows и убедиться, что настройки DNS или энергосбережения USB не блокируют трафик.

← На главную