Как напечатать строку в чеке ККМ жирным шрифтом в 1С:Розница

Программист 1С v8.3 (Управляемые формы) 1С:Розница Торговля и дистрибуция
← На главную

При настройке торгового оборудования и печати чеков ККМ в программе 1С:Розница (редакция 2.2 и выше) часто возникает необходимость выделить определенные строки жирным или крупным шрифтом. Это может потребоваться для привлечения внимания покупателя к наименованию товара, итоговой сумме чека, размеру скидки или рекламной информации в подвале чека.

Однако при попытке настроить условное оформление в редакторе шаблонов чеков ККМ многие пользователи и программисты замечают, что изменения шрифтов и жирности не отражаются на печатной ленте фискального регистратора (например, на кассах семейства «Ритейл-01Ф» или «Штрих-М»). Разберем подробно причины такого поведения системы и рассмотрим эффективные способы решения этой задачи.

Почему штатный механизм 1С не печатает жирный шрифт

Проанализируем техническую составляющую работы 1С с контрольно-кассовой техникой (ККТ). Начиная с современных релизов конфигураций, построенных на базе Библиотеки подключаемого оборудования (БПО), платформа 1С работает с кассовым аппаратом не напрямую, а через специальную интеграционную компоненту (драйвер).

Взаимодействие происходит по строгому стандарту 1С. Вместо последовательной отправки отдельных команд печати каждой строки (как это было в старых версиях), 1С формирует единый структурированный XML-пакет данных CheckPackage и передает его в драйвер за один вызов.

Выясним главные причины ограничения:

  1. Унификация стандарта БПО: Стандарт передачи данных XML разработан таким образом, чтобы подходить для сотен различных моделей кассовых аппаратов (Атол, Штрих-М, Вики Принт и др.). В структуре пакета XML для элементов Positions (фискальные позиции) и TextString (текстовые строки) исторически не предусмотрены атрибуты стилизации текста (жирность, шрифт, начертание).
  2. Защита фискального блока: В рамках требований 54-ФЗ и форматов фискальных документов (ФФД) состав и форма фискальных реквизитов строго регулируются законодательством. 1С передает чистые данные (наименование, количество, цена, сумма, НДС), а финальным формированием внешнего вида фискальной строки занимается прошивка самой кассы.
  3. Игнорирование условного оформления СКД: Редактор шаблонов чеков в 1С позволяет менять визуальное оформление на форме экрана, но при конвертации структуры чека в XML-пакет параметры жирности шрифта отбрасываются.

Рассмотри четыре практических способа, которые позволяют обойти данное ограничение и выводить жирный шрифт на чековую ленту.

Способ 1. Настройка таблиц кассового аппарата (Без изменения кода 1С)

Наиболее простое и надежное решение, не требующее снятия конфигурации с поддержки — это настройка внутренних таблиц самого фискального регистратора. Для касс «Ритейл-01Ф» и «Штрих-М» параметры отображения различных типов строк хранятся в энергонезависимой памяти устройства.

Разберем процесс настройки по шагам с помощью утилиты «Тест драйвера ККТ»:

  1. Закроем программу 1С:Розница, чтобы освободить COM-порт или сетевое соединение кассы.
  2. Запустим утилиту «Тест драйвера ККТ» (драйвер ККТ Штрих-М).
  3. Перейдем в раздел Настройка свойств, укажем параметры связи с ККТ и нажмем кнопку Проверка связи.
  4. После успешного подключения перейдем в меню Таблицы.
  5. Откроем Таблицу 1 («Тип и режим кассы») или Таблицу 8 («Настройка шрифтов»). В этих таблицах для разных видов строк (заголовок чека, наименование товара, итоговая сумма, реклама) можно задать номер шрифта (например, шрифт с удвоенной высотой или жирный шрифт).
  6. Проверим Таблицу 9 («Форматирование»), где задаются общие флаги межстрочных интервалов и стилей.
  7. Сохраним изменения и закроем утилиту.

После этой настройки кассовый аппарат будет автоматически печатать нужные строки (например, Итоговые суммы или Шапку) укрупненным или жирным шрифтом, даже если 1С отправляет туда обычный текст.

Способ 2. Прямой вызов методов драйвера через внешнюю компоненту

Если требуется выводить жирным шрифтом дополнительный нефискальный текст (например, условие рекламной акции, промокод или товарный чек), рассмотрим вариант прямого обращения к драйверу ККТ через внешнюю компоненту AddIn.DrvFR, минуя подсистему БПО.

Посмотрим на пример кода 1С для подключения компоненты и вызова метода печати широкой/жирной строки PrintWideString:


// Пример прямого обращения к драйверу ККТ для печати нефискальной жирной строки
Если ПодключитьВнешнююКомпоненту("AddIn.DrvFR") Тогда
    Попытка
        ДрайверФР = Новый ("AddIn.DrvFR");
        
        // Установка пароля системного администратора (по умолчанию 30)
        ДрайверФР.Password = 30;
        
        // Указываем текст для печати
        ДрайверФР.StringForPrinting = "*** ВНИМАНИЕ: СКИДКА НА СЛЕДУЮЩУЮ ПОКУПКУ 10% ***";
        
        // Вызов метода печати широкой/жирной строки
        ДрайверФР.PrintWideString();
        
    Исключение
        ЗаписьЖурналаРегистрации("ОшибкаПечатиФР", 
            УровеньЖурналаРегистрации.Ошибка,,, 
            ОписаниеОшибки());
    КонецПопытки;
Иначе
    Сообщить("Не удалось подключить внешнюю компоненту AddIn.DrvFR!");
КонецЕсли;

Важное ограничение: Прямым вызовом методов драйвера можно печатать только нефискальные документы до открытия фискального чека или после его закрытия. Внедрить прямой вызов PrintWideString внутрь процесса фискальной печати позиции по 54-ФЗ нельзя, так как это нарушит атомарность формирования чека и приведет к ошибке передачи данных в Оператор Фискальных Данных (ОФД).

Способ 3. Доработка формирования XML-пакета чека в 1С

Проанализируем вариант для программистов, когда необходимо доработать модуль формирования пакета чека. В подсистеме БПО за подготовку данных отвечает общий модуль МенеджерОборудованияКлиент или МенеджерОборудованияСервер.

Посмотрим на упрощенную структуру того, как формируется XML-пакет чека CheckPackage:


// Пример структуры XML-пакета для отправки в драйвер ККТ
Функция СформироватьПакетЧекаККМ(ДанныеЧека)
    
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.УстановитьСтроку("UTF-8");
    
    ЗаписьXML.ЗаписатьНачалоЭлемента("CheckPackage");
    
    // Формирование параметров чека
    ЗаписьXML.ЗаписатьНачалоЭлемента("Parameters");
    ЗаписьXML.ЗаписатьАтрибут("CashierName", ДанныеЧека.Кассир);
    ЗаписьXML.ЗаписатьАтрибут("OperationType", "1"); // Приход
    ЗаписьXML.ЗаписатьКонецЭлемента(); // Parameters
    
    // Формирование фискальных позиций
    ЗаписьXML.ЗаписатьНачалоЭлемента("Positions");
    Для Каждого Стр Из ДанныеЧека.Товары Цикл
        ЗаписьXML.ЗаписатьНачалоЭлемента("FiscalString");
        ЗаписьXML.ЗаписатьАтрибут("Name", Стр.Номенклатура);
        ЗаписьXML.ЗаписатьАтрибут("Quantity", Формат(Стр.Количество, "ЧРД=.; ЧГ=0"));
        ЗаписьXML.ЗаписатьАтрибут("Price", Формат(Стр.Цена, "ЧРД=.; ЧГ=0"));
        ЗаписьXML.ЗаписатьАтрибут("Amount", Формат(Стр.Сумма, "ЧРД=.; ЧГ=0"));
        ЗаписьXML.ЗаписатьКонецЭлемента(); // FiscalString
    КонецЦикла;
    ЗаписьXML.ЗаписатьКонецЭлемента(); // Positions
    
    // Добавление нефискальных текстовых строк
    ЗаписьXML.ЗаписатьНачалоЭлемента("TextStrings");
    ЗаписьXML.ЗаписатьНачалоЭлемента("TextString");
    ЗаписьXML.ЗаписатьАтрибут("Text", "=== СПАСИБО ЗА ПОКУПКУ! ===");
    ЗаписьXML.ЗаписатьКонецЭлемента(); // TextString
    ЗаписьXML.ЗаписатьКонецЭлемента(); // TextStrings
    
    ЗаписьXML.ЗаписатьКонецЭлемента(); // CheckPackage
    
    Возврат ЗаписьXML.Закрыть();
    
КонецФункции

Некоторые производители драйверов в свежих версиях интеграционных компонент добавляют поддержку специальных управляющих символов или спец-тегов внутри атрибута Text. Если драйвер поддерживает ESC/POS команды, добавление спец-символов в начало строки позволяет активировать режим жирного шрифта на время печати конкретного текстового блока.

Способ 4. Печать графических элементов и штампов

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

Современные версии БПО и драйверы «Штрих-М» / «Ритейл-01Ф» поддерживают метод PrintImage (печать картинки):

  1. Создадим во внешнем графическом редакторе изображение с требуемым текстом, выбрав любой красивый, жирный или крупный шрифт.
  2. Сохраним файл в монохромном формате BMP или PNG.
  3. В настройках шаблона чека 1С или в обработке обслуживания добавим вывод этой картинки в клише (шапку) или подвал чека.

Резюме и рекомендации

Подводя итог проанализированным методам, выделим главные рекомендации:

← На главную