Как отключить печать НДС в чеке на фискальном регистраторе Атол 30Ф при работе из 1С 7.7

Программист 1С v7.7 Налоговый учет Торговля и дистрибуция
← На главную

В процессе интеграции торгового оборудования, особенно при работе с классическими конфигурациями на платформе 1С 7.7, разработчики часто сталкиваются с ситуацией, когда фискальный регистратор (ФР) принудительно выводит в чеке информацию о налогах. Даже если организация работает без НДС (например, на упрощенной системе налогообложения — УСН или патенте), в чеке могут продолжать печататься строки «НДС 18%» или «НДС 0%». В этой статье мы подробно разберем, как программно управлять налоговыми ставками в драйвере АТОЛ и добьемся корректного вывода чека без лишних налоговых строк.

Анализ проблемы: почему стандартные значения не всегда работают

Основная сложность заключается в том, что в фискальных регистраторах АТОЛ (в частности, в модели 30Ф) за тип налога отвечает свойство TaxTypeNumber. Согласно документации к драйверу версии 8.х, значение 4 обычно соответствует режиму «НДС не облагается». Однако на практике мы можем столкнуться с тем, что на разных экземплярах ККТ одно и то же значение кода приводит к разным результатам. Проанализируем причину: внутри кассового аппарата существует внутренняя «Таблица налогов». Индекс, который мы передаем из 1С, — это просто номер строки в этой таблице. Если прошивки аппаратов различаются или таблицы были изменены при фискализации, индексы могут «поплыть».

Рассмотрим типичный фрагмент кода, который инициализирует продажу позиции с указанием налога:


// Пример стандартной установки налога в цикле по товарам
ECR.Name = Строка(СокрЛП(ТЧ.Номенклатура.Наименование));
ECR.Price = ТЧ.Цена;
ECR.Quantity = ТЧ.Количество;
ECR.Department = 1; 

// Установка индекса налога:
// 1 - НДС 0%
// 2 - НДС 10%
// 3 - НДС 18% (или 20% для новых прошивок)
// 4 - НДС не облагается
ECR.TaxTypeNumber = 4; 
ECR.Registration();

Если после выполнения этого кода в чеке всё равно печатается налог, значит, настройки в таблицах ККТ или параметры драйвера требуют уточнения.

Шаг 1: Проверка системы налогообложения (СНО)

Одной из скрытых причин принудительной печати НДС является неверно указанная система налогообложения в чеке. Если касса считает, что чек пробивается по Общей системе (ОСН), она будет требовать выделения налога. С введением онлайн-касс (ФФД 1.05 и выше) передача тега 1055 стала обязательной. Выясним, как передать этот атрибут через драйвер 8.х.

Для установки СНО нам необходимо использовать метод записи атрибута WriteAttribute() перед открытием чека или перед регистрацией позиций. Разберем код настройки системы налогообложения:


// Номера СНО: 
// 1 - ОСН; 2 - УСН доход; 4 - УСН доход-расход; 8 - ЕНВД; 16 - ЕСХН; 32 - ПСН
Объект.AttrNumber = 1055;
Объект.AttrValue = 2; // Например, УСН доход
Объект.WriteAttribute();

Важный момент: если вы используете старую версию драйвера, эти свойства могут называться иначе или требовать обновления до версии 8.14 и выше для корректной поддержки ФФД 1.05.

Шаг 2: Работа с таблицами налогов через Тест драйвера

Если программная установка TaxTypeNumber = 4 не помогает, нам нужно проверить, что именно записано в памяти самой кассы. Рассмотрим алгоритм действий в сервисной утилите «Тест драйвера ККТ»:

  1. Запустите «Тест драйвера ККТ» (обычно это fptr10_t.exe для 10-й версии или drivers8.exe для 8-й).
  2. Зайдите в раздел «Настройка свойств» и установите связь с аппаратом.
  3. Нажмите кнопку «Таблицы».
  4. Найдите таблицу под названием «Налоги» (обычно таблица №6).
  5. Проанализируйте строки. Посмотрите, под каким порядковым номером (индексом) записано значение «БЕЗ НДС» или «НДС не облагается».

Именно этот номер строки (начиная с 1) и будет являться вашим TaxTypeNumber. Как показывает практика (и сообщения коллег с форумов), на некоторых аппаратах АТОЛ 30Ф нужным значением оказывается 6. Посмотрим, как это реализовать в коде:


// В некоторых случаях помогает использование индекса 6
Если ЭтоБезНДС Тогда
    Объект.TaxTypeNumber = 6;
Иначе
    Объект.TaxTypeNumber = 4; // Стандартное значение
КонецЕсли;

Шаг 3: Полная реализация процедуры печати чека без НДС

Проанализируем комплексный пример кода для 1С 7.7, который учитывает проверку ставок и корректную передачу данных в ФР. Мы будем использовать объект драйвера (обычно инициализируемый как Объект или ECR).


Процедура ПробитьЧекБезНДС(СписокТоваров)
    // 1. Установка режима чека
    Объект.CheckType = 1; // Продажа
    Объект.OpenCheck();
    
    // 2. Указываем СНО (Тег 1055)
    Объект.AttrNumber = 1055;
    Объект.AttrValue = 2; // УСН Доход
    Объект.WriteAttribute();
    
    // 3. Цикл по позициям
    СписокТоваров.ВыбратьСтроки();
    Пока СписокТоваров.ПолучитьСтроку() = 1 Цикл
        Объект.Name = СписокТоваров.Наименование;
        Объект.Quantity = СписокТоваров.Количество;
        Объект.Price = СписокТоваров.Цена;
        
        // Принудительно ставим налог "Без НДС"
        // Пробуем 4 или 6 в зависимости от таблицы налогов вашего ФР
        Объект.TaxTypeNumber = 4; 
        
        // Выполняем регистрацию позиции
        Если Объект.Registration() <> 0 Тогда
            Сообщить("Ошибка регистрации товара: " + Объект.ResultDescription);
            Объект.CancelCheck();
            Возврат;
        КонецЕсли;
    КонецЦикла;
    
    // 4. Закрытие чека с оплатой (тип оплаты 1 - наличные)
    Объект.Summ = СуммаЧека;
    Объект.TypeClose = 1;
    Объект.Payment();
    Объект.CloseCheck();
КонецПроцедуры

Нюансы Платформы 5.0 и драйвера 10.х

Если ваш Атол 30Ф переведен на новую Платформу 5.0, старые методы драйвера 8.х могут работать нестабильно. В этом случае свойство TaxTypeNumber может игнорироваться, так как драйвер переходит в режим эмуляции. Выясним причину: в Платформе 5.0 налоги управляются через конкретные константы налоговых ставок, а не через индексы таблиц.

В современных реалиях рекомендуется использовать более явную передачу признака налога. Если вы все же ограничены использованием 7.7 и OLE-объекта, убедитесь, что в параметрах ККТ (через Тест драйвера) в разделе «Налоги» выключена опция «Печатать налоги с нулевыми суммами». Это позволит «скрыть» строки НДС в чеке, даже если логика драйвера пытается их туда добавить.

Рекомендации по отладке

Рассмотрим по шагам, что делать, если НДС всё равно печатается:

  1. Проверьте свойство Tax: В некоторых версиях драйвера наряду с TaxTypeNumber существует свойство Tax. Попробуйте устанавливать их в паре: Объект.Tax = 4; Объект.TaxTypeNumber = 4;.
  2. Обновите драйвер: Версия 8.14 является переходной, для работы с онлайн-кассами лучше использовать последние сборки ветки 8.16 или переходить на 10.х (через внешнюю компоненту).
  3. Печать Z-отчета: Иногда настройки таблиц вступают в силу только после закрытия смены. Попробуйте изменить индекс и снять Z-отчет перед проверкой.
  4. Логирование: Включите ведение лога в настройках драйвера АТОЛ. В файле FPrnM1C.log вы сможете увидеть, какое именно число передается в ККТ в команде регистрации позиции. Если там уходит правильный индекс, но касса печатает налог — проблему нужно решать в настройках самой кассы через Тест Драйвера.

Подводя итог, можно сказать, что решение проблемы с печатью НДС в 1С 7.7 на аппаратах АТОЛ 30Ф чаще всего кроется в несоответствии индекса TaxTypeNumber внутренней таблице налогов ККТ или в отсутствии принудительной установки системы налогообложения (СНО) через атрибуты чека. Используя предложенные выше фрагменты кода и методику проверки таблиц, вы сможете настроить корректную печать чеков для любой системы налогообложения.

← На главную