В практике работы с конфигурациями "Управление производственным предприятием" (УПП) или "Комплексная автоматизация" (КА) редакции 1.3 пользователи могут столкнуться со странным поведением системы при подборе товаров. Ситуация выглядит так: вы выбираете два совершенно разных товара (например, "Товар А" и "Товар Б"), но при переносе в табличную часть документа (например, "Реализация товаров и услуг") они превращаются в одну строку "Товар А" с количеством 2. При этом цены могут быть разными, но система их игнорирует или усредняет.
Разберем подробно причины такого поведения, проанализируем влияние типов цен и складов, а также выясним, как диагностировать и устранять эту проблему.
Исходя из описания ситуации, мы имеем следующие вводные данные:
В типовых конфигурациях на обычных формах (как УПП 1.3) механизм подбора работает через специальную обработку. Когда вы нажимаете кнопку "Перенести в документ", срабатывает процедура ОбработкаПодбора в модуле формы документа.
Логика работы этой процедуры обычно следующая:
Номенклатура, Характеристика, Серия, ЕдиницаИзмерения, Качество, Цена (иногда), СтавкаНДС.Если система считает, что новая строка идентична существующей, она прибавляет количество к первой найденной строке. Ошибка "схлопывания" разной номенклатуры возникает, если в алгоритме поиска допущена ошибка или данные в базе повреждены (ссылочная целостность нарушена, и разные товары имеют одинаковые внутренние идентификаторы, что крайне редко, но возможно при некорректных обменах).
Наиболее вероятная причина, которая обсуждалась в контексте данной проблемы — это использование склада типа НТТ (Неавтоматизированная торговая точка) или склада с розничным видом цен.
Рассмотрим, как это влияет на поведение системы:
Особое внимание следует уделить единицам измерения. В проблеме было отмечено, что у проблемных товаров одна и та же единица хранения остатков.
В 1С "Единица измерения" — это справочник, подчиненный справочнику "Номенклатура". Однако в некоторых старых или неправильно обновленных базах бывает ситуация, когда ссылки на единицы измерения перепутаны или используются "общие" элементы (если конфигурация была сильно доработана). Если алгоритм сравнения строк опирается на объект единицы измерения, и в базе есть путаница с владельцами этих единиц, процедура поиска строки может отработать некорректно.
Если вы столкнулись с подобной ситуацией, выполните следующие шаги для исправления.
В первую очередь проверим настройки текущего пользователя. В формах подбора часто есть флаг "Искать строку в документе" или "Суммировать количество".
Попробуйте временно отключить эту настройку (если она доступна в меню "Настройки" формы подбора). Если товары начнут попадать в документ разными строками, значит, проблема именно в алгоритме поиска дублей.
Убедитесь, что объединяемые товары действительно разные:
ЕдиницаХраненияОстатков. Убедитесь, что у каждого товара своя единица (справочник ЕдиницыИзмерения подчинен Номенклатуре). Если у Товара А в этом поле выбрана единица, владельцем которой является Товар Б — это ошибка данных, которую нужно исправлять.Поскольку проблема возникает на уровне конфигуратора, необходимо посмотреть код модуля формы документа РеализацияТоваровУслуг. Нас интересует процедура ОбработкаПодбора.
Примерная структура поиска строки выглядит так (псевдокод):
// Пример алгоритма поиска строки в табличной части
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Номенклатура", ВыбраннаяНоменклатура);
ПараметрыОтбора.Вставить("ХарактеристикаНоменклатуры", ВыбраннаяХарактеристика);
// ... другие параметры
НайденныеСтроки = Товары.НайтиСтроки(ПараметрыОтбора);
Если НайденныеСтроки.Количество() > 0 Тогда
Строка = НайденныеСтроки[0];
Строка.Количество = Строка.Количество + ДобавляемоеКоличество;
Иначе
// Добавление новой строки
КонецЕсли;
Что искать в отладчике:
ОбработкаПодбора.ЗначениеВыбора (или аналогичную). Действительно ли там разная номенклатура при выборе второго товара?ПараметрыОтбора для метода НайтиСтроки. Возможно, в отбор попадает некорректная единица измерения или пустая характеристика.Если используется розничная цена, проверьте регистр сведений "Цены номенклатуры". Убедитесь, что на дату документа для обоих товаров установлены цены для того типа цен, который привязан к складу или выбран в документе.
Если цены не установлены, система может подставлять нулевую цену или цену из предыдущей строки, что в сочетании с алгоритмом поиска дублей (который может игнорировать цену при поиске, но учитывать при заполнении) приводит к ошибкам.
Проблема объединения разных товаров в одну строку чаще всего кроется в некорректных данных справочников (перепутанные владельцы единиц измерения) или в особенностях алгоритма поиска дублей в устаревших релизах конфигураций при работе с розничными складами. Решение заключается в приведении в порядок справочников номенклатуры и единиц измерения, а также в обновлении релиза конфигурации до актуального, где подобные ошибки платформы или кода обычно исправлены.