• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

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

Gorobec

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

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

unknown181538

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

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

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

Gorobec

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

unknown181538

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

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

Darlock

| Фирма В ИЕРАРХИИ (& стк) "+
?( ЗначениеЗаполнено(Скл)," И Фирма В ИЕРАРХИИ (&скл)","")+":";

Какой смысл данной конструкции? Получается что дважды накладывается условие на одно и то же поле? Может "| Фирма В ИЕРАРХИИ (& стк) "+" - лишнее?
 
U

unknown181538

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

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

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

Darlock

зачем по наименованию. если родитель указывается (выбирается) в документе, то в запрос можно передать не "наименование" а именно так как написал и конструкция "В ИЕРАРХИИ" сработает так как надо (отберет указанную группу и все что вложено в нее), единственное, наверное, стоит дописать исключение групп во вложенности.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!