Почему разная номенклатура суммируется в одну строку при подборе в документ 1С?

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

В практике работы с конфигурациями "Управление производственным предприятием" (УПП) или "Комплексная автоматизация" (КА) редакции 1.3 пользователи могут столкнуться со странным поведением системы при подборе товаров. Ситуация выглядит так: вы выбираете два совершенно разных товара (например, "Товар А" и "Товар Б"), но при переносе в табличную часть документа (например, "Реализация товаров и услуг") они превращаются в одну строку "Товар А" с количеством 2. При этом цены могут быть разными, но система их игнорирует или усредняет.

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

Суть проблемы и симптомы

Исходя из описания ситуации, мы имеем следующие вводные данные:

  1. В документе используется операция продажи.
  2. Подбор осуществляется в розничных ценах.
  3. При выборе двух разных позиций номенклатуры в корзине подбора они могут выглядеть нормально, но при переносе в документ объединяются.
  4. Проблема наблюдается не всегда, а в определенных каталогах или при определенных условиях.
  5. У номенклатуры назначена одна и та же Единица хранения остатков.

Причина 1: Особенности обработки подбора и поиск дублей

В типовых конфигурациях на обычных формах (как УПП 1.3) механизм подбора работает через специальную обработку. Когда вы нажимаете кнопку "Перенести в документ", срабатывает процедура ОбработкаПодбора в модуле формы документа.

Логика работы этой процедуры обычно следующая:

  1. Система получает структуру подобранных данных (Номенклатура, Количество, Цена и т.д.).
  2. Перед добавлением новой строки система проверяет, нет ли такой строки уже в табличной части. Это делается для того, чтобы не плодить дубли, а просто увеличивать количество.
  3. Поиск строки осуществляется по Ключевым полям. Обычно это: Номенклатура, Характеристика, Серия, ЕдиницаИзмерения, Качество, Цена (иногда), СтавкаНДС.

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

Причина 2: Влияние типа склада (НТТ) и розничных цен

Наиболее вероятная причина, которая обсуждалась в контексте данной проблемы — это использование склада типа НТТ (Неавтоматизированная торговая точка) или склада с розничным видом цен.

Рассмотрим, как это влияет на поведение системы:

Причина 3: Единицы измерения

Особое внимание следует уделить единицам измерения. В проблеме было отмечено, что у проблемных товаров одна и та же единица хранения остатков.

В 1С "Единица измерения" — это справочник, подчиненный справочнику "Номенклатура". Однако в некоторых старых или неправильно обновленных базах бывает ситуация, когда ссылки на единицы измерения перепутаны или используются "общие" элементы (если конфигурация была сильно доработана). Если алгоритм сравнения строк опирается на объект единицы измерения, и в базе есть путаница с владельцами этих единиц, процедура поиска строки может отработать некорректно.

Диагностика и решение

Если вы столкнулись с подобной ситуацией, выполните следующие шаги для исправления.

Шаг 1. Проверка настроек пользователя

В первую очередь проверим настройки текущего пользователя. В формах подбора часто есть флаг "Искать строку в документе" или "Суммировать количество".

Попробуйте временно отключить эту настройку (если она доступна в меню "Настройки" формы подбора). Если товары начнут попадать в документ разными строками, значит, проблема именно в алгоритме поиска дублей.

Шаг 2. Проверка данных номенклатуры

Убедитесь, что объединяемые товары действительно разные:

  1. Откройте карточки обоих товаров.
  2. Проверьте, не являются ли они дублями (разные названия, но одинаковые ссылки — маловероятно, но стоит проверить).
  3. Проверьте заполнение поля ЕдиницаХраненияОстатков. Убедитесь, что у каждого товара своя единица (справочник ЕдиницыИзмерения подчинен Номенклатуре). Если у Товара А в этом поле выбрана единица, владельцем которой является Товар Б — это ошибка данных, которую нужно исправлять.

Шаг 3. Анализ кода (для программиста)

Поскольку проблема возникает на уровне конфигуратора, необходимо посмотреть код модуля формы документа РеализацияТоваровУслуг. Нас интересует процедура ОбработкаПодбора.

Примерная структура поиска строки выглядит так (псевдокод):


// Пример алгоритма поиска строки в табличной части
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Номенклатура", ВыбраннаяНоменклатура);
ПараметрыОтбора.Вставить("ХарактеристикаНоменклатуры", ВыбраннаяХарактеристика);
// ... другие параметры

НайденныеСтроки = Товары.НайтиСтроки(ПараметрыОтбора);
Если НайденныеСтроки.Количество() > 0 Тогда
    Строка = НайденныеСтроки[0];
    Строка.Количество = Строка.Количество + ДобавляемоеКоличество;
Иначе
    // Добавление новой строки
КонецЕсли;

Что искать в отладчике:

  1. Поставьте точку останова в начале процедуры ОбработкаПодбора.
  2. Посмотрите, какие данные приходят в переменную ЗначениеВыбора (или аналогичную). Действительно ли там разная номенклатура при выборе второго товара?
  3. Проследите, как формируется структура ПараметрыОтбора для метода НайтиСтроки. Возможно, в отбор попадает некорректная единица измерения или пустая характеристика.

Шаг 4. Тип цен и Склад

Если используется розничная цена, проверьте регистр сведений "Цены номенклатуры". Убедитесь, что на дату документа для обоих товаров установлены цены для того типа цен, который привязан к складу или выбран в документе.

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

Заключение

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

← На главную