Филиппов Олег | Руководитель Управления ИТ | WiseAdvice

«Коллаборация. Методики и инструменты организации эффективного взаимодействия внутри команды»

- Про "я здесь начальник" придётся забыть. - Общие цели и ценности как основа успеха. - Почему коммуникации важны, почему на это важно и нужно тратить время. - Инструментарий: - Платформы для чатов (Slack, Telegram, HipChat) - Корпоративные Wiki (Confluence, MS SharePoint Wiki, DokuWiki) - Управление задачами (Redmine, Jira, BaseCamp, Trello) - Работа с кодом (GitLab, GitHub, MS TFS)

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

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

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


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

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


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

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

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

Вакансии


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

Преподаватель 1С
Санкт-Петербург
Полный день

Удаленный ИТ-журналист
Санкт-Петербург
По совместительству

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