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

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

Ссылки:

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

Параметры

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

Visual FoxPro

FoxPro Dos

Clarion

Visual C++

Visual C#

Visual 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"

Пример определения и вызова генератора для C#

Скачать пример

//...
// Фрагмент кода для использования genrep.dll  на С# (H.Бехбудов)
public partial class MainForm : Form
	{
		public MainForm()
		{
			InitializeComponent();
		}
        [DllImport("Genrep.dll",EntryPoint="RunRepEx")]

//public static extern int RunRep(String cName,uint Isd);
 public static extern int RunRepEx(String cName,uint Isd,String ConStr );
//...
//   RunRep("Doc.sbx",0);
RunRepEx("ora.sbx",0,"Provider=MSDAORA.1;Password=pas_oracle;User ID=user_oracle;Data Source=sid_oracle;Persist Security Info=True;");
          }
}

Пример определения и вызова генератора для 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 приложений

Скачать make_rtf.prg

 

my_otc.prg:

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

  #INCLUDE "RTF.H"  * Скачать make_rtf.prg

  DECLARE Integer RunRep IN genrep.dll AS Runr String @cName, Integer Isd  
  DECLARE Integer RunDial IN genrep.dll AS Rund String @cName, Integer Isd  
  Set Proc To MAKE_RTF.PRG  
  Local lcFname  
    
  =SampleRTF(.T.,"cursor.sab")  
  =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 приложений

 

fgenrep.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; 
	Номенклатура.ВыбратьЭлементы(); 
	Пока Номенклатура.ПолучитьЭлемент()=цикл 
		сообщить(Номенклатура); 
		Если Номенклатура.ЭтоГруппа() = 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}"