При работе с торговым оборудованием в 1С:Предприятие 7.7 программисты часто сталкиваются с ситуацией, когда кассовый аппарат Атол вместо ожидаемой надписи «Без НДС» упорно печатает в чеке «НДС 0%». Это критическая ошибка для налогового учета, так как эти две ставки юридически не равнозначны. Рассмотрим подробнее, почему это происходит и как исправить ситуацию, используя современные методы интеграции.
Проанализируем ситуацию: большинство старых конфигураций 1С 7.7 используют внешнюю компоненту ATOL_KKM_1C82_54FZ.dll. Эта библиотека работает через так называемую «XML-прокладку» — 1С формирует XML-файл с данными чека, передает его компоненте, а та, в свою очередь, транслирует команды драйверу ККТ. Выясним причину ошибки: в современных прошивках под ФФД 1.05 и выше нумерация налогов в таблицах кассы изменилась. Старая компонента может жестко сопоставлять строковое значение «none» или индекс «0» с налоговой ставкой №3 (которая является 0%), в то время как «Без НДС» теперь обычно находится под индексом №4 или №6.
Самый простой и правильный путь — отказаться от устаревших компонент и использовать специализированную обработку, входящую в последние релизы «1С:Торговля и Склад 7.7» (начиная с релиза 997). Разберем по шагам, что нужно сделать:
frATOL54_comm_105.ert.В этой обработке за трансляцию налогов отвечает функция, которая преобразует ставку из документа 1С в числовой код для кассы. Если даже с этой обработкой печатается «0%», мы можем легко поправить код вручную:
// Пример модификации функции в frATOL54_comm_105.ert
Если СтавкаНДС = "БезНДС" Тогда
НомерНалога = 4; // Передаем индекс 4, который в ККТ соответствует "Без НДС"
ИначеЕсли СтавкаНДС = "0%" Тогда
НомерНалога = 3;
КонецЕсли;
Если использование XML-компоненты ATOL_KKM_1C82_54FZ является обязательным требованием или вы не хотите менять архитектуру, рассмотрим вариант прямого обращения к драйверу Атол версии 8.х (DTO 8). Это наиболее надежный способ, так как мы минуем все посреднические слои, которые могут искажать данные.
Выясним, как инициализировать объект и передать корректную ставку напрямую в драйвер:
// Создание объекта драйвера Атол 8
Попытка
Драйвер = СоздатьОбъект("AddIn.FPrnM45");
Исключение
Сообщить("Драйвер АТОЛ не установлен!");
Возврат;
КонецПопытки;
// Установка параметров соединения и открытие чека
Драйвер.DeviceEnabled = 1;
Драйвер.Mode = 1; // Режим регистрации
Драйвер.SetMode();
// Регистрация позиции товара
Драйвер.Name = "Наименование товара";
Драйвер.Price = 100.00;
Драйвер.Quantity = 1;
// Указываем индекс налога напрямую. Обычно: 1 - 20%, 2 - 10%, 3 - 0%, 4 - Без НДС
Драйвер.TaxType = 4;
Драйвер.Registration();
Именно использование свойства TaxType со значением 4 в большинстве случаев решает проблему отображения в чеке. Посмотрим на ситуацию глубже: если значение 4 не помогает, попробуйте индекс 6, так как в некоторых версиях драйверов Атол (особенно 10-й серии) маппинг может отличаться.
Иногда программная часть настроена верно, но в самой памяти кассового аппарата (в его таблицах) сбиты наименования налоговых ставок. Проанализируем, как это проверить через «Тест драйвера ККТ»:
Важный момент: Если ваша касса работает по протоколу ФФД 1.05, крайне рекомендуется использовать драйвер версии не ниже 8.16.1. В более ранних версиях работа с налогами через XML-интерфейс в 1С 7.7 была крайне нестабильной.
Для корректной настройки сопоставления в коде 1С, запомним стандартную таблицу индексов:
Если вы продолжаете использовать XML-компоненту и атрибут Tax="none" или Tax="0" не дает результата, попробуйте передать числовое значение Tax="6" или Tax="4" прямо в XML-структуру. В некоторых реализациях ATOL_KKM_1C82_54FZ именно число «6» успешно конвертируется в команду драйвера для печати «Без НДС».
Рассмотрев все варианты, мы видим, что наиболее стабильным решением является переход на прямую работу с драйвером через объект AddIn.FPrnM45 или использование современной обработки frATOL54_comm_105.ert. Это позволит вам полностью контролировать процесс формирования чека и избежать ошибок в налоговой отчетности.