Пример формирования внешнего отчета программно и в фоновом режиме

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

Этот отчет (ОСВ) был сделан для примера, так сказать показать наглядно на практике, какие есть возможности формирования отчета в платформе 1С.

На форме присутствуют 4 кнопки, которые формируют отчет тем или иным способом.

1. Сформировать — Отчет будет формироваться штатным образом, то есть стандартная команда формы "Сформировать".

2. Сформировать (программно) — Отчет будет формироваться программным образом вызывая процедуру "СформироватьОтчет" в модуле объекта. Передавая в качестве параметров "СхемуКомпоновкиДанных" и АдресХранилища куда будет помещатся результат процедуры. 

3. Сформировать (длительные  операции в фоне) — Отчет формируется по средствам БСП используя модули "ДлительныеОперации.ЗапуститьВыполнениеВФоне" и "ДополнительныеОтчетыИОбработки.ВыполнитьКоманду". Также как и во 2-ом способе основной процедурой обработчиком будет являтся  "СформироватьОтчет" в модуле объекта. Этот способ формирования я считаю самой сложной (по крайней мере для меня), так как в свое время, чтобы релизовать этот способ у меня ушло много времени. И собственно порадило эту публикация, чтобы другие тоже не теряли время. Главным услувием является добавления отчета как внешний отчет в режиме предприятия в подсистему "ДополнительныеОтчетыИОбработки".

4. Сформировать отчет (режим компоновки в фоне) —  Отчет формируется также как и первый способ, исключение лишь в том что задается режим компоновки как "РежимКомпоновкиРезультат.Фоновый".

Отчет тестировался на версия БСП — 2.2.5.32, который был в конфигурации Бухгалтерия для Казахстана ред. 3.0 релиз 3.0.9.35. Отчет можно в дальнейшем использовать для разработок новых отчетов, без добавления его в конфигурацию как объект отчет. Тем самым облегчая дальнейшее сопровождение конфигурации.

В отчете достаточно изменить Запрос СКД, в коде КлючТекущегоВарианта ну и везде где есть упоминание про "Пример отчета".

Ниже приведу весь код отчета 

 

Модуль формы отчета:

 

Модуль объекта:

 

11 Comments

  1. shura_k

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

    отчет сам формируется нормально, и штатными средствами и вашей процедурой СформироватьОтчетПрограммноНаСервере.

    но вот с фоновом формированием — проблема.

    ничего не возвращается из Временного Хранилища!

    помогите пожалуйста разобраться…

    Разобрался — проблемы была в Параметры.ДополнительнаяОбработкаСсылк

    Reply
  2. Bakytzhan_777

    (1)Рад что разобрались). Я тоже с этим сталкивался, многие часы отладки таки не дали ответа, почему ссылка пустая. Пришлось самому присваивать ссылку в «Параметры.ДополнительнаяОбработкаСсылка».

    Reply
  3. shura_k

    но в обработке есть реально две ошибки:

    1. НоваяКоманда.Идентификатор = «СформироватьОтчет»;

    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();

    у вас изначально вариант — открытиеформы, а надо вызовсерверногометода.

    У вас же даже Процедура ВыполнитьКоманду для этого уже была.

    2. ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания);

    ТекущийИнтервал = ПараметрыОбработчикаОжидания.ТекущийИнтервал;

    ПодключитьОбработчикОжидания(«Подключаемый_ПроверитьВыполнениеЗадания»,ТекущийИнтервал, Истина);

    надо инициализировать ПараметрыОбработчикаОжидания, иначе потом в процедуре Подключаемый_ПроверитьВыполнениеЗадания будет ошибка на ТекущийИнтервал

    Reply
  4. Bakytzhan_777

    (3)

    1. НоваяКоманда.Идентификатор = «СформироватьОтчет»;

    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();

    у вас изначально вариант — открытиеформы, а надо вызовсерверногометода.

    Если ставить «ТипКомандыВызовСерверногоМетода()» вместо «ТипКомандыОткрытиеФормы()» то форма не откроется и запуститься сразу команда по идентификатору «СформироватьОтчет».

    2. ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания);

    ТекущийИнтервал = ПараметрыОбработчикаОжидания.ТекущийИнтервал;

    ПодключитьОбработчикОжидания(«Подключаемый_ПроверитьВыполнениеЗадания»,ТекущийИнтервал, Истина);

    надо инициализировать ПараметрыОбработчикаОжидания, иначе потом в процедуре Подключаемый_ПроверитьВыполнениеЗадания будет ошибка на ТекущийИнтервал

    Здесь все поправил.

    Спасибо вам за замечания.

    Reply
  5. shura_k
    Если ставить «ТипКомандыВызовСерверногоМетода()» вместо «ТипКомандыОткрытиеФормы()» то форма не откроется и запуститься сразу команда по идентификатору «СформироватьОтчет».

    да, тоже до этого дошел.

    в итоге сделал две команды: одну на открытие формы другую на ВызовСерверногоМетода.

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

    я в процедуре формирования еще запихиваю тз во внешние данные.

    Reply
  6. cdromscsi

    Спасибо. Очень помог пример кода для пункта 3: Сформировать (длительные операции в фоне). Все работает.

    Reply
  7. Bakytzhan_777

    (6) Рад что помогла публикация)

    Reply
  8. MKassatkin

    Хороший пример! Пригодилось, спасибо!

    Reply
  9. gravae

    (3)

    ыОбработчикаОжидания.ТекущийИ

    подскажи в каком именно моменте необходимо инициализация ПараметрыОбработчикаОжидания ?

    Reply
  10. Bakytzhan_777

    (9) В типовых инициализируют при открытии формы. Я сделал в команде «СформироватьОтчетВФонеДлительныеОперации».

    Reply
  11. gravae

    спасибо автору за статью и еще за оперативный ответ :), давно хотел юзать отчеты через бсп в фоне.

    Reply

Leave a Comment

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