|  | 
| (* -------------------------------------------------------------------------------- | 
| * | 
| * Programma di esempio per la registrazione di una fattura di vendita utilizzando | 
| * le funzioni della libreria SPPSERV.DLL. | 
| * Prima di utilizzare questo esempio è necessario modificare alcune informazioni | 
| * in modo da adattare il codice alla base dati utilizzata. | 
| * | 
| * In questo esempio l'esercizio di lavoro e' considerato corrispondente all'anno | 
| * solare in corso e le date impostate per default a quella attuale. | 
| * | 
| * QUESTO SORGENTE E' FORNITO A TITOLO DI ESEMPIO COME DIMOSTRAZIONE DELL'UTILIZZO | 
| * DELLA LIBRERIA SPPSERV.DLL. NESSUNA GARANZIA, NE' IMPLICITA NE' ESPLICITA, E' | 
| * PREVISTA PER QUALSIASI UTILIZZO DIVERSO DA QUELLO INDICATO. | 
| * | 
| -------------------------------------------------------------------------------- *) | 
| program SppServTest3; | 
|  | 
| {$APPTYPE CONSOLE} | 
|  | 
| uses | 
| Windows, StdCtrls, ExtCtrls, SysUtils; | 
|  | 
| const | 
| MY_LIBRARY_NAME  = 'sppserv.dll'; | 
| SPPSRV_SUCCESS   = 0; | 
|  | 
| type | 
| PDouble = ^double; | 
|  | 
| var | 
| // prototipi delle funzioni della sppserv.dll | 
| SPPSRVVersion              : function() : integer stdcall; | 
| SPPSRVInit                 : function(mainwnd : HWND) : integer stdcall; | 
| SPPSRVExit                 : function() : integer  stdcall; | 
| SPPSRVComuniConnect        : function(comuniconnectstring : pChar) : integer stdcall; | 
| SPPSRVDittaConnect         : function(dittaconnectstring : pChar) : integer stdcall; | 
| SPPSRVSetEsercizio         : function(esercizio : pChar) : integer stdcall; | 
| SPPSRVSetEuro              : function(IsEuro : boolean) : integer stdcall; | 
| SPPSRVSetUtente            : function(utente : pChar) : integer stdcall; | 
| SPPSRVSetTodayDate         : function(todaydate : pChar) : integer stdcall; | 
| SPPSRVCalcolaScadenze      : function(tipopag : pChar; IsValuta : boolean; TRata : double; | 
| DataFattura : pChar; datadecpag : pChar; | 
| ggpart : pChar; msalto1 : pChar; msalto2 : pChar; | 
| ggsalto : pChar) : integer stdcall; | 
| SPPSRVReadScadenza         : function(nscad : integer; importo : PDouble; data : pChar; | 
| tipo : pChar) : integer stdcall; | 
|  | 
| dll : THandle; | 
| IsError, rc, numscad, j : integer; | 
| tipopag,DataFattura, datadecpag, ggpart, | 
| msalto1, msalto2, ggsalto : string; | 
| TRata, importo : double; | 
| IsValuta : boolean; | 
| tipo, dt1: array[0..16] of Char; | 
|  | 
| label | 
| END_OF_TEST, FINE; | 
|  | 
| procedure ReportError(Msg : string); | 
| var | 
| lpMsgBuf : pAnsiChar; | 
| ErrorCode : DWORD; | 
| begin | 
| GetMem(lpMsgBuf, 512); | 
| ErrorCode := GetLastError(); | 
| FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM or FORMAT_MESSAGE_ARGUMENT_ARRAY, | 
| nil, ErrorCode, LANG_NEUTRAL, lpMsgBuf, 512, nil); | 
| WriteLn(Msg + ': errore ' + IntToStr(ErrorCode) + ' (' + lpMsgBuf + ')'); | 
| FreeMem(lpMsgBuf); | 
| end; | 
|  | 
| begin | 
| WriteLn('Inizio test ' + MY_LIBRARY_NAME); | 
| WriteLn('---------------------------------------------------'); | 
| WriteLn('Caricamento DLL e estrazione funzioni...'); | 
| dll := LoadLibrary(MY_LIBRARY_NAME); | 
| if (dll > 0) then | 
| WriteLn(MY_LIBRARY_NAME + ' caricata con successo') | 
| else begin | 
| WriteLn('**********************************************'); | 
| WriteLn('ERRORE: LoadLibrary("' + MY_LIBRARY_NAME + '") fallita!'); | 
| ReportError('Dettagli'); | 
| WriteLn('**********************************************'); | 
| goto END_OF_TEST; | 
| end; | 
| // estrazione delle funzioni esportate dalla dll | 
| IsError := 0; | 
| @SPPSRVInit := GetProcAddress(dll, 'SPPSRVInit'); | 
| if (Assigned(SPPSRVInit)) then | 
| WriteLn('SPPSRVInit caricata con successo') | 
| else begin | 
| WriteLn('**************************************************************'); | 
| WriteLn('ERRORE: GetProcAddress(dll, "SPPSRVInit") fallita!'); | 
| WriteLn('**************************************************************'); | 
| IsError := 1; | 
| end; | 
| @SPPSRVVersion := GetProcAddress(dll, 'SPPSRVVersion'); | 
| if (Assigned(SPPSRVVersion)) then | 
| WriteLn('SPPSRVVersion caricata con successo') | 
| else begin | 
| WriteLn('**************************************************************'); | 
| WriteLn('ERRORE: GetProcAddress(dll, "SPPSRVVersion") fallita!'); | 
| WriteLn('**************************************************************'); | 
| IsError := 1; | 
| end; | 
| @SPPSRVExit := GetProcAddress(dll, 'SPPSRVExit'); | 
| if (Assigned(SPPSRVExit)) then | 
| WriteLn('SPPSRVExit caricata con successo') | 
| else begin | 
| WriteLn('**************************************************************'); | 
| WriteLn('ERRORE: GetProcAddress(dll, "SPPSRVExit") fallita!'); | 
| WriteLn('**************************************************************'); | 
| IsError := 1; | 
| end; | 
| @SPPSRVComuniConnect := GetProcAddress(dll, 'SPPSRVComuniConnect'); | 
| if (Assigned(SPPSRVComuniConnect)) then | 
| WriteLn('SPPSRVComuniConnect caricata con successo') | 
| else begin | 
| WriteLn('**************************************************************'); | 
| WriteLn('ERRORE: GetProcAddress(dll, "SPPSRVComuniConnect") fallita!'); | 
| WriteLn('**************************************************************'); | 
| IsError := 1; | 
| end; | 
| @SPPSRVDittaConnect := GetProcAddress(dll, 'SPPSRVDittaConnect'); | 
| if (Assigned(SPPSRVDittaConnect)) then | 
| WriteLn('SPPSRVDittaConnect caricata con successo') | 
| else begin | 
| WriteLn('**************************************************************'); | 
| WriteLn('ERRORE: GetProcAddress(dll, "SPPSRVDittaConnect") fallita!'); | 
| WriteLn('**************************************************************'); | 
| IsError := 1; | 
| end; | 
| @SPPSRVSetEsercizio := GetProcAddress(dll, 'SPPSRVSetEsercizio'); | 
| if (Assigned(SPPSRVSetEsercizio)) then | 
| WriteLn('SPPSRVSetEsercizio caricata con successo') | 
| else begin | 
| WriteLn('**************************************************************'); | 
| WriteLn('ERRORE: GetProcAddress(dll, "SPPSRVSetEsercizio") fallita!'); | 
| WriteLn('**************************************************************'); | 
| IsError := 1; | 
| end; | 
| @SPPSRVSetUtente := GetProcAddress(dll, 'SPPSRVSetUtente'); | 
| if (Assigned(SPPSRVSetUtente)) then | 
| WriteLn('SPPSRVSetUtente caricata con successo') | 
| else begin | 
| WriteLn('**************************************************************'); | 
| WriteLn('ERRORE: GetProcAddress(dll,\"" << "SPPSRVSetUtente" << "\") fallita!'); | 
| WriteLn('**************************************************************'); | 
| IsError := 1; | 
| end; | 
| @SPPSRVSetTodayDate := GetProcAddress(dll, 'SPPSRVSetTodayDate'); | 
| if (Assigned(SPPSRVSetTodayDate)) then | 
| WriteLn('SPPSRVSetTodayDate caricata con successo') | 
| else begin | 
| WriteLn('**************************************************************'); | 
| WriteLn('ERRORE: GetProcAddress(dll,\"" << "SPPSRVSetTodayDate" << "\") fallita!'); | 
| WriteLn('**************************************************************'); | 
| IsError := 1; | 
| end; | 
| @SPPSRVSetEuro := GetProcAddress(dll, 'SPPSRVSetEuro'); | 
| if (Assigned(SPPSRVSetEuro)) then | 
| WriteLn('SPPSRVSetEuro caricata con successo') | 
| else begin | 
| WriteLn('**************************************************************'); | 
| WriteLn('ERRORE: GetProcAddress(dll, "SPPSRVSetEuro") fallita!'); | 
| WriteLn('**************************************************************'); | 
| IsError := 1; | 
| end; | 
| @SPPSRVCalcolaScadenze := GetProcAddress(dll, 'SPPSRVCalcolaScadenze'); | 
| if (Assigned(SPPSRVCalcolaScadenze)) then | 
| WriteLn('SPPSRVCalcolaScadenze caricata con successo') | 
| else begin | 
| WriteLn('**************************************************************'); | 
| WriteLn('ERRORE: GetProcAddress(dll, "SPPSRVCalcolaScadenze") fallita!'); | 
| WriteLn('**************************************************************'); | 
| IsError := 1; | 
| end; | 
| @SPPSRVReadScadenza := GetProcAddress(dll, 'SPPSRVReadScadenza'); | 
| if (Assigned(SPPSRVReadScadenza)) then | 
| WriteLn('SPPSRVReadScadenza caricata con successo') | 
| else begin | 
| WriteLn('**************************************************************'); | 
| WriteLn('ERRORE: GetProcAddress(dll, "SPPSRVReadScadenza") fallita!'); | 
| WriteLn('**************************************************************'); | 
| IsError := 1; | 
| end; | 
| if (IsError = 1) then goto END_OF_TEST; | 
|  | 
| WriteLn('Test calcolo e lettura scadenze...'); | 
| // inizializzazione della DLL | 
| rc := SPPSRVInit(GetDesktopWindow()); | 
| WriteLn('SPPSRVInit ha tornato: ' + IntToStr(rc)); | 
| if (rc <> SPPSRV_SUCCESS) then goto END_OF_TEST; | 
| // numero di versione della dll | 
| rc := SPPSRVVersion(); | 
| WriteLn('SPPSRVVersion ha tornato: ' + IntToStr(rc)); | 
| // connessione al database dei dati comuni e dei dati ditta | 
| {$ifdef STARTSUITE} | 
| // versione per SIGLA StartSuite (archivi dui tipo DBF) | 
| rc := SPPSRVComuniConnect('C:\SIGLAPP\PROVGEN'); | 
| WriteLn('SPPSRVComuniConnect ha tornato: ' + IntToStr(rc)); | 
| if (rc <> SPPSRV_SUCCESS) then goto FINE; | 
| rc := SPPSRVDittaConnect('C:\SIGLAPP\PROVDIT'); | 
| WriteLn('SPPSRVDittaConnect ha tornato: ' + IntToStr(rc)); | 
| if (rc <> SPPSRV_SUCCESS) then goto FINE; | 
| {$else} | 
| // versione per SIGLA (accesso ai dati via ODBC) | 
| rc := SPPSRVComuniConnect('DSN=pgSPPGEN;UID=sigla;PWD=sigla'); | 
| WriteLn('SPPSRVComuniConnect ha tornato: ' + IntToStr(rc)); | 
| if (rc <> SPPSRV_SUCCESS) then goto FINE; | 
| rc := SPPSRVDittaConnect('DSN=pgSPPDIT;UID=sigla;PWD=sigla'); | 
| WriteLn('SPPSRVDittaConnect ha tornato: ' + IntToStr(rc)); | 
| if (rc <> SPPSRV_SUCCESS) then goto FINE; | 
| {$endif} | 
| // impostazione dell'esercizio di lavoro | 
| rc := SPPSRVSetEsercizio(pChar(FormatDateTime('yyyy', Date))); | 
| WriteLn('SPPSRVSetEsercizio ha tornato: ' + IntToStr(rc)); | 
| // impostazione dell'utente | 
| rc := SPPSRVSetUtente('SIGLA   '); | 
| WriteLn('SPPSRVSetUtente ha tornato: ' + IntToStr(rc)); | 
| // impostazione della data | 
| rc := SPPSRVSetTodayDate(pChar(FormatDateTime('yyyymmdd', Date))); | 
| WriteLn('SPPSRVSetTodayDate ha tornato: ' + IntToStr(rc)); | 
| // impostazione dell'euro come valuta di lavoro | 
| rc := SPPSRVSetEuro(TRUE); | 
| WriteLn('SPPSrvSetEuro ha tornato: ' + IntToStr(rc)); | 
|  | 
| // calcolo delle scadenze | 
| WriteLn('Calcolo della scadenza...'); | 
| // int DLLCALL SPPSRVCalcolaScadenze(LPSTR tipopag,BOOL IsValuta,double TRata, | 
| //                                   LPSTR DataFattura,LPSTR datadecpag, | 
| //                                   LPSTR ggpart,LPSTR msalto1,LPSTR msalto2,LPSTR ggsalto); | 
| // parametri | 
| DataFattura := '20121113'; | 
| datadecpag := '201211300; | 
| ggpart := ''; | 
| msalto1 := ''; | 
| msalto2 := ''; | 
| ggsalto := ''; | 
| TRata := 1000.0; | 
| IsValuta := FALSE; | 
| tipopag := 'RB02'; | 
| rc := SPPSRVCalcolaScadenze(pChar(tipopag), IsValuta, TRata, pChar(DataFattura),pChar(datadecpag), | 
| pChar(ggpart), pChar(msalto1), pChar(msalto2), pChar(ggsalto)); | 
| WriteLn('SPPSRVCalcolaScadenze ha tornato: ' + IntToStr(rc)); | 
| // lettura delle scadenze | 
| numscad := rc; | 
| importo := 0; | 
| if (numscad > 0) then begin | 
| for j := 1 to numscad do begin | 
| rc := SPPSRVReadScadenza(j, @importo, dt1, tipo); | 
| if (rc = 0) then | 
| WriteLn(IntToStr(j) + ') Data: ' + Copy(dt1, 7, 2) + '/' + Copy(dt1, 5, 2) + | 
| '/' + Copy(dt1, 1, 4) + ' Importo: ' + FloatToStr(importo)) | 
| else | 
| WriteLn(IntToStr(j) + ') SPPSRVReadScadenza ha tornato: ' + IntToStr(rc)); | 
| end; | 
| end; | 
|  | 
| FINE: | 
| // resetta la DLL | 
| rc := SPPSRVExit(); | 
| WriteLn('SPPSRVExit ha tornato: ' + IntToStr(rc)); | 
|  | 
| END_OF_TEST: | 
| if (dll > 0 ) then FreeLibrary(dll); | 
| WriteLn('---------------------------------------------------'); | 
| WriteLn('Fine test ' + MY_LIBRARY_NAME); | 
|  | 
| WriteLn('... premere <INVIO> per terminare...'); | 
| ReadLn; | 
| end. |