Как настроить онлайн-кассы по 54-ФЗ в 1С и устранить частые ошибки подключения, печати чеков и блокировки портов?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Торговля и дистрибуция
← На главную

Переход на применение контрольно-кассовой техники по правилам Федерального закона № 54-ФЗ полностью изменил принципы взаимодействия учетных программ 1С с фискальными регистраторами. Вместо накопителя ЭКЛЗ в кассах используется фискальный накопитель (ФН), а фискальные документы передаются оператору фискальных данных (ОФД). Разберем типовые технические сложности, возникающие при внедрении онлайн-касс в 1С, и способы их решения.

Архитектура взаимодействия ККТ, ФН и 1С

Проанализируем базовый принцип работы оборудования. В современных кассовых аппаратах (например, линейки АТОЛ или ШТРИХ-М) связь с компьютером и ОФД разделена логически или физически:

  1. При подключении по USB создается составное устройство с двумя виртуальными COM-портами: один порт используется для команд управления из 1С, второй — выделен для обмена ФН с сервером ОФД через службу передачи данных (например, EthernetOverUSB / EoU у АТОЛ).
  2. Фискальный накопитель подписывает каждый чек криптографическим признаком и накапливает данные во внутренней памяти. При отсутствии соединения с интернетом касса способна работать автономно до 30 дней. По истечении этого срока, если накопитель не получит подтверждений от ОФД о доставке чеков, фискализация новых документов блокируется.
  3. Для первичной регистрации кассы в ФНС и ОФД требуется усиленная квалифицированная электронная подпись (КЭП). Однако для повседневной печати чеков из 1С токен электронной подписи на рабочем месте кассира не нужен: подпись чеков выполняется аппаратно внутри самого ФН.

Устранение ошибки «Порт занят» при работе в терминальном режиме (RDP)

Классическая проблема возникает при многопользовательской работе в распределенных терминальных сессиях. В типовых конфигурациях (Управление торговлей, Комплексная автоматизация, ERP, УПП) обращение к торговому оборудованию часто инициируется при открытии списков документов (например, журнала ПКО или РКО). Если кассир уже захватил виртуальный COM-порт, все остальные терминальные пользователи при открытии форм зависают и получают ошибку блокировки порта.

Разберем по шагам, как локализовать и устранить эту проблему:

  1. Ограничение инициализации оборудования по роли пользователя. Не следует подключать торговое оборудование всем пользователям базы без исключения. В процедурах открытия форм документов делаем проверку, является ли текущий пользователь реальным кассиром:

Если глЗначениеПеременной("глТекущийПользователь").Кассир Тогда
    ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма);
КонецЕсли;
  1. Принудительное отключение оборудования после фискализации. Для освобождения порта сразу после выхода бумажного чека вызываем процедуру отключения устройства:
    
    ОповещениеПриОтключении = Новый ОписаниеОповещения("ОтключитьОборудованиеЗавершениеПоУмолчанию", МенеджерОборудованияКлиент);
    МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПоТипу(ОповещениеПриОтключении, 
        ЭтаФорма.УникальныйИдентификатор, МенеджерОборудованияКлиент.ПреобразоватьСписокСтрокойВМассив("ККТ"));
    
  2. Перевод ККТ на прямое сетевое подключение. Наиболее надежный способ исключить конфликт портов — подключить кассу к локальной сети отдельным кабелем Ethernet или перевести кассовый интерфейс на протокол RNDIS. При сетевом обмене драйвер подключается к ККТ по IP-адресу только на время отправки чека и не блокирует локальные порты компьютера.

Ошибка «FFFF8h No XML attribute TaxVariant»: настройка систем налогообложения

При переходе на работу через библиотеку подключаемого оборудования (БПО) данные чека передаются в драйвер в виде XML-пакета CheckPackage. Ошибка No XML attribute TaxVariant означает, что в заголовке чека не передан обязательный реквизит применяемой системы налогообложения (СНО).

В XML-структуре атрибут TaxVariant должен соответствовать одной из разрешенных систем:

  1. OSN — общая система налогообложения;
  2. USN_Income — упрощенная СНО (доходы);
  3. USN_Income_Outcome — упрощенная СНО (доходы минус расходы);
  4. ENVD — единый налог на вмененный доход;
  5. ESN — единый сельскохозяйственный налог;
  6. Patent — патентная система.

Если в организации настроено совмещение режимов (например, УСН и ЕНВД), нельзя пробивать товары разных систем в одном чеке. В документе обязательно должен формироваться отдельный пакет фискализации с указанием конкретного кода СНО в атрибуте TaxVariant.

Различие ставок НДС: «Без НДС» и «0%»

Согласно требованиям 1С к разработке драйверов ККТ версии 2.1 и выше, параметры налогообложения позиций чека являются строковыми, а не числовыми. Распространенная ошибка — подменять ставку «Без НДС» нулевой ставкой «0%».

В XML-описании позиций Positions необходимо строго разграничивать:

  1. Для товаров, освобожденных от налогообложения (или при работе на спецрежимах УСН/ЕНВД/Патент), в тег ставки НДС передается строка none. В таблице ставок драйвера кассы это соответствует признаку «Без налога / Без НДС».
  2. Значение 0 (или строка "0") передается исключительно для операций, облагаемых по реальной ставке НДС 0% (например, при экспорте). Использование ставки 0% вместо «Без НДС» приводит к ошибкам в отчетах налоговой службы.

Программный контроль превышения 24-часовой смены через драйвер

По правилам применения ККТ смена на кассе не может длиться более 24 часов. Если смена превышена, фискальный регистратор блокирует печать новых чеков до снятия Z-отчета (закрытия смены). В самописных модулях или интеграциях для 1С:Предприятия 7.7 и 8.x можно заблаговременно проверить этот признак через свойства драйвера:


ККМ = СоздатьОбъект("AddIn.FPrnM45");
ККМ.CurrentDeviceIndex = 0;    
ККМ.DeviceEnabled = 1;
ККМ.Mode = 1;
ККМ.SetMode();
ККМ.RegisterNumber = 18;
СменаОткрыта = ККМ.SessionOpened;

Если СменаОткрыта = -1 Тогда
    ЕстьОграничение24 = ККМ.SessionExceedLimit;
    Если ЕстьОграничение24 = -1 Тогда
        Сообщить("Время смены превышено! Необходимо выполнить закрытие смены.");
    КонецЕсли;
КонецЕсли;

Свойства регистров Year, Month, Day, Hour, Minute, Second позволяют получить точное время наступления лимита продолжительности смены и уведомить пользователя до начала пробития длинного чека.

Печать номенклатурного состава из ПКО и распределение скидок

По закону чек должен содержать построчную расшифровку номенклатуры, количество, цену и итоговую сумму с учетом скидок. Рассмотрим, как это реализовано в учетных решениях:

  1. Печать чека из документов расчетов (ПКО / Поступление на расчетный счет). В типовых решениях (например, в 1С:Бухгалтерии 3.0) для формирования потоварного чека из кассового ордера документ обязательно должен быть привязан к конкретному документу основания (счету на оплату), причем сумма платежа должна в точности соответствовать сумме заказа. Без указания счета на оплату касса не сможет разложить платеж на позиции и пробьет чек только на общую сумму.
  2. Распределение общих скидок на чек. Новый формат фискальных данных запрещает передавать общую скидку на весь чек одной финальной строкой. Вся скидка должна быть распределена по строкам номенклатуры. При передаче структуры чека через XML драйвер производит построчный пересчет: если сумма со скидкой не делится нацело на количество, типовые механизмы БПО автоматически разбивают строку товара на две части (по разным ценам, отличающимся на одну копейку), чтобы математический итог по строкам совпал с итогом чека до копейки.
  3. Вставка произвольных строк. Если в чеке необходимо напечатать служебные данные (например, код товара, адрес доставки или гарантийный номер), внутри секции Positions разрешено передавать тег TextString с произвольным текстом. Этот текст выводится на кассовую ленту между строками товаров, не нарушая фискальную целостность пакета данных.

Важное предостережение при фискализации кассы

Перед проведением процедуры фискализации или перерегистрации фискального накопителя через утилиту производителя обязательно синхронизируйте системное время компьютера с точным интернет-временем. Фискальный накопитель содержит жесткую аппаратную защиту от расхождения дат. Если дата на компьютере окажется установлена вперед (даже на один день), и в накопитель запишется фискальный документ будущим числом, касса заблокируется с ошибкой неверной даты. Восстановить работу накопителя можно будет только после фактического наступления этой даты либо путем дорогостоящей замены испорченного ФН.

← На главную