Переход на новую ставку НДС 20% в свое время стал серьезным испытанием для пользователей классической платформы 1С:Предприятие 7.7. Одной из самых распространенных проблем при использовании фискальных регистраторов АТОЛ 30Ф стала ошибка «Чек аннулирован». Ситуация обычно выглядела следующим образом: позиции с НДС 10% пробивались без проблем, но как только дело доходило до товаров со ставкой 20%, касса прекращала печать и аннулировала документ. Разберем подробно, почему это происходит и как настроить систему для корректной работы.
Выясним причину, по которой касса отказывается принимать данные. Проблема кроется в несоответствии передаваемых данных из 1С и внутренних таблиц налогов в прошивке кассового аппарата. Когда мы обновили прошивку АТОЛ 30Ф под НДС 20%, внутренняя таблица налогов кассы изменилась. Однако старые драйверы и обработки обслуживания 1С продолжают посылать запросы так, будто в кассе все еще запрограммирован НДС 18%.
Большинство ККТ АТОЛ используют индексацию налогов. Например, индекс «1» может соответствовать НДС 18% (а после обновления — 20%), индекс «2» — НДС 10%, индекс «3» — НДС 0% и так далее. Если 1С пытается передать значение «20» текстом или обращается к индексу, который не настроен в кассе, происходит критическая ошибка, ведущая к аннулированию чека. Рассмотрим шаги, которые помогут нам исправить эту ситуацию.
Прежде чем приступать к правке кода 1С, проанализируем состояние оборудования. Для успешной работы с НДС 20% должны быть соблюдены следующие условия:
Проанализируем настройки внутри самой 1С 7.7. Одной из частых ошибок является выбор старой модели фискального регистратора в списке подключаемого оборудования. Рассмотрим правильный порядок действий:
Зайдем в настройки торгового оборудования и в списке моделей выберем «АТОЛ 30Ф 105» (цифры 105 указывают на поддержку формата фискальных данных 1.05). Это критически важно, так как логика работы с налогами в ФФД 1.0 и 1.05 существенно различается.
Перейдем к самой важной части — правке программного кода. В 1С 7.7 за взаимодействие с кассой обычно отвечает внешняя обработка с расширением .ert. Чаще всего это файл frATOL54_comm.ert (или аналогичный, в зависимости от версии конфигурации). Нам необходимо найти фрагмент кода, отвечающий за передачу ставки налога в драйвер.
Найдем в обработке процедуру ПечатьЧека(). Нам нужно проанализировать, как заполняется свойство объекта драйвера TaxTypeNumber. Выясним, какой номер налога соответствует ставке 20% в вашей кассе. Чаще всего это индекс 3.
Рассмотрим пример кода, который необходимо внедрить в обработку для корректной подмены ставок:
// В обработке обслуживания находим блок определения налога
ИначеЕсли СписокТоваров.СтавкаНДС = "18" Тогда
// Старая ставка 18% мапится на тот же индекс, что и 20% для совместимости
Объект.TaxTypeNumber = 3;
ИначеЕсли СписокТоваров.СтавкаНДС = "20" Тогда
// Новая ставка 20% отправляется под индексом 3
Объект.TaxTypeNumber = 3;
КонецЕсли;
Важно понимать: мы не меняем ставку налога в самой базе данных 1С (номенклатура остается с 20%). Мы лишь говорим драйверу: «Если в 1С ставка 20%, то в кассе используй налоговую секцию №3». В обновленных прошивках АТОЛ именно в секции №3 обычно прописан НДС 20%.
Проанализируем ситуацию, когда нам может потребоваться печатать чеки за прошлые периоды или когда база еще находится в процессе обновления. Чтобы код был более универсальным, можно добавить проверку рабочей даты, хотя в текущих реалиях это уже не так актуально, как в начале 2019 года. Посмотрим на расширенный пример:
ИначеЕсли СписокТоваров.СтавкаНДС = "18" Тогда
Объект.TaxTypeNumber = 3;
ИначеЕсли (СписокТоваров.СтавкаНДС = "20") И (РабочаяДата() >= '01.01.2019') Тогда
// Явно указываем индекс налога для всех документов после даты перехода
Объект.TaxTypeNumber = 3;
КонецЕсли;
Иногда даже после настройки индекса TaxTypeNumber чек может аннулироваться с ошибкой «Сумма налога превышает сумму позиции». Это происходит из-за различий в алгоритмах округления 1С и ККТ. Рассмотрим, как этого избежать:
В современных реалиях ФФД 1.05 и выше рекомендуется передавать в кассу только ставку налога, позволяя фискальному регистратору самостоятельно рассчитывать сумму НДС. Если ваша обработка пытается принудительно передать параметр TaxSum, попробуйте закомментировать эту строку или убедиться, что расчет в 1С идет строго по формулам ФНС (до 2-х знаков после запятой без накопления погрешности).
Для окончательной уверенности проанализируем настройки самой кассы через «Тест драйвера ККТ» (обычно это утилита fptr10_t.exe или dtointegrator.exe для 8-й версии):
Если в таблице налогов пусто или указаны другие данные, 1С не сможет корректно пробить чек, пока данные в таблице не будут приведены в соответствие с программным кодом обработки.
Для решения проблемы «Чек аннулирован» на АТОЛ 30Ф в 1С 7.7 мы выполнили три ключевых действия: обновили прошивку, переключили модель на ФФД 1.05 и внесли правки во внешнюю обработку обслуживания, сопоставив ставку «20» из программы с нужным индексом налога в кассе. Эти шаги позволяют продолжить эксплуатацию надежной платформы 7.7 в соответствии с требованиями современного законодательства.