Имя: Пароль:
1C
1С v8
Сложный запрос
0 tempaccount
 
06.09.13
14:11
Товарищи, предстоит сложный запрос.

Есть справочник Дома, содержащий его наименования.
Есть РС плана и РС фактов, в который заносятся по периодам Ресурс которых График, как проверить пустые ли у них графикики?

П.с. Заранее спасибо, и прошу прощение за невнятное изложение.
1 butterbean
 
06.09.13
14:13
нифига не понятно, но вроде-бы нужно просто запрос к СрезПоследних + отбор по График = ПустоеЗначениеГрафика
2 Wobland
 
06.09.13
14:13
ужас какой..
соединить и есть NULL?
3 tempaccount
 
06.09.13
14:17
"ПланГрафикРаботСрезПоследних.График.Ссылка = Неопределенно"
Это условие проверит, существует ли график для выбранного дома и периода?
4 butterbean
 
06.09.13
14:18
(3) нет..
что-то типа
ПланГрафикРаботСрезПоследних.График = ЗНАЧЕНИЕ(Справочник.Графики.ПустаяСсылка)
5 z0001
 
06.09.13
14:29
(0)выбрать  те у которых есть и потом через "не в"
6 z0001
 
06.09.13
14:30
кстати о птичках - кто то знает насколько шутсро индексы используются при  сравнениях с NULL?
7 tempaccount
 
06.09.13
14:43
Прошу прощения, сначала начну:

(Игра слов, т.к. пойду я с конца :) )

Результат (В идеале) запроса, хотелось бы получить такой:

1) Наименование дома, из справочника ДУДома.
2) Массив связанный с работами, ссылающимися к дом из Регистра Сведений ПланРабот
3) Массив связанный с фактичискими работами (по дням) из РС ФактРабот
4) В результат попадают только те дома, к которым есть хотя бы один факт или план.

Придется объединять все три таблици. Хотя в первую очередь нужно просто сделать, хотелось бы узнать и как правильно.
8 z0001
 
06.09.13
14:44
(7)ты не можешь даже начать? )))
9 evorle145
 
06.09.13
14:46
(0), отложи до понедельника.
10 hhhh
 
06.09.13
14:47
(7) сложный запрос - это когда 300 таблиц, а у вас 3 таблицы. Непохоже на сложный.
11 z0001
 
06.09.13
14:48
кури select )))
12 tempaccount
 
06.09.13
14:49
(10) Сложный для меня и понимания, разумеется.
(8) Пру минут назад я был уверен, что смог начать.
Но когда в результате посыпалось название дома (Которое я сначала и хотел вывести) в количестве ссылок на него из РегистраСведений, я понял, что нужно читать еще
13 MSOliver
 
06.09.13
14:50
(7) изучить как делается срез последних
14 tempaccount
 
06.09.13
14:52
Нужно было группировать
15 tempaccount
 
06.09.13
14:54
"ВЫБРАТЬ
    ДУДома.Наименование
ИЗ
    РегистрСведений.ПланГрафикРабот.СрезПоследних КАК ПланГрафикРаботСрезПоследних
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДУДома КАК ДУДома
        ПО ПланГрафикРаботСрезПоследних.Дом = ДУДома.Ссылка
СГРУППИРОВАТЬ ПО
    ДУДома.Наименование"
Вроде бы верно, само-собой без условия периода для среза и тому подобных
16 tempaccount
 
06.09.13
14:59
Не хочет объединиться с третьей таблицей ФАКТ дни.
И как (если соединю) поставить условие существования либо ПЛАНА либо ДНЯ, пока не понимаю, т.к. запрос выше вообще условие Где не содержит, а работает
17 tempaccount
 
06.09.13
15:01
"ВЫБРАТЬ
    ДУДома.Наименование
ИЗ
    РегистрСведений.ПланГрафикРабот.СрезПоследних КАК ПланГрафикРаботСрезПоследних
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДУДома КАК ДУДома
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПланФактДни КАК ПланФактДни
            ПО ДУДома.Ссылка = ПланФактДни.Дом.Ссылка
        ПО ПланГрафикРаботСрезПоследних.Дом = ДУДома.Ссылка

СГРУППИРОВАТЬ ПО
    ДУДома.Наименование"
18 hhhh
 
06.09.13
15:01
вот так правильно

"ВЫБРАТЬ РАЗЛИЧНЫЕ
    ПланГрафикРаботСрезПоследних.Дом
ИЗ
    РегистрСведений.ПланГрафикРабот.СрезПоследних КАК ПланГрафикРаботСрезПоследних

что вы размахнулись?
19 tempaccount
 
06.09.13
15:11
(18)
Причина размаха: 2 регистра, а не 1 как у Вас. И дом должен идти, даже если один пуст, а другой нет, то дом проходит
20 tempaccount
 
06.09.13
15:30
"ВЫБРАТЬ
    ДУДома.Наименование
ИЗ
    РегистрСведений.ПланФактДни КАК ПланФактДни
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДУДома КАК ДУДома
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПланГрафикРабот.СрезПоследних КАК ПланГрафикРаботСрезПоследних
            ПО ДУДома.Ссылка = ПланГрафикРаботСрезПоследних.Дом.Ссылка
        ПО ПланФактДни.Дом.Ссылка = ДУДома.Ссылка

СГРУППИРОВАТЬ ПО
    ДУДома.Наименование"

Этот запрос выводит Только те в которых заполнены ПланФактДни

А если (17) то только в РегистрСведений.ПланГрафикРабот.СрезПоследних
21 tempaccount
 
06.09.13
15:35
Чую, иду я не по тому пути. В условие бы перекинуть, а е объединять таблици
22 hhhh
 
06.09.13
15:41
(21) ну вот же. С NULL, как вам все пишут

ВЫБРАТЬ РАЗЛИЧНЫЕ
    ДурДома.Ссылка
ИЗ
    Справочник.ДУДома КАК ДурДома
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПланФактДни КАК ПланФактДни
          ПО ДурДома.Ссылка = ПланГрафикРаботСрезПоследних.Дом
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПланГрафикРабот.СрезПоследних КАК ПланГрафикРаботСрезПоследних
          
        ПО ПланГрафикРаботСрезПоследних.Дом = ДурДома.Ссылка

ГДЕ
   НЕ (ПланФактДни.Дом ЕСТЬ NULL) ИЛИ НЕ (ПланГрафикРаботСрезПоследних.Дом ЕСТЬ NULL)
23 hhhh
 
06.09.13
15:42
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПланФактДни КАК ПланФактДни
          ПО ДурДома.Ссылка = ПланФактДни.Дом
24 tempaccount
 
06.09.13
15:50
25 tempaccount
 
06.09.13
15:55
(23) Сюда не попадают те, что из плана
26 hhhh
 
06.09.13
16:19
из какого?
27 tempaccount
 
06.09.13
16:22
ВЫБРАТЬ
    |    ПланГрафикРаботСрезПоследних.Дом
    |ПОМЕСТИТЬ ВТДома
    |ИЗ
    |    РегистрСведений.ПланГрафикРабот.СрезПоследних КАК ПланГрафикРаботСрезПоследних
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    ПланФактДни.Дом
    |ИЗ
    |    РегистрСведений.ПланФактДни КАК ПланФактДни
    |
    |СГРУППИРОВАТЬ ПО
    |    ПланФактДни.Дом
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ВТДома.Дом
    |ИЗ
    |    ВТДома КАК ВТДома
    |
    |СГРУППИРОВАТЬ ПО
    |    ВТДома.Дом



Во, заработало. Пойду былокодить дальше. До скорого
(Т.к. выводит только дома, а не все связанные с ними работы и тд)
28 z0001
 
06.09.13
17:43
(21)профессиАнал )))
29 z0001
 
06.09.13
17:43
(28)  в (27)