При прямой интеграции 1С с кассовыми аппаратами линейки «Штрих-М» через COM-компоненту AddIn.DrvFR разработчики часто сталкиваются с двойной проблемой: если длина названия позиции превышает ширину чековой ленты (обычно от 32 до 40 символов), строка на чеке обрезается, а попытка разбить печать на отдельные нефискальные строки приводит к тому, что в электронном чеке ОФД и приложении ФНС наименование товара оказывается пустым. Разберем, почему возникает эта ошибка и как правильно организовать передачу данных.
Проанализируем техническую сторону взаимодействия учетной системы с фискальным регистратором:
Sale: команда Sale создавалась для касс старого образца, работавших до введения требований 54-ФЗ. В старых версиях внутреннего ПО ККТ буфер для текста позиции был строго ограничен физической шириной строки печати. Касса не умела автоматически переносить текст на следующую строку.StringForPrinting непосредственно в момент регистрации позиции.StringForPrinting перед вызовом фискальной операции, а сам текст выводить предварительно командами нефискальной печати PrintString, на бумаге текст появится, но в фискальный накопитель и ОФД уйдет пустой тег 1030, что является нарушением порядка применения контрольно-кассовой техники.Выясним причину аппаратного ограничения: в современных версиях внутреннего программного обеспечения ККТ «Штрих-М» встроен механизм автоматического переноса строк. Если на кассе установлена актуальная прошивка, фискальный регистратор принимает строку полной длины (до 128 символов) и самостоятельно форматирует ее при печати на чековой ленте в несколько строк, не обрезая текст и сохраняя полное значение в теге 1030.
Разберем по шагам, что необходимо сделать:
StringForPrinting полное наименование позиции до вызова метода регистрации, не пытаясь делить строку вручную через Символы.ПС или цикл.
// Корректная передача полного наименования позиции
ДрайверФР.StringForPrinting = СокрЛП(Выборка.НоменклатураНаименование);
ДрайверФР.Price = Выборка.Цена;
ДрайверФР.Quantity = Выборка.Количество;
ДрайверФР.Department = 1;
ДрайверФР.Tax1 = 0; // Зависит от ставки НДС
// Вызов фискальной операции регистрации позиции
ДрайверФР.Sale();
Если обновление прошивки откладывается, но требуется вместить больше символов в одну строку чека, рассмотрим вариант с изменением шрифта печати. Настройка выполняется через утилиту «Тест драйвера ККТ»:
5 или 6 в зависимости от модели печатающего механизма).Уменьшенный шрифт позволяет разместить в одной физической строке от 48 до 56 символов, что решает проблему для большинства средних по длине наименований.
Рассмотрим подробнее переход от устаревших методов регистрации к профильным командам для онлайн-касс:
Sale в драйвере применяется фискальный метод FNOperation. В него передается расширенный набор атрибутов предмета расчета, включая признак способа расчета, признак предмета расчета и полную номенклатурную строку.1. При такой настройке касса берет на себя печать всех обязательных реквизитов из фискальной памяти, включая перенос длинных наименований.Посмотрим на фундаментальное решение проблемы: отказ от низкоуровневого обращения к AddIn.DrvFR в пользу сертифицированных драйверов БПО 1С. При использовании стандартов БПО логика печати и передачи тегов в ОФД инкапсулирована внутри унифицированного XML-пакета чека:
CheckPackage), где для каждого товара в теге позиции указывается полное наименование.Если касса аппаратно обрезает строку, прошивку обновить прямо сейчас нельзя, но необходимо соблюсти законность электронного чека, разберем временную схему:
StringForPrinting перед вызовом фискальной операции Sale передаем начальную часть наименования (до допустимого лимита символов), чтобы реквизит тега 1030 не был пустым.PrintString до или после регистрации позиции.ДрайверФР.StringForPrinting = ""), чтобы остаточные данные не попали в подвал фискального документа.