При интеграции современных онлайн-касс, таких как Атол 30Ф, с устаревшими конфигурациями на базе обычных форм (например, УТ 10.3), специалисты часто сталкиваются с двумя критическими проблемами: невозможностью установить связь с устройством из-за «занятого порта» и некорректным отображением налоговых ставок в чеке (печать «НДС 0%» вместо «Без НДС»). Разберем подробно, как решить эти задачи, проанализируем технические нюансы работы драйверов и приведем примеры необходимых правок в коде 1С.
Современные кассы Атол при подключении через USB используют технологию EthernetOverUsb (EoU). Это позволяет кассе одновременно обмениваться данными с учётной системой и передавать пробитые чеки оператору фискальных данных (ОФД). Для реализации этого механизма драйвер создает в операционной системе не один, а два виртуальных COM-порта.
Рассмотрим типовую ситуацию: в диспетчере устройств Windows появляются, например, COM3 и COM4. Проблема заключается в том, что один из этих портов жестко зарезервирован службой EthOverUsb для передачи данных в интернет. Если 1С пытается достучаться до кассы именно через этот «занятый» порт, возникает ошибка. Если же выбрана неверная скорость или порт, который не активен, мы получаем сообщение «Нет связи».
Для решения проблемы выполним следующие шаги:
EthOverUsb. На время настройки в 1С её можно остановить, чтобы убедиться, что она не блокирует нужный нам канал связи.COM3, то для обмена с ОФД в настройках службы EoU должен быть указан COM4. Они не должны совпадать.Как показывает практика, после полной перезагрузки в 1С:УТ 10.3 следует выбрать тот порт, который в Тесте драйвера определялся как рабочий, и связь будет установлена. Если ошибка «Порт занят» сохраняется в 1С, но в драйвере всё работает — значит, в самой 1С открыто несколько сеансов или форма настройки торгового оборудования блокирует сама себя.
Вторая распространенная проблема — когда при использовании системы налогообложения ЕНВД или Патент в чеке печатается «НДС 0%» вместо положенного «Без НДС». С точки зрения налогового законодательства это разные понятия, и ошибка может привести к штрафам.
Выясним причину: 1С:УТ 10.3 передает ставку налога в драйвер в виде числа или индекса. В старых обработках обслуживания часто зашита логика, где значение 0 интерпретируется кассой как ставка 0%. Для передачи признака «Без НДС» в протоколе Атол (особенно для ФФД 1.05) требуется передавать специфический тег или индекс налога, установленный в таблицах ККТ.
Для исправления ситуации нам потребуется внести изменения в код обработки обслуживания или в общий модуль конфигурации. Разберем, как подготовить данные для фискализации.
Найдем в конфигураторе модуль, отвечающий за формирование XML-пакета для кассы. Обычно это функция ПодготовитьДанныеДляФискализацииЧека в обработке ATOL_KKT_10 или аналогичной. Нам нужно проанализировать, какая ставка НДС уходит в структуру СтрокаЧека.
Посмотрим на пример логики, которую необходимо внедрить для корректной передачи ставки «Без НДС»:
// В цикле обхода строк чека проверяем ставку
СтавкаНДС = ТекущаяСтрока.СтавкаНДС;
Если СтавкаНДС = Перечисления.СтавкиНДС.НДС0 Тогда
// Это именно ставка 0%
ДанныеСтроки.Вставить("TaxRate", "v0");
ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.БезНДС Тогда
// Для Атола признак "Без НДС" часто передается как "none"
// или соответствующий индекс из таблиц (например, 6)
ДанныеСтроки.Вставить("TaxRate", "none");
КонецЕсли;
Если ваша конфигурация использует старый механизм (через передачу номера налоговой секции), необходимо проверить настройки в самом драйвере Атол. Проанализируем таблицы налога в кассе: зайдем в Тест драйвера — Свойства — Параметры ККТ — Налоги. Посмотрим, под каким номером значится «Без НДС». Обычно это индекс 4 или 6. Убедимся, что в коде 1С передается именно этот номер.
Проанализируем функцию получения ставки в модуле ОбщегоНазначения или МенеджерОборудования. Часто там используется метод ПолучитьСтавкуНДСЧислом. Если товар продается без НДС, метод возвращает 0. Нам нужно перехватить это значение и преобразовать его в текстовую константу, которую ожидает драйвер.
Функция ПолучитьСтавкуНДСДляАтол(СтавкаПеречисление) Экспорт
Если СтавкаПеречисление = Перечисления.СтавкиНДС.БезНДС Тогда
Возврат "none"; // Специальное значение для драйвера Атол 10.х
ИначеЕсли СтавкаПеречисление = Перечисления.СтавкиНДС.НДС0 Тогда
Возврат "0";
ИначеЕсли СтавкаПеречисление = Перечисления.СтавкиНДС.НДС10 Тогда
Возврат "10";
Иначе
Возврат "20";
КонецЕсли;
КонецФункции
Иногда связь с кассой пропадает не сразу, а через некоторое время. Это связано с агрессивным энергосбережением Windows 10. Разберем, как это предотвратить:
Это гарантирует, что виртуальные COM-порты не «уснут» в процессе работы, и 1С не потеряет связь с Атол 30Ф в самый ответственный момент при пробитии чека.
Подведем итог: для стабильной работы Атол 30Ф в УТ 10.3 необходимо четко разделить порты между службой EoU и самой 1С, использовать актуальные обработки обслуживания и при необходимости точечно подправить логику формирования XML в коде, чтобы ставка налога соответствовала требованиям ФНС. Совместная работа программных настроек 1С и параметров драйвера позволит эксплуатировать старую конфигурацию с новым торговым оборудованием без сбоев.