Есть запрос, который показывает принадлежность отдела к департаменту в структуре:
ВЫБРАТЬ
Отделы.Ссылка КАК Отдел,
Депатрамент.Ссылка КАК Департамент
ИЗ
Справочник.ПодразделенияКомпании КАК Отделы
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПодразделенияКомпании КАК Депатрамент
ПО (Отделы.Ссылка = Депатрамент.Ссылка
ИЛИ Отделы.Родитель = Депатрамент.Ссылка
ИЛИ Отделы.Родитель.Родитель = Депатрамент.Ссылка
ИЛИ Отделы.Родитель.Родитель.Родитель = Депатрамент.Ссылка)
ГДЕ
Депатрамент.ВидПодразделения = &Департамент
Показать
Подскажите, можно ли как его перестроить, чтобы избавиться от
Отделы.Родитель...Родитель = Депатрамент.Ссылка
? Хочется раз и на всегда составить вечный запрос, который бы не зависел от уровня вложенности справочника.
Не совсем понятен вопрос!
Если нужно выбрать по элементы справочника по типу реквизита справочника то можно как вариант использовать метод Выразить в запросе: ВЫРАЗИТЬ(Отделы.Депатрамент.Ссылка КАК Справочник.Депатрамент) КАК Депатрамент..
если отобрать по отбору то условие ГДЕ
Поясните для чего будет использоваться результат запроса? Что хотите в результате...
(3) DrDrey, я думаю, что sCHTASS хочет выбрать все дочерние элементы всех уровней для определенного элемента справочника. Вот пример как это приблизительно можно сделать (работоспособность не проверял)
Процедура ВзятьДочерние(Родитель, уровень, ТабЗнач)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Подразделения.Ссылка КАК Ссылка
|ИЗ
| Справочник.Подразделения КАК Подразделения
|ГДЕ
| Подразделения.Родитель = &Родитель";
Запрос.УстановитьПараметр("Родитель",Родитель);
Выборка = Запрос.Выполнить().Выбрать();
пока Выборка.Следующий() Цикл
НовСтр = ТабЗнач.Добавить();
НовСтр.Подразделение = Выборка.ссылка;
НовСтр.уровеньВложенности = уровень;
ВзятьДочерние(Выборка.ссылка, уровень+1, ТабЗнач);
КонецЦикла;
КонецПроцедуры
//**вызов процедуры котоая выберет все дочерние элементы и сохранит для *****
ВзятьДочерние(Родитель, 1, ТабЗнач); //если нужно вернять дочерние элементы для всех элементов справочника в качестве родителя укажи пустую ссылку
//*******
(3) Поясню задачу. Есть структура конторы, состоящая из департаментов. Департаменты состоят в свою очередь из отделов. Отделы могут в себя включать группы, службы. Те в свою очередь могут еще на что-нить ветвиться. Так вот мне нужно получить в запросе таблицу соотношения департамент - его подчиненная структурная единица. Пример таблицы:
"Департамент 1" - "Отдел 1-1" (входит в состав "Департамент 1")
"Департамент 1" - "Служба 1-1-1" (входит в состав "Отдел 1-1")
"Департамент 1" - "Служба 1-1-2" (входит в состав "Отдел 1-1")
"Департамент 1" - "Группа 1-1-2-1" (входит в состав "Служба 1-1-2")
"Департамент 2" - "Отдел 2-1" (входит в состав "Департамент 2")
...
"Департамент N" - "Отдел N-1" (входит в состав "Департамент N")
(6) sCHTASS, В приведенном вами запросе такой результат невозможен, т.к. стоит условие ГДЕ. Вы формулируйте задание правильно, тогда и желаемый ответ скорее прийдёт :)
(6) sCHTASS, Спасли бы Вас common table expressions, если бы 1С их умел, но увы увы. Сам решал эту проблему только фиксацией глубины иерархии, как и Вы.
добрый день, я услышал что именно в запросе, вот вариант где ну почти в запросе,
все таки используется процедура, в общем посмотрите
http://infostart.ru/public/102086/
16.
SIMatveev@1cbit.ru
26.02.19 12:52 Сейчас в теме
Мне поставили задачу выбрать три уровня вложенности товаров.
Вот как написала запрос:
ВЫБРАТЬ
ТоварыНаСкладахОстатки.Номенклатура.Код КАК НоменклатураКод,
ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
выбор когда ТоварыНаСкладахОстатки.Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) тогда
ТоварыНаСкладахОстатки.Номенклатура.Родитель.Родитель.Родитель.Родитель
когда ТоварыНаСкладахОстатки.Номенклатура.Родитель.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) тогда
ТоварыНаСкладахОстатки.Номенклатура.Родитель.Родитель.Родитель
когда ТоварыНаСкладахОстатки.Номенклатура.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) тогда
ТоварыНаСкладахОстатки.Номенклатура.Родитель.Родитель
когда ТоварыНаСкладахОстатки.Номенклатура.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) тогда
ТоварыНаСкладахОстатки.Номенклатура.Родитель
иначе ТоварыНаСкладахОстатки.Номенклатура.Родитель.Родитель.Родитель.Родитель.родитель
конец как Группа1,
выбор когда ТоварыНаСкладахОстатки.Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) тогда
ТоварыНаСкладахОстатки.Номенклатура.Родитель.Родитель.Родитель
когда ТоварыНаСкладахОстатки.Номенклатура.Родитель.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) тогда
ТоварыНаСкладахОстатки.Номенклатура.Родитель.Родитель
когда ТоварыНаСкладахОстатки.Номенклатура.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) тогда
ТоварыНаСкладахОстатки.Номенклатура.Родитель
иначе ТоварыНаСкладахОстатки.Номенклатура.Родитель.Родитель.Родитель.Родитель
конец как Группа2,
выбор когда ТоварыНаСкладахОстатки.Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) тогда
ТоварыНаСкладахОстатки.Номенклатура.Родитель.Родитель
когда ТоварыНаСкладахОстатки.Номенклатура.Родитель.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) тогда
ТоварыНаСкладахОстатки.Номенклатура.Родитель
иначе ТоварыНаСкладахОстатки.Номенклатура.Родитель.Родитель.Родитель
конец как Группа3
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаПо, ) КАК ТоварыНаСкладахОстатки
ГДЕ
ТоварыНаСкладахОстатки.Склад = &Склад
а судя по этой записи то вообще достаточно условия
(16) [IS-QUOTE]ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаПо, ) КАК ТоварыНаСкладахОстатки[/
вот этого условия, если четвертый родитель не пустой, то такой товар вам не нужен
Где ТоварыНаСкладахОстатки.Номенклатура.Родитель.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
ВЫБРАТЬ
Номенклатура.Ссылка,
Номенклатура.Родитель,
Номенклатура.Родитель.Родитель,
Номенклатура.Родитель.Родитель.Родитель
ПОМЕСТИТЬ Товар
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
НЕ Номенклатура.ЭтоГруппа
И Номенклатура.Родитель.Родитель.Родитель.Родитель.Ссылка = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)