В процессе работы в конфигурации «1С:Управление производственным предприятием 1.3» пользователи могут столкнуться с ситуацией, когда в документе Заказ покупателя одна и та же номенклатура внесена несколькими строками по разным ценам (например, при продаже остатков или обрезков), но при формировании документа Реализация товаров и услуг на основании этого заказа строки схлопываются в одну с пересчетом стоимости по средней цене или первой попавшейся строке. Разберем, как устроен этот механизм в типовом решении, почему возникает объединение и как вернуть корректное поведение программы.
Проанализируем стандартную логику работы связки документов цепочки продаж и закупок:
Если в документе реализации происходит автоматическое объединение строк с разными ценами, это свидетельствует о наличии нетиповых доработок в конфигурации или некорректно настроенных обработках заполнения.
Рассмотрим подробнее программные и архитектурные причины возникновения этой проблемы:
ОбработкаЗаполнения модуля объекта документа РеализацияТоваровУслуг или в обработчиках формы документа выполняется метод Свернуть(). Если при этом программист указал в группировочных полях только номенклатуру без учета цены, строки объединяются с искажением итоговой стоимости.Заказы покупателей без сопоставления с табличной частью исходного заказа, система выдает сгруппированное количество.ОбработкаЗаполнения или ПередЗаписью.Выполним пошаговый поиск причин объединения строк:
РеализацияТоваровУслуг, ЗаказПокупателя, ЗаказПоставщику, а также в общих модулях ЗаполнениеДокументов и ОбработкаТабличныхЧастей.ОбработкаЗаполнения модуля объекта документа РеализацияТоваровУслуг и в процедуре ПриОткрытии модуля формы реализации, чтобы отследить момент схлопывания строк таблицы Товары.Разберем варианты решения задачи в зависимости от требований бизнес-процесса:
ОбработкаЗаполнения, в котором строки табличной части заполняются поэлементно из заказа без свертки по ценам.Цена и скидки в список полей группировки:
// Пример корректной свертки с сохранением цен
ТаблицаТоваров.Свернуть("Номенклатура, ХарактеристикаНоменклатуры, Цена, СтавкаНДС", "Количество, Сумма, СуммаНДС");
Характеристики номенклатуры либо реквизита табличной части Качество. В этом случае позиции четко разделяются в складском и торговом учете.