Столкнулся с тем, что не мог найти у себя готовый шаблон формирования в запросе Периода по дням, зная начальную и конечную дату, вида
ПОМЕСТИТЬ ВТ_ВсеДаты
ИЗ ВТ_Линейка КАК ВТ_Линейка
ГДЕ ДОБАВИТЬКДАТЕ(&НачПериода, ДЕНЬ, ВТ_Линейка.Поле1) <= &КонПериода
Хороший пример работы с датами в запросах можно посмотреть на примере календаря на СКД http://infostart.ru/public/103472/
Переработал запрос под себя, ограничил размер ВТ_Линейка (интервал целых чисел от 1 до ....) по РазностьДат
// Прибавляем к дате начала отчета все числа дней и отбираем при этом подходящие нам
// то есть не больше даты конца отчета, получим все даты периода формирования
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(&НачПериода, ДЕНЬ, ВТ_Линейка.Поле1) КАК ДатаПОМЕСТИТЬ ВТ_ВсеДаты
ИЗ ВТ_Линейка КАК ВТ_Линейка
ГДЕ ДОБАВИТЬКДАТЕ(&НачПериода, ДЕНЬ, ВТ_Линейка.Поле1) <= &КонПериода
Хороший пример работы с датами в запросах можно посмотреть на примере календаря на СКД http://infostart.ru/public/103472/
Переработал запрос под себя, ограничил размер ВТ_Линейка (интервал целых чисел от 1 до ....) по РазностьДат
ВЫБРАТЬ
0 КАК Поле1
ПОМЕСТИТЬ ВТ_Числа
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
2
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
3
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
4
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
5
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
6
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
7
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
8
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
9
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_Числа1.Поле1 + ВТ_Числа10.Поле1 * 10 + ВТ_Числа100.Поле1 * 100 + ВТ_Числа1000.Поле1 * 1000 КАК Поле1
ПОМЕСТИТЬ ВТ_Линейка
ИЗ
ВТ_Числа КАК ВТ_Числа1,
ВТ_Числа КАК ВТ_Числа10,
ВТ_Числа КАК ВТ_Числа100,
ВТ_Числа КАК ВТ_Числа1000
ГДЕ
ВТ_Числа1.Поле1 + ВТ_Числа10.Поле1 * 10 + ВТ_Числа100.Поле1 * 100 + ВТ_Числа1000.Поле1 * 1000 <= РАЗНОСТЬДАТ(&Дата1, &Дата2, ДЕНЬ)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(&Дата1, ДЕНЬ, ВТ_Линейка.Поле1) КАК Дата
ПОМЕСТИТЬ ВТ_ВсеДаты
ИЗ
ВТ_Линейка КАК ВТ_Линейка
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
вт_ВсеДаты.Дата
ИЗ
ВТ_ВсеДаты КАК вт_ВсеДаты
0 КАК Поле1
ПОМЕСТИТЬ ВТ_Числа
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
2
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
3
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
4
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
5
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
6
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
7
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
8
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
9
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_Числа1.Поле1 + ВТ_Числа10.Поле1 * 10 + ВТ_Числа100.Поле1 * 100 + ВТ_Числа1000.Поле1 * 1000 КАК Поле1
ПОМЕСТИТЬ ВТ_Линейка
ИЗ
ВТ_Числа КАК ВТ_Числа1,
ВТ_Числа КАК ВТ_Числа10,
ВТ_Числа КАК ВТ_Числа100,
ВТ_Числа КАК ВТ_Числа1000
ГДЕ
ВТ_Числа1.Поле1 + ВТ_Числа10.Поле1 * 10 + ВТ_Числа100.Поле1 * 100 + ВТ_Числа1000.Поле1 * 1000 <= РАЗНОСТЬДАТ(&Дата1, &Дата2, ДЕНЬ)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(&Дата1, ДЕНЬ, ВТ_Линейка.Поле1) КАК Дата
ПОМЕСТИТЬ ВТ_ВсеДаты
ИЗ
ВТ_Линейка КАК ВТ_Линейка
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
вт_ВсеДаты.Дата
ИЗ
ВТ_ВсеДаты КАК вт_ВсеДаты
Комментарии
Отправить комментарий