|  | 
| /* -------------------------------------------------------------------------------- | 
| * | 
| * Programma di esempio per la registrazione di una scrittura in partita doppia | 
| * cassa a banca 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. | 
| * | 
| * 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. | 
| * | 
| -------------------------------------------------------------------------------- */ | 
| #include "stdafx.h" | 
| #include <iostream> | 
| #include <windows.h> | 
| #include <stdio.h> | 
|  | 
| using namespace std; | 
|  | 
| #define MY_LIBRARY_NAME "sppserv.dll" | 
|  | 
| #define SPPSRV_SUCCESS    0 | 
|  | 
| #define DLLCALL __stdcall | 
|  | 
| // prototipi delle funzioni della sppserv.dll | 
| int (DLLCALL *SPPSRVVersion)(void); | 
| int (DLLCALL *SPPSRVInit)(HWND mainwnd); | 
| int (DLLCALL *SPPSRVExit)(void); | 
| int (DLLCALL *SPPSRVComuniConnect)(LPSTR comuniconnectstring); | 
| int (DLLCALL *SPPSRVDittaConnect)(LPSTR dittaconnectstring); | 
| int (DLLCALL *SPPSRVSetEsercizio)(LPSTR esercizio); | 
| int (DLLCALL *SPPSRVSetEuro)(UCHAR IsEuro); | 
| int (DLLCALL *SPPSRVSetUtente)(LPSTR utente); | 
| int (DLLCALL *SPPSRVSetTodayDate)(LPSTR todaydate); | 
| int (DLLCALL *SPPSRVActivateTransaction)(void); | 
| long int (DLLCALL *SPPSRVGetNum)(LPSTR code); | 
| int (DLLCALL *SPPSRVInitMovcoTransaction)(void); | 
| int (DLLCALL *SPPSRVEndMovcoTransaction)(void); | 
| int (DLLCALL *SPPSRVSetMovcoField)(LPSTR fldname,LPSTR value); | 
| int (DLLCALL *SPPSRVAppendMovcoRecord)(void); | 
| int (DLLCALL *SPPSRVCheckMovcoRecord)(void); | 
| int (DLLCALL *SPPSRVGetMovcoField)(LPSTR fldname,LPSTR value,int valuelen); | 
|  | 
| // funzioni ausiliarie | 
| void ReportError(const char *Msg); | 
| void SetMovcoField(LPSTR fldname,LPSTR value); | 
|  | 
| void main(int argc, char *argv[]) | 
| { | 
| HINSTANCE dll; | 
| FARPROC pp; | 
| UCHAR IsError; | 
| int rc; | 
| HWND hMainWnd; | 
| char MovcoNum[16]; | 
|  | 
| MovcoNum[0] = 0; | 
| rc = 0; | 
| dll = NULL; | 
|  | 
| hMainWnd = GetDesktopWindow(); | 
|  | 
| cout << endl; | 
| cout << "Inizio test " << MY_LIBRARY_NAME << endl; | 
| cout << "---------------------------------------------------" << endl; | 
| cout << endl; | 
|  | 
| //--------------------------------------------------------------// | 
|  | 
| cout << "Caricamento DLL e estrazione funzioni..." << endl; | 
| cout << endl; | 
|  | 
| // caricamento della dll | 
| dll=LoadLibrary(MY_LIBRARY_NAME); | 
| if(dll!=NULL) { | 
| cout << " " << MY_LIBRARY_NAME << " caricata con successo" << endl; | 
| } | 
| else { | 
| cout << "**********************************************" << endl; | 
| cout << "ERRORE: LoadLibrary(\"" << MY_LIBRARY_NAME << "\") fallita!" << endl; | 
| ReportError("Dettagli"); | 
| cout << "**********************************************" << endl; | 
| goto END_OF_TEST; | 
| } | 
|  | 
| cout << endl; | 
|  | 
| // estrazione delle funzioni esportate dalla dll | 
| IsError = 0; | 
| //int DLLCALL SPPSRVInit(HWND mainwnd); | 
| pp=GetProcAddress(dll,"SPPSRVInit"); | 
| if(pp!=NULL) { | 
| SPPSRVInit=(int (DLLCALL *)(HWND)) pp; | 
| cout << " " << "SPPSRVInit" << " caricata con successo" << endl; | 
| } | 
| else { | 
| cout << "**************************************************************" << endl; | 
| cout << "ERRORE: GetProcAddress(dll,\"" << "SPPSRVInit" << "\") fallita!" << endl; | 
| cout << "**************************************************************" << endl; | 
| IsError = 1; | 
| } | 
| //int DLLCALL SPPSRVVersion(void); | 
| pp=GetProcAddress(dll,"SPPSRVVersion"); | 
| if(pp!=NULL) { | 
| SPPSRVVersion=(int (DLLCALL *)(void)) pp; | 
| cout << " " << "SPPSRVVersion" << " caricata con successo" << endl; | 
| } | 
| else { | 
| cout << "**************************************************************" << endl; | 
| cout << "ERRORE: GetProcAddress(dll,\"" << "SPPSRVVersion" << "\") fallita!" << endl; | 
| cout << "**************************************************************" << endl; | 
| IsError = 1; | 
| } | 
| //int DLLCALL SPPSRVExit(void); | 
| pp=GetProcAddress(dll,"SPPSRVExit"); | 
| if(pp!=NULL) { | 
| SPPSRVExit=(int (DLLCALL *)(void)) pp; | 
| cout << " " << "SPPSRVExit" << " caricata con successo" << endl; | 
| } | 
| else { | 
| cout << "**************************************************************" << endl; | 
| cout << "ERRORE: GetProcAddress(dll,\"" << "SPPSRVExit" << "\") fallita!" << endl; | 
| cout << "**************************************************************" << endl; | 
| IsError = 1; | 
| } | 
| //int DLLCALL SPPSRVComuniConnect(LPSTR comuniconnectstring); | 
| pp=GetProcAddress(dll,"SPPSRVComuniConnect"); | 
| if(pp!=NULL) { | 
| SPPSRVComuniConnect=(int (DLLCALL *)(LPSTR)) pp; | 
| cout << " " << "SPPSRVComuniConnect" << " caricata con successo" << endl; | 
| } | 
| else { | 
| cout << "**************************************************************" << endl; | 
| cout << "ERRORE: GetProcAddress(dll,\"" << "SPPSRVComuniConnect" << "\") fallita!" << endl; | 
| cout << "**************************************************************" << endl; | 
| IsError = 1; | 
| } | 
| //int DLLCALL SPPSRVDittaConnect(LPSTR dittaconnectstring); | 
| pp=GetProcAddress(dll,"SPPSRVDittaConnect"); | 
| if(pp!=NULL) { | 
| SPPSRVDittaConnect=(int (DLLCALL *)(LPSTR)) pp; | 
| cout << " " << "SPPSRVDittaConnect" << " caricata con successo" << endl; | 
| } | 
| else { | 
| cout << "**************************************************************" << endl; | 
| cout << "ERRORE: GetProcAddress(dll,\"" << "SPPSRVDittaConnect" << "\") fallita!" << endl; | 
| cout << "**************************************************************" << endl; | 
| IsError = 1; | 
| } | 
| //int DLLCALL SPPSRVSetEsercizio(LPSTR esercizio); | 
| pp=GetProcAddress(dll,"SPPSRVSetEsercizio"); | 
| if(pp!=NULL) { | 
| SPPSRVSetEsercizio=(int (DLLCALL *)(LPSTR)) pp; | 
| cout << " " << "SPPSRVSetEsercizio" << " caricata con successo" << endl; | 
| } | 
| else { | 
| cout << "**************************************************************" << endl; | 
| cout << "ERRORE: GetProcAddress(dll,\"" << "SPPSRVSetEsercizio" << "\") fallita!" << endl; | 
| cout << "**************************************************************" << endl; | 
| IsError = 1; | 
| } | 
| //int DLLCALL SPPSRVSetUtente(LPSTR utente); | 
| pp=GetProcAddress(dll,"SPPSRVSetUtente"); | 
| if(pp!=NULL) { | 
| SPPSRVSetUtente=(int (DLLCALL *)(LPSTR)) pp; | 
| cout << " " << "SPPSRVSetUtente" << " caricata con successo" << endl; | 
| } | 
| else { | 
| cout << "**************************************************************" << endl; | 
| cout << "ERRORE: GetProcAddress(dll,\"" << "SPPSRVSetUtente" << "\") fallita!" << endl; | 
| cout << "**************************************************************" << endl; | 
| IsError = 1; | 
| } | 
| //int DLLCALL SPPSRVSetTodayDate(LPSTR todaydate); | 
| pp=GetProcAddress(dll,"SPPSRVSetTodayDate"); | 
| if(pp!=NULL) { | 
| SPPSRVSetTodayDate=(int (DLLCALL *)(LPSTR)) pp; | 
| cout << " " << "SPPSRVSetTodayDate" << " caricata con successo" << endl; | 
| } | 
| else { | 
| cout << "**************************************************************" << endl; | 
| cout << "ERRORE: GetProcAddress(dll,\"" << "SPPSRVSetTodayDate" << "\") fallita!" << endl; | 
| cout << "**************************************************************" << endl; | 
| IsError = 1; | 
| } | 
| //int DLLCALL SPPSRVSetEuro(UCHAR IsEuro); | 
| pp=GetProcAddress(dll,"SPPSRVSetEuro"); | 
| if(pp!=NULL) { | 
| SPPSRVSetEuro=(int (DLLCALL *)(UCHAR)) pp; | 
| cout << " " << "SPPSRVSetEuro" << " caricata con successo" << endl; | 
| } | 
| else { | 
| cout << "**************************************************************" << endl; | 
| cout << "ERRORE: GetProcAddress(dll,\"" << "SPPSRVSetEuro" << "\") fallita!" << endl; | 
| cout << "**************************************************************" << endl; | 
| IsError = 1; | 
| } | 
| #ifndef STARTSUITE | 
| //int DLLCALL SPPSRVActivateTransaction(void); | 
| pp=GetProcAddress(dll,"SPPSRVActivateTransaction"); | 
| if(pp!=NULL) { | 
| SPPSRVActivateTransaction=(int (DLLCALL *)(void)) pp; | 
| cout << " " << "SPPSRVActivateTransaction" << " caricata con successo" << endl; | 
| } | 
| else { | 
| cout << "**************************************************************" << endl; | 
| cout << "ERRORE: GetProcAddress(dll,\"" << "SPPSRVActivateTransaction" << "\") fallita!" << endl; | 
| cout << "**************************************************************" << endl; | 
| IsError = 1; | 
| } | 
| #endif | 
| //long int DLLCALL SPPSRVGetNum(LPSTR code); | 
| pp=GetProcAddress(dll,"SPPSRVGetNum"); | 
| if(pp!=NULL) { | 
| SPPSRVGetNum=(long int (DLLCALL *)(LPSTR)) pp; | 
| cout << " " << "SPPSRVGetNum" << " caricata con successo" << endl; | 
| } | 
| else { | 
| cout << "**************************************************************" << endl; | 
| cout << "ERRORE: GetProcAddress(dll,\"" << "SPPSRVGetNum" << "\") fallita!" << endl; | 
| cout << "**************************************************************" << endl; | 
| IsError = 1; | 
| } | 
| //int DLLCALL SPPSRVInitMovcoTransaction(void); | 
| pp=GetProcAddress(dll,"SPPSRVInitMovcoTransaction"); | 
| if(pp!=NULL) { | 
| SPPSRVInitMovcoTransaction=(int (DLLCALL *)(void)) pp; | 
| cout << " " << "SPPSRVInitMovcoTransaction" << " caricata con successo" << endl; | 
| } | 
| else { | 
| cout << "**************************************************************" << endl; | 
| cout << "ERRORE: GetProcAddress(dll,\"" << "SPPSRVInitMovcoTransaction" << "\") fallita!" << endl; | 
| cout << "**************************************************************" << endl; | 
| IsError = 1; | 
| } | 
| //int DLLCALL SPPSRVEndMovcoTransaction(void); | 
| pp=GetProcAddress(dll,"SPPSRVEndMovcoTransaction"); | 
| if(pp!=NULL) { | 
| SPPSRVEndMovcoTransaction=(int (DLLCALL *)(void)) pp; | 
| cout << " " << "SPPSRVEndMovcoTransaction" << " caricata con successo" << endl; | 
| } | 
| else { | 
| cout << "**************************************************************" << endl; | 
| cout << "ERRORE: GetProcAddress(dll,\"" << "SPPSRVEndMovcoTransaction" << "\") fallita!" << endl; | 
| cout << "**************************************************************" << endl; | 
| IsError = 1; | 
| } | 
| //int DLLCALL SPPSRVSetMovcoField(LPSTR fldname,LPSTR value); | 
| pp=GetProcAddress(dll,"SPPSRVSetMovcoField"); | 
| if(pp!=NULL) { | 
| SPPSRVSetMovcoField=(int (DLLCALL *)(LPSTR, LPSTR)) pp; | 
| cout << " " << "SPPSRVSetMovcoField" << " caricata con successo" << endl; | 
| } | 
| else { | 
| cout << "**************************************************************" << endl; | 
| cout << "ERRORE: GetProcAddress(dll,\"" << "SPPSRVSetMovcoField" << "\") fallita!" << endl; | 
| cout << "**************************************************************" << endl; | 
| IsError = 1; | 
| } | 
| //int DLLCALL SPPSRVCheckMovcoRecord(void); | 
| pp=GetProcAddress(dll,"SPPSRVCheckMovcoRecord"); | 
| if(pp!=NULL) { | 
| SPPSRVCheckMovcoRecord=(int (DLLCALL *)(void)) pp; | 
| cout << " " << "SPPSRVCheckMovcoRecord" << " caricata con successo" << endl; | 
| } | 
| else { | 
| cout << "**************************************************************" << endl; | 
| cout << "ERRORE: GetProcAddress(dll,\"" << "SPPSRVCheckMovcoRecord" << "\") fallita!" << endl; | 
| cout << "**************************************************************" << endl; | 
| IsError = 1; | 
| } | 
| //int DLLCALL SPPSRVAppendMovcoRecord(void); | 
| pp=GetProcAddress(dll,"SPPSRVAppendMovcoRecord"); | 
| if(pp!=NULL) { | 
| SPPSRVAppendMovcoRecord=(int (DLLCALL *)(void)) pp; | 
| cout << " " << "SPPSRVAppendMovcoRecord" << " caricata con successo" << endl; | 
| } | 
| else { | 
| cout << "**************************************************************" << endl; | 
| cout << "ERRORE: GetProcAddress(dll,\"" << "SPPSRVAppendMovcoRecord" << "\") fallita!" << endl; | 
| cout << "**************************************************************" << endl; | 
| IsError = 1; | 
| } | 
| //int DLLCALL SPPSRVGetMovcoField(LPSTR fldname,LPSTR value,int valuelen); | 
| pp=GetProcAddress(dll,"SPPSRVGetMovcoField"); | 
| if(pp!=NULL) { | 
| SPPSRVGetMovcoField=(int (DLLCALL *)(LPSTR, LPSTR, int)) pp; | 
| cout << " " << "SPPSRVGetMovcoField" << " caricata con successo" << endl; | 
| } | 
| else { | 
| cout << "**************************************************************" << endl; | 
| cout << "ERRORE: GetProcAddress(dll,\"" << "SPPSRVGetMovcoField" << "\") fallita!" << endl; | 
| cout << "**************************************************************" << endl; | 
| IsError = 1; | 
| } | 
|  | 
| if(IsError) goto END_OF_TEST; | 
|  | 
| //--------------------------------------------------------------// | 
|  | 
| cout << endl; | 
| cout << "Test inserimento scrittura cassa a banca..." << endl; | 
| cout << endl; | 
|  | 
| /* | 
| * §: ESEMPIO di registrazione di una scrittura in partita doppia | 
| */ | 
|  | 
| // inizializzazione della DLL | 
| rc = SPPSRVInit(hMainWnd); | 
| cout << " " << "SPPSRVInit" << " ha tornato: " << rc << endl; | 
| if( rc!=SPPSRV_SUCCESS ) goto END_OF_TEST; | 
| // numero di versione della dll | 
| rc = SPPSRVVersion(); | 
| cout << " " << "SPPSRVVersion" << " ha tornato: " << rc << endl; | 
| // 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"); | 
| cout << " " << "SPPSRVComuniConnect" << " ha tornato: " << rc << endl; | 
| if( rc!=SPPSRV_SUCCESS ) goto FINE; | 
| rc = SPPSRVDittaConnect("C:\\SIGLAPP\\PROVDIT"); | 
| cout << " " << "SPPSRVDittaConnect" << " ha tornato: " << rc << endl; | 
| if( rc!=SPPSRV_SUCCESS ) goto FINE; | 
| #else | 
| // versione per SIGLA (accesso ai dati via ODBC) | 
| rc = SPPSRVComuniConnect("DSN=SPPGEN;UID=sigla;PWD=sigla;"); | 
| cout << " " << "SPPSRVComuniConnect" << " ha tornato: " << rc << endl; | 
| if( rc!=SPPSRV_SUCCESS ) goto FINE; | 
| rc = SPPSRVDittaConnect("DSN=SPPDIT;UID=sigla;PWD=sigla;"); | 
| cout << " " << "SPPSRVDittaConnect" << " ha tornato: " << rc << endl; | 
| if( rc!=SPPSRV_SUCCESS ) goto FINE; | 
| rc = SPPSRVActivateTransaction(); | 
| cout << " " << "SPPSRVActivateTransaction" << " ha tornato: " << rc << endl; | 
| #endif | 
| // impostazione dell'esercizio di lavoro | 
| rc = SPPSRVSetEsercizio("2012"); | 
| cout << " " << "SPPSRVSetEsercizio" << " ha tornato: " << rc << endl; | 
| // impostazione dell'utente | 
| rc = SPPSRVSetUtente("SIGLA   "); | 
| cout << " " << "SPPSRVSetUtente" << " ha tornato: " << rc << endl; | 
| // impostazione della data | 
| rc = SPPSRVSetTodayDate("20120412"); | 
| cout << " " << "SPPSRVSetTodayDate" << " ha tornato: " << rc << endl; | 
| // impostazione dell'euro come valuta di lavoro | 
| rc = SPPSRVSetEuro(1); | 
| cout << " " << "SPPSrvSetEuro" << " ha tornato: " << rc << endl; | 
|  | 
| // inizializzazione della transazione | 
| rc = SPPSRVInitMovcoTransaction(); | 
| cout << " " << "SPPSRVInitMovcoTransaction" << " ha tornato: " << rc << endl; | 
| if( rc==SPPSRV_SUCCESS ) | 
| { | 
| // solo dopo l'inizializzazione può essere letto il valore del campo NUMERO | 
| // della tabella MOVCO (sarà automaticamente utilizzato anche per MOVIVA) | 
| rc = SPPSRVGetMovcoField("NUMERO",(LPSTR) MovcoNum, sizeof(MovcoNum)); | 
| cout << " " << "SPPSRVGetMovcoField NUMERO" << " ha tornato: " << rc << endl; | 
| } | 
|  | 
| // registrazione del primo record di MOVCO | 
| cout << "Registrazione del record sulla cassa..." << endl; | 
| SetMovcoField("DATAREG", "20120412"); | 
| SetMovcoField("ESEREGISTR", "2012"); | 
| SetMovcoField("DATACOMPET", "20120412"); | 
| SetMovcoField("DTCOMPCONT", "20120412"); | 
| SetMovcoField("ESECOMPET", "2012"); | 
| SetMovcoField("SOTTOCONTO", "CASSA     "); | 
| SetMovcoField("CONTROPART","1270108003"); | 
| SetMovcoField("C_F", "A"); | 
| SetMovcoField("SEGNO", "D"); | 
| // imposta la causale contabile | 
| SetMovcoField("CAUSALE", "PGF"); | 
| SetMovcoField("EIMPORTO","100.00"); | 
| // imposta il campo CASO a "prima nota non iva" | 
| SetMovcoField("CASO", "4"); | 
| // controllo e inserimento del record | 
| rc = SPPSRVCheckMovcoRecord(); | 
| cout << " " << "SPPSRVCheckMovcoRecord" << " ha tornato: " << rc << endl; | 
| rc = SPPSRVAppendMovcoRecord(); | 
| cout << " " << "SPPSRVAppendMovcoRecord" << " ha tornato: " << rc << endl; | 
| // registrazione del secondo record di MOVCO | 
| // (i campi impostati non vengono resettati da SPPSRVAppendNovcoRecord) | 
| cout << "Registrazione del record sulla banca..." << endl; | 
| SetMovcoField("SOTTOCONTO","1270108003"); | 
| SetMovcoField("CONTROPART","CASSA     "); | 
| SetMovcoField("SEGNO", "A"); | 
| SetMovcoField("EIMPORTO", "100.00"); | 
| // controllo e inserimento del record | 
| rc = SPPSRVCheckMovcoRecord(); | 
| cout << " " << "SPPSRVCheckMovcoRecord" << " ha tornato: " << rc << endl; | 
| rc = SPPSRVAppendMovcoRecord(); | 
| cout << " " << "SPPSRVAppendMovcoRecord" << " ha tornato: " << rc << endl; | 
|  | 
| // termine della transazione | 
| rc = SPPSRVEndMovcoTransaction(); | 
| cout << " " << "SPPSRVEndMovcoTransaction" << " ha tornato: " << rc << endl; | 
|  | 
| cout << "registrazione eseguita MOVCO.NUMERO = '" << MovcoNum << "'" << endl; | 
|  | 
| FINE: | 
| // resetta la DLL | 
| rc = SPPSRVExit(); | 
| cout << " " << "SPPSRVExit" << " ha tornato: " << rc << endl; | 
|  | 
| cout << endl; | 
| cout << "... premere <INVIO> per terminare..." << endl; | 
| char ch; | 
| cin.get(ch); | 
| cin.clear(); | 
|  | 
| END_OF_TEST: | 
|  | 
| if(dll!=NULL) FreeLibrary(dll); | 
|  | 
| cout << endl; | 
| cout << "---------------------------------------------------" << endl; | 
| cout << "fine test " << MY_LIBRARY_NAME << endl; | 
| cout << endl; | 
| } | 
|  | 
| void ReportError(const char *Msg) | 
| { | 
| LPVOID lpMsgBuf; | 
| DWORD ErrorCode = GetLastError (); | 
| FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | | 
| FORMAT_MESSAGE_MAX_WIDTH_MASK | FORMAT_MESSAGE_ALLOCATE_BUFFER, | 
| NULL, ErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), | 
| (LPTSTR) &lpMsgBuf, 0, NULL); | 
| printf("%s: errore %ld (%s)\n", Msg, ErrorCode, lpMsgBuf); | 
| LocalFree(lpMsgBuf); | 
| } | 
|  | 
| void SetMovcoField(LPSTR fldname,LPSTR value) | 
| { | 
| int rc; | 
|  | 
| rc = SPPSRVSetMovcoField(fldname, value); | 
| if( rc!=SPPSRV_SUCCESS ) | 
| cout << " " << "SPPSRVSetMovcoField " << fldname << " ha tornato: " << rc << endl; | 
| } |