Имя: Пароль:
1C
1С v8
Разность дат в результате запроса
0 demoninf
 
24.09.13
13:47
Здравствуйте.
В таблице у меня есть одна строка и две колонки, допустим, Дата1 и Дата2, примерно так:

Дата1          Дата2
2013-07-01     2013-09-01

Никак не соображу, каким запросом получить из этого такой результат:
Дата3
2013-07-01
2013-08-01
2013-09-01

Буду благодарен за идеи.
1 butterbean
 
24.09.13
13:48
а откуда 2013-08-01 ??
2 Maxus43
 
24.09.13
13:49
(1) между ними она
(0) в запросе надо?
3 demoninf
 
24.09.13
13:53
(2) Да, в запросе надо
4 Maxus43
 
24.09.13
13:56
(3) самое простое - использовать ПроизводственныйКалендарь, если есть в конфе. Иначе достаточно муторно... надо создать в запросе таблицу дат, и оттуда дёргать. в СКД есть дополнение периода ещё, надо смотреть
5 чувак
 
24.09.13
14:07
(0) Автор, почему именно в запросе? Есть какая та причина весомая?
6 demoninf
 
24.09.13
14:08
(4) Календаря нет (БГУ 1.0), итоги ПЕРИОДАМИ тоже не подходят, мне эту ВТ потом в других дальнейших запросах использовать.
(5) Хочется красиво одним запросом все сделать. Не получится - так не получится
7 Classic
 
24.09.13
14:16
А что значит "между ними"?
если например
Дата1 01.01.2013
Дата2 04.01.2013
Что должно быть в Дата3?
8 Maxus43
 
24.09.13
14:17
(7)
01.01
02.01
03.01
04.01
9 Maxus43
 
24.09.13
14:18
хотя не, короче у него каждый месяц надо вывести видимо, между датами. Я сначала подумал по дням, а не месяцам
10 demoninf
 
24.09.13
14:20
(7) Только месяца
(9) да, именно так

Вроде вот так получилось:
[CODE]
ВЫБРАТЬ
    ДАТАВРЕМЯ(2013, 5, 1) КАК ДатаНачала,
    ДАТАВРЕМЯ(2013, 5, 10) КАК ДатаОкончания
ПОМЕСТИТЬ ВТ

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ДАТАВРЕМЯ(2013, 8, 1),
    ДАТАВРЕМЯ(2013, 9, 1)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(Т1.МинНач, МЕСЯЦ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КАК Период
ИЗ
    (ВЫБРАТЬ
        МИНИМУМ(ВТ.ДатаНачала) КАК МинНач,
        МАКСИМУМ(ВТ.ДатаОкончания) КАК МаксОконч
    ИЗ
        ВТ КАК ВТ) КАК Т1
        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            0 КАК a
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            1
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            2
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            3
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            4
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            5
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            6
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            7
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            8
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            9) КАК aa
        ПО (ИСТИНА)
        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            0 КАК b
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            1
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            2
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            3
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            4
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            5
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            6
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            7
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            8
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            9) КАК bb
        ПО (ИСТИНА)
        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            0 КАК c
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            1
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            2
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            3
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            4
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            5
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            6
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            7
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            8
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            9) КАК cc
        ПО (ИСТИНА)
        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            0 КАК d
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            1
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            2
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            3
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            4
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            5
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            6
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            7
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            8
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            9) КАК dd
        ПО (ИСТИНА)
ГДЕ
    aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(Т1.МинНач, Т1.МаксОконч, МЕСЯЦ)
[/CODE]
11 Classic
 
24.09.13
14:20
(8)
Хочется послушать ТСа:)
12 demoninf
 
24.09.13
14:21
Сорри за косое форматирование. Буду благодарен, если подскажете, каким тегом здесь правильно форматировать код
13 Classic
 
24.09.13
14:21
(10)
Ну да. Делаем сначала кучу месяцов, а потом соединяем.
Только я бы всю эту бодягу не копировал. Зачем тебе делать 1000 месяцев?
14 Classic
 
24.09.13
14:22
Даже 10000
15 Maxus43
 
24.09.13
14:27
ага, там таблица дат, по дням. с месяцами легче, их 12 всего
16 demoninf
 
24.09.13
14:29
(15) Не известно наверняка, сколько месяцев будет между датами. Для простоты возьму 100
17 mistеr
 
24.09.13
15:53
(16) Если ВТ из десяти строк соединить с собой три раза, получится 1000 строк. И т.д.
18 demoninf
 
24.09.13
16:37
(17) Ну и пусть, на производительности это не сказывается, в итоге запрос возвращает как раз тот результат, который мне нужен