• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы 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

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

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