При работе с последними обновлениями конфигурации 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С, не снимая конфигурацию с поддержки. Нам необходимо доработать общий модуль ОборудованиеЧекопечатающиеУстройстваВызовСервера. Нас интересует процедура СформироватьXMLПакетДляФискализацияЧека.
Проанализируем фрагмент кода, где формируется значение переменной Получатель. В типовом решении это выглядит примерно так:
Получатель = Получатель + Символы.НПП + ПерсональныеДанные.ДанныеДокумента;
Чтобы победить ошибку, нам нужно обернуть результат в функцию СокрЛП(), которая удалит все пробелы и невидимые символы по краям строки. Создадим расширение и добавим в него указанный модуль. Используем аннотацию &Вместо.
Пример исправленного кода в расширении:
&Вместо("СформироватьXMLПакетДляФискализацияЧека")
Процедура ИСПР_СформироватьXMLПакетДляФискализацияЧека(ПараметрыЧека, ТаблицаТоваров, ТаблицаОплат, ОбщиеПараметры, Результат)
// Вызываем оригинальную логику или полностью замещаем её.
// В данном случае эффективнее найти место формирования строки Получатель.
// ... здесь идет типовой код формирования структуры XML ...
// Ключевое исправление:
Если ЗначениеЗаполнено(ПерсональныеДанные.ДанныеДокумента) Тогда
Получатель = СокрЛП(Получатель + Символы.НПП + ПерсональныеДанные.ДанныеДокумента);
Иначе
Получатель = СокрЛП(Получатель);
КонецЕсли;
// Далее передаем очищенное значение в структуру XML
// ...
КонецПроцедуры
Применяя СокрЛП, мы гарантируем, что в тег 1227 не попадут лишние символы, которые «сводят с ума» драйвер АТОЛ.
Рассмотрим еще одну ситуацию, упомянутую в обсуждении. Иногда ошибка «Неверное значение параметра» возникает из-за тега 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 в современных драйверах АТОЛ. Использование функции СокрЛП() в расширении полностью решает эту проблему, обеспечивая корректную передачу данных в ККТ.