Имя: Пароль:
1C
1С v8
Помогите с запросом
0 Futarkh
 
05.09.11
15:44
Народ, всю голову сломал.
Есть какое то подразделение. Надо найти его головное подразделение. Глубина вложенности не известна. Столкните из ступора хоть чем нибудь
1 Futarkh
 
05.09.11
15:44
+(0) Надо найти подразделение Уровня 0, в которое текущее подразделение вложено
2 dumb851
 
05.09.11
15:47
рекурсия ;)
3 dumb851
 
05.09.11
15:47
ой.. не внимательно прочитал про запрос..
4 Jstunner
 
05.09.11
15:53
(0) в запросе, для неограниченного уровня вложенности, сделать не получится

есть вариент: ВЫБОР КОГДА Родитель = ЗНАЧЕНИЕ(ПустаяСсылка) ТОГДА Ссылка КОГДА Родитель.Родитель = ЗНАЧЕНИЕ(ПустаяСсылка) Тогда Родитель, и так N раз. пока не устанешь копипастить. Но, чтобы работало гарантировано, нужно ограничивать уровень

(2) зачем рекурсия?
5 Futarkh
 
05.09.11
15:59
(4) не эффективно. есть другие предложения?
6 Jstunner
 
05.09.11
15:59
(5) не эффективно? неужели?
7 hhhh
 
05.09.11
16:01
(5) заведи реквизит ГоловноеПодразделение
8 Futarkh
 
05.09.11
16:02
(5) Должно быть красивое решение, через соединение или еще как
9 Jstunner
 
05.09.11
16:04
(8) да, конечно, должно..
10 Futarkh
 
05.09.11
16:04
(5) Я же пишу, что уровень вложенности не известен. Если уровней 1000? Или конфигурация изменится и урвней станет еще больше? Переписывать запрос все время?
11 Jstunner
 
05.09.11
16:06
(10) читай внимательно (4):  "в запросе, для неограниченного уровня вложенности, сделать НЕ получится" и "чтобы работало гарантировано, НУЖНО ограничивать уровень"
12 Futarkh
 
05.09.11
16:12
(11) Это объективное мнение или личное?)))
13 Aprobator
 
05.09.11
16:18
Тупо и навскидку:

ВЫБРАТЬ
  Подразделения.Ссылка КАК ГоловноеПодразделение
ИЗ
  Справочники.ПодразделенияОрганизации КАК Подразделения
  СОЕДИНЕНИЕ
  (ВЫБРАТЬ &Подразделение КАК Подразделение) КАК ПодЗапрос
  ПО Подзапрос.Подразделение В ИЕРАРХИИ Подразделения.ГоловноеПодразделение
ГДЕ Подразделения.Родитель = ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизации.ПустаяСсылка)
14 Jstunner
 
05.09.11
16:20
(13) не взлетит
15 Жан Пердежон
 
05.09.11
16:29
добавь реквизит/свойство/РС
и при записи его обновляй
16 Valery
 
05.09.11
16:29
я заносил в ТЗ группы уровня 0 в одну колонку, в другую список значений с элементами входящими в группу 0.
а в запосе в цикле формировал строки

    Пока ВыбПодр.Следующий() Цикл
        Если ВыбПодр.Ссылка.Уровень()=0 Тогда
             Ур=ВыбПодр.Ссылка;
             СтрТЗ=ТЗ.Добавить();
             СтрТЗ.Группы=Новый СписокЗначений;
             СтрТЗ.Уровень=ВыбПодр.Ссылка;
             СтрТЗ.Группы.Добавить(ВЫбПодр.Ссылка);
       иначеЕсли ВыбПодр.Ссылка.ПринадлежитЭлементу(Ур) Тогда      
            СтрТЗ.Группы.Добавить(ВЫбПодр.Ссылка);
        КонецЕсли;
    КонецЦикла;
   
    ТекстЗапроса = "ВЫБРАТЬ  ЕстьNULL( Выбор";
                          ДЛя каждого стрТЗ из ТЗ цикл
                          Если СтрТЗ.Группы.Количество()>0 Тогда
                              ТекстЗапроса=ТекстЗапроса+"
                           | Когда  ОсновныеНачисленияРаботниковОрганизаций.ПодразделениеОрганизации в (&Групп"+ТЗ.Индекс(СтрТЗ)+ ")
                           | Тогда (&Уровень"+ТЗ.Индекс(СтрТЗ)+")";
                           ИНАче
                              ТекстЗапроса=ТекстЗапроса+"
                           | Когда  ОсновныеНачисленияРаботниковОрганизаций.ПодразделениеОрганизации = (&Уровень"+ТЗ.Индекс(СтрТЗ)+ ")
                           | Тогда (&Уровень"+ТЗ.Индекс(СтрТЗ)+")";

                           КонецЕсли;
                     
                           КонеццИкла;
17 Aprobator
 
05.09.11
16:30
а вообще в типовых конфах все уже есть. Главное все правильно слизать.
18 Futarkh
 
05.09.11
16:50
Подсказали делать через ИТОГИ ПО .. ТОЛЬКО ИЕРАРХИЯ, Выборка с обходом по группировкам и выборка только первого уровня
19 Aprobator
 
05.09.11
16:51
хм условие в ИЕРАРХИИ не работает что ли (ему вроде пофиг на уровень вложенности)?
20 Jstunner
 
05.09.11
16:53
(19) в условии (ГДЕ) работает, а вот в соединении (ПО) - фиг
21 Aprobator
 
05.09.11
17:14
(20) да ради бога, тогда так:

ВЫБРАТЬ
  Подразделения.Ссылка КАК ГоловноеПодразделение
ИЗ
  Справочники.ПодразделенияОрганизации КАК Подразделения
ГДЕ Подразделения.Родитель = ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизации.ПустаяСсылка)
И &Подразделение В ИЕРАРХИИ Подразделение.Ссылка

может правда с выразить поиграться придется для параметра.
22 kuza2000
 
05.09.11
17:21
(19), (20) Есть предположение, что В ИЕРАРХИИ работает по такому алгоритму:
1. Вычисляется список всех групп, включая подчиненные (до выполнения основного запроса!)
2. В ИЕРАРХИИ заменяется на ".Владелец В СПИСКЕ (<список>)

Из этого алгоритма как раз и выводятся следствия, где и как можно использовать, а как нельзя.

Это лишь предположение. Если есть факты, что это не так - в студию!
23 Шапокляк
 
05.09.11
17:24
(0) Запросом выбрать все подразделения первого уровня и проверить для каждого из них, входит ли наше.
24 kuza2000
 
05.09.11
17:24
(21) Попробовал - не работает:

Неверные параметры "В ИЕРАРХИИ(<?>..."

(22) Подтверждается :)
25 Jstunner
 
05.09.11
17:27
(22) подумай над этим

ВЫБРАТЬ
   Номенклатура.Ссылка
ИЗ
   Справочник.Номенклатура КАК Номенклатура
ГДЕ
   Номенклатура.Ссылка В ИЕРАРХИИ
           (ВЫБРАТЬ
               Справочник.Номенклатура.Ссылка
           ИЗ
               Справочник.Номенклатура
           ГДЕ
               Справочник.Номенклатура.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))
26 Aprobator
 
05.09.11
17:27
ВЫРАЗИТЬ(&Подразделение КАК Справочник.ПодразделенияОрганизации) В ИЕРАРХИИ...
27 kuza2000
 
05.09.11
17:31
(25) Не понял, к чему это?