Esempio SPPSERV/Fattura vendita contabilità/csharp

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 fattura di vendita (solo dati contabili). 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 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 esempio e' compilato come applicazione Windows 32bit, in quanto utilizza
  * librerie, tra cui la SppServ.dll, che sono esplicitamente di tipo Win32.
  *
  * 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.
  *
  -------------------------------------------------------------------------------- */
 using System;
 using System.IO;
 using System.Collections.Generic;
 using System.Text;
 using System.Runtime.InteropServices;
 
 namespace SppServTest
 {
  class Program
  {
  //costante booleana che, se settata a true, abilita l'uso di Start v.3
  const bool STARTSUITE = false;
  const string MY_LIBRARY_NAME = "sppserv.dll";
  const int SPPSRV_SUCCESS = 0;
 
  static bool IsSppServInit = false;
 
  [DllImport("user32.dll", SetLastError = false)]
  static extern IntPtr GetDesktopWindow();
 
  // prototipi delle funzioni della sppserv.dll
  [DllImport(MY_LIBRARY_NAME, SetLastError = true)]
  private static extern int SPPSRVVersion();
  [DllImport(MY_LIBRARY_NAME, SetLastError = true)]
  private static extern int SPPSRVInit(IntPtr mainwnd);
  [DllImport(MY_LIBRARY_NAME, SetLastError = true)]
  private static extern int SPPSRVExit();
  [DllImport(MY_LIBRARY_NAME, SetLastError = true)]
  private static extern int SPPSRVComuniConnect([MarshalAs(UnmanagedType.LPStr)]
  StringBuilder comuniconnectstring);
  [DllImport(MY_LIBRARY_NAME, SetLastError = true)]
  private static extern int SPPSRVDittaConnect([MarshalAs(UnmanagedType.LPStr)]
  StringBuilder dittaconnectstring);
  [DllImport(MY_LIBRARY_NAME, SetLastError = true)]
  private static extern int SPPSRVSetEsercizio([MarshalAs(UnmanagedType.LPStr)] StringBuilder esercizio);
  [DllImport(MY_LIBRARY_NAME, SetLastError = true)]
  private static extern int SPPSRVSetEuro(bool IsEuro);
  [DllImport(MY_LIBRARY_NAME, SetLastError = true)]
  private static extern int SPPSRVSetUtente([MarshalAs(UnmanagedType.LPStr)] StringBuilder utente);
  [DllImport(MY_LIBRARY_NAME, SetLastError = true)]
  private static extern int SPPSRVSetTodayDate([MarshalAs(UnmanagedType.LPStr)] StringBuilder todaydate);
  [DllImport(MY_LIBRARY_NAME, SetLastError = true)]
  private static extern int SPPSRVActivateTransaction();
  [DllImport(MY_LIBRARY_NAME, SetLastError = true)]
  private static extern int SPPSRVGetNum([MarshalAs(UnmanagedType.LPStr)] StringBuilder code);
  [DllImport(MY_LIBRARY_NAME, SetLastError = true)]
  private static extern int SPPSRVInitMovcoTransaction();
  [DllImport(MY_LIBRARY_NAME, SetLastError = true)]
  private static extern int SPPSRVEndMovcoTransaction();
  [DllImport(MY_LIBRARY_NAME, SetLastError = true)]
  private static extern int SPPSRVSetMovcoField([MarshalAs(UnmanagedType.LPStr)] StringBuilder fldname,
  [MarshalAs(UnmanagedType.LPStr)] StringBuilder value);
  [DllImport(MY_LIBRARY_NAME, SetLastError = true)]
  private static extern int SPPSRVAppendMovcoRecord();
  [DllImport(MY_LIBRARY_NAME, SetLastError = true)]
  private static extern int SPPSRVCheckMovcoRecord();
  [DllImport(MY_LIBRARY_NAME, SetLastError = true)]
  private static extern int SPPSRVSetMovIvaField([MarshalAs(UnmanagedType.LPStr)] StringBuilder fldname,
  [MarshalAs(UnmanagedType.LPStr)] StringBuilder value);
  [DllImport(MY_LIBRARY_NAME, SetLastError = true)]
  private static extern int SPPSRVAppendMovIvaRecord();
  [DllImport("sppserv.dll", SetLastError = true)]
  private static extern int SPPSRVCheckMovIvaRecord();
  [DllImport("sppserv.dll", SetLastError = true)]
  private static extern int SPPSRVGetMovcoField([MarshalAs(UnmanagedType.LPStr)] StringBuilder fldname,
  [MarshalAs(UnmanagedType.LPStr)] StringBuilder value, int valuelen);
 
  static void Main(string[] args)
  {
  /*
  * §: 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.
  */
 
  int rc = 0;
  StringBuilder MovcoNum = new StringBuilder(16);
  Console.Clear();
  Console.WriteLine("Test inserimento fattura di vendita...");
 
  System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
  string msgfilepath = assembly.CodeBase;
  if (msgfilepath.IndexOf("file:///") >= 0)
  msgfilepath = msgfilepath.Substring(8, msgfilepath.Length - 8);
  msgfilepath = System.IO.Path.GetDirectoryName(msgfilepath);
  //Verifica della presenza della SppServ.dll e delle sue dipendenze
  if (!File.Exists(msgfilepath + "\\sppserv.dll"))
  Console.WriteLine("Libreria SppServ.dll non trovata");
  else if (!File.Exists(msgfilepath + "\\xnmba423.dll"))
  Console.WriteLine("Libreria xnmba423.dll non trovata");
  else if (!File.Exists(msgfilepath + "\\Sx32w.dll"))
  Console.WriteLine("Libreria Sx32w.dll non trovata");
  else if (!File.Exists(msgfilepath + "\\hasp_windows_90347.dll"))
  Console.WriteLine("Libreria Hasp_Windows_90347.dll non trovata");
  else if (!File.Exists(msgfilepath + "\\sppmsg.ita"))
  Console.WriteLine("File dei messaggi SppMsg.ita non trovato");
  else
  {
  // inizializzazione della DLL
  try
  {
  if ((rc = SPPSRVInit(GetDesktopWindow())) != SPPSRV_SUCCESS)
  {
  Console.WriteLine("Inizializzazione SppServ.dll fallita." +
  " SPPSRVInit ha tornato: " + rc.ToString());
  goto FINE;
  }
  else
  {
  IsSppServInit = true;
  // numero di versione della dll
  int sppver = SPPSRVVersion();
  Console.WriteLine("Inizializzazione SppServ.dll eseguita con successo." +
  " Versione libreria (valore di ritorno di SPPSRVVersion): " +
  sppver.ToString());
  }
  }
  catch (Exception ex)
  {
  Console.WriteLine("Errore generico inizializzazione SppServ.dll: " + ex.Message);
  goto FINE;
  }
  // connessione al database dei dati comuni e dei dati ditta
  if (STARTSUITE)
  {
  // versione per SIGLA StartSuite (archivi dui tipo DBF)
  rc = SPPSRVComuniConnect(new StringBuilder("C:\\SIGLAPP\\PROVGEN"));
  Console.WriteLine("SPPSRVComuniConnect ha tornato: " + rc.ToString());
  if (rc != SPPSRV_SUCCESS) goto FINE;
  rc = SPPSRVDittaConnect(new StringBuilder("C:\\SIGLAPP\\PROVDIT"));
  Console.WriteLine("SPPSRVDittaConnect ha tornato: " + rc.ToString());
  if (rc != SPPSRV_SUCCESS) goto FINE;
  }
  else
  {
  // versione per SIGLA (accesso ai dati via ODBC)
  rc = SPPSRVComuniConnect(new StringBuilder("DSN=pgSPPGEN;UID=sigla;PWD=sigla"));
  Console.WriteLine("SPPSRVComuniConnect ha tornato: " + rc.ToString());
  if (rc != SPPSRV_SUCCESS) goto FINE;
  rc = SPPSRVDittaConnect(new StringBuilder("DSN=pgSPPDIT;UID=sigla;PWD=sigla"));
  Console.WriteLine("SPPSRVDittaConnect ha tornato: " + rc.ToString());
  if (rc != SPPSRV_SUCCESS) goto FINE;
  rc = SPPSRVActivateTransaction();
  Console.WriteLine("SPPSRVActivateTransaction ha tornato: " + rc.ToString());
  }
  // impostazione dell'esercizio di lavoro
  rc = SPPSRVSetEsercizio(new StringBuilder("2012"));
  Console.WriteLine("SPPSRVSetEsercizio ha tornato: " + rc.ToString());
  // impostazione dell'utente
  rc = SPPSRVSetUtente(new StringBuilder("SIGLA "));
  Console.WriteLine("SPPSRVSetUtente ha tornato: " + rc.ToString());
  // impostazione della data
  rc = SPPSRVSetTodayDate(new StringBuilder("20120412"));
  Console.WriteLine("SPPSRVSetTodayDate ha tornato: " + rc.ToString());
  // impostazione dell'euro come valuta di lavoro
  rc = SPPSRVSetEuro(true);
  Console.WriteLine("SPPSrvSetEuro ha tornato: " + rc.ToString());
  // 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)
  int nprot = SPPSRVGetNum(new StringBuilder("V1"));
  Console.WriteLine("SPPSRVGetNum ha tornato: " + nprot.ToString());
  if (nprot < 0) goto FINE;
  // memorizzazione del numero acquistito in formato ASCII
  string numeroprot = string.Format("{0:D7}", nprot);
  string numerodoc = string.Format("{0:D10}", nprot);
  // inizializzazione della transazione
  rc = SPPSRVInitMovcoTransaction();
  Console.WriteLine("SPPSRVInitMovcoTransaction ha tornato: " + rc.ToString());
  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(new StringBuilder("NUMERO"), MovcoNum, 16);
  Console.WriteLine("SPPSRVGetMovcoField NUMERO ha tornato: " + rc.ToString());
  }
  // registrazione del record sul cliente (1o record di MOVCO)
  Console.WriteLine("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();
  Console.WriteLine("SPPSRVCheckMovcoRecord ha tornato: " + rc.ToString());
  rc = SPPSRVAppendMovcoRecord();
  Console.WriteLine("SPPSRVAppendMovcoRecord ha tornato: " + rc.ToString());
  // registrazione del record sul ricavo (2o record di MOVCO)
  Console.WriteLine("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();
  Console.WriteLine("SPPSRVCheckMovcoRecord ha tornato: " + rc.ToString());
  rc = SPPSRVAppendMovcoRecord();
  Console.WriteLine("SPPSRVAppendMovcoRecord ha tornato: " + rc.ToString());
  // registrazione del record sull’iva (3o record di MOVCO)
  Console.WriteLine("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();
  Console.WriteLine("SPPSRVCheckMovcoRecord ha tornato: " + rc.ToString());
  rc = SPPSRVAppendMovcoRecord();
  Console.WriteLine("SPPSRVAppendMovcoRecord ha tornato: " + rc.ToString());
  // registra un record su MOVIVA
  Console.WriteLine("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();
  Console.WriteLine("SPPSRVCheckMovIvaRecord ha tornato: " + rc.ToString());
  rc = SPPSRVAppendMovIvaRecord();
  Console.WriteLine("SPPSRVAppendMovIvaRecord ha tornato: " + rc.ToString());
  // termine della transazione
  rc = SPPSRVEndMovcoTransaction();
  Console.WriteLine("SPPSRVEndMovcoTransaction ha tornato: " + rc.ToString());
  Console.WriteLine("Registrazione eseguita MOVCO.NUMERO = '" +
  MovcoNum.ToString() + "'");
  }
  FINE:
  // resetta la DLL
  if (IsSppServInit)
  {
  if ((rc = SPPSRVExit()) == SPPSRV_SUCCESS)
  Console.WriteLine("Deinizializzazione SppServ.dll eseguita con successo");
  Console.WriteLine("SPPSRVExit ha tornato: " + rc.ToString());
  }
  Console.WriteLine("... premere <INVIO> per terminare...");
  Console.ReadKey();
  }
 
  static void SetMovcoField(string fldname, string value)
  {
  int rc;
 
  rc = SPPSRVSetMovcoField(new StringBuilder(fldname), new StringBuilder(value));
  if (rc != SPPSRV_SUCCESS)
  Console.WriteLine("SPPSRVSetMovcoField " + fldname + " ha tornato: " +
  rc.ToString());
  }
 
  static void SetMovIvaField(string fldname, string value)
  {
  int rc;
 
  rc = SPPSRVSetMovIvaField(new StringBuilder(fldname), new StringBuilder(value));
  if (rc != SPPSRV_SUCCESS)
  Console.WriteLine("SPPSRVSetMovIvaField " + fldname + " ha tornato: " +
  rc.ToString());
  }
  }
 }
 

Bibliografia

Voci correlate

Come si personalizza SIGLA
SPPSERV.DLL