При переходе на ставку НДС 20% многие пользователи 1С 7.7 столкнулись с неприятной ситуацией: касса Атол при попытке пробить чек выдает ошибку или печатает «Чек аннулирован», хотя в интерфейсе 1С операция помечается как успешная. Давайте разберем, почему это происходит и как программно доработать обработку обслуживания, чтобы исправить ошибку.
Основная причина заключается в том, что старые обработки обслуживания (файлы с расширением .ert) в 1С 7.7 были рассчитаны на работу с фиксированным набором ставок НДС (чаще всего 0%, 10% и 18%). Когда в системе появляется товар со ставкой 20%, обработка не находит соответствующего алгоритма для передачи этой ставки в фискальный накопитель. В результате ККТ получает некорректные данные, не может сформировать фискальный чек и выполняет команду аннулирования для предотвращения нарушения законодательства.
Прежде чем приступать к исправлению кода, убедитесь в следующем:
FprnM1C...dll корректно зарегистрирована в системе через regsvr32 от имени администратора.RDP, драйверы должны быть обновлены на стороне сервера.Чтобы заставить 1С корректно передавать ставку НДС 20%, необходимо внести изменения в файл внешней обработки обслуживания frATOL54_comm.ert (или его аналог frATOL54_comm_105.ert). Вам нужно найти функцию ПечататьЧек и добавить условие для обработки 20% НДС.
Рассмотрим подробнее логику внесения изменений:
// В функции ПечататьЧек найдите цикл обхода строк списка товаров
Пока СписокТоваров.ПолучитьСтроку = 1 Цикл
Объект.Name = СписокТоваров.ТовНаим;
Объект.Price = СписокТоваров.Цена;
Объект.Quantity = СписокТоваров.Количество;
// Добавляем обработку ставки НДС 20%
Если СписокТоваров.СтавкаНДС = "none" Тогда
Объект.TaxTypeNumber = 4;
ИначеЕсли СписокТоваров.СтавкаНДС = "18" Тогда
Объект.TaxTypeNumber = 3;
ИначеЕсли СписокТоваров.СтавкаНДС = "20" Тогда
Объект.TaxTypeNumber = 3; // Для большинства ФФД 1.05 ставка 20% передается как 3
ИначеЕсли СписокТоваров.СтавкаНДС = "10" Тогда
Объект.TaxTypeNumber = 2;
ИначеЕсли СписокТоваров.СтавкаНДС = "0" Тогда
Объект.TaxTypeNumber = 1;
КонецЕсли;
// Далее следует код вызова регистрации товара
Если ПризнВозврата = 0 Тогда
Если Объект.Registration <> 0 тогда
ОписаниеРезультата = Объект.ResultDescription;
Возврат Рез;
КонецЕсли;
КонецЕсли;
КонецЦикла;
После внесения правок важно проверить, как именно объект Объект.TaxTypeNumber соотносится с настройками вашей кассы. В зависимости от прошивки и ФФД, идентификаторы налогов могут отличаться. Если после внесения изменений чек все равно аннулируется, попробуйте следующий подход для отладки:
Анализ через отладчик: Проверьте, какое именно значение СписокТоваров.СтавкаНДС возвращает ваша номенклатура. Убедитесь, что в справочнике «Номенклатура» у товаров правильно выбрана ставка (20% вместо 18%).
Если правка кода вызывает затруднения, можно рассмотреть следующие варианты:
FprnM1C.dll вызывает ошибки типа DeviceEnabled, возможно, стоит использовать более современную обертку (внешнюю компоненту), которая лучше работает с 10-м драйвером Атол.Помните, что при изменении кода обработки 1С 7.7 всегда делайте резервную копию файла. После внесения правок перезапустите 1С, чтобы новая версия обработки гарантированно подгрузилась в память.