![]() |
|
Данные из левого соединения | ☑ | ||
---|---|---|---|---|
0
PuhUfa
20.02.12
✎
11:09
|
Есть документ "СпецификацияНаТранзит" в ТЧ которого элементы справочника. Есть документ "МаршрутныйЛист" в ТЧ которого элементы того же справочника. Делаю отчет по этим 2м документам.
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СпецификацияНаТранзитСпецификация.Ссылка.Контрагент КАК Контрагент, | СпецификацияНаТранзитСпецификация.Ссылка.Дата, | ПРЕДСТАВЛЕНИЕ(СпецификацияНаТранзитСпецификация.Ссылка.Контрагент), | СпецификацияНаТранзитСпецификация.ТранзитныйДокумент КАК ТранзитныйДокумент, | ПРЕДСТАВЛЕНИЕ(СпецификацияНаТранзитСпецификация.ТранзитныйДокумент), | СпецификацияНаТранзитСпецификация.Грузополучатель КАК Грузополучатель, | СпецификацияНаТранзитСпецификация.Мест КАК Мест, | СпецификацияНаТранзитСпецификация.Вес КАК Вес, | СпецификацияНаТранзитСпецификация.Сумма КАК Сумма, | МаршрутныйЛистСпецификация.ДокМаршрутныйЛист КАК ДокМаршрутныйЛист, | ЕСТЬNULL(МаршрутныйЛистСпецификация.Стоимость,0) КАК Стоимость |ИЗ | Документ.СпецификацияНаТранзит.Спецификация КАК СпецификацияНаТранзитСпецификация | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | МаршрутныйЛист.Ссылка КАК ДокМаршрутныйЛист, | МаршрутныйЛист.СсылкаНаНакладную КАК ТранзитныйДокумент, | СУММА(МаршрутныйЛист.Стоимость) КАК Стоимость | ИЗ | Документ.МаршрутныйЛист.Спецификация КАК МаршрутныйЛист | СГРУППИРОВАТЬ ПО | МаршрутныйЛист.Ссылка, | МаршрутныйЛист.СсылкаНаНакладную) КАК МаршрутныйЛистСпецификация | ПО СпецификацияНаТранзитСпецификация.ТранзитныйДокумент = МаршрутныйЛистСпецификация.ТранзитныйДокумент | |ГДЕ | СпецификацияНаТранзитСпецификация.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон | |ИТОГИ | СУММА(Мест), | СУММА(Вес), | СУММА(Сумма), | СУММА(Стоимость) |ПО | Контрагент, | Грузополучатель, | ТранзитныйДокумент"; Все хорошо, все счетает, но в результат запроса не получается выдернуть из лового соединения ссылку на документ МаршрутныйЛист в котором была строка ТЧ. Т.е. | МаршрутныйЛистСпецификация.ДокМаршрутныйЛист КАК ДокМаршрутныйЛист, всегда NULL. Такое вообще возможно? |
|||
1
Ненавижу 1С
гуру
20.02.12
✎
11:13
|
там разные значения
|
|||
2
PuhUfa
20.02.12
✎
11:16
|
(1) там это где? -)
|
|||
3
Ненавижу 1С
гуру
20.02.12
✎
11:17
|
(2) там это в базе
|
|||
4
Sidney
20.02.12
✎
11:20
|
(0) Получи отдельно левую таблицу, потом правую, и посмотри тип значения и сами значения в колонке по которой соединяешь.
|
|||
5
Maxus43
20.02.12
✎
11:21
|
МаршрутныйЛист.СсылкаНаНакладную <> СпецификацияНаТранзитСпецификация.ТранзитныйДокумент
|
|||
6
PuhUfa
20.02.12
✎
11:28
|
Эм... я может не правильно обяснил просто. Самое левое соединение работает и все соединяет, но есть, например, документ с тч:
СпецификацияНаТранзит №1 1. нак1 2. нак2 3. нак3 есть МаршрутныйЛист №1 1. нак1 МаршрутныйЛист №2 1. нак2 Соединение в запросе идет по нак1, нак2 и оно работает, но мне в результат запроса нужно еще выдернуть что нак1 была в МаршрутныйЛист №1, а нак2 в МаршрутныйЛист №2 |
|||
7
Ненавижу 1С
гуру
20.02.12
✎
11:33
|
(6) если соединяет, то какие проблемы?
|
|||
8
PuhUfa
20.02.12
✎
11:36
|
(7) суммы из левого соединения соединяет правильно а вот
| МаршрутныйЛистСпецификация.ДокМаршрутныйЛист КАК ДокМаршрутныйЛист, всегда NULL |
|||
9
Maxus43
20.02.12
✎
11:41
|
т.е. колонка "Стоимость" - цепляется нормально?
|
|||
10
PuhUfa
20.02.12
✎
11:42
|
(9) да
|
|||
11
PuhUfa
20.02.12
✎
12:57
|
Дальнейшие изыскания показали. Обход результата запроса делается:
Результат = Запрос.Выполнить(); ВыборкаКонтрагент = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаКонтрагент.Следующий() Цикл ОбластьКонтрагент.Параметры.Заполнить(ВыборкаКонтрагент); ТабДок.Вывести(ОбластьКонтрагент, ВыборкаКонтрагент.Уровень()); ВыборкаГрузополучатель = ВыборкаКонтрагент.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаГрузополучатель.Следующий() Цикл ОбластьГрузополучатель.Параметры.Заполнить(ВыборкаГрузополучатель); ТабДок.Вывести(ОбластьГрузополучатель, ВыборкаГрузополучатель.Уровень()); ВыборкаТранзитныйДокумент = ВыборкаГрузополучатель.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаТранзитныйДокумент.Следующий() Цикл ОбластьТранзитныйДокумент.Параметры.Заполнить(ВыборкаТранзитныйДокумент); ТабДок.Вывести(ОбластьТранзитныйДокумент, ВыборкаТранзитныйДокумент.Уровень()); Д = ВыборкаТранзитныйДокумент.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока Д.Следующий() цикл а = д; КонецЦикла КонецЦикла; КонецЦикла; КонецЦикла; И если после ВыборкаТранзитныйДокумент сделать еще одну, то там уже будет ссылка на маршрутный лист. И в отчете получаем http://s44.radikal.ru/i105/1202/6e/92dfbe053f20.jpg Почему это получается в отдельную группировку а не так как я отметил стрелкой на скрине я не понимаю -( |
|||
12
PuhUfa
20.02.12
✎
12:58
|
+(11) упс, ссылка на скрин отдельно http://s44.radikal.ru/i105/1202/6e/92dfbe053f20.jpg
|
|||
13
Ненавижу 1С
гуру
20.02.12
✎
13:01
|
(12) гыгыгы
|ИТОГИ | СУММА(Мест), | СУММА(Вес), | СУММА(Сумма), | СУММА(Стоимость), |ВЫБОР КОГДА НЕ (ТранзитныйДокумент ЕСТЬ NULL) ТОГДА МАКСИМУМ(ДокМаршрутныйЛист) КОНЕЦ КАК ДокМаршрутныйЛист |ПО | Контрагент, | Грузополучатель, | ТранзитныйДокумент |
|||
14
mkanaev
20.02.12
✎
13:01
|
вообще нехорошо делать левое соединение с вложенным запросаом ай ай ай, табл мана скана пошоль, пошоль
|
|||
15
Maxus43
20.02.12
✎
13:01
|
ну с итогами косяк... всё правильно, детальные записи это получается щас 4-й уровень
|
|||
16
PuhUfa
20.02.12
✎
13:10
|
(13) спс. так получается то что доктор прописал
(15) видимо просто я не правильно понимаю как на самом деле работает левое соединение -( |
|||
17
Maxus43
20.02.12
✎
13:11
|
(16) это не соединение, это итоги так работают
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |