Как настроить печать чеков на нефискальном чековом принтере в 1С 7.7 Торговля и Склад

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

В современных реалиях автоматизации часто возникает задача подключить недорогой китайский чековый принтер к «классической» конфигурации 1С:Предприятие 7.7 «Торговля и Склад» (ТиС). Основная цель — выдача покупателю нефискального документа (товарного чека или слипа), не передавая данные в налоговую инспекцию через ОФД. В этой статье мы подробно разберем, как реализовать эту задачу несколькими способами, проанализируем настройки принтера и приведем примеры реализации.

Метод 1: Использование стандартного макета 1С (Графическая печать)

Это самый доступный способ, не требующий глубоких знаний протоколов печати. Если ваш принтер корректно установился в системе Windows и отображается в папке «Устройства и принтеры», мы можем работать с ним как с обычным лазерным принтером. Рассмотрим этот процесс по шагам.

Сначала нам необходимо создать или изменить существующую печатную форму документа Чек ККМ. Откроем конфигуратор и проанализируем макет. Основная сложность здесь заключается в фиксированной ширине ленты (обычно 58 мм или 80 мм).

Шаги настройки макета:

  1. Создадим новую внешнюю печатную форму, чтобы не изменять типовую конфигурацию.
  2. В табличном документе установим ширину колонок так, чтобы они помещались в границы печати. Для 58 мм это обычно 18–22 символа стандартным шрифтом.
  3. В параметрах страницы установим все поля (левое, правое, верхнее, нижнее) в 0.
  4. В драйвере принтера в Windows обязательно создадим пользовательский размер бумаги. Если этого не сделать, принтер может воспринимать чек как лист А4 и прокручивать пустую ленту после завершения печати текста.

Проанализируем программный код вызова печати. Мы будем использовать стандартный объект Таблица:


Процедура ПечатьЧека()
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("ЧекДляПринтера");
    // Заполняем параметры секций
    Таб.ВывестиСекцию("Шапка");
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
        Таб.ВывестиСекцию("Строка");
    КонецЦикла;
    Таб.ВывестиСекцию("Подвал");
    
    // Устанавливаем параметры печати
    Таб.ПараметрыСтраницы(1, , 1, 0, 0, 0, 0, , , 1, , ); 
    // Опция печати без диалога выбора принтера
    Таб.Напечатать(0); 
КонецПроцедуры

Метод 2: Прямая печать через ESC/POS команды

Если нам требуется высокая скорость работы, аппаратная обрезка бумаги или открытие денежного ящика, графическая печать через 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 это можно сделать через простую функцию замены символов или используя внешние компоненты.

Метод 3: Использование эмуляторов фискальных регистраторов

Разберем ситуацию, когда в конфигурации уже настроена логика работы с фискальным регистратором (ФР), и мы не хотим переписывать модули проведения документов. Существуют специальные драйверы-эмуляторы. Они устанавливаются в систему как виртуальный ФР (например, совместимый с протоколом АТОЛ или ШТРИХ-М).

Проанализируем алгоритм работы этого решения:

Этот способ является наиболее «чистым» с точки зрения сохранения архитектуры 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 с любым современным оборудованием.

← На главную