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