1. burni4 5 06.12.17 18:58 Сейчас в теме

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

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

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

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

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


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

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


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

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

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

Вакансии

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

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

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

Системный аналитик
Новосибирск
зарплата от 80 000 руб. до 100 000 руб.
Полный день

Программист 1С
Салехард
зарплата от 80 000 руб. до 200 000 руб.
Полный день