Многие пользователи, перешедшие на актуальные релизы конфигурации 1С:Розница 2.3 (особенно с версии 2.2), столкнулись с неприятной особенностью: при сканировании одного и того же товара несколько раз подряд в документе «Чек» каждая единица добавляется новой строкой. При этом в интерфейсе РМК (Рабочее место кассира) всё может работать корректно, если установлена соответствующая галочка. Давайте вместе разберем, почему так происходит, рассмотрим технические причины этого поведения и выясним, какие существуют способы решения данной проблемы.
Прежде всего, нам необходимо понять фундаментальное различие в архитектуре программы. В 1С:Розница существуют две разные сущности для оформления розничных продаж:
Администрирование — Продажи — Настройки РМК.Проанализируем ситуацию: настройки, которые мы задаем для РМК, жестко привязаны именно к этой обработке. Разработчики 1С не переносили логику «схлопывания» строк в форму самого документа «Чек», так как он считается скорее административным инструментом для корректировок, а не основным местом работы продавца.
Одной из главных причин изменения логики программы в ветках 2.3.10 и выше стало внедрение системы Честный Знак. Рассмотрим, как это работает изнутри. При продаже маркированного товара (например, табака, обуви или парфюмерии) каждая единица продукции имеет уникальный код DataMatrix. Согласно требованиям законодательства, в электронном и бумажном чеке каждая такая единица должна быть отражена отдельно, чтобы система могла корректно списать конкретный код маркировки.
Для того чтобы унифицировать код обработки торгового оборудования, разработчики 1С применили общие процедуры. Теперь система зачастую игнорирует проверку на наличие такого же товара в списке и просто добавляет новую строку. Это исключает ошибки при случайном «схлопывании» маркированных позиций, где количество всегда должно быть равно единице на одну строку.
Давайте посмотрим, как программно происходит добавление товара. Когда сканер считывает код, вызывается внешнее событие. В типовой конфигурации алгоритм выглядит примерно следующим образом:
// Упрощенный пример логики добавления строки
Процедура ОбработкаШтрихкода(ДанныеШтрихкода)
Товар = НайтиТоварПоШтрихкоду(ДанныеШтрихкода);
Если Товар <> Неопределено Тогда
НоваяСтрока = Объект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Товар);
НоваяСтрока.Количество = 1;
КонецЕсли;
КонецПроцедуры
Как мы видим, здесь отсутствует цикл обхода текущей табличной части для поиска дублей. В старых версиях (2.2) программа сначала выполняла поиск Объект.Товары.Найти(Товар, "Номенклатура"), и если строка находилась, увеличивала значение в колонке Количество. В текущих релизах этот шаг пропущен ради универсальности кода для всех типов товаров.
Если для вашего бизнес-процесса критически важно сканировать товары именно в форму документа (а не в РМК), единственным надежным способом будет использование расширения конфигурации. Рассмотрим, как это реализовать.
Существует миф, что в базовых версиях 1С расширения не работают. На самом деле, начиная с платформы 8.3.14, базовые версии поддерживают работу с расширениями, если они не изменяют структуру данных (не добавляют новые реквизиты, справочники или документы). Изменение программного кода обработки штрихкода — это как раз тот случай, который допустим в базовой версии.
Программисту необходимо перехватить процедуру добавления номенклатуры и добавить туда проверку:
&После("ОбработатьШтрихкоды")
Процедура Ист_ОбработатьШтрихкоды(ДанныеШтрихкода)
// Логика поиска существующей строки в документе
Для Каждого СтрокаТЧ Из Объект.Товары Цикл
Если СтрокаТЧ.Номенклатура = ТекущийТовар
И СтрокаТЧ.Характеристика = ТекущаяХарактеристика
И НЕ ТекущийТовар.Маркируемый Тогда
СтрокаТЧ.Количество = СтрокаТЧ.Количество + 1;
Возврат; // Прекращаем выполнение, так как строка найдена и обновлена
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Важный момент: при написании такого расширения обязательно нужно добавить проверку на маркировку товара. Если товар подлежит обязательному учету в ИС МП, объединять строки категорически нельзя.
Проанализируем работу самого сканера. Часто проблема кроется в режиме его подключения:
Enter. В этом случае 1С воспринимает это как ввод с клавиатуры, и логика «умного» добавления товара может не срабатывать.Попробуем перевести сканер в режим эмуляции COM-порта (через настроечные штрихкоды из инструкции к сканеру) и перенастроить его в разделе Подключаемое оборудование. Это может заставить форму документа вести себя более корректно при обработке событий.
Выясним еще одну хитрость. В некоторых сборках «Розницы» алгоритм добавления отличается, если вызвать окно поиска штрихкода вручную. Попробуем нажать клавишу F7 в открытом чеке и считать код. В ряде случаев форма поиска, в отличие от прямого сканирования в таблицу, имеет встроенный механизм поиска дублей перед добавлением новой строки.
Рассмотрим позицию разработчиков. Основной вектор развития 1С — это поэкземплярный учет. Даже если сегодня вы торгуете обычными гвоздями, завтра они могут попасть в категорию товаров, требующих прослеживаемости. Создание универсального механизма, где каждая операция — это отдельная строка, упрощает интеграцию с государственными системами контроля. Поэтому пользователям «ларьков» и малого бизнеса рекомендуется постепенно привыкать к интерфейсу РМК, так как он наиболее гибко настраивается под нужды конкретной точки продаж и регулярно получает обновления функционала.
Подведем итог нашему разбору. Если вы столкнулись с тем, что строки в чеке не объединяются:
Несмотря на то, что изменения в новых релизах могут казаться неудобными, они продиктованы требованиями времени и законодательства. Понимание этих механизмов поможет вам адаптировать работу программы под свои задачи наиболее эффективным способом.