Как исправить передачу налога Без НДС на Атол 55Ф и настроить печать чеков возврата в 1С:Розница 1.0?

Программист 1С v8.3 (Обычные формы) Налоговый учет Торговля и дистрибуция
← На главную

При совместной работе фискальных регистраторов семейства Атол (например, Атол 55Ф, 30Ф, 11Ф) и устаревших конфигураций на платформе 1С (в частности, 1С:Розница 1.0) пользователи часто сталкиваются с критической ошибкой. При пробитии чека со ставкой "Без НДС" касса упорно отправляет в ОФД и печатает на чеке налог 10%. Кроме того, при оформлении возвратов касса часто отказывается печатать физический чек возврата прихода. Рассмотрим подробнее, почему возникают эти проблемы и как их решить по шагам.

---

Выясняем причину сдвига налоговых ставок (10% НДС вместо Без НДС)

Для начала разберем природу возникновения ошибки с налогами. Проблема кроется в несоответствии внутренней структуры драйвера Атол и алгоритмов формирования XML-пакета в старых конфигурациях 1С. В современных версиях прошивок ККТ (Платформа 5.0) и под требования форматов фискальных данных (ФФД 1.05 и 1.2) производитель полностью реорганизовал таблицу налоговых ставок внутри самой кассы.

Давайте сопоставим актуальную внутреннюю таблицу налогов драйверов Атол:

Конфигурация 1С:Розница 1.0 разрабатывалась в то время, когда под индексом 1 передавался признак "Без НДС". Отправляя старый индекс в драйвер ККТ через XML-структуру или напрямую через свойства общего драйвера, программа заставляет современную кассу применять актуальную ставку под номером 1, которой сейчас является 10% НДС.

---

Решение 1. Настройка соответствия налогов через параметры ККТ

Если у нас нет возможности оперативно программировать или обновлять конфигурацию 1С, мы можем решить проблему на уровне настроек самой кассы. Проанализируем этот метод.

По умолчанию 1С:Розница 1.0 отправляет все продажи по первой секции (Секция 1). Мы можем принудительно закрепить за этой секцией конкретный налог в памяти ККТ. Разберем шаги:

  1. Закройте смену в 1С и убедитесь, что все документы фискализированы.
  2. Запустите утилиту "Тест драйвера ККТ" (версии 8.16 или 10.х) от имени администратора.
  3. Перейдите в раздел "Свойства" и выполните проверку связи с кассой.
  4. Перейдите в меню "Параметры ККТ" (или "Параметры оборудования").
  5. Найдите ветку настроек под названием "Секции".
  6. Для Секции 1 найдите параметр "Налог" и установите значение 5 (что жестко закрепит за ней ставку "Без НДС").
  7. Сохраните изменения и запишите параметры в кассу.

После этой настройки при попытке пробить товар через первую секцию касса автоматически применит ставку "Без НДС", игнорируя неверный индекс, приходящий из устаревшей программы.

---

Решение 2. Модификация кода обработки обслуживания 1С

Более надежным и гибким решением является исправление кода во внешней обработке обслуживания ККТ (обычно это обработки семейства ATOLKKT.epf или специализированные обработки под требования ФЗ-54). Посмотрим на пример реализации логики подмены налоговых ставок непосредственно перед отправкой XML-пакета в драйвер.

Нам необходимо найти в модуле обработки функцию, отвечающую за подготовку XML для ККТ (например, ПолучитьПакетДокумента или СформироватьXMLПакет). Проанализируем пример кода, выполняющего переопределение индексов:


Функция СформироватьXMLДляФискализации(ОбъектДрайвера, ТаблицаТоваров) Экспорт
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.УстановитьСтроку();
    ЗаписьXML.ЗаписатьОбъявлениеXML();
    ЗаписьXML.ЗаписатьНачалоЭлемента("Receipt");
    
    Для Каждого СтрокаТовара Из ТаблицаТоваров Цикл
        ЗаписьXML.ЗаписатьНачалоЭлемента("Row");
        ЗаписьXML.ЗаписатьАтрибут("Name", СтрокаТовара.Наименование);
        ЗаписьXML.ЗаписатьАтрибут("Price", Строка(СтрокаТовара.Цена));
        ЗаписьXML.ЗаписатьАтрибут("Quantity", Строка(СтрокаТовара.Количество));
        
        // Корректируем индекс налога под новые прошивки Атол Платформа 5.0
        Если СтрокаТовара.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС Тогда
            ИндексНалога = "5"; // В современных прошивках 5 - это "Без НДС"
        ИначеЕсли СтрокаТовара.СтавкаНДС = Перечисления.СтавкиНДС.НДС10 Тогда
            ИндексНалога = "1"; // НДС 10%
        ИначеЕсли СтрокаТовара.СтавкаНДС = Перечисления.СтавкиНДС.НДС20 Тогда
            ИндексНалога = "2"; // НДС 20%
        Иначе
            ИндексНалога = "5"; // Значение по умолчанию
        КонецЕсли;
        
        ЗаписьXML.ЗаписатьАтрибут("TaxVariant", ИндексНалога);
        ЗаписьXML.ЗаписатьКонецЭлемента(); // Конец элемента Row
    КонецЦикла;
    
    ЗаписьXML.ЗаписатьКонецЭлемента(); // Конец элемента Receipt
    Возврат ЗаписьXML.Закрыть();
КонецФункции

Использование этого кода позволяет полностью автоматизировать процесс распределения ставок НДС, исключая необходимость ручной настройки внутренних таблиц кассового аппарата.

---

Почему касса не печатает чеки возврата в 1С:Розница 1.0?

Теперь детально разберем проблему с возвратами товаров. По закону 54-ФЗ при возврате товара клиенту кассир обязан пробить фискальный документ с признаком расчета "Возврат прихода". Однако в 1С:Розница 1.0 этот процесс часто не завершается печатью физического чека на кассе. Выясним три основные причины этой проблемы.

Причина 1. Оформление возврата "не в день покупки"

В устаревшей конфигурации Розница 1.0 логика работы разделена на два сценария:

  1. Возврат в течение той же смены: Оформляется через интерфейс РМК (Режим рабочего места кассира). В этом случае программа посылает прямую команду ККТ, и чек возврата успешно распечатывается.
  2. Возврат в другую смену (архивный чек): Проводится через документ Возврат товаров от покупателя. В типовой схеме этот документ делает проводки в базе данных и формирует Расходный кассовый ордер (РКО) для выдачи денег. Однако типовая конфигурация Розница 1.0 из этого документа по умолчанию вообще не отправляет команду печати на фискальный регистратор. В результате деньги списываются по учету, но чек ККТ не печатается.

Причина 2. Конфликт типов оплат (Эквайринг)

Если покупка была совершена по безналичному расчету, при попытке оформить возврат программа пытается передать тип оплаты "Электронными" (безналичными). В старых версиях обработки обслуживания индекс безналичной оплаты может передаваться некорректно, из-за чего ККТ блокирует печать чека возврата и возвращает ошибку, которую 1С "молча" игнорирует, просто проводя документ в своей базе данных.

---

Настройка печати чека возврата из документа "Возврат товаров от покупателя"

Чтобы заставить кассу печатать чеки возврата при проведении документов за прошлые смены, нам необходимо доработать модуль внешней обработки обслуживания или форму документа возврата, добавив вызов функций фискализации.

Посмотрим на пример кода, реализующий процедуру фискализации чека возврата через объект драйвера Атол:


Процедура НапечататьФискальныйЧекВозврата(ОбъектДрайвера, ДокументСсылка) Экспорт
    // Инициализируем подключение к кассе
    ОбъектДрайвера.DeviceEnabled = Истина;
    
    // Открываем чек возврата прихода (Тип чека 2 означает "Возврат прихода")
    ОбъектДрайвера.ReceiptType = 2; 
    РезультатОткрытия = ОбъектДрайвера.OpenReceipt();
    
    Если РезультатОткрытия <> 0 Тогда
        ВызватьИсключение "Не удалось открыть чек возврата на ККТ!";
    КонецЕсли;
    
    // Перебираем табличную часть товаров для регистрации на ККТ
    Для Каждого СтрокаТовара Из ДокументСсылка.Товары Цикл
        ОбъектДрайвера.Name = СтрокаТовара.Номенклатура.Наименование;
        ОбъектДрайвера.Price = СтрокаТовара.Цена;
        ОбъектДрайвера.Quantity = СтрокаТовара.Количество;
        ОбъектДрайвера.Department = 1; // Номер секции
        
        // Устанавливаем правильную ставку налога (5 - Без НДС)
        ОбъектДрайвера.TaxNumber = 5; 
        
        // Регистрируем позицию в чеке
        ОбъектДрайвера.Registration();
    КонецЦикла;
    
    // Указываем тип закрытия чека
    // 0 - Наличные, 1 - Безналичные (Электронные)
    Если ДокументСсылка.ВидОплаты = Перечисления.ВидыОплат.Безналичные Тогда
        ОбъектДрайвера.TypeClose = 1;
    Иначе
        ОбъектДрайвера.TypeClose = 0;
    КонецЕсли;
    
    // Финализируем и закрываем чек на кассе
    ОбъектДрайвера.CloseReceipt();
    ОбъектДрайвера.DeviceEnabled = Ложь;
КонецПроцедуры

Важное примечание: Никогда не пытайтесь заменить чек возврата прихода "Чеком коррекции". По требованиям ФНС, чек коррекции формируется исключительно для исправления ошибок ведения учета (например, при выявлении излишков денежных средств или при работе без применения ККТ). Обычный возврат товаров от физического лица всегда должен сопровождаться операцией "Возврат прихода".

---

Резюме по настройке торгового оборудования

Подводя итоги, для полного устранения всех неполадок при интеграции Атол 55Ф и 1С:Розница 1.0 рекомендуется выполнить следующий комплекс мер:

  1. Установить стабильную версию драйвера ККТ. Практика показывает, что для старых конфигураций оптимальным выбором является драйвер Атол версии 8.16.х либо 32-битный драйвер версии 9.12.2.
  2. Заменить стандартную обработку обслуживания на модифицированную версию, в которой реализован механизм подмены индексов ставок НДС (перенаправление на индекс 5) и добавлена поддержка фискализации документов возврата.
  3. В случае невозможности изменения кода — произвести жесткую привязку налога "Без НДС" (индекс 5) к первой секции ККТ через утилиту настройки параметров Атол.
← На главную