Имя: Пароль:
1C
 
Как в Запросе обратиться к подчиненному справочнику
0 misha122062
 
31.05.07
13:39
Есть такая задача. Поступление ТМЦ от массы контрагентов. Выборку и группировку контрагентов делаю запросом.
Но у справочника контрагенты есть ПОДЧИНЕННЫЙ справочник - Дополнительные сведения, где храниться необходимая мне информация.
Можно как-нибудь в запросе объеденить мой первый запрос и получить данные по каждому контрагенту из подчиненного справочника?
единственный вариант вижу - выгружать в ТЗ список контрагентов и перебор каждого по подчиненному справочнику. Но это как то некрасиво. Кто знает, есть варианты?
1 Ёпрст2
 
31.05.07
13:43
(0) Есть ... показывай текст запроса. и что получить хочешь от подчиненного ...
2 КонецЦикла
 
31.05.07
13:49
(0) Если этой информации нет в регистре, документе - идея обречена на провал
Какой из десяти подчиненных взять? Наугад? Первый?
Задумайтесь... (цы) National Geographic
3 F1
 
31.05.07
13:52
(0)Нужно в запросе перебирать подчиненный справочник, и отбирать его владельца
4 Программист 484
 
31.05.07
13:54
(2) А регистр+в нем же запрос из справочника так тоже ведь можно?
5 misha122062
 
31.05.07
13:56
//{{ЗАПРОС(Приход)
 |Период с Дата1 по Дата2;        
 |ОбрабатыватьДокументы Проведенные;
 |Обрабатывать НеПомеченныеНаУдаление;
 |Док = Документ.ПоступлениеТМЦ.ТекущийДокумент;
 |Склад = Документ.ПоступлениеТМЦ.МестоХранения;
 |Поставщик = Документ.ПоступлениеТМЦ.Поставщик;
 |Колич = Документ.ПоступлениеТМЦ.Количество;
 |Функция ВсегоКолич=Сумма(Колич);
 |Группировка Поставщик Без Групп Упорядочить По Поставщик.Наименование;
 |Условие (Склад = Подразделение);
 |Условие (Поставщик.ВидКонтрагента = ТипКонтрагента);

У подчиненного справочника надо выбрать тока одну - первую запись. Т.к. там сведения.
Т.е. хочу у подчиненного справочника получить - паспорт, дата выдачи
6 КонецЦикла
 
31.05.07
13:59
(4,5) В принципе можно с извратами, но быстрее имхо пробежаться при обходе
Ну а прямым запросом можно :)
7 Программист 484
 
31.05.07
14:00
ПодчСпр=Справочник.Подчиненные.ТекущийЭлемент;
Условие(ПодчСпр.Владелец=Поставщик)
Группировка ПодчСпр
???
8 misha122062
 
31.05.07
14:00
про обход ясно, хочется вложенный запрос, типа как 80...
9 Программист 484
 
31.05.07
14:00
(6) Так не спорю конечно прямым почти всегда быстрей :)))
10 misha122062
 
31.05.07
14:02
Программист 484 - не очень понял...Зачем Группировка ПодчСпр. Мне то нодо не подчиненному. Покажи, плиз, полный запрос - объедени с моим...
11 Программист 484
 
31.05.07
14:05
Как называется твой подчиненный справочник?
12 misha122062
 
31.05.07
14:06
Справочник - ДополнительныеСведнения. реквизиты в нем - Паспорт, ВыданКогдаКем
13 КонецЦикла
 
31.05.07
14:08
(8) Можно своей функцией - тормоза будут
А про вложенный и Селект топ 1 забудь :)
14 Ёпрст2
 
31.05.07
14:10
(12) Не вытянешь, только в условии можно...Получай при обходе ...
15 Программист 484
 
31.05.07
14:11
Твой запрос+
|ПодчСпр=Справочник.ДополнительныеСведнения.ТекущийЭлемент;
|Условие(ПодчСпр.Владелец=Поставщик)
Дальше есть 2 варианта - посмотри что выдает в запрос.подчСпр - если там то что тебе нужно то все ОК.
Иначе добавляешь
|Группировка ПодчСпр;
И идешь в запросе по 2 группировке и выбираешь тот элемент что тебе нужен
16 misha122062
 
31.05.07
14:12
попробую
17 Ёпрст2
 
31.05.07
14:13
(15) Ну ну ...Ни групировки, ни условие при таком коде не отработает ...
18 misha122062
 
31.05.07
14:16
Значение не представляет агрегатный объект(Владелец): ....
19 Программист 484
 
31.05.07
14:19
(15) Хм с подчиненными напрямую не писал - Смесь  регистров и справочников писал там все работает.
20 misha122062
 
31.05.07
14:24
Значит все же в обход....Жаль!
Может у кого есть еще светлые мысли?
21 Программист 484
 
31.05.07
14:31
(20) Беру свои слова обратно - невидит никак
22 Ёпрст2
 
31.05.07
14:37
(20) Можно только последний подчиненный элемент взять...вот так запросто ...
23 Программист 484
 
31.05.07
14:38
|Контрагент=Справочник.Договоры.Владелец.ТекущийЭлемент;
   |Договор=Справочник.Договоры.ТекущийЭлемент;
только такие вещи возможны но у тебя не упоминаются эти сведенья в документе...

Кстати а почему в подчиненном справочнике один элемент с этими сведеньями?
Непроще бы их в реквизиты контрагента загнать7
24 Ёпрст2
 
31.05.07
14:39
+22 Вот так, например:

|ПодчСпр=Справочник.ДополнительныеСведнения.ТекущийЭлемент;
|Поставщик = Документ.ПоступлениеТМЦ.Поставщик,Справочник.ДополнительныеСведнения.Владелец;
|Группировка Поставщик;
....
Запрос.Выгрузить(ТЗ,1,0);

В ПодчСпр будет последний подчиненный элемент ....
25 Программист 484
 
31.05.07
14:40
+ Кстати как вариант - как я понимаю ты хочешь пасспорт допустим менеджера этого контрагенты выводить? Так создай реквизит в справочнике - пасспортменеджера и туда ссылку на этот элемент, а дальше уже запросом элементарно
26 misha122062
 
31.05.07
14:41
конечно проще... Но база поставляется сверху... А там кто так умно решил!
27 misha122062
 
31.05.07
14:43
база не подлежит модификации - что бы на каждом филиале умные программисты свои творения не вносили. так что тока могу выбирать...
28 misha122062
 
31.05.07
15:02
Не понравилось - вытягиваются все элементы...
Пока эту кашу разберешь... Пришлось в обходе по выборке. Так проще всего.
29 Ёпрст2
 
31.05.07
15:06
(28) Всмысле все ? ... как в 24 - получишь последний, если добавишь группировку по  
ПодчСпр - получишь все ...
30 misha122062
 
31.05.07
15:19
Все равно - ВСЕ! Кроме того работает раза в 2 долше - т.к. в выборку тянуться вс элементы подчиненного справочника, группировка то в конце..
31 misha122062
 
31.05.07
15:20
короче, спасибо всем, я забил... По обходу работает очень быстро.
32 Ёпрст2
 
31.05.07
15:20
(30) Ну, а ты чего хотел ? Без группировки будет в выборке только последний подчиненный элемент ...
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший