Запрос к Иерархическому справочнику

  • Автор темы Gorobec
  • Дата начала
G

Gorobec

Гость
#1
Доброго времени суток!
Вопрос такого плана. Есть Иерархический справочник «Фирмы» структура:
«Фирмы»
---- Фирма «А»
------ Фотоаппараты
----------- Элемент Модель
----------- Элемент Модель
------ Плеера
----------- Элемент Модель
- Фирма «Б»
------ Фотоаппараты
------------Элемент Модель
------ Плеера
----------- Элемент Модель
И Документ «Б» с ТЧ1 и ТЧ2.
Код:
Запрос на «Фотоаппараты» из «Фирмы А»
стк = " Фотоаппараты ";
скл = "Фирма А";
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("скл", скл); 
Запрос.УстановитьПараметр("стк ", стк);
Запрос.Текст ="ВЫБРАТЬ
|	Фирмы.Ссылка
|ИЗ
|	Справочник.Фирмы КАК Фирмы
|ГДЕ
|	Фирмы.Родитель.Наименование = & стк 
|	И Фирмы.Наименование = &скл";

Результат = Запрос.Выполнить().Выбрать();
ТабличнаяЧасть1.Очистить();
Пока Результат.Следующий()=1 цикл
новаястрока = ТабличнаяЧасть1.Добавить();
Новаястрока.элементы = Результат.Ссылка;
КонецЦикла;
Если установить один параметр Специальность.Родитель.Наименование = & стк, тогда выбирает «Фотоаппараты» из всех «Фирм». Как сделать запрос? чтобы при заполнение текстового поля на форме документа фирмы, в ТЧ1 выбиралось из иерархического справочника фотоаппараты с «фирмы А»???
 

unknown181538

НеГуру
28.12.2008
1 417
0
#2
стк = Справочники.Фирмы.НайтиПоНаименованию(" Фотоаппараты ");
скл = Справочники.Фирмы.НайтиПоНаименованию("Фирма А");
Запрос = Новый Запрос;
Если ЗначениеЗаполнено(Скл)Тогда
Запрос.УстановитьПараметр("скл", скл);
КОнецЕсли;
Запрос.УстановитьПараметр("стк ", стк);
Запрос.Текст ="ВЫБРАТЬ
| Фирмы.Ссылка
|ИЗ
| Справочник.Фирмы КАК Фирмы
|ГДЕ
| Фирмы В ИЕРАРХИИ (& стк) "+
?( ЗначениеЗаполнено(Скл)," И Фирмы В ИЕРАРХИИ (&скл)","")+":";

Результат = Запрос.Выполнить().Выбрать();
ТабличнаяЧасть1.Очистить();
Пока Результат.Следующий()=1 цикл
новаястрока = ТабличнаяЧасть1.Добавить();
Новаястрока.элементы = Результат.Ссылка;
КонецЦикла;

Примерно это.
 
G

Gorobec

Гость
#3
Выдал ошибку
{Документ.Документ1.Форма.ФормаДокумента(101)}:
Ошибка при вызове метода контекста (Выполнить): {(6, 2)}: Поле не найдено "Фирмы"
<<?>>Фирмы В ИЕРАРХИИ(&стк)И Фирмы В ИЕРАРХИИ (&скл)
Результат = Запрос.Выполнить().Выбрать(); :)
 

unknown181538

НеГуру
28.12.2008
1 417
0
#4
Запрос.Текст ="ВЫБРАТЬ
| Фирмы.Ссылка КАК Фирма
|ИЗ
| Справочник.Фирмы КАК Фирмы
|ГДЕ
| Фирма В ИЕРАРХИИ (& стк) "+
?( ЗначениеЗаполнено(Скл)," И Фирма В ИЕРАРХИИ (&скл)","")+":";

Так попробуй.
И пользуйся конструктором
 

Darlock

Well-Known Member
04.01.2008
560
1
#5
| Фирма В ИЕРАРХИИ (& стк) "+
?( ЗначениеЗаполнено(Скл)," И Фирма В ИЕРАРХИИ (&скл)","")+":";
Какой смысл данной конструкции? Получается что дважды накладывается условие на одно и то же поле? Может "| Фирма В ИЕРАРХИИ (& стк) "+" - лишнее?
 

unknown181538

НеГуру
28.12.2008
1 417
0
#6
Вообще-то я не прав.
Фотоаппараты придется по наименованию отбирать:
"Фирма.Родитель.Наименование = &стк"
Но такое не будет работать, если в фотоаппаратах еще вложенные папки.
Можно формировать спписок групп с наименование фотоаппараты, и помещать их в "стк".

Хотя я бы использовал доп. реквизит или свойство.

А самое главное, мне не понятно как расшифровать "ст
 

Darlock

Well-Known Member
04.01.2008
560
1
#7
зачем по наименованию. если родитель указывается (выбирается) в документе, то в запрос можно передать не "наименование" а именно так как написал и конструкция "В ИЕРАРХИИ" сработает так как надо (отберет указанную группу и все что вложено в нее), единственное, наверное, стоит дописать исключение групп во вложенности.