Как вывести номенклатуру по характеристикам в бланке товарного наполнения в 1С:Управление торговлей 10.3?

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

При оформлении документа РеализацияТоваровУслуг в конфигурации «Управление торговлей 10.3» часто требуется распечатать «Бланк товарного наполнения» для сборки заказа на складе. Однако типовой механизм печати (обработка ПечатьРаскладкиНоменклатурыПоМестамХранения) изначально ориентирован на учет мест хранения в разрезе только номенклатурных позиций. Если в одном документе отгружается один и тот же товар с разными характеристиками (например, одна модель одежды разных цветов или размеров), в печатной форме позиции либо схлопываются, либо выводится только одна случайная строка.

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

Почему типовой отчет не разделяет позиции по характеристикам

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

Когда программист пытается вручную добавить поле ХарактеристикаНоменклатуры в текст запроса процедуры ЗаполнитьПостроительОтчета, бланк все равно выводит неверные данные. Проанализируем типичные ошибки такой доработки:

  1. Отсутствие характеристики в группировках итогов запроса: поле ХарактеристикаНоменклатуры часто добавляют только в агрегатную функцию (например, МИНИМУМ(ХарактеристикаНоменклатуры)), забывая указать его в секции ПО предложения ИТОГИ. В результате запрос группирует данные без учета характеристик и схлопывает их.
  2. Ненастроенные измерения построителя отчета: объект ПостроительОтчета строит дерево строк на базе коллекции ИзмеренияСтроки. Если поле добавлено в ВыбранныеПоля, но не добавлено в ПостроительОтчета.ИзмеренияСтроки.Добавить("ХарактеристикаНоменклатуры"), отдельная строка по характеристике в печатный макет не выводится.
  3. Некорректный расчет остатков: соединение с виртуальными таблицами остатков (ТоварыНаСкладах.Остатки, ТоварыВРезервеНаСкладах.Остатки) в типовом запросе настроено только по номенклатуре и складу. Без соединения по полю ХарактеристикаНоменклатуры свободный остаток рассчитывается по всему товару в целом, а не по конкретной модификации.
  4. Использование агрегатной функции СРЕДНЕЕ: для предотвращения задвоения строк при наличии нескольких мест хранения в типовом запросе применяется агрегация СРЕДНЕЕ(Количество). При нарушении группировок это приводит к расчету искаженных значений вместо реального количества.

Создание внешней печатной формы для бланка сборки

Наиболее надежный и простой способ получить корректный бланк для сборщиков без вмешательства в типовые механизмы построителя отчетов — реализовать внешнюю печатную форму.

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


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

Важные нюансы при работе с местами хранения

Разберем критические моменты, на которые необходимо обратить внимание при формировании печатной формы:

  1. Фильтрация по складу: соединение с регистром МестаХраненияНоменклатуры обязательно должно содержать условие по складу (Док.Склад = РегМестаХранения.Склад или по реквизиту шапки документа). В противном случае товар свяжется с местами хранения на других складах организации.
  2. Защита от задвоения при нескольких местах хранения: если для одной номенклатуры на складе назначено несколько ячеек с разным приоритетом, простое левое соединение размножит строки табличной части документа. Чтобы избежать искажения сумм и количеств, место хранения рекомендуется определять отдельным вложенным запросом, выбирая запись с минимальным значением поля Приоритет.
  3. Идентификация товара сборщиком: для удобства работы на складе в печатную форму полезно добавить вывод штрихкодов из регистра сведений Штрихкоды, соединяя его по комбинации полей Номенклатура, ХарактеристикаНоменклатуры и ЕдиницаИзмерения.
← На главную