При работе с кассовой техникой (в частности, фискальными регистраторами Штрих-М) и их интеграции с 1С иногда возникает неприятная ситуация: на печатной ленте чека наименования номенклатурных позиций выводятся корректно, однако в личном кабинете Оператора фискальных данных (ОФД) отображается только общая сумма или позиция без названия. Проанализируем причины этой проблемы и рассмотрим способы её устранения.
Выясним, каким образом данные о проданном товаре попадают в фискальный накопитель и ОФД. Кассовый аппарат принимает от программного обеспечения 1С данные чека в виде определенной структуры команд или XML-пакета.
В фискальных регистраторах предусмотрено разграничение между фискальными позициями (товарными строками, регистрируемыми в кассовом чеке) и произвольными нефискальными текстовыми строками (предназначенными исключительно для печати вспомогательной информации на бумаге).
Если в кастомной или устаревшей обработке обслуживания задействован метод драйвера для печати произвольного текста (например, PrintString) или в XML-структуре используются теги TextString, эти данные выводиться на бумажную ленту будут, но Фискальный накопитель их проигнорирует. В результаты фискальный блок отправит в ОФД только количество, сумму и ставку НДС без атрибута наименования предмета расчета (Тэг 1030).
Рассмотрим пример правильного формирования XML-структуры чека, используемой при передаче данных в ККТ через Библиотеку подключаемого оборудования (БПО) или напрямую через драйвер:
<?xml version="1.0" encoding="UTF-8"?>
<CheckPackage>
<Parameters PaymentType="1" SenderEmail="info@1c.ru" CustomerEmail="alex2000@mail.ru" CustomerPhone="" AgentCompensation="" AgentPhone=""/>
<Positions>
<FiscalString Name="Макароны" Quantity="1" Price="16.75" Amount="16.75" Tax="10"/>
<FiscalString Name="Томатный сок" Quantity="1" Price="200" Amount="200" Tax="18"/>
<FiscalString Name="Алкоголь Шампрео 0.7" Quantity="1" Price="455" Amount="455" Tax="18"/>
<TextString Text="Дисконтная карта: 00002345"/>
<Barcode BarcodeType="EAN13" Barcode="2000021262157"/>
</Positions>
<Payments Cash="471.75" CashLessType1="0" CashLessType2="0" CashLessType3="200"/>
</CheckPackage>
Обратим внимание на разницу между элементами FiscalString и TextString:
Реквизит Name в теге FiscalString гарантирует, что наименование номенклатуры запишется в фискальный накопитель и уйдет в ОФД. Строка TextString предназначена исключительно для информации (например, данные о дисконтных картах, баллах или акциях) и в ОФД не передается.
Для восстановления полноценной передачи данных в личный кабинет ОФД разберем следующие шаги:
Если используется внешняя обработка печати, убедимся, что для каждой позиции чека вызывается метод регистрации фискальной строки (например, НапечататьФискСтроку или Registration), а не команда печати обычного текста. В передаваемых параметрах метода обязательно должно быть заполнено наименование товара.
Согласно требованиям формата фискальных документов (ФФД), длина реквизита «Наименование предмета расчета» ограничена 128 символами. Если в 1С наименование товара превышает этот лимит или содержит непечатаемые спецсимволы/переносы строк, драйвер кассы может сбросить это поле. Добавим перед отправкой в ККТ программное ограничение длины строки:
НаименованиеДляККТ = Лев(СокрЛП(Номенклатура.Наименование), 128);
Если кассовая обработка разрабатывалась давно под устаревшие протоколы, рекомендуется отказаться от прямых вызовов OLE/COM-компонент драйвера и перейти на использование стандартной Библиотеки подключаемого оборудования (БПО). В БПО формирование пакета производится вызовом метода СформироватьЧек, что сводит к минимуму ошибки формирования фискальных тегов.
Убедимся, что драйвер фискального регистратора и прошивка устройства Штрих-М обновлены до актуальных версий, поддерживающих текущий ФФД (1.05 или 1.2).