Автор  |   Контакты  |   Добавить в Избранное  
Генератор отчетов Genrep
 

Разработчику. Примеры кода

Ссылки:

Функции библиотеки

Параметры

Командная строка dorep.exe

Visual FoxPro

FoxPro Dos

Clarion

Visual C++

Visusl Basic

1C:Предприятие

Open Office reg-файлы

ADO DB


Определения функций Visual C++ библиотеки genrep.dll

 


extern "C" void WINAPI AboutDLL() - О программе
extern "C" void WINAPI LoadWord(char *fname) - Загрузка WinWord (параметр имя файла)
extern "C" int WINAPI RunRepDial(CString &fname,int isd) - Отладка отчета (параметр шаблон, isd)
extern "C" int WINAPI RunReport(CString &fname,int isd) - Выполнить отчет (параметр шаблон, isd)
extern "C" int WINAPI RunRep(char * fname,int isd) - Выполнить отчет (параметр шаблон, isd)
extern "C" int WINAPI RunDial(char * fname,int isd) - Отладка отчета (параметр шаблон, isd)
extern "C" int WINAPI RunRepEx(char * fname,int isd,char * constr) - Выполнить отчет (параметр шаблон, isd, строка ADO)

; genrep.def : Declares the module parameters for the DLL.

LIBRARY "genrep"
DESCRIPTION 'genrep Windows Dynamic Link Library'

EXPORTS
; Explicit exports can go here
AboutDLL @2
LoadWord @3
RunRepDial @4
RunReport @5
RunRep @6
RunDial @7
LoadWordHLM @8



Параметры


fname - полный путь к шаблону
  (например "..\sab\formats.sab")

isd - флаг
   isd = 0 - работа в текущей папке
   isd = 1 - работа в папке шаблона
   isd = 8 - не показывать прогресс
   isd = 16 - не открывать отчет (Word,Excel)
для объединения параметры сложить
  isd = 1+8+16 - работа в папке шаблона,не показывать прогресс и не открывать отчет

constr - стока коннекта ADO
  (например Access - "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=sql\access\apetest.mdb;User Id=admin;Password=;")

Командная строка dorep.exe


Выполнение отчета возможно с помощью вызова dorep.exe с параметрами
dorep.exe "путь шаблона" "флаг"

Пример:
  dorep.exe "sql\access.sab" "1"
  dorep.exe "sql\access.sab" "9"

Пример определения и вызова генератора для Visual Foxpro приложений

 

DECLARE Integer RunRep IN genrep.dll AS Runr String @cName, Integer Isd
DECLARE Integer RunDial IN genrep.dll AS Rund String @cName, Integer Isd =Runr('namefile.sab' , 0+1)

=Rund('namefile.sab' , 0) && работа в текущей папке
=Rund('namefile.sab' , 1) && работа в папке шаблона
=Runr('namefile.sab' , 0+16) && не вызывать Word
=Runr('namefile.sab' , 0+8+16) && не вызывать Word, не показывать Progress Bar

 


* ADODB
DECLARE Integer RunRepEx IN genrep.dll AS RunRepEx String @cName, Integer Isd , String @ConStr
RunRepEx("..\sql\access.sab",1,"Provider=VFPOLEDB;Data Source=sql\nort\northwind.dbc;Collating Sequence=machine;")
RunRepEx("..\sql\products.sbx",1,"Provider=VFPOLEDB;Data Source=sql\nort\northwind.dbc;Collating Sequence=machine;")

 

Пример геренации шаблона на лету для Visual Foxpro приложений

 

*/ используется

*/ http://vfpdev.narod.ru/util_r.html
*/ MakeRtf.zip (6,32KB) - классы, позволяющие получить
*/ файл в RTF-формате и пример использования

*/ Автор: Евгений Рябов conung@integral.spb.su

Скачать make_rtf.prg

 

my_otc.prg:

#INCLUDE "RTF.H"

Set Proc To MAKE_RTF.PRG
Local lcFname

=SampleRTF(.T.,"cursor.sab")

DECLARE Integer RunRep IN genrep.dll AS Runr String @cName, Integer Isd
DECLARE Integer RunDial IN genrep.dll AS Rund String @cName, Integer Isd

=Runr('cursor.sab' , 0+1)

 

* Пример генерации шаблона и вызова отчета
Func SampleRTF(bWordStart_, cFileName_)
oFile = CreateObject("CRtfFile", cFileName_,.T.)
With (oFile)
.DefaultInit
.WriteHeader
.PageA4

.WriteParagraph("[<cursor.dbf]",raLeft,rfsDefault, 0, 0, 3, 24)

.WriteParagraph("", raLeft, rfsBold, 0, 0, 2, 24)
.WriteParagraph("Пример создания шаблона из программы.",raCenter, rfsBold+rfsItalic, 0, 0, 3, 32)
.WriteParagraph("", raLeft, rfsBold, 0, 0, 2, 24)
.SetAlignment(raCenter)

.BeginTable && начало таблицы
.SetColumnsCount(3)
.m_arTblWidths(1) = .Twips(7) && ширины колонок (в скобках - см)
.m_arTblWidths(2) = .Twips(4) && ширины колонок (в скобках - см)
.m_arTblWidths(3) = .Twips(5)
.SetFont(3, 20, rfsBold)
.SetupColumns()
.m_arTblValues(1) = "Продукт"
.m_arTblValues(2) = "Цена"
.m_arTblValues(3) = "Примечание"
For i = 1 To 3
.m_arTblAlign(i) = raCenter
Next i
.WriteRow() && занести значения .m_arTblValues в графы таблицы
.EndTable

.WriteParagraph("[<Detal]",raLeft,rfsDefault, 0, 0, 3, 24)

.SetFont(3, 18, rfsDefault)
.BeginTable && начало таблицы
.SetColumnsCount(3)
.m_arTblWidths(1) = .Twips(7) && ширины колонок (в скобках - см)
.m_arTblWidths(2) = .Twips(4) && ширины колонок (в скобках - см)
.m_arTblWidths(3) = .Twips(5)
.SetupColumns()
.m_arTblAlign(1) = raLeft
.m_arTblAlign(2) = raRight
.m_arTblAlign(3) = raCenter
.m_arTblValues(1) = "[English_na]"
.m_arTblValues(2) = "[Unit_price]"
.m_arTblValues(3) = "[Quantity_i]"
.WriteRow() && занести значения .m_arTblValues в графы таблицы
.EndTable

.SetFont(3, 18, rfsDefault)
.WriteParagraph("[Detal>]",raLeft,rfsDefault, 0, 0, 3, 24)
.WriteParagraph("[cursor.dbf>]",raLeft,rfsDefault, 0, 0, 3, 24)
.CloseFile
EndWith

Return

 


Пример вызова из приложения DOS при помощи dorep.exe

 

! run "dorep.exe C:\genrep\sab\Standart\dbf\formats.sab"

Пример определения и вызова генератора для Clarion приложений

 

MODULE('GenRep.lib')
AboutDLL,Name('AboutDLL')
LoadWord(*CString),Pascal,Raw,Name('LoadWord')
! RunRepDial(*CString,Signed),Signed,Pascal,Raw,Name('RunRepDial')
RunDial(*CString,Signed),Signed,Pascal,Raw,Name('RunDial')
RunRep(*CString,Signed),Signed,Pascal,Raw,Name('RunRep')
! RunReport(*CString,Signed),Signed,Pascal,Raw,Name('RunReport')

End
Скачать пример (GenRep.lib в примере)

Пример определения и вызова генератора для Visual Basic приложений

 

genrep.bas:

'Описание функций библиотеки Genrep.dll

Public Declare Function RunDial Lib "genrep.dll" (ByVal SabName As String, ByVal nFlag As Integer) As Integer
Public Declare Function RunRep Lib "genrep.dll" (ByVal SabName As String, ByVal nFlag As Integer) As Integer
Public Declare Sub AboutDLL Lib "genrep.dll" ()

Declare Function OemToCharBuff Lib "user32" Alias "OemToCharBuffA" (ByVal lpszSrc As String, ByVal lpszDst As String, ByVal cchDstLength As Long) As Long

Public Sub Genrep_About()
AboutDLL
End Sub

 

'Запуск отчета в режиме диалога

Public Sub Genrep_RunDialog(sab As String)
ret = RunDial(sab, 1)
End Sub

'Запуск отчета на выполнение

Public Sub Genrep_RunReport(NameSab As String, ByVal nFlag As Integer)
ret = RunRep(NameSab, nFlag)
End Sub

'OEM to ANSI

Public Function ToAnsi(ByVal S As String) As String
Dim Buffer As String * 1000
OemToCharBuff S, Buffer, Len(S)
ToAnsi = Trim(Buffer)
End Function

'Запись курсора в DBF

Public Sub CreateDbfFromRecordset_VFP(r As ADODB.Recordset, ByVal DbfName As String, DbfFolder As String)
Dim cn As New ADODB.Connection, f As ADODB.Field, S As String, sDbfFile As String
Dim rr As New ADODB.Recordset, i As Integer, ii As Integer

sCon = "driver=Microsoft dBase Driver (*.dbf);Exclusive=Yes;SourceType=DBF;Collate=machine;SourceDB=" & DbfFolder
cn.Open sCon

sDbfFile = DbfFolder & DbfName & ".dbf"
On Error Resume Next
GetAttr sDbfFile
If Err.Number = 0 Then Kill sDbfFile
On Error GoTo 0

For Each f In r.Fields
If Len(S) Then S = S & ","
Select Case f.Type
Case adUnsignedTinyInt, adSmallInt, adInteger, adSingle, adDouble, adCurrency, adBoolean
S = S & "" & f.Name & " Integer"
Case adDate
S = S & "" & f.Name & " Date"
Case adVarChar, adVarWChar, adChar, adWChar
S = S & "" & f.Name & " Char(" & f.DefinedSize & ")"
End Select
Next f

sCmd = "CREATE TABLE " & DbfName & " (" & S & ")"
cn.Execute sCmd


rr.Open "SELECT * FROM " & DbfName, cn, adOpenStatic, adLockOptimistic
ii = r.Fields.Count - 1
Do Until r.EOF
rr.AddNew
For i = 0 To ii
rr(i) = r(i)
Next i
rr.Update
r.MoveNext
Loop
End Sub

main.bas:

'Собственно сами вызовы

cst = "Provider=SQLOLEDB.1;User Id=1cReader;Password=123;Initial Catalog=rb;Data Source=Serv_1C"
con.Open cst
Set rst_a = con.Execute("select top 10 Code, Descr from SC6482")

' скидываем в DBF
CreateDbfFromRecordset_VFP rst_a, "temp", "" ' "C:\1CDATA\programm\genrep\"

rst_a.Close
Set rst_a = Nothing
con.Close

' Выводим в RTF
Genrep_RunReport "sab\sprav.sab", 0

Пример определения и вызова генератора для 1С:Предприятие

 

genrep.ert:

Перем КаталогGenrep;


Процедура Сформировать()
КаталогGenrep = "C:\genrep\";
ФайлШаблон = "Nomen.sab";

Номенклатура = создатьОбъект("Справочник.Номенклатура");

ИмяФайла=КаталогGenrep + "Genrep1c\temp.dbf";
База = СоздатьОбъект("XBase");
Если ФС.СуществуетФайл(ИмяФайла) = 1 Тогда
ФС.УдалитьФайл(ИмяФайла);
конецесли;

База.ДобавитьПоле("code","N",6,0);//Код
База.ДобавитьПоле("Descr","C",30,0);//Количество
База.ДобавитьПоле("Group","C",30,0);
База.СоздатьФайл(ИмяФайла);

КолвоЗаписей = 0;
Номенклатура.ВыбратьЭлементы();
Пока Номенклатура.ПолучитьЭлемент()=1 цикл

сообщить(Номенклатура);

Если Номенклатура.ЭтоГруппа() = 0 тогда
База.Добавить();
База.code = Число(Номенклатура.Код);
База.Descr = Номенклатура.Наименование;
База.Group = Номенклатура.Родитель.Наименование;
База.Записать();
конецесли;

КолвоЗаписей = КолвоЗаписей + 1;
Если КолвоЗаписей > 100 тогда
прервать;
конецесли;
конеццикла;
База.ЗакрытьФайл();
База = "";

//Выполнить отчет
ЗапуститьПриложение(КаталогGenrep+"dorep.exe "+сокрлп(ФайлШаблона));

КонецПроцедуры

Процедура ЗапуститьDoRep()
//Редактировать шабон
ЗапуститьПриложение(КаталогGenrep+"dorep.exe ");
КонецПроцедуры

Процедура ВыбратьФайл()
файл=ФайлШаблона;
Кат =КаталогGenrep;
ФС.ВыбратьФайл(0,файл,Кат,,);
ФайлШаблона = Кат + файл;
КонецПроцедуры

 

КаталогGenrep = "C:\genrep\";
ФайлШаблона = КаталогGenrep + "Genrep1c\Nomen.sab";

 

Скачать пример (обработка в примере)

Open Office reg-файлы

 

При установке генератор автоматически регистрирует
расширения для MS Word

Зарегистрируйте расширения файлов генератора!!!!
msword.reg - регистрация .rtf и .sab для MS Word

REGEDIT4

[HKEY_CLASSES_ROOT\.rtf]
@="Word.RTF.8"
"Content Type"="application/msword"

[HKEY_CLASSES_ROOT\.rtf\OpenWithList]

[HKEY_CLASSES_ROOT\.rtf\OpenWithList\WordPad.exe]
@=""

[HKEY_CLASSES_ROOT\.rtf\OpenWithProgIDs]
"opendocument.WriterDocument.1"=" "
"opendocument.CalcDocument.1"=" "

[HKEY_CLASSES_ROOT\.rtf\PersistentHandler]
@="{5e941d80-bf96-11cd-b579-08002b30bfeb}"

[HKEY_CLASSES_ROOT\.rtf\shellex]

[HKEY_CLASSES_ROOT\.rtf\shellex\{8895b1c6-b41f-4c1c-a562-0d564250836f}]
@="{84F66100-FF7C-4fb4-B0C0-02CD7FB668FE}"

[HKEY_CLASSES_ROOT\.rtf\ShellNew]
"Data"="{\\rtf1}"

[HKEY_CLASSES_ROOT\.rtf\Word.RTF.8]

[HKEY_CLASSES_ROOT\.rtf\Word.RTF.8\ShellNew]

[HKEY_CLASSES_ROOT\.sab]
@="Word.RTF.8"
"Content Type"="application/msword"

[HKEY_CLASSES_ROOT\.sab\ShellNew]
"Data"="{\\rtf1}"

[HKEY_CLASSES_ROOT\.sab\Word.RTF.8]

[HKEY_CLASSES_ROOT\.sab\Word.RTF.8\ShellNew]


openoffice.reg - регистрация .rtf и .sab для OpenOffice

REGEDIT4

[HKEY_CLASSES_ROOT\.rtf]
@="opendocument.WriterDocument.1"
"Content Type"="application/vnd.oasis.opendocument.text"

[HKEY_CLASSES_ROOT\.rtf\opendocument.WriterDocument.1]

[HKEY_CLASSES_ROOT\.rtf\opendocument.WriterDocument.1\ShellNew]
"FileName"="soffice.rtf"

[HKEY_CLASSES_ROOT\.rtf\OpenWithProgIDs]
"opendocument.WriterDocument.1"=" "

[HKEY_CLASSES_ROOT\.rtf\PersistentHandler]
@="{7BC0E713-5703-45BE-A29D-5D46D8B39262}"

[HKEY_CLASSES_ROOT\.rtf\shellex]

[HKEY_CLASSES_ROOT\.rtf\shellex\{00021500-0000-0000-C000-000000000046}]
@="{087B3AE3-E237-4467-B8DB-5A38AB959AC9}"

[HKEY_CLASSES_ROOT\.rtf\shellex\{BB2E617C-0920-11D1-9A0B-00C04FC2D6C1}]
@="{3B092F0C-7696-40E3-A80F-68D74DA84210}"

[HKEY_CLASSES_ROOT\.sab]
@="opendocument.WriterDocument.1"
"Content Type"="application/vnd.oasis.opendocument.text"

[HKEY_CLASSES_ROOT\.sab\opendocument.WriterDocument.1]

[HKEY_CLASSES_ROOT\.sab\opendocument.WriterDocument.1\ShellNew]
"FileName"="soffice.sab"

[HKEY_CLASSES_ROOT\.sab\OpenWithProgIDs]
"opendocument.WriterDocument.1"=" "

[HKEY_CLASSES_ROOT\.sab\shellex]
[HKEY_CLASSES_ROOT\.sab\shellex\{00021500-0000-0000-C000-000000000046}]
@="{087B3AE3-E237-4467-B8DB-5A38AB959AC9}"
[HKEY_CLASSES_ROOT\.sab\shellex\{BB2E617C-0920-11D1-9A0B-00C04FC2D6C1}]
@="{3B092F0C-7696-40E3-A80F-68D74DA84210}"

 
Hosted by uCoz