Как настроить работу онлайн-кассы АТОЛ 30Ф в 1С 7.7 через RDP: закрытие смены, подключение к ОФД и безналичные платежи

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

Настройка торгового оборудования в среде 1С 7.7 всегда требовала от разработчика глубокого понимания принципов работы COM-соединений, драйверов и протоколов обмена. С введением требований 54-ФЗ ситуация усложнилась необходимостью постоянного сопряжения фискальных накопителей с операторами фискальных данных (ОФД). Особые трудности возникают при работе в терминальном режиме (RDP), когда ККМ подключена к локальному компьютеру пользователя, а сама база 1С 7.7 («Торговля и Склад») развернута на удаленном сервере.

В этой статье мы подробно рассмотрим, как решить комплекс задач по подключению ККТ АТОЛ 30Ф к платформе 1С 7.7 при работе через RDP. Мы разберем программные алгоритмы закрытия смены, настройку каналов связи с ОФД, методы борьбы с задержками печати по RDP и особенности реализации безналичных платежей.

1. Закрытие смены на ККТ АТОЛ: программный и ручной методы

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

Рассмотрим два основных способа решения этой задачи в зависимости от используемой версии драйвера торгового оборудования (ДТО).

Вариант А. Использование исторического драйвера ДТО8

Если в вашей системе все еще используется старый 8-й драйвер АТОЛ, управление режимами кассы происходит через последовательную установку свойств объекта драйвера. Разберем пример кода на языке 1С 7.7 для программного закрытия смены:


// Создаем объект драйвера ККМ АТОЛ 8.х
Драйвер = СоздатьОбъект("AddIn.FPrnM45");

// Устанавливаем режим "Отчеты с гашением" (Mode = 3)
Драйвер.Mode = 3;
Драйвер.SetMode();

// Начинаем формирование нового документа
Драйвер.NewDocument();

// Передаем реквизиты кассира (тег 1021) в соответствии с требованиями ФФД
Драйвер.AttrNumber = 1021;
Драйвер.AttrValue = "Старший кассир Иванов И.И.";
Драйвер.WriteAttribute();

// Указываем тип отчета: 1 - Z-отчет (Закрытие смены)
Драйвер.ReportType = 1;

// Запускаем печать отчета
Драйвер.Report();

Вариант Б. Использование современного драйвера ДТО10 (Рекомендуется)

В современных реалиях настоятельно рекомендуется переходить на 10-ю версию драйвера (ДТО10), так как она полностью поддерживает актуальные форматы фискальных данных (ФФД 1.05 и 1.2). Для работы из 1С 7.7 используется внешняя компонента addin_fptr10_x86.dll. API ДТО10 существенно отличается, здесь закрытие смены выполняется методом closeShift():


// Инициализация объекта ДТО10
Драйвер = СоздатьОбъект("AddIn.Fptr10");

// Установка параметров связи (порт, скорость и т.д.) и соединение
// ... (код настройки подключения) ...

// Авторизация кассира перед закрытием смены (обязательный реквизит)
Драйвер.setParam(1021, "Иванов И.И."); // ФИО кассира
Драйвер.setParam(1203, "123456789012"); // ИНН кассира (при наличии)
Драйвер.operatorLogin();

// Вызов метода закрытия смены
Драйвер.closeShift();

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

2. Настройка передачи данных в ОФД через RDP

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

Классический метод: служба EthernetOverUSB (EoU)

При использовании старых прошивок и ДТО8 передача данных осуществляется через службу EoU. Особенности ее настройки состоят в следующем:

  1. Служба EoU должна быть установлена и запущена на локальном компьютере, к которому физически подключен кассовый аппарат, а не на сервере терминалов.
  2. Для настройки службы используется конфигурационный файл settings.xml (обычно расположенный в каталоге установки драйвера АТОЛ на локальной машине).
  3. В файле конфигурации необходимо четко распределить порты. Один виртуальный COM-порт выделяется для работы 1С (он будет пробрасываться в RDP-сессию), а второй COM-порт прописывается в настройках EoU для отправки данных в интернет. Касса принимает команды из 1С по первому порту, а чеки в ОФД уходят по второму через локальную службу EoU.

Современный метод: технология EthernetOverTransport (EoT)

Если вы используете современную платформу 5.0 от АТОЛ и ДТО10, схема существенно упрощается благодаря технологии EoT. При ее использовании нет необходимости в запуске отдельной службы EoU и выделении второго COM-порта:

3. Оптимизация работы по RDP: как победить задержки печати

Многие системные администраторы сталкиваются с проблемой, когда при стандартном пробросе COM-портов средствами Windows RDP печать одного чека занимает от 20 до 40 секунд. Выясним причину: драйвер ККМ обменивается с устройством сотнями мелких пакетов данных. При работе через глобальную сеть (WAN) задержка сети (пинг) накладывается на каждый пакет, что приводит к критическому замедлению печати чека.

Рассмотрим эффективные альтернативные варианты подключения ККТ в терминальном режиме:

  1. Сервер удаленного подключения АТОЛ (RPC-сервер): Это штатный механизм ДТО10. На локальном ПК, где стоит касса, запускается служба RPC-сервера АТОЛ. В настройках торгового оборудования в 1С 7.7 на сервере терминалов вместо COM-порта указывается сетевой протокол TCP/IP, IP-адрес локального компьютера кассира и порт службы (по умолчанию 5678). Обмен данными происходит мгновенно по сети, полностью минуя медленный механизм проброса портов RDP.
  2. Использование специализированного софта для проброса портов: Если использование RPC-сервера невозможно, рекомендуется отказаться от штатного механизма Microsoft RDP Client в пользу специализированных утилит (например, Fabula, TCP-COM или Serial Port Splitter). Они осуществляют буферизацию пакетов и сжатие трафика, что сводит задержки печати к минимуму.
  3. Установка сетевой платы расширения в ККТ: Модель АТОЛ 30Ф может быть доукомплектована модулем Wi-Fi или Ethernet. В этом случае касса подключается напрямую к локальной сети магазина. Сервер RDP работает с ней напрямую по IP-адресу, исключая привязку ККТ к конкретному компьютеру пользователя.

4. Реализация безналичных (электронных) платежей в коде 1С 7.7

При оплате клиентом покупки банковской картой или через СБП, касса обязана зафиксировать соответствующий тип оплаты в фискальном документе. В терминах старых драйверов эта оплата часто называлась «электронной», в современных спецификациях ФФД — «безналичной».

Посмотрим на пример реализации разделения типов оплат при закрытии чека в 1С 7.7.

Реализация для ДТО8 (свойство TypeClose)

В 8-й версии драйвера за тип закрытия чека отвечает свойство TypeClose. Обычно значение 0 соответствует наличной оплате, а значение 1 — безналичному расчету (в зависимости от настроек таблиц самой ККМ эти индексы могут меняться, их необходимо предварительно проверить в утилите администрирования ККТ):


// Предположим, у нас есть сумма наличными и сумма по карте
СуммаНал = Чек.СуммаНаличные;
СуммаБезнал = Чек.СуммаБезналичные;

Если СуммаНал > 0 Тогда
    Драйвер.Summ = Окр(СуммаНал, 2, 1);
    Драйвер.TypeClose = 0; // Наличные
    Драйвер.Payment();
КонецЕсли;

Если СуммаБезнал > 0 Тогда
    Драйвер.Summ = Окр(СуммаБезнал, 2, 1);
    Драйвер.TypeClose = 1; // Безналичные (или электронные)
    Драйвер.Payment();
КонецЕсли;

// Закрываем чек
Драйвер.CloseCheck();

Реализация для ДТО10 (метод closeReceipt)

В ДТО10 структура формирования платежей изменилась. Вместо вызова промежуточного метода Payment() параметры оплат передаются в финальный метод закрытия чека. Тип оплаты задается числовым значением: 0 — наличные, 1 — безналичные.


// Передаем оплаты в ДТО10 перед закрытием чека
Если СуммаНал > 0 Тогда
    Драйвер.setParam(Драйвер.LIBFPTR_PARAM_PAYMENT_TYPE, Драйвер.LIBFPTR_PT_CASH); // Наличные
    Драйвер.setParam(Драйвер.LIBFPTR_PARAM_PAYMENT_SUM, Окр(СуммаНал, 2, 1));
    Драйвер.payment();
КонецЕсли;

Если СуммаБезнал > 0 Тогда
    Драйвер.setParam(Драйвер.LIBFPTR_PARAM_PAYMENT_TYPE, Драйвер.LIBFPTR_PT_ELECTRONIC); // Безналичные
    Драйвер.setParam(Драйвер.LIBFPTR_PARAM_PAYMENT_SUM, Окр(СуммаБезнал, 2, 1));
    Драйвер.payment();
КонецЕсли;

// Финализируем и закрываем документ
Драйвер.closeReceipt();

Таким образом, правильное конфигурирование сетевых интерфейсов, своевременный переход на актуальные версии драйверов ДТО10 и оптимизация передачи данных по RDP позволяют построить надежную и быструю систему фискализации продаж даже на базе классической платформы 1С 7.7.

← На главную