Вывод результата отчета СКД в разные табличные документы

Публикация № 890264 21.08.18

Разработка - СКД

Отчет СКД программный вывод результата

В ходе выполнения своей повседневной работы столкнулся с интересной клиентской задачей - требовалось результат отчета СКД вывести на форму отчета в разные вкладки формы в разные табличные документы. Как оказалось, информации по такому выводу отчета в интернете маловато, поэтому решил скомпоновать свой опыт решения этой задачи в одной статье.

Дано:

-Отчет на СКД с кучей независимых друг от друга группировок.

-Форма отчета со страницами и табличными документами результата отчета на них.

Требуется вывести каждую группировку в соответствующий ей табличный документ.

Что я сделал:

На форме отчета сделал свою кнопку "Сформировать". Событием "ПриКомпоновкеРезультата" не удалось воспользоваться, т.к. из этого события нет доступа к табличным документам на форме отчета.

В процедуре вывода отчета используем следующий код:

&НаКлиенте
Процедура СформироватьОтчет(Команда)
	СформироватьОтчетНаСервере();
КонецПроцедуры

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

Сначала, запихиваем все табличные документы результата в массив и очищаем эти табличные документы.

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

Последним этапом является вывод нашего результата отчета. Он происходит в немного модифицированном типовом цикле вывода.

Важный момент. Первый элемент результата СКД содержит все макеты результата, поэтому его нужно вывести во все табличные документы.

Чтобы определить момент, когда нужно перейти в новую таблицу для вывода следующей группировки я между группировками отчета добавил служебную группировку ПереходВДругуюТаблицу и в параметры отчета СКД новый параметр данных Разрыв, который и вывожу в этой служебной группировке. Это сделано, чтобы однозначно определить, что выводимый элемент отчета является сигналом к переходу на новую страницу. Для служебной группировки сделал условное оформление - Цвет фона, Цвет текста и Цвет границы - белый, чтобы не засорять нам отчет. Кстати, этот же метод можно использовать для вставки разрыва страницы после группировки в результате отчета, если для нашей служебной группировке настроить макет и добавить туда горизонтальный разделитель страницы.

Скачать файлы

Наименование Файл Версия Размер
Вывод результата отчета СКД в разные табличные документы:

.erf 31,65Kb
23
.erf 31,65Kb 23 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. A_Max 19 21.08.18 23:22 Сейчас в теме
На вскидку:

	МассивТаблиц = Новый Массив;
	МассивТаблиц.Добавить(Таблица1);
	МассивТаблиц.Добавить(Таблица2);
	МассивТаблиц.Добавить(Таблица3);
	МассивТаблиц.Добавить(Таблица4);
	МассивТаблиц.Добавить(Таблица5);
	МассивТаблиц.Добавить(Таблица6);
	МассивТаблиц.Добавить(Таблица7);
	МассивТаблиц.Добавить(ТаблицаДополнительно);
	
	МассивПроцессоровВыводаТаблиц = Новый Массив;
	Для Каждого Таблица из МассивТаблиц Цикл
		Таблица.Очистить();
		ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
		ПроцессорВывода.ОтображатьПроцентВывода = Ложь;
		ПроцессорВывода.УстановитьДокумент(Таблица);
		ПроцессорВывода.НачатьВывод();
	КонецЦикла;
Показать


И дальше вместо получения по индексу каждый раз лучше определить один раз
ТекущийПроцессорВывода=МассивПроцессоровВыводаТаблиц[Итератор];
2. Dipod 110 22.08.18 00:13 Сейчас в теме
(1)Согласен, в смысле стиля кода, так будет лучше.
3. acanta 13.01.19 16:44 Сейчас в теме
Спасибо, очень хороший метод. Можно так же сохранить отчет в табличные части документа и схему компоновки с отборами в реквизиты.
4. Dipod 110 14.01.19 10:20 Сейчас в теме
(3) О, я правильно понял, что этим способом можно воспользоваться для какого-то сложного заполнения документа средствами СКД? То есть, мы программно формируем отчет, а из отчета пишем не в табличный документ, а сразу в табличные части документа?

Очень интересная идея, спасибо.
Оставьте свое сообщение

См. также

Гибкие отборы через СКД на управляемых формах. Демо-обработка

СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

В данной публикации предлагаю вам рабочий пример использования системы компоновки данных для отборов на управляемых формах.

1 стартмани

07.06.2023    1992    10    quazare    6    

31

Вывод элементов иерархии верхнего уровня на СКД

СКД Платформа 1С v8.3 Абонемент ($m)

Как получить родителя первого уровня иерархического справочника с помощью СКД.

1 стартмани

06.06.2023    1435    echo77    6    

49

Обработка результатов запроса произвольными вычисляемыми полями. Обзор некоторых новых функций СКД

Запросы СКД Платформа 1С v8.3 Запросы Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

В данной статье вспомним, как обрабатывать результаты запроса в вычисляемых полях СКД, а также сделаем небольшой обзор на новые функции СКД платформы 8.3.20.

07.02.2023    3361    quazare    7    

37

Выборочная свертка группировок для СКД

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Россия Абонемент ($m)

Методика разработки отчета на СКД с возможностью свёртки части группировок по заданному программно условию. - свертка по значению поля (неотрицательные - сворачиваются); - свертка подчиненных в иерархии с произвольным количеством уровней.

1 стартмани

16.01.2023    1805    schthaxe    3    

27

Разрабатываем отчет на СКД, содержащий данные из расширения

СКД Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Ввиду развития механизма расширений в 1С часто приходится сталкиваться с задачей, когда требуется разработать отчет, который должен строиться как по данным конфигурации, так и по данным расширения. И здесь присутствует нюанс, о котором я и хотел бы поведать в этой статье. Расскажу также о способе решения, который я использую.

17.10.2022    4078    al_zzz    10    

44

Хитрости СКД. Часть 4

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

Столкнулся с тем, что мне приходится писать гору отчетов. Во многих приходится использовать повторяющиеся приемы. Решил написать шпаргалку, которая, надеюсь пригодится не только мне. В этой статье: Работа с 2 схемами в одном отчете, когда данные одной схемы являются исходными для другой. Копирование пользовательских отборов из одной схемы в другую. Корректная модификация формы отчета БСП.

12.10.2022    5157    milkers    17    

46

Тестовая задача: таблица умножения на СКД

СКД Платформа 1С v8.3 Бесплатно (free)

Альтернативное решение предложенной задачи.

14.06.2022    4277    81    echo77    6    

38

Хитрости СКД. Часть 3

СКД Универсальные функции Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

Столкнулся с тем, что мне приходится писать гору отчетов. Во многих приходится использовать повторяющиеся приемы. Решил написать шпаргалку, которая, надеюсь пригодится не только мне. В этой статье: Объединение ячеек в отчете только на определенном уровне иерархии, Постобработка итогов в табличном документе, Скрытие колонок в зависимости от количества месяцев в периоде.

28.05.2022    6707    milkers    11    

87

Отчет на СКД с использованием форм из БСП. Варианты передачи списка значений в параметр СКД

БСП (Библиотека стандартных подсистем) СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Россия Абонемент ($m)

Показаны способы передачи списка значений в значение по умолчанию параметра СКД типового отчета из БСП, с возможностью последующей модификации пользователем.

1 стартмани

20.04.2022    5429    eugene-p    8    

28

По-настоящему свои макеты в отчетах СКД. Исследование процесса компоновки и генерация кода отчета

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Абонемент ($m)

Как скрестить формирование отчетных данных с помощью СКД и вывод в табличный документ с помощью Макет.ПолучитьОбласть(...) и ТабДок.Вывести(Секция)? А также сделать этот процесс простым и удобным? Об этом в статье ниже.

1 стартмани

22.03.2022    4934    Alxby    8    

47

Редактирование данных в ячейках СКД (простая реализация)

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Абонемент ($m)

На примере справочника "Номенклатура" рассмотрим, как в отчёте можно редактировать его реквизиты, и изменения мгновенно будут записываться в элемент справочника.

1 стартмани

11.03.2022    8661    7    Flashill    20    

52

Убираем параметры из отбора СКД

Универсальные функции СКД Платформа 1С v8.3 Система компоновки данных Бесплатно (free)

Заметка о некоторых технических нюансах параметров данных и отборов СКД.

17.02.2022    5467    Yashazz    29    

32

Шаблон отчета на СКД (обычные формы)

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Абонемент ($m)

Улучшенный шаблон отчёта СКД, реализованный на обычных формах. Лаконичный и функциональный, весь необходимый минимум для управления отчётом вынесен на форму отчёта, что избавляет рядовых пользователей от необходимости лезть внутрь настроек отчёта. Форма сделана гибкой и позволяет легко себя адаптировать под Ваши потребности. Ряд элементов формы сделан сворачиваемыми и растягиваемыми.

2 стартмани

14.02.2022    6797    20    Eugen-S    4    

9

Отладка СКД

СКД Система компоновки данных Бесплатно (free)

На митапе «Практика применения СКД» выступил ведущий разработчик 1С аутсорсинговой компании Programming Store Павел Шемякин. Павел рассказал, как бороться с нежелательной «оптимизацией» запроса СКД, какие инструменты для отладки СКД можно использовать – в чем их отличия и преимущества, и показал, как работать с консолью компоновки данных – на какие элементы структуры XML-файла макета СКД обращать внимание при поиске причин неправильной работы отчета.

08.02.2022    10710    ProgrammingStore    5    

85

Программная работа и компоненты СКД

СКД Система компоновки данных Бесплатно (free)

На митапе «Практика применения СКД» выступил архитектор Digital Business Петр Базелюк. Он рассказал о том, как работать с СКД программно, и как, используя общедоступную библиотеку FoxyLink, создать свой процессор вывода результата СКД напрямую в формат JSON или в CSV.

04.02.2022    4577    pbazeliuk    4    

69

Доработка типового отчета на СКД с помощью расширения

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Абонемент ($m)

Доработка типового отчета на СКД в БП 3.0 с помощью расширения конфигурации. Пример, как можно внести изменения в типовой отчет "Бухгалтерии предприятия" 3.0 без снятия конфигурации с поддержки. Описан пошаговый алгоритм действий и способы решения возникающих при этом проблем.

1 стартмани

09.01.2022    9543    Spacer    9    

26

Реализация отборов на форме с помощью СКД

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

В статье описана практическая методика использования системы компоновки данных (СКД) для реализации отборов на любых формах конфигурации.

28.12.2021    14792    quazare    6    

131

Варианты применения СКД вне отчетов в отраслевых конфигурациях

СКД Система компоновки данных Бесплатно (free)

Директор и ведущий разработчик компании «Арт Порт» Максим Артеменко выступил на митапе, посвященном практике применения СКД. Максим рассказал о вариантах применения механизма настроек СКД для решения нестандартных задач – визуального оформления, сегментирования данных и автоматического заполнения примечаний к документам.

18.11.2021    3733    drmaxart    0    

42

Кейсы решения задач на СКД

СКД Платформа 1С v8.3 Система компоновки данных Бесплатно (free)

Разработчик 1С в компании Neti Александр Крынецкий выступил на Infostart Meetup, посвященном практике работы с СКД. Александр поделился с коллегами кейсами по решению сложных задач при работе с СКД.

08.11.2021    6187    echo77    7    

99

Грабли на СКД

СКД Платформа 1С v8.3 Система компоновки данных Россия Бесплатно (free)

Наиболее частые проблемы, с которыми сталкиваются программисты 1С при разработке отчетов на СКД.

02.11.2021    15421    echo77    17    

136

СКД: 5 советов, как сделать лучше

СКД Платформа 1С v8.3 Система компоновки данных 8.3.14 Бесплатно (free)

Несколько примеров решения задач с использованием разных подходов

27.10.2021    12646    Neti    19    

192

Программное открытие отчета СКД с параметрами и отбором

СКД Платформа 1С v8.3 Управляемые формы Система компоновки данных Бесплатно (free)

Периодически возникает задача открытия формы отчёта СКД уже со сформированным отчётом, с определёнными параметрами и отборами. В данной публикации рассматриваются способы сделать это как в обычном приложении, так и в управляемом.

07.08.2021    29583    Eugen-S    35    

104

Объект "Схема запроса" и расширения языка запросов СКД

СКД Платформа 1С v8.3 Запросы Россия Бесплатно (free)

Если использовать объект СхемаЗапроса для модификации текстов запросов, содержащих расширения СКД, то могут возникнуть ошибки времени исполнения. И полученных запрос не будет работать. В статье расскажу, как этого избежать.

18.07.2021    3413    mysm    14    

27

Изменение расшифровки макета СКД до компоновки

СКД Платформа 1С v8.3 Система компоновки данных Бесплатно (free)

Это не про работу с данными расшифровки. Это про изменение расшифровок полей ДО того, как СКД выполнилась. Быстрый способ сделать нужные расшифровки.

12.07.2021    4402    Yashazz    7    

37

Формирование отчета СКД с расшифровкой из обработки

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

Формирование отчета СКД из обработки немного отличается от формирования из отчета.

27.04.2021    6891    John_d    14    

74

Эффективные приемы разработки

Математика и алгоритмы Рефакторинг и качество кода СКД Платформа 1С v8.3 Бесплатно (free)

На Infostart Meetup Ekaterinburg.Online выступил Сергей Наумов – руководитель центра аналитики и консалтинга WiseAdvice. Сергей поделился с коллегами приемами разработки, которые помогут избежать потенциальных проблем при реализации сложных проектов.

07.04.2021    5355    SergeyN    13    

39

Полезные примеры СКД, ч.2

СКД Платформа 1С v8.3 Система компоновки данных Бесплатно (free)

Еще несколько примеров решения задач в СКД.

06.04.2021    18313    Neti    9    

216

Полезные примеры СКД, ч.1

СКД Система компоновки данных Бесплатно (free)

Подборка видео по решению различных задач в отчетах на СКД.

30.03.2021    23104    Neti    21    

365

СКД: все, что вы хотели знать о подмене схемы компоновки данных в отчетах и обработках

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Абонемент ($m)

Довольно часто на различных тематических форумах задается вопрос, можно ли использовать в отчете/обработке несколько схем компоновки данных, подменяя одну другой по мере надобности? При этом желательно, чтобы и пользовательские настройки при смене схемы менялись соответственно.

1 стартмани

07.12.2020    12158    user1502278    23    

58

Программная корректировка при выводе отчета СКД

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Абонемент ($m)

Большинство отчетов на СКД, требующих программной корректировки, реализуются с помощью программной настройки СКД или обработки табличного документа уже после вывода отчета. Но во многих случаях более оптимально будет выполнять программную корректировку в процессе вывода отчета. Для этого существуют программные объекты, о которых я расскажу в данной статье.

1 стартмани

08.10.2020    25607    dabu-dabu    18    

239

Быстрое формирование наборов данных Объект схемы СКД

СКД Система компоновки данных Конфигурации 1cv8 Абонемент ($m)

При разработке отчета, использующего наборы данных Объект, зачастую много времени занимает описание самих наборов в схеме СКД. Если таких наборов несколько или количество полей в них достаточно велико, то задача усложняется. В публикации приводится способ сокращения подобных трудозатрат.

1 стартмани

05.07.2020    12786    8    Алексей Воробьев    16    

56

Роль "Остатки" поля набора данных СКД в отчете и в расшифровке

СКД Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

В СКД создан набор данных "Запрос". Запрос выполняется к виртуальной таблице "Остатки и обороты", периодичность регистра "Авто", выбираются все измерения и ресурсы регистра, а так же выбирается Регистратор и ПериодСекунда. Для полей содержащих остатки устанавливается роль "Остатки". Для полей "Регистратор" и "ПериодСекунда" устанавливается роль "Период". Для поля "Регистратор" устанавливается выражение упорядочивания.

24.05.2020    13441    kasper076    19    

26

СКД. Использование Менеджера временных таблиц в системе компоновки

СКД Платформа 1С v8.3 Запросы Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

С выпуском платформы 8.3.17 фирма 1С анонсировала возможность передачи в механизм системы компоновки данных менеджера временных таблиц. Платформа вышла из беты, самое время разобраться с новым механизмом, тем более в комментариях я встретил непонимание принципов работы этого нововведения. Постараюсь кратко.

29.04.2020    20207    ixijixi    50    

112

Ограничения полей, или как обмануть СКД?

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

Каждое из ограничений полей можно обойти. Рассмотрим варианты обхода и способы обезопасить свой отчет.

15.04.2020    29082    SeiOkami    43    

125

Работа с запросами в 1С СКД. Отладка СКД

СКД Запросы Система компоновки данных Россия Бесплатно (free)

В предыдущем разделе мы изучали с вами особенности работы с запросами в СКД. Для изучения (отладки) работы различных схем компоновки данных я использовал консоль компоновки данных.

15.04.2020    7561    ProgrammingStore    3    

33

Работа с запросами в 1С СКД. Особенности работы запросов в СКД. Часть 3

СКД Запросы Система компоновки данных Россия Бесплатно (free)

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

13.04.2020    12811    ProgrammingStore    5    

51