Почему чек ККМ в 1С не пробивается с ошибкой «Не поддерживается в данной версии»?

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

Рассмотрим ситуацию, с которой можно столкнуться при переходе со старых версий 1С (например, 7.7) на современные конфигурации, такие как 1С:Комплексная автоматизация 2.5. Проблема проявляется неожиданно: обычный чек на кассе АТОЛ вдруг перестает пробиваться, если в нем присутствует одна конкретная товарная позиция. При этом кассовый аппарат возвращает ошибку с кодом 11 и текстом «Не поддерживается в данной версии». Самое интересное, что товар не является маркированным, в чеке нет скидок или сложных условий оплаты. Разберемся, в чем может быть причина и как это исправить.

Выясняем причину: анализ логов и данных

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

Ключевую подсказку дает лог драйвера ККМ. В нем можно обнаружить попытку передать на кассу параметр LIBFPTR_PARAM_MARKING_CODE, который отвечает за код маркировки. Это очень странно, ведь мы точно знаем, что товар не подлежит маркировке и никаких кодов не используется.

Чтобы понять, откуда берется этот параметр, посмотрим на XML-пакет, который 1С формирует для отправки на драйвер кассы. Для проблемной позиции он может выглядеть примерно так:


<Positions>
    <FiscalString Name="Тумба 111" Quantity="1" PriceWithDiscount="14605" ...>
        <GoodCodeData EAN13="NDY1NzgyMTAzMDE2NQ=="/>
        <AgentData/>
        <VendorData/>
        <IndustryAttribute/>
    </FiscalString>
</Positions>

Здесь наше внимание привлекает тег <GoodCodeData EAN13="NDY1NzgyMTAzMDE2NQ=="/>. Значение "NDY1NzgyMTAzMDE2NQ==" — это не обычный штрихкод EAN-13, а строка, закодированная в формате Base64. Именно в ней и кроется корень проблемы.

Корень проблемы: некорректный штрихкод и Base64

Давайте разберем по шагам, как безобидная, на первый взгляд, запись о штрихкоде приводит к ошибке на кассе.

  1. Некорректный штрихкод в базе. В регистре сведений ШтрихкодыНоменклатуры для нашей проблемной номенклатуры была сохранена запись со штрихкодом, который не соответствует стандарту EAN-13. Такое часто случается при переносе данных из старых систем, где не было строгой валидации форматов. В нашем примере, если декодировать строку "NDY1NzgyMTAzMDE2NQ==" из Base64, мы получим "4657821030165".
  2. Автоматическое добавление в чек. Современные конфигурации 1С при формировании чека автоматически ищут штрихкод для каждой товарной позиции и добавляют его в данные для ККМ. Это сделано для соответствия требованиям законодательства и корректной передачи данных о товаре. Система находит наш "кривой" штрихкод и включает его в XML-пакет, предварительно закодировав в Base64.
  3. Неверная интерпретация драйвером. Интеграционный компонент (специальная "прослойка" между 1С и драйвером АТОЛ) получает эти данные. Он анализирует содержимое тега GoodCodeData, видит, что полученное значение не является стандартным штрихкодом EAN-13, и делает неверный вывод: он решает, что это некий "код товара", полученный от сканера, и классифицирует его как код маркировки.
  4. Ошибка на кассе. Драйвер отправляет на кассу команду регистрации товарной позиции, передавая в ней тот самый код маркировки. Прошивка ККМ (особенно если она устаревшая, например, на платформе 2.5) не готова к приему таких данных или не поддерживает данный формат. В результате касса прерывает операцию и возвращает ошибку «Не поддерживается в данной версии».

Таким образом, проблема не в кассе и не в конфигурации 1С как таковой, а в некорректных исходных данных, которые запускают целую цепочку неверных интерпретаций.

Пошаговое решение проблемы

Теперь, когда мы понимаем причину, исправить ошибку достаточно просто. Выполним следующие действия:

  1. Найдите проблемную номенклатуру. В исходной ситуации это было сделано опытным путем — поочередным удалением позиций из чека.
  2. Откройте карточку номенклатуры. Перейдите к списку штрихкодов этого товара. Обычно это можно сделать по ссылке "Штрихкоды" на панели навигации в карточке. Также можно открыть напрямую регистр сведений ШтрихкодыНоменклатуры и установить отбор по проблемному товару.
  3. Найдите и исправьте некорректный штрихкод. Внимательно просмотрите список штрихкодов. Вы увидите запись, которая не соответствует стандартному формату (например, имеет неверную длину или содержит буквы). В нашем случае это был штрихкод "4657821030165".
  4. Удалите или замените штрихкод. Самый простой способ — удалить эту запись. Если штрихкод все же нужен для учета, то сгенерируйте новый, корректный, с помощью стандартной функции 1С или введите правильный заводской штрихкод.
  5. Проверьте результат. Попробуйте снова пробить чек с этой позицией. Поскольку система больше не найдет некорректный штрихкод, она не будет отправлять в ККМ лишние данные, и чек успешно напечатается.

Как избежать подобных проблем в будущем

Данная ситуация — хороший урок, который помогает понять важность чистоты данных и своевременного обновления ПО. Чтобы минимизировать риски в будущем, рассмотрим несколько рекомендаций.

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

← На главную