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

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

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

Изи, изи, рил толк
3. burni4 87 06.12.17 19:04 Сейчас в теме
(2) там Параметр1 не получится подсчитать в запросе, а таблицы перебирать 2 раза не очень хороший вариант
4. burni4 87 06.12.17 19:06 Сейчас в теме
(2) наверное вы правы в том что я не правильно поставил вопрос, можно ли как-то обратиться к выведенной области?
5. vadim1011985 99 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. burni4 87 06.12.17 19:29 Сейчас в теме
(5) спасибо, именно это и нужно было) правда остается вопрос как сохранить ссылку на область
7. vadim1011985 99 06.12.17 19:42 Сейчас в теме
(6)
 
//После вывода группировки 2-го уровня  
ИмяОбласти = ТабДок.Области.ТекущаяОбласть().Имя;
Цикл Строка 3 из Таб3
...
КонецЦикла;

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


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

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


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

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

КонецФункции
Показать
12. burni4 87 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. burni4 87 07.12.17 11:26 Сейчас в теме
(5) первый вариант тоже не подходит, тк Группировка3 копируется как ссылка, и значения в массиве перезаписываются и становятся одинаковыми, есть ещё идеи?
13. VZyryanov 07.12.17 14:14 Сейчас в теме
Группировка2.параметры.МойПараметр="??????";
    ТабДок.Вывести(Группировка2,2);
    Для каждого Строка3 из Таб3 цикл
        //Тут высчитывается Параметр1
        ТабДок.Вывести(Группировка3,3);
    КонецЦикла;
    Область=ТабДок.НайтиТекст("??????");
    Область.Текст=Параметр1;
Оставьте свое сообщение
Вакансии
Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день