|
Как выполнить процедуру модуля внешнего отчета в фоне? | ☑ | ||
---|---|---|---|---|
0
tciban
06.10.15
✎
11:14
|
Уважаемые коллеги! Как выполнить процедуру модуля внешнего отчета в фоне? Лучше всего через Длительные операции БСП. Суть проблемы - есть внешний отчет на СКД, формируется долго, после формирования в результирующую таблицу надо проставить картинки, а затем сбросить все это в эксель. А пока все это делается - пользователь должен заниматься своими делами. Лучше всего - ссылку на пример дайте, ну или где такое в типовых делается. Проблем/вопросов собственно 2:
Как указать имя экспортной процедуры при вызове ДлительныеОперации.ЗапуститьВыполнениеВФоне И второй вопрос - как выполнить компоновку СКД и вывод результата программно? пока написал в модуле внешнего отчета так: Процедура ВыполнитьСКД(ДокументРезультат) Экспорт ДокументРезультат.Очистить(); Настройки = КомпоновщикНастроек.ПолучитьНастройки(); ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,, ДанныеРасшифровки); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); КонецПроцедуры После выполнения, пока по кнопке формы вручную, таблицу выводит, но при этом пишет:"Отчет не сформирован, Нажмите Сформировать для получения отчета." Что я не так делаю? |
|||
1
tciban
06.10.15
✎
11:48
|
up
|
|||
2
tciban
06.10.15
✎
12:06
|
Коллеги! Ну хоть что нибудь скажите!
|
|||
3
lxndr
06.10.15
✎
12:06
|
по 2 вопросу: замени код на СкомпоноватьРезультат(Док)
|
|||
4
lxndr
06.10.15
✎
12:08
|
Если пользователь будет заниматься своими делами, мобыть тогда ему и запускать отчет не нужно? Пусть стартует по расписанию.
|
|||
5
qwerty
06.10.15
✎
12:11
|
Фоновое выполнение длительных операций
Для того чтобы длительные операции дополнительного объекта запускались в фоновом режиме, необходимо запустить выполнение команды в фоновом задании и после его завершения принять результат. Программный интерфейс, помогающий запускать длительные операции в фоне, представлен следующими процедурами: 1. В общем модуле ДополнительныеОтчетыИОбработкиКлиент: ВыполнитьКомандуВФоне и ПоказатьРезультатВыполненияКоманды. 2. В общем модуле ДополнительныеОтчетыИОбработки: ВыполнитьКомандуИзФормыВнешнегоОбъекта и ВыполнитьКоманду. Рассмотрим подключение по шагам: Шаг 1. Добавить реквизит управляемой формы для хранения ссылки внешнего объекта с типом СправочникСсылка.ДополнительныеОтчетыИОбработки. Например, «ОбъектСсылка». Шаг 2. В обработчике события управляемой формы ПриСозданииНаСервере сохранить ссылку внешнего объекта: &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Параметры.Свойство("ДополнительнаяОбработкаСсылка", ОбъектСсылка); КонецПроцедуры Шаг 3. Добавить функцию для выполнения команды в файловом режиме по шаблону (в блок служебных процедур и функций): &НаСервере Функция ВыполнитьКомандуНапрямую(ИдентификаторКоманды, ПараметрыКоманды) Возврат ДополнительныеОтчетыИОбработки.ВыполнитьКомандуИзФормыВнешнегоОбъекта(ИдентификаторКоманды, ПараметрыКоманды, ЭтотОбъект); КонецФункции Шаг 4. В обработчике команды управляемой формы, которая инициирует длительную операцию, добавить код по шаблону: &НаКлиенте Процедура ВыполнитьКомандуОбработки(Команда) ИдентификаторКоманды = Команда.Имя; ПараметрыКоманды = Новый Структура; ПараметрыКоманды.Вставить("ДополнительнаяОбработкаСсылка", ОбъектСсылка); ПараметрыКоманды.Вставить("СопровождающийТекст", НСтр("ru = 'Вставить наименование выполняемой команды'")); Состояние(ПараметрыКоманды.СопровождающийТекст); Если СтандартныеПодсистемыВызовСервера.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая Тогда РезультатВыполнения = ВыполнитьКомандуНапрямую(ИдентификаторКоманды, ПараметрыКоманды); // Добавить код приемки результата ДополнительныеОтчетыИОбработкиКлиент.ПоказатьРезультатВыполненияКоманды(ЭтотОбъект, РезультатВыполнения); Иначе ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьКомандуВФоне(ИдентификаторКоманды, ПараметрыКоманды, ЭтотОбъект); КонецЕсли; КонецПроцедуры Шаг 5. В обработчике события управляемой формы ОбработкаВыбора добавить код для приемки результата: &НаКлиенте Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) Если ИсточникВыбора.ИмяФормы = ДополнительныеОтчетыИОбработкиКлиент.ИмяФормыДлительнойОперации() Тогда // Добавить код приемки результата ДополнительныеОтчетыИОбработкиКлиент.ПоказатьРезультатВыполненияКоманды(ЭтотОбъект, ВыбранноеЗначение); КонецЕсли; КонецПроцедуры Примечание. Длительные операции могут быть только серверными. |
|||
6
qwerty
06.10.15
✎
12:12
|
Источник: http://its.1c.ru/
|
|||
7
tciban
06.10.15
✎
12:38
|
Я правильно понял, что это только для внешних отчетов, которые подключены через ДополнительныеОтчетыИОбработки?
|
|||
8
tciban
06.10.15
✎
13:15
|
Пример бы кто показал! Ну ничего я не понял из вышенаписанного! И теперь в отчаянии!
|
|||
9
qwerty
06.10.15
✎
18:50
|
(7) Да, по другому делать внешние отчеты не кошерно.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |