&НаКлиенте
Перем ПараметрыОбработчикаОжидания;
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭтаФорма.КлючТекущегоВарианта = "ПримерОтчета";
Если Параметры.ДополнительнаяОбработкаСсылка = Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка() Тогда
// Почему то не передаются "Параметры" ДополнительнаяОбработкаСсылка, так что ищем сами
// Если же и здесь не находит, то служебные процедуры выведут ошибки.
ВременнаяСсылка = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Пример отчета");
Параметры.ДополнительнаяОбработкаСсылка = ВременнаяСсылка;
ОбъектСсылка = ВременнаяСсылка;
Иначе
ОбъектСсылка = Параметры.ДополнительнаяОбработкаСсылка;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СформироватьОтчетВФонеДлительныеОперации(Команда)
ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.Результат, "ФОРМИРОВАНИЕОТЧЕТА");
ОчиститьСообщения();
ОтключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания");
ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания);
ИнтервалПроверки = ПараметрыОбработчикаОжидания.ТекущийИнтервал;
Состояние(НСтр("ru = 'Выполнение отчета...'"));
СформироватьОтчетВФонеДлительныеОперацииНаСервере();
Если НЕ Выполнено Тогда
ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", ИнтервалПроверки, Истина);
Иначе
ОтключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания");
ЗагрузитьПодготовленныеДанные()
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СформироватьОтчетПрограммно(Команда)
СформироватьОтчетПрограммноНаСервере()
КонецПроцедуры
&НаСервере
Процедура СформироватьОтчетПрограммноНаСервере()
ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания);
ИдентификаторЗадания = Неопределено;
Выполнено = Ложь;
АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
ПараметрыКоманды = Новый Структура;
ПараметрыКоманды.Вставить("СхемаКомпоновкиДанных" , ОтчетОбъект.СхемаКомпоновкиДанных);
ПараметрыКоманды.Вставить("НастройкиПользователя" , Отчет.КомпоновщикНастроек.ПользовательскиеНастройки);
ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.Результат, "ФОРМИРОВАНИЕОТЧЕТА");
ОтчетОбъект.СформироватьОтчет(ПараметрыКоманды,АдресХранилища);
ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.Результат, "НеИспользовать");
ЗагрузитьПодготовленныеДанные();
КонецПроцедуры
&НаСервере
Процедура СформироватьОтчетВФонеДлительныеОперацииНаСервере()
ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания);
ИдентификаторЗадания = Неопределено;
Выполнено = Ложь;
АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
ПараметрыКоманды = Новый Структура;
ПараметрыКоманды.Вставить("АдресХранилища" , АдресХранилища);
ПараметрыКоманды.Вставить("ДополнительнаяОбработкаСсылка" , ОбъектСсылка);
ПараметрыКоманды.Вставить("СопровождающийТекст" , НСтр("ru = 'Выполнение отчета...'"));
ПараметрыКоманды.Вставить("ИдентификаторКоманды" , "СформироватьОтчет");
ПараметрыКоманды.Вставить("УникальныйИдентификатор" , УникальныйИдентификатор);
ПараметрыКоманды.Вставить("СхемаКомпоновкиДанных" , ОтчетОбъект.СхемаКомпоновкиДанных);
ПараметрыКоманды.Вставить("НастройкиПользователя" , Отчет.КомпоновщикНастроек.ПользовательскиеНастройки);
Попытка
ЗаданиеРезультат = ДлительныеОперации.ЗапуститьВыполнениеВФоне(
УникальныйИдентификатор,
"ДополнительныеОтчетыИОбработки.ВыполнитьКоманду",
ПараметрыКоманды,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Выполнение дополнительного отчета или обработки ""%1"", имя команды ""%2""'"),
Строка(ПараметрыКоманды.ДополнительнаяОбработкаСсылка),
ПараметрыКоманды.ИдентификаторКоманды));
Выполнено = ЗаданиеРезультат.ЗаданиеВыполнено;
ВызваноИсключение = Ложь;
Если Выполнено Тогда
ЗагрузитьПодготовленныеДанные();
Иначе
ИдентификаторЗадания = ЗаданиеРезультат.ИдентификаторЗадания;
КонецЕсли;
Исключение
Выполнено = Ложь;
ВызваноИсключение = Истина;
ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура СформироватьОтчетВФонеРежимКомпоновки(Команда)
ЭтаФорма.СкомпоноватьРезультат(РежимКомпоновкиРезультата.Фоновый);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПроверитьВыполнениеЗадания()
Попытка
Если ЗаданиеВыполнено(ИдентификаторЗадания) Тогда
ЗагрузитьПодготовленныеДанные();
ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.Результат, "НеИспользовать");
Иначе
ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания);
ПодключитьОбработчикОжидания(
"Подключаемый_ПроверитьВыполнениеЗадания",
ПараметрыОбработчикаОжидания.ТекущийИнтервал,
Истина);
КонецЕсли;
Исключение
ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.Результат, "НеИспользовать");
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьПодготовленныеДанныеНаКлиенте()
ЗагрузитьПодготовленныеДанные();
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьПодготовленныеДанные()
РезультатВыполнения = ПолучитьИзВременногоХранилища(АдресХранилища);
Результат = РезультатВыполнения.Результат;
//ДанныеРасшифровки = РезультатВыполнения.ДанныеРасшифровки;
ИдентификаторЗадания = Неопределено;
ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.Результат, "НеИспользовать");
//ДополнительныеСвойства = Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ЗаданиеВыполнено(ИдентификаторЗадания)
Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания);
КонецФункции