С переходом на формат фискальных данных ФФД 1.2 многие пользователи кассового оборудования АТОЛ столкнулись с ошибками при регистрации чеков. Одной из самых частых проблем стала нехватка обязательного тега 2108 («Мера количества предмета расчета»). ОФД начали возвращать ошибки, а в чеках может появляться предупреждение о необходимости передачи этого реквизита. Давайте подробно разберем, как исправить эту ситуацию программно и на уровне настроек оборудования.
Тег 2108 обязателен для всех товаров в ФФД 1.2. Он указывает, в чем измеряется товар: в штуках, килограммах, литрах и так далее. Если ваша конфигурация 1С или драйвер ККТ устарели, этот тег просто не попадает в структуру XML, которую 1С отправляет на кассу. Для корректной работы нам необходимо обеспечить выполнение четырех условий:
MeasureOfQuantity.Прежде чем приступать к правке кода, проанализируем настройки подключения. Часто проблема решается простым обновлением версии драйвера внутри 1С. Рассмотрим порядок действий:
Если обновление драйверов не помогло (особенно в кастомизированных конфигурациях), нам придется вмешаться в формирование XML-пакета. Разберем, где именно это происходит. Основная логика обычно сосредоточена в общем модуле МенеджерОборудованияВызовСервера (или аналогичном в вашей версии БПО).
Нам необходимо найти функцию СформироватьXMLПакетДляФискализацияЧека и убедиться, что для каждой позиции чека добавляется атрибут MeasureOfQuantity.
Рассмотрим пример кода, который решает эту задачу:
// В цикле перебора товарных позиций чека
Если ПараметрыФискализации.РевизияИнтерфейса >= 3004 Тогда
// Получаем значение меры количества по коду единицы измерения
МераКоличестваПредметаРасчета = МенеджерОборудованияКлиентСервер.МераКоличестваПредметаРасчетаПоКодуЕдиницыИзмерения(ТекущаяПозиция.КодЕдиницыИзмерения);
// Преобразуем перечисление в числовой код для ККТ
КодМерыККТ = МенеджерОборудованияКлиентСервер.КодМерыКоличестваПредметаРасчетаККТ(МераКоличестваПредметаРасчета);
// Записываем атрибут в XML
ЗаписьXML.ЗаписатьАтрибут("MeasureOfQuantity", XMLСтрока(КодМерыККТ));
КонецЕсли;
Проанализируем этот участок. Система берет код единицы измерения (например, «796» для штук) и сопоставляет его с внутренним числовым кодом ФФД. Для «штук» это значение 0, для «килограммов» — 11.
В старых конфигурациях на обычных формах (УТ 10.3, УПП) алгоритм сопоставления может работать некорректно из-за путаницы в справочниках. Для отладки логики ФФД 1.2 можно использовать эмулятор ККТ ФФД 1.2 для обычных форм. Выясним причину: часто в классификаторе единиц измерения коды ОКЕИ содержат лишние пробелы (например, "796 " вместо "796"), из-за чего сопоставление возвращает значение 255 (Иные единицы измерения).
Для исправления ситуации в общем модуле РозничныеПродажи можно доработать функцию определения кода:
Функция КодЕдиницыИзмеренияПараметраЧека(ЕдиницаИзмерения) Экспорт
КодЕдиницыИзмерения = "";
Если ТипЗнч(ЕдиницаИзмерения) = Тип("СправочникСсылка.КлассификаторЕдиницИзмерения") Тогда
// Обязательно используем СокрЛП для удаления невидимых пробелов
КодЕдиницыИзмерения = СокрЛП(ЕдиницаИзмерения.Код);
КонецЕсли;
// Принудительное сопоставление для популярных единиц, если коды не заполнены
Если ПустаяСтрока(КодЕдиницыИзмерения) Тогда
Если Найти(НРег(ЕдиницаИзмерения.Наименование), "шт") > 0 Тогда
КодЕдиницыИзмерения = "796";
КонецЕсли;
КонецЕсли;
Возврат КодЕдиницыИзмерения;
КонецФункции
Важно понимать, какие числовые значения ожидает драйвер АТОЛ в атрибуте MeasureOfQuantity. Ниже приведен список основных соответствий:
Важный нюанс: Если вы передаете значение 255, ОФД примет чек, но это может вызвать вопросы у налоговой при регулярной торговле штучным товаром. Старайтесь всегда сводить данные к коду 0 для штук.
Иногда после обновления драйверов возникает побочный эффект: данные в ОФД уходят, тег 2108 на месте, но бумажный чек на кассе не печатается. Рассмотрим причину. В новых версиях БПО параметр Электронно в методе СформироватьЧек отвечает за отправку только электронного чека (тег 1208). Если в вашем коде этот флаг ошибочно установлен в Истина (например, из-за путаницы с признаком безналичной оплаты), касса не выдаст бумагу.
Проверьте вызов метода ПодключаемоеОборудованиеРТ.СформироватьЧек и убедитесь, что параметр Электронно передается корректно. Если клиенту нужен бумажный чек, этот параметр должен быть Ложь.
Если тег по-прежнему не передается, проанализируем логи драйвера АТОЛ. Найдите файл fptr10.log (обычно в папке пользователя или в папке с драйвером). Ищите в нем строку LIBFPTR_PARAM_MEASUREMENT_UNIT. Если вы видите, что 1С передает это значение, но касса выдает ошибку, значит проблема в прошивке ККТ или в том, что касса зарегистрирована под ФФД 1.05, который не поддерживает этот тег.
Таким образом, решение проблемы с тегом 2108 всегда кроется в связке «Корректный код ОКЕИ — Актуальный драйвер (интеграционная компонента) — Правильное формирование XML». Выполнив предложенные программные доработки, вы обеспечите полное соответствие ваших чеков требованиям законодательства.