Динамические колонки в макете отчета

1. troshin71 09.07.20 18:04 Сейчас в теме +0.43 $m
Добрый день коллеги, делаю отчет по расчетам контрагентами, основное все сделал, как мне сделать колонки счетов учета которые идут после поля "Итого с НДС", ниже прикрепил фото доделанный отчет в эксель, код отчета так же выкладываю.

ТабДок = ЭлементыФормы.ТабДок;
ТабДок.Очистить();
ТабДок.АвтоМасштаб = Истина;
ТабДок.ТолькоПросмотр = Истина;

Макет = ПолучитьМакет("Макет");
Шапка = макет.ПолучитьОбласть("Шапка");

Шапка.Параметры.Сформирован = Формат(ТекущаяДатаСеанса(), "dd.MM.yyyy");

СтрокаМОЛ = ?(НеПоказыватьДокументы,макет.ПолучитьОбласть("СтрокаМОЛБез"),макет.ПолучитьОбласть("СтрокаМОЛ"));
СтрокаДокумент = Макет.ПолучитьОбласть("СтрокаДокумент");
СтрокаДокумен = Макет.ПолучитьОбласть("СтрокаДокумен");
Итог = макет.ПолучитьОбласть("Итог");
ТекстОрганизация = "";
Если ЗначениеЗаполнено(Организация) Тогда
ТекстОрганизация = Организация;
КонецЕсли;
ТекстПериод = "";
Если (НачалоПериода>Дата(1,1,1)) И (КонецПериода>Дата(1,1,1)) Тогда
ТекстПериод = " за период с "+Формат(НачалоПериода, "ДФ=dd.MM.yyyy")+" по "+Формат(КонецПериода, "ДФ=dd.MM.yyyy");
КонецЕсли;
Шапка.Параметры.Организация = ТекстОрганизация;
Шапка.Параметры.Период = ТекстПериод;
ТабДок.Вывести(Шапка);
////////////ТУТ ИДЕТ ЗАПРОС К РЕГИСТРУ ХОЗРАСЧЕТНЫЙОСТАТКИИОБОРОТЫ

ЗапросДокумент.УстановитьПараметр("НачалоПериода",НачалоПериода);
ЗапросДокумент.УстановитьПараметр("КонецПериода", Граница);
ЗапросДокумент.УстановитьПараметр("МОЛ",ВыборкаМОЛ.МОЛ);
ЗапросДокумент.УстановитьПараметр("Организация",ВыборкаМОЛ.Организация);
ЗапросДокумент.УстановитьПараметр("Счет60", ПланыСчетов.Хозрасчетный.РасчетыСПоставщикамиИПодрядчиками);
ВыборкаДокумент = ЗапросДокумент.Выполнить().Выбрать();


Пока ВыборкаДокумент.Следующий() Цикл
СтрокаДокумент.Параметры.Заполнить(ВыборкаДокумент);
Если ТипЗнч(ВыборкаДокумент.Документ) = Тип("ДокументСсылка.ПриходныйКассовыйОрдер")ИЛИ ТипЗнч(ВыборкаДокумент.Документ) = Тип("ДокументСсылка.РасходныйКассовыйОрдер")ИЛИ ТипЗнч(ВыборкаДокумент.Документ) = Тип("ДокументСсылка.ПлатежноеПоручениеИсходящее") Тогда
СтрокаДокумент.Параметры.СтатьяДДС = ВыборкаДокумент.Документ.РасшифровкаПлатежа[0].СтатьяДвиженияДенежныхСредств;
СтрокаДокумент.Параметры.риход = ВыборкаДокумент.Документ.РасшифровкаПлатежа[0].СуммаПлатежа;
риходИтог = риходИтог + СтрокаДокумент.Параметры.риход;
СтрокаДокумент.Параметры.асход = NULL;
СтрокаДокумент.Параметры.СтатьяЗатрат = NULL;
СтрокаДокумент.Параметры.НДС = NULL;
СтрокаДокумент.Параметры.бНДС = NULL;

КонецЕсли;

Если ТипЗнч(ВыборкаДокумент.Документ) = Тип("ДокументСсылка.ПоступлениеТоваровУслуг") Тогда
СтрокаДокумент.Параметры.СтатьяДДС = NULL;

СтрокаДокумент.Параметры.риход = NULL;
Если ВыборкаДокумент.Документ.Услуги.Количество() > 0 Тогда
СтрокаДокумент.Параметры.СтатьяЗатрат = ВыборкаДокумент.Документ.Услуги[0].СтатьяЗатрат; //Подставляет статью затрат где докумете Услуги
КонецЕсли;
Если ВыборкаДокумент.Документ.Товары.Количество() > 0 Тогда
СтрокаДокумент.Параметры.СтатьяЗатрат = ВыборкаДокумент.Документ.Товары[0].СчетУчетаБУ; //Подставляет счет учета где в документе Товары
КонецЕсли;

Если ВыборкаДокумент.Документ.Товары.Количество() > 0 Тогда
Шапка.Параметры.СтатьяЗатрат = ВыборкаДокумент.Документ.Товары[0].СчетУчетаБУ; //Подставляет счет учета где в документе Товары
КонецЕсли;

КонецЕсли;


СтрокаДокумент.Параметры.Заполнить(ВыборкаДокумент);
СтрокаДокумент.Параметры.Дата = ВыборкаДокумент.Документ.Дата;
ТабДок.Вывести(СтрокаДокумент);

КонецЦикла;
Прикрепленные файлы:
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. LosevI 10.07.20 04:44 Сейчас в теме
Как я понял, ваша проблема не в том, чтобы получить эти данные, а чтобы вывести?
Если вы строите такую печатную форму (мое мнение отчеты - это СКД), то в таких случаях динамически формируемых колонок, вы должны при формировании каждой вашей строки в цикле делать вложенный цикл, в котором методом ТабличныйДокументВашейСтроки.Присоеденить(ОбластьЯчейкиКолонки) будут прилепляться ячейки.

То есть на макете, где нибудь ниже, вы должны еще построить области, где будет ячейка шапки динамической колонки и ячейка просто тела таблицы. Получать их, заполнять параметры, присоедениять.

"Вывести" прикрепляет табличный документ со следующей строки. "Присоеденить" - справа без переноса.
И не забывайте, что любое получение области - это отдельный табличный документ. Поэтому я вам предлагаю создавать пустой табличный документ для сборки вашей строки на каждом шаге цикла, и в него промежуточно формировать строку, а уже потом его выводить в основной табличный документ.
kabantus; alex-l19041; +2 Ответить
3. starjevschik 10.07.20 08:36 Сейчас в теме
не вдаваясь в код... общая методика построения такого рода отчетов: делаем таблицу (или дерево - смотря по тому, сколько уровней строк нам нужно) значений, которую полностью заполняем данными, которые нам нужны будут в отчете. Все колонки, которые нужны в отчете, должны быть в нашей таблице.
Потом выводим все это дело.
Ну или в СКД, если отчет не слишком сложный и его можно получить запросом осмысленной сложности.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот