Как исправить ошибку аннулирования чека и неверный НДС на кассе Атол 30Ф в 1С 7.7

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

При интеграции современных онлайн-касс, таких как Атол 30Ф, с платформой 1С 7.7 программисты часто сталкиваются с ситуацией, когда вчера еще работающая система внезапно начинает выдавать чек с пометкой «Аннулирован». Ситуация осложняется тем, что даже если чек печатается, в нем могут отображаться некорректные ставки НДС (например, «18/118» вместо «Без НДС») или неверная система налогообложения (СНО). В данной статье мы подробно разберем причины возникновения этих ошибок и проанализируем эффективные методы их решения, основываясь на опыте практикующих специалистов.

Выясняем причины аннулирования чека

Первым делом нам необходимо понять, почему касса отказывается закрывать фискальный документ. Рассмотрим наиболее частые причины, по которым Атол 30Ф может аннулировать чек:

  1. Несоответствие версии ФФД: Если касса зарегистрирована под формат фискальных данных (ФФД) 1.05, а программное обеспечение пытается передать данные в старом формате 1.00, ККТ может заблокировать операцию.
  2. Неверный код СНО: Передача индекса системы налогообложения, который не соответствует настройкам в памяти кассы.
  3. Ошибки в структуре XML: При использовании «XML-обертки» (компоненты FprnM1C82_54FZ.dll) любые лишние символы, например кавычки в наименовании товара, могут нарушить структуру файла.
  4. Нулевые суммы или количество: Если в результате округлений в 1С передается нулевая цена или количество, чек будет аннулирован.

Для диагностики текущих настроек ККТ воспользуемся «Тестом драйвера». Проанализируем состояние версии ФФД ККТ и ФН. Для этого в тесте драйвера выполним команду нижнего уровня 91 36 00 00. В ответе нас интересуют байты, идущие после 55 00:

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

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

Важный момент: часто в устаревших инструкциях можно встретить значения степени двойки (1, 2, 4, 8, 16, 32), но для современных драйверов Атол и XML-пакетов 1С следует использовать именно порядковую нумерацию (0-5).

Проблема XML-обертки и решение с НДС

Многие разработчики используют компоненту-прокладку для формирования чека через XML. Посмотрим на пример типичного формирования пакета:


XMLДанныеЧека = XMLАнализатор.СоздатьДокумент();
XMLCheckPackage = XMLДанныеЧека.СоздатьПодчиненныйЭлемент("CheckPackage");
XMLParameters = XMLCheckPackage.СоздатьПодчиненныйЭлемент("Parameters");
Атрибут(XMLParameters, "TaxVariant", СистемаНалогообложения); // Здесь должно быть 3 для ЕНВД
XMLPositions = XMLCheckPackage.СоздатьПодчиненныйЭлемент("Positions");
// Цикл по товарам
XMLFiscalString = XMLPositions.СоздатьПодчиненныйЭлемент("FiscalString");
Атрибут(XMLFiscalString, "Tax", "none"); // Ставка НДС

Проанализируем ситуацию: даже если передавать Tax="none", на чеке может печататься «НДС 18/118». Это происходит из-за того, что в новых прошивках Атол изменилась внутренняя таблица налогов. Раньше «Без НДС» имел индекс 4, а в новых версиях — 6. XML-компонента часто жестко зашита на старые индексы, поэтому она передает неверный код в драйвер.

Переход на прямую работу через драйвер (FprnM1C)

Чтобы полностью контролировать процесс печати и избежать проблем с XML, рекомендуется перейти на прямое управление объектом драйвера. Разберем этот метод по шагам. Вместо формирования текстового файла мы будем вызывать методы драйвера FprnM1C.dll напрямую.

Рассмотрим пример реализации печати позиции без использования промежуточных файлов:


// Создание объекта драйвера
Драйвер = СоздатьОбъект("AddIn.FPrnM45"); 
Драйвер.DeviceEnabled = 1;
Драйвер.Mode = 1; // Регистрация
Драйвер.SetMode();

// Открытие чека
Драйвер.CheckType = 1; // Продажа
Драйвер.OpenCheck();

// Регистрация товара
Драйвер.Name = "Труба стальная";
Драйвер.Price = 100;
Драйвер.Quantity = 5;
Драйвер.Department = 1; // Секция
Драйвер.TaxTypeNumber = 6; // ВАЖНО: 6 - это "Без НДС" для новых прошивок
Драйвер.Registration();

// Закрытие чека с оплатой
Драйвер.Summ = 500;
Драйвер.TypeClose = 0; // Наличные
Драйвер.Payment();
Драйвер.CloseCheck();

Преимущества данного подхода: мы можем точно указать TaxTypeNumber. Если касса выдает неверный налог, мы просто меняем цифру (например, пробуем 4 или 0) в зависимости от того, что настроено в таблицах вашей ККТ. Проверить текущую таблицу налогов можно через «Тест драйвера» -> «Параметры ККТ» -> «Налоги».

Особенности работы с ФФД 1.05 в 1С 7.7

Если ваша касса работает по протоколу ФФД 1.05 (что является обязательным требованием), необходимо учитывать новые обязательные реквизиты. Разберем, что нужно добавить в код при использовании обработки frATOL54_comm_105.ert:

  1. Признак предмета расчета (Тег 1212): для обычного товара это значение 1.
  2. Признак способа расчета (Тег 1214): для полной оплаты это значение 4.
  3. Данные кассира: обязательно передавайте ФИО кассира, иначе чек может быть аннулирован на этапе закрытия.

Для прямой работы через драйвер ДТО 8/9 это выглядит так:


Драйвер.AttrNumber = 1212; // Признак предмета расчета
Драйвер.AttrValue = 1; // Товар
Драйвер.WriteAttribute();

Драйвер.AttrNumber = 1214; // Признак способа расчета
Драйвер.AttrValue = 4; // Полный расчет
Драйвер.WriteAttribute();

Экономия чековой ленты и настройка шрифтов

В Атол 30Ф часто возникает проблема «длинных чеков». Чтобы уменьшить расход бумаги, проанализируем настройки таблиц ККТ. Через «Тест драйвера» перейдите в параметры оборудования:

Подведем итог: если вы столкнулись с аннулированием чеков на Атол 30Ф в 1С 7.7, наиболее надежным решением будет отказ от XML-компонент в пользу прямой работы с объектом драйвера. Это позволит вам гибко управлять кодами налогов и передавать все необходимые теги ФФД 1.05, обеспечивая стабильную работу торговой точки.

← На главную