Имя: Пароль:
1C
1С v8
Определения родителя
0 Sasha_uu
 
15.01.12
10:26
Есть регистр сведений в  котором есть группы номенклатуры, как мне написать запрос что бы определить к какой группе относится элемент номенклатуры?
1 Sasha_uu
 
15.01.12
10:27
+ у элемента может быть несколько родителей, и в регистре могут быть несколько родителей элемента, мне надо определить самого нижнего родителя
2 GROOVY
 
15.01.12
10:33
Перечитал 3 раза. Не понял ничего.
3 Renat11111
 
15.01.12
11:04
Перечитал 4 раза тоже ничего не понял.  группы номенклатуры это измерение регистра или что?
4 azernot
 
15.01.12
11:05
Номенклатура.Родитель - содержит именно самого нижнего родителя.
Номенлатура.Родитель.Родитель - содержит родителя группы номенклатуры, родителя номенклатуры.
и т.п.
5 Renat11111
 
15.01.12
11:07
(4) ну если так то конструкция ВЫБОР  в запросе.
6 azernot
 
15.01.12
11:07
Ну и да, прочитал 5 раз, нифига не понял.. Предположил, что ТС считает, что в свойстве Родитель содержатся все возможные родители по иерархии. Как мог, попытался объяснить ему, что эт не так.
7 Starhan
 
15.01.12
11:29
Обычная распространненная задача, когда в регистре сведений делают какую то подвязку к группе номенклатуры, что бы потом в случае чаво вытащить какие то доп свойства.

Но натыкаются на проблему. Допустим у одной ном группы одни данные (в рс), а она входит в другую ном группу, котарая так же есть в этом регистре но с другими значениями.

И теперь необоходимо найти самого нижнего родителя. Что бы точно определить значения в регистре сведений :)

Сталкивался как то по молодости :)
8 azernot
 
15.01.12
11:37
(7) Любая типоая конфа, настройка счетов учёта (номенклатуры, контрагнетов) организована по этому принципу.
9 aka AMIGO
 
15.01.12
11:38
в 7-ке решается через "полный код".. может, в 8-ке есть аналог
10 Starhan
 
15.01.12
11:39
Пример
Есть регистр сведений В измерения Справочник Номенклатура Родитель в ресурсах - справочник Менеджер

Родитель1 - Менеджер1
Родитель2 - Менеджер2

Есть Иерархический справочник Родитель1 - Родитель2 - Родитель3 - Номенклатура1

Как запросом к регистру сведений понять что у Номенклатуры1 менедежр2?
11 Дядя Васька
 
15.01.12
11:42
Хм... А в 1цы уже может быть два родителя? А я дурак думал это в сях только...
12 Starhan
 
15.01.12
11:46
(11) ты просто чавот не понял. там - ссылки друг на друга показано

То есть иерархия такова
Родитель1
-Родитель2
--Родитель3
---Номенклатура1
--Родитель4
---Номенлкатура2

Так вот по идеее у Номенклатуры1 - Менедежр2
а у Номенклатуры2 - Мендежер1
13 Starhan
 
15.01.12
11:47
(12) точнее так
Родитель1
-Родитель2
--Родитель3
---Номенклатура1
-Родитель4
--Номенлкатура2
14 azernot
 
15.01.12
11:56
(10) Ну вот в типовых 1С-ники не парились, организовали тупо рекурсивный вызов по родителям. В запросе - надо знать сколько уровней в справочнике Номенклатуры

ВЫБРАТЬ
   СпрНоменклатура.Ссылка КАК Номенклатура,
   ВЫБОР
       КОГДА РегСвед.Номенклатура = СпрНоменклатура.Ссылка
           ТОГДА 0
       КОГДА РегСвед.Номенклатура = СпрНоменклатура.Родитель
           ТОГДА 1
       КОГДА РегСвед.Номенклатура = СпрНоменклатура.Родитель.Родитель
           ТОГДА 2
       КОГДА РегСвед.Номенклатура = СпрНоменклатура.Родитель.Родитель.Родитель
           ТОГДА 3
       КОГДА РегСвед.Номенклатура = СпрНоменклатура.Родитель.Родитель.Родитель.Родитель
           ТОГДА 4
       КОГДА РегСвед.Номенклатура = СпрНоменклатура.Родитель.Родитель.Родитель.Родитель.Родитель
           ТОГДА 5
       КОГДА РегСвед.Номенклатура = СпрНоменклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель
           ТОГДА 6
       ИНАЧЕ 100
   КОНЕЦ КАК Приоритет,
   РегСвед.Маршрут
ПОМЕСТИТЬ ДанныеИзРС
ИЗ
   РегистрСведений.МенеджерыНоменклатуры.СрезПоследних({(&Период)}, ) КАК РегСвед
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
       ПО (ВЫБОР
               КОГДА (НЕ РегСвед.Номенклатура.ЭтоГруппа)
                   ТОГДА РегСвед.Номенклатура = СпрНоменклатура.Ссылка
               ИНАЧЕ РегСвед.Номенклатура = СпрНоменклатура.Родитель
                       ИЛИ РегСвед.Номенклатура = СпрНоменклатура.Родитель.Родитель
                       ИЛИ РегСвед.Номенклатура = СпрНоменклатура.Родитель.Родитель.Родитель
                       ИЛИ РегСвед.Номенклатура = СпрНоменклатура.Родитель.Родитель.Родитель.Родитель
                       ИЛИ РегСвед.Номенклатура = СпрНоменклатура.Родитель.Родитель.Родитель.Родитель.Родитель
                       ИЛИ РегСвед.Номенклатура = СпрНоменклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель
           КОНЕЦ)
ГДЕ
   (НЕ СпрНоменклатура.ЭтоГруппа)
{ГДЕ
   СпрНоменклатура.Ссылка.* КАК Номенклатура}

ИНДЕКСИРОВАТЬ ПО
   Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ДанныеИзРС.Номенклатура КАК Номенклатура,
   ДанныеИзРС.Менеджер
ИЗ
   ДанныеИзРС КАК ДанныеИзРС
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           ДанныеИзРС.Номенклатура КАК Номенклатура,
           МИНИМУМ(ДанныеИзРС.Приоритет) КАК Приоритет
       ИЗ
           ДанныеИзРС КАК ДанныеИзРС
       
       СГРУППИРОВАТЬ ПО
           ДанныеИзРС.Номенклатура) КАК МинимальныеПриоритетыРодителей
       ПО ДанныеИзРС.Номенклатура = МинимальныеПриоритетыРодителей.Номенклатура
           И ДанныеИзРС.Приоритет = МинимальныеПриоритетыРодителей.Приоритет