Имя: Пароль:
1C
 
Не помогли бы разжевать логику работы данного запроса
0 inkvizitr
 
27.09.14
20:43
ЕСть запрос, который разбивает по дням любой заданный период, как его не читал не пойму его логику, как у этого шайтан запроса так получается?

ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КАК Период
{ВЫБРАТЬ
    Период}
ИЗ
    (ВЫБРАТЬ
        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 User_Agronom
 
27.09.14
20:48
Разбей на подзапросы и покури каждый.

Тупо выполни и глянь какая хреновина получается.
2 mastodont
 
27.09.14
21:04
(0) какая часть конкретно не понятна?
(1) +1
3 raykom
 
27.09.14
21:10
(0)Вот это реально троллинг в программировании )))

Как минимум ты многого нужного не запостил, например - "РАЗНОСТЬДАТ"

А как максимум - вся тайна - в разности выражений

ДОБАВИТЬКДАТЕ и РАЗНОСТЬДАТ
4 raykom
 
27.09.14
21:21
+(3)Но как факт - чувак, который написал это - реально классный кодер.
5 zak555
 
27.09.14
21:29
4ре таблицы с 10 строками каждая

делается полное соединение по ней
6 raykom
 
27.09.14
21:32
(5)Ты умен. Не сомневался.
Я однозначно подозревал, что речь идет о манипуляции с массивом данных записываемых в стабильный формат.

Но все равно - от кто это писанул - реально программист.
7 zak555
 
27.09.14
21:59
(6) а какие проблемы ?

формируем таблицу 4х10 000
далее строкой
ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КАК Период

формируем одну колонку, состоящую из
НачалоПериода
НачалоПериода + 1день
НачалоПериода + 2день
НачалоПериода + 3день
....
НачалоПериода + 9999день

ну а строкой
ГДЕ
    aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)

отсекаем лишнее
8 zak555
 
27.09.14
23:15
но проще переписать запрос в читаемый вид :


ВЫБРАТЬ
    0 КАК Колонка
ПОМЕСТИТЬ ВТ

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    1

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    2

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    3

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    4

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    5

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    6

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    7

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    8

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    9
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_тысячи.Колонка КАК Тысячи,
    ВТ_сотни.Колонка КАК Сотни,
    ВТ_десяток.Колонка КАК Десятки,
    ВТ_единиц.Колонка КАК Единицы
ПОМЕСТИТЬ ВТТ
ИЗ
    ВТ КАК ВТ_тысячи
        ПОЛНОЕ СОЕДИНЕНИЕ ВТ КАК ВТ_сотни
            ПОЛНОЕ СОЕДИНЕНИЕ ВТ КАК ВТ_десяток
                ПОЛНОЕ СОЕДИНЕНИЕ ВТ КАК ВТ_единиц
                ПО (ИСТИНА)
            ПО (ИСТИНА)
        ПО (ИСТИНА)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, ВТТ.Тысячи * 1000 + ВТТ.Сотни * 100 + ВТТ.Десятки * 10 + ВТТ.Единицы) КАК Период
    
ИЗ
    ВТТ КАК ВТТ
ГДЕ
    ВТТ.Тысячи * 1000 + ВТТ.Сотни * 100 + ВТТ.Десятки * 10 + ВТТ.Единицы <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)
9 Drac0
 
27.09.14
23:33
Не любой период, а период не более 27 лет с хвостиком.
10 zak555
 
27.09.14
23:41
(9) вот тебе почти на 274 года

ВЫБРАТЬ
    0 КАК Колонка
ПОМЕСТИТЬ ВТ

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    1

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    2

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    3

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    4

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    5

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    6

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    7

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    8

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    9
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_десяткиТысяч.Колонка КАК ДестяткиТысяч,
    ВТ_тысячи.Колонка КАК Тысячи,
    ВТ_сотни.Колонка КАК Сотни,
    ВТ_десяток.Колонка КАК Десятки,
    ВТ_единиц.Колонка КАК Единицы
ПОМЕСТИТЬ ВТТ
ИЗ
    ВТ КАК ВТ_десяткиТысяч
        ПОЛНОЕ СОЕДИНЕНИЕ ВТ КАК ВТ_тысячи
            ПОЛНОЕ СОЕДИНЕНИЕ ВТ КАК ВТ_сотни
                ПОЛНОЕ СОЕДИНЕНИЕ ВТ КАК ВТ_десяток
                    ПОЛНОЕ СОЕДИНЕНИЕ ВТ КАК ВТ_единиц
                    ПО (ИСТИНА)
                ПО (ИСТИНА)
            ПО (ИСТИНА)
        ПО (ИСТИНА)
;

//////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, ВТТ.ДестяткиТысяч *10000 + ВТТ.Тысячи * 1000 + ВТТ.Сотни * 100 + ВТТ.Десятки * 10 + ВТТ.Единицы) КАК Период
ИЗ
    ВТТ КАК ВТТ
ГДЕ
    ВТТ.ДестяткиТысяч *10000 + ВТТ.Тысячи * 1000 + ВТТ.Сотни * 100 + ВТТ.Десятки * 10 + ВТТ.Единицы <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)
11 Drac0
 
27.09.14
23:42
(10) Че там со скоростью? :-)
12 zak555
 
27.09.14
23:43
(11) летает
13 EvgeniuXP
 
28.09.14
00:02
(0) это уже не надо, пару галок ставишь и будет тебе запрос :)
14 Рэйв
 
28.09.14
00:08
Про Итоги Периодами уже говорили?  Или так потролили просто?:-)
15 zak555
 
28.09.14
00:23
(14) начинай