Как записать параметр в уже выведенную область?

1. Artem Narchuk (burni4) 06.12.17 18:58 Сейчас в теме
Ситуация такая, мне нужно сформировать отчет со своими группировками строк (СКД не предлагать).
3 уровня группировки, пример кода ниже, но вопрос вот в чем, как мне Параметр1 вывести во второй группировке?

Для каждого Строка1 из Таб1 цикл
ТабДок.Вывести(Группировка1,1);
         Для каждого Строка2 из Таб2 цикл
               Группировка2.параметры.МойПараметр=Параметр1;
               ТабДок.Вывести(Группировка2,2);
                Для каждого Строка3 из Таб3 цикл
                       //Тут высчитывается Параметр1
                    ТабДок.Вывести(Группировка3,3);
                 КонецЦикла;
         КонецЦикла;
КонецЦикла;
Показать
Ответы
2. Георгий Баринберг (obsfromekb) 11 06.12.17 19:02 Сейчас в теме
(1) Ваш вопрос изначально поставлен некорректно. Скорее всего это решается итогами в неком абстрактном запросе, который Вы обходите по группировкам.
Если Вы так не умеете, либо задача какая-то кардинально другая, что действительно не остаётся других способов, кроме заявленного....
Тогда просто сначала считаете Параметр1, потом перебираете записи ещё раз и заполняете отчет.

Изи, изи, рил толк
3. Artem Narchuk (burni4) 06.12.17 19:04 Сейчас в теме
(2) там Параметр1 не получится подсчитать в запросе, а таблицы перебирать 2 раза не очень хороший вариант
4. Artem Narchuk (burni4) 06.12.17 19:06 Сейчас в теме
(2) наверное вы правы в том что я не правильно поставил вопрос, можно ли как-то обратиться к выведенной области?
5. Вадим Мориков (vadim1011985) 45 06.12.17 19:25 Сейчас в теме
(1) не вижу никаких проблем .

Самый простой вариант но с дополнительным циклом
не обязательно 2 группировку выводить во втором цикле или 3-ю в третьем , главное что бы соблюдалась последовательность областей

поэтому можно сделать например так

Для каждого Строка1 из Таб1 цикл
ТабДок.Вывести(Группировка1,1);
         Для каждого Строка2 из Таб2 цикл
                Для каждого Строка3 из Таб3 цикл
                       //Тут высчитывается Параметр1
                        МассивВыводимыхОбластей.Добавить(группировка3);  
                 КонецЦикла;
       
      Группировка2.параметры.МойПараметр=Параметр1;  
       ТабДок.Вывести(Группировка2,2);

Для каждого Группирорвка3 Из МассивВыводимыхОбластей цикл 
ТабДок.Вывести(Группировка3,3);
КонецЦикла;

         КонецЦикла;
КонецЦикла;
Показать


Конечно , вариант грубый , но можно что-нибудь покрасивее придумать
Второй вариант , у таб док есть свойство ТекущаяОбласть() после вывода группировки 2 сохраняй ссылку на эту область , в третьем цикле получай "параметр 1" и уже по сохраненной ссылке на область выводи его
6. Artem Narchuk (burni4) 06.12.17 19:29 Сейчас в теме
(5) спасибо, именно это и нужно было) правда остается вопрос как сохранить ссылку на область
7. Вадим Мориков (vadim1011985) 45 06.12.17 19:42 Сейчас в теме
(6)
 
//После вывода группировки 2-го уровня  
ИмяОбласти = ТабДок.Области.ТекущаяОбласть().Имя;
Цикл Строка 3 из Таб3
...
КонецЦикла;

 ОбластьГруппирвки2гоУровня=ТабДок.Области.Найти(ИмяОбласти);
8. Artem Narchuk (burni4) 06.12.17 19:54 Сейчас в теме
9. Artem Narchuk (burni4) 07.12.17 09:57 Сейчас в теме
(7)
ИмяОбласти = ТабДок.Области.ТекущаяОбласть().Имя;


ТекущаяОбласть() - нет такого метода в "Области"
11. Вадим Мориков (vadim1011985) 45 07.12.17 11:33 Сейчас в теме
(9) Да немного перепутал

Вот пример кода как можно обращатся к уже выведенной области (писал когда-то для отчета книга продаж покупок - задача получение всех счетов-фактур из книг и вывод на печать ) Суть обратиться к расшифровке ячейки где лежит нужное значение .переменная Результат - табличныйДокумент


  НачальныйНомерОбласти = 1;  // составная часть имени области
	
   ИмяОбласти = "строка_";  // состовная часть имени области
   
   ОбъектыПечати = Новый СписокЗначений; // для печати
   
   ОбластьСтроки = ИмяОбласти+НачальныйНомерОбласти; // формируем полное имя области 
   
   ОбластьТабДок = Результат.Области.Найти(ОбластьСтроки);  // получаем область по имени
   
   МассивСчетовФактурВыданных = Новый Массив;
   
   МассивКорректировочныхСчетовФактур = Новый Массив;
   
   Пока ОбластьТабДок <> Неопределено Цикл // цикл по областям
	   
	  СчетФактура = Результат.ПолучитьОбласть(ОбластьСтроки).ПолучитьОбласть(1,3).ТекущаяОбласть.Расшифровка;  // область ячейки где лежит нужная рассшифровка
	  
	  Если ТипЗнч(СчетФактура) = Тип("ДокументСсылка.СчетФактураВыданный") Тогда  
		  
		  МассивСчетовФактурВыданных.Добавить(СчетФактура);
		 	
	  КонецЕсли;	
	   	  
	  НачальныйНомерОбласти = НачальныйНомерОбласти+1; // инкримент следующей области
	  
	  ОбластьСтроки = ИмяОбласти+НачальныйНомерОбласти; // имя следующей области
	  
	  ОбластьТабДок = Результат.Области.Найти(ОбластьСтроки); // ищем область 
   КонецЦикла;

   Возврат ПоместитьВоВременноеХранилище(МассивСчетовФактурВыданных,УникальныйИдентификатор);

КонецФункции
Показать
12. Artem Narchuk (burni4) 07.12.17 11:46 Сейчас в теме
(11) сделал по вашему 1ому примеру) ваш код подтолкнул на ошибку)

Для каждого Строка1 из Таб1 цикл
ТабДок.Вывести(Группировка1,1);
         Для каждого Строка2 из Таб2 цикл
                Для каждого Строка3 из Таб3 цикл
                       группировка3= МакетДокумента.ПолучитьОбласть("ОбластьСтрока"); //переопределяем переменную, что бы не перезаписывать по одной и той же ссылке
                       //Тут высчитывается Параметр1
                        МассивВыводимыхОбластей.Добавить(группировка3);  
                 КонецЦикла;
       
      Группировка2.параметры.МойПараметр=Параметр1;  
       ТабДок.Вывести(Группировка2,2);

Для каждого Группирорвка3 Из МассивВыводимыхОбластей цикл 
ТабДок.Вывести(Группировка3,3);
КонецЦикла;

         КонецЦикла;
КонецЦикла;
Показать
10. Artem Narchuk (burni4) 07.12.17 11:26 Сейчас в теме
(5) первый вариант тоже не подходит, тк Группировка3 копируется как ссылка, и значения в массиве перезаписываются и становятся одинаковыми, есть ещё идеи?
13. Владимир Зырянов (VZyryanov) 07.12.17 14:14 Сейчас в теме
Группировка2.параметры.МойПараметр="??????";
    ТабДок.Вывести(Группировка2,2);
    Для каждого Строка3 из Таб3 цикл
        //Тут высчитывается Параметр1
        ТабДок.Вывести(Группировка3,3);
    КонецЦикла;
    Область=ТабДок.НайтиТекст("??????");
    Область.Текст=Параметр1;
Оставьте свое сообщение