Testata/Dettaglio

From SageDev KB
Jump to navigation Jump to search


In una videata di testa/Dettaglio non è possibile utilizzare un campo in testata come filtro dei record

Per la fase di importazione/esportazione vedere la voce apposita in import/export

Esempio di codice (utilizzato per esempio per le certificazioni prodotto)


# CAMPI DA DICHIARARE NELLA VIDEATA DI DETTAGLIO
# UPDFLG             C    4   (nascosto)
# CREFLG             C    4   (nascosto)
# <chiave di riga>   L    8   (nascosto; vengono attribuiti valori multipli di 1000;
#                              deve essere presente anche nella TABELLA di dettaglio)
# per esempio
# YIDRIGA            L    8   
# 
# In videata di dettaglio non vanno inseriti i campi chiave di testata perchè altrimenti non vengono valorizzati nel record
#
# CAMPO NBLIG: 
# - da inserire nella tabella di dettaglio (tipo ABS, Inserito)
# - da mettere nella colonna Parametro nel blocco Riquadro della videata usato per i dettagli
# - 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> (YIDRIGA)
#
# Definire nell'oggetto legato alla tabella di testata, nel folder ambiente, la tabella di dettaglio
#
# NB: nelle codice delle azioni campo usare (nolign-1) come indice (per es. [M:YCC1]YSEQMAR(nolign-1)=VALEUR )
# se si fa transclass invece il nolign è valido senza fare -1 (vedi nolign)
####################################################################
#
####################################################################
$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 [YPH] #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_YSEQMAR([M:YCC1]YSEQMAR(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 del file di dettaglio #
#-----------------------------------#
# Criterio di lettura      (CRIT)   #
# Nome del file          (FICLIG)   #
# Abbreviazione del file  (ABLIG)   #
# Campo numero riga       (ZONLIG)  #
#-----------------------------------#
Default Mask [YCC1]  # Abbrevv. videata di dettaglio
Default File [YCD]   # Abbrevv. tabella di dettaglio

# criterio per legare la tabella di dettaglio alla tabella di testata (nome campo tabella dettaglio = [M]nome campo testata 
# se il campo è numerico va senza singoli apici (usando num$())
# per date? ... "' & YDATAI = ["+num$([M:YPR0]YDATAI)+"] & YDATAF = ["+[M:YPR0]YDATAI+"]"    
CRIT   = "YFAMCER = '"+[M:YCC0]YFAMCER+"' & YPASSOVIE = '"+[M:YCC0]YPASSOVIE+"' & YNROMOL = "+num$([M:YCC0]YNROMOL)      
FICLIG = "YCERTPRODD"   # nome tabella di dettaglio
ABLIG  = "YCD"          # abbreviazione nome tabella di dettaglio
ZONLIG = "YIDRIGA"      # nome campo chiave di riga che gestisce la linea nel dettaglio
Return

####################################################################
$INI_LIG
    # -- Valorizzazione testata
    #commento: vengono copiati i valori di testata sui campi di dettaglio
    # YCD file dettaglio, YCC file testata
    [F:YCD]YFAMCER   = [F:YCC]YFAMCER
    [F:YCD]YPASSOVIE = [F:YCC]YPASSOVIE 
    [F:YCD]YNROMOL   = [F:YCC]YNROMOL 
Return
######################################################################################
## Etichetta aggiunta dal supervisore (videata YPR1) 05/11/2013 15:46:55 (ADMIN)
######################################################################################
# L'articolo deve essere inserito nel listino di riferimento
Subprog C_ITMREF(VALEUR)
Variable Char    VALEUR()
Local Integer YERR

Call YCHK_ART(VALEUR,[M:YPR0]X_NAT,[M:YPR0]YDATAI,[M:YPR0]YDATAF,YERR)
Case YERR
  When 0
    mkstat = 2
    GMESSAGE = "Articolo non trovato in listino per i dati impostati in testata: articolo non inseribile"
  When 2
    mkstat = 2
    GMESSAGE = "Più righe listino trovate per i dati impostati in testata: verificare listini"
Endcase

End
######################################################################################
Subprog YCHK_ART(YART, YLIS, YDATA1, YDATA2, YERR)
Value Char YART, YLIS
Value Date YDATA1, YDATA2
Variable Integer YERR
    Local File SPRICLIST [F:YSPL]
    Filter [F:YSPL] Where PLICRI1 = YART and PLICRI2 = YLIS and PLISTRDAT <= YDATA1 and PLIENDDAT >= YDATA2
    YERR = rowcount([F:YSPL])    # deve esserci solo una riga per questo filtro, altrimenti è una anomalia
    Filter [F:YSPL]
End
######################################################################################