Esempio di personalizzazione campo quantità nei documenti

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 Come esempio relativo alla gestione documenti supponiamo, in fase di immissione di un documento, di voler calcolare i valori del peso e del numero dei colli di una riga in funzione del valore della quantità per confezione.
In immissione di una riga di un documento all'uscita dal campo relativo alla quantità per confezione viene richiamata la funzione SIGLAPPSaveobject e la personalizzazione dovrà reimplementare proprio questa funzione.

Personalizzazione con messaggi

Nel caso in esame il parametro theActionID della funzione SIGLAPPSaveobject ha valore 317 e l'oggetto DPObject è di tipo DPMOVMag:

theActionID theObject Note
317 DPMovMag Viene invocata in fase di immissione documenti all’uscita dal campo Quantità per confezione, dopo aver effettuato tutte le operazioni relative al suddetto campo. theObject è di tipo DPMovMag e i suoi dati membro sono attualizzati con tutti i dati della riga disponibili. Questa uscita consente l’inserimento o la sostituzione dei valori della riga.

Nell'esempio riportato il codice scritto all'interno della Dll modificherà il valore dei campi PESO e NUMERO COLLI di riga in seguito all'impostazione del campo quantità per confezione.

Dp-Preview256.png Per approfondire, vedi la voce Articoli a confezione.


Allo scopo di illustrare in modo più chiaro il funzionamento della personalizzazione sono stati inseriti una serie di messaggi che spiegano passo per passo le operazioni che vengono eseguite.

La figura seguente mostra il momento in cui la personalizzazione viene richiamata, ovvero in seguito all'immissione della quantità 10 nel relativo campo quantità per confezione. Apparirà il messaggio Inizio Personalizzazione.

Figura 1: Inizio personalizzazione


In seguito alla pressione del tasto OK vengono compiute le operazioni di calcolo dei valori che sostituiranno i dati scritti: il numero dei colli e il peso. Le due finestre successive mostrano le operazioni di calcolo e vengono riportati i messaggi indicativi.

Figura 2: Calcolo numero colli

Figura 3: Calcolo peso


I nuovi valori calcolati per il numero dei colli e per il peso sono quindi rispettivamente 2 e 12. Quelli calcolati da SIGLA® (come è possibile vedere nella figura 3) senza l'uso della personalizzazione sono 50 e 10.

Il passo seguente è la chiusura del programma personalizzato che ha terminato il suo lavoro (vedi figura successiva).

Figura 4: Fine personalizzazione


Premiamo il tasto OK e rientriamo nella finestra Righe1 dove è possibile vedere (figura 5) che i valori standard calcolati dall’applicativo sono stati sostituiti da quelli calcolati dalla nuova procedura.

Figura 5: Pagina Righe1


Il codice scritto in linguaggio C++ direttamente all'interno della libreria SIGPPDLL.DLL è il seguente:

 
 
 BOOL DLLCALL SIGLAPPSaveObject(DPObject *theObject,int theActionID)
 {
  char messaggio[61];
 
  switch(theActionID)
  {
  case 317:
  {
  DPMovMag *theMovMag= (DPMovMag *) theObject;
 
  strcpy(messaggio, "Inizio Personalizzazione");
  MessageBox(NULL,messaggio,"SIGPPDLL",MB_ICONEXCLAMATION|MB_OK|MB_APPLMODAL);
 
  MessageBox(NULL, "N. Pezzi 10 Pezzi per Confez. 5 Tot. Confez. 2",
  "SIGPPDLL",MB_ICONEXCLAMATION|MB_OK|MB_APPLMODAL);
 
  theMovMag->numcolli=2.;
  MessageBox(NULL, "Peso per Confez. 6 Kg N. Confez. 2 Tot. Peso Confez. 12 Kg",
  "SIGPPDLL",MB_ICONEXCLAMATION|MB_OK|MB_APPLMODAL);
  theMovMag->pesokg=12.;
 
  strcpy(messaggio, "Fine Personalizzazione");
  MessageBox(NULL,messaggio,"SIGPPDLL",MB_ICONEXCLAMATION|MB_OK|MB_APPLMODAL);;
 
  return(FALSE);
  }
  break;
  }
  return TRUE;
 }
 


Dp-editn72x72.png Per illustrare il funzionamento della personalizzazione sono stati visualizzati una serie di messaggi attraverso della MessageBox, ovviamente in un'ottica più realistica si può operare in modo trasparente all'utente senza la visualizzazione dei messaggi, cosicché i valori dei campi KG e N. Cl. variano automaticamente dopo l'impostazione del campo Q.C..

Personalizzazione con richiesta informazioni

Come secondo esempio si suppone di avere la necessità, in fase di immissione di un documento, di aggiungere alcune informazioni alla riga del documento non previste nello standard.
In questo caso all'utente sarà mostrata un'apposita finestra di dialogo per inserire i dati aggiuntivi. La personalizzazione dovrà gestire la nuova finestra di dialogo nonché la memorizzazione delle informazioni nella base dati.

La personalizzazione interviene quando viene impostato il campo quantità e pertanto sarà necessario reimplementare la funzione SIGLAPPSaveObject sfruttando la chiamata che ha 427 come valore del parametro theActionID.

theActionID theObject Note
427 DPMovMag In immissione documenti sul campo quantità, permette di leggere tutti i valori a video sui folder Righe1 e Righe2 e di modificarli nel caso si ritorni il valore FALSE.

Uscendo dal campo quantità infatti viene eseguito il codice della personalizzazione che comporta la visualizzazione della finestra aggiuntiva (come mostrato in figura 6) attraverso la quale si possono inserire i dati aggiuntivi della riga del documento.

Figura 6: Inserimento valori aggiuntivi


Figura 7: Inserimento dati e Conferma


Premendo il tasto Conferma la finestra di dialogo personalizzata si chiude e l'utente può tornare a completare la compilazione del documento.

Per questo esempio verrà utilizzata la libreria SPPFrame. L'intervento di personalizzazione richiede l'implementazione della funzione SPPFrameIntSaveObject presente della libreria SPPFOld.dll (la libreria che intercetta le chiamate alla SIGLAPPSaveObject che SIGLA® effettua al verificarsi di determinati eventi).


Dp-editn72x72.png La form utilizzata per l'immissione dei dati FormImmDoc1 è di tipo modale in modo da non permettere all'operatore di procedere prima di averla chiusa.


E' necessario implementare anche le funzioni SPPFrOldInit e SPPFrOldExit per le opportune inizializzazioni.

 
 
 function SPPFrOldInit(DPDispatcher: TDPDispatcher): boolean; export; stdcall;
 begin
  theDispatcher := DPDispatcher;
  // inizializzazioni
  FormImmDoc1 := nil;
 
  Result := True;
 end;
 
 //...
 
 function SPPFrOldExit: boolean; export; stdcall;
 begin
  // deinizializzazioni
  if (FormImmDoc1<>nil) then
  FormImmDoc1.Free;
 
  Result := true;
 end;
 


Nella funzione SPPFrameIntSaveObject si deve intercettare la chiamata eseguita da SIGLA® con theActionId pari a 427 e inserire il codice necessario alla visualizzazione della form personalizzata e alla memorizzazione delle informazioni nella base dati.

 
 
 function SPPFrameIntSaveObject(theObject: pointer;
  theActionId: LongInt): boolean; export; stdcall;
 var
  iRes: integer;
 begin
  Result := true;
  case theActionId of
  427: begin
  // inizializzazione oggetto
  if FormImmdoc1 = nil then
  FormImmDoc1 := TFormImmDoc1.Create(Application, theDispatcher);
 
  // visualizzazione form
  iRes := FormImmDoc1.ShowModal;
 
  if iRes = mrOk then begin
  // inserire il codice per la memorizzazione
  // delle informazioni nella base dati
  end;
  end;
  end;
 end;
 

I nuovi valori registrati nella base dati di SIGLA® potranno essere utilizzati in seguito, per esempio, a scopo statistico oppure visualizzati nella stampa del documento, ecc.

Bibliografia

Voci correlate

Articoli a confezione
Gestione documenti
La libreria SIGPPDLL
La libreria SPPFrame
La libreria SPPFrOld
SPPFrOldInit
SPPFrOldExit
SPPFrameIntSaveObject
SIGLAPPSaveObject