Как реализовать печать X-отчета и нефискальных строк на ККТ в 1С?

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

При автоматизации кассовых узлов в конфигурациях 1С (таких как 1С:Розница, 1С:Управление торговлей и др.) разработчики нередко сталкиваются с ситуацией, когда через штатный тест драйвера производителя ККТ (Штрих-М, Атол) легко вызываются любые команды — например, снятие промежуточного отчета без гашения (X-отчета) или печать произвольного текста без оформления, — однако при попытке выполнить те же действия из кода 1С через объект драйвера возникает ошибка об отсутствии метода. Кроме того, штатный метод печати текстового документа нередко принудительно выводит клише и заголовок фискального регистратора, что нарушает требуемое форматирование нефискального чека или купона.

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

Архитектура взаимодействия 1С с кассой и причины ограничений

Для понимания проблемы разберем структуру уровней интеграции:

  1. Низкоуровневый драйвер производителя. Поставляется производителем оборудования и работает непосредственно с портами устройства (COM, USB, TCP/IP). В тесте этого драйвера доступны абсолютно все команды протокола фискального регистратора: печать отчета без гашения, посимвольный вывод строк, программирование таблиц и прямое управление отрезчиком.
  2. Интеграционная внешняя компонента по стандарту БПО (Библиотека подключаемого оборудования). Представляет собой программную обертку (нативная библиотека Native API или COM-объект), которая транслирует вызовы из 1С в команды низкоуровневого драйвера. Компонента строго ограничена требованиями стандарта разработки драйверов 1С. Если определенной команды нет в стандарте БПО конкретной версии, вызов ОбъектДрайвера.НапечататьОтчетБезГашения() завершится ошибкой выполнения, даже если само кассовое устройство физически поддерживает данную операцию.
  3. Аппаратные настройки прошивки ККТ. Печать клише (наименования организации, ИНН, заголовка документа) и подвала при открытии нефискального документа часто заложена в таблицах самого кассового аппарата. При стандартном вызове печати текста ККТ автоматически формирует шапку документа.

Способ 1. Обновление интеграционной компоненты драйвера в 1С

В ранних версиях стандарта интеграции для онлайн-касс с передачей данных в ОФД операция снятия отчета без гашения (X-отчета) не входила в перечень обязательных команд фискального накопителя, так как по нормам 54-ФЗ обязательным стал ОтчетОТекущемСостоянииРасчетов. Однако по многочисленным запросам пользователей разработчики 1С и производители оборудования добавили унифицированную команду НапечататьОтчетБезГашения (или PrintXReport) в состав актуальных версий библиотек.

Рассмотрим по шагам, как задействовать эту команду в типовой конфигурации:

  1. Выясним версию драйвера, установленного в информационной базе. Для этого перейдем в раздел Администрирование — Подключаемое оборудование — Драйверы оборудования.
  2. Скачаем последнюю версию интеграционного пакета драйвера (архив для БПО) с сайта технической поддержки 1С или сайта производителя кассы. В конфигурациях (например, в актуальных релизах конфигурации 1С:Розница) свежие компоненты также содержатся во встроенных общих макетах.
  3. Обновим драйвер в справочнике без изменения кода конфигурации, загрузив новый zip-архив через команду Установить драйвер или Обновить из файла.
  4. Проверим наличие вызова в общем модуле ПодключаемоеОборудованиеУниверсальныйДрайверКлиент. В актуальных версиях БПО отправка команды кассе выполняется следующим образом:

ПараметрыПодключения = Новый Структура;
// Заполняются параметры подключения устройства
Результат = Ложь;
ВходныеПараметры = Новый Массив;
ВыходныеПараметры = Новый Массив;

// Вызов стандартного метода компоненты
Результат = ОбъектДрайвера.НапечататьОтчетБезГашения(ПараметрыПодключения.ИДУстройства, ВыходныеПараметры);
Если Не Результат Тогда
    ОписаниеОшибки = "";
    ОбъектДрайвера.ПолучитьОшибку(ОписаниеОшибки);
    ВызватьИсключение ОписаниеОшибки;
КонецЕсли;

Способ 2. Подавление печати клише и шапки через настройки ККТ

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

  1. Запустим утилиту «Тест драйвера» производителя оборудования (например, «Тест драйвера ККТ» от Штрих-М или Атол). Предварительно закроем сеанс 1С или освободим порт устройства, чтобы избежать конфликта блокировки.
  2. Перейдем в режим редактирования настроек таблиц (в оборудовании Штрих-М это таблица параметров или настроек печати).
  3. Найдем параметры, отвечающие за автоматическую печать клише при открытии нефискального документа и печать заголовка чека. Установим значение данных флагов в состояние «Отключено» (значение 0).
  4. Сохраним параметры в энергонезависимую память кассы.

После этой настройки типовой метод БПО НапечататьТекстовыйДокумент() перестанет сопровождаться стандартной шапкой фискального регистратора, выводя исключительно переданные строки.

Способ 3. Прямое управление кассой через COM-объект драйвера производителя

Когда требуется напечатать произвольные нефискальные строки с уникальным форматированием (размер шрифта, межстрочный интервал, выборочная отрезка ленты) или выполнить низкоуровневые операции, не поддерживаемые используемой редакцией БПО, обратимся напрямую к COM-объекту производителя оборудования (например, AddIn.DRVFR для устройств Штрих-М).

Важное ограничение: Последовательный порт (COM-порт или виртуальный USB-VCP) является монопольным ресурсом операционной системы. 1С не сможет подключиться к кассе через собственный COM-объект, если этот порт уже занят подсистемой подключаемого оборудования. Поэтому перед прямой отправкой команд устройство в БПО необходимо временно отключить, а после завершения печати — вернуть в исходное состояние.

Рассмотрим пример кода на встроенном языке 1С:


// 1. Отключаем ККТ в подсистеме БПО для освобождения COM-порта
МенеджерОборудованияКлиент.ОтключитьОборудованиеПоИдентификатору(УникальныйИдентификатор, ИдентификаторУстройства);

// 2. Инициализируем COM-объект низкоуровневого драйвера Штрих-М
ДрайверФР = Новый COMОбъект("AddIn.DRVFR");

// Указываем параметры связи, аналогичные настройкам в 1С
ДрайверФР.ComNumber = НомерПорта; // Например, 3 для COM3
ДрайверФР.BaudRate = 115200;
ДрайверФР.Password = 30; // Пароль системного администратора по умолчанию

Если ДрайверФР.Connect() = 0 Тогда
    
    // Печать отчета без гашения (X-отчет) напрямую через драйвер
    // ДрайверФР.PrintXReport();
    
    // Построчная печать нефискального текста без шапки и клише
    ДрайверФР.StringForPrinting = "=== НЕФИСКАЛЬНЫЙ ЧЕК ===";
    ДрайверФР.PrintString();
    
    ДрайверФР.StringForPrinting = "Бонусный баланс клиента: 1 500 руб.";
    ДрайверФР.PrintString();
    
    // Прогон ленты и частичная отрезка
    ДрайверФР.FeedDocument();
    ДрайверФР.CutCheck();
    
    // Завершаем работу с объектом и освобождаем порт
    ДрайверФР.Disconnect();
Иначе
    Сообщить("Не удалось установить связь с ККТ: " + ДрайверФР.ResultCodeDescription);
КонецЕсли;

// 3. Возвращаем ККТ под управление БПО
МенеджерОборудованияКлиент.ПодключитьОборудованиеПоИдентификатору(УникальныйИдентификатор, ИдентификаторУстройства);

Ограничения и системные требования

При использовании прямого взаимодействия с драйвером обязательно учитываем следующие платформенные особенности:

  1. Разрядность клиента 1С. Большинство устаревших COM-драйверов производителей являются 32-разрядными (x86). При работе в 64-битном клиенте 1С попытка создания объекта через Новый COMОбъект() вызовет системную ошибку Класс не зарегистрирован. Для 64-битных платформ необходимо использовать либо нативную компоненту Native API соответствующей разрядности, либо настраивать системный суррогатный процесс через компонентные службы Windows (DCOM/DllHost).
  2. Операционная система. COM-соединение применимо исключительно на рабочих местах под управлением ОС Windows. Для операционных систем семейства Linux прямая работа реализуется исключительно через загрузку скомпилированных библиотек Native API (файлы с расширением .so) или посредством передачи бинарных пакетов команд напрямую в интерфейс порта (например, /dev/ttyACM0).

Таким образом, для получения X-отчета наиболее правильным путем является обновление архива драйвера в справочнике подключаемого оборудования до актуальной версии БПО. Для кастомного вывода нефискальной информации оптимально настроить таблицы параметров ККТ либо использовать прямое программное обращение к объекту драйвера с корректным освобождением физического порта устройства.

← На главную