Каталог решений - Добавление данных из других отчетов

Добавление данных из других отчетов

Добавление данных из других отчетов

В наличии

Бывает, что в отчет нужно включить какие-то данные из другого отчета, что же делать?

Категория:

Описание

Идея наверное не нова, но не могу не поделиться:

Итак, мы пишем какой-то отчет (СКД или руками — неважно) и нужно получить какие-то данные из других отчетов (я буду называть их “чужой отчет”).

Вариант первый, хороший:

Находим вызовы общих модулей в чужом отчете, из которых получаются нужные нам данные и вызываем их. Если нам повезло со структурой — всё хорошо.

Вариант второй, тоже хороший:

Пишем что-то вроде этого:

	    ЧужойОтчет = Отчеты.ЧужойОтчет.Создать();

	    ЧужойОтчет.ДатаНач = НачалоМесяца(ДатаОтчета);

	    ЧужойОтчет.ДатаКон = КонецДня(ДатаОтчета);

	    ЧужойОтчет.Подразделение = Подразделение;

	    ЧужойОтчет.ГрафикРаботы = ГрафикРаботы;

	    ТабличныйДокумент = Новый ТабличныйДокумент;

	    ЧужойОтчет.СформироватьОтчет(ТабличныйДокумент);

   

— всё, табличный документ получили, теперь можем наковырять из него данных либо вывести весь отчет в свой (бывает нужно сделать как раз это)

Вариант третий, плохой (зато часто используемый):

Копируем в свой отчет код из чужого отчета, исправляем, чтобы работало и получаем необходимые данные. Естественно, когда меняется чужой отчет, данные начинают расходиться.

Почему используется третий вариант, когда есть второй?

Во-первых, когда чужой отчет формирует не совсем те данные, которые нужны либо слишком много данных. Естественно, тут другими вариантами не обойтись.

Во-вторых, когда в чужом отчете не содержится средств для его программного формирования (а ведь как хорошо, когда в каждом моделе отчета есть экспортные функции СформироватьДанные() и СформироватьОтчет()!)

И вот этот второй случай можно победить четвертым вариантом.

Вариант четвертый, инновационный:

Мне пришлось воспользоваться этим вариантом по следующим причинам:

1. Конфигурация недоступна для изменения

2. Чужой отчет формируется в обработчике нажатия на кнопку (то есть функция модуля формы без экспорта)

3. Использоваться отчет будет в неизвестном файловом окружении на другом узле РИБ.

4. Формирование отчета слишком сложное для того чтобы тащить код к себе в отчет

Итак:

1. Сохраняем отчет как внешний.

2. Добавляем к нужной функции экспорт (ну или меняем что-то еще)

3. Загружаем чужой отчет в свой как макет (тип: ДвоичныеДанные)

4. В свой отчет вставляем следующий код:

	Макет = ПолучитьМакет("ЧужойОтчет1");

	Макет.Записать(КаталогВременныхФайлов()+"ЧужойОтчет1.erf");

	ЧужойОтчет = ВнешниеОтчеты.Создать(КаталогВременныхФайлов()+"ЧужойОтчет1.erf");

	ФормаОтчета = ЧужойОтчет.ПолучитьФорму("Форма");

	ФормаОтчета.НачПериода = НачалоМесяца(ДатаОтчета);

	ФормаОтчета.КонПериода = КонецДня(ДатаОтчета);

	ФормаОтчета.Подразделение = Подразделение;    

	ФормаОтчета.КнопкаВыполнитьНажатие(0);

	ТабличныйДокумент = ФормаОтчета.ЭлементыФормы.ПолеТабличногоДокумента1;

Вот, собственно, и всё. Всем спасибо за внимание.

has been added to your cart:
Оформление заказа