Как исправить ошибку «Чек аннулирован» при печати чека для ИП в 1С:Бухгалтерия 3.0 на кассах АТОЛ

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

При работе с последними обновлениями конфигурации 1С:Бухгалтерия предприятия 3.0 (начиная с релиза 3.0.106.101 и выше) многие пользователи столкнулись с неприятной ситуацией. При попытке пробить чек из документа «Поступление наличных», созданного на основании счета, кассовый аппарат АТОЛ выдает ошибку «Чек аннулирован». Примечательно, что проблема проявляется избирательно: чеки для организаций (ООО) печатаются корректно, а при попытке пробить чек для индивидуального предпринимателя (ИП) возникает программный сбой.

В этой статье мы подробно разберем, почему это происходит, проанализируем логи драйвера ККТ и внедрим техническое решение, которое позволит восстановить работоспособность кассового узла без нарушения требований законодательства.

Анализ проблемы: почему касса «спотыкается» на ИП?

Для начала проанализируем ситуацию. Если мы заглянем в логи драйвера АТОЛ (обычно они находятся в папке пользователя в AppData\Roaming\Atol\drivers10), мы увидим следующую последовательность событий:


2022.01.26 10:28:50.362 INFO [FiscalPrinter] > 1055 (1055) = 1
2022.01.26 10:28:50.363 INFO [FiscalPrinter] > 1227 (1227) = "ИП Лер Е.А. "
2022.01.26 10:28:50.363 INFO [FiscalPrinter] > 1228 (1228) = "480802429727"
...
2022.01.26 10:28:51.850 ERROR [FiscalPrinter] Объекту присвоен код ошибки 26 [Неверный формат команды]

Обратим внимание на тег 1227 (Наименование покупателя). В логах отчетливо видно, что после фамилии и инициалов ИП стоит лишний пробел. Современные драйверы АТОЛ (версии 10.9 и выше) и прошивки ККТ на платформе 5.0 под требования ФФД 1.2 стали крайне чувствительны к лишним символам и невидимым знакам в обязательных тегах.

Выясним причину появления этого пробела. В типовом коде 1С формирование строки покупателя происходит динамически. Если в карточке контрагента (ИП) не заполнены паспортные данные, система все равно пытается добавить разделитель (неразрывный пробел Символы.НПП) между ФИО и персональными данными. В результате получается строка вида «ИП Иванов И.И.  », где в конце болтается невидимый символ. ККТ воспринимает это как нарушение формата тега и аннулирует чек.

Варианты решения проблемы

Рассмотрим несколько способов устранения ошибки, от «быстрых» до профессиональных.

  1. Заполнение данных: Можно попробовать заполнить паспортные данные в карточке контрагента. Однако это трудозатратно и не всегда удобно, если у вас сотни клиентов-ИП.
  2. Удаление ИНН: Некоторые пользователи советуют удалить ИНН из карточки, чтобы чек пробился как на обычное физлицо. Внимание! Это нарушение 54-ФЗ. При расчетах между организациями и ИП наличие тегов 1227 (наименование) и 1228 (ИНН покупателя) обязательно.
  3. Программное исправление: Использование расширения для очистки строки покупателя от лишних пробелов. Это самый надежный и правильный путь.

Техническая реализация исправления через расширение

Разберем по шагам, как внести правки в код 1С, не снимая конфигурацию с поддержки. Нам необходимо доработать общий модуль ОборудованиеЧекопечатающиеУстройстваВызовСервера. Нас интересует процедура СформироватьXMLПакетДляФискализацияЧека.

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

Получатель = Получатель + Символы.НПП + ПерсональныеДанные.ДанныеДокумента;

Чтобы победить ошибку, нам нужно обернуть результат в функцию СокрЛП(), которая удалит все пробелы и невидимые символы по краям строки. Создадим расширение и добавим в него указанный модуль. Используем аннотацию &Вместо.

Пример исправленного кода в расширении:


&Вместо("СформироватьXMLПакетДляФискализацияЧека")
Процедура ИСПР_СформироватьXMLПакетДляФискализацияЧека(ПараметрыЧека, ТаблицаТоваров, ТаблицаОплат, ОбщиеПараметры, Результат)
    
    // Вызываем оригинальную логику или полностью замещаем её. 
    // В данном случае эффективнее найти место формирования строки Получатель.
    
    // ... здесь идет типовой код формирования структуры XML ...
    
    // Ключевое исправление:
    Если ЗначениеЗаполнено(ПерсональныеДанные.ДанныеДокумента) Тогда
        Получатель = СокрЛП(Получатель + Символы.НПП + ПерсональныеДанные.ДанныеДокумента);
    Иначе
        Получатель = СокрЛП(Получатель);
    КонецЕсли;

    // Далее передаем очищенное значение в структуру XML
    // ...
КонецПроцедуры

Применяя СокрЛП, мы гарантируем, что в тег 1227 не попадут лишние символы, которые «сводят с ума» драйвер АТОЛ.

Проблема тега 1230 (Код страны происхождения)

Рассмотрим еще одну ситуацию, упомянутую в обсуждении. Иногда ошибка «Неверное значение параметра» возникает из-за тега 1230. В логах это выглядит так:


2022.03.30 17:31:21.091 INFO [FiscalPrinter] > 1230 (1230) = "NL"
2022.03.30 16:37:28.325 ERROR [FiscalPrinter] Объекту присвоен код ошибки 26 [Неверное значение параметра]

Выясним причину. Согласно требованиям ФФД 1.2, тег 1230 должен содержать цифровой код страны (3 знака) согласно классификатору ОКСМ. Если 1С передает буквенный код (например, «NL» вместо «528» для Нидерландов или «RU» вместо «643» для России), новые прошивки ККТ платформы 5.0 (например, версия 5.8.1) блокируют печать.

Как исправить:

  1. Проверьте справочник «Страны мира» в вашей базе 1С. Убедитесь, что для используемых стран заполнены трехзначные цифровые коды.
  2. Если коды заполнены, но 1С все равно передает буквы, потребуется аналогичная правка в расширении в процедуре формирования XML-пакета, чтобы в структуру записывался именно Код страны, а не её краткое наименование.

Рекомендации по обновлению и патчам

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

  1. Перейдите в раздел Администрирование — Обслуживание — Обновление программы — Установленные исправления (патчи).
  2. Нажмите «Поиск исправий». Если ваша конфигурация находится на поддержке и включена интернет-поддержка, система предложит патч, исправляющий формирование тега 1227.
  3. Если патча нет, обновите конфигурацию до самого актуального релиза (выше 3.0.108), где эта ошибка уже исправлена в типовом решении.

Резюме: Основная причина аннулирования чеков для ИП — избыточный неразрывный пробел в конце наименования покупателя, который конфликтует с жесткими правилами ФФД 1.2 в современных драйверах АТОЛ. Использование функции СокрЛП() в расширении полностью решает эту проблему, обеспечивая корректную передачу данных в ККТ.

← На главную