Как настроить перенос длинных наименований товаров в чеке на ККТ Штрих-М?

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

При оформлении продаж в программах 1С («Управление торговлей», «Розница») пользователи часто сталкиваются с ситуацией, когда длинное наименование позиции обрезается на чековой ленте до фиксированного количества символов (32 знака для узкой ленты 57 мм или 48 знаков для широкой ленты 80 мм). При этом в электронной копии чека и в данных, отправляемых в ОФД, наименование может присутствовать целиком. Разберем причины такого поведения онлайн-касс «Штрих-М» и выясним, как настроить корректный перенос строки на бумажном чеке.

Выясним причину: почему касса режет строку

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


ЗаписьXML.ЗаписатьНачалоЭлемента("FiscalString");
ЗаписьXML.ЗаписатьАтрибут("Name", XMLСтрока(ТекущаяПозиция.Наименование));
ЗаписьXML.ЗаписатьАтрибут("Quantity", XMLСтрока(ТекущаяПозиция.Количество));
ЗаписьXML.ЗаписатьАтрибут("Price", XMLСтрока(ТекущаяПозиция.Цена));
ЗаписьXML.ЗаписатьАтрибут("Amount", XMLСтрока(ТекущаяПозиция.Сумма));
ЗаписьXML.ЗаписатьАтрибут("Tax", XMLСтрока(ТекущаяПозиция.СтавкаНДС));
ЗаписьXML.ЗаписатьКонецЭлемента();

Попытки добавить в атрибут Name управляющие символы переноса (например, Символы.ПС, \n или XML-сущность перевода строки) не дают результата. Протокол ККТ принимает атрибут как единую текстовую строку, а драйвер при валидации XML заменяет переносы на пробелы или вовсе игнорирует их.

Главная причина заключается в микропрограмме (прошивке) самого фискального регистратора. В ранних версиях прошивок ККТ линейки «Штрих-М» встроенный генератор чека выделял под печать фискальной позиции строго одну физическую строку чековой ленты. Все символы, выходящие за пределы ширины печати (32 или 48 знаков), отсекались на аппаратном уровне.

Решение 1. Обновление прошивки кассового аппарата и драйвера (основной способ)

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

Разберем по шагам порядок действий:

  1. Обновите прошивку ККТ: обратитесь в авторизованный сервисный центр или к специалистам ЦТО для установки актуальной версии микропрограммы кассового аппарата (с поддержкой формата фискальных данных ФФД 1.05 и выше). В обновленных прошивках реализована встроенная верстка, разбивающая наименование длиной до 64–128 символов на 2–3 строки чека с учетом пробелов.
  2. Обновите драйвер фискального регистратора: установите драйвер «Штрих-М: ККТ с передачей данных» версии не ниже 4.13.562 (или более свежие линейки 4.14, 4.15, 5.x).
  3. Проверьте настройки торгового оборудования в 1С: откройте форму настроек подключаемого оборудования в 1С и убедитесь, что параметр «Ширина строки» (или «Количество символов в строке») соответствует установленной ленте (например, 48 символов для ленты 80 мм аппарата Штрих-М-01Ф, а не 32 по умолчанию).

После обновления микропрограммы и драйвера касса автоматически форматирует текст: слова длиннее остатка строки переносятся на следующую физическую строчку без обрезки.

Решение 2. Программный вывод через нефискальные текстовые строки

Рассмотрим альтернативную ситуацию: оперативно обновить прошивку ККТ в сервисном центре невозможно, либо используется кастомизированная обработка обслуживания (например, в «1С:Предприятии 7.7» или в нетиповых конфигурациях «1С:Предприятия 8» с прямым обращением к COM-объекту драйвера).

В этом случае вывод длинного наименования реализуют вручную. Разберем пример программного разделения строки на части фиксированной длины и построчной отправки в драйвер:


// Разбиение длинного наименования на подстроки по длине печатной строки
СтрокаДляПечати = СокрЛП(СписокТоваров.ТовНаим);
ИмяСПереносами = "";

Пока СтрДлина(СтрокаДляПечати) > 0 Цикл
    ИмяСПереносами = ИмяСПереносами + Лев(СтрокаДляПечати, ДлинаНаименования);
    СтрокаДляПечати = СокрЛП(Сред(СтрокаДляПечати, ДлинаНаименования + 1));
    Если Не ПустаяСтрока(СтрокаДляПечати) Тогда
        ИмяСПереносами = ИмяСПереносами + Символы.ПС;    
    КонецЕсли;
КонецЦикла;

// Построчная печать наименования в драйвер
ВсегоСтрок = СтрКоличествоСтрок(ИмяСПереносами);
Для Сч = 1 По ВсегоСтрок Цикл
    ТекСтрока = СтрПолучитьСтроку(ИмяСПереносами, Сч);
    ОбъектДрайвера.Caption = ТекСтрока;
    ОбъектДрайвера.PrintString();
КонецЦикла;

Если взаимодействие идет через типовой XML-пакет БПО, аналогичный эффект достигается разделением описания товара: в элемент FiscalString помещают краткое наименование для передачи в фискальный накопитель и ОФД, а полное наименование (или его остаток) выводят отдельными нефискальными строками с помощью тега TextString непосредственно перед регистрацией фискальной позиции.

Решение 3. Уменьшение размера шрифта в таблицах ККТ

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

Для аппарата «Штрих-М-01Ф» настройку выполняют через утилиту «Тест драйвера ККТ»:

  1. Откройте «Тест драйвера ККТ» и установите связь с фискальным регистратором.
  2. Перейдите в раздел «Настройка свойств» → «Таблицы».
  3. Откройте Таблицу 8 («Настройка шрифтов»).
  4. Найдите ряд 4 (параметр «1 строка операции») и измените номер используемого шрифта (например, установите значение 5 или 6).
  5. Сохраните изменения в таблице ККТ.

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

← На главную