0
yur4egg
11.09.15
✎
09:12
|
Первоначальный вариант запроса:
0)
ТекстЗапроса=
"ВЫБРАТЬ
| ОстаткиОстатки.Номенклатура КАК Товар,
| ОстаткиОстатки.Склад КАК Склад,
| ОстаткиОстатки.КоличествоОстаток КАК Остаток
|ИЗ
| РегистрНакопления.Остатки.Остатки КАК ОстаткиОстатки
|
|ИТОГИ
| СУММА(Остаток)
|ПО
| Товар ТОЛЬКО ИЕРАРХИЯ,
|";
................
ТЗ = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
В ТЗ возвращает дерево значений с иерархией по группам справочника.
Если добавить в эту же таблицу остатки резерва, тогда запрос такой:
1)
ТекстЗапроса=
"ВЫБРАТЬ
| ОстаткиОстатки.Номенклатура КАК Товар,
| ОстаткиОстатки.Склад КАК Склад,
| ОстаткиОстатки.КоличествоОстаток КАК Остаток,
| РезервыОстатки.КоличествоОстаток КАК Резерв
|ИЗ
| РегистрНакопления.Остатки.Остатки КАК ОстаткиОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Резервы.Остатки КАК РезервыОстатки
| ПО ОстаткиОстатки.Номенклатура = РезервыОстатки.Номенклатура
| И ОстаткиОстатки.Склад = РезервыОстатки.Склад
|
|ИТОГИ
| СУММА(Остаток)
|ПО
| Товар ТОЛЬКО ИЕРАРХИЯ,
|";
И тут все правильно выгружается. Но проблема в том, что в запрос не попадают позиции зарезервированные, но отсутствующие на остатках. Заменяю соединение ЛЕВОЕ на ПОЛНОЕ, дерево формируется, но зарезервированные позиции появляются с пустыми значениями там, где нет остатков. Ставлю проверку на NULL и окончательный вид запроса такой:
2)
ТекстЗапроса=
"ВЫБРАТЬ
| ЕСТЬNULL(ОстаткиОстатки.Номенклатура, РезервыОстатки.Номенклатура) КАК Товар,
| ОстаткиОстатки.Склад КАК Склад,
| ОстаткиОстатки.КоличествоОстаток КАК Остаток,
| РезервыОстатки.КоличествоОстаток КАК Резерв
|ИЗ
| РегистрНакопления.Остатки.Остатки КАК ОстаткиОстатки
| ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.Резервы.Остатки КАК РезервыОстатки
| ПО ОстаткиОстатки.Номенклатура = РезервыОстатки.Номенклатура
| И ОстаткиОстатки.Склад = РезервыОстатки.Склад
|ИТОГИ
| СУММА(Остаток)
|ПО
| Товар ТОЛЬКО ИЕРАРХИЯ,
|;
Все наименования попадают правильно, но сбивается иерархия, в дереве только первая запись - это пустая группа, а внутри идут все подряд позиции. Пробовал помещать все во временную таблицу, а вторым запросом брать данные из нее, иерархия вернулась, но содержимое - как при ЛЕВОМ соединении, хотя указано ПОЛНОЕ.
Подскажите, у меня больше идей нет (((
|
|