Имя: Пароль:
1C
1С v8
Данные из левого соединения
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) это не соединение, это итоги так работают
Закон Брукера: Даже маленькая практика стоит большой теории.