Как устранить дублирование строк при сканировании товаров с разными штрихкодами в 1С 7.7

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

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

Разберем, почему это происходит и какими способами можно устранить данную проблему — как без изменения конфигурации, так и с помощью доработки в Конфигураторе.

Причина возникновения дублирующих строк

В платформе 1С 7.7 реквизит ШтрихКод содержится в подчиненном справочнике Единицы. Если для одной номенклатурной позиции зарегистрировано несколько штрихкодов, создается столько же элементов справочника Единицы со значением ОКЕИ «шт.».

С точки зрения платформы, это разные объекты базы данных. При считывании штрихкода сканером штатный алгоритм ищет конкретную запись единицы измерения и подставляет её в документ. Так как ссылки на элементы справочника Единицы различаются, программа не суммирует количество товара в одной строке, а добавляет новую позицию в табличную часть.

Способ 1. Организационное решение (без использования Конфигуратора)

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

  1. Выделить один основной штрихкод для каждой позиции номенклатуры (или сгенерировать внутренний штрихкод компании).
  2. На этапе приемки товаров от сторонних поставщиков организовать оклеивание (маркировку) всей партии единым внутренним штрихкодом.
  3. В результате кассиры и кладовщики будут сканировать только один штрихкод, и в документах перестанут появляться дублирующие строки.

Способ 2. Корректировка алгоритма сканирования в Конфигураторе

Рассмотрим наиболее удобный технический способ решения. Для этого в Конфигураторе дорабатывается обработка внешнего события от сканера штрихкодов в модуле подбора или обработки сканирования.

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

Посмотрим на пример реализации такой проверки:


// В обработке внешнего события сканера после определения Номенклатуры и ЕдиницыОтсканированной:

ЕдиницаБазовая = Товар.БазоваяЕдиница;

Если (ЕдиницаОтсканированной.Коэффициент = ЕдиницаБазовая.Коэффициент) 
   И (ЕдиницаОтсканированной.ОКЕИ = ЕдиницаБазовая.ОКЕИ) Тогда
    
    // Вместо найденной единицы подставляем ссылку на базовую
    ЕдиницаДляДокумента = ЕдиницаБазовая;
Иначе
    ЕдиницаДляДокумента = ЕдиницаОтсканированной;
КонецЕсли;

// Далее подставляем ЕдиницаДляДокумента в строку и обновляем количество

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

Способ 3. Группировка позиций при выводе печатных форм

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

В этом случае табличная часть документа перед выводом на печать выгружается в объект ТаблицаЗначений, после чего применяется метод свертки:


ТЗПечать = СоздатьОбъект("ТаблицаЗначений");
ВыгрузитьТабличнуюЧасть(ТЗПечать, "Номенклатура, Цена, Количество, Сумма");

// Сворачиваем строки по Номенклатуре и Цене, суммируя Количество и Сумму
ТЗПечать.Свернуть("Номенклатура, Цена", "Количество, Сумма");

Таким образом, товарный чек или накладная будут распечатаны в свернутом виде (одна строка на товар), при этом сам документ в базе данных сохранит исходный вид.

← На главную