gifts2017

Пример отчета с выводом остатков по всем периодам

Опубликовал Николай Зайков (Mortiferus) в раздел Программирование - Практика программирования

Столкнулся в очередной раз с задачей создания отчета в СКД с выводом по периодам (месяцам) остатков по регистру накопления. Убил на решение несколько часов, перелопатил интернет, перепробовал всяческие варианты настроек полей, параметров и прочее, пока не пришел наконец к рабочему варианту. Оставляю себе в качестве шаблона, поскольку спустя время уверен, что опять все забуду. Надеюсь, кому-то еще поможет сэкономить время или просто напомнить себе те или иные особенности работы СКД.

В качестве примера выбран регистр "Расчеты с клиентами" (Управление торговлей 11, в.11.1.2). Необходимо вывести корректные конечные остатки по этому регистру на конец каждого месяца, причем даже если не было движений в течение определенного месяца. Задача "в лоб" не решается (можете проверить) - указав в качестве периода отчета, например, текущий год и выбрав в отборе клиента, у которого нет движений за этот год, но есть начальный остаток, мы увидим только первый и последний месяцы с корректным конечным остатком, остальные месяцы "провалились": 

В инете можно найти рекомендации, как добиться желаемого. 

Первое - помимо исходной таблицы остатков (не остатки и обороты, поскольку в данном случае меня интересуют только конечные остатки) надо добавить таблицу со всеми датами. Т.е., если меня интересует этот год, то надо получить список дат на конец каждого месяца этого года - 31 января 23:59:59, 28 февраля 23:59:59 ... 31 декабря 23:59:59. Данная таблица с датами соединяется (НЕ объединяется) с основной таблицей (ИсходныеДанные).

В основной таблице добавляем реквизит &Период (у меня это Месяц) как на рисунке, не забываем его же вставить в параметры виртуальной таблицы. Соответственно, для вывода отчета "Период" (он же "Месяц") - это Измерение,

 

а для связи 2-х таблиц - это Параметр:

Здесь все "переменные" названы по-разному, чтобы не запутаться прежде всего самому, что к чему относится. Также обратите внимание, что здесь ВАЖЕН порядок связи: сначала таблица с датами, потом таблица с исходными данными (не забываем - в СКД связь на данной закладке ЛЕВАЯ).

ЗЫ. Ради интереса проверьте, что будет, если их переставить местами.

Окончательный вариант дает именно то, чего и добивались:

 

 

PS. Спасибо Мисте за код запроса, собирающего даты.

PPS. Да пусть не обидятся на меня те, кто решал и публиковал решение этой задачки, я вовсе не претендую на оригинальность, просто хочется свести все воедино прежде всего для самого себя, и чтобы всегда было под рукой...

  

Скачать файлы

Наименование Файл Версия Размер
Вывод остатков в СКД по месяцам 9
.erf 6,72Kb
15.09.15
9
.erf 01 6,72Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Алексей Воротягин (klaus38) 15.09.15 13:50
Спасибо тебе добрый человек. Вот только что начальство попросило по месяцам, я даже репу почесать не успел и тут на тебе (плюсую)
2. Пикалев Николай (dabu-dabu) 15.09.15 15:07
Способ бессмысленно и даже вредно использовать для простых запросов из виртуальных таблиц, в случе использования которых достаточно правильно настроить роли полей набора данных.
И то что автор "перелопатил интернет" и не нашел описания данного способа - это странно.
3. Николай Зайков (Mortiferus) 15.09.15 15:29
(2) dabu-dabu, как оказалось - недостаточно. Предлагаю самому попробовать.
4. Андрей Власутин (AndreyV-13) 15.09.15 15:35
Спасибо. Плюсик от меня.
5. Пикалев Николай (dabu-dabu) 15.09.15 17:28
(3) Mortiferus, Попробовал. Все работает, но нужно в запросе выводить поле не только конечного остатка, но и начального. В отчет, при этом, можно вывести только конечный.
6. Анатолий Бритько (headMade) 15.09.15 17:47
В свойствах поля группировки указать тип дополнения не подойдет?
Прикрепленные файлы:
7. Николай Зайков (Mortiferus) 16.09.15 07:10
(5) dabu-dabu, я добавлял и начальный остаток, и оборот, и приход, и расход - всегда выходит только первый и последний месяц.
8. Николай Зайков (Mortiferus) 16.09.15 07:21
(6) headMade, попробовал так сделать, получается ерунда:
Месяцы вышли все, остаток по месяцам не вышел. Возможно еще о какой-то настройке не знаю, не исключаю.
Пробовал при этом Роль Месяца ставить и как Период, и как Измерение (тип Дата).
Прикрепленные файлы:
9. Николай Зайков (Mortiferus) 16.09.15 08:24
(6) headMade, а вот если вместо виртуальной таблицы остатков выбрать таблицу остатков и оборотов, тогда получается! Спасибо. Век живи, век учись...
10. Адепт Адептов (Adeptus) 16.09.15 09:07
11. Семён Павлюков (7OH) 19.10.16 10:33
Пробовал разные методы.
Единственным нормальным по скорости и корректности оказался ОстаткиИОбороты с указанием периодичности в
ПриКомпоновкеРезультата
изменением
ЭтотОбъект.СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Запрос