При формировании отчета «Ведомость по партиям товаров на складах» в конфигурации «Управление торговлей» редакции 10 нередко возникает задача: отобрать только те документы поступления (ПоступлениеТоваровУслуг), по которым были зарегистрированы дополнительные расходы (например, документами ПоступлениеДопРасходов или ГТДИмпорт). Однако при попытке установить стандартный отбор по полю «Доп. расход приход» или соответствующей сумме пользователи сталкиваются с проблемой: строки отбираются, но из отчета полностью исчезают данные о количестве или начальных остатках. Разберем механизм возникновения этой ошибки и рассмотрим способы ее устранения.
Проанализируем поведение регистра накопления ПартииТоваровНаСкладах и работу схемы компоновки данных (СКД):
ПоступлениеТоваровУслуг в регистр партий записываются как количественные, так и стоимостные показатели. Документ ПоступлениеДопРасходов формирует движение исключительно по суммовым ресурсам, увеличивая себестоимость уже оприходованной партии. В строках движений дополнительных расходов поле Количество всегда равно нулю.ГДЕ исходного запроса к таблице движений регистра. В результате платформа отсекает сами документы поступления и оставляет исключительно записи регистратора ПоступлениеДопРасходов. Так как в этих записях количество не зафиксировано, результирующий отчет выводит нулевое или пустое количество.ИМЕЮЩИЕ СУММА(...) > 0, механизм автозаполнения СКД может оптимизировать запрос и спустить пользовательский фильтр на уровень базовых детальных записей, что снова приведет к потере строк поступления.Рассмотрим наиболее надежный способ доработки запроса отчета. Чтобы не потерять количественные движения первичного документа, необходимо фильтровать выборку не по регистраторам или конкретным записям движений, а по измерению ДокументОприходования. Наложим условие, согласно которому в отчет попадут все партии, по которым есть хотя бы одно движение дополнительных расходов.
Разберем по шагам модификацию запроса в наборе данных СКД:
ПартииТоваровНаСкладах добавим условие вхождения документа оприходования в список партий с доп. расходами:
ГДЕ
ТаблицаПартий.ДокументОприходования В
(ВЫБРАТЬ РАЗЛИЧНЫЕ
ДвиженияДопов.ДокументОприходования
ИЗ
РегистрНакопления.ПартииТоваровНаСкладах КАК ДвиженияДопов
ГДЕ
(ДвиженияДопов.Регистратор ССЫЛКА Документ.ПоступлениеДопРасходов
ИЛИ ДвиженияДопов.Регистратор ССЫЛКА Документ.ГТДИмпорт))
При таком подходе фильтрация осуществляется по партии в целом. В итоговую выборку попадут как строки исходного оприходования (содержащие количество и базовую стоимость), так и строки дополнительных затрат, увеличивающие стоимость партии.
Если требуется оптимизировать производительность и не обращаться повторно к большой таблице движений регистра накопления, мы можем получить список партий непосредственно из проведенных документов ПоступлениеДопРасходов. В их табличной части Товары реквизит ДокументПартии хранит ссылку на исходное поступление.
Посмотрим на пример условия в запросе:
ГДЕ
ТаблицаПартий.ДокументОприходования В
(ВЫБРАТЬ РАЗЛИЧНЫЕ
ТабЧасть.ДокументПартии
ИЗ
Документ.ПоступлениеДопРасходов.Товары КАК ТабЧасть
ГДЕ
ТабЧасть.Ссылка.Проведен = ИСТИНА)
Обращение к табличной части документа по индексированным полям отрабатывает быстрее, сохраняя исходную целостность партионных записей.
Если требуется решить задачу без изменения текста запроса, разберем настройку СКД на уровне группировок:
Сумма(ДопРасход).ДокументОприходования (или строку группировки верхнего уровня) и перейдем в ее персональные настройки отбора (а не в общий отбор отчета).Сумма(ДопРасход) Больше 0.Данная настройка заставляет СКД сформировать секцию HAVING вместо секции WHERE. Сначала платформа рассчитает все агрегаты по группе (сложит количество из поступления и стоимость из доп. расходов), а затем исключит те группы, где суммарные доп. расходы равны нулю.
Проанализируем особенности учетной политики, влияющие на результат:
ДокументОприходования для всех движений.ДокументОприходования при списании партий не заполняется (партии обезличиваются). В этом случае отследить остатки конкретной партии с учетом доп. расходов типовыми средствами невозможно, так как себестоимость усредняется в разрезе номенклатуры и склада.