При интеграции торгового оборудования с решениями «1С» разработчики и системные администраторы часто сталкиваются с ситуацией, когда кассовый аппарат (ККТ) полностью настроен на работу с форматом фискальных данных ФФД 1.05, успешно проходит тесты из утилиты драйвера производителя, но сама «1С» упорно отказывается печатать новые обязательные реквизиты (например, признаки способа и предмета расчета), ссылаясь на то, что ККТ работает по устаревшему стандарту ФФД 1.0. В этой статье мы подробно проанализируем ситуацию, выясним причину такого поведения программного кода и рассмотрим по шагам методы решения данной проблемы.
Рассмотрим типичную ситуацию на примере конфигурации «1С:Комплексная автоматизация 2» (КА 2) и кассового аппарата АТОЛ 30Ф. В тест-драйвере касса отвечает корректно, параметры ККТ подтверждают поддержку ФФД 1.05. Однако при попытке пробить чек из «1С» в окне предпросмотра или в XML-пакете, отправляемом на кассу, фигурирует версия ФФД 1.0. Как результат, на печать не выводятся теги 1212 (признак предмета расчета) и 1214 (признак способа расчета), что является прямым нарушением требований ФНС.
Для того чтобы понять, почему учетная система игнорирует реальные параметры кассы, нам необходимо заглянуть внутрь Библиотеки подключаемого оборудования (БПО), которая отвечает за обмен данными с торговым оборудованием в «1С».
Давайте посмотрим на то, как конфигурация «1С» инициализирует подключенную кассу и определяет ее рабочие параметры. Проанализируем фрагмент кода программного модуля интеграции:
Если ТипЗнч(ПодключенноеОборудование.ККТ) = Тип("Массив") Тогда
Для Каждого ЭлементМассива Из ПодключенноеОборудование.ККТ Цикл
ОборудованиеККТ = ЭлементМассива;
ВерсияФФД = ДобавитьВТаблицуОборудования(ОборудованиеККТ);
КонецЦикла;
Элементы.ККТ.ТолькоПросмотр = (Элементы.ККТ.СписокВыбора.Количество() = 1);
Иначе
ОборудованиеККТ = ПодключенноеОборудование.ККТ;
ВерсияФФД = ДобавитьВТаблицуОборудования(ОборудованиеККТ);
КонецЕсли;
На первый взгляд, система корректно обращается к оборудованию для получения актуального формата фискальных данных. Но дьявол кроется в деталях. Перейдем глубже к механизму, который запрашивает параметры непосредственно из ККТ:
Если ПараметрыРегистрацииУстройства.ЕстьДанные Тогда
ЗначениеВерсияФФД = ПараметрыРегистрацииУстройства.ВерсияФФДККТ;
Иначе
ЗначениеВерсияФФД = ВерсияФФДПоУмолчанию();
КонецЕсли;
Именно здесь и скрывается разгадка. Переменная ЗначениеВерсияФФД напрямую зависит от флага ПараметрыРегистрацииУстройства.ЕстьДанные. Если этот флаг принимает значение Ложь, программа автоматически использует функцию ВерсияФФДПоУмолчанию(), которая в старых релизах конфигураций принудительно возвращает значение 1.0.
Выясним причину, почему свойство ЕстьДанные может быть равно Ложь:
---
В зависимости от того, на каком этапе находится запуск кассы (тестирование на стенде или запуск в промышленную эксплуатацию), выберите один из следующих путей решения.
Если вы настраиваете рабочее место кассира для реальных продаж, кассовый аппарат обязательно должен пройти процедуру регистрации через утилиту производителя («Утилита регистрации ККТ АТОЛ») с установкой фискального накопителя (ФН). При регистрации обязательно выберите стандарт ФФД 1.05.
После успешной фискализации касса запишет признак формата в ФН. При очередном открытии смены или печати чека из «1С» флаг ПараметрыРегистрацииУстройства.ЕстьДанные станет равен Истина, и система автоматически переключится на корректный режим работы 1.05 без вмешательства в код программы.
Если вам необходимо отладить бизнес-процессы (например, предоплату, авансы или кредиты) на тестовой кассе, не имеющей реального ФН, выполните фискализацию ККТ с использованием МГМ (макета фискального накопителя). Это позволит записать в тестовый накопитель все необходимые параметры регистрации, включая тег 1209 (версия ФФД), и система «1С» распознает кассу как полноценное устройство стандарта 1.05.
Если тестового ФН или МГМ под рукой нет, а проверить печать чеков нужно прямо сейчас, можно временно переопределить поведение функции получения версии ФФД по умолчанию. Для этого найдем в конфигураторе функцию ВерсияФФДПоУмолчанию() в модулях подключаемого оборудования и заменим возвращаемое значение с 1.0 на 1.05.
Пример изменения кода:
Функция ВерсияФФДПоУмолчанию() Экспорт
// Было: Возврат Перечисления.ФорматыФискальныхДанных.ФФД10;
// Стало:
Возврат Перечисления.ФорматыФискальныхДанных.ФФД105;
КонецФункции
Важно: Не забудьте вернуть исходный код после завершения тестирования, чтобы избежать конфликтов при обновлении конфигурации или при работе с другими кассовыми аппаратами вашей сети.
Проанализируйте используемую версию драйвера ККТ. Работа с форматом ФФД 1.05 требует использования актуального драйвера (крайне рекомендуется переход на АТОЛ ДККТ 10.х) и своевременной прошивки самой кассы. Если ваша конфигурация «1С:Комплексная автоматизация» давно не обновлялась, встроенная библиотека БПО может некорректно транслировать вызовы к новым драйверам десятой версии. Обновите конфигурацию до актуального релиза, где механизмы работы с ФФД 1.05 и 1.2 полностью стабилизированы, а поддержка ФФД 1.0 исключена на уровне платформенных алгоритмов.