При интеграции современных онлайн-касс, таких как Атол 30Ф, с платформой 1С 7.7 программисты часто сталкиваются с ситуацией, когда вчера еще работающая система внезапно начинает выдавать чек с пометкой «Аннулирован». Ситуация осложняется тем, что даже если чек печатается, в нем могут отображаться некорректные ставки НДС (например, «18/118» вместо «Без НДС») или неверная система налогообложения (СНО). В данной статье мы подробно разберем причины возникновения этих ошибок и проанализируем эффективные методы их решения, основываясь на опыте практикующих специалистов.
Первым делом нам необходимо понять, почему касса отказывается закрывать фискальный документ. Рассмотрим наиболее частые причины, по которым Атол 30Ф может аннулировать чек:
FprnM1C82_54FZ.dll) любые лишние символы, например кавычки в наименовании товара, могут нарушить структуру файла.Для диагностики текущих настроек ККТ воспользуемся «Тестом драйвера». Проанализируем состояние версии ФФД ККТ и ФН. Для этого в тесте драйвера выполним команду нижнего уровня 91 36 00 00. В ответе нас интересуют байты, идущие после 55 00:
01 — ФФД 1.00;02 — ФФД 1.05;03 — ФФД 1.1.Одной из главных проблем является путаница в кодах СНО. Выясним правильные значения параметров, которые ожидает драйвер Атол. Рассмотрим стандартные соответствия для передачи в параметре TaxVariant:
Важный момент: часто в устаревших инструкциях можно встретить значения степени двойки (1, 2, 4, 8, 16, 32), но для современных драйверов Атол и XML-пакетов 1С следует использовать именно порядковую нумерацию (0-5).
Многие разработчики используют компоненту-прокладку для формирования чека через 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-компонента часто жестко зашита на старые индексы, поэтому она передает неверный код в драйвер.
Чтобы полностью контролировать процесс печати и избежать проблем с 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 (что является обязательным требованием), необходимо учитывать новые обязательные реквизиты. Разберем, что нужно добавить в код при использовании обработки frATOL54_comm_105.ert:
Для прямой работы через драйвер ДТО 8/9 это выглядит так:
Драйвер.AttrNumber = 1212; // Признак предмета расчета
Драйвер.AttrValue = 1; // Товар
Драйвер.WriteAttribute();
Драйвер.AttrNumber = 1214; // Признак способа расчета
Драйвер.AttrValue = 4; // Полный расчет
Драйвер.WriteAttribute();
В Атол 30Ф часто возникает проблема «длинных чеков». Чтобы уменьшить расход бумаги, проанализируем настройки таблиц ККТ. Через «Тест драйвера» перейдите в параметры оборудования:
Подведем итог: если вы столкнулись с аннулированием чеков на Атол 30Ф в 1С 7.7, наиболее надежным решением будет отказ от XML-компонент в пользу прямой работы с объектом драйвера. Это позволит вам гибко управлять кодами налогов и передавать все необходимые теги ФФД 1.05, обеспечивая стабильную работу торговой точки.