Имя: Пароль:
1C
1C 7.7
v7: Подскажите как получить всех родителей элемента справочника
, ,
0 kostya_77
 
23.08.16
10:43
Подскажите как получить всех родителей элемента справочника
1 Ёпрст
 
23.08.16
10:45
рекурсией
2 Горогуля
 
23.08.16
10:45
получать родителя, пока он не пустой. или полный путь(?)
3 Ёпрст
 
23.08.16
10:45
Либо ПолныйКод()
4 Злопчинский
 
23.08.16
10:46
(1) +1
5 kostya_77
 
23.08.16
10:46
можно пример рекурсии?
6 Это_mike
 
23.08.16
10:47
(5) Для того, чтобы понять, что такое рекурсия - нужно понять, что такое рекурсия.
7 DDwe
 
23.08.16
10:47
(5)
#include <iostream>

size_t fact(size_t n)
{
    if(n==0) return 1;
    return n*fact(n-1);
}

int main()
{
    std::cout << fact(12) << std::endl;
    return 0;
}
8 Горогуля
 
23.08.16
10:47
(5) Коктейль рекурсивный. Его состав: 10% спирта, 30% воды и 60% коктейля рекурсивного.
9 Горогуля
 
23.08.16
10:48
10 DDwe
 
23.08.16
10:49
(5)
def short_story():
    print("У попа была собака, он ее любил.")
    print("Она съела кусок мяса, он ее убил,")
    print("В землю закопал и надпись написал:")
    short_story()
11 Это_mike
 
23.08.16
10:49
(9) сепульки - уже не рекурсия, а замкнутый граф
12 DDwe
 
23.08.16
10:50
(5)

(defun my-copy-tree (D)
  (cond ((null D) nil)
        ((atom D) D)
        (t (cons (my-copy-tree (car D))
                 (my-copy-tree (cdr D))))))
13 Ёпрст
 
23.08.16
10:50
(5)

Функция ВернутьРодителя(ССылка)
   Если ПустоеЗначение(ССылка) = 0 Тогда
      Возврат ВернутьРодителя(ССылка.Родитель);
   Иначе
      Возврат "";
КонецФункции
14 Горогуля
 
23.08.16
10:51
(11) а рекурсия - это замкнутый граф без рёбер, состоящий из одной вершины?
15 kostya_77
 
23.08.16
10:51
в 1с8 я знаю как, а для 1с7?
16 DDwe
 
23.08.16
10:51
(5)

Procedure Power (X: real; N: integer; var Y: real);
Begin
   If N=0 then
      Y:= 1
   Else Begin Power(X, N-1,Y);
      Y:= Y*X;
   End ;
End ;
17 DDwe
 
23.08.16
10:52
(15) Что как?
18 Ёпрст
 
23.08.16
10:52
(15) Та ты шо ?
19 Горогуля
 
23.08.16
10:53
(15) а как в 8?
20 Злопчинский
 
23.08.16
10:53
(15) аналогично, коллека!
21 vyaz
 
23.08.16
10:53
запросом можно
22 Это_mike
 
23.08.16
10:54
(14) угу. вырожденный
23 Горогуля
 
23.08.16
10:54
(21) иногда
24 DDwe
 
23.08.16
10:55
(21) Зачем пихать запрос туда где он не нужен?
25 DDwe
 
23.08.16
10:59
Всё, все выдохлись с помощью? А бедняга ТС делай что хочешь?
26 Горогуля
 
23.08.16
11:00
(25) сейчас он скопипастит у Ёпрста, поправит ошибку и скажем спасибо
27 DDwe
 
23.08.16
11:01
(26) Кому скажем?
28 vyaz
 
23.08.16
11:02
(24) а что не так?
29 vyaz
 
23.08.16
11:03
+28 ИТОГИ ПО Ссылка ТОЛЬКО ИЕРАРХИЯ
30 kostya_77
 
23.08.16
11:05
так что никто примера получений родителя верхнего уровня в 1с7 не приведет?
31 vyaz
 
23.08.16
11:07
+29 блин... клюшки проглядел :)
32 DDwe
 
23.08.16
11:09
(30) Чем тебе (13) не понравилось?
33 Dmitrii
 
гуру
23.08.16
11:09
(0)
ТекущийЭлементНоменклатуры = ЭлементНоменклатура;
Запрос = Новый Запрос("ВЫБРАТЬ 
                      | Номенклатура.Родитель, 
                      | Номенклатура.Родитель.Родитель, 
                      | Номенклатура.Родитель.Родитель.Родитель, 
                      | Номенклатура.Родитель.Родитель.Родитель.Родитель, 
                      | Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель 
                      |ИЗ 
                      | Справочник.Номенклатура КАК Номенклатура 
                      |
                      |ГДЕ 
                      | Номенклатура.Ссылка = &ТекущийЭлементНоменклатуры";
Пока Истина Цикл
    Запрос.УстановитьПараметр("ТекущийЭлементНоменклатуры", ТекущийЭлементНоменклатуры); 
    Результат = Запрос.Выполнить(); 
    Если Результат.Пустой() Тогда 
        Прервать; 
    КонецЕсли; 
    Выборка = Результат.Выбрать(); 
    Выборка.Следующий(); 
    Для НомерКолонки = 0 По Результат.Колонки.Количество() - 1 Цикл 
        ТекущийЭлементНоменклатуры = Выборка[НомерКолонки]; 
        Если ТекущийЭлементНоменклатуры = Справочники.Номенклатура.ПустаяСсылка() Тогда 
            Прервать; 
        Иначе 
            Сообщить(ТекущийЭлементНоменклатуры); 
        КонецЕсли; 
    КонецЦикла; 

    Если ТекущийЭлементНоменклатуры = Справочники.Номенклатура.ПустаяСсылка() Тогда 
        Прервать; 
    КонецЕсли;
КонецЦикла;

http://its.1c.ru/db/metod8dev/content/2659/hdoc/_top/%E2%F1%E5%20%F0%EE%E4%E8%F2%E5%EB%E8%20%F1%EF%F0%E0%E2%EE%F7%ED%E8%EA
34 DDwe
 
23.08.16
11:10
(33) Еще один? Там 77
35 Горогуля
 
23.08.16
11:10
(30) а сам?
36 Рэйв
 
23.08.16
11:11
вот вы мозг загадили тс
:-))
37 DDwe
 
23.08.16
11:12
(36) Было, что загаживать?
38 Это_mike
 
23.08.16
11:12
(36) был бы мозг - не было б таких вопросов...
39 Рэйв
 
23.08.16
11:14
(37)(38)Ну ладно, пусть переваривает:-)...Посмотрим что скажет
40 Горогуля
 
23.08.16
11:14
(37) (38) спинной
41 Ёпрст
 
23.08.16
11:15
(30) самый верхний ?
Тогда так:

ВерхнийРодитель=ЗначениеИзСтрокиВнутр(Шаблон("[ЗначениеВСтрокуВнутр(Спр"+СтрЗаменить(Формат("","С"+(Спр.Уровень()-1))," ",".Родитель")+")]"));
©РупорАбсурда

или так:



род=ТекущийЭлемент();
Пока род.Родитель.Выбран()=1 цикл
  Род=Род.Родитель;
КонецЦикла;
сообщить(Род.Наименование);
42 aka AMIGO
 
23.08.16
11:15
(30) Ну, вот еще один способ:
ТвойЭлементСправочника.ПолноеНаименование();
А лучше-то - как в (3)
псле чего разложить полученную строку в СЗ, и уж найти первый элемент по коду
43 silent person
 
23.08.16
11:17
Процедура ПолучитьРодителя(ТекЭлемент)
    Если  ТекЭлемент.Уровень()>1 Тогда
        Сообщить(ТекЭлемент.Родитель);
        ПолучитьРодителя(ТекЭлемент.Родитель)
    КонецЕсли;
КонецПроцедуры
44 aka AMIGO
 
23.08.16
11:18
+42 А, надо всех родителей? Тогда по полученному СЗ найти по коду и вывести n-1 значений, кроме последнего.
45 Ёпрст
 
23.08.16
11:18
Надо уже новые ники подставлять, из прошлого:

(24)Nag:    А как получить полное дерево? :)
(25)Рупор абсурда :(24) Тут много таких ..., но самые полные, по-моему, это СаШка и Алекс_Парен ...
46 kostya_77
 
23.08.16
11:21
всем спасибо - разобрался
47 Злопчинский
 
23.08.16
11:22
Аллилуйя!
48 Это_mike
 
23.08.16
11:23
(45) помню...