Gestione testata/dettaglio
Sage X3 permette di creare la gestione di un nuovo oggetto semplice praticamente con la sola parametrizzazione.
Ma se si ha la necessità di realizzare un oggetto con testata/dettaglio bisogna seguire una procedura ben precisa che richiede anche alcune modifiche al codice specifico.
Supponiamo di avere:
- tabella di testata: YTESTATA [YTE]
- chiavi della tabella YTESTATA (che saranno anche il legame con la tabella di dettaglio):
- YTECHIAVE1 alfanumerica
- YTECHIAVE2 numerica
- tabella di dettaglio: YDETTAGLIO [YDE]
- campi della tabella YDETTAGLIO che legano alla tabella di testata:
- YDECHIAVE1 alfanumerica
- YDECHIAVE2 numerica
- oggetto legato alla tabella YTESTATA: YTD
- videata di testata: YTE1
- videata delle righe di dettaglio: YDE1
Procediamo così:
Oggetto
Andare all’oggetto YTD (funzione GESAOB) legato alla tabella di testata YTESTATA.
Nel folder ambiente inserire la tabella di dettaglio YDETTAGLIO.
Tabella di dettaglio YDETTAGLIO
Nella tabella di dettaglio bisogna dichiarare i seguenti campi:
- <chiave di riga> di tipo L con dimensione 8
il nome va scelto a piacere, nel nostro esempio sarà YIDRIGA - NBLIG di tipo ABS
Videata di dettaglio YDE1
Nella videata delle righe dettaglio bisogna dichiarare i seguenti campi:
- UPDFLG di tipo C con dimensione 4, nascosto (flag di update usato dal sistema)
- CREFLG di tipo C con dimensione 4, nascosto (flag di creazione usato dal sistema)
- <chiave di riga> di tipo L con dimensione 8, nascosto (gli vengono attribuiti valori multipli di 1000 dal sistema)
deve corrispondere al campo dichiarato nella tabella di dettaglio: quindi nel nostro esempio sarà YIDRIGA - NBLIG: va messo nella colonna Parametro nel blocco Riquadro della videata YDE1 (videata delle righe di dettaglio)
- impostare come azioni del campo NBLIG:
- C DIVLINCONT (controllo inserimento riga)
- post_riga DIVLINNUM (attribuzione numero riga)
queste azioni hanno un parametro LIG (in comune) che deve essere valorizzato con <chiave di riga>, nel nostro esempio YIDRIGA(nolign-1)
Attenzione: in videata di dettaglio non vanno inseriti i campi chiave di testata perchè altrimenti non verranno valorizzati nel record.
Codice Specifico
Nel codice specifico SPEYXX riportare il codice seguente:
#################################################################### # Codice base per la gestione testata dettaglio #################################################################### $ACTION Case ACTION When "OUVRE" : Gosub OUVRE When "FILTRE" : Gosub FILTRE When "SETBOUT" : Gosub SETBOUT When "CREATION" : Gosub CREATION When "APRES_CRE" : Gosub APRES_CRE When "LIENS" : Gosub LIENS When "MODIF" : Gosub MODIF When "APRES_MOD" : Gosub APRES_MOD When "ANNULE" : Gosub ANNULE When "DEFLIG" : Gosub DEFLIG When "INICRE_LIG" : Gosub INI_LIG When "INIMOD_LIG" : Gosub INI_LIG When Default Endcase Return #################################################################### $OUVRE Gosub DECLARE From TABLEAUX Return #################################################################### $FILTRE Default File [YTE] #Abbreviazione tabella di Testata Return #################################################################### $SETBOUT If GREP = "" CHAINE+="A" Else Call VIREBOUT(CHAINE,"A") From GOBJET Endif Return #################################################################### $CREATION Gosub CREATION From TABLEAUX If GOK < 1 Return Endif Return #################################################################### $APRES_CRE # Ricarico degli indicatori UPDFLG e CREFLG Gosub LIENS From TABLEAUX Return #################################################################### $LIENS # Carico delle righe nella tabella Gosub LIENS From TABLEAUX #in questo punto tutti gli eventi LIENS_LIG sono stati elaborati Return #################################################################### $LIENS_LIG # evento al caricamento di ciascuna riga # eventuali chiamate su campi #Call AM_YCAMPO1([M:YDE1]YCAMPO1(nolign-1)) Return #################################################################### $MODIF Gosub MODIF From TABLEAUX If GOK < 1 Return Endif Return #################################################################### $APRES_MOD # Ricarico degli indicatori UPDFLG e CREFLG # Gosub LIENS From TABLEAUX Return ############################################################### $ANNULE Gosub ANNULE From TABLEAUX : # Cancellazione delle righe If GOK < 1 Return Endif Return ############################################################### $DEFLIG # Definizione dei vari elementi di dettaglio Default Mask [YDE1] # Abbreviazione della videata di dettaglio Default File [YDE] # Abbreviazione della tabella di dettaglio FICLIG = "YDETTAGLIO" # nome tabella di dettaglio ABLIG = "YDE" # abbreviazione nome tabella di dettaglio ZONLIG = "YIDRIGA" # nome campo numero di riga (chiave) # la variabile CRIT deve contenere il criterio per legare la tabella di dettaglio alla tabella di testata # in questa forma (attenzione agli apici, con i numeri non servono): # nome campo tabella dettaglio = [M:videata testata]nome campo testata # se il campo è alfanumerico, vanno usati gli apici, nel nostro caso così: # "YDECHIAVE1 = '"+[M:YTE1]YTECHIAVE1+"'" # se il campo è numerico va senza singoli apici (usando num$()), nel nostro caso: # "YDECHIAVE2 = "+num$([M:YTE1]YTECHIAVE2) # se ci fossero date: "' & YDATA1 = ["+num$([M:YTE1]YTEDATA1)+"] & YDATA2 = ["+[M:YTE1]YTEDATA2+"]" CRIT = "YDECHIAVE1 = '"+[M:YTE1]YTECHIAVE1+"' & YDECHIAVE2 = "+num$([M:YTE1]YTECHIAVE2) Return #################################################################### $INI_LIG # Valorizzazione testata: vengono copiati i valori di testata sui campi di dettaglio # YDE tabella di dettaglio, YTE tabella di testata # attenzione: qui si opera sulle tabelle: [F] non [M] [F:YDE]YDECHIAVE1 = [F:YTE]YTECHIAVE1 [F:YDE]YDECHIAVE2 = [F:YTE]YTECHIAVE2 Return ####################################################################
Ricordo che in una finestra di testata/dettaglio non è possibile utilizzare un campo di testata come filtro dei record.
Bene, riportato e compilato questo tutto è già funzionante;
non scordatevi ovviamente di validare tabelle, videate e finestra!