Имя: Пароль:
1C
1С v8
Как получить родителя верхней группы спр.подразделенияорганизаций зуп 2.5
,
0 romantic1984s
 
10.06.15
05:17
Всем привет.Есть документ приказ о приеме на работу.В нем нужно отражать и подразделение и родителя группы.

пробовал запрос


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



Но почему то не идет.
1 Лодырь
 
10.06.15
05:23
Выбери в цикле ) не парь себе голову запросом.
2 romantic1984s
 
10.06.15
05:24
Вопрос снимаю.Зашел с другой стороны.





ВЫБРАТЬ
    ПодразделенияОрганизаций.Ссылка,
    ВЫБОР
        КОГДА ПодразделенияОрганизаций.Родитель = ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)
            ТОГДА ПодразделенияОрганизаций.Ссылка
        КОГДА ПодразделенияОрганизаций.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)
            ТОГДА ПодразделенияОрганизаций.Родитель
        КОГДА ПодразделенияОрганизаций.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)
            ТОГДА ПодразделенияОрганизаций.Родитель.Родитель
        ИНАЧЕ ПодразделенияОрганизаций.Родитель.Родитель.Родитель
    КОНЕЦ КАК РодительВерхнегоУровня
ИЗ
    Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
ГДЕ
    ПодразделенияОрганизаций.Ссылка В(&ПодразделенияОрганизаций)
3 romantic1984s
 
10.06.15
05:25
Пробовал функцию задать типа :


Функция РодительВерхнегоУровня(Ссылка) Экспорт
    
    ВыбПодразделение = Ссылка.ТекущееПодразделениеОрганизации;
    Если ВыбПодразделение.Уровень() = 0 Тогда
        Департамент = ВыбПодразделение;
    Иначе
        Департамент = Справочники.ПодразделенияОрганизаций.НайтиПоКоду(Лев(ВыбПодразделение.ПолныйКод(), Найти(ВыбПодразделение.ПолныйКод(),"/")-1)).Ссылка;
    КонецЕсли;
    
    Возврат Департамент;
    
КонецФункции





Но что то он спотыкается на уровнях.
4 Лодырь
 
10.06.15
05:27
(3) Тяжело вам там живется..
5 romantic1984s
 
10.06.15
05:29
(4) а как бы ты предложил?Напиши свой вариант.
6 romantic1984s
 
10.06.15
05:30
(4) в зупе там запрос типовой идет только на подразделение.Как ни крути для родителя все равно запрос делать,так почему бы не получить сразу верхнего в нем?
7 Seeker
 
10.06.15
05:33
(0) можно сделать рекурсию

Функция ПолучитьРодителяВерхнегоУровня(Ссылка)
    
    ВыбПодразделение = Ссылка.ТекущееПодразделениеОрганизации;
    Если ВыбПодразделение.Уровень() <> 0 Тогда
        ПолучитьРодителяВерхнегоУровня(ВыбПодразделение);
    Иначе
         Возврат ВыбПодразделение;
    КонецЕсли;

КонецФункции

что то типа того... не ручаюсь за работу, просто идея.
8 romantic1984s
 
10.06.15
05:34
(7) Логично! в том то и дело,что он уровни вообще не видел.
9 Лодырь
 
10.06.15
05:39
(5) Ну я предложил. В самом первом посте.
10 SeraFim
 
10.06.15
06:00
Присоединяюсь к варианту с циклом)

Но можно так:
Выгребаем всех родителей верхнего уровня.
Соединяем подразделения с родителями - чтобы подразделение входило в иерархию родителя.

Ну или в коде Есть такая штука как "Полное наименование" - выдает полный путь со всеми родителями) Остается только это строчку переделать, вырезать из неё то что нужно)
11 echo77
 
10.06.15
07:27
В запросе итоги по пдразделению , только иерархия - получишь всех родителей - первый верхнего уровня
12 Popkorm
 
10.06.15
08:04
Можно поигратся с ПренадлежитЭлементу(),либо рекурсия...
13 patria0muerte
 
10.06.15
08:08
Как то так можно:

Функция ПолучитьРодителяВерхнегоУровня(Знач Подразделение)
    Пока НЕ Подразделение = Справочники.Подразделения.ПустаяСсылка() Цикл
        Подразделение = Подразделение.Родитель;
    КонецЦикла
    Возврат Подразделение;
КонецФункции
14 echo77
 
10.06.15
08:10
ВЫБРАТЬ
    ПодразделенияОрганизаций.Ссылка КАК Ссылка
ИЗ
    Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
ГДЕ
    ПодразделенияОрганизаций.Ссылка = &ПодразделениеОрганизации
ИТОГИ ПО
    Ссылка ТОЛЬКО ИЕРАРХИЯ
15 Ildarovich
 
10.06.15
11:07
(7) Не рекомендую проверять ВыбПодразделение.Уровень() > 0.
Уровень - очень затратная по времени функция. Нужно родителя на пустую ссылку в этой функции проверять.
16 Ildarovich
 
10.06.15
11:20
Можете посмотреть статью http://catalog.mista.ru/public/160707/ . В разделе 3 там решается именно эту задача и именно в чисто запросной технике.
Вот запрос, который там используется:
ВЫБРАТЬ
    ПодразделенияОрганизаций.Родитель КАК НачалоДуги,
    ПодразделенияОрганизаций.Ссылка КАК КонецДуги
ПОМЕСТИТЬ ЗамыканияДлины1
ИЗ
    Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
ГДЕ
    ПодразделенияОрганизаций.Родитель <> ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    ПодразделенияОрганизаций.Ссылка,
    ПодразделенияОрганизаций.Ссылка
ИЗ
    Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ПерваяДуга.НачалоДуги,
    ВтораяДуга.КонецДуги
ПОМЕСТИТЬ ЗамыканияДлины2
ИЗ
    ЗамыканияДлины1 КАК ПерваяДуга
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЗамыканияДлины1 КАК ВтораяДуга
        ПО ПерваяДуга.КонецДуги = ВтораяДуга.НачалоДуги
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ПерваяДуга.НачалоДуги,
    ВтораяДуга.КонецДуги
ПОМЕСТИТЬ ЗамыканияДлины4
ИЗ
    ЗамыканияДлины2 КАК ПерваяДуга
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЗамыканияДлины2 КАК ВтораяДуга
        ПО ПерваяДуга.КонецДуги = ВтораяДуга.НачалоДуги
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ПерваяДуга.НачалоДуги,
    ВтораяДуга.КонецДуги
ПОМЕСТИТЬ ЗамыканияДлины8
ИЗ
    ЗамыканияДлины4 КАК ПерваяДуга
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЗамыканияДлины4 КАК ВтораяДуга
        ПО ПерваяДуга.КонецДуги = ВтораяДуга.НачалоДуги
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЗамыканияДлины8.КонецДуги КАК Подразделение,
    ЗамыканияДлины8.НачалоДуги КАК РодительВерхнегоУровня
ИЗ
    ЗамыканияДлины8 КАК ЗамыканияДлины8
ГДЕ
    ЗамыканияДлины8.НачалоДуги <> ЗамыканияДлины8.КонецДуги
    И ЗамыканияДлины8.НачалоДуги.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
Программист всегда исправляет последнюю ошибку.