Имя: Пароль:
1C
1С v8
Запрос работает как цикл поясните
,
0 sidalexsandr
 
03.12.15
17:32
Поясните на примере следующего запроса:
ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, 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 Мимохожий Однако
 
03.12.15
17:35
х.ня какая-то
2 Мэс33
 
03.12.15
17:35
Наливай да пей, что понимать то
3 Мэс33
 
03.12.15
17:36
(1) это не хня
4 Мимохожий Однако
 
03.12.15
17:37
Таааак, народ подтягивается ))
(0)До пятницы не дотерпел?
5 vhl
 
03.12.15
17:48
что пояснить то? Работает - не трожь!
6 mehfk
 
03.12.15
17:52
(0) Без бутылки не разберешься. Наливай!
7 Мэс33
 
03.12.15
17:54
(6) Что пьешь? Коньячок есть, есть водочка. Пиво скоро принесут...
8 Леха Дум
 
03.12.15
17:57
запрос как запрос, вернет список дат на каждый день от заданной даты
9 Nuobu
 
03.12.15
18:01
(8) ээх ты!
10 Мэс33
 
03.12.15
18:04
(8) Совести у тебя нет.
11 Nuobu
 
03.12.15
18:08
(8) Не дал человеку самому логически дойти и осознать всю глубину и красоту запросов.
Он, ведь, теперь по каждому вопросу будет ветки плодить!
12 Мэс33
 
03.12.15
18:10
(11) мы увидим много веток
13 su_mai
 
03.12.15
18:14
(0) Это что то Гениальное !
14 sidalexsandr
 
03.12.15
18:17
И так не одного ответа по теме.
15 mehfk
 
03.12.15
18:18
Ты б еще завтра пришел :)
16 letni88
 
03.12.15
18:24
предполагаю что создается нумерация
17 letni88
 
03.12.15
18:27
Хотя правильный ответ уже дан)
18 Lama12
 
03.12.15
18:29
Забавно :)
19 Музон Хиггса
 
03.12.15
18:51
Где-то я такое на sql видел.
20 Лефмихалыч
 
03.12.15
18:56
(0) что тебе пояснить-то?
21 su_mai
 
03.12.15
19:07
(0)
1. Запросы aa, bb, cc, dd задают массив чисел от 0 до 9
2. Запрос

ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КАК ЧислоИнтервала
ИЗ

строит таблицу (Т1) путем тета-соединение этих массивов, таблица содержит все возможные комбинации значений в четырех колонках чисел 0-9.

3. Потом для каждой строки таблицы вычисляется выражение:
aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d, которое в свою очередь представляет собой последовательность чисел от 0=(0000) до 9999, эти числа прибавляются к дате &НачалоПериода в качестве ДЕНЬ.

В результате получаем массив 10000 дат из которой выбираем те даты ГДЕ ДОБАВИТЬКДАТЕ(...) <= &КонецПериода
22 su_mai
 
03.12.15
19:08
(0) Можно провести рефакторинг исходного запроса, вынеся запрос формирующий массив чисел 0-9 в пакетный запрос, Наглядность выше:

ВЫБРАТЬ    0 КАК i ПОМЕСТИТЬ Массив ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, _1000.i * 1000 + _100.i * 100 + _10.i * 10 + _1.i) КАК ЧислоИнтервала
ИЗ
    Массив КАК _1000,
    Массив КАК _100,
    Массив КАК _10,
    Массив КАК _1
ГДЕ
    ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, _1000.i * 1000 + _100.i * 100 + _10.i * 10 + _1.i) <= &КонецПериода
23 Лефмихалыч
 
03.12.15
19:23
это называется "порождающий запрос"
http://catalog.mista.ru/public/251678/
http://catalog.mista.ru/public/90367/
24 sidalexsandr
 
03.12.15
19:43
(22) Как работает  тета-соединение ?
25 sidalexsandr
 
03.12.15
19:45
(23) Спасибо посмотрю
26 Лефмихалыч
 
03.12.15
20:08
(24) как декартово произведение множеств