При автоматизации розничной торговли и интеграции учетных систем (например, при переносе данных из «1С:Предприятие 7.7» в «1С:Розница 2.2») специалисты нередко сталкиваются с ситуацией, когда документ «Чек ККМ» на экране заполнен корректно, но на бумажной чековой ленте или в личном кабинете ОФД наименование товара оказывается пустым. Разберем по шагам архитектуру передачи фискальных данных, выясним причину такого поведения оборудования и рассмотрим практические способы устранения неполадки.
Современные требования форматов фискальных документов (ФФД) исключают старый подход, когда чек пробивался общей суммой, а номенклатурные строки выводились как произвольный нефискальный текст. Сегодня регистрация позиций выполняется строго структурированным пакетом.
Проанализируем основные факторы, приводящие к потере наименования:
В типовых конфигурациях на базе БСП и БПО (Библиотеки подключаемого оборудования) отправка чека на фискализацию выполняется через формирование специального XML-пакета в модуле ПодключаемоеОборудованиеУниверсальныйДрайверКлиент. Проверим, как устроен этот механизм в процедуре ФискализацияЧека:
ДанныеЧека = МенеджерОборудованияВызовСервера.ПолучитьXMLПакетДляФискализацияЧека(
ОбщиеПараметры,
ШаблонЧека,
СуммаЧека,
ШиринаСтроки,
НовыйФормат,
ВерсияФФД
);
Если НовыйФормат Тогда
Результат = ОбъектДрайвера.СформироватьЧек(
ПараметрыПодключения.ИДУстройства,
Электронно,
ДанныеЧека,
НомерЧека,
НомерСмены,
ФискальныйПризнак,
АдресСайтаПроверки
);
Иначе
Результат = ОбъектДрайвера.СформироватьЧек(
ПараметрыПодключения.ИДУстройства,
Кассир,
Электронно,
ДанныеЧека,
НомерЧека,
НомерСмены,
ФискальныйПризнак,
АдресСайтаПроверки
);
КонецЕсли;
Функция ПолучитьXMLПакетДляФискализацияЧека собирает текстовый XML-документ непосредственно в оперативной памяти с помощью объекта ЗаписьXML и возвращает строку методом ЗаписьXML.Закрыть(). Этот файл не сохраняется на жестком диске во временных папках, поэтому проанализировать его содержимое можно только в режиме отладки конфигуратора либо через системные логи самого драйвера ККМ.
В сформированном XML-пакете обязательно проверяем наличие структуры узлов:
Positions (позиции чека).FiscalString, соответствующие каждой товарной позиции.Name (наименование предмета расчета, тег 1030).Если атрибут Name внутри FiscalString заполнен, значит, прикладное решение передало данные корректно, а потеря наименования происходит на стороне драйвера или прошивки кассового аппарата.
Разберем последовательность действий, которая позволяет быстро локализовать и устранить сбой:
ВидНоменклатуры и ТипНоменклатуры (Товар, Услуга, Подакцизный товар). Эти параметры определяют корректную установку признака предмета расчета при фискализации.
// Очистка наименования перед записью в документ
ЧистоеНаименование = СокрЛП(СтрЗаменить(Выборка.Наименование, Символы.ПС, " "));
ЧистоеНаименование = СтрЗаменить(ЧистоеНаименование, Символы.ВК, " ");
ЧистоеНаименование = СтрЗаменить(ЧистоеНаименование, Символы.Таб, " ");
Если СтрДлина(ЧистоеНаименование) > 128 Тогда
ЧистоеНаименование = Лев(ЧистоеНаименование, 128);
КонецЕсли;
СтрокаТЧ.Номенклатура = НайденнаяНоменклатура;
СтрокаТЧ.Содержание = ЧистоеНаименование;
Номенклатура или Содержание.Таким образом, комплексная проверка корректности структуры XML через отладку и обновление кассового ПО позволяют гарантировать полное соответствие чеков фискальным стандартам и исключить расхождения между бумажной лентой и сервером ОФД.