При оформлении документа РеализацияТоваровУслуг в конфигурации «Управление торговлей 10.3» часто требуется распечатать «Бланк товарного наполнения» для сборки заказа на складе. Однако типовой механизм печати (обработка ПечатьРаскладкиНоменклатурыПоМестамХранения) изначально ориентирован на учет мест хранения в разрезе только номенклатурных позиций. Если в одном документе отгружается один и тот же товар с разными характеристиками (например, одна модель одежды разных цветов или размеров), в печатной форме позиции либо схлопываются, либо выводится только одна случайная строка.
Разберем причины такого поведения типового механизма, проанализируем ошибки при самостоятельной доработке типовой обработки и рассмотрим правильный способ создания внешней печатной формы для сборщиков склада.
В типовой конфигурации регистр сведений МестаХраненияНоменклатуры хранит информацию о размещении товаров на складе только по измерениям Номенклатура и Склад. Измерение ХарактеристикаНоменклатуры в типовом регистре отсутствует. По замыслу разработчиков типовой конфигурации, все характеристики одного товара физически располагаются в одной и той же складской ячейке, поэтому отчет группирует данные исключительно по номенклатуре.
Когда программист пытается вручную добавить поле ХарактеристикаНоменклатуры в текст запроса процедуры ЗаполнитьПостроительОтчета, бланк все равно выводит неверные данные. Проанализируем типичные ошибки такой доработки:
ХарактеристикаНоменклатуры часто добавляют только в агрегатную функцию (например, МИНИМУМ(ХарактеристикаНоменклатуры)), забывая указать его в секции ПО предложения ИТОГИ. В результате запрос группирует данные без учета характеристик и схлопывает их.ПостроительОтчета строит дерево строк на базе коллекции ИзмеренияСтроки. Если поле добавлено в ВыбранныеПоля, но не добавлено в ПостроительОтчета.ИзмеренияСтроки.Добавить("ХарактеристикаНоменклатуры"), отдельная строка по характеристике в печатный макет не выводится.ТоварыНаСкладах.Остатки, ТоварыВРезервеНаСкладах.Остатки) в типовом запросе настроено только по номенклатуре и складу. Без соединения по полю ХарактеристикаНоменклатуры свободный остаток рассчитывается по всему товару в целом, а не по конкретной модификации.СРЕДНЕЕ: для предотвращения задвоения строк при наличии нескольких мест хранения в типовом запросе применяется агрегация СРЕДНЕЕ(Количество). При нарушении группировок это приводит к расчету искаженных значений вместо реального количества.Наиболее надежный и простой способ получить корректный бланк для сборщиков без вмешательства в типовые механизмы построителя отчетов — реализовать внешнюю печатную форму.
Рассмотрим пример запроса к табличной части документа, позволяющий получить полный список позиций с детализацией по характеристикам и привязкой к местам хранения:
ВЫБРАТЬ
Док.НомерСтроки КАК НомерСтроки,
Док.Номенклатура.Код КАК Код,
Док.Номенклатура.Артикул КАК Артикул,
Док.Номенклатура.Наименование КАК Номенклатура,
Док.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
Док.Количество КАК Количество,
Док.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
ВЫБОР
КОГДА Док.ЕдиницаИзмеренияМест.Коэффициент = 0
ТОГДА Док.КоличествоМест
ИНАЧЕ ВЫРАЗИТЬ(Док.Количество * Док.Коэффициент / Док.ЕдиницаИзмеренияМест.Коэффициент КАК ЧИСЛО(15, 3))
КОНЕЦ КАК КоличествоМест,
ЕСТЬNULL(РегМестаХранения.МестоХранения, "") КАК МестоХранения,
Док.Склад КАК Склад
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК Док
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаХраненияНоменклатуры КАК РегМестаХранения
ПО Док.Номенклатура = РегМестаХранения.Номенклатура
И Док.Склад = РегМестаХранения.Склад
ГДЕ
Док.Ссылка = &ТекущийДокумент
УПОРЯДОЧИТЬ ПО
МестоХранения,
НомерСтроки
ИТОГИ
СУММА(Количество)
ПО
Склад
Разберем критические моменты, на которые необходимо обратить внимание при формировании печатной формы:
МестаХраненияНоменклатуры обязательно должно содержать условие по складу (Док.Склад = РегМестаХранения.Склад или по реквизиту шапки документа). В противном случае товар свяжется с местами хранения на других складах организации.Приоритет.Штрихкоды, соединяя его по комбинации полей Номенклатура, ХарактеристикаНоменклатуры и ЕдиницаИзмерения.