Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
12 дек 2024, 13:51

Программное формирование отчета СКД 1С

Автор Faustgreen, 14 июл 2021, 17:36

0 Пользователей и 1 гость просматривают эту тему.

Faustgreen

Новичок в 1с, это мой первый отчет.

Короткое описание:
Отчет на скд, выводит информацию по складам и хранимым там товарам. Отчет делал на СКД, в целом все работает, но нужна некоторая доработка:
   1) Для каждого нового склада в отчете необходимо начинать нумерацию страниц с начала (Колонтитулы я так понимаю тут не подайдут).
   2) Необходимо печать итоги по каждой странице, где есть данные (кроме данных для каждого склада есть шапка и подвал).
   3). Прочее ...
 
Думаю можно ли вмешаться в процес формирования программно, нашел общий шаблон:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;

ИтоговыеНастройки = КомпоновщикНастроек.ПолучитьНастройки();

//Можем редактировать настройки компоновки (ИтоговыеНастройки)

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, ИтоговыеНастройки, ДанныеРасшифровки);

//Можем редактировать итоговые наборы данных и макеты табличного документа (МакетКомпоновкиДанных)

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновкиДанных, , ДанныеРасшифровки);

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

//Формируем отчет поэлементно
//Вместо стандартного вывода одним методом - ПроцессорВывода.Вывести(ПроцессорКомпоновки)
ПроцессорВывода.НачатьВывод();
Пока Истина Цикл
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
Если ЭлементРезультата = Неопределено Тогда
Прервать;
КонецЕсли;

//Можем редактировать данные, внешний вид и расшифровку выводимого элемента (ЭлементРезультата)

ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
КонецЦикла;
ПроцессорВывода.ЗакончитьВывод();

//Можем редактировать табличный документ (ДокументРезультат)

КонецПроцедуры

Хочу влезть в этот кусок кода:
Пока Истина Цикл
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
Если ЭлементРезультата = Неопределено Тогда
Прервать;
КонецЕсли;

//Можем редактировать данные, внешний вид и расшифровку выводимого элемента (ЭлементРезультата)

ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
КонецЦикла;

Например, для решения проблемы нумерации, хочу создать макет группировки типа,
страница [параметр1] из [параметр2]В начале цикла вывода завести счетчики страниц и по мере вывода элементов проверять переход страниц и увеличивать счетчик, по достижению нового склада счетчик страниц сбрасывать на начальное значение.

Т.е. код будет примерно такой:
Пока Истина Цикл
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
Если ЭлементРезультата = Неопределено Тогда
Прервать;
КонецЕсли;

Если {условие} тогда
           ЭлементНомерСтраницы = новый ЭлементРезультатаКомпоновкиДанных;
           ЭлементНомерСтраницы.макет = {Макет отображения номера страницы};
           ЭлементНомерСтраницы.параметры = {параметр1 = счетчик страниц};
       ПроцессорВывода.ВывестиЭлемент(ЭлементНомерСтраницы);
        КонецЕсли

ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
КонецЦикла;

Как такое можно сделать и можно ли? Т.е. может ли процессорВывода выводить мной созданный объект типа ЭлементРезультатаКомпоновкиДанных, и как создать этот элемент?

Теги: скд 

Похожие темы (5)

Рейтинг@Mail.ru

Поиск