Фоновое формирование отчета СКД на УФ средствами БСП » История » Версия 1
Всеволод Дорофеев, 08.10.2018 17:52
1 | 1 | Всеволод Дорофеев | h1. Фоновое формирование отчета СКД на УФ средствами БСП |
---|---|---|---|
2 | 1 | Всеволод Дорофеев | |
3 | 1 | Всеволод Дорофеев | Иточник |
4 | 1 | Всеволод Дорофеев | |
5 | 1 | Всеволод Дорофеев | http://1c.ruboard.ru/public/622567/ |
6 | 1 | Всеволод Дорофеев | |
7 | 1 | Всеволод Дорофеев | Итак. Сам алгоритм, исполняемый в фоновом задании, размещается в модуле менеджера целевого отчета. Тут все просто и никакой магии: |
8 | 1 | Всеволод Дорофеев | <pre> |
9 | 1 | Всеволод Дорофеев | Процедура ВыполнитьКомпоновкуВФоне(СтруктураНастроек, АдресРезультатаВоВременномХранилище) Экспорт |
10 | 1 | Всеволод Дорофеев | |
11 | 1 | Всеволод Дорофеев | ТабличныйДокументРезультат = Новый ТабличныйДокумент; |
12 | 1 | Всеволод Дорофеев | ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; |
13 | 1 | Всеволод Дорофеев | |
14 | 1 | Всеволод Дорофеев | Отчет = Отчеты[СтруктураНастроек.ИмяОтчета].Создать(); |
15 | 1 | Всеволод Дорофеев | Отчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Отчет.СхемаКомпоновкиДанных)); |
16 | 1 | Всеволод Дорофеев | Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(СтруктураНастроек.НастройкиКомпоновщика); |
17 | 1 | Всеволод Дорофеев | Отчет.СкомпоноватьРезультат(ТабличныйДокументРезультат, ДанныеРасшифровки); |
18 | 1 | Всеволод Дорофеев | |
19 | 1 | Всеволод Дорофеев | ПоместитьВоВременноеХранилище(ДанныеРасшифровки, СтруктураНастроек.АдресДанныхРасшифровки); |
20 | 1 | Всеволод Дорофеев | ПоместитьВоВременноеХранилище(ТабличныйДокументРезультат, АдресРезультатаВоВременномХранилище); |
21 | 1 | Всеволод Дорофеев | |
22 | 1 | Всеволод Дорофеев | КонецПроцедуры |
23 | 1 | Всеволод Дорофеев | </pre> |
24 | 1 | Всеволод Дорофеев | |
25 | 1 | Всеволод Дорофеев | Нужно перехватить событие компоновки на клиенте. К сожалению, человеческого способа это сделать нет. Придется подсовывать свою команду вместо стандартной. Отключаем в доступных командах отчета штатное "Сформировать", выводим на форму кнопку со своей командой. Оформляем, чтобы выглядела аналогично. |
26 | 1 | Всеволод Дорофеев | |
27 | 1 | Всеволод Дорофеев | <pre> |
28 | 1 | Всеволод Дорофеев | &НаКлиенте |
29 | 1 | Всеволод Дорофеев | Процедура Сформировать(Команда) |
30 | 1 | Всеволод Дорофеев | |
31 | 1 | Всеволод Дорофеев | ФоновоеФормированияОтчета = ЗапускФормированияОтчетаСервер(); |
32 | 1 | Всеволод Дорофеев | Если ФоновоеФормированияОтчета <> Неопределено Тогда |
33 | 1 | Всеволод Дорофеев | НастройкиОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); |
34 | 1 | Всеволод Дорофеев | ОбработчикЗавершения = Новый ОписаниеОповещения("ЗавершениеФоновогоФормированияОтчетаКлиент", ЭтотОбъект); |
35 | 1 | Всеволод Дорофеев | ДлительныеОперацииКлиент.ОжидатьЗавершение(ФоновоеФормированияОтчета, ОбработчикЗавершения, НастройкиОжидания); |
36 | 1 | Всеволод Дорофеев | КонецЕсли; |
37 | 1 | Всеволод Дорофеев | |
38 | 1 | Всеволод Дорофеев | КонецПроцедуры |
39 | 1 | Всеволод Дорофеев | </pre> |
40 | 1 | Всеволод Дорофеев | |
41 | 1 | Всеволод Дорофеев | |
42 | 1 | Всеволод Дорофеев | <pre> |
43 | 1 | Всеволод Дорофеев | &НаСервере |
44 | 1 | Всеволод Дорофеев | Функция ЗапускФормированияОтчетаСервер() |
45 | 1 | Всеволод Дорофеев | |
46 | 1 | Всеволод Дорофеев | ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); |
47 | 1 | Всеволод Дорофеев | МетаданныеОтчета = ОтчетОбъект.Метаданные(); |
48 | 1 | Всеволод Дорофеев | ИмяОтчета = МетаданныеОтчета.Имя; |
49 | 1 | Всеволод Дорофеев | |
50 | 1 | Всеволод Дорофеев | Если НЕ Метаданные.Отчеты.Содержит(МетаданныеОтчета) Тогда // если отчет внешний, то выполняем компоновку стандартно |
51 | 1 | Всеволод Дорофеев | СкомпоноватьРезультат(); |
52 | 1 | Всеволод Дорофеев | Возврат Неопределено; |
53 | 1 | Всеволод Дорофеев | КонецЕсли; |
54 | 1 | Всеволод Дорофеев | |
55 | 1 | Всеволод Дорофеев | Если ПустаяСтрока(ДанныеРасшифровки) Тогда |
56 | 1 | Всеволод Дорофеев | ДанныеРасшифровки = ПоместитьВоВременноеХранилище(Новый ДанныеРасшифровкиКомпоновкиДанных, УникальныйИдентификатор); |
57 | 1 | Всеволод Дорофеев | КонецЕсли; |
58 | 1 | Всеволод Дорофеев | |
59 | 1 | Всеволод Дорофеев | ПараметрыФормирования = Новый Структура; |
60 | 1 | Всеволод Дорофеев | ПараметрыФормирования.Вставить("ИмяОтчета", ИмяОтчета); |
61 | 1 | Всеволод Дорофеев | ПараметрыФормирования.Вставить("АдресДанныхРасшифровки", ДанныеРасшифровки); |
62 | 1 | Всеволод Дорофеев | ПараметрыФормирования.Вставить("НастройкиКомпоновщика", Отчет.КомпоновщикНастроек.ПолучитьНастройки()); |
63 | 1 | Всеволод Дорофеев | |
64 | 1 | Всеволод Дорофеев | НастройкиЗапуска = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); |
65 | 1 | Всеволод Дорофеев | |
66 | 1 | Всеволод Дорофеев | Возврат ДлительныеОперации.ВыполнитьВФоне(СтрШаблон("Отчеты.%1.ВыполнитьКомпоновкуВФоне", ИмяОтчета), ПараметрыФормирования, НастройкиЗапуска); |
67 | 1 | Всеволод Дорофеев | |
68 | 1 | Всеволод Дорофеев | КонецФункции |
69 | 1 | Всеволод Дорофеев | </pre> |
70 | 1 | Всеволод Дорофеев | |
71 | 1 | Всеволод Дорофеев | |
72 | 1 | Всеволод Дорофеев | обработчик результата фонового задания (замечу, что данные расшифровки уже были положены по нужному адресу еще в фоновом задании, поэтому осталось получить только табличный документ): |
73 | 1 | Всеволод Дорофеев | |
74 | 1 | Всеволод Дорофеев | <pre> |
75 | 1 | Всеволод Дорофеев | &НаКлиенте |
76 | 1 | Всеволод Дорофеев | Процедура ЗавершениеФоновогоФормированияОтчетаКлиент(РезультатФоновойЗадачи, ДополнительныеПараметры) Экспорт |
77 | 1 | Всеволод Дорофеев | |
78 | 1 | Всеволод Дорофеев | Если РезультатФоновойЗадачи <> Неопределено И РезультатФоновойЗадачи.Статус = "Выполнено" Тогда |
79 | 1 | Всеволод Дорофеев | Результат = ПолучитьИзВременногоХранилища(РезультатФоновойЗадачи.АдресРезультата); |
80 | 1 | Всеволод Дорофеев | Элементы.Результат.ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.НеИспользовать; |
81 | 1 | Всеволод Дорофеев | Элементы.Результат.ОтображениеСостояния.Текст = ""; |
82 | 1 | Всеволод Дорофеев | КонецЕсли; |
83 | 1 | Всеволод Дорофеев | |
84 | 1 | Всеволод Дорофеев | КонецПроцедуры |
85 | 1 | Всеволод Дорофеев | </pre> |