При настройке рабочего места кассира в 1С:Розница часто возникает ситуация: к компьютеру подключен обычный нефискальный термопринтер чеков, а в качестве торгового оборудования в программе выбран стандартный эмулятор фискального регистратора. При попытке снять отчет без гашения (X-отчет) программа выдает служебное оповещение Печать Х-отчета, однако физической печати документа на ленте не происходит.
Разберем подробно причины такого поведения системы, выясним принципиальные различия между фискальным регистратором и принтером чеков, а также рассмотрим способы организации печати отчетов и операций внесения/изъятия денежных средств.
Проанализируем архитектуру работы штатного эмулятора торгового оборудования. Обработка обслуживания 1С: Эмулятор фискального регистратора создана исключительно для тестирования логики конфигурации без физического подключения кассовой техники. В исходном коде такой обработки для сервисных функций заложен простой возврат статуса успешного выполнения и вывод текстовых сообщений:
Функция XОтчет(Объект, Пароль, НомерЧека, НомерСмены) Экспорт
Результат = мНетОшибки;
Сообщить("Печать Х-отчета");
Возврат Результат;
КонецФункции
При вызове функции эмулятор сообщает платформе, что операция выполнена успешно, но никаких данных на печать Windows-принтера или в COM-порт не отправляет.
Рассмотрим, откуда берутся данные для X-отчета в реальном оборудовании:
Если для работы выбран обычный чековый принтер, решить задачу печати промежуточного отчета можно следующими методами.
Способ 1. Доработка обработки обслуживания через табличный документ 1С
Переопределим функцию формирования отчета в обработке обслуживания. Для этого соберем данные по чекам за текущую смену с помощью запроса к регистру накопления или документам ЧекККМ и выведем их в табличный документ:
Функция XОтчет(Объект, Пароль, НомерЧека, НомерСмены) Экспорт
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("МакетXОтчета");
// Заполняем секции макета данными текущей смены
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.НомерСмены = НомерСмены;
ОбластьШапка.Параметры.ДатаВремя = ТекущаяДата();
ТабДок.Вывести(ОбластьШапка);
// Задаем параметры печати для чековой ленты
ТабДок.ИмяПринтера = Объект.ИмяПринтера;
ТабДок.ПолеСверху = 0;
ТабДок.ПолеСнизу = 0;
ТабДок.ПолеСлева = 0;
ТабДок.ПолеСправа = 0;
ТабДок.АвтоМасштаб = Истина;
ТабДок.Напечатать(РежимПечатиТабличногоДокумента.Бесшумный);
Возврат мНетОшибки;
КонецФункции
Способ 2. Использование прямой печати ESC/POS-команд
Для принтеров, подключенных по протоколам COM/USB (Virtual COM), печать формируется отправкой текстового потока байтов со специальными ESC/POS-командами форматирования (жирный шрифт, выравнивание по центру, отрезка бумаги). Это обеспечивает высокую скорость вывода чеков без задействования графической подсистемы Windows.
Способ 3. Подключение специализированной обработки для ЧПМ / АСПД
Вместо эмулятора фискального регистратора подключим сертифицированную обработку для принтеров чеков (чекопечатающих машин). Такие обработки принимают типовые команды торгового оборудования 1С и программно транслируют их в печатные формы.
Выясним, как правильно отражать утренний разменный фонд и инкассацию, не создавая вручную документы ПриходныйКассовыйОрдер и РасходныйКассовыйОрдер на каждое действие кассира:
Таким образом, для получения физического X-отчета на термопринтере необходимо отказаться от стандартного эмулятора ФР в пользу специализированных обработок принтеров чеков либо доработать программное формирование печатной формы на основе данных информационной базы.