При оформлении продаж в программах 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С:Предприятии 7.7» или в нетиповых конфигурациях «1С:Предприятия 8» с прямым обращением к COM-объекту драйвера).
В этом случае вывод длинного наименования реализуют вручную. Разберем пример программного разделения строки на части фиксированной длины и построчной отправки в драйвер:
// Разбиение длинного наименования на подстроки по длине печатной строки
СтрокаДляПечати = СокрЛП(СписокТоваров.ТовНаим);
ИмяСПереносами = "";
Пока СтрДлина(СтрокаДляПечати) > 0 Цикл
ИмяСПереносами = ИмяСПереносами + Лев(СтрокаДляПечати, ДлинаНаименования);
СтрокаДляПечати = СокрЛП(Сред(СтрокаДляПечати, ДлинаНаименования + 1));
Если Не ПустаяСтрока(СтрокаДляПечати) Тогда
ИмяСПереносами = ИмяСПереносами + Символы.ПС;
КонецЕсли;
КонецЦикла;
// Построчная печать наименования в драйвер
ВсегоСтрок = СтрКоличествоСтрок(ИмяСПереносами);
Для Сч = 1 По ВсегоСтрок Цикл
ТекСтрока = СтрПолучитьСтроку(ИмяСПереносами, Сч);
ОбъектДрайвера.Caption = ТекСтрока;
ОбъектДрайвера.PrintString();
КонецЦикла;
Если взаимодействие идет через типовой XML-пакет БПО, аналогичный эффект достигается разделением описания товара: в элемент FiscalString помещают краткое наименование для передачи в фискальный накопитель и ОФД, а полное наименование (или его остаток) выводят отдельными нефискальными строками с помощью тега TextString непосредственно перед регистрацией фискальной позиции.
Проанализируем еще один вариант частичного обхода проблемы без смены прошивки. Если наименования не помещаются буквально на несколько знаков, можно уменьшить размер шрифта, используемого аппаратом при печати операций чека.
Для аппарата «Штрих-М-01Ф» настройку выполняют через утилиту «Тест драйвера ККТ»:
Уменьшенный кегль шрифта позволяет вместить до 57–60 знаков в одну физическую строку на широкой ленте. Это позволяет избежать обрезки для умеренно длинных названий без перепрошивки аппарата.