Как исправить ошибку «Тип чека не поддерживается» при печати чеков в 1С:УПП

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При сопровождении крупных корпоративных систем на базе «1С:Предприятие» специалисты часто сталкиваются с непредвиденными сбоями торгового оборудования после плановых обновлений конфигураций. Типичный пример такой проблемы — внезапный отказ ККТ (например, АТОЛ-30Ф или других моделей АТОЛ) печатать чеки после обновления «1С:Управление производственным предприятием» (УПП) с релиза 1.3.134.1 на 1.3.137.2. Касса выдает критическую ошибку: «ERROR [1C] [48] Тип чека не поддерживается».

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

Глубокий технический анализ: почему ККТ возвращает ошибку 48

Для того чтобы понять природу ошибки, рассмотрим, как именно программа 1С передает данные на кассовый аппарат через БПО (Библиотеку подключаемого оборудования). Перед отправкой команды фискализации система собирает информацию о товарах, ценах, ставках НДС и типах оплаты во внутренний объект платформы — структуру или таблицу значений, которая называется ДанныеЧека.

Драйвер ККТ (в данном случае АТОЛ ДТО 10) работает по строгому стандарту интеграции 1С. Он не может напрямую прочитать внутренний объект платформы. Драйвер ожидает получить на вход текстовую XML-строку, содержащую все параметры чека. Для этого в общем модуле 1С выполняется сериализация структуры данных в формат XML, а результат помещается в переменную ПараметрыФискализации.ДанныеЧекаXML.

В ошибочном релизе УПП 1.3.137.2 разработчики допустили опечатку. При вызове метода драйвера ККТ СформироватьЧек вместо текстовой XML-строки была передана исходная несериализованная структура ДанныеЧека. Драйвер АТОЛ, получив неопределенный для него тип данных вместо XML-документа, не смог его обработать. Из-за отсутствия структуры тегов драйвер не обнаружил обязательных параметров (таких как тип чека, признак расчета и ставки налога) и вернул стандартную ошибку драйвера с кодом 48 — «Тип чека не поддерживается».

Официальный статус ошибки в баг-трекере 1С

Данная проблема носит массовый характер и официально зарегистрирована в базе ошибок фирмы 1С:

Если у вас есть возможность оперативно обновить конфигурацию до версии 1.3.138.1 или выше, это полностью решит проблему. Если же конфигурация сильно кастомизирована и быстрое обновление невозможно, разберем пошаговые варианты локального исправления.

Решение 1: Локальное исправление программного кода (Рекомендуемое)

Выясним причину ошибки на уровне исходного кода и устраним ее вручную через режим «Конфигуратор». Этот способ наиболее безопасен и эффективен, так как не затрагивает другие механизмы системы.

Выполним следующие шаги:

  1. Откройте базу 1С в режиме Конфигуратор.
  2. В дереве метаданных найдите и откройте общий модуль ПодключаемоеОборудованиеУниверсальныйДрайверКлиент.
  3. Найдите процедуру ФискализацияЧека (в стандартной конфигурации проблемный участок находится ориентировочно на строке 1608).
  4. Проанализируем проблемный код, который поставляется в релизе 1.3.137.2:

// Версия 1.3.137.2 (код с ошибкой)
Если ПараметрыФискализации.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1)
    Результат = ОбъектДрайвера.СформироватьЧек(ПараметрыПодключения.ИДУстройства, ПараметрыФискализации.Электронно, ДанныеЧека, ПараметрыФискализации.РезультатОперацииXML);
ИначеЕсли ПараметрыФискализации.РевизияИнтерфейса > 2001 Тогда // Версия стандарта 2.2 и выше (ОФД 1.0.5)
    Результат = ОбъектДрайвера.СформироватьЧек(ПараметрыПодключения.ИДУстройства, ПараметрыФискализации.Электронно, ДанныеЧека, ПараметрыФискализации.НомерЧекаККТ, ПараметрыФискализации.НомерСменыККТ, ПараметрыФискализации.ФискальныйПризнак, ПараметрыФискализации.АдресСайтаПроверки);
КонецЕсли;

Обратите внимание на третий параметр метода СформироватьЧек. В кодовой базе ошибочно передается локальная переменная ДанныеЧека.

Для исправления ошибки заменим этот параметр во всех ветках условий на корректную переменную, содержащую XML-строку. Измените код на следующий вариант:


// Исправленный вариант кода
Если ПараметрыФискализации.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1)
    Результат = ОбъектДрайвера.СформироватьЧек(ПараметрыПодключения.ИДУстройства, ПараметрыФискализации.Электронно, ПараметрыФискализации.ДанныеЧекаXML, ПараметрыФискализации.РезультатОперацииXML);
ИначеЕсли ПараметрыФискализации.РевизияИнтерфейса > 2001 Тогда // Версия стандарта 2.2 и выше (ОФД 1.0.5)
    Результат = ОбъектДрайвера.СформироватьЧек(ПараметрыПодключения.ИДУстройства, ПараметрыФискализации.Электронно, ПараметрыФискализации.ДанныеЧекаXML, ПараметрыФискализации.НомерЧекаККТ, ПараметрыФискализации.НомерСменыККТ, ПараметрыФискализации.ФискальныйПризнак, ПараметрыФискализации.АдресСайтаПроверки);
КонецЕсли;

Сохраните изменения в конфигурации базы данных (клавиша F7) и обновите конфигурацию базы данных. После этого перезапустите сеанс пользователя 1С и повторите попытку печати чека. Ошибка будет устранена.

Решение 2: Откат подсистемы торгового оборудования

Если вы не хотите вносить изменения в код вручную, можно откатить изменения подсистемы торгового оборудования до состояния стабильного релиза 1.3.134.1. Этот способ требует аккуратности при сравнении и объединении конфигураций.

Разберем по шагам, какие именно объекты необходимо вернуть к предыдущей версии:

  1. Выполните сравнение и объединение конфигурации с рабочим релизом 1.3.134.1.
  2. Снимите флажки со всех объектов, оставив только те, которые относятся к подсистеме торгового оборудования.
  3. Основной объект для отката — общий модуль ПодключаемоеОборудованиеУниверсальныйДрайверКлиент (в нем содержится процедура ФискализацияЧека).
  4. Также откатите изменения во внешней обработке обслуживания ATOLkkt (верните версию обработки, поставляемую с релизом 1.3.134.1).
  5. При необходимости откатите обработку ТОСервер, если по ней также зафиксированы расхождения при сравнении.

После завершения объединения сохраните изменения и проверьте работоспособность фискализации.

Другие возможные причины возникновения ошибки «Тип чека не поддерживается»

Рассмотрим ситуации, когда программный код в общем модуле исправлен и написан верно, но ККТ все равно возвращает ошибку с кодом 48. Выясним, какие еще факторы могут влиять на этот сбой:

  1. Пустой или некорректный тип оплаты (PaymentType): В структуре формируемого XML-пакета параметр типа оплаты может передаваться незаполненным или содержать код, который физически не поддерживается кассой или установленной в ней версией ФФД. Например, попытка передать тип оплаты «предоплата» или «постоплата» на старых прошивках ККТ, работающих только по ФФД 1.0.
  2. Несоответствие системы налогообложения (СНО): Если в параметрах чека из 1С передается код СНО (например, УСН патент), который не зарегистрирован при фискализации самого кассового аппарата, драйвер вернет ошибку несовместимости. Убедитесь, что настройки СНО в карточке организации в 1С совпадают с параметрами регистрации ККТ.
  3. Устаревшая прошивка ККТ или версия драйвера: При использовании новых стандартов БПО (например, ревизия интерфейса 3.0) ККТ должна работать под управлением актуальной версии внутреннего ПО (прошивки) и драйвера АТОЛ ДТО 10. Рекомендуется обновить драйвер до версии не ниже 10.6.3.0.
  4. Несовместимость ревизий интерфейса: В настройках подключения оборудования в 1С проверьте выбранную ревизию интерфейса драйвера (2.2 или 3.0). Если настройки 1С не соответствуют возможностям установленного ДТО, формируемый XML-пакет будет иметь некорректную структуру, что приведет к ошибке разбора на стороне ККТ.

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

← На главную