При модернизации кассового узла и переходе со старых фискальных регистраторов (ФР) на современные онлайн-кассы (ККТ с передачей данных по 54-ФЗ) пользователи конфигураций на базе 1С:УПП 1.3, 1С:УТ 10.3 и отраслевых решений часто сталкиваются с проблемой: вместо товарного (нефискального) чека аппарат печатает копию последнего фискального чека либо выдает ошибку оборудования. Проанализируем причины этой проблемы и разберем практические способы реализации нефискальной печати на онлайн-кассах.
В конфигурациях предыдущих поколений печать нефискальных документов строилась на прямой отправке низкоуровневых команд в драйвер фискального регистратора (построчная печать текста методом ПечатьСтроки и последующая отрезка). С введением требований 54-ФЗ взаимодействие с кассовой техникой переведено на стандарт БПО (Библиотека подключаемого оборудования). Все данные теперь передаются в виде строго структурированных XML-пакетов фискализации.
Посмотрим на фрагмент типового кода, который отвечает за поиск устройства и печать товарного чека в старых релизах:
Функция РаспечататьТоварныйЧек() Экспорт
МассивФР = ПолучитьСерверТО().ПолучитьСписокУстройств(
Перечисления.ВидыТорговогоОборудования.ФискальныйРегистратор,
КассаККМ
);
СписокФР = Новый СписокЗначений;
Вид = Неопределено;
Представление = Неопределено;
Для Каждого ФР Из МассивФР Цикл
ПолучитьСерверТО().ПолучитьПредставлениеУстройства(ФР, Вид, Представление);
СписокФР.Добавить(ФР, Представление);
КонецЦикла;
// Дальнейший выбор устройства и посимвольный вывод строк в драйвер ФР
КонецФункции
Проанализировав данный алгоритм, мы видим две основные причины сбоя:
Перечисления.ВидыТорговогоОборудования.ФискальныйРегистратор, а как ККТ с передачей данных (или ККМ с передачей данных). В результате функция не находит подключенное устройство либо обращается к отключенному старому ФР.Разберем базовые шаги настройки оборудования в пользовательском режиме, которые необходимо выполнить в первую очередь:
Использовать. Наличие старой неактивной записи может приводить к тому, что модули печати по умолчанию будут пытаться инициализировать отключенный COM-объект.Если конфигурация поддерживает обновленные механизмы работы с торговым оборудованием, изменим программный код функции печати. Заменим прямое обращение к фискальному регистратору на методы работы с ККТ с передачей данных:
// Изменяем вид запрашиваемого оборудования
ВидККТ = Перечисления.ВидыТорговогоОборудования.ККТСПередачейДанных;
МассивККТ = ПолучитьСерверТО().ПолучитьСписокУстройств(ВидККТ, КассаККМ);
Если МассивККТ.Количество() > 0 Тогда
УстройствоККТ = МассивККТ[0];
// Передаем команду печати нефискального текстового документа
// через обработку обслуживания торгового оборудования
ПараметрыОперации = Новый Массив;
ПараметрыОперации.Добавить(ТекстТоварногоЧека);
Результат = МенеджерОборудованияКлиент.ВыполнитьКоманду(
УстройствоККТ,
"ПечатьТекста",
ПараметрыОперации
);
КонецЕсли;
В нетиповых и сильно переработанных конфигурациях надежным способом является вывод текста напрямую через API драйвера (например, драйвера ККТ Атол 10.х или Штрих-М). Разберем логику работы такого алгоритма:
Важное ограничение: Большинство ККТ занимают виртуальный COM-порт монопольно. Перед тем как отправлять команды напрямую в драйвер, необходимо временно освобождать порт (отключать устройство в 1С через методы менеджера торгового оборудования), а после завершения печати подключать его обратно. В противном случае возникнет ошибка Порт занят.
Для многих моделей онлайн-касс производители предоставляют драйвер виртуального Windows-принтера чеков. Это позволяет организовать печать товарного чека без модификации модулей фискализации:
ТабличныйДокумент, настроенный под ширину чековой ленты (обычно 57 мм или 80 мм).ТабличныйДокумент.Напечатать(), указав имя установленного Windows-принтера.Если доработка кассового модуля технически затруднена или нежелательна, рассмотрим практичные альтернативы: