Differenze tra le versioni di "Esempio SPPSERV/Fattura vendita contabilità/delphi"

Da SIGLAkb.
 
m (una versione importata)
 
(Nessuna differenza)

Versione attuale delle 18:48, 10 apr 2020

Dp-ingranaggio3.png Questo esempio illustra come utilizzare le funzioni della SPPSERV.DLL per la registrazione di una fattura di vendita (solo dati contabili). L'esempio è stato sviluppato in Delphi e compilato con Delphi versione 7.

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 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 SppServTest1;
 
 {$APPTYPE CONSOLE}
 
 uses
  Windows, StdCtrls, ExtCtrls, SysUtils;
 
 const
  MY_LIBRARY_NAME = 'sppserv.dll';
  SPPSRV_SUCCESS = 0;
 
 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;
  SPPSRVActivateTransaction  : function() : integer stdcall;
  SPPSRVGetNum  : function(code : pChar) : integer stdcall;
  SPPSRVInitMovcoTransaction : function() : integer stdcall;
  SPPSRVEndMovcoTransaction  : function() : integer stdcall;
  SPPSRVSetMovcoField  : function(fldname : pChar; value : pChar) : integer stdcall;
  SPPSRVAppendMovcoRecord  : function() : integer stdcall;
  SPPSRVCheckMovcoRecord  : function() : integer stdcall;
  SPPSRVSetMovIvaField  : function(fldname : pChar; value : pChar) : integer stdcall;
  SPPSRVAppendMovIvaRecord  : function() : integer stdcall;
  SPPSRVCheckMovIvaRecord  : function() : integer stdcall;
  SPPSRVGetMovcoField  : function(fldname : pChar; value : pChar;
  valuelen : integer) : integer stdcall;
 
  dll : THandle;
  IsError, rc, nprot : integer;
  numeroprot, numerodoc : string;
  MovcoNum : array[0..15] 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;
 
  procedure SetMovcoField(fldname : string; value : string);
  var
  rc : integer;
  begin
  rc := SPPSRVSetMovcoField(pChar(fldname), pChar(value));
  if (rc <> SPPSRV_SUCCESS) then
  WriteLn('SPPSRVSetMovcoField (' + fldname + ') ha tornato: ' + IntToStr(rc));
  end;
 
  procedure SetMovIvaField(fldname : string; value : string);
  var
  rc : integer;
  begin
  rc := SPPSRVSetMovIvaField(pChar(fldname), pChar(value));
  if (rc <> SPPSRV_SUCCESS) then
  WriteLn('SPPSRVSetMovIvaField (' + fldname + ') ha tornato: ' + IntToStr(rc));
  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;
  {$ifndef STARTSUITE}
  @SPPSRVActivateTransaction := GetProcAddress(dll, 'SPPSRVActivateTransaction');
  if (Assigned(SPPSRVActivateTransaction)) then
  WriteLn('SPPSRVActivateTransaction caricata con successo')
  else begin
  WriteLn('**************************************************************');
  WriteLn('ERRORE: GetProcAddress(dll, "SPPSRVActivateTransaction") fallita!');
  WriteLn('**************************************************************');
  IsError := 1;
  end;
  {$endif}
  @SPPSRVGetNum := GetProcAddress(dll, 'SPPSRVGetNum');
  if (Assigned(SPPSRVGetNum)) then
  WriteLn('SPPSRVGetNum caricata con successo')
  else begin
  WriteLn('**************************************************************');
  WriteLn('ERRORE: GetProcAddress(dll, "SPPSRVGetNum") fallita!');
  WriteLn('**************************************************************');
  IsError := 1;
  end;
  @SPPSRVInitMovcoTransaction := GetProcAddress(dll, 'SPPSRVInitMovcoTransaction');
  if (Assigned(SPPSRVInitMovcoTransaction)) then
  WriteLn('SPPSRVInitMovcoTransaction caricata con successo')
  else begin
  WriteLn('**************************************************************');
  WriteLn('ERRORE: GetProcAddress(dll, "SPPSRVInitMovcoTransaction") fallita!');
  WriteLn('**************************************************************');
  IsError := 1;
  end;
  @SPPSRVEndMovcoTransaction := GetProcAddress(dll, 'SPPSRVEndMovcoTransaction');
  if (Assigned(SPPSRVEndMovcoTransaction)) then
  WriteLn('SPPSRVEndMovcoTransaction caricata con successo')
  else begin
  WriteLn('**************************************************************');
  WriteLn('ERRORE: GetProcAddress(dll, "SPPSRVEndMovcoTransaction") fallita!');
  WriteLn('**************************************************************');
  IsError := 1;
  end;
  @SPPSRVSetMovcoField := GetProcAddress(dll, 'SPPSRVSetMovcoField');
  if (Assigned(SPPSRVSetMovcoField)) then
  WriteLn('SPPSRVSetMovcoField caricata con successo')
  else begin
  WriteLn('**************************************************************');
  WriteLn('ERRORE: GetProcAddress(dll, "SPPSRVSetMovcoField") fallita!');
  WriteLn('**************************************************************');
  IsError := 1;
  end;
  @SPPSRVCheckMovcoRecord := GetProcAddress(dll, 'SPPSRVCheckMovcoRecord');
  if (Assigned(SPPSRVCheckMovcoRecord)) then
  WriteLn('SPPSRVCheckMovcoRecord caricata con successo')
  else begin
  WriteLn('**************************************************************');
  WriteLn('ERRORE: GetProcAddress(dll, "SPPSRVCheckMovcoRecord") fallita!');
  WriteLn('**************************************************************');
  IsError := 1;
  end;
  @SPPSRVAppendMovcoRecord := GetProcAddress(dll, 'SPPSRVAppendMovcoRecord');
  if (Assigned(SPPSRVAppendMovcoRecord)) then
  WriteLn('SPPSRVAppendMovcoRecord caricata con successo')
  else begin
  WriteLn('**************************************************************');
  WriteLn('ERRORE: GetProcAddress(dll, "SPPSRVAppendMovcoRecord") fallita!');
  WriteLn('**************************************************************');
  IsError := 1;
  end;
  @SPPSRVSetMovIvaField := GetProcAddress(dll, 'SPPSRVSetMovIvaField');
  if (Assigned(SPPSRVSetMovIvaField)) then
  WriteLn('SPPSRVSetMovIvaField caricata con successo')
  else begin
  WriteLn('**************************************************************');
  WriteLn('ERRORE: GetProcAddress(dll, "SPPSRVSetMovIvaField") fallita!');
  WriteLn('**************************************************************');
  IsError := 1;
  end;
  @SPPSRVCheckMovIvaRecord := GetProcAddress(dll, 'SPPSRVCheckMovIvaRecord');
  if (Assigned(SPPSRVCheckMovIvaRecord)) then
  WriteLn('SPPSRVCheckMovIvaRecord caricata con successo')
  else begin
  WriteLn('**************************************************************');
  WriteLn('ERRORE: GetProcAddress(dll, "SPPSRVCheckMovIvaRecord") fallita!');
  WriteLn('**************************************************************');
  IsError := 1;
  end;
  @SPPSRVAppendMovIvaRecord := GetProcAddress(dll, 'SPPSRVAppendMovIvaRecord');
  if (Assigned(SPPSRVAppendMovIvaRecord)) then
  WriteLn('SPPSRVAppendMovIvaRecord caricata con successo')
  else begin
  WriteLn('**************************************************************');
  WriteLn('ERRORE: GetProcAddress(dll, "SPPSRVAppendMovIvaRecord") fallita!');
  WriteLn('**************************************************************');
  IsError := 1;
  end;
  @SPPSRVGetMovcoField := GetProcAddress(dll, 'SPPSRVGetMovcoField');
  if (Assigned(SPPSRVGetMovcoField)) then
  WriteLn('SPPSRVGetMovcoField caricata con successo')
  else begin
  WriteLn('**************************************************************');
  WriteLn('ERRORE: GetProcAddress(dll, "SPPSRVGetMovcoField") fallita!');
  WriteLn('**************************************************************');
  IsError := 1;
  end;
  if (IsError = 1) then goto END_OF_TEST;
 
  WriteLn('Test inserimento fattura di vendita...');
 
  (*
  * §: ESEMPIO di registrazione di una fattura di vendita
  * Il codice che segue realizza la registrazione di una fattura di vendita.
  * Viene gestita anche l’acquisizione del numero di protocollo iva.
  *)
 
  // 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=SPPGEN;UID=sigla;PWD=sigla');
  WriteLn('SPPSRVComuniConnect ha tornato: ' + IntToStr(rc));
  if (rc <> SPPSRV_SUCCESS) then goto FINE;
  rc := SPPSRVDittaConnect('DSN=SPPDIT;UID=sigla;PWD=sigla');
  WriteLn('SPPSRVDittaConnect ha tornato: ' + IntToStr(rc));
  if (rc <> SPPSRV_SUCCESS) then goto FINE;
  rc := SPPSRVActivateTransaction();
  WriteLn('SPPSRVActivateTransaction ha tornato: ' + IntToStr(rc));
  {$endif}
  // impostazione dell'esercizio di lavoro
  rc := SPPSRVSetEsercizio('2012');
  WriteLn('SPPSRVSetEsercizio ha tornato: ' + IntToStr(rc));
  // impostazione dell'utente
  rc := SPPSRVSetUtente('SIGLA ');
  WriteLn('SPPSRVSetUtente ha tornato: ' + IntToStr(rc));
  // impostazione della data
  rc := SPPSRVSetTodayDate('20120412');
  WriteLn('SPPSRVSetTodayDate ha tornato: ' + IntToStr(rc));
  // impostazione dell'euro come valuta di lavoro
  rc := SPPSRVSetEuro(TRUE);
  WriteLn('SPPSrvSetEuro ha tornato: ' + IntToStr(rc));
  // acquisizione del protocollo iva dal numeratore V1 (associato alla causale contabile
  // utilizzata); per la ft. di vendita si utilizza sia come protocollo che come numero
  // documento (N.B.: SPPSRVGetNum esegue automaticamente una Commit)
  nprot := SPPSRVGetNum('V1');
  WriteLn('SPPSRVGetNum ha tornato: ' + IntToStr(nprot));
  if (nprot < 0) then goto FINE;
  // memorizzazione del numero acquistito in formato ASCII
  numeroprot := Format('%.7d', [nprot]);
  numerodoc := Format('%.10d', [nprot]);
  // inizializzazione della transazione
  rc := SPPSRVInitMovcoTransaction();
  WriteLn('SPPSRVInitMovcoTransaction ha tornato: ' + IntToStr(rc));
  if (rc = SPPSRV_SUCCESS) then begin
  // solo dopo l'inizializzazione può essere letto il valore del campo NUMERO
  // della tabella MOVCO (sarà automaticamente utilizzato anche per MOVIVA)
  rc := SPPSRVGetMovcoField('NUMERO', MovcoNum, Length(MovcoNum));
  WriteLn('SPPSRVGetMovcoField NUMERO ha tornato: ' + IntToStr(rc));
  end;
  // registrazione del record sul cliente (1o record di MOVCO)
  WriteLn('Registrazione del record sul cliente...');
  SetMovcoField('DATAREG', '20120412');
  SetMovcoField('ESEREGISTR', '2012');
  SetMovcoField('DATACOMPET', '20120412');
  SetMovcoField('DTCOMPCONT', '20120412');
  SetMovcoField('ESECOMPET', '2012');
  SetMovcoField('SOTTOCONTO', 'DELTA ');
  SetMovcoField('C_F', 'C');
  SetMovcoField('SEGNO', 'D');
  // imposta la causale contabile
  SetMovcoField('CAUSALE', 'COR');
  SetMovcoField('EIMPORTO','121.00');
  SetMovcoField('EIMPFATTUR','121.00');
  // imposta data e numero del documento
  SetMovcoField('DATAPROTOC', '20120412');
  SetMovcoField('DATADOCUM', '20120412');
  SetMovcoField('NUMDOCUM', numerodoc);
  SetMovcoField('NUMPROTOC', numeroprot);
  // imposta il codice del registro IVA (dipende dalla causale contabile)
  SetMovcoField('REGIVA', 'CO');
  // imposta il tipo documento IVA (dipende dalla causale contabile)
  SetMovcoField('TIPODOCIVA', 'CO');
  // imposta il campo CASO a "prima nota iva"
  SetMovcoField('CASO', '0');
  // controllo e inserimento del record
  rc := SPPSRVCheckMovcoRecord();
  WriteLn('SPPSRVCheckMovcoRecord ha tornato: ' + IntToStr(rc));
  rc := SPPSRVAppendMovcoRecord();
  WriteLn('SPPSRVAppendMovcoRecord ha tornato: ' + IntToStr(rc));
  // registrazione del record sul ricavo (2o record di MOVCO)
  WriteLn('Registrazione del record sul ricavo...');
  SetMovcoField('SOTTOCONTO', 'VENMAT ');
  SetMovcoField('CONTROPART', 'DELTA ');
  SetMovcoField('C_F', 'A');
  SetMovcoField('SEGNO', 'A');
  SetMovcoField('EIMPORTO', '100.00');
  // i campi non impostati mantengono il valore del record precedente
  // controllo e inserimento del record
  rc := SPPSRVCheckMovcoRecord();
  WriteLn('SPPSRVCheckMovcoRecord ha tornato: ' + IntToStr(rc));
  rc := SPPSRVAppendMovcoRecord();
  WriteLn('SPPSRVAppendMovcoRecord ha tornato: ' + IntToStr(rc));
  // registrazione del record sull’iva (3o record di MOVCO)
  WriteLn('Registrazione del record sull''iva...');
  SetMovcoField('SOTTOCONTO', '2370101003');
  SetMovcoField('SEGNO', 'A');
  SetMovcoField('EIMPORTO', '21.00');
  SetMovcoField('EIMPORTOIV', '21.00');
  SetMovcoField('MOV_IVA_SN', 'S');
  // controllo e inserimento del record
  rc := SPPSRVCheckMovcoRecord();
  WriteLn('SPPSRVCheckMovcoRecord ha tornato: ' + IntToStr(rc));
  rc := SPPSRVAppendMovcoRecord();
  WriteLn('SPPSRVAppendMovcoRecord ha tornato: ' + IntToStr(rc));
  // registra un record su MOVIVA
  WriteLn('Registrazione del record su moviva...');
  SetMovIvaField('SOTTOCONTO', 'DELTA ');
  SetMovIvaField('C_F', 'C');
  SetMovIvaField('TIPODOCIVA', 'CO');
  SetMovIvaField('REGISTRO', 'CO');
  SetMovIvaField('NUMPROTOC', numeroprot);
  SetMovIvaField('NUMERODOC', numerodoc);
  SetMovIvaField('DATADOC', '20120412');
  SetMovIvaField('DATAREG', '20120412');
  SetMovIvaField('ETOTFATTUR','121.00');
  SetMovIvaField('EIMPONIBIL','100.00');
  SetMovIvaField('CODIVA','21 ');
  SetMovIvaField('EIMPOSTA','21.00');
  // controllo e inserimento del record
  rc := SPPSRVCheckMovIvaRecord();
  WriteLn('SPPSRVCheckMovIvaRecord ha tornato: ' + IntToStr(rc));
  rc := SPPSRVAppendMovIvaRecord();
  WriteLn('SPPSRVAppendMovIvaRecord ha tornato: ' + IntToStr(rc));
 
  // termine della transazione
  rc := SPPSRVEndMovcoTransaction();
  WriteLn('SPPSRVEndMovcoTransaction ha tornato: ' + IntToStr(rc));
  WriteLn('Registrazione eseguita MOVCO.NUMERO = "' + StrPas(MovcoNum) + '"');
 
 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.
 

Bibliografia

Voci correlate

Come si personalizza SIGLA
SPPSERV.DLL