Имя: Пароль:
1C
1С v8
Как получить родителя первого уровня?
,
0 RomaH
 
naïve
11.11.12
11:13
Иерархия групп и элементов
есть элемент справочника, при печати надо напечатать наименование группы первого уровня в которую входит этот элемент

как получить группу первого уровня?
1 golden-pack
 
11.11.12
11:16
рекурсия вестимо
2 Drac0
 
11.11.12
11:20
можно через ПолноеНаименование() вытащить. это если только имя нужно.
3 dclxvi
 
11.11.12
11:21
естьнул(Элемент.Родитель.Родитель.Родитель.Родитель.Родитель,
естьнул(Элемент.Родитель.Родитель.Родитель.Родитель,
естьнул(Элемент.Родитель.Родитель.Родитель,
естьнул(Элемент.Родитель.Родитель,
естьнул(Элемент.Родитель, &ПустаяСсылкаРодителя)))))
4 RomaH
 
naïve
11.11.12
11:24
Функция ПриложениеПриказа302н(Знач Родитель)
   
   Пока Истина Цикл
       РодительВерхнегоУровня = Родитель.Родитель;
       Если ЗначениеЗаполнено(РодительВерхнегоУровня) Тогда
           Родитель = РодительВерхнегоУровня;
       Иначе
           Прервать;
       КонецЕсли;
   КонецЦикла;
   
   Возврат Родитель;
   
КонецФункции
типа так?
а в запросе?
5 Лефмихалыч
 
11.11.12
11:26
6 Лефмихалыч
 
11.11.12
11:30
1С не умеет соединять по иерархии, по этому только рекурсией
7 Smallrat
 
11.11.12
12:11
(5) он имеет ввиду
СправочникОбъект.<Имя справочника>.ПолноеНаименование (CatalogObject.<Имя справочника>.FullDescr)
СправочникОбъект.<Имя справочника> (CatalogObject.<Имя справочника>)
ПолноеНаименование (FullDescr)
Синтаксис:

ПолноеНаименование()
Возвращаемое значение:

Тип: Строка.
Строка, включающая наименование элемента и наименования всех вышестоящих элементов.
Наименования выводятся слева направо, начиная с самого верхнего уровня, разделяются символом "/".
Описание:

Получает наименование элемента справочника с учетом наименований всех вышестоящих элементов.

Доступность:

Сервер, толстый клиент, внешнее соединение.
8 RomaH
 
naïve
11.11.12
12:24
а может так?
ВЫБРАТЬ
   ВредныеПроизводственныеФакторыИРаботы.Ссылка,
   ВредныеПроизводственныеФакторыИРаботы.Родитель,
   ВредныеПроизводственныеФакторыИРаботы.КодПунктаВредности
ПОМЕСТИТЬ втВерхнийУровень
ИЗ
   Справочник.ВредныеПроизводственныеФакторыИРаботы КАК ВредныеПроизводственныеФакторыИРаботы
ГДЕ
   ВредныеПроизводственныеФакторыИРаботы.Родитель = &Родитель
   И ВредныеПроизводственныеФакторыИРаботы.Владелец = &Владелец
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ВредныеПроизводственныеФакторыИРаботы.Ссылка,
   втВерхнийУровень.Ссылка КАК Ссылка1,
   втВерхнийУровень.КодПунктаВредности
ИЗ
   Справочник.ВредныеПроизводственныеФакторыИРаботы КАК ВредныеПроизводственныеФакторыИРаботы
       ЛЕВОЕ СОЕДИНЕНИЕ втВерхнийУровень КАК втВерхнийУровень
       ПО ВредныеПроизводственныеФакторыИРаботы.Ссылка В ИЕРАРХИИ(ВЫБРАТЬ втВерхнийУровень.Ссылка ИЗ втВерхнийУровень КАК втВерхнийУровень)
9 ammpryanik
 
11.11.12
12:25
офигеть это знает даже такой рак как я...
10 vde69
 
11.11.12
12:31
ВЫБРАТЬ
   Блоки.Ссылка КАК Ссылка
ИЗ
   Справочник.Блоки КАК Блоки
ГДЕ
   Блоки.Ссылка В ИЕРАРХИИ(&Ссылка)
   И Блоки.Родитель.Ссылка ЕСТЬ NULL
11 vde69
 
11.11.12
12:32
(10) вру :)
12 Мизантроп
 
11.11.12
12:34
Функция глРодитель(Элем) Экспорт
   Возврат ?(Элем.Уровень() = 0,Элем,глРодитель(Элем.Родитель));
КонецФункции
13 Smallrat
 
11.11.12
12:50
+(7) а понял. сорри
14 m-serg74
 
11.11.12
12:52
(8) и че? получилось соединение В ИЕРАРХИИ?
15 i-rek
 
11.11.12
13:20
а помните недавно обсуждали самый необыкновенный код ? пару недель назад тема была. Там был код в одну строку для получения родителя любого уровня
16 i-rek
 
11.11.12
13:21
через шаблон, стрзаменить и функцию которая выдаёт N пробелов
17 Smallrat
 
11.11.12
14:04
(16) он для 7-ки. Для 8-ки вроде не получится его в одну строку сделать - строку из заданного количества пробелов форматом не получить.
18 Лефмихалыч
 
11.11.12
14:18
+(5) Через полное наименование можно что-то получить, только, если гарантировать, что на верхнем уровне не будет групп:
1. С пустыми наименованиями
2. С одинаковыми наименованиями
3. С наименованием, содержащим "/"
19 Fragster
 
гуру
11.11.12
14:21
20 Лефмихалыч
 
11.11.12
14:25
(17) смари

ЗаданноеКоличествоПробелов = 46;
ОписаниеТИповСТроки = Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(ЗаданноеКоличествоПробелов,ДопустимаяДлина.Фиксированная));
СтрокаСЗаданнымКоличествомПробелов = ОписаниеТИповСТроки.ПривестиЗначение("");
Сообщить(""""+СтрокаСЗаданнымКоличествомПробелов+"""");
Сообщить(""""+СтрДлина(СтрокаСЗаданнымКоличествомПробелов)+"""");
21 Bolik1979
 
11.11.12
15:24
Вычислить("Номенклатура" + СтрЗаменить(Формат(0,"ЧЦ=" + Строка(Номенклатура.Уровень()) + "; ЧН=; ЧВН=; ЧГ="), "0", ".Родитель"))
(с) Рупор абсурда
22 Бешеная Нога
 
11.11.12
18:10
(21) красава :)
23 RomaH
 
naïve
12.11.12
07:54
(14) да, в (8) рабочий код, в (10) - не рабочий
24 RomaH
 
naïve
12.11.12
07:54
+(23) ну немного допилить (8) остается
25 Defender aka LINN
 
12.11.12
08:23

Функция ПолучитьРодителя(Ссылка)
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    Контрагенты.Ссылка КАК Ссылка
   |ИЗ
   |    Справочник.Контрагенты КАК Контрагенты
   |ГДЕ
   |    Контрагенты.Ссылка = &Ссылка
   |ИТОГИ ПО
   |    Ссылка ТОЛЬКО ИЕРАРХИЯ";
   Запрос.УстановитьПараметр("Ссылка", Ссылка);
   Выборка = Запрос.Выполнить().Выбрать();
   Выборка.Следующий();
   
   Возврат Выборка.Ссылка;
КонецФункции
26 Lenka_Boo
 
12.11.12
08:35
(0)
1. запрос по условию ЭтоГруппа
2. выборка из результата во временную таблицу по Результат.Ссылка.Уровень() в цикле.
3. Временную таблицу используем дальше.

Не?
27 dmpl
 
12.11.12
08:39
(4) Эту функцию писали индусы.
28 Мизантроп
 
12.11.12
08:41
Функция ПолучитьВерхнегоРодителя(Ссылка)
 Если не ЗначениеЗаполнено(Ссылка.Родитель) Тогда
    Возврат Ссылка
 Иначе
    Возврат ПолучитьВерхнегоРодителя(Ссылка.Родитель)
 КонецЕсли;
КонецФункции
29 Smallrat
 
12.11.12
11:26
(20) Это же две строки ?
30 Smallrat
 
12.11.12
12:44
Попробовал переписать (21) на 8-ку

Не получается найти замену функции Шаблон(), в 8-ке есть только аналогичная процедура.

Получилось так:

Перем ВерхнийРодитель;
Выполнить("ВерхнийРодитель = Номенклатура"+СтрЗаменить(Формат(0,"ЧЦ=" + Строка(Номенклатура.Уровень()) + "; ЧН=; ЧВН=; ЧГ="),"0", ".Родитель"));
31 Smallrat
 
12.11.12
12:46
мля - я надо научится читать сообщения.
перписывал
ЗначениеИзСтрокиВнутр(Шаблон("[ЗначениеВСтрокуВнутр(Спр"+СтрЗаменить(Формат("","С"+(Спр.Уровень()-1))," ",".Родитель")+")]"));
32 Smallrat
 
12.11.12
12:46
а получил то что и написано в (21)
мля((
33 mikecool
 
12.11.12
12:47
добавить реквизит - родитель верхнего уровня
заполнять в передзаписью в модуле
заполнить и радоваться щастью
2 + 2 = 3.9999999999999999999999999999999...