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

13.04.20

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

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

Всем привет!

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

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

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

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

Практика

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

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

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

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

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

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

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

 

 

Не болейте!

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

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

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

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

13000 10400 руб.

02.09.2020    122276    673    389    

715

Генератор схемы компоновки данных (СКД), написание кода схемы программно

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

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

3 стартмани

05.02.2024    4050    25    obmailok    17    

63

Набор-объект для СКД по тексту или запросу

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

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

1 стартмани

31.01.2024    2006    2    Yashazz    0    

29

СКД на JavaScript в 1С

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

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

2 стартмани

11.12.2023    8168    20    John_d    25    

123

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

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

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

05.12.2023    4662    PROSTO-1C    13    

61

Модель СКД

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

DSL для работы с СКД.

1 стартмани

15.11.2023    5813    15    kalyaka    5    

86

Пользовательские настройки отчетов 1С. Часть 1. Простые и расширенные настройки

СКД Инструкции пользователю Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 Россия Бесплатно (free)

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

18.09.2023    6719    accounting_cons    5    

29

Разрыв страницы в СКД. Легко!

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

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

01.09.2023    4529    KVIKS    15    

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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