При переходе на онлайн-кассы по требованиям 54-ФЗ в конфигурации 1С:Торговля и Склад 7.7 (релизы 989, 990 и аналогичные) разработчики часто сталкиваются с ошибками при попытке пробить чек без НДС (например, на УСН или патенте). Кассовый аппарат АТОЛ либо возвращает ошибку о том, что значение налога должно быть числом ('none' is not a valid integer value), либо чек пробивается с нулевой ставкой НДС 0%, либо касса просто «выпадает в осадок» без понятного описания ошибки.
Разберем детально, почему возникает эта неполадка, какие нюансы законодательства следует учитывать и как пошагово доработать штатную обработку обслуживания торгового оборудования frATOL54_comm.ert.
Прежде чем приступать к программным правкам, проанализируем требования форматов фискальных документов (ФФД 1.05, 1.1, 1.2). В соответствии с правилами применения кассовой техники:
0, касса регистрирует операцию по ставке 0%. Это является грубой налоговой ошибкой для спецрежимов, так как ставка 0% применяется исключительно для определенных операций (экспорт, международные перевозки и т. д.), что неизбежно вызовет претензии со стороны ФНС.Выясним причину технического сбоя. Типовой механизм 1С 7.7 под 54-ФЗ использует схему формирования XML-пакета чека (CheckPackage), который передается во внешнюю компоненту FprnM1C82_54FZ.dll. В этой цепочке кроется несколько критических проблем:
none и пытается преобразовать его во внутренний целочисленный индекс без предварительной валидации.Department.frATOL54_comm.ert содержит несколько опечаток и логических ошибок разработчиков, препятствующих штатной работе оборудования.Рассмотрим по шагам все действия, необходимые для гарантированного устранения проблемы.
Посмотрим на используемую библиотеку драйвера. Если в системе установлен сбойный драйвер из пакета ККТ 15, его необходимо заменить. Рекомендуется использовать проверенную стабильную версию библиотеки FprnM1C82_54FZ.dll (из стабильных релизов ДТО 8/9 или сертифицированных сборок 1С). Зарегистрируем библиотеку в операционной системе стандартным способом через regsvr32 при необходимости.
Откроем внешнюю обработку frATOL54_comm.ert в конфигураторе и внесем следующие точечные изменения.
1. Исправление опечатки в установке скорости порта
В оригинальном коде разработчики ошибочно передавали номер порта вместо скорости:
// Ошибка оригинала:
// Объект.УстановитьПараметр("BaudRate", ПортНомер);
// Исправленный вариант:
Объект.УстановитьПараметр("BaudRate", ПортСкорость);
2. Явное указание системы налогообложения
В процедуре формирования общих параметров фискального документа найдем блок параметров и зададим применяемую систему налогообложения явным образом (1 — ОСН, 2 — УСН доход, 4 — УСН доход-расход, 8 — ЕНВД, 16 — ЕСХН, 32 — ПСН):
СистемаНалогообложения = 2; // Укажите код вашей системы налогообложения
Атрибут(XMLParameters, "TaxVariant", СистемаНалогообложения);
3. Добавление обязательного атрибута Department
Найдем цикл перебора строк чека, где формируется узел XMLFiscalString, и добавим обязательную передачу номера отдела. Без этого параметра многие версии драйвера завершают работу аварийно:
// В цикле формирования фискальных строк добавляем:
Атрибут(XMLFiscalString, "Department", "01");
4. Корректировка возврата результата в функции печати
Проанализируем функцию ПечататьЧек(...). В типовой реализации функция в самом конце возвращает результат операции отключения от фискального регистратора, а не фактический результат печати. В результате, если чек не напечатался из-за ошибки, документ в 1С все равно считает операцию успешной. Исправим этот момент:
// В конце функции ПечататьЧек(...) убедимся,
// что возвращается переменная с результатом печати фискального чека:
Возврат Рез;
Запустим утилиту «Тест драйвера ККТ» и проверим внутренние таблицы кассового аппарата:
Если штатная схема через XML-пакеты и библиотеку FprnM1C82_54FZ.dll продолжает вызывать трудности, рассмотрим альтернативный путь. В среде 1С:Предприятие 7.7 надежным решением является отказ от промежуточной прослойки 1С и переход на прямое управление нативным COM-объектом драйвера АТОЛ (AddIn.FprnM45 для ДТО 8/9 или AddIn.Fptr10 для ДТО 10).
При прямом обращении к методам драйвера свойства фискальной позиции передаются явными целочисленными значениями через параметры драйвера (такие как TaxTypeNumber, TaxMode, Department), что полностью исключает ошибки разбора XML-строк и гарантирует точную передачу признака отсутствия налога в кассовый аппарат.