В современных реалиях автоматизации часто возникает задача подключить недорогой китайский чековый принтер к «классической» конфигурации 1С:Предприятие 7.7 «Торговля и Склад» (ТиС). Основная цель — выдача покупателю нефискального документа (товарного чека или слипа), не передавая данные в налоговую инспекцию через ОФД. В этой статье мы подробно разберем, как реализовать эту задачу несколькими способами, проанализируем настройки принтера и приведем примеры реализации.
Это самый доступный способ, не требующий глубоких знаний протоколов печати. Если ваш принтер корректно установился в системе Windows и отображается в папке «Устройства и принтеры», мы можем работать с ним как с обычным лазерным принтером. Рассмотрим этот процесс по шагам.
Сначала нам необходимо создать или изменить существующую печатную форму документа Чек ККМ. Откроем конфигуратор и проанализируем макет. Основная сложность здесь заключается в фиксированной ширине ленты (обычно 58 мм или 80 мм).
Шаги настройки макета:
Проанализируем программный код вызова печати. Мы будем использовать стандартный объект Таблица:
Процедура ПечатьЧека()
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("ЧекДляПринтера");
// Заполняем параметры секций
Таб.ВывестиСекцию("Шапка");
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
Таб.ВывестиСекцию("Строка");
КонецЦикла;
Таб.ВывестиСекцию("Подвал");
// Устанавливаем параметры печати
Таб.ПараметрыСтраницы(1, , 1, 0, 0, 0, 0, , , 1, , );
// Опция печати без диалога выбора принтера
Таб.Напечатать(0);
КонецПроцедуры
Если нам требуется высокая скорость работы, аппаратная обрезка бумаги или открытие денежного ящика, графическая печать через Windows-драйвер может работать медленно или некорректно. В этом случае мы воспользуемся протоколом ESC/POS. Выясним причину популярности этого метода: он позволяет передавать принтеру текстовые данные напрямую в порт, минуя тяжелые графические подсистемы.
Для реализации в 1С 7.7 нам потребуется внешняя компонента для работы с текстом или портами, например, v7plus.dll. Рассмотрим пример формирования текстового файла для отправки на принтер:
Процедура ПечатьТекстом()
ТекстЧека = СоздатьОбъект("Текст");
// Команда инициализации принтера (ESC @)
ТекстЧека.ДобавитьСтроку(Симв(27) + "@");
// Заголовок чека жирным шрифтом
ТекстЧека.ДобавитьСтроку(Симв(27) + "E" + Симв(1) + "МАГАЗИН №1" + Симв(27) + "E" + Симв(0));
ТекстЧека.ДобавитьСтроку("Товар: Печенье 'Юбилейное'");
ТекстЧека.ДобавитьСтроку("Цена: 150.00 руб.");
// Команда частичной обрезки бумаги (ESC m)
ТекстЧека.ДобавитьСтроку(Симв(27) + "m");
// Записываем во временный файл и отправляем на порт
ИмяФайла = "C:\temp\receipt.txt";
ТекстЧека.Записать(ИмяФайла);
КомандаСистемы("copy /b " + ИмяФайла + " PRN");
КонецПроцедуры
Важный момент: китайские принтеры часто работают в кодировке CP866 (OEM). Чтобы русский текст не превратился в «иероглифы», необходимо перекодировать строку из ANSI в OEM перед записью в файл. В 1С 7.7 это можно сделать через простую функцию замены символов или используя внешние компоненты.
Разберем ситуацию, когда в конфигурации уже настроена логика работы с фискальным регистратором (ФР), и мы не хотим переписывать модули проведения документов. Существуют специальные драйверы-эмуляторы. Они устанавливаются в систему как виртуальный ФР (например, совместимый с протоколом АТОЛ или ШТРИХ-М).
Проанализируем алгоритм работы этого решения:
Device.PrintString() или Device.PrintReceipt().Этот способ является наиболее «чистым» с точки зрения сохранения архитектуры 1С 7.7, так как позволяет использовать штатные обработки обслуживания (ERT).
Если в чеке необходимо печатать штрихкод, мы можем столкнуться с тем, что стандартные шрифты штрихкодов 1С плохо читаются сканерами на дешевых термопринтерах. Выясним, как это исправить. Рекомендуется использовать встроенные возможности принтера. Почти любой ESC/POS принтер имеет встроенную функцию печати EAN13. Для этого в порт отправляется последовательность Chr(29) + "k" + .... Это гарантирует идеальную четкость штрихкода независимо от разрешения печати.
Часто пользователи жалуются, что после печати маленького чека принтер выдает еще 20–30 сантиметров пустой ленты. Проанализируем настройки драйвера. В свойствах принтера (Настройки печати -> Бумага/Качество) нужно найти параметр Paper Type. Если там стоит «A4», принтер всегда будет докручивать бумагу до конца страницы. Необходимо выбрать «Roll Paper» или «Continuous». Если таких настроек нет, создайте новый размер бумаги через «Свойства сервера печати» с высотой, равной ширине (например, 58 на 58 мм), и выберите его в настройках макета 1С.
Таким образом, мы рассмотрели три основных подхода к реализации печати. Для быстрых и простых решений выбирайте графический макет, для профессиональной автоматизации с управлением оборудованием — ESC/POS команды, а для сохранения типовой логики — эмуляторы ФР. Комбинируя эти методы, вы сможете добиться стабильной работы старой доброй 1С 7.7 с любым современным оборудованием.