[ Вопрос дня ] Как использовать метод “СкомпоноватьРезультат”, чтобы запустить компоновку отчета в фоновом режиме?

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

Локально же, на местах, не каждый разработчик готов в своей трудовой деятельности использовать функционал БСП. Многим хочется работать с более простым, прозрачным и понятным кодом.

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

Вопрос

Приведите пример кода, где можно методом СкомпоноватьРезультат запустить компоновку в фоне. Я не совсем понимаю, где именно можно использовать этот метод, в рамках чего?

Ответ

Например, в модуле формы можно использовать вот такой фрагмент кода:

СкомпоноватьРезультат(РежимКомпоновкиРезультата.Фоновый);

В типовых конфигурациях на базе БСП формирование отчетов происходит в фоне, чтобы не блокировать работу пользователей. Поэтому для примера также можно посмотреть, как происходит фоновое формирование отчетов, например, в УТ 11. Правда, код в типовых конфигурациях достаточно сложный, потому что он универсальный.

Откроем общую форму ФормаОтчета, изучим обработчик команды ОтчетСкомпоноватьРезультат. Там будет вот такой фрагмент кода:

Результат = ДлительныеОперации.ВыполнитьВФоне("ВариантыОтчетов.СформироватьОтчетВФоне", ПараметрыФормирования, ПараметрыВыполнения);
ФоновоеЗаданиеИдентификатор = Результат.ИдентификаторЗадания;
ФоновоеЗаданиеАдресХранилища = Результат.АдресРезультата;
Если Результат.Статус <> "Выполняется" Тогда
	ЗагрузитьРезультатФормированияОтчета();
Иначе 
	ОтобразитьСостояниеОтчета(НСтр("ru = 'Отчет формируется...'"), БиблиотекаКартинок.ДлительнаяОперация48);
КонецЕсли;
Возврат Результат;

То есть явно запускается фоновое задание, в котором выполняется компоновка отчета, результат помещается в табличный документ на форме.

Комментарий слушателя

В типовых конфигурациях фоновое исполнение осуществляется с помощью специальной библиотеки Длительные операции. Это я понимаю. Я не понимаю, где в модуле формы (в какой процедуре) можно использовать СкомпоноватьРезультат(РежимКомпоновкиРезультата.Фоновый).

Я просил привести пример рабочего кода в контексте именно в модуле формы. Например, создал я свой отчет с помощью СКД. База файловая. Как мне его запустить в фоне, не прибегая к библиотеке ДлительныеОперации?

Комментарий тренера

Создаем команду формы, выносим ее на форму. В обработчике созданной команды размещаем следующий код (этот метод можно вызвать в обработчике нажатия на кнопку на форме):

&НаКлиенте
Процедура ВыполнитьОтчет(Команда)
    СкомпоноватьРезультат(РежимКомпоновкиРезультата.Фоновый);
КонецПроцедуры

То есть при нажатии на нашу кнопку выполняется фоновая компоновка отчета.

Или еще вариант – можно это же действие выполнять при открытии формы:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    СкомпоноватьРезультат(РежимКомпоновкиРезультата.Фоновый);
КонецПроцедуры

Тогда отчет будет компоноваться сразу при открытии формы.

Комментарий слушателя

Спасибо! Теперь понятно.
Это пример разобранного вопроса из Мастер-группы курса
Профессиональная разработка отчетов в 1С 8.3 на СКД.

Описание курса и примеры видео

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Вход на сайт

Зарегистрироваться

Подтверждение регистрации будет отправлено на указанный e-mail.

Я подтверждаю, что ознакомлен(а) с Пользовательским соглашением, принимаю его условия и даю свое согласие на обработку моих персональных данных.

Восстановить доступ

E-mail или логин

Ссылка на создание нового пароля будет отправлена на указанный e-mail.