При автоматизации розничной торговли часто возникает необходимость подключить обычный (нефискальный) принтер чеков (например, популярные модели семейства Xprinter 80, Rongta или другие ESC/POS-совместимые устройства) к современным конфигурациям на управляемых формах, таким как 1С:ERP Управление предприятием, 1С:Комплексная автоматизация или 1С:Управление торговлей.
Основная сложность заключается в том, что современное Рабочее место кассира (РМК) в 1С жестко ориентировано на требования закона 54-ФЗ. Система ожидает подключения полноценной ККТ с передачей данных (онлайн-кассы). Если попытаться просто зарегистрировать устройство как стандартный «Принтер чеков», 1С не позволит открыть кассовую смену в РМК и проводить продажи. В то же время стандартный эмулятор ККТ, встроенный в БПО (Библиотеку подключаемого оборудования), по умолчанию лишь выводит электронный чек на экран компьютера, но не отправляет его на печать.
В этой статье мы подробно разберем, как решить данную проблему, рассмотрим доступные варианты настройки, обходные пути без изменения конфигурации, а также особенности создания собственного драйвера-обработчика по стандартам БПО.
---
Рассмотрим детальнее внутреннюю логику работы 1С:ERP при работе с торговым оборудованием. Библиотека подключаемого оборудования (БПО) разделяет устройства по типам:
Если вам необходимо использовать принтер чеков Xprinter 80 в качестве полноценного (но нефискального) аппарата для выдачи чеков покупателям (например, при торговле на патенте, ЕНВД в переходные периоды или для внутреннего учета), у вас есть три основных пути. Проанализируем каждый из них.
---
В современных релизах 1С:ERP встроенный драйвер от фирмы 1С поддерживает прямую печать на ESC/POS-совместимые принтеры чеков. Разберем по шагам, как настроить такую схему:
XP-80).---
Чтобы «обмануть» логику РМК и заставить программу думать, что к рабочему месту подключена настоящая онлайн-касса, используются специализированные программные эмуляторы. Они регистрируются в системе как ККТ с передачей данных, но вместо отправки данных в ОФД перенаправляют сформированный чек на обычный Windows-принтер.
Вы можете использовать сторонние готовые решения (расширения конфигурации или внешние компоненты), которые широко представлены на профильных ресурсах, таких как Инфостарт. Принцип их работы следующий:
Этот метод позволяет полностью сохранить штатный интерфейс кассира в РМК 1С:ERP, открывать и закрывать смены, оформлять продажи и возвраты без необходимости вносить изменения в код типовой конфигурации.
---
Если готовые эмуляторы вас не устраивают или вам необходим полный контроль над процессом вывода информации (например, добавление специфических штрихкодов, логотипов или нетиповых скидок), вы можете написать собственную внешнюю обработку обслуживания (драйвер) в соответствии с требованиями БПО к ККТ или принтерам чеков.
Рассмотрим структуру и ключевые методы, которые должна содержать обработка обслуживания для интеграции с БПО 1С. Основное взаимодействие происходит через стандартизированный интерфейс.
Для создания интеграции необходимо реализовать в модуле обработки функции экспорта команд. Посмотрим на пример программного скелета для такой обработки:
// Функция инициализации устройства и проверки связи
Функция ПодключитьУстройство(ПараметрыПодключения, ВыходныеПараметры) Экспорт
Результат = Истина;
// Здесь инициализируется COM-соединение или объект Windows-принтера
// Например, создание объекта для работы с принтером напрямую:
// ТабДок = Новый ТабличныйДокумент;
Возврат Результат;
КонецФункции
// Функция отключения устройства
Функция ОтключитьУстройство(ПараметрыПодключения, ВыходныеПараметры) Экспорт
Результат = Истина;
// Освобождение ресурсов и закрытие портов
Возврат Результат;
КонецФункции
// Основной обработчик команд печати чека
Функция ВыполнитьКоманду(ИмяКоманды, ВходныеПараметры, ВыходныеПараметры) Экспорт
Результат = Ложь;
Если ИмяКоманды = "PrintReceipt" Тогда
// Разбираем входящий XML-пакет с данными чека
ДанныеЧекаXML = ВходныеПараметры[0];
Результат = НапечататьЧекНаПринтере(ДанныеЧекаXML, ВыходныеПараметры);
ИначеЕсли ИмяКоманды = "OpenSession" Тогда
// Эмулируем успешное открытие смены для РМК
Результат = Истина;
ИначеЕсли ИмяКоманды = "CloseSession" Тогда
// Эмулируем успешное закрытие смены (печать Z-отчета в текстовом виде)
Результат = НапечататьОтчетОЗакрытииСмены(ВыходныеПараметры);
КонецЕсли;
Возврат Результат;
EndFunction
Внутри функции НапечататьЧекНаПринтере программно создается табличный документ, который форматируется под ширину ленты принтера Xprinter (обычно ширина колонки задается в диапазоне от 8 до 12 символов в зависимости от масштабирования). Пример заполнения табличного документа:
Функция НапечататьЧекНаПринтере(ДанныеЧекаXML, ВыходныеПараметры)
ТабДок = Новый ТабличныйДокумент;
ТабДок.ИмяПринтера = "XP-80"; // Имя принтера в системе Windows
// Устанавливаем параметры страницы для узкой ленты
ТабДок.ПоляСверху = 0;
ТабДок.ПоляСнизу = 0;
ТабДок.ПоляСлева = 1;
TaбДок.ПоляСправа = 1;
ТабДок.РазмерСтраницы = "Custom";
ТабДок.ШиринаСтраницы = 80; // Для 80-миллиметровой ленты
// Чтение XML и построчный вывод информации
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(ДанныеЧекаXML);
// Простой алгоритм разбора XML и формирования строк табличного документа
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.Имя = "FiscalString" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ТекстСтроки = ЧтениеXML.ПолучитьАтрибут("Text");
// Добавляем строку в макет
ОбластьСтроки = ТабДок.ПолучитьОбласть("Строка");
ОбластьСтроки.Параметры.ЗначениеСтроки = ТекстСтроки;
ТабДок.Вывести(ОбластьСтроки);
КонецЕсли;
КонецЦикла;
// Отправка на прямую печать без вывода диалогового окна
ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);
Возврат Истина;
КонецФункции
---
Если вы используете штатные механизмы печати чеков БПО, то внешний вид чека можно гибко настраивать прямо в пользовательском режиме без привлечения программиста.
Разберем, как кастомизировать макет чека:
Consolas, Courier New или Lucida Console.Таким образом, современная ERP-система предоставляет все необходимые инструменты для работы с нефискальным оборудованием. Для простых задач печати товарных чеков достаточно настроить встроенный NativeApi-драйвер принтера чеков. Если же требуется полноценная автоматизация торговой точки с использованием интерфейса РМК без покупки дорогостоящей онлайн-кассы, оптимальным решением станет применение программного эмулятора ККТ с перенаправлением вывода данных на системный принтер Xprinter.