Добрый день. Подскажите, пожалуйста, можно ли с помощью запроса получить данные за период, выводимые по неделям? Интересует именно без цикла пока начало периода <= конец периода и тому подобных, а одним запросом.
---
Ну это же не сложно.
Вам надо в запросе получить опорную таблицу, в которой будет выборка в виде календарных дат в периоде между &датой начала и &датой окончания, а также номер недели этих дат и день недели этих дат. (для удобства группировок).
А потом к этой таблице приматывайте выборку значений (некий регистр накопления, с записями по периоду в виде "Дата и время"?).
Условия связи таблиц типа "ПредставленияПериоды.Дата = НачалоПериода(ВашРегистрНакопления.Период, день)"

Дарю запрос опорной таблицы периодов. (Упорядочить потом уберите, оно сейчас просто для "красоты в консоли")

ВЫБРАТЬ 0 КАК Цифра
ПОМЕСТИТЬ ВТЦифры
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 2
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 3
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 4
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 5
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 6
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 7
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 8
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 9;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
 НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), ДЕНЬ, Цифры.Цифра + ЕСТЬNULL(Цифры10.Цифра, 0) * 10 + ЕСТЬNULL(Цифры100.Цифра, 0) * 100 + ЕСТЬNULL(Цифры1000.Цифра, 0) * 1000 + ЕСТЬNULL(Цифры10000.Цифра, 0) * 10000 + ЕСТЬNULL(Цифры100000.Цифра, 0) * 100000), ДЕНЬ) КАК Период
ПОМЕСТИТЬ ПредставленияПериоды
ИЗ
 ВТЦифры КАК Цифры
  ЛЕВОЕ СОЕДИНЕНИЕ ВТЦифры КАК Цифры10
  ПО (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), НАЧАЛОПЕРИОДА(&ОкончаниеПериода, ДЕНЬ), ДЕНЬ) > 9)
  ЛЕВОЕ СОЕДИНЕНИЕ ВТЦифры КАК Цифры100
  ПО (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), НАЧАЛОПЕРИОДА(&ОкончаниеПериода, ДЕНЬ), ДЕНЬ) > 99)
  ЛЕВОЕ СОЕДИНЕНИЕ ВТЦифры КАК Цифры1000
  ПО (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), НАЧАЛОПЕРИОДА(&ОкончаниеПериода, ДЕНЬ), ДЕНЬ) > 999)
  ЛЕВОЕ СОЕДИНЕНИЕ ВТЦифры КАК Цифры10000
  ПО (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), НАЧАЛОПЕРИОДА(&ОкончаниеПериода, ДЕНЬ), ДЕНЬ) > 9999)
  ЛЕВОЕ СОЕДИНЕНИЕ ВТЦифры КАК Цифры100000
  ПО (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), НАЧАЛОПЕРИОДА(&ОкончаниеПериода, ДЕНЬ), ДЕНЬ) > 99999)
ГДЕ
 НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), ДЕНЬ, Цифры.Цифра + ЕСТЬNULL(Цифры10.Цифра, 0) * 10 + ЕСТЬNULL(Цифры100.Цифра, 0) * 100 + ЕСТЬNULL(Цифры1000.Цифра, 0) * 1000 + ЕСТЬNULL(Цифры10000.Цифра, 0) * 10000 + ЕСТЬNULL(Цифры100000.Цифра, 0) * 100000), ДЕНЬ)
 МЕЖДУ &НачалоПериода И &ОкончаниеПериода
;

////////////////////////////////////////////////////////////­////////////////////
УНИЧТОЖИТЬ ВТЦифры
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
 ПредставленияПериоды.Период КАК Дата,
 НЕДЕЛЯ(ПредставленияПериоды.Период) КАК НомерНедели,
 ДЕНЬНЕДЕЛИ(ПредставленияПериоды.Период) КАК ДеньНедели
ИЗ
 ПредставленияПериоды КАК ПредставленияПериоды
Упорядочить по Дата Автоупорядочивание
---
Год ещё не забыть... Каждый год номер недели повторяется...
---
В некоторых случаях можно.
---
подскажите, пожалуйста, где пример можно посмотреть?
---
Ну это же не сложно.
Вам надо в запросе получить опорную таблицу, в которой будет выборка в виде календарных дат в периоде между &датой начала и &датой окончания, а также номер недели этих дат и день недели этих дат. (для удобства группировок).
А потом к этой таблице приматывайте выборку значений (некий регистр накопления, с записями по периоду в виде "Дата и время"?).
Условия связи таблиц типа "ПредставленияПериоды.Дата = НачалоПериода(ВашРегистрНакопления.Период, день)"

Дарю запрос опорной таблицы периодов. (Упорядочить потом уберите, оно сейчас просто для "красоты в консоли")

ВЫБРАТЬ 0 КАК Цифра
ПОМЕСТИТЬ ВТЦифры
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 2
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 3
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 4
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 5
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 6
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 7
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 8
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 9;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
 НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), ДЕНЬ, Цифры.Цифра + ЕСТЬNULL(Цифры10.Цифра, 0) * 10 + ЕСТЬNULL(Цифры100.Цифра, 0) * 100 + ЕСТЬNULL(Цифры1000.Цифра, 0) * 1000 + ЕСТЬNULL(Цифры10000.Цифра, 0) * 10000 + ЕСТЬNULL(Цифры100000.Цифра, 0) * 100000), ДЕНЬ) КАК Период
ПОМЕСТИТЬ ПредставленияПериоды
ИЗ
 ВТЦифры КАК Цифры
  ЛЕВОЕ СОЕДИНЕНИЕ ВТЦифры КАК Цифры10
  ПО (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), НАЧАЛОПЕРИОДА(&ОкончаниеПериода, ДЕНЬ), ДЕНЬ) > 9)
  ЛЕВОЕ СОЕДИНЕНИЕ ВТЦифры КАК Цифры100
  ПО (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), НАЧАЛОПЕРИОДА(&ОкончаниеПериода, ДЕНЬ), ДЕНЬ) > 99)
  ЛЕВОЕ СОЕДИНЕНИЕ ВТЦифры КАК Цифры1000
  ПО (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), НАЧАЛОПЕРИОДА(&ОкончаниеПериода, ДЕНЬ), ДЕНЬ) > 999)
  ЛЕВОЕ СОЕДИНЕНИЕ ВТЦифры КАК Цифры10000
  ПО (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), НАЧАЛОПЕРИОДА(&ОкончаниеПериода, ДЕНЬ), ДЕНЬ) > 9999)
  ЛЕВОЕ СОЕДИНЕНИЕ ВТЦифры КАК Цифры100000
  ПО (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), НАЧАЛОПЕРИОДА(&ОкончаниеПериода, ДЕНЬ), ДЕНЬ) > 99999)
ГДЕ
 НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), ДЕНЬ, Цифры.Цифра + ЕСТЬNULL(Цифры10.Цифра, 0) * 10 + ЕСТЬNULL(Цифры100.Цифра, 0) * 100 + ЕСТЬNULL(Цифры1000.Цифра, 0) * 1000 + ЕСТЬNULL(Цифры10000.Цифра, 0) * 10000 + ЕСТЬNULL(Цифры100000.Цифра, 0) * 100000), ДЕНЬ)
 МЕЖДУ &НачалоПериода И &ОкончаниеПериода
;

////////////////////////////////////////////////////////////­////////////////////
УНИЧТОЖИТЬ ВТЦифры
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
 ПредставленияПериоды.Период КАК Дата,
 НЕДЕЛЯ(ПредставленияПериоды.Период) КАК НомерНедели,
 ДЕНЬНЕДЕЛИ(ПредставленияПериоды.Период) КАК ДеньНедели
ИЗ
 ПредставленияПериоды КАК ПредставленияПериоды
Упорядочить по Дата Автоупорядочивание
---
Спасибо огромное!
---
Год ещё не забыть... Каждый год номер недели повторяется...
---
Спасибо!