|
/* -------------------------------------------------------------------------------- |
* |
* 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; |
} |