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