Имя: Пароль:
1C
1C 7.7
v7: Как в запросе объединить два документа?
0 Ночной Эльф
 
11.09.12
08:06
Всем доброго времени суток.

Вопрос в следующем нужно выводить в отчете документ Заявка покупателя в связке с Заданием на демонтаж делаю условие что |Условие(Контрагент = КонтрагентСчет);

и вывожу сначало задание на демонтаж а потом заявку покупателя но у меня выводится пустая страница, как вывести в 7 в связке 2 документа?

вот код
Процедура Сформировать()
   Перем Запрос, ТекстЗапроса, Таб;
   //Создание объекта типа Запрос
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ВыбНачПериода по ВыбКонПериода;
   |Обрабатывать НеПомеченныеНаУдаление;
   |ЗаданиеНаДеМонтаж = Документ.ЗаданиеНаДеМонтаж.ТекущийДокумент;
   |Контрагент = Документ.ЗаданиеНаДеМонтаж.Контрагент;
   |ЗаявкаПокупателя = Документ.ЗаявкаПокупателя.ТекущийДокумент;
   |КонтрагентСчет = Документ.ЗаявкаПокупателя.Контрагент;
   |НоменклатураСчет = Документ.ЗаявкаПокупателя.Номенклатура;
   |Номенклатура = Документ.ЗаданиеНаДеМонтаж.Номенклатура;
   |Группировка ЗаданиеНаДеМонтаж;
   |Группировка ЗаявкаПокупателя;
   |Условие(Контрагент = КонтрагентСчет);
   |"//}}ЗАПРОС
   ;
   // Если ошибка в запросе, то выход из процедуры
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
       Возврат;
   КонецЕсли;

   // Подготовка к заполнению выходных форм данными запроса
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("Таблица");
   // Заполнение полей "Заголовок"
   Таб.ВывестиСекцию("Заголовок");
   Состояние("Заполнение выходной таблицы...");
   Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
   Пока Запрос.Группировка(1) = 1 Цикл
       // Заполнение полей ЗаданиеНаДеМонтаж
       Таб.ВывестиСекцию("ЗаданиеНаДеМонтаж");
       Пока Запрос.Группировка(2) = 1 Цикл
           // Заполнение полей ЗаявкаПокупателя
           Таб.ВывестиСекцию("ЗаявкаПокупателя");
       КонецЦикла;
   КонецЦикла;
   // Вывод заполненной формы
   Таб.ТолькоПросмотр(1);
   Таб.Показать("Сформировать", "");
КонецПроцедуры
1 andrewks
 
11.09.12
08:08
|Контрагент = Документ.ЗаявкаПокупателя.Контрагент,Документ.ЗаданиеНаДеМонтаж.Контрагент;
2 Rie
 
11.09.12
08:08
(0) Используй прямые запросы.
3 Ночной Эльф
 
11.09.12
08:10
(1) и что это строка сделает просто выведет всех контрагентов из двух документов?
4 Прохожий
 
11.09.12
08:10
(0) Лучше делать их на основании друг друга. Выбираешь подчиненный документ и связь будет по ДокументОснование.
5 andrewks
 
11.09.12
08:11
(3) это "7.7 join"
6 Ночной Эльф
 
11.09.12
08:12
(4) ну они и так сделаны на основании на основании заявки покупателя формируется задание на демонтаж
7 Ночной Эльф
 
11.09.12
08:16
(1) сделал вот так

ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ВыбНачПериода по ВыбКонПериода;
   |Обрабатывать НеПомеченныеНаУдаление;
   |ЗаданиеНаДеМонтаж = Документ.ЗаданиеНаДеМонтаж.ТекущийДокумент;
   |Контрагент = Документ.ЗаявкаПокупателя.Контрагент,Документ.ЗаданиеНаДеМонтаж.Контрагент;
   |ЗаявкаПокупателя = Документ.ЗаявкаПокупателя.ТекущийДокумент;
   |Группировка ЗаданиеНаДеМонтаж;
   |Группировка ЗаявкаПокупателя;

   |"//}}ЗАПРОС
   ;

вывел просто подрят все задания на демонтаж
8 povar
 
11.09.12
08:20
смешал все в кучу
9 Ночной Эльф
 
11.09.12
08:25
Ну а как сделать чтобы выводился 1) задание на демонтаж 2) заявка покупателя с таким же контрагентом 3) сам контрагент ?
10 andrewks
 
11.09.12
08:26
|ЗаданиеНаДеМонтаж = Документ.ЗаданиеНаДеМонтаж.ТекущийДокумент;
|Заявка = Документ.ЗаданиеНаДеМонтаж.ЗаявкаОснование;
11 Ночной Эльф
 
11.09.12
10:15
Спасибо заработало, но теперь проблема в другом не выводится табличная часть как документа задание на демонтаж так и заявки. А вот скажем если вывести Запрос.СтрокаДокумента то выведет номер строки документа почему так почему не выводит реквизиты табличной части?  
КОд


   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ВыбНачПериода по ВыбКонПериода;
   |Обрабатывать НеПомеченныеНаУдаление;
   |ЗаданиеНаДеМонтаж = Документ.ЗаданиеНаДеМонтаж.ТекущийДокумент;
   |Контрагент = Документ.ЗаявкаПокупателя.Контрагент, Документ.ЗаданиеНаДеМонтаж.Контрагент;
   |Номенклатура = Документ.ЗаявкаПокупателя.Номенклатура, Документ.ЗаданиеНаДеМонтаж.Номенклатура;
   |ДокОснование = Документ.ЗаданиеНаДеМонтаж.ДокОснование;
   |НачРазмещения = Документ.ЗаявкаПокупателя.НачРазмещения;
   |КонРазмещения = Документ.ЗаявкаПокупателя.КонРазмещения;
   |Менеджер = Документ.ЗаявкаПокупателя.Менеджер;
   |ПричинаДеМонтажа = Документ.ЗаданиеНаДеМонтаж.ПричинаДеМонтажа;
   |Группировка ЗаданиеНаДеМонтаж;
   |Группировка СтрокаДокумента;
   |"//}}ЗАПРОС
   ;
//Обрезано
//...
//Обрезано
Пока Запрос.Группировка(1) = 1 Цикл
       Если ДатаД <> Запрос.ЗначениеУпорядочивания(1,1) Тогда
           Таб.ВывестиСекцию("Дата");
           ДатаД = Запрос.ЗначениеУпорядочивания(1,1);
       КонецЕсли;
       // Заполнение полей ЗаданиеНаДеМонтаж
       Таб.ВывестиСекцию("ЗаданиеНаДеМонтаж");
       Пока Запрос.Группировка(2) = 1 Цикл
           // Заполнение полей СтрокаДокумента
           Таб.ВывестиСекцию("СтрокаДокумента");
       КонецЦикла;
   КонецЦикла;



В таблице выражение Запрос.Номенклатура выводится, также выводится номер строки выражение Запрос.СтрокаДокумента а вот Запрос.СтрокаДокумента.ПричинаДеМонтажа не чего не выводит и также не выводит выражение не чего Запрос.ДокОснование.НачРазмещения как быть? тут ?
12 Ёпрст
 
11.09.12
10:21
(11)
//Запрос.СтрокаДокумента.ПричинаДеМонтажа

вестимо надо:
Запрос.ПричинаДеМонтажа
13 Ночной Эльф
 
11.09.12
10:22
Понять не могу почему выводится выражание Запрос.Номенклатура (типа |Номенклатура = Документ.ЗаявкаПокупателя.Номенклатура, Документ.ЗаданиеНаДеМонтаж.Номенклатура;) и не выводится выражение Запрос.ПричинаДеМонтажа (типа |ПричинаДеМонтажа = Документ.ЗаданиеНаДеМонтаж.ПричинаДеМонтажа;) ???
14 Ночной Эльф
 
11.09.12
10:22
(12) так тоже не выводит
15 Ёпрст
 
11.09.12
10:23
(14) значит, ПричинаДеМонтажа не заполнена.
16 Ночной Эльф
 
11.09.12
10:25
(15) вот именно что заполнено
17 Ночной Эльф
 
11.09.12
10:25
чудеса прямо какие то
18 Ночной Эльф
 
11.09.12
10:27
МОжет быть причина в этом

|Контрагент = Документ.ЗаявкаПокупателя.Контрагент, Документ.ЗаданиеНаДеМонтаж.Контрагент;
   |Номенклатура = Документ.ЗаявкаПокупателя.Номенклатура, Документ.ЗаданиеНаДеМонтаж.Номенклатура;

что по двум полям объеденяется контрагент в шапке а номенклатура в табличной части?
19 Ёпрст
 
11.09.12
10:28
(18) покажи текст запроса и его вывод.
20 GreyK
 
11.09.12
10:30
(0) Примерно так надо:
   |ТекДокумент = Документ.ЗаявкаПокупателя.ТекущийДокумент,Документ.ЗаданиеНаДеМонтаж.ТекущийДокумент;
.....
   |Группировка ТекДокумент;
   |Группировка СтрокаДокумента;
21 Ночной Эльф
 
11.09.12
10:35
(18) есть же в (11)

короче в отладчике посмотрел у меня всегда

Запрос.ЗаданиеНаДеМонтаж.НомерСтроки = 0
Запрос.ДокОснование.НомерСтроки = 0

т.е. не берет первую строку видать че то с выводом строки
22 Ночной Эльф
 
11.09.12
10:35
(19) есть же в (11)
23 Ночной Эльф
 
11.09.12
10:39
Ну а так то если разобраться то 1с то незнает какую строку выводить заявки или демонтажа, вот как вывести в объединении строку одного из документов?
24 Ёпрст
 
11.09.12
10:42
(21)
ПричинаДеМонтажа - реквизит чего ?
Шапки ?
Табличной части ?
25 Ёпрст
 
11.09.12
10:43
+ в (11) нет объединения документов, там выборка только по одному документу - окумент.ЗаданиеНаДеМонтаж, если что.
26 Ночной Эльф
 
11.09.12
10:57
ПричинаДеМонтажа  это табличная часть документа ЗаданиеНаДеМонтаж
27 Ёпрст
 
11.09.12
11:00
(26) это что ?
Реквизит табличной части ?
28 Ёпрст
 
11.09.12
11:01
тогда так, наслаждайся :

 Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)

   |Период с ВыбНачПериода по ВыбКонПериода;
   |ЗаданиеНаДеМонтаж = Документ.ЗаданиеНаДеМонтаж.ТекущийДокумент;
   |ПричинаДеМонтажа = Документ.ЗаданиеНаДеМонтаж.ПричинаДеМонтажа;
   |Группировка ЗаданиеНаДеМонтаж;
   |Группировка СтрокаДокумента;
   |"//}}ЗАПРОС

   ;
Пока Запрос.Группировка(1) = 1 Цикл
   Пока Запрос.Группировка(2) = 1 Цикл
          Сообщить(Запрос.ПричинаДеМонтажа);
   КонецЦикла;
КонецЦикла;
29 Ночной Эльф
 
11.09.12
11:05
(28) говорю же чтотак не работает
30 Ночной Эльф
 
11.09.12
11:05
вот полностью вся процедура

Процедура Сформировать()
   Перем Запрос, ТекстЗапроса, Таб;
   //Создание объекта типа Запрос
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ВыбНачПериода по ВыбКонПериода;
   |Обрабатывать НеПомеченныеНаУдаление;
   |ЗаданиеНаДеМонтаж = Документ.ЗаданиеНаДеМонтаж.ТекущийДокумент;
   |Контрагент = Документ.ЗаявкаПокупателя.Контрагент, Документ.ЗаданиеНаДеМонтаж.Контрагент;
   |Номенклатура = Документ.ЗаявкаПокупателя.Номенклатура, Документ.ЗаданиеНаДеМонтаж.Номенклатура;
   |ДокОснование = Документ.ЗаданиеНаДеМонтаж.ДокОснование;
   |НачРазмещения = Документ.ЗаявкаПокупателя.НачРазмещения;
   |КонРазмещения = Документ.ЗаявкаПокупателя.КонРазмещения;
   |ПричинаДеМонтажа = Документ.ЗаданиеНаДеМонтаж.ПричинаДеМонтажа;
   |Группировка ЗаданиеНаДеМонтаж;
   |Группировка СтрокаДокумента;
   |"//}}ЗАПРОС
   ;
   // Если ошибка в запросе, то выход из процедуры
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
       Возврат;
   КонецЕсли;

   ДатаД = "";
   
   // Подготовка к заполнению выходных форм данными запроса
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("Таблица");
   // Заполнение полей "Заголовок"
   Таб.ВывестиСекцию("Заголовок");
   Состояние("Заполнение выходной таблицы...");
   Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
   Пока Запрос.Группировка(1) = 1 Цикл
       Если ДатаД <> Запрос.ЗначениеУпорядочивания(1,1) Тогда
           Таб.ВывестиСекцию("Дата");
           ДатаД = Запрос.ЗначениеУпорядочивания(1,1);
       КонецЕсли;
       // Заполнение полей ЗаданиеНаДеМонтаж
       Таб.ВывестиСекцию("ЗаданиеНаДеМонтаж");
       Пока Запрос.Группировка(2) = 1 Цикл
           // Заполнение полей СтрокаДокумента
           Таб.ВывестиСекцию("СтрокаДокумента");
       КонецЦикла;
   КонецЦикла;
   // Вывод заполненной формы
   Таб.ТолькоПросмотр(1);
   Таб.Показать("Таблица", "");
КонецПроцедуры
31 Ночной Эльф
 
11.09.12
11:06
и вот таблица вывода


                               
   ДатаДок    Вид деятельности    Контрагент    ЗаявкаПокупателя    Менеджер    Начало размещения    Конец размещения    Комментарий
   Запрос.ЗначениеУпорядочивания(1,1)                            
       Запрос.ТекДокумент                        
       Запрос.Номенклатура    Запрос.Контрагент    Запрос.ДокОснование    Запрос.ДокОснование.Менеджер    Запрос.ДокОснование.НачРазмещения    Запрос.ДокОснование.КонРазмещения    Запрос.СтрокаДокумента.ПричинаДеМонтажа
32 Ночной Эльф
 
11.09.12
11:07
даже если ставлю Запрос.ПричинаДеМонтажа все равноне работает
33 Ночной Эльф
 
11.09.12
11:11
(28) так как ты мне написал делал даже в отладчике смотрел всегда номер строки 0 не берет он не хочет первую строку
34 Ёпрст
 
11.09.12
11:23
(29) врешь ведь.
35 Ёпрст
 
11.09.12
11:24
напиши код как в (28) без всякой отсебятины с нелепыми условиями на даты
36 Ёпрст
 
11.09.12
11:25
и уж тем более, выкини из головы слово ЗначениеУпорядочивания и забудь о нём навсегда.
37 Ночной Эльф
 
11.09.12
11:44
(35) ха да ты был прав все получилось спасибо =))

Только еще самый последний вопросик. Вот тут вывелось табличная часть документа задание на демонтаж, а как можно вывести табличную часть документа заявка который является основанием для задание на демонтаж?

если сделать так же

|НачРазмещения = Документ.ЗаявкаПокупателя.НачРазмещения;

где начразмещения реквизит табличной части


и выводить выражением Запрос.НачРазмещения то не чего не выведится
38 Ночной Эльф
 
11.09.12
11:45
вот весь получившийся запрос
ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ВыбНачПериода по ВыбКонПериода;
   |Обрабатывать НеПомеченныеНаУдаление;
   |ЗаданиеНаДеМонтаж = Документ.ЗаданиеНаДеМонтаж.ТекущийДокумент;
   |Контрагент = Документ.ЗаявкаПокупателя.Контрагент, Документ.ЗаданиеНаДеМонтаж.Контрагент;
   |Номенклатура = Документ.ЗаявкаПокупателя.Номенклатура, Документ.ЗаданиеНаДеМонтаж.Номенклатура;
   |ДокОснование = Документ.ЗаданиеНаДеМонтаж.ДокОснование;
   |НачРазмещения = Документ.ЗаявкаПокупателя.НачРазмещения;
   |КонРазмещения = Документ.ЗаявкаПокупателя.КонРазмещения;
   |ПричинаДеМонтажа = Документ.ЗаданиеНаДеМонтаж.ПричинаДеМонтажа;
   |ПричинаДеМонтажа1 = Документ.ЗаданиеНаДеМонтаж.ПричинаДеМонтажа1;
   |Группировка ЗаданиеНаДеМонтаж;
   |Группировка ДокОснование;
   |Группировка СтрокаДокумента;
   |"//}}ЗАПРОС
   ;
39 Ёпрст
 
11.09.12
11:50
(37) никак. Через реквизит ДокОснование ничего не вытащишь в тексте запроса.
40 opus70
 
11.09.12
13:08
Группировка ЗаданиеНаДеМонтаж;
Группировка ДокОснование;  // это лишняя групировка так как ДокОснование является ревизитом документа и ты до него доберешься через ЗаданиеНаДеМонтаж.ДокОснование
41 Voronve
 
11.09.12
13:17
(38) В запрос все одно будут попадать только доки "ЗаданиеНаДеМонтаж" документы "ЗаявкаПокупателя" мимо пролетят
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший