Имя: Пароль:
1C
1С v8
Вывод на макет данных табличной части из запроса
,
0 poet
 
30.08.11
10:39
ТабДок = Новый ТабличныйДокумент;
   Макет = ЭтотОбъект.ПолучитьМакет("АнализПохода");
   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
                  |    РеализацияТоваровУслуг.Номер КАК Номер,
                  |    РеализацияТоваровУслуг.Дата КАК Дата,
                  |    РеализацияТоваровУслуг.Контрагент КАК Контрагент,
                  |    РеализацияТоваровУслуг.Проведен,
                  |    РеализацияТоваровУслуг.Товары.(
                  |        Количество,
                  |        Сумма,
                  |        ВесСПроцентомУсушки,
                  |        Номенклатура
                  |    )
                  |ИЗ
                  |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
                  |ГДЕ
                  |    РеализацияТоваровУслуг.Проведен = ИСТИНА
                  |    И РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаС И &ДатаПо
                  |
                  |УПОРЯДОЧИТЬ ПО
                  |    РеализацияТоваровУслуг.Дата
                  |ИТОГИ ПО
                  |    ОБЩИЕ";
   Запрос.УстановитьПараметр("ДатаС",  НачалоДня(ДатаС));
   Запрос.УстановитьПараметр("ДатаПо",  КонецДня(ДатаПо));
   Результат = Запрос.Выполнить();
   Выборка = Результат.Выбрать();
   ТабДок.Вывести(Макет.ПолучитьОбласть("Шапка"));
   ОбластьМакета = Макет.ПолучитьОбласть("Строка");
   Пока Выборка.Следующий() Цикл
       ОбластьМакета.Параметры.Номер = Выборка.Номер;
       ОбластьМакета.Параметры.Дата = Выборка.Дата;
       ОбластьМакета.Параметры.Контрагент = Выборка.Контрагент;
       ТабДок.Вывести(ОбластьМакета);    
   КонецЦикла;    
   ТабДок.Показать();

В приведенном коде беру из запроса данные формы и вывожу их в соответствующие поля на Макете, а как туда построчно выводить данные из табличной части перебираемого документа?
1 butterbean
 
30.08.11
10:40
внутри цикла пиши Для каждого СтрокаТЧ из Выборка.Товары ....
2 poet
 
30.08.11
10:49
добавил в цикл еще один:

       Для каждого СтрокаТЧ из Выборка.Товары Цикл
           ОбластьМакета.Параметры.Номенклатура = Выборка.СтрокаТЧ.Номенклатура;
           ОбластьМакета.Параметры.Вес = Выборка.СтрокаТЧ.Количество;
           ОбластьМакета.Параметры.Сумма = Выборка.СтрокаТЧ.Сумма;
           ОбластьМакета.Параметры.Поход = Выборка.СтрокаТЧ.ВесСПроцентомУсушки;
           ТабДок.Вывести(Макет.ПолучитьОбласть("Детализация"));
       КонецЦикла;


ругнулось "Итератор для значения не выявлен
       Для каждого СтрокаТЧ из Выборка.Товары Цикл
"
3 Kreont
 
30.08.11
10:57
(2) ошибка так лечится:
Для каждого СтрокаТЧ из Выборка.Товары Цикл
           ОбластьМакета.Параметры.Номенклатура = СтрокаТЧ.Номенклатура;


Но лучше сделать одинаковые наименование для макета и для полученого результата, и потом через такой метод: Заполнить() делать:
ОбластьМакета.Параметры.Заполнить(СтрокаТЧ);
4 poet
 
30.08.11
11:04
все равно ему какой-то "интератор" не нравится.
а СтрокаТЧ как-то определять не надо?
5 poet
 
30.08.11
11:35
так что ж с этим интератором делать?
6 butterbean
 
30.08.11
11:39
(5) надо так
ВыборкаСтрок = Выборка.Товары.Выбрать();
Пока ВыборкаСтрока.Следующий() Цикл...
7 butterbean
 
30.08.11
11:40
(6)+  просто в 8.1 подобные конструкции возвращали вроде бы таблицу значений, и теперь это результат запроса
8 poet
 
30.08.11
11:49
//    ВыборкаСтрок = Результат.Товары.Выбрать();
   ВыборкаСтрок = Выборка.Товары.Выбрать();
       Пока Выборка.Следующий() Цикл
       ОбластьМакета.Параметры.Номер = Выборка.Номер;
       ОбластьМакета.Параметры.Дата = Выборка.Дата;
       ОбластьМакета.Параметры.Контрагент = Выборка.Контрагент;
       ТабДок.Вывести(ОбластьМакета);    
       Пока ВыборкаСтрок.Следующий() Цикл
           ОбластьМакета.Параметры.Номенклатура = ВыборкаСтрок.Номенклатура;
           ОбластьМакета.Параметры.Вес = ВыборкаСтрок.Количество;
           ОбластьМакета.Параметры.Сумма = ВыборкаСтрок.Сумма;
           ОбластьМакета.Параметры.Поход = ВыборкаСтрок.ВесСПроцентомУсушки;
           ТабДок.Вывести(Макет.ПолучитьОбласть("Детализация"));
       КонецЦикла;

   КонецЦикла;    


в этом варианте дает ошибку
Значение не является значением объектного типа (Выбрать)
   ВыборкаСтрок = Выборка.Товары.Выбрать();
в таком: "ВыборкаСтрок = Результат.Товары.Выбрать();"
Поле объекта не выявлено (Товары)
   ВыборкаСтрок = Результат.Товары.Выбрать();

и ведь уверен что ларчик просто открывается...
9 poet
 
30.08.11
11:50
у меня 8.2 если что
10 butterbean
 
30.08.11
11:52
(8) это надо ВНУТРИ цикла делать
11 poet
 
30.08.11
12:05
Результат = Запрос.Выполнить();
   
   Выборка = Результат.Выбрать();
   ТабДок.Вывести(Макет.ПолучитьОбласть("Шапка"));
   Пока Выборка.Следующий() Цикл
       ОбластьМакета = Макет.ПолучитьОбласть("Строка");
       ОбластьМакета.Параметры.Номер = Выборка.Номер;
       ОбластьМакета.Параметры.Дата = Выборка.Дата;
       ОбластьМакета.Параметры.Контрагент = Выборка.Контрагент;
       ТабДок.Вывести(ОбластьМакета);    
       ВыборкаСтрок = Выборка.Товары.Выбрать();
       Пока ВыборкаСтрок.Следующий() Цикл
           ОбластьМакета = Макет.ПолучитьОбласть("Детализация");
           ОбластьМакета.Параметры.Вес = ВыборкаСтрок.Количество;
           ОбластьМакета.Параметры.Сумма = ВыборкаСтрок.Сумма;
           ОбластьМакета.Параметры.ВесСПроцентомУсушки = ВыборкаСтрок.ВесСПроцентомУсушки;
           ОбластьМакета.Параметры.Номенклатура = ВыборкаСтрок.Номенклатура;
           ТабДок.Вывести(ОбластьМакета);
       КонецЦикла;

   КонецЦикла;    


ПОБЕДИЛ!!!
СПАСИБО
12 butterbean
 
30.08.11
12:08
(11) а всего-то надо было сразу в отладчик залезть