пятница, 14 апреля 2017 г.

Получение всех дат в периоде

Получение всех дат в зпросе:

ЗАПРОС.ТЕКСТ = "ВЫБРАТЬ
| ЦИФРЫ.ПОЛЕ1 КАК ЦИФРА
|ПОМЕСТИТЬ ЦИФРЫ
|ИЗ
| (ВЫБРАТЬ
| 1 КАК ПОЛЕ1
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ
| 2
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ
| 3
|
| ОБЪЕДИНИТЬ
|

| ВЫБРАТЬ
| 4
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ
| 5
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ
| 6
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ
| 7) КАК ЦИФРЫ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| (ЦИФРЫ3.ЦИФРА — 1) * 343 + (ЦИФРЫ2.ЦИФРА — 1) * 49 + (ЦИФРЫ.ЦИФРА — 1) * 7 + ЦИФРЫ1.ЦИФРА КАК ЧИСЛО
|ПОМЕСТИТЬ ЧИСЛА
|ИЗ
| ЦИФРЫ КАК ЦИФРЫ,
| ЦИФРЫ КАК ЦИФРЫ1,
| ЦИФРЫ КАК ЦИФРЫ2,
| ЦИФРЫ КАК ЦИФРЫ3
|;
|
|//////////////////////////////////////////////////////////////////////////////// \
|
|ПРЕОБДРАЗУЕМ ЧИСЛА В ДАТЫ В ЗАДАННОМ ДИАПАЗОНЕ 
|
|ВЫБРАТЬ
| ДОБАВИТЬКДАТЕ(&ДАТАНАЧАЛА, ДЕНЬ, ЧИСЛА.ЧИСЛО — 1) КАК ДАТА
|ПОМЕСТИТЬ ДАТЫ
|ИЗ
| ЧИСЛА КАК ЧИСЛА
|ГДЕ
| ДОБАВИТЬКДАТЕ(&ДАТАНАЧАЛА, ДЕНЬ, ЧИСЛА.ЧИСЛО — 1) <= &ДАТАОКОНЧАНИЯ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|
|ЕСЛИ ЕСТЬ НЕОБХОДИМОСТЬ ПОЛУЧИТЬ РАБОЧИЕ ДНИ ИЗ ПОЛУЧИВШЕГОСЯ ЗАПРОСА
|
|ВЫБРАТЬ
| ДАТЫ.ДАТА КАК ДАТА,
| ВЫБОР ДЕНЬНЕДЕЛИ(ДАТЫ.ДАТА)
| КОГДА 6
| ТОГДА 0
| КОГДА 7
| ТОГДА 0
| ИНАЧЕ 1
| КОНЕЦ КАК РАБОЧИЙДЕНЬ
|ИЗ
| ДАТЫ КАК ДАТЫ
|
|УПОРЯДОЧИТЬ ПО
| ДАТА"
Листинг получения всех рабочих дней

ВЫБРАТЬ
ЦИФРЫ.ПОЛЕ1 КАК ЦИФРА
ПОМЕСТИТЬ ЦИФРЫ
ИЗ
(ВЫБРАТЬ
1 КАК ПОЛЕ1

ОБЪЕДИНИТЬ

ВЫБРАТЬ
2

ОБЪЕДИНИТЬ

ВЫБРАТЬ
3

ОБЪЕДИНИТЬ

ВЫБРАТЬ
4

ОБЪЕДИНИТЬ

ВЫБРАТЬ
5

ОБЪЕДИНИТЬ

ВЫБРАТЬ
6

ОБЪЕДИНИТЬ

ВЫБРАТЬ
7) КАК ЦИФРЫ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
(ЦИФРЫ3.ЦИФРА - 1) * 343 + (ЦИФРЫ2.ЦИФРА - 1) * 49 + (ЦИФРЫ.ЦИФРА - 1) * 7 + ЦИФРЫ1.ЦИФРА КАК ЧИСЛО
ПОМЕСТИТЬ ЧИСЛА
ИЗ
ЦИФРЫ КАК ЦИФРЫ,
ЦИФРЫ КАК ЦИФРЫ1,
ЦИФРЫ КАК ЦИФРЫ2,
ЦИФРЫ КАК ЦИФРЫ3
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(&ДАТАНАЧАЛА, ДЕНЬ, ЧИСЛА.ЧИСЛО - 1) КАК ДАТА
ПОМЕСТИТЬ ДАТЫ
ИЗ
ЧИСЛА КАК ЧИСЛА
ГДЕ
ДОБАВИТЬКДАТЕ(&ДАТАНАЧАЛА, ДЕНЬ, ЧИСЛА.ЧИСЛО - 1) <= &ДАТАОКОНЧАНИЯ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ДАТЫ.ДАТА КАК ДАТА,
ВЫБОР ДЕНЬНЕДЕЛИ(ДАТЫ.ДАТА)
КОГДА 6
ТОГДА 0
КОГДА 7
ТОГДА 0
ИНАЧЕ 1
КОНЕЦ КАК РАБОЧИЙДЕНЬ
ИЗ
ДАТЫ КАК ДАТЫ

УПОРЯДОЧИТЬ ПО
ДАТА
Листинг получения всех дней в запросе

ВЫБРАТЬ
ЦИФРЫ.ПОЛЕ1 КАК ЦИФРА
ПОМЕСТИТЬ ЦИФРЫ
ИЗ
(ВЫБРАТЬ
1 КАК ПОЛЕ1

ОБЪЕДИНИТЬ

ВЫБРАТЬ
2

ОБЪЕДИНИТЬ

ВЫБРАТЬ
3

ОБЪЕДИНИТЬ

ВЫБРАТЬ
4

ОБЪЕДИНИТЬ

ВЫБРАТЬ
5

ОБЪЕДИНИТЬ

ВЫБРАТЬ
6

ОБЪЕДИНИТЬ

ВЫБРАТЬ
7) КАК ЦИФРЫ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
(ЦИФРЫ3.ЦИФРА - 1) * 343 + (ЦИФРЫ2.ЦИФРА - 1) * 49 + (ЦИФРЫ.ЦИФРА - 1) * 7 + ЦИФРЫ1.ЦИФРА КАК ЧИСЛО
ПОМЕСТИТЬ ЧИСЛА
ИЗ
ЦИФРЫ КАК ЦИФРЫ,
ЦИФРЫ КАК ЦИФРЫ1,
ЦИФРЫ КАК ЦИФРЫ2,
ЦИФРЫ КАК ЦИФРЫ3
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(&ДАТАНАЧАЛА, ДЕНЬ, ЧИСЛА.ЧИСЛО - 1) КАК ДАТА
ИЗ
ЧИСЛА КАК ЧИСЛА
ГДЕ
ДОБАВИТЬКДАТЕ(&ДАТАНАЧАЛА, ДЕНЬ, ЧИСЛА.ЧИСЛО - 1) <= &ДАТАОКОНЧАНИЯ
Выбрать первые дни недель в периоде (Аналогично последней конструкции можно выбрать начало каждого месяца/года и.т.д.)

ВЫБРАТЬ
ЦИФРЫ.ПОЛЕ1 КАК ЦИФРА
ПОМЕСТИТЬ ЦИФРЫ
ИЗ
(ВЫБРАТЬ
1 КАК ПОЛЕ1

ОБЪЕДИНИТЬ

ВЫБРАТЬ
2

ОБЪЕДИНИТЬ

ВЫБРАТЬ
3

ОБЪЕДИНИТЬ

ВЫБРАТЬ
4

ОБЪЕДИНИТЬ

ВЫБРАТЬ
5

ОБЪЕДИНИТЬ

ВЫБРАТЬ
6

ОБЪЕДИНИТЬ

ВЫБРАТЬ
7) КАК ЦИФРЫ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
(ЦИФРЫ3.ЦИФРА - 1) * 343 + (ЦИФРЫ2.ЦИФРА - 1) * 49 + (ЦИФРЫ.ЦИФРА - 1) * 7 + ЦИФРЫ1.ЦИФРА КАК ЧИСЛО
ПОМЕСТИТЬ ЧИСЛА
ИЗ
ЦИФРЫ КАК ЦИФРЫ,
ЦИФРЫ КАК ЦИФРЫ1,
ЦИФРЫ КАК ЦИФРЫ2,
ЦИФРЫ КАК ЦИФРЫ3
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(&ДАТАНАЧАЛА, ДЕНЬ, ЧИСЛА.ЧИСЛО - 1) КАК ДАТА
ПОМЕСТИТЬ ВТ
ИЗ
ЧИСЛА КАК ЧИСЛА
ГДЕ
ДОБАВИТЬКДАТЕ(&ДАТАНАЧАЛА, ДЕНЬ, ЧИСЛА.ЧИСЛО - 1) <= &ДАТАОКОНЧАНИЯ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(ВТ.ДАТА, НЕДЕЛЯ) КАК НачалоНедели
ИЗ
ВТ КАК ВТ
С возможностью выбора периодичности:

0 - День
1 - Неделя
2 - Месяц
3 - Квартал
4 - Полугодие
5 - Год

ВЫБРАТЬ
ЦИФРЫ.ПОЛЕ1 КАК ЦИФРА
ПОМЕСТИТЬ ЦИФРЫ
ИЗ
(ВЫБРАТЬ
1 КАК ПОЛЕ1

ОБЪЕДИНИТЬ

ВЫБРАТЬ
2

ОБЪЕДИНИТЬ

ВЫБРАТЬ
3

ОБЪЕДИНИТЬ

ВЫБРАТЬ
4

ОБЪЕДИНИТЬ

ВЫБРАТЬ
5

ОБЪЕДИНИТЬ

ВЫБРАТЬ
6

ОБЪЕДИНИТЬ

ВЫБРАТЬ
7) КАК ЦИФРЫ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
(ЦИФРЫ3.ЦИФРА - 1) * 343 + (ЦИФРЫ2.ЦИФРА - 1) * 49 + (ЦИФРЫ.ЦИФРА - 1) * 7 + ЦИФРЫ1.ЦИФРА КАК ЧИСЛО
ПОМЕСТИТЬ ЧИСЛА
ИЗ
ЦИФРЫ КАК ЦИФРЫ,
ЦИФРЫ КАК ЦИФРЫ1,
ЦИФРЫ КАК ЦИФРЫ2,
ЦИФРЫ КАК ЦИФРЫ3
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(&ДатаНачала, ДЕНЬ, ЧИСЛА.ЧИСЛО - 1) КАК ДАТА
ПОМЕСТИТЬ ВТ_ВсеДатыПоДням
ИЗ
ЧИСЛА КАК ЧИСЛА
ГДЕ
ДОБАВИТЬКДАТЕ(&ДатаНачала, ДЕНЬ, ЧИСЛА.ЧИСЛО - 1) <= &ДатаОкончания
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВЫБОР
КОГДА &Периодичность = 0
ТОГДА НАЧАЛОПЕРИОДА(ВТ.ДАТА, ДЕНЬ)
КОГДА &Периодичность = 1
ТОГДА НАЧАЛОПЕРИОДА(ВТ.ДАТА, НЕДЕЛЯ)
КОГДА &Периодичность = 2
ТОГДА НАЧАЛОПЕРИОДА(ВТ.ДАТА, МЕСЯЦ)
КОГДА &Периодичность = 3
ТОГДА НАЧАЛОПЕРИОДА(ВТ.ДАТА, КВАРТАЛ)
КОГДА &Периодичность = 4
ТОГДА НАЧАЛОПЕРИОДА(ВТ.ДАТА, ПОЛУГОДИЕ)
КОГДА &Периодичность = 5
ТОГДА НАЧАЛОПЕРИОДА(ВТ.ДАТА, ГОД)
ИНАЧЕ НАЧАЛОПЕРИОДА(ВТ.ДАТА, МЕСЯЦ)
КОНЕЦ КАК НачалоНедели
ИЗ
ВТ_ВсеДатыПоДням КАК ВТ

СГРУППИРОВАТЬ ПО
ВЫБОР
КОГДА &Периодичность = 0
ТОГДА НАЧАЛОПЕРИОДА(ВТ.ДАТА, ДЕНЬ)
КОГДА &Периодичность = 1
ТОГДА НАЧАЛОПЕРИОДА(ВТ.ДАТА, НЕДЕЛЯ)
КОГДА &Периодичность = 2
ТОГДА НАЧАЛОПЕРИОДА(ВТ.ДАТА, МЕСЯЦ)
КОГДА &Периодичность = 3
ТОГДА НАЧАЛОПЕРИОДА(ВТ.ДАТА, КВАРТАЛ)
КОГДА &Периодичность = 4
ТОГДА НАЧАЛОПЕРИОДА(ВТ.ДАТА, ПОЛУГОДИЕ)
КОГДА &Периодичность = 5
ТОГДА НАЧАЛОПЕРИОДА(ВТ.ДАТА, ГОД)
ИНАЧЕ НАЧАЛОПЕРИОДА(ВТ.ДАТА, МЕСЯЦ)
КОНЕЦ

УПОРЯДОЧИТЬ ПО
НачалоНедели

Комментариев нет:

Отправить комментарий