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