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

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 Сейчас в теме
не вдаваясь в код... общая методика построения такого рода отчетов: делаем таблицу (или дерево - смотря по тому, сколько уровней строк нам нужно) значений, которую полностью заполняем данными, которые нам нужны будут в отчете. Все колонки, которые нужны в отчете, должны быть в нашей таблице.
Потом выводим все это дело.
Ну или в СКД, если отчет не слишком сложный и его можно получить запросом осмысленной сложности.
Оставьте свое сообщение
Вакансии
Программист 1С
Казань
зарплата от 150 000 руб.
Полный день

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

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

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

Специалист техподдержки
Санкт-Петербург
зарплата от 100 руб. до 150 руб.
Полный день