Почему в 1С:Розница 2.3 не объединяются строки в документе Чек ККМ и как это исправить?

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

Многие пользователи, перешедшие на актуальные релизы конфигурации 1С:Розница 2.3 (особенно с версии 2.2), столкнулись с неприятной особенностью: при сканировании одного и того же товара несколько раз подряд в документе «Чек» каждая единица добавляется новой строкой. При этом в интерфейсе РМК (Рабочее место кассира) всё может работать корректно, если установлена соответствующая галочка. Давайте вместе разберем, почему так происходит, рассмотрим технические причины этого поведения и выясним, какие существуют способы решения данной проблемы.

Анализируем разницу между РМК и формой документа

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

  1. Интерфейс РМК — это специализированная обработка, оптимизированная для быстрой работы кассира. В ней предусмотрены специфические настройки, такие как «Объединять одинаковые позиции». Эта настройка находится в разделе Администрирование — Продажи — Настройки РМК.
  2. Документ «Чек ККМ» — это стандартный объект метаданных (документ). Когда вы открываете его напрямую через список чеков, вы работаете с формой самого документа, а не с интерфейсом кассира.

Проанализируем ситуацию: настройки, которые мы задаем для РМК, жестко привязаны именно к этой обработке. Разработчики 1С не переносили логику «схлопывания» строк в форму самого документа «Чек», так как он считается скорее административным инструментом для корректировок, а не основным местом работы продавца.

Влияние обязательной маркировки товаров

Одной из главных причин изменения логики программы в ветках 2.3.10 и выше стало внедрение системы Честный Знак. Рассмотрим, как это работает изнутри. При продаже маркированного товара (например, табака, обуви или парфюмерии) каждая единица продукции имеет уникальный код DataMatrix. Согласно требованиям законодательства, в электронном и бумажном чеке каждая такая единица должна быть отражена отдельно, чтобы система могла корректно списать конкретный код маркировки.

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

Разбор механизма обработки штрихкода

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


// Упрощенный пример логики добавления строки
Процедура ОбработкаШтрихкода(ДанныеШтрихкода)
    Товар = НайтиТоварПоШтрихкоду(ДанныеШтрихкода);
    Если Товар <> Неопределено Тогда
        НоваяСтрока = Объект.Товары.Добавить();
        ЗаполнитьЗначенияСвойств(НоваяСтрока, Товар);
        НоваяСтрока.Количество = 1;
    КонецЕсли;
КонецПроцедуры

Как мы видим, здесь отсутствует цикл обхода текущей табличной части для поиска дублей. В старых версиях (2.2) программа сначала выполняла поиск Объект.Товары.Найти(Товар, "Номенклатура"), и если строка находилась, увеличивала значение в колонке Количество. В текущих релизах этот шаг пропущен ради универсальности кода для всех типов товаров.

Вариант решения 1: Использование расширения (даже в базовой версии)

Если для вашего бизнес-процесса критически важно сканировать товары именно в форму документа (а не в РМК), единственным надежным способом будет использование расширения конфигурации. Рассмотрим, как это реализовать.

Существует миф, что в базовых версиях 1С расширения не работают. На самом деле, начиная с платформы 8.3.14, базовые версии поддерживают работу с расширениями, если они не изменяют структуру данных (не добавляют новые реквизиты, справочники или документы). Изменение программного кода обработки штрихкода — это как раз тот случай, который допустим в базовой версии.

Программисту необходимо перехватить процедуру добавления номенклатуры и добавить туда проверку:


&После("ОбработатьШтрихкоды")
Процедура Ист_ОбработатьШтрихкоды(ДанныеШтрихкода)
    // Логика поиска существующей строки в документе
    Для Каждого СтрокаТЧ Из Объект.Товары Цикл
        Если СтрокаТЧ.Номенклатура = ТекущийТовар 
             И СтрокаТЧ.Характеристика = ТекущаяХарактеристика 
             И НЕ ТекущийТовар.Маркируемый Тогда
             
             СтрокаТЧ.Количество = СтрокаТЧ.Количество + 1;
             Возврат; // Прекращаем выполнение, так как строка найдена и обновлена
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Важный момент: при написании такого расширения обязательно нужно добавить проверку на маркировку товара. Если товар подлежит обязательному учету в ИС МП, объединять строки категорически нельзя.

Вариант решения 2: Настройка торгового оборудования

Проанализируем работу самого сканера. Часто проблема кроется в режиме его подключения:

  1. Режим эмуляции клавиатуры: Сканер просто «печатает» символы и посылает сигнал Enter. В этом случае 1С воспринимает это как ввод с клавиатуры, и логика «умного» добавления товара может не срабатывать.
  2. Режим COM-порта (RS-232): Программа четко понимает, что данные пришли от сканера. Это позволяет системе задействовать более сложные алгоритмы обработки внешнего события.

Попробуем перевести сканер в режим эмуляции COM-порта (через настроечные штрихкоды из инструкции к сканеру) и перенастроить его в разделе Подключаемое оборудование. Это может заставить форму документа вести себя более корректно при обработке событий.

Вариант решения 3: Работа через клавишу F7

Выясним еще одну хитрость. В некоторых сборках «Розницы» алгоритм добавления отличается, если вызвать окно поиска штрихкода вручную. Попробуем нажать клавишу F7 в открытом чеке и считать код. В ряде случаев форма поиска, в отличие от прямого сканирования в таблицу, имеет встроенный механизм поиска дублей перед добавлением новой строки.

Почему 1С не спешит возвращать старую логику?

Рассмотрим позицию разработчиков. Основной вектор развития 1С — это поэкземплярный учет. Даже если сегодня вы торгуете обычными гвоздями, завтра они могут попасть в категорию товаров, требующих прослеживаемости. Создание универсального механизма, где каждая операция — это отдельная строка, упрощает интеграцию с государственными системами контроля. Поэтому пользователям «ларьков» и малого бизнеса рекомендуется постепенно привыкать к интерфейсу РМК, так как он наиболее гибко настраивается под нужды конкретной точки продаж и регулярно получает обновления функционала.

Итоги и рекомендации

Подведем итог нашему разбору. Если вы столкнулись с тем, что строки в чеке не объединяются:

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

← На главную