Почему в отчете Ведомость по партиям товаров пропадает количество при отборе по доп. расходам и как это исправить?

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

При формировании отчета «Ведомость по партиям товаров на складах» в конфигурации «Управление торговлей» редакции 10 нередко возникает задача: отобрать только те документы поступления (ПоступлениеТоваровУслуг), по которым были зарегистрированы дополнительные расходы (например, документами ПоступлениеДопРасходов или ГТДИмпорт). Однако при попытке установить стандартный отбор по полю «Доп. расход приход» или соответствующей сумме пользователи сталкиваются с проблемой: строки отбираются, но из отчета полностью исчезают данные о количестве или начальных остатках. Разберем механизм возникновения этой ошибки и рассмотрим способы ее устранения.

Выясним причину: почему исчезают данные о количестве

Проанализируем поведение регистра накопления ПартииТоваровНаСкладах и работу схемы компоновки данных (СКД):

  1. Разделение движений в регистре: при проведении документа ПоступлениеТоваровУслуг в регистр партий записываются как количественные, так и стоимостные показатели. Документ ПоступлениеДопРасходов формирует движение исключительно по суммовым ресурсам, увеличивая себестоимость уже оприходованной партии. В строках движений дополнительных расходов поле Количество всегда равно нулю.
  2. Механизм трансляции отбора в СКД: когда в пользовательском режиме накладывается условие вида «Доп. расход приход > 0», компоновщик данных по умолчанию встраивает это условие в секцию ГДЕ исходного запроса к таблице движений регистра. В результате платформа отсекает сами документы поступления и оставляет исключительно записи регистратора ПоступлениеДопРасходов. Так как в этих записях количество не зафиксировано, результирующий отчет выводит нулевое или пустое количество.
  3. Особенности автозаполнения в СКД: даже если обернуть выборку во временную таблицу и сгруппировать данные с условием ИМЕЮЩИЕ СУММА(...) > 0, механизм автозаполнения СКД может оптимизировать запрос и спустить пользовательский фильтр на уровень базовых детальных записей, что снова приведет к потере строк поступления.

Способ 1. Отбор по документам оприходования через подзапрос в схеме компоновки

Рассмотрим наиболее надежный способ доработки запроса отчета. Чтобы не потерять количественные движения первичного документа, необходимо фильтровать выборку не по регистраторам или конкретным записям движений, а по измерению ДокументОприходования. Наложим условие, согласно которому в отчет попадут все партии, по которым есть хотя бы одно движение дополнительных расходов.

Разберем по шагам модификацию запроса в наборе данных СКД:

  1. Откроем схему компоновки данных отчета в конфигураторе.
  2. В тексте основного запроса к регистру накопления ПартииТоваровНаСкладах добавим условие вхождения документа оприходования в список партий с доп. расходами:

ГДЕ
    ТаблицаПартий.ДокументОприходования В
        (ВЫБРАТЬ РАЗЛИЧНЫЕ
            ДвиженияДопов.ДокументОприходования
        ИЗ
            РегистрНакопления.ПартииТоваровНаСкладах КАК ДвиженияДопов
        ГДЕ
            (ДвиженияДопов.Регистратор ССЫЛКА Документ.ПоступлениеДопРасходов
            ИЛИ ДвиженияДопов.Регистратор ССЫЛКА Документ.ГТДИмпорт))

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

Способ 2. Отбор через табличную часть документов дополнительных расходов

Если требуется оптимизировать производительность и не обращаться повторно к большой таблице движений регистра накопления, мы можем получить список партий непосредственно из проведенных документов ПоступлениеДопРасходов. В их табличной части Товары реквизит ДокументПартии хранит ссылку на исходное поступление.

Посмотрим на пример условия в запросе:


ГДЕ
    ТаблицаПартий.ДокументОприходования В
        (ВЫБРАТЬ РАЗЛИЧНЫЕ
            ТабЧасть.ДокументПартии
        ИЗ
            Документ.ПоступлениеДопРасходов.Товары КАК ТабЧасть
        ГДЕ
            ТабЧасть.Ссылка.Проведен = ИСТИНА)

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

Способ 3. Настройка отбора после группировки в пользовательском режиме или СКД

Если требуется решить задачу без изменения текста запроса, разберем настройку СКД на уровне группировок:

  1. Перейдем на вкладку «Ресурсы» и убедимся, что поле суммы доп. расходов объявлено как ресурс с функцией агрегации Сумма(ДопРасход).
  2. Перейдем на вкладку «Настройки» в структуру отчета.
  3. Выберем группировку по полю ДокументОприходования (или строку группировки верхнего уровня) и перейдем в ее персональные настройки отбора (а не в общий отбор отчета).
  4. Добавим элемент отбора: Сумма(ДопРасход) Больше 0.
  5. В свойствах элемента отбора укажем параметр Применение отбора — «После группировки или для иерархии».

Данная настройка заставляет СКД сформировать секцию HAVING вместо секции WHERE. Сначала платформа рассчитает все агрегаты по группе (сложит количество из поступления и стоимость из доп. расходов), а затем исключит те группы, где суммарные доп. расходы равны нулю.

Важные ограничения партионного учета

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

  1. Метод списания ФИФО (ЛИФО): описанные методики работают корректно, поскольку в регистре партий четко заполняется измерение ДокументОприходования для всех движений.
  2. Метод списания по средней стоимости: если в информационной базе применяется списание по средней, измерение ДокументОприходования при списании партий не заполняется (партии обезличиваются). В этом случае отследить остатки конкретной партии с учетом доп. расходов типовыми средствами невозможно, так как себестоимость усредняется в разрезе номенклатуры и склада.
← На главную