17.11.2005, 18:07
#33385093
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
|
|
|
Отчет экспортируется с помощью API функций:
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86.
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 info;
PEParameterFieldInfo *ptrInfo = &info;
PEGetNthParameterField(Job, 0, (struct PEParameterFieldInfo *) &info);
PEValueInfo valInfo;
valInfo.StructSize=PE_SIZEOF_VALUE_INFO;
valInfo.valueType = PE_VI_NUMBER;
int linumb;
valInfo.viNumber = linumb;
PEConvertVInfoToPFInfo( &valInfo, &info.ValueType, info.CurrentValue );
info.DefaultValueSet=FALSE;
info.CurrentValueSet=TRUE;
PESetNthParameterField(Job, 0, &info );
*/
// Начало присвоение переменным отчета значений
// Если кусок присвоения выкинуть, все работает. Где в нем ошибка
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 Также отчет перестает работать если данную ф-ю вызвать из другой функции Проблемы с вызовом функции.
|
|