Как автоматически стартовать экспорт в FastReport ?

Вопрос такой: нужно автоматически выполнить экспорт после открытия формы отчета в FastReport. У меня не получается отловить событие по которому я могу это сделать, пробовал на событии OnShow базового окна отчета, но не получилось. Пока получился только вариант на OnClose, но это не красиво, т.к. пользователю надо нажимать кнопку закрытия окна отчета.
Как быть ?

Нравится

5 комментариев

Отчет по выделенным записям или с использованием окна фильтрации?

По выделенной записи.

Решение "в лоб"
находим function ShowSelectedRecordsReport(...) в скрипте scr_ReportUtils
модифицируем ее примерно так

ReportPreviewer.Build(); // из оригинальной фунции
var frpMain = ReportPreviewer.ComponentsByName('frpMain');
frpMain.Report = Report;
if (frpMain.Report.Caption == 'Заголовок нужного отчета'){  // любой идентификатор нужного отчета
    frpMain.PrepareReport();
    frpMain.IsVisible = false;
    ReportPreviewerComponent.DatasetByUSI(FilteredDatasetCode) = ReportDataset;
    frpMain.PreviewReport();
    var TempFileName = System.CreateObject('TSObjectLibrary.Value');
    var FileNames = System.CreateObject('TSObjectLibrary.StringsList');
    if ((System.PromptForFileNames(FileNames, '*.rtf', '', "Выберите файл", ''))) {
	TempFileName.Value = ExtractFileNameWithoutExtension(FileNames.Text.substr(0, FileNames.Text.length-2)) + '.rtf';
	try {
    	   frpMain.Export(retRTF, TempFileName, false);
	} catch (e){
	} 	
     }	
     return;	
} else {
   ReportPreviewer.Prepare(); // из оригинальной функции
}

Без претензии на "красоту", основное - идея:smile: Творческая переработка и оптимизация рекомендуются.
Производится экспорт в rtf без показа отчета, в какой файл - выбираем в диалоговом окне.

Александр, спасибо. Идея как раз то что надо.
Я немного переработал ее для своих нужд, сделал в гриде документов отдельную кнопку для этой обработки, кроме того мне не нужно выбирать файл, надо просто сохранить во временный и после этого автоматически открыть его в MS Word, получилось так:

function btnRTFletterOnClick(Control) {
	//по кнопке сформировать файл формата RTF в соответствии с шаблоном FastReport
	var ReportCode = 'fr_ReportLetterPrintForm';
	var FilteredDatasetCode = 'ds_ReportLetterPrintForm';
	var Report = Services.GetNewItemByUSI(ReportCode);
	var ReportPreviewer = Services.GetNewItemByUSI('wnd_BaseFastReportPreview');
	var ReportPreviewerComponent = ReportPreviewer.Attributes('ReportPreviewer');
	var ReportDataset = Services.GetNewItemByUSI(FilteredDatasetCode);	
	SetAttribute(ReportPreviewer, 'Report', Report);
	ApplyDatasetFilter(ReportDataset, 'ID', dlData.Dataset.Values('ID'), true);		
	ReportPreviewer.Build();
 
	var frpMain = ReportPreviewer.ComponentsByName('frpMain');
	frpMain.Report = Report;
    frpMain.PrepareReport();
    frpMain.IsVisible = false;
    ReportPreviewerComponent.DatasetByUSI(FilteredDatasetCode) = ReportDataset;
    frpMain.PreviewReport();
 
    ScriptUtils.BeginProcessing(); //задержка для стабильного формирования RTF файла
	ScriptUtils.Sleep(100);	
	ScriptUtils.EndProcessing();
 
    var TempFileName = System.CreateObject('TSObjectLibrary.Value');
		try {
           	var FileNameStr = 'letter';
			var Extension = '.rtf';
			TempFileName.Value = GetTemporaryFileName(FileNameStr + Extension);
			frpMain.Export(retRTF, TempFileName, false);
			var WShell = System.CreateObject('WScript.Shell');
			var File = TempFileName.Value;
			WShell.Run('winword.exe ' + File, 1);
        	} 
			catch (e){
        			}      
}

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

"Тюрин Юрий" написал:В ходе отладки выявился один странный момент если непосредственно перед формированием временного файла вызывать отладчик, то все отлично, а если без него, то файл формируется пустым. Помогло введение в код небольшой задержки.

а вот это интересный момент:smile:

Показать все комментарии