Експорт звітності
Для експорту звітів, побудованих за допомогою дизайнера необхідно скласти програми, які запускаються при формуванні фрагментів звіту.
Програми для звітів складаються на мові PascalScript. У програмах доступні функції, необхідні для формування файлу електронного документа. Повний перелік функцій наведено нижче.
Загальні правила побудови програми:
- На початку, при ініціалізації експорту, викликається функція MNSOpen, для ініціалізації файлу електронного документа.
- Потім формується заголовок файлу.
- У процесі видачі детальних рядків має бути сформовано вміст форми документа.
- В кінці експорту потрібно сформувати кінець фрагмента форми, кінець файлу і викликати функцію MNSClose, яка завершить сеанс роботи з файлом електронного документа.
- Програми формування файлу експорту прив'язуються до детальним фрагментами звіту. Можуть бути використані будь-які фрагменти (заголовки, детальні, підсумки).
Перелік доступних констант, функцій і процедур
Константи режимів відкриття файлу
mnsomAppend: Byte = $ 01;
Дописати в кінець файлу, якщо існує.
mnsomCreate: Byte = $ 00;
Перезаписати файл, якщо існує.
mnsomDialog: Byte = $ 10;
Видати діалог вибору файлу.
Константи роздільників груп
mnsdlmBlock: String = '###';
Кінець блоку.
mnsdlmFile: String = '===';
Ознака кінця файлу.
mnsdlmPart: String = '@@@';
Кінець фрагмента.
DOCGetStr (Nam: String): String;
DOCGetStr ('' '');
Отримати строкове значення поля з документа.
MNSClose ;
Закрити поточний відкритий файл.
MNSGetFL_ID (INN: String): String;
MNSGetFL _ ID ('' '');
INN - ІПН фізичної особи
Дати ідентифікатор ФО.
MNSGetFormDetailNm (RZD, STR, GRF: String): String ;
MNSGetFormDetailNm ('' '', '' '', '' '');
RZD - п'ятизначний номер (код) розділу форми
STR - п'ятизначний номер (код) рядку форми
GRF - двозначний номер графи форми
Дати найменування показника форми.
MNSGetMNS _ ID (MNS: String): String ;
MNSGetMNS _ ID ('' '');
MNS - коду інспекції за класифікатором СОНО
Дати ідентифікатор МНС.
MNSGetUL_ID (INN: String; KPP: String): String;
MNSGetUL_ID ('' '', '' '');
INN - ІПН організації
KPP - код причини постановки на облік, якщо '' - не виводиться
Дати ідентифікатор ЮЛ.
MNSOpen: Boolean;
MNSOpen;
Відкриває останній відкритий файл, в разі помилки згенерує виняток.
MNSOpenFile (Filename: String; Mode: Integer): Boolean;
MNSOpenFile (FileName, Mode);
FileName - ім'я файлу
Mode - режим відкриття
mnsomCreate - перезаписати файл, якщо існує
mnsomAppend - дописати в кінець файлу, якщо існує
mnsomDialog - видати діалог вибору файлу
mnsomWin1251 - кодування Windows
Відкриває файл, в разі помилки згенерує виняток.
MNSPutCommonInfo (DocNum: String; DocDate: TDateTime; DocPredst: String);
MNSPutCommonInfo ('' '',);
DocNum - номер документа
DocDate - дата формування документа
DocPredst - параметр "документ видається
Вивести в поточний відкритий файл загальні відомості інформаційної частини повідомлення.
MNSPutDate (AParam: String; AValue: TDateTime);
MNSPutDate ('' '',);
Вивести поєднання параметр-значення в поточний відкритий файл. В кінець рядка дописується пара символів $ 0 d $ 0 a. Рядок передається з WIN кодування в OEM кодування.
MNSPutDelimiter (ADelimiter: String);
MNSPutDelimiter ('' '');
Вивести роздільник в поточний відкритий файл.
MNSPutDetail (RZD, STR, GRF, Val: String);
MNSPutDetail ('' '', '' '', '' '', '' '');
RZD - п'ятизначний номер (код) розділу форми
STR - п'ятизначний номер (код) рядку форми
GRF - двозначний номер графи форми
Val - значення показника
Вивести показник форми.
MNSPUTDOCID (A_ID: String; DocNum: String; ADate: TDateTime = 0);
MNSPutDocID ('' '', '' '',);
A _ ID - ідентифікатор ЮЛ, ФЛ або МНС
DocNum - номер документа
ADate - дата, за замовчуванням - поточна
Вивести ідентифікатор документа в поточний відкритий файл.
MNSPUTFILEID (A_ID: String; ADate: TDateTime = 0);
MNSPutFileID ('' '',);
A_ID - ідентифікатор ЮЛ, ФЛ або МНС '+ # 13 +
ADate - дата, за замовчуванням - поточна
Вивести ідентифікатор файлу в поточний відкритий файл.
MNSPUTNPFLINFO ;
Вивести в поточний відкритий файл відомості про платника податків - юридичну особу.
MNSPUTNUMBER (AParam: String; AValue: Extended; ALen: Integer; AMT: Integer; AFill0: boolean);
MNSPutNumber ('' '',,);
ALen - довжина всього числа з крапкою і знаком -
AMT - к-ть знаків після зайнятої
AFill 0 - доповнювати число до довжини нулями зліва
Вивести поєднання Параметр-Значення в поточний відкритий файл. В кінець рядка дописується пара символів $ 0D $ 0A. Рядок перекодується з Win-кодування в Oem.
MNSPUTOVERHEAD (KolDoc: Word ; MNSVer: String);
MNSPutOverhead ();
KolDoc - кількість документів
Вивести в поточний відкритий файл службову частину повідомлення.
MNSPUTPARAM (AParam: String; AValue: String);
MNSPutParam ('' '',);
Вивести поєднання Параметр-Значення в поточний відкритий файл. В кінець рядка дописується пара символів $ 0D $ 0A. Рядок перекодується з Win кодування в Oem.
MNSPUTSTRING (AParam: String; AValue: String; ALen: Integer);
MNSPutString ('' '',,);
ALen - довжина всього числа з крапкою і знаком -
Вивести поєднання Параметр-Значення в поточний відкритий файл значення - строкового типу. Значення форматується відповідно до довжини, якщо потрібно - буде скорочуватися. В кінець рядка дописується пара символів $ 0D $ 0A. Рядок перекодується з Win кодування в Oem.
MNSPUTTEXT (AText: String);
MNSPutText ('' '');
Вивести рядок в поточний відкритий файл. В кінець рядка дописується пара символів $ 0D $ 0A. Рядок перекодується з Win кодування в Oem.
SETKOLDOK (Kol: Integer);
SetKolDok ();
Встановити кількість документів.
SETKOLPOK (Kol: Integer);
SetKolPok ();
Встановити кількість показників форми.
STRINGTOCOMMA (AText: String): String;
StringToComma ('' '');
Замінити прогалини на коми.
Відкрити на редагування будь-який звіт. У обробнику події OnStartReport робимо відкриття файлу, наприклад:
MNSOpenFile ('C: \ MNStempoFile', mnsomCreate);
У обробнику події OnStopReport робимо закриття файлу:
MNSClose ();
У місцях формування даних для звіту використовуємо функції вивантаження, наприклад:
MNSPutText (Memo4.Text);
MNSPutDelimiter (mnsdlmPart);
Таким чином, результуючий файл може виглядати так:
var curs: real;
procedure Memo6OnBeforePrint (Sender: TfrxComponent);
begin
if <main. "VLCUR_KOT"> = <cross. "CURTYPE_RCD">
then curs: = <main. "VLCUR_CURS">
else curs: = 0;
end;
procedure OnStartReport (Sender: TfrxComponent);
begin
MNSOpenFile ('C: \ MNStempoFile', mnsomCreate);
MNSPutText (' Тема звіту ');
MNSPutDelimiter (mnsdlmPart);
end;
procedure OnStopReport (Sender: TfrxComponent);
begin
MNSPutDelimiter (mnsdlmPart);
MNSPutDelimiter (mnsdlmBlock);
MNSPutDelimiter (mnsdlmFile);
MNSPutText (' Фінал звіту ');
MNSClose ();
end;
procedure Memo3OnAfterData (Sender: TfrxComponent);
begin
MNSPutText (Memo3.Text);
end;
procedure Memo4OnAfterData (Sender: TfrxComponent);
begin
MNSPutText (Memo4.Text);
MNSPutDelimiter (mnsdlmPart);
end;
procedure Memo14OnAfterData (Sender: TfrxComponent);
begin
MNSPutText (floatToStr (curs) + '' + Memo14.Text);
end;
begin
end.
В результаті виконання звіту формується наступний файл - C: \ MNStempoFile.
Лістинг файлу:
заголовок звіту
@@@
USD
Долар США
Множник курсу: 1
@@@
5.05 5.05000
5.05 5.05000
...
5.05 5.05000
EUR
ЄВРО
Множник курсу: 1
@@@
6.4321 6.43210
6.3933 6.39330
...
6.405925 6.40592
RUR
Російський рубль
Множник курсу:
@@@
0.18857 0.18857
0.18847 0.18847
...
0.1889 0.18890
@@@
###
===
фінал звіту