|
Получить даже те месяцы, где нет документов запросом. Без СКД.
| ☑ |
0
Бишбармак
30.07.21
✎
10:23
|
Задача. Посчитать и вывести в табличный документ количество документов за период в разрезе месяцев, за заранее указанный период отбора. Запрос сделал, но если в месяце нет документов, то нет и вывода в табличный документ.
Как дополнить всеми месяцами?
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КорректировкаРеализации.Ссылка КАК ЧислоДоков,
| НАЧАЛОПЕРИОДА(КорректировкаРеализации.Дата, МЕСЯЦ) КАК МесяцДоков
|ИЗ
| Документ.КорректировкаРеализации КАК КорректировкаРеализации
|ГДЕ
| КорректировкаРеализации.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
|ИТОГИ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЧислоДоков)
|ПО
| МесяцДоков ПЕРИОДАМИ(МЕСЯЦ, &ДатаНачала, &ДатаОкончания)";
Запрос.УстановитьПараметр("ДатаНачала", Отчет.ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", Отчет.ДатаОкончания);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаМесяцДоков = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,,"Все");
Пока ВыборкаМесяцДоков.Следующий() Цикл
В СКД знаю как сделать. Хотелось бы именно в запросе. Пока рассматриваю вариант сделать таблицу значений с месяцами и соединение к ней.
|
|
1
Андроны едут
30.07.21
✎
10:34
|
...вариант сделать таблицу значений с месяцами и соединение к ней.. считаю правильным
|
|
2
ДенисЧ
30.07.21
✎
10:34
|
Создать таблицу месяцев, к ней слева подсоединить таблицу документов
|
|
3
Smallrat
30.07.21
✎
10:38
|
Можно легко сделать запросом к регламентированному производственному календарю, если он ведется.
|
|
4
Said_We
30.07.21
✎
10:40
|
(3) Обычный порождающий запрос и не надо завязываться на данные в каком-то регистре.
|
|
5
Бишбармак
30.07.21
✎
10:41
|
Туплю... закрывайте тему.
|
|
6
Бишбармак
30.07.21
✎
10:49
|
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ КорректировкаРеализации.Ссылка) КАК Количество,
| НАЧАЛОПЕРИОДА(КорректировкаРеализации.Дата, МЕСЯЦ) КАК МесяцДоков
|ИЗ
| Документ.КорректировкаРеализации КАК КорректировкаРеализации
|ГДЕ
| КорректировкаРеализации.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
|
|СГРУППИРОВАТЬ ПО
| НАЧАЛОПЕРИОДА(КорректировкаРеализации.Дата, МЕСЯЦ)
|
|УПОРЯДОЧИТЬ ПО
| МесяцДоков
|ИТОГИ
| СУММА(Количество)
|ПО
| МесяцДоков ПЕРИОДАМИ(МЕСЯЦ, &ДатаНачала, &ДатаОкончания)";
Запрос.УстановитьПараметр("ДатаНачала", Отчет.ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", Отчет.ДатаОкончания);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаМесяцДоков = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"МесяцДоков","Все");
|
|
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший