Отчет Crystal Reports.
Отчет экспортируется с помощью API функций:
void __fastcall TMainForm::BitBtn1Click(TObject *Sender)
{
//Path to report
String path = "c:\\rep_test1.rpt";
//Job for print
short Job = PEOpenPrintJob(path.c_str());
if (!Job)
{
ShowMessage("не найден "+path+", "+Job);
return;
}
// Начало присвоение переменным отчета значений
// Если кусок присвоения выкинуть, все работает. Где в нем ошибка
PEParameterFieldInfo ParameterFieldInfo;
ParameterFieldInfo.StructSize = PE_SIZEOF_PARAMETER_FIELD_INFO;
short nparams = PEGetNParameterFields(Job);
for(short i=0; i<nparams; i++)
{
if (!PEGetNthParameterField (Job, i, &ParameterFieldInfo))
{
MainForm->ShowError(Job);
break;
}
if (strcmp(ParameterFieldInfo.Name,"@Test1") == 0)
{
ParameterFieldInfo.CurrentValueSet = 1;
double tdoc_id = 100;
memcpy(ParameterFieldInfo.CurrentValue, &tdoc_id, sizeof(tdoc_id));
if (!PESetNthParameterField(Job, i, &ParameterFieldInfo))
MainForm->ShowError(Job);
}
}
//Конец присвоения переменным отчета значений
//Variables for Export to RTF
UXDDiskOptions DiskOptions;
UXFERTFFormatOptions SeparationOptions;
PEExportOptions ExportOptions;
//Structure for info output file
DiskOptions.structSize = UXDDiskOptionsSize;
DiskOptions.fileName = "c:\\samplefile.rtf";
ExportOptions.StructSize = PE_SIZEOF_EXPORT_OPTIONS;
lstrcpy(ExportOptions.formatDLLName, "CRXF_RTF.DLL");
ExportOptions.formatType = UXFRichTextFormatType;
ExportOptions.formatOptions = &SeparationOptions;
strcpy(ExportOptions.destinationDLLName, "U2DDISK.DLL");
ExportOptions.destinationType = UXDDiskType;
ExportOptions.destinationOptions = &DiskOptions;
//For export
PEExportTo(Job, &ExportOptions);
//Start Export to file
if (!PEStartPrintJob(Job, true))
ShowError(Job); // ошибка появляется в этом месте, текст ошибки
// 3-4 нечитаемых символа
//Close Job
PEClosePrintJob(Job);
}
Если блок присвоения переменным отчета значений убрать, то все работает.
PS Те же симптомы возникают даже если нет блока присвоения переменным отчета значений,
но при этом сама функция вызывается из другой функции. Например:
void __fastcall TMainForm::BitBtn2Click(TObject *Sender)
{
MainForm->BitBtn1Click(MainForm);
}
19.11.05 07:25: Перенесено модератором из 'C/C++' — Павел Кузнецов