Рассмотрим распространенную проблему, с которой столкнулись многие пользователи конфигурации 1С:Розница после обновления на релиз 2.3.22.35. Суть проблемы заключается в том, что при печати фискального чека одинаковые товары (особенно алкогольная продукция и товары с маркировкой) перестали объединяться в одну строку, даже если в настройках РМК (Рабочего места кассира) установлен соответствующий флаг. Вместо аккуратной записи «Товар А — 5 шт.», мы получаем «километровые» чеки, где каждая единица товара выводится отдельной строкой.
Разберем детально причины такого поведения программы, проанализируем настройки драйвера торгового оборудования и выясним, как вернуть компактный вид чеков.
Давайте сначала убедимся, что мы говорим об одной и той же ситуации. Проблема выглядит следующим образом:
Многие администраторы первым делом обращаются к настройкам драйвера ККТ (например, Атол или Штрих-М). Однако стоит учитывать, что в данной версии системы принудительное дробление строк часто приводит к тому, что буфер чека переполняется после включения разрешительного режима, особенно на аппаратах ШТРИХ-М, из-за избытка передаваемой информации в каждой строке.
В драйверах кассовых аппаратов действительно существуют настройки, отвечающие за схлопывание позиций. Например, в драйвере Атол есть опция объединения позиций с одинаковым наименованием и ценой.
Однако драйвер может объединить позиции только в том случае, если учетная система (в нашем случае 1С:Розница) передает их как идентичные сущности или же передает одну позицию с количеством больше единицы. В ситуации с релизом 2.3.22.35 программа 1С намеренно дробит строки до отправки команды на драйвер. То есть, 1С посылает на кассу не команду «Напечатать: Водка, 5 шт», а последовательность команд:
Для драйвера ККТ это абсолютно разные операции, так как каждая строка содержит уникальный код маркировки. Физически объединить эти строки касса не может, так как получает их раздельно.
Проанализируем, почему разработчики изменили поведение системы. Корень проблемы кроется во внедрении Разрешительного режима работы с маркированным товаром. В новых версиях конфигурации кассовая программа должна в момент оформления продажи использовать рабочий механизм проверки разрешительного режима через площадки CDN и получать ответ о статусе товара от системы «Честный ЗНАК».
Чтобы этот процесс проходил без сбоев, крайне важно настроить автоматическое обновление токенов ИС МП, так как без актуальной авторизации проверка марок в РМК станет невозможной. Алгоритмы 1С были изменены так, чтобы каждая марка шла отдельной строкой для обеспечения жесткой привязки статуса проверки к конкретной единице товара. Это гарантирует, что если одна из пяти бутылок не пройдет проверку, касса сможет корректно обработать отказ именно по ней.
К сожалению, в релизе 2.3.22.35 реализация этого механизма привела к игнорированию настройки «Объединять позиции» для маркируемых товаров, даже если проверка прошла успешно для всех единиц.
Разберем способы, как можно исправить ситуацию и сократить расход чековой ленты.
Фирма 1С оптимизировала механизм печати в последующих релизах (ветка 2.3.23.х и новее). Разработчики нашли баланс между требованием передавать уникальные коды маркировки и визуальным объединением строк.
Если обновление невозможно, решением остается использование внешнего расширения. В сообществе популярны решения, которые позволяют скорректировать логику работы РМК.
Суть работы такого расширения для исправления «длинных чеков» заключается в перехвате данных перед их отправкой на печать:
Если вы планируете писать исправление самостоятельно, обратите внимание на Общие модули, связанные с формированием XML-пакета для ККТ. Вам необходимо найти место, где формируется массив строк ПозицииЧека.
Примерная логика исправления в коде (псевдокод):
// Вместо стандартного добавления строк, перебираем таблицу
Для Каждого СтрокаТовара Из ТаблицаТоваров Цикл
НайденнаяСтрока = НайтиВМассивеВывода(СтрокаТовара);
Если НайденнаяСтрока <> Неопределено И МожноОбъединять(СтрокаТовара) Тогда
// Увеличиваем количество и сумму
НайденнаяСтрока.Количество = НайденнаяСтрока.Количество + СтрокаТовара.Количество;
НайденнаяСтрока.Сумма = НайденнаяСтрока.Сумма + СтрокаТовара.Сумма;
// Добавляем код маркировки в массив марок этой строки
ДобавитьМаркуВМассив(НайденнаяСтрока, СтрокаТовара.Марка);
Иначе
НоваяСтрока = СоздатьСтрокуЧека(СтрокаТовара);
МассивВывода.Добавить(НоваяСтрока);
КонецЕсли;
КонецЦикла;
Проблема «километровых чеков» в 1С:Розница 2.3.22.35 — это особенность реализации требований маркировки. Наиболее правильным способом решения является обновление конфигурации до актуальных версий. Если это невозможно, используйте специализированные расширения, внимательно следя за соблюдением формата передачи данных в ОФД.