Esempio SPPSERV/Prima nota cassa a banca/cpp

Da SIGLAkb.
Versione del 10 apr 2020 alle 18:48 di WikiSysop (Discussione | contributi) (una versione importata)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Dp-ingranaggio3.png Questo esempio illustra come utilizzare le funzioni della SPPSERV.DLL per la registrazione di una scrittura in partita doppia cassa a banca. L'esempio è stato sviluppato in C++ e compilato con Visual Studio 2008.

Prima di utilizzare questo esempio è necessario modificare opportunamente alcuni dati come le stringhe di connessione ai database dei dati comuni e ditta, i sottoconti, le date ecc..

Dp-acceptn72x72.png Questo sorgente è fornito a titolo di esempio come dimostrazione dell'utilizzo della libreria SPPSERV.DLL. Nessuna garanzia, né implicita né esplicita, è prevista per qualsiasi utilizzo diverso da quello indicato.
 
 
 /* --------------------------------------------------------------------------------
  *
  * 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;
 }
 

Bibliografia

Voci correlate

Come si personalizza SIGLA
SPPSERV.DLL
La libreria SIGPPDLL
La libreria SPPFrame