При подключении онлайн-касс АТОЛ (например, популярных моделей FPrint-22ПТК, АТОЛ 11Ф и других) разработчики часто сталкиваются с неприятной проблемой: при пробитии чека на позиции, не облагаемые налогом, на чековой ленте упорно печатается ставка «НДС 0%». В то же время, согласно закону и учетной политике организации, там должна выводиться информация «Без НДС».
В этой статье мы подробно разберем, почему возникает эта коллизия, проанализируем механизмы взаимодействия платформы 1С с драйверами торгового оборудования и рассмотрим несколько надежных практических способов решения данной проблемы — от быстрого изменения кода до правильной настройки параметров самой ККТ.
Для начала давайте выясним причину такого поведения оборудования. С точки зрения налогового законодательства РФ и форматов фискальных документов (ФФД), «НДС 0%» и «Без НДС» — это абсолютно разные сущности:
В старых версиях драйверов АТОЛ (в частности, в линейке 8.х и ранних версиях 9.х) ставка налога передавалась из 1С в виде числового значения. Так как математически и отсутствие налога, и нулевая ставка выражаются цифрой 0, кассовый аппарат по умолчанию интерпретировал переданный ноль как ставку «НДС 0%». В результате этого в чеках компаний на УСН печаталась некорректная информация, что могло вызвать лишние вопросы при налоговых проверках.
Давайте проанализируем типовой фрагмент кода, используемый для заполнения параметров чека и последующего вызова функции печати строки:
ТаблицаТоваров = Новый Массив;
СтрокаТаблицыТоваров = Новый СписокЗначений;
СтрокаТаблицыТоваров.Добавить("Оплата заказа №"+СокрЛП(Объект.ДокументОснование.НомерПоставщика));// 1 - Наименование
СтрокаТаблицыТоваров.Добавить(""); // 2 - Штрихкод
СтрокаТаблицыТоваров.Добавить(""); // 3 - Артикул
СтрокаТаблицыТоваров.Добавить(НомерСекции); // 4 - Номер отдела
СтрокаТаблицыТоваров.Добавить(Объект.ДокументОснование.СуммаДокумента); // 5 - Цена за позицию без скидки
СтрокаТаблицыТоваров.Добавить(1); // 6 - Количество
СтрокаТаблицыТоваров.Добавить(""); // 7 - Наименование скидки/наценки
СтрокаТаблицыТоваров.Добавить(0); // 8 - Сумма скидки/наценки
СтрокаТаблицыТоваров.Добавить(0); // 9 - Процент скидки/наценки
СтрокаТаблицыТоваров.Добавить(Объект.ДокументОснование.СуммаДокумента); // 10 - Сумма позиции со скидкой
СтрокаТаблицыТоваров.Добавить(0); // 11 - Номер налога (1)
СтрокаТаблицыТоваров.Добавить(0); // 12 - Сумма налога (1)
СтрокаТаблицыТоваров.Добавить(0); // 13 - Процент налога (1)
СтрокаТаблицыТоваров.Добавить(0); // 14 - Номер налога (2)
СтрокаТаблицыТоваров.Добавить(0); // 15 - Сумма налога (2)
СтрокаТаблицыТоваров.Добавить(0); // 16 - Процент налога (2)
СтрокаТаблицыТоваров.Добавить(""); // 17 - Наименование секции форматирования товарной строки
ТаблицаТоваров.Добавить(СтрокаТаблицыТоваров);
В дальнейшем эта таблица передается в обработчик печати, где вызывается низкоуровневый метод драйвера:
Функция НапечататьФискальнуюСтроку(ОбъектДрайвера, Параметры, ПараметрыПодключения, Наименование, Количество, Цена, ПроцентСкидки, Сумма, НомерСекции, СтавкаНДС, ВыходныеПараметры) Экспорт
Результат = Истина;
Результат = ОбъектДрайвера.НапечататьФискСтроку(ПараметрыПодключения.ИДУстройства, Наименование, Количество, Цена, Сумма, НомерСекции, СтавкаНДС);
Если НЕ Результат Тогда
ВыходныеПараметры.Очистить;
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить("");
ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);
ОтменитьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
КонецЕсли;
Возврат Результат;
КонецФункции
Как мы видим, в качестве аргумента СтавкаНДС передается числовое значение 0 (в тринадцатом элементе списка значений строки товара). Драйвер ККТ, получая число 0, сопоставляет его со ставкой «НДС 0%» и отправляет соответствующую команду на печать фискального документа.
Ниже мы подробно рассмотрим четыре способа устранения этой проблемы в зависимости от используемой версии драйвера АТОЛ и конфигурации 1С.
Если на вашем рабочем месте используются устаревшие управляемые формы и драйвер АТОЛ версии 9.х (например, версии 9.11 или выше), проблему можно решить непосредственно в коде 1С без кардинального обновления всей системы интеграции.
Опытным путем разработчики выяснили, что для разделения нулевых ставок драйверу необходимо передавать не числовое значение, а специальный тип данных. Вместо числа 0 для позиций без НДС следует передавать значение Неопределено или пустую строку "".
Давайте изменим логику заполнения нашей строки таблицы товаров. Перед добавлением параметров налога выполним проверку:
// Определяем значение ставки НДС для передачи в драйвер
Если ДокументБезНДС Тогда
ПередаваемаяСтавкаНДС = Неопределено; // Также можно протестировать передачу пустой строки ""
Иначе
ПередаваемаяСтавкаНДС = 0; // Для реальной ставки НДС 0%
КонецЕсли;
// Заполняем параметры строки товара
СтрокаТаблицыТоваров = Новый СписокЗначений;
СтрокаТаблицыТоваров.Добавить("Оплата заказа №"+СокрЛП(Объект.ДокументОснование.НомерПоставщика));
СтрокаТаблицыТоваров.Добавить("");
СтрокаТаблицыТоваров.Добавить("");
СтрокаТаблицыТоваров.Добавить(НомерСекции);
СтрокаТаблицыТоваров.Добавить(Объект.ДокументОснование.СуммаДокумента);
СтрокаТаблицыТоваров.Добавить(1);
СтрокаТаблицыТоваров.Добавить("");
СтрокаТаблицыТоваров.Добавить(0);
СтрокаТаблицыТоваров.Добавить(0);
СтрокаТаблицыТоваров.Добавить(Объект.ДокументОснование.СуммаДокумента);
СтрокаТаблицыТоваров.Добавить(0); // Номер налога (1)
СтрокаТаблицыТоваров.Добавить(0); // Сумма налога (1)
СтрокаТаблицыТоваров.Добавить(ПередаваемаяСтавкаНДС); // Процент налога (1) - передаем Неопределено вместо 0
// ... заполняем остальные параметры
При передаче значения Неопределено компонента интеграции корректно сформирует команду ККТ, сигнализирующую о том, что позиция освобождена от налогообложения, и на чеке распечатается долгожданное «Без НДС».
Кассовые аппараты АТОЛ хранят внутри своей фискальной памяти внутреннюю таблицу налогов. Каждой налоговой ставке соответствует определенный индекс (код налога). Мы можем управлять печатью ставки, передавая в кассу точный индекс нужной строки из этой таблицы.
В стандартной конфигурации современных моделей ККТ АТОЛ сетка индексов выглядит следующим образом:
Если вы используете низкоуровневые методы работы с драйвером, то при формировании параметров фискальной строки вам необходимо передавать в поле «Номер налога» индекс 1 вместо индекса 2 или значения по умолчанию 0. Это гарантирует жесткое сопоставление позиции чека с режимом «Без НДС».
Обратите внимание! В очень старых прошивках ККТ и драйверах версии 8.х таблица налогов могла иметь иную структуру (например, ставка «Без НДС» могла находиться под индексом 4 или 6). Рекомендуется предварительно распечатать чек с информацией о настройках ККТ или проверить таблицу налоговых ставок через тест драйвера.
Если вы используете современные конфигурации 1С на управляемых формах, лучшим решением будет полный отказ от устаревших ДТО 8.х/9.х и переход на актуальную версию 1С:Библиотеки подключаемого оборудования (БПО) и драйверы АТОЛ ДТО 10.
В БПО и ДТО 10 механизм передачи ставок НДС был полностью переработан. Вместо неочевидных числовых кодов или индексов теперь используются строковые текстовые идентификаторы (теги налогов), стандартизированные в формате XML-пакетов чека:
"none" — используется для товаров Без НДС;"vat0" — используется для ставки НДС 0%;"vat10" — используется для ставки НДС 10%;"vat20" — используется для ставки НДС 20%.Современная компонента 1С самостоятельно преобразует учетные данные в XML-структуру. Если в чеке фигурирует номенклатура со ставкой «Без НДС», в XML-пакет подставляется значение "none". Драйвер версии 10 однозначно распознает этот тег и фискализирует продажу без ошибок округления и с правильным выводом текстовой информации на чековую ленту.
Если у вас нет возможности оперативно изменить код конфигурации 1С или обновить библиотеку подключаемого оборудования, вы можете решить проблему на уровне "железа", настроив параметры кассы по умолчанию через сервисную утилиту.
Давайте выполним настройку по шагам:
После этой несложной манипуляции кассовый аппарат АТОЛ будет автоматически подставлять ставку «Без НДС» во всех случаях, когда программное обеспечение 1С передает некорректные или спорные параметры налогообложения.
Дополнительно необходимо проанализировать соответствие системы налогообложения (СНО) в вашей базе данных 1С и в фискальном накопителе ККТ. Очень часто некорректная подмена ставок происходит из-за того, что в карточке организации в 1С указана Общая система налогообложения (ОСН), хотя фактически бизнес работает на УСН.
Если в настройках подключения кассы в 1С выбрана ОСН, система по умолчанию будет трактовать любые нулевые налоги как ставку «НДС 0%». Обязательно проверьте, чтобы в параметрах учетной политики 1С и в настройках регистрации ККТ была выбрана одинаковая СНО (например, «Упрощенная доход» или «Упрощенная доход минус расход»). Это позволит БПО автоматически отправлять корректный строковый тег none при формировании фискальных документов.