0
mistеr
29.07.13
✎
12:33
|
Объясню на примере Номенклатуры и РС СчетаУчетаНоменклатуры. Есть список номенклатуры, например, выбираем из ТЧ документа. Для каждой позиции нужно получить счета учета из регистра СчетаУчетаНоменклатуры. Они могут быть заданы как для элементов, так и для групп любого уровня. Приоритет имеет запись, ближайшая по иерархии.
В типовых, если кто ковырялся, это реализуется запросами в цикле. Мне же нужно только запросом, так как это будет только часть большого и сложного запроса.
У самого идеи есть, но хочется послушать тех, кто уже реализовывал.
|
|
3
Feunoir
29.07.13
✎
13:15
|
Тут не счета учета, но принцип хранения точно такой-же.
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Номенклатура,
| Номенклатура.Ссылка КАК Родитель,
| 1 КАК ПорядокСортировки
|ПОМЕСТИТЬ вт_ИерархияНоменклатуры
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка = &Номенклатура
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| Номенклатура.Ссылка,
| Номенклатура.Родитель,
| 2
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка = &Номенклатура
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| Номенклатура.Ссылка,
| Номенклатура.Родитель.Родитель,
| 3
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка = &Номенклатура
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| Номенклатура.Ссылка,
| Номенклатура.Родитель.Родитель.Родитель,
| 4
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка = &Номенклатура
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| Номенклатура.Ссылка,
| Номенклатура.Родитель.Родитель.Родитель.Родитель,
| 5
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка = &Номенклатура
|
|ИНДЕКСИРОВАТЬ ПО
| Родитель,
| Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| вт_ИерархияНоменклатуры.Номенклатура КАК Номенклатура,
| вт_ИерархияНоменклатуры.Родитель,
| вт_ИерархияНоменклатуры.ПорядокСортировки КАК ПорядокСортировки,
| гт_СоответствиеЭтаповТЦП.Этап
|ПОМЕСТИТЬ вт_СоответствиеЭтапов
|ИЗ
| вт_ИерархияНоменклатуры КАК вт_ИерархияНоменклатуры
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.гт_СоответствиеЭтаповТЦП КАК гт_СоответствиеЭтаповТЦП
| ПО вт_ИерархияНоменклатуры.Родитель = гт_СоответствиеЭтаповТЦП.Номенклатура
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| ПорядокСортировки
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| вт_СоответствиеЭтапов.Номенклатура КАК Номенклатура,
| МИНИМУМ(вт_СоответствиеЭтапов.ПорядокСортировки) КАК ПорядокСортировки
|ПОМЕСТИТЬ вт_МинимумЭтапы
|ИЗ
| вт_СоответствиеЭтапов КАК вт_СоответствиеЭтапов
|
|СГРУППИРОВАТЬ ПО
| вт_СоответствиеЭтапов.Номенклатура
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| ПорядокСортировки
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Спр.Ссылка КАК Номенклатура,
| ЕСТЬNULL(вт_СоответствиеЭтапов.Родитель, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)) КАК Регистр,
| ЕСТЬNULL(вт_СоответствиеЭтапов.Этап, ЗНАЧЕНИЕ(Перечисление.гт_ЭтапыРабот.ПустаяСсылка)) КАК Этап
|ИЗ
| Справочник.Номенклатура КАК Спр
| ЛЕВОЕ СОЕДИНЕНИЕ вт_СоответствиеЭтапов КАК вт_СоответствиеЭтапов
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ вт_МинимумЭтапы КАК вт_МинимумЭтапы
| ПО вт_СоответствиеЭтапов.ПорядокСортировки = вт_МинимумЭтапы.ПорядокСортировки
| И вт_СоответствиеЭтапов.Номенклатура = вт_МинимумЭтапы.Номенклатура
| ПО Спр.Ссылка = вт_СоответствиеЭтапов.Номенклатура
|ГДЕ
| Спр.Ссылка = &Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|УНИЧТОЖИТЬ вт_СоответствиеЭтапов
|;
|
|////////////////////////////////////////////////////////////////////////////////
|УНИЧТОЖИТЬ вт_МинимумЭтапы
|;
|
|////////////////////////////////////////////////////////////////////////////////
|УНИЧТОЖИТЬ вт_ИерархияНоменклатуры";
|
|
4
mistеr
29.07.13
✎
13:47
|
(3) Спасибо, это вариант. Хотя ограничивать число уровней конечно не хотелось бы. вт_ИерархияНоменклатуры можно и кодом построить, но... хочется запросом.
|
|