Esempio SPPSERV/Prima nota cassa a banca/csharp

Da SIGLAkb.

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.
  *
  * 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 SppServTest2
 {
  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("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 scrittura in partita doppia
  */
 
  int rc = 0;
  StringBuilder MovcoNum = new StringBuilder(16);
  Console.Clear();
  Console.WriteLine("Test inserimento scrittura cassa a banca...");
  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=SPPGEN;UID=sigla;PWD=sigla"));
  Console.WriteLine("SPPSRVComuniConnect ha tornato: " + rc.ToString());
  if (rc != SPPSRV_SUCCESS) goto FINE;
  rc = SPPSRVDittaConnect(new StringBuilder("DSN=SPPDIT;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());
  // 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 primo record di MOVCO
  Console.WriteLine("Registrazione del record sulla cassa...");
  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();
  Console.WriteLine("SPPSRVCheckMovcoRecord ha tornato: " + rc.ToString());
  rc = SPPSRVAppendMovcoRecord();
  Console.WriteLine("SPPSRVAppendMovcoRecord ha tornato: " + rc.ToString());
  // registrazione del secondo record di MOVCO
  // (i campi impostati non vengono resettati da SPPSRVAppendNovcoRecord)
  Console.WriteLine("Registrazione del record sulla banca...");
  SetMovcoField("SOTTOCONTO", "1270108003");
  SetMovcoField("CONTROPART", "CASSA ");
  SetMovcoField("SEGNO", "A");
  SetMovcoField("EIMPORTO", "100.00");
  // controllo e inserimento del record
  rc = SPPSRVCheckMovcoRecord();
  Console.WriteLine("SPPSRVCheckMovcoRecord ha tornato: " + rc.ToString());
  rc = SPPSRVAppendMovcoRecord();
  Console.WriteLine("SPPSRVAppendMovcoRecord 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());
  }
  }
 }
 

Bibliografia

Voci correlate

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