СКД: Прозрачная обработка результата

13.04.20

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

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

Всем привет!

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

Теоретические рассуждения

Отчет на базе СКД формируется либо по кнопке формирования отчета в самом отчете, либо, если это типовая, то из общей формы отчетов методом объекта отчета "СкомпоноватьРезультат". Вообще, конечно, этот метод в общей форме вызывается в фоновом задании, порождаемом общей формой. И где тут можно вставить свой код?

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

Практика

Итак, в чем же хитрость? Хитрость проста, как три копейки. Ниже модуль объекта отчета с перехватом:

Перем _СтандартнаяОбработка;

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	Если НЕ _СтандартнаяОбработка = Истина Тогда 
		СтандартнаяОбработка = Ложь;
		_СтандартнаяОбработка = Истина;
		СкомпоноватьРезультат(ДокументРезультат, ДанныеРасшифровки);
		
		// теперь можно покромсать ДокументРезультат - добавим дату формирования отчета

		ДокументРезультат.ВставитьОбласть(
				ДокументРезультат.Область(ДокументРезультат.ВысотаТаблицы + 1,1),
				ДокументРезультат.Область(1,1,1,ДокументРезультат.ШиринаТаблицы), 
				ТипСмещенияТабличногоДокумента.ПоВертикали
			);
			
		ДокументРезультат.Область(1,1).Текст = 
				СтрШаблон("Сформирован в %1", ТекущаяДата()
			);
	КонецЕсли;

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

Здесь мы определили переменную модуля, в которую будем писать, например, "Истину" (да что угодно), предварительно проверив, нет ли в ней этой самой "Истины" уже. Если есть, значит мы компонуем отчет повторно (вызванным методом СкомпоноватьРезультат", поэтому позволим СКД отработать в штатном режиме.

Ну а дальше можем, например, добавить в отчет дату и время компоновки, вставив область сверху:

 

 

Не болейте!

СКД отчеты система компоновки данных

См. также

SALE! %

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

12000 10000 руб.

02.09.2020    161349    893    399    

873

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

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

15.05.2024    9075    implecs_team    6    

47

Инструментарий разработчика СКД Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

3 стартмани

05.02.2024    7230    56    obmailok    21    

79

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

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    3197    5    Yashazz    1    

34

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

Долгое время поддерживаю web-портал, в котором появилась необходимость создавать отчеты. Просмотрев различные фреймворки на js, я решил сделать свое решение, которое позволяло бы быстро разрабатывать и добавлять новые отчеты на web-портал.

2 стартмани

11.12.2023    10965    24    John_d    25    

124

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

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

05.12.2023    8248    PROSTO-1C    15    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. starik-2005 3090 13.04.20 14:09 Сейчас в теме
Кстати, если кому интересно, как в СКД вывести картинки без всяких там пост-обработок, то могу рассказать - там все просто в действительности.
Swetlana; +1 Ответить
2. Swetlana 26 13.04.20 14:31 Сейчас в теме
9. starik-2005 3090 13.04.20 17:27 Сейчас в теме
(2) Оказалось, что главный диджей вечеринки уже об этом рассказал всяко-разно...
json; papche; +2 Ответить
12. пользователь 14.04.20 11:58
(9)
Прикрепленные файлы:
6. RocKeR_13 1366 13.04.20 16:34 Сейчас в теме
(1) средствами платформы (8.3.14+)? Или при построчном выводе, как описано тут: https://infostart.ru/public/177876/?
8. starik-2005 3090 13.04.20 17:20 Сейчас в теме
(6)
средствами платформы (8.3.14+)?
Ага. Но я так понял, что все и так знают - в выборе эксперта как раз висит статья на эту тему, так что повторяться смысла не имеет,
14. RocKeR_13 1366 14.04.20 14:27 Сейчас в теме
(8) На эту тему была большая статья "СКД. Отчеты с картинками"

UPD Уже увидел в (9) эту же ссылку)
3. VmvLer 13.04.20 14:35 Сейчас в теме
хотел побухтеть, мол "на фига столько текста", но увидел один абзац и решил таки осилить:

В действительности в модуле объекта отчета есть событие "ПриКомпоновкеРезультата".
кэп?

Если НЕ _СтандартнаяОбработка = Истина Тогда
изврат детектед
Если СтандартнаяОбработка <> Истина Тогда
так проще и не надо ляля о
приоритетах

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

тьху, ну и мерзкое же слово - пришлось гуглить ато запутался в пы сы.

статья в мемориз зачетных костылей, конеш.
4. RocKeR_13 1366 13.04.20 16:30 Сейчас в теме
(3)
тьху, ну и мерзкое же слово - пришлось гуглить ато запутался в пы сы.

И все же должно быть "постапокалиптического"
5. VmvLer 13.04.20 16:34 Сейчас в теме
(4) проще написать песцовый мир чем это выговорить!
7. RocKeR_13 1366 13.04.20 16:36 Сейчас в теме
(5)

— Парли… парлалиньтюль… парлиме… порш… не порш… не пор… парла… парла…
— Парла…
— …Ментер?
— Да! Парламентер! Переговоры!
— Дьявол, забери тех, кто придумал переговоры!
— То есть всех французов?
10. aximo 2100 14.04.20 08:53 Сейчас в теме
знавал я одного программиста, который дорабатывал отчеты именно так... не правил запрос (добавляя новые реквизиты), а именно правил макет - высчитывал количество отступов и т.д...

странный подход )
11. starik-2005 3090 14.04.20 10:51 Сейчас в теме
(10)
странный подход )
Ну а как Вы вставите в отчет картинки на версии ниже 8.3.14? Или как Вы время в отчет добавите и автора?
13. aximo 2100 14.04.20 13:13 Сейчас в теме
(11) картинку ни разу не добавлял.... а время добавлю собственным макетом https://infostart.ru/public/1178202/
15. bulpi 217 15.04.20 12:31 Сейчас в теме
А если сразу написать :

ДокументРезультат.ВставитьОбласть(...

без предыдущего текста, это не сработает ?
16. starik-2005 3090 15.04.20 13:41 Сейчас в теме
(15) нет, т.к. еще нет результата отчета - отчет тут еще пустой, и программист решает, будет он компоновать его автоматом или "вручную" "всеми этими процессорами" (или вообще обычным образом без всех этих процессоров).
17. mikl79 119 04.08.22 13:54 Сейчас в теме
спасибо, прикольный подход
действительно чтобы не городить огород с процессорами и не делать макетов, а просто и быстро
добавить что-то в отчет
18. zqzq 25 04.09.23 09:24 Сейчас в теме
_СтандартнаяОбработка
неудачное имя переменной, лучше было назвать как-нибудь ФормируемПовторно или ФормируемВручную.

Чтоб без таких шедевров было:
		СтандартнаяОбработка = Ложь;
		_СтандартнаяОбработка = Истина;
19. starik-2005 3090 04.09.23 10:19 Сейчас в теме
(18)
Чтоб без таких шедевров было:
На определенных стеках для того, чтобы показать, что переменная глобальная в модуле, используют подчеркивание. Так что для кого шедевр, а для кого рабочая конструкция в рамках соглашения о наименованиях в части переопределения.

Цель же статьи был в другом. Надеюсь, она от Вас не ускользнула.
20. zqzq 25 04.09.23 13:30 Сейчас в теме
(19) Да, статья полезная, но похожие переменные запутывают.
21. John_d 5893 05.11.23 12:53 Сейчас в теме
Можно проще сделать, без СтандартнаяОбработка
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
		ДокументРезультат.ВставитьОбласть(
				ДокументРезультат.Область(ДокументРезультат.ВысотаТаблицы + 1,1),
				ДокументРезультат.Область(1,1,1,ДокументРезультат.ШиринаТаблицы), 
				ТипСмещенияТабличногоДокумента.ПоВертикали
			);
			
		ДокументРезультат.Область(1,1).Текст = 
				СтрШаблон("Сформирован в %1", ТекущаяДата()
			);  

	
КонецПроцедуры
Показать
Оставьте свое сообщение