Bonjour , avez-vous déjà rencontré cette limite dans Eclipse ou dans la fenêtre Traitement de X3 qui empêche de compiler des traitements trop longs ?
Il y a t il un variable système permettant de passer outre cette restriction ?
D'avance merci
AM
Bonjour , avez-vous déjà rencontré cette limite dans Eclipse ou dans la fenêtre Traitement de X3 qui empêche de compiler des traitements trop longs ?
Il y a t il un variable système permettant de passer outre cette restriction ?
D'avance merci
AM
Bonjour,
Oui, sur un grand traitement on peut avoir une erreur, qui oblige à le découper, un peu comme c'est le cas avec les traitements standards SUBSOH, les actions de l'étiquette $ACTION sont traités dans SUBSOHA, SUBSOHA1, SUBSOHC
La limite a été revue à la hausse avec les derniers runtime v12 (arrivés en 12.0.20)
Nicolas
Bonjour Alban,
De mémoire, avant la mise à jour runtime RT 92 la limite était de 3000 lignes.
Aujourd'hui je ne connais pas la limite mais j'ai des traitements de 20000 lignes qui compilent bel et bien (la compilation est plus lente mais cela fonctionne bien).
Si quelqu'un à le chiffre ou la contrainte autre en place, cela peut être intéressant ?
Cordialement,
Laurent
Bonjour ,
merci pour votre réponse , je suis étonné que vous soyez arrivé à dépasser le cap des 6500 lignes , nous on découpe nos programmes pour passer outre cette restriction.
Il doit bien y avoir un paramètre pour augmenter la taille du buffer.
Laissons ce post ouvert en espérant que nous ayons une réponse.
bonne journée
Bonjour Alban,
Je ne peux vous fournir mon traitement afin de tester mais j'ai compilé des sources SUBSOH dans un seul traitement de 19305 lignes qui compile et s’exécute sur un moteur 93.3.45 avec Eclipse et plugin en dernière version.
Ci-dessous le traitement de test :
#<AdxTL>@(#)0.0.0.0 $Revision$ Infbox func TEST20000("Mon paramètre") End ######################################################################### # Contient les traitements des actions appelés par l'objet SUBSOH # # Etiquettes # ######################################################################### # Issue 112736 - 20160119 by LD : import de commande issue d'un devis # Issue 113857 - 20160128 by LD : Désallocation commande contremarque signée # Issue 121688 - 20170315 by LD : Authorized credit level reached mess when duplicate SOF: KO # Issue X3-38651 - 20170526 by LD : SOF Project link initialized with the SO header value # Issue X3-59732 - 20171227 by LD : Use of [M] in cide rather than exact mask causes problem when custom screen is last to be used [131017-2D1F3] # Issue X3-128239 - 20190214 by LD : Error Variable Non-existent WALLTXT # Issue X3-160406 - 2019-10-11 by SR : In all cases, Bill to Customer must be active # Issue X3-243690 - 2021-05-17 by MRDAB - new Prepayment invoice/contract fields on GESSOH # Issue X3-244837 - 2021-05-24 by MRDAB - feed the new Prepayment invoice/contract fields # Issue X3-243729 - 2021-05-31 SDEM --> deletion SO lines contracts with status create # Issue X3-246053 - 2021-08-06 by MRDAB - control header fields vs GESPREPI and update GESPREPI ######################################################################### $RECOVERED_AUPDTICK # FGR 07/07/2015 : X3SUIVI109276 Read [SOH]= If dim([L]AUPDTICK) > 0 and dim([F]updTick) > 0 Then [L]AUPDTICK = [F:SOH]updTick Endif Gosub KILL_RECOVERED_AUPDTICK Return ######################################################################### $FORCE_RECOVERED_AUPDTICK # FGR 07/07/2015 : X3SUIVI109276 If dim(GSOHFRCAUPDTICK) < 0 Then Global Integer GSOHFRCAUPDTICK Endif Return ######################################################################### $KILL_RECOVERED_AUPDTICK # FGR 07/07/2015 : X3SUIVI109276 If dim(GSOHFRCAUPDTICK) >= 0 Then Kill GSOHFRCAUPDTICK Endif Return ######################################################################### $AV_IMPRIME #---------------------------------------------------------------# # avant impression alimentation du no document # #---------------------------------------------------------------# If [M:SOH0]DOCNAM<>"" [L]AREPORT=[M:SOH0]DOCNAM Elsif WSLTDOCNAM<>"" [L]AREPORT=WSLTDOCNAM Endif Return ######################################################################### $AP_IMPRIME #---------------------------------------------------------------# # apres une impression il faut etre sur d'etre sur le bon enreg # #---------------------------------------------------------------# Gosub RELIT From GOBJSUB #MAE, le 23/01/08, bg45433 Raz [L]AREPORT Return #- X3Suivi 69847 Génération commande depuis devis --# ######################################################################### $AFFMASK Local Integer I, J, OK, WRETOUR # Pas de saisie no commande si on vient des devis If find(GFONC1,"GESSQH") : Diszo [SOH0]SOHNUM : Endif If GCREPARBOU = 1 If GFONC1="GESSQH" Gosub GEN_COM From SUBSOHB Raz GCREPARBOU CLE1 = [F:SOH]SOHNUM Endif Endif Return ######################################################################### # FGR 07/07/2015 : X3SUIVI109276 : déplacé dans SUBSOHA1 #$OUVRE ##-----------------------------------# ## Sauvegarde des variables globales # ##-----------------------------------# #Gosub SAUV_GLOB From TRTX3GLOB # #Global Char GNUM(GLONVCR) #Global Shortint GREV : # 0 = la question n'a pas été posée # # 1 = sans avenant / 2 = avec avenant #Global Shortint GINVTYP : # 1 = facture / 2 = avoir / 5 = proforma #Global Char GTARFLG(1) : # Flag recalcul des tarifs #Global Integer GCDTUNL : # Flag déblocage crédit autorise #Global Integer GDACLOK : # Flag ctrl qté, prix, marge, montant mini #Global Integer GPRIMOD : # Flag modif des prix/remises #Global Char GLOCCAT(4) : # Pour filtrer les catégories d'emplacements #Global Integer GSOHSUPPLIGDSP : #--CPO 79343 Afin d'afficher un message si suppr ligne et doc ori avec elts fact ## Filtre catégorie emplacement pour le contrôle et la sélection emplacement #GLOCCAT="12" # #Raz GWIP, GLOCSEL # #Local Char YSQHNUM(GLONVCR) #Local Integer WPICK #Local Char CODE (3) #Local Integer RETOUR, TYP12 #Local Shortint IBOX #Local Shortint MODPTE : # Flag modification de la condition de paiement #Local Decimal WQUOATI, WQUONOT : # En devis #Local Shortint MODBPCINV : #--CPO 82311 Flag modification du client facture #Local Shortint MODBPCPYR : #--CPO 82311 Flag modification du tiers payeur # #If !clalev([F:SID]) : Local File SINVOICED [SID] : Endif # FGR 27/04/2009 : X3SUIVI54600 #If clalev([F:DUD])=0 : Local File GACCDUDATE [DUD] : Endif :#--CPO 82311 # #GVENCFG=2 # #If GMODU(7)=2 GLOCSEL = "[F:STC]LOCCAT<>3&[F:STC]LOCCAT<>4" Endif #Raz GREV # #If !clalev([F:TCA]) Local File TABCOUAFF [TCA] Endif # #If !clalev([F:GCM]) Local File GACM [GCM] Endif # #If !clalev([F:ACV]) Local File ACTIV [ACV] Endif ##Global Integer GACTMUL : GACTMUL=1 : # Globale multisociété : 1(non) / 2(oui) ##Read [ACV] CODACT="MUL" : If fstat Raz [F:ACV] : Endif ##If [F:ACV]FLACT=2 GACTMUL=2 Endif #Local Char WPARAM(10) ##--------------------------------------------------------------# ## Chargement param.utilisateur déblocage crédit autorisé # ##--------------------------------------------------------------# #Call PARAMUTIL("SCDTUNL",WPARAM,"","") From SUBAUS #GCDTUNL=val(WPARAM) #If GCDTUNL=0 GCDTUNL=1 Endif ##--------------------------------------------------------------# ## Chargement param.utilisateur ctrl qte,prix,marge,montant mini# ##--------------------------------------------------------------# #Call PARAMUTIL("SDACLOK",WPARAM,"","") From SUBAUS #GDACLOK=val(WPARAM) #If GDACLOK=0 GDACLOK=1 Endif ##------------------------------------------------------------# ## Chargement param.utilisateur modif des prix/remises # ##------------------------------------------------------------# #Call PARAMUTIL("SPRIMOD",WPARAM,"","") From SUBAUS #GPRIMOD=val(WPARAM) #If GPRIMOD=0 GPRIMOD=1 Endif ##------------------------------------------------------------# ## Chargements liés aux tarifs # ##------------------------------------------------------------# ## Contrôle existence de la structure tarif par défaut # ## Chargement des variables globales pour la recherche tarif # ## Récupération de la structure des frais/remises # ## Récupération des types de frais/remises # ## des no éléments facturation # ##------------------------------------------------------------# #GORITITCOL=1 ##If GACTMUL=2 #GPLISTC="néant" :# Pour forcer l'affichage des entêtes de colonne si structure="" ##Endif #Call CTLSTRUCT (1,RETOUR) From TRTPRICE #If RETOUR <>0: OK=0: Return :Endif #Call TARIFCHGT(5) From TRTPRICE #Call COLREM("C",1,"") From TRTPRICE #Call TYPREM(1,"") From TRTPRICE ##------------------------------------------------------------# # #Global Char GFOCITMREF #Global Decimal GFOCQTY #Global Char GFOCUOM, GPNTITMREF #Global Shortint GFOCMOTIF #Global Shortint GFOCFLG, GFOCPRIFLG # #If dim(GWEBSERV)=1 & GWEBSERV=1 # Read [ACV] CODACT="SOH" : If fstat Raz [F:ACV] : Endif # Global Char GWEBFOCITMREF(GLONITM)(0..([F:ACV]DIME-1)) # Global Decimal GWEBFOCQTY (0..[F:ACV]DIME-1) # Global Char GWEBFOCUOM(GLONUOM) (0..[F:ACV]DIME-1) # Global Shortint GWEBFOCMOTIF (0..[F:ACV]DIME-1) # Global Shortint GWEBNBGRA : Raz GWEBNBGRA # # Bug 57682 # # If !clalev([M:ACL]) Local Mask ACLOB [ACL] : Endif # If !clalev([M:ACL1]) Local Mask ACLOB [ACL1] : Endif # If !clalev([M:ACL2]) Local Mask ACLOB [ACL2] : Endif # # If clalev([F:TXC])=0 : Local File TEXCLOB [TXC] : Endif # #----- # If dim([L]WRET)<1 Local Integer WRET : Endif # # #----- Gestion des adresses # Local Integer SAVGACTSAD : SAVGACTSAD=GACTSAD : GACTSAD=2 # If clalev([F:TCY])=0 : Local File TABCOUNTRY [TCY] : Endif # # Bug 57682 #Endif # #If GIMPORT Gosub SETTRANS_DEF From SUBSOHA1 Endif # #Raz GSOC_ACTIVE #GFCY = GFCYDEF (5) ## Ctrl site par défaut par rapport au critère, si aucun site par défaut, charge le 1er site correspondant au critere #Call GETFCYDEF(GFCY,"[F:FCY]SALFLG=2") From TRTX3 ## Chargement globales référenciels, comptes et sections de la société #Gosub CHARG_PARAM : If GERR=1 OK=0 : Return Endif ## --- Déclaration des fenetres d'adresses ------------- # ## Bug 70949 #If clalev([M:ADB1])=0 # Local Mask ADRBPC [ADB1] : # Déclaration de l'écran d'adresse ADB1 #Else # If !clalev([M:ADBV]) # Local Mask ADRBPC [ADBV] : [M:ADBV]=[M:ADB1] : # Sauvegarde de l'écran d'adresse ADB1 à cause de la navigation # Endif #Endif #If clalev([M:ADB2])=0 # Local Mask ADRBPC [ADB2] : # Déclaration de l'écran d'adresse ADB1 #Else # If !clalev([M:ADBW]) # Local Mask ADRBPC [ADBW] : [M:ADBW]=[M:ADB2] : # Sauvegarde de l'adresse ADB2 à cause de la navigation # Endif #Endif #If clalev([M:ADB3])=0 # Local Mask ADRBPC [ADB3] : # Déclaration de l'écran d'adresse ADB1 #Else # If !clalev([M:ADBX]) # Local Mask ADRBPC [ADBX] : [M:ADBX]=[M:ADB3] : # Sauvegarde de l'adresse ADB2 à cause de la navigation # Endif #Endif ## Bug 70949 # #Raz [M:ADB1], [M:ADB2], [M:ADB3] ## --- Déclaration classe ecran pour les allocations --- # #If clalev([M:STOK])=0 Local Mask STOK [STOK] Endif #Raz [M:STOK] ## --- Déclaration classe ecran pour les allocations --- # #If clalev([M:ALP])=0 Local Mask ALLPAR [ALP] Endif #Raz [M:ALP] ## --- Déclaration classe ecran pour les encours --- # #If clalev([M:ORDK])=0 Local Mask ORDK [ORDK] Endif #Raz [M:ORDK] # ## --- Déclaration classe ecran pour le configurateur --- # #Gosub OPEN_CFG From CFGLIB # ##---------------------------- ## V6 Affectations #Gosub OPEN_MTO From MTOLINKLIB # #If GMODU(6)=2 # If clalev([F:POQ])=0 : Local File PORDERQ [POQ] : Endif ## If GOPTCANA>0 # If GNBDIE>0 # # A cause de l'INISEC "SOH" et "SOP" qui peut être paramétré avec [F:POH] et [F:POP] # If clalev([F:POH])=0 : Local File PORDER [POH] : Endif # If clalev([F:POP])=0 : Local File PORDERP [POP] : Endif # Endif #Endif ## --- Ouverture + reservations pour repartition elts facturation a la ligne ---- #Gosub OUV_DSPLIN From TRTVENFACC # ## -- ACA -- Ouverture du tableau de stockage des éléments facture #Local Char SFIT_OBJ : SFIT_OBJ="SOH" #Gosub INIT_SFIT From SUBSFIT # ## Detail local tax data #Gosub OUVRE_LTA From TRTTAXSST # 106867.n ## Gosub OUVRE_LTA From TRTTAXUSA # 106867.o # #Gosub DECLARE From TABLEAUX # #Return # ------------------------------------------------------------------------------------------------------------ # # Suppression des boutons # # ------------------------------------------------------------------------------------------------------------ # # H : Changement de code # # A : Supprimer : Si cde préparée, livrée, facturée # # 1 : Allocation : Si aucune cde ou si cde alloc. auto ou si cde soldée # # ou si cde non signée et pas d'encours ou pas d'alloc des cdes non signées # # ou si tout est préparé et/ou livré # # Si aucune ligne gérée en stock # # 2 : Livraison : Si aucune cde ou cde à facturation directe ou si cde soldée # # ou si cde non signée # # 3 : Facture : Si aucune cde ou non cde à facturation directe ou si cde soldée # # ou si cde non signée # # 4 : Proforma : Si aucune cde, si cde partiel.liv ou fac, si cde non signée # # Si cde inter-site, si cde prêt ou si déjà proforma # # 5 : Solde : Si aucune cde, si cde soldée, ou solde non autorisé # # Si cde préparée # # Si cde inter-site générée par le module achat # # 6 : Préparation: Si aucune cde ou cde à facturation directe ou si cde soldée # # ou si plus rien à préparer, si cde non signée # # ------------------------------------------------------------------------------------------------------------ # #$SETBOUT #Local Integer I #Local Decimal WPREQTY # #WPREQTY=sum([M:SOH4]LPRQTY,[M:SOH4]OPRQTY,[M:SOH4]PREQTY) ## 100013 : Une ligne sur liste de prépa peut être allouée mais pas préparée ##Local Integer WALL_PRE_STA : # Bug 76907 #Local Integer WALL_STA #Local Integer WPRE_STA ## 100013 #Local Integer WLIV_STA : # 107888 : Scheduled invoices : (LD:01/06/16) #Gosub SETB_VERIF_QTY : # Bug 76907 # # Si l'on vient d'ailleurs suppression du bouton créér et des accès aux autres enr. #MAE, on ne supprim epas l'accés au bouton créer si on vient des clients #If GFONC1 <> "GESSOH" # If GPILNAV>1 # If !find(GNAVIG(GPILNAV-1),"GESBPC") # Call VIREBOUT(CHAINE,"RCDH<>S09") From GOBJET # Endif # Else # Call VIREBOUT(CHAINE,"RCDH<>S09") From GOBJET # Endif #Endif ##--CPO fin # ## Pas de bouton "Livraison","Facture","Proforma" et "Préparation" ## si l'on vient par tunnel des livraisons ou factures #If find(GFONC1,"GESSDH","GESSIH") # Call VIREBOUT(CHAINE,"2346") From GOBJET #Endif ## Bug 39742 : Si mode consultation, il faut désactiver les boutons #If GCONSULT # Call VIREBOUT(CHAINE,"123456") From GOBJET #Endif #Call VIREBOUT(CHAINE,"H") From GOBJET #If !CLECUR | [M]DLVSTA <> 1 | [M]INVSTA <> 1 | WPREQTY<>0 # Call VIREBOUT(CHAINE,"A") From GOBJET #Endif #If GREP <> "" | CLECUR = 0 | [M:SOH1]ORDSTA = 2 | ([M:SOH1]APPFLG<3 & (GSOHAPPORD=1 | GSOHAPPALL=1)) | #& sum([M:SOH4]STOMGTCOD) = [M:SOH4]NBLIG | #& WALL_STA = 0 : # 100013 : Une ligne sur liste de prépa peut âtre allouée mais pas préparée ##& WALL_PRE_STA = 0 : # 100013 ##& sum([M:SOH4]LPRQTY,[M:SOH4]OPRQTY,[M:SOH4]PREQTY,[M:SOH4]ODLQTY,[M:SOH4]DLVQTY)>=sum([M:SOH4]QTY) : # Bug 76907 # Call VIREBOUT(CHAINE,"1") From GOBJET #Endif #If GREP <> "" | [M:SOH0]SOHCAT = 3 | CLECUR = 0 | [M:SOH1]ORDSTA = 2 | [M:SOH1]APPFLG<3 # Call VIREBOUT(CHAINE,"2") From GOBJET #Endif #If GREP <> "" | [M:SOH0]SOHCAT <> 3 | CLECUR = 0 | [M:SOH1]ORDSTA = 2 | [M:SOH1]APPFLG<3 # Call VIREBOUT(CHAINE,"3") From GOBJET #Endif #If GREP <> "" | CLECUR = 0 | [M:SOH1]DLVSTA > 1 | [M:SOH1]INVSTA > 1 | [M:SOH1]APPFLG<3 | #& ([M:SOH1]BETFCY=2 & [M:SOH1]BETCPY<=1) | [M:SOH0]SOHCAT = 2 | [M:SOH3]PRFNUM <> "" # Call VIREBOUT(CHAINE,"4") From GOBJET #Endif #If GREP<>"" | CLECUR=0 | [M:SOH1]ORDSTA=2 | [M:SOH2]ORDCLE=1 | WPREQTY<>0 | #& ([M:SOH0]ORIFCY<>"" & [M:SOH0]ORIFCY<>[M:SOH0]SALFCY) # Call VIREBOUT(CHAINE,"5") From GOBJET #Endif #If GREP <> "" | [M:SOH0]SOHCAT = 3 | CLECUR = 0 | [M:SOH1]ORDSTA = 2 | [M:SOH1]APPFLG<3 | #& WPRE_STA = 0 : # 100013 : Une ligne sur liste de prépa peut âtre allouée mais pas préparée ##& WALL_PRE_STA = 0 : # 100013 ##& sum([M:SOH4]LPRQTY,[M:SOH4]OPRQTY,[M:SOH4]PREQTY,[M:SOH4]ODLQTY,[M:SOH4]DLVQTY)>=sum([M:SOH4]QTY) : # Bug 76907 # Call VIREBOUT(CHAINE,"6") From GOBJET #Endif ## -------------------------------------------------------------------------------------- # ## Activation/Désactivation des menus # ## -------------------------------------------------------------------------------------- # ## E,F : Texte : Actif si commande en ligne ou création ou duplication # ## H,J,K : Adresse : Actif si commande en ligne ou création ou duplication # ## U : Info douanières : Actif si devis en ligne # ## L,M : Contremarque : Désactivé si aucune cde ou cde soldée # ## R : Acomptes : Actif si commande en ligne et rien en cours # ## T : Situation commande : Actif si commande en ligne et rien en cours # ## W : Transaction # ## V : Bouton bidon en C/S, permettant de valoriser une cde sur le site e_commerce # ## N : Traçabilité pièces SEGAY 05/12/2008 # ## O : Sage Sales Tax RBU 26/04/2012 # ## -------------------------------------------------------------------------------------- # #If GREP="C" | GREP="D" | CLECUR # CHMEN += "EF" # CHMEN += "HJK" #Endif #If CLECUR CHMEN += "UP" Endif #If CLECUR & GREP="" & [M:SOH1]ORDSTA <> 2 # For I=0 To [M]NBLIG-1 ## If find([M]FMI(I),2,3) & [M]FMINUM(I) = "" : # Bug 82706 # If find([M]FMI(I),2,3) & [M]FMINUM(I) = "" & GFONC1 <> "GESPOH" : # Bug 82706 # If !instr(0,CHMEN,"L") CHMEN += "L" Endif # Endif # If ([M]FMI(I) = 5) & [M]FMINUM(I) = "" # If !instr(0,CHMEN,"M") CHMEN += "M" Endif # Endif # Next #Endif #If CLECUR & GREP = "" # CHMEN += "RT" #Endif #CHMEN += "0" # FGR 31/07/2014 : X3SUIVI101684 "W" devient "0" #If func AFNC.ACTIV("LTA") & GLOCUSATAX : CHMEN += "O" : Endif #If dim(GWEBSERV)=1 & GWEBSERV=1 CHMEN += "V" : Endif #If !find(GREP,"C","D") and !find("CONSPIV",GNAVIG(1..GPILNAV)) Then CHMEN += "N" Endif # SEGAY 05/12/2008 : branchement traçabilité pièces # ## 78411 Sage Exchange #If CLECUR & GREP="" & func AFNC.ACTIV("SEPP") & func SEPPLIB.SEPP_DOC([M:SOH3]PTE) & [M:SOH1]CDTSTA<>4 # #If the payment method has Sage Exchange turned on - enable the menu # If !instr(0,CHMEN,"S") : CHMEN += "S" : Endif #Endif # #Gosub SET_BOUT_SPE From GSAISIE # #Return # 76907 ############################################################################################## # Suppression des boutons # # Vérification des qtés préparées/livrées pour suppression boutons allocation/préparation # ############################################################################################## $SETB_VERIF_QTY Local Integer WI # 100013 : Une ligne sur liste de prépa peut âtre allouée mais pas préparée #WALL_PRE_STA=0 : # Par défaut, les boutons Allocation/Préparation sont inactifs WALL_STA=0 : # Par défaut, le bouton Allocation est inactif WPRE_STA=0 : # Par défaut, le bouton Préparation est inactif # 100013 # 107888 : Scheduled invoices : (LD:01/06/16) WLIV_STA=0 : # Par défaut, le bouton Livraison est inactif # 107888 : Scheduled invoices : (LD:01/06/16) For WI=0 To [M]NBLIG-1 #If [M:SOH4]STOMGTCOD(WI)>1 & [M:SOH4]SOQSTA(WI)<>3 # 107888 : Scheduled invoices : (LD:19/05/16) # Seules les lignes livrables peuvent être allouées/préparées #If [M:SOH4]SOQSTA(WI)<>3 If [M:SOH4]SOQSTA(WI)<>3 & [M:SOH4]DLVFLG(WI)=2 # 107888 : Scheduled invoices : (LD:19/05/16) # 100013 : Une ligne sur liste de prépa peut âtre allouée mais pas préparée # # Dès qu'on trouve une ligne qui est encore à allouer ou à préparer, on active les boutons # If sum([M:SOH4]LPRQTY(WI),[M:SOH4]OPRQTY(WI),[M:SOH4]PREQTY(WI),[M:SOH4]ODLQTY(WI),[M:SOH4]DLVQTY(WI))<[M:SOH4]QTY(WI) # WALL_PRE_STA=1 : Break # Endif # Dès qu'on trouve une ligne qui est encore à allouer, on active le bouton If sum([M:SOH4]OPRQTY(WI),[M:SOH4]PREQTY(WI),[M:SOH4]ODLQTY(WI),[M:SOH4]DLVQTY(WI))<[M:SOH4]QTY(WI) WALL_STA=1 Endif # Dès qu'on trouve une ligne qui est encore à préparée, on active le bouton If sum([M:SOH4]LPRQTY(WI),[M:SOH4]OPRQTY(WI),[M:SOH4]PREQTY(WI),[M:SOH4]ODLQTY(WI),[M:SOH4]DLVQTY(WI))<[M:SOH4]QTY(WI) WPRE_STA=1 Endif # 107888 : Scheduled invoices : (LD:01/06/16) # Dès qu'on trouve une ligne qui est encore à livrer, on active le bouton If sum([M:SOH4]ODLQTY(WI),[M:SOH4]DLVQTY(WI))<[M:SOH4]QTY(WI) WLIV_STA=1 Endif #If WALL_STA=1 & WPRE_STA=1 Break Endif If WALL_STA=1 & WPRE_STA=1 & WLIV_STA=1 Break Endif # 107888 : Scheduled invoices : (LD:01/06/16) # 100013 Endif Next Return # 76907 ########################################################################################### # Avant l'execution des boutons et des menus # ########################################################################################### $AVANTBOUT Local Char WFONC1(30), SYMBOLE2(50) #fq66051-gbn Local Integer SAV_GCONSULT : SAV_GCONSULT=GCONSULT Local Integer SAV_GCONSDIA : SAV_GCONSDIA=GCONSDIA GERR=0 # Pour etre sur qu'il soit bien chargé GFCY=[M]SALFCY # Visu des textes si commande soldée # Visu des textes si aucun droit de modif : (Bug 39742) #If [M:SOH1]ORDSTA=2 | !ACTMOD GCONSDIA=1 Endif : # Bug 42904 If [M:SOH1]ORDSTA=2 | (find(GREP,"C","D") & !ACTCRE) | (GREP="M" & !ACTMOD) GCONSDIA=2 Endif : # Bug 42904 # FGR 19/05/2015 : X3SUIVI106158 (début) If find(BOUT, "E", "F", "H", "J", "K") Then If [M:SOH0]BPCORD = "" Then GERR = 1 GMESSAGE = mess(427,192,1) Return Endif Endif # FGR 19/05/2015 : X3SUIVI106158 (fin) Case BOUT When "E" : : # Texte entete ARC If [M]SOHNUM = "" & GREP <> "C" & GREP <> "D" # GMESSAGE est à blc, il faut positionner ERR GERR = 1 : GMESSAGE= "" : Return Endif When "F" : : # Texte pied ARC If [M]SOHNUM = "" & GREP <> "C" & GREP <> "D" # GMESSAGE est à blc, il faut positionner ERR GERR = 1 : GMESSAGE= "" : Return Endif When "H" : [M]CNTNAM=[M:ADB1]CNTNAM : # Adresse commande When "J" : [M]CNTNAM=[M:ADB3]CNTNAM : # Adresse facture # If dim([M]EECNUM)>0 # [M]EECNUM=[M:ADB3]EECNUM # Endif When "K" : [M]CNTNAM=[M:ADB2]CNTNAM : # Adresse livraison When "L" : Local Char WFCY : # Contremarque achat Local Integer WRET WFCY=GFCY When "M" : Local Char WFCY : # Contremarque production Local Integer WRET WFCY=GFCY Gosub AVTBOUT_FMI When "1" : # Allocation # Ctrl autorisation GBIDC2="A": Gosub AUTORIS_OPT From CONTX3 If !GBIDI2 GERR = 1 : GMESSAGE = mess(2,104,1) : Return : Endif Gosub RELIT From GOBJSUB : # Bug 66081 Gosub VERROU_SOH When "2" : # Livraison # Ctrl autorisation Local Shortint SVADXMXL # FGR 24/04/2015 : X3SUIVI102508 SVADXMXL = adxmxl # FGR 24/04/2015 : X3SUIVI102508 : on planque adxmxl avant d'aller dans les livraisons GCREPARBOU = 2 GBIDC2="L": Gosub AUTORIS_OPT From CONTX3 If !GBIDI2 GERR = 1 : GMESSAGE = mess(2,104,1) : Return : Endif WFONC1=GFONC1 : GFONC1="GESSOH" Gosub AVTBOUT_LIV If GERR <> 1 Gosub VERROU_SOH If GERR <> 1 GCREPARBOU = 1 : Close Local File [TSO] : Endif Endif When "3" : # Facture # Ctrl autorisation GCREPARBOU = 2 GBIDC2="F": Gosub AUTORIS_OPT From CONTX3 If !GBIDI2 GERR = 1 : GMESSAGE = mess(2,104,1) : Return : Endif GINVTYP = 1 : WFONC1=GFONC1 : GFONC1="GESSOH" Gosub AVTBOUT_FAC If GERR <> 1 Gosub VERROU_SOH If GERR <> 1 GCREPARBOU = 1 : Endif Endif # Issue X3-237574 - 2021-04-22 by SR : To know that we are coming from "Invoice" button for scheduled invoices If [M:SOH0]SOHCAT =1 : Global Integer G111783C : G111783C = 2 : Endif # End issue X3-237574 When "4" : # Proforma # Ctrl autorisation GCREPARBOU = 2 GBIDC2="P": Gosub AUTORIS_OPT From CONTX3 If !GBIDI2 GERR = 1 : GMESSAGE = mess(2,104,1) : Return : Endif # Ctrl devise "in" Local Char WDEVISE : Local Date WDAT : Local Integer WOK WDEVISE=[M:SOH0]CUR:WDAT=[M:SOH0]ORDDAT Gosub CTLDEVISEIN From CONTX3 Case WOK When 1 : # Attention saisie en devise "in" OK=2 : Call AVERTIR(mess(95,107,1),OK) From GESECRAN If OK=1 OK=0 : GCREPARBOU=2 : GERR=1 : Return : Endif When 2 : # La devise est "in" interdite GCREPARBOU=2:GERR=1 : GMESSAGE = mess(94,107,1) : Return When 3 : # La devise est "in" et disparue GMESSAGE=[M:SOH0]CUR-":"-mess(457,196,1)-format$("D:"+GFMDAT4,[F:TCU]CURENDDAT) GCREPARBOU=2:GERR=1 : Return Endcase Default File [SOH] GINVTYP = 5 : WFONC1=GFONC1 : GFONC1="GESSOH" Gosub AVTBOUT_PRO If GERR <> 1 Gosub VERROU_SOH If GERR <> 1 GCREPARBOU = 1 : Endif Endif When "5" : : # Solde # Pas de solde si la commande est allouée # (Si utilisation bt.allocation manuelle sur nblig on est pas repassé par setbout) # If [M:SOH1]ALLSTA <> 1 GERR=1 : GMESSAGE=mess(15,192,1) : Return : Endif # Ctrl autorisation bouton solde (on teste la modification) GBIDC2="D": Gosub AUTORIS_OPT From CONTX3 If !GBIDI2 GERR = 1 : GMESSAGE = mess(2,104,1) : Return : Endif Read [SOH] SOH0=[M:SOH0]SOHNUM : If fstat Raz [F:SOH] : Endif : # Bug 66081 If [F:SOH]ORDSTA=2 GMESSAGE=mess(55,194,1) : GERR=1 : OK=0 : Return Endif : # Bug 66081 # 200515 : Progress billing / X3-201751 : Control on sales order lines associated to a billing plan when the line is closed - 2020-07-20 by LD # Close possible only if there is no scheduled invoices linked to a billing situation not invoiced # Issue X3-200515/227027 - 2020-12-18 by MUARN : general tour without PJM If dim([M:SOH4]PRGBILNUM) > 0 # End issue X3-200515/227027 If func LIBSAL_INVCND_SOH.VERF_SVICD_PRGBILINV([M:SOH0]SOHNUM, 0, 0, GMESSAGE) = [V]CST_AERROR GERR=1 : OK=0 : Return Endif # 200515 : Progress billing / X3-201751 : Control on sales order lines associated to a billing plan when the line is closed - 2020-07-20 by LD # Issue X3-200515/227027 - 2020-12-18 by MUARN : general tour without PJM Endif # End issue X3-200515/227027 # ------------------------------------- # FGR 29/04/2013 : X3SUIVI89648 (début) If GMODU(12) = G_YES Then Local Char SSREMSG(type(GMESSAGE)-10) Call VERIF_SRE_COV([M:SOH0]SOHNUM, SSREMSG) From SUBSREB3 If SSREMSG <> "" Then GERR = 1 GMESSAGE = SSREMSG OK = 0 Return Endif Endif # FGR 29/04/2013 : X3SUIVI89648 (fin) # ------------------------------------- If sum([M:SOH4]ALLQTYSTU) | sum([M:SOH4]SHTQTYSTU) OK=2 : Call OUINON(mess(140,191,1)-"\"-mess(205,100,1),OK) From GESECRAN If OK=1 : OK=0 : GERR=1 : Return : Endif Elsif sum([M:SOH4]FMINUM) <> "" : # Avertir si au moins 1 ligne à contremarque OK=1 : Call AVERTIR(mess(53,191,1),OK) From GESECRAN If OK=1 : OK=0 : Return : Endif Else #----- Commande soldée et acomptes actifs, il convient de les supprimer -----# Call VERF_ACOMPTE_ACTIF(5,[M:SOH0]SOHNUM,OK) From TRTTPT If OK=0 OK=2 : Call OUINON(mess(554,199,1)+"\"+mess(205,100,1),OK) From GESECRAN If OK=1 OK=0 : Return : Endif Else # Demande de confirmation de solde OK=1 : Call AVERTIR(mess(117,191,1),OK) From GESECRAN If OK=1 : OK=0 : GERR=1 : Return : Endif Endif Endif If func PORLEGLIB.PORLEG([M:SOH0]SALFCY,"")=1 & [M:SOH1]SOHCFMFLG <> 2 : GMESSAGE=mess(38,7711,1) : OK=0 : GERR=1 : Return : Endif OK=1 Gosub VERROU_SOH When "6" : # Préparation # Ctrl autorisation GCREPARBOU = 2 GBIDC2="R": Gosub AUTORIS_OPT From CONTX3 If !GBIDI2 GERR = 1 : GMESSAGE = mess(2,104,1) : Return : Endif WFONC1=GFONC1 : GFONC1="GESSOH" Gosub AVTBOUT_PRE If GERR <> 1 Gosub VERROU_SOH If GERR <> 1 GCREPARBOU = 1 : Endif Endif When Default Endcase #Fq66051-Gbn Case BOUT When "E", "F", "H", "J", "K", "U" : If GREP="" & (!ACTMOD | !VERROU) GCONSULT=1 : GCONSDIA=2 : Endif When Default Endcase Return ########################################################################################### ########################################################################################### # Avant execution du bouton contremarque production # # Si les lignes n'ont pas toutes le même site d'expé. # # --> on le passe à blanc en param. et il faudra le saisir dans la fenêtre de sélection# ########################################################################################### $AVTBOUT_FMI Local Integer WI Local Char WFMI_STOFCY(GLONFCY) If sigma(WI=0,[M]NBLIG-1,[M:SOH4]DSTOFCY(WI)=[M:SOH2]STOFCY)=[M]NBLIG WFMI_STOFCY=[M:SOH2]STOFCY:Return:Endif For WI=0 To [M]NBLIG-1 If [M]FMI(WI)=5 & [M]FMINUM(WI)="" If WFMI_STOFCY="" WFMI_STOFCY=[M]DSTOFCY(WI) Endif If [M]DSTOFCY(WI)<>WFMI_STOFCY Raz WFMI_STOFCY : Break Endif Endif Next Return ########################################################################################### # $CTL_DEPASS_ENCOURS # ########################################################################################### $CTL_DEPASS_ENCOURS # FGR 10/03/2015 : X3SUIVI23273 If !([M:SOH1]BETFCY = 2 & [M:SOH1]BETCPY <> 2) or GCTLBETFCY = 2 Then #- Si pas (Intersit & non intersoc) ou si Ctrl intersit encours&prix GMESSAGE = mess(29,192,1) #-- 81855 If dim(GVENFLG02) >= 0 & (GVENFLG02 =2 or GVENFLG02 = 3) Then GMESSAGE += WMESS9 Endif # Si déblocage crédit non autorisé on bloque If GCDTUNL = 1 Then GERR = 1 Return Else Call AVERTIR(GMESSAGE,OK) From GESECRAN Raz GMESSAGE If OK = 1 Then OK = 0 GERR = 1 Return Endif Endif Endif Return ########################################################################################### # Avant execution du bouton facture # ########################################################################################### $AVTBOUT_FAC Local Integer I, WLIG, CDTSTA Local Decimal WALLQTY Local Integer WNBLCTM Local Char WBPAADD Local Integer LRET # FGR 21/04/2015 : X3SUIVI105605 Local Char SVMESSAGE(type(GMESSAGE)-10) # FGR 21/04/2015 : X3SUIVI105605 #--- Issue X3-138438 Gosub REFRESH_SORDER ## Bug 66081 #Read [SOH] SOH0=[M:SOH0]SOHNUM : If fstat Raz [F:SOH] : Endif #--- End issue X3-138438 If [F:SOH]ORDSTA=2 GMESSAGE=mess(55,194,1) : GERR=1 : OK=0 : Return Endif # Bug 66081 If [F:SOH]HLDSTA>1 : GERR=1 : GMESSAGE = mess(16,492,1) : Return : Endif # order holds Raz GERR, GMESSAGE # V6.2 : Certification # Si ctrl date documents : La commande doit avoir une date <= datesyst (La facture est générée avec datesyst) If GCTLDATORI=2 & [F:SOH]ORDDAT>datesyst GMESSAGE=mess(2,413,1)-[F:SOH]SOHNUM-format$(GFMDAT,[F:SOH]ORDDAT)-":\"-mess(347,192,1)-":"-format$(GFMDAT,datesyst) :#--CPO 83985 GFMDAT au lieu de GFMD GERR=1 : Return Endif # Bug 69179 : Ctrl reporté dans GEN_FAC (nécessite [M]GTE) ## V6.2 : Certification ## Contrôle date pour certification NF #Call CTLDAT_CNF(5,[M]SALFCY,[0/0/0],datesyst,"","") From CONTX3 #If mkstat GERR=1 : GMESSAGE-=":"-format$(GFMD,datesyst) : Return Endif # Bug 69179 # Contrôle état crédit de la commande Call SDCDTSTA ([M:SOH0]SOHNUM,[M:SOH0]BPCORD,[M:SOH0]CHGTYP,0,"",[M:SOH0]ORDDAT,[M:SOH2]UNL, 2,CDTSTA,GBIDD1,GBIDD1) & From TRTVENCDT Gosub RECOVERED_AUPDTICK # Issue 107888 - 2016-03-21 by CPO : Scheduled invoices object management Case CDTSTA When 2 : # Client bloqué GERR=1 : GMESSAGE = mess(52,192,1) : Return When 3 : # Dépassement d'en cours # FGR 10/03/2015 : X3SUIVI23273 (début) GMESSAGE = mess(29,192,1) # Si déblocage crédit non autorisé on bloque #If GCDTUNL=1 # GERR=1 : Return #Else # Call AVERTIR(GMESSAGE,OK) From GESECRAN # Raz GMESSAGE # If OK=1 OK=0 : GERR=1 : Return : Endif #Endif Gosub CTL_DEPASS_ENCOURS If GERR = 1 Then Return Endif # FGR 10/03/2015 : X3SUIVI23273 (fin) When 4 : If GLOKORD = 2 : # Acomptes non versés GERR=1 : GMESSAGE = mess(53,192,1) : Return Endif When 5 : # 78411 Sage Exchange Local Char VCRNUM Local Integer VCRTYP Call SEPP_CUR_DOC([F:SOH]SOHNUM,[L]VCRTYP,[L]VCRNUM) From SEPPCDT If [L]VCRNUM<>[F:SOH]SOHNUM If [L]VCRTYP=4 GMESSAGE = func AFNC.MES1(mess(52,2092,1),mess(54,198,1)-[L]VCRNUM) Else GMESSAGE = func AFNC.MES1(mess(52,2092,1),mess(55,198,1)-[L]VCRNUM) Endif Else GMESSAGE = mess(9,2092,1) Endif GERR=1 : Return When Default Endcase # Si facturation cde soldée et cde non allouée totalement If [M:SOH3]IME=2 & [M:SOH1]ALLSTA<>3 & [M:SOH0]ALLLINNBR<>0 & sum([M:SOH4]STOMGTCOD) <> [M:SOH4]NBLIG Call AVERTIR(mess(139,192,1),OK) From GESECRAN Raz GMESSAGE If OK=1 OK=0 : GERR=1 : Return : Endif Endif OK = 2 Raz WLIG # On se sert de la variable ligne [M]GRPFLG(I) pour dire que la ligne est à facturer For I=0 To [M:SOH4]NBLIG-1 [M:SOH4]GRPFLG(I) = 1 WALLQTY = [M:SOH4]ALLQTY(I) # Si composant de kit/sous-traité, la ligne sera traitée avec le composé If find([M:SOH4]LINTYP(I),3,4,5,11,12,13) Goto NEXT_LIG1 Endif If [M:SOH4]SOQSTA(I) <> 3 & [M:SOH4]DEMSTA(I) = 1 If WLIG> 0 & [M:SOH4]DBPAADD(I) <> WBPAADD & [M:SOH3]IME=4 # Les clients livrés sont différents à la ligne GERR=1 : GMESSAGE = mess(314,192,1) : OK = 1 : Break Endif If WALLQTY=0 & [M:SOH4]SHTQTY(I)<>0 If GSHTDLV < 2 If GERR=2 GMESSAGE+=" \ " Endif GERR=2 : GMESSAGE+=[M:SOH0]SOHNUM-[M:SOH4]ITMREF(I)-format$(GFMDAT,[M:SOH4]DSHIDAT(I)) & +"\"+mess(183,192,1) :#--CPO 83985 GFMDAT au lieu de GFMD Goto NEXT_LIG1 Else If [F:ITM]ITMREF <> [M:SOH4]ITMREF(I) Read [ITM]ITM0=[M:SOH4]ITMREF(I) If fstat Raz [F:ITM] Endif Endif If GSHTDLV=2 & [F:ITM]NEGSTO<>2 If GERR=2 GMESSAGE+=" \ " Endif GERR=2 : GMESSAGE+=[M:SOH0]SOHNUM-[M:SOH4]ITMREF(I)-format$(GFMDAT,[M:SOH4]DSHIDAT(I)) & +"\"+mess(184,192,1) :#--CPO 83985 GFMDAT au lieu de GFMD Goto NEXT_LIG1 Endif Endif Endif # Ligne gérée en contremarque et commande d'achat non générée If [M:SOH4]FMI(I) > 1 & [M:SOH4]FMI(I) < 4 & [M:SOH4]FMINUM(I) = "" If [M:SOH4]ALLQTY(I)=0 # Il n'y a rien d'alloué : On bloque la livraison If GERR=2 GMESSAGE+=" \ " Endif GERR=2 : GMESSAGE+=[M:SOH0]SOHNUM-[M:SOH4]ITMREF(I)-format$(GFMDAT,[M:SOH4]DSHIDAT(I)) & +"\"+mess(111,192,1) :#--CPO 83985 GFMDAT au lieu de GFMD Goto NEXT_LIG1 Else # Il y a des allocations : Elles ont été genérées manuellement : On demande si on veut livrer If WNBLCTM = 0 Call OUINON(mess(160,197,1)+"\"+mess(112,191,1),OK) From GESECRAN If OK=1 WNBLCTM=9999 Goto NEXT_LIG1 Else WNBLCTM+=1 Endif Elsif WNBLCTM=9999 Goto NEXT_LIG1 Endif Endif Endif # Ligne gérée avec contremarque receptionnée et pas de quantité allouée If [M:SOH4]FMI(I)=3 & [M:SOH4]ALLQTY(I)=0 & [M:SOH4]STOMGTCOD(I)>1 If WNBLCTM = 0 Call OUINON(mess(140,192,1)+"\"+mess(112,191,1),OK) From GESECRAN If OK=1 WNBLCTM=9999 Goto NEXT_LIG1 Else WNBLCTM+=1 Endif Elsif WNBLCTM=9999 Goto NEXT_LIG1 Endif Endif # Ligne gérée avec un ordre de production et OF non généré If [M:SOH4]FMI(I) = 5 & [M:SOH4]FMINUM(I) = "" If [M:SOH4]ALLQTY(I)=0 # Il n'y a rien d'alloué : On bloque la livraison If GERR=2 GMESSAGE+=" \ " Endif GERR=2 : GMESSAGE+=[M:SOH0]SOHNUM-[M:SOH4]ITMREF(I)-format$(GFMDAT,[M:SOH4]DSHIDAT(I)) & +"\"+mess(138,192,1) :#--CPO 83985 GFMDAT au lieu de GFMD Goto NEXT_LIG1 Else # Il y a des allocations : Elles ont été genérées manuellement : On demande si on veut livrer If WNBLCTM = 0 Call OUINON(mess(201,197,1)+"\"+mess(112,191,1),OK) From GESECRAN If OK=1 WNBLCTM=9999 Goto NEXT_LIG1 Else WNBLCTM+=1 Endif Elsif WNBLCTM=9999 Goto NEXT_LIG1 Endif Endif Endif # Ligne gérée avec un ordre de production et pas de quantité allouée If [M:SOH4]FMI(I)=5 & [M:SOH4]ALLQTY(I)=0 If WNBLCTM = 0 Call OUINON(mess(140,192,1)+"\"+mess(112,191,1),OK) From GESECRAN If OK=1 WNBLCTM=9999 Goto NEXT_LIG1 Else WNBLCTM+=1 Endif Elsif WNBLCTM=9999 Goto NEXT_LIG1 Endif Endif # Pas de facturation d'une ligne de commande d'un contrat de service If [M:SOH4]CONNUM(I) <> "" Goto NEXT_LIG1 Endif # Pour contrôle site expé et adresse de livraison différents If WLIG=0 WBPAADD=[M:SOH4]DBPAADD(I) :Endif # -------------------------------------- # FGR 21/04/2015 : X3SUIVI105605 (début) : seulement pour les factures #If [M:SIH0]INVTYP = 1 Then If dim([M:SOH4]ECCVALMAJ) >= 0 Then SVMESSAGE = GMESSAGE Call CTLECCVAL([M:SOH4]ECCVALMAJ(I), [M:SOH4]DSTOFCY(I), [M:SOH4]ITMREF(I), 4, "", date$, LRET) From STKSOR If LRET >= 1 Then GMESSAGE = SVMESSAGE - "\" - mess(3,40,1) - num$(I+1) - ":" - GMESSAGE - "(" + [M:SOH4]ECCVALMAJ(I) + ")" WNBLCTM=9999 Goto NEXT_LIG1 Endif Endif # If dim([M:SOH4]ECCVALMIN) >= 0 Then SVMESSAGE = GMESSAGE Call STKCTRECC([M:SOH4]ITMREF(I), [M:SOH4]ECCVALMAJ(I), [M:SOH4]ECCVALMIN(I), "", 4) From STKACT If mkstat Then GMESSAGE = SVMESSAGE - "\" - mess(3,40,1) - num$(I+1) - ":" - GMESSAGE - "(" + [M:SOH4]ECCVALMIN(I) + ")" WNBLCTM=9999 Goto NEXT_LIG1 Endif Endif #Endif # FGR 21/04/2015 : X3SUIVI105605 (fin) # -------------------------------------- [M:SOH4]GRPFLG(I) = 2 WLIG += 1 Endif $NEXT_LIG1 # point d'entrée pour modifier la sélection des lignes à facturer GPOINT="SOHINVLIG" : Gosub ENTREE From EXEFNC Next I #If OK = 1 Return Endif # Il n'y a rien à facturer If WLIG = 0 GERR = 1 : GMESSAGE += "\"+mess(78,192,1) OK = 1 Return Endif Return ########################################################################################### # Avant execution du bouton proforma # ########################################################################################### $AVTBOUT_PRO Local Integer I, WLIG #--- Issue X3-138438 Gosub REFRESH_SORDER ## Bug 66081 #Read [SOH] SOH0=[M:SOH0]SOHNUM : If fstat Raz [F:SOH] : Endif #--- End issue X3-138438 If [F:SOH]PRFNUM<>"" GMESSAGE=mess(106,191,1)-[F:SOH]PRFNUM : GERR=1 : OK=0 : Return Endif # Bug 66081 If [F:SOH]HLDSTA>1 : GERR=1 : GMESSAGE = mess(17,492,1) : Return : Endif # order holds Raz GERR, GMESSAGE OK = 2 Raz WLIG # On se sert de la variable ligne [M]GRPFLG(I) pour dire que la ligne est à facturer For I=0 To [M:SOH4]NBLIG-1 [M:SOH4]GRPFLG(I) = 1 If [M:SOH4]SOQSTA(I) <> 3 [M:SOH4]GRPFLG(I) = 2 WLIG += 1 Endif $NEXT_LIG2 # point d'entrée pour modifier la sélection des lignes à facturer GPOINT="SOHINVLIG" : Gosub ENTREE From EXEFNC Next I # Il n'y a rien à facturer If WLIG = 0 GERR = 1 : GMESSAGE += "\"+mess(78,192,1) OK = 1 Return Endif Return ########################################################################################### # Avant execution du bouton livraison # ########################################################################################### $AVTBOUT_LIV Local Integer I, WLIG, CDTSTA Local Decimal WALLQTY Local Integer WNBLLIV, WNBLCTM, WNBLMDL Local Char WBPTNUM(GLONBPT), WMDL, WSTOFCY(GLONFCY), WBPAADD #--- Issue X3-138438 Gosub REFRESH_SORDER ## Bug 66081 #Read [SOH] SOH0=[M:SOH0]SOHNUM : If fstat Raz [F:SOH] : Endif #--- End issue X3-138438 If [F:SOH]ORDSTA=2 GMESSAGE=mess(55,194,1) : GERR=1 : OK=0 : Return Endif # Bug 66081 # Récupération des paramètres stock(livraison) du site / de la société Call GLOBSTOFCY([M:SOH2]STOFCY) From TRTVENGLOB Raz GERR,GMESSAGE # Contrôle état crédit de la commande Call SDCDTSTA ([M:SOH0]SOHNUM,[M:SOH0]BPCORD,[M:SOH0]CHGTYP,0,"",[M:SOH0]ORDDAT,[M:SOH2]UNL,2,CDTSTA,GBIDD1,GBIDD1) & From TRTVENCDT Gosub RECOVERED_AUPDTICK # Issue 107888 - 2016-03-21 by CPO : Scheduled invoices object management OK = 2 Case CDTSTA When 2 : # Client bloqué GERR=1 : GMESSAGE = mess(52,192,1) : Return When 3 : # Dépassement d'en cours # FGR 10/03/2015 : X3SUIVI23273 (début) #GMESSAGE = mess(29,192,1) ## Si déblocage crédit non autorisé on bloque #If GCDTUNL=1 # GERR=1 : Return #Else # Call AVERTIR(GMESSAGE,OK) From GESECRAN # Raz GMESSAGE # If OK=1 OK=0 : GERR=1 : Return : Endif #Endif Gosub CTL_DEPASS_ENCOURS If GERR = 1 Then Return Endif # FGR 10/03/2015 : X3SUIVI23273 (fin) When 4 : If GLOKORD = 2 : # Acomptes non versés GERR=1 : GMESSAGE = mess(53,192,1) : Return Endif When 5 : # 78411 Sage Exchange Local Char VCRNUM Local Integer VCRTYP Call SEPP_CUR_DOC([F:SOH]SOHNUM,[L]VCRTYP,[L]VCRNUM) From SEPPCDT If [L]VCRNUM<>[F:SOH]SOHNUM If [L]VCRTYP=4 GMESSAGE = func AFNC.MES1(mess(52,2092,1),mess(54,198,1)-[L]VCRNUM) Else GMESSAGE = func AFNC.MES1(mess(52,2092,1),mess(55,198,1)-[L]VCRNUM) Endif Else GMESSAGE = mess(9,2092,1) Endif GERR=1 : Return When Default Endcase #--- Bug 74688 # Si livraison cde complète et cde non allouée totalement #If [M:SOH2]DME=3 & [M:SOH1]ALLSTA<>3 & [M:SOH0]ALLLINNBR<>0 & sum([M:SOH4]STOMGTCOD) <> [M:SOH4]NBLIG # Call AVERTIR(mess(295,192,1),OK) From GESECRAN # If OK=1 OK=0 : GERR=1 : Return : Endif #Endif #--- If [F:SOH]HLDSTA>1 : GERR=1 : GMESSAGE = mess(15,492,1) : Return : Endif # order holds Raz WLIG # On se sert de la variable ligne [M]GRPFLG(I) pour dire que la ligne est à livrer For I=0 To [M:SOH4]NBLIG-1 [M:SOH4]GRPFLG(I) = 1 WALLQTY = [M:SOH4]ALLQTY(I) #--- Issue 112531 by TS If [M:SOH4]DLVFLG(I)<>2 Goto NEXT_LIG Endif #--- # Si composant de kit/sous-traité, la ligne sera traitée avec le composé If find([M:SOH4]LINTYP(I),3,4,5,11,12,13) Goto NEXT_LIG Endif If [M:SOH4]SOQSTA(I) <> 3 & [M:SOH4]DEMSTA(I) = 1 If WLIG> 0 & [M:SOH4]DSTOFCY(I) <> WSTOFCY # Les sites expédition sont différents à la ligne GERR=1 : GMESSAGE = mess(61,192,1) : OK = 1 : Break Endif If WLIG> 0 & [M:SOH4]DBPAADD(I) <> WBPAADD # Les clients livrés sont différents à la ligne GERR=1 : GMESSAGE = mess(166,192,1) : OK = 1 : Break Endif # Cette ligne est en préparation If sum([M:SOH4]LPRQTY(I),[M:SOH4]OPRQTY(I),[M:SOH4]PREQTY(I))<>0 GERR=2 : GMESSAGE = [F:SOQ]SOHNUM-":"-mess(27,159,1)-[F:SOQ]ITMREF-":"-mess(309,192,1) Goto NEXT_LIG Endif # Si article géré en stock If [M:SOH4]STOMGTCOD(I) <> 1 # Si livraison ligne cde complète et ligne cde non allouée totalement #--- Bug 74688 #If [M:SOH2]DME=2 & [M:SOH4]ALLQTY(I) <> 0 & If [M:SOH2]DME>1 & [M:SOH4]ALLQTY(I) <> 0 & & ([M:SOH4]TALLQTY(I)+[M:SOH4]SHTQTY(I) < [M:SOH4]QTY(I)) If WNBLLIV = 0 #--- Bug 74688 #Call OUINON(mess(296,192,1)+"\"+mess(112,191,1),OK) From GESECRAN If [M:SOH2]DME = 2 Call OUINON(mess(296,192,1)+"\"+mess(112,191,1),OK) From GESECRAN Else Call OUINON(mess(353,192,1)+"\"+mess(112,191,1),OK) From GESECRAN Endif #--- If OK=1 WNBLLIV=9999 Goto NEXT_LIG Else WNBLLIV+=1 Endif Elsif WNBLLIV=9999 Goto NEXT_LIG Endif Endif # Si article non géré en stock Else # Si livraison cde ou ligne cde complète et qte à livrer saisie < reste à livrer If [M:SOH2]DME > 1 & [M:SOH4]TDLQTY(I) <> 0 & & ([M:SOH4]TDLQTY(I)+[M:SOH4]LPRQTY(I)+[M:SOH4]OPRQTY(I)+[M:SOH4]PREQTY(I)+[M:SOH4]ODLQTY(I)+[M:SOH4]DLVQTY(I)<[M:SOH4]QTY(I)) If WNBLLIV = 0 If [M:SOH2]DME = 2 Call OUINON(mess(212,192,1),OK) From GESECRAN Else Call OUINON(mess(213,192,1),OK) From GESECRAN Endif If OK=1 WNBLLIV=9999 Goto NEXT_LIG Else WNBLLIV+=1 Endif Elsif WNBLLIV=9999 Goto NEXT_LIG Endif Endif Endif If WALLQTY=0 & [M:SOH4]SHTQTY(I)<>0 If GSHTDLV < 2 If GERR=2 GMESSAGE+=" \ " Endif GERR=2 : GMESSAGE+=[M:SOH4]ITMREF(I)-format$(GFMDAT,[M:SOH4]DSHIDAT(I)) :#--CPO 83985 GFMDAT au lieu de GFMD If !find([M]LINTYP(I),1,2,6,10) GMESSAGE -=":"-mess([M]LINTYP(I), 423,1) Endif GMESSAGE+="\"+mess(183,192,1) Goto NEXT_LIG Else If [F:ITM]ITMREF <> [M:SOH4]ITMREF(I) Read [ITM]ITM0=[M:SOH4]ITMREF(I) If fstat Raz [F:ITM] Endif Endif If GSHTDLV=2 & [F:ITM]NEGSTO<>2 If GERR=2 GMESSAGE+=" \ " Endif GERR=2 : GMESSAGE+=[M:SOH4]ITMREF(I)-format$(GFMDAT,[M:SOH4]DSHIDAT(I)) :#--CPO 83985 GFMDAT au lieu de GFMD If !find([M]LINTYP(I),1,2,6,10) GMESSAGE -=":"-mess([M]LINTYP(I), 423,1) Endif GMESSAGE+="\"+mess(184,192,1) Goto NEXT_LIG Endif Endif Endif # Ligne gérée en contremarque et commande d'achat non générée If [M:SOH4]FMI(I) > 1 & [M:SOH4]FMI(I) < 4 & [M:SOH4]FMINUM(I) = "" If [M:SOH4]ALLQTY(I)=0 # Il n'y a rien d'alloué : On bloque la livraison If GERR=2 GMESSAGE+=" \ " Endif GERR=2 : GMESSAGE+=[M:SOH4]ITMREF(I)-format$(GFMDAT,[M:SOH4]DSHIDAT(I)) :#--CPO 83985 GFMDAT au lieu de GFMD If !find([M]LINTYP(I),1,2,6,10) GMESSAGE -=":"-mess([M]LINTYP(I), 423,1) Endif GMESSAGE+="\"+mess(111,192,1) Goto NEXT_LIG Else # Il y a des allocations : Elles ont été genérées manuellement : On demande si on veut livrer If WNBLCTM = 0 Call OUINON(mess(160,197,1)+"\"+mess(112,191,1),OK) From GESECRAN If OK=1 WNBLCTM=9999 Goto NEXT_LIG Else WNBLCTM+=1 Endif Elsif WNBLCTM=9999 Goto NEXT_LIG Endif Endif Endif # Ligne gérée avec contremarque receptionnée et pas de quantité allouée If [M:SOH4]FMI(I)=3 & [M:SOH4]ALLQTY(I)=0 & [M:SOH4]STOMGTCOD(I)>1 If WNBLCTM = 0 Call OUINON(mess(140,192,1)+"\"+mess(112,191,1),OK) From GESECRAN If OK=1 WNBLCTM=9999 Goto NEXT_LIG Else WNBLCTM+=1 Endif Elsif WNBLCTM=9999 Goto NEXT_LIG Endif Endif # Ligne gérée avec un ordre de production et OF non généré If [M:SOH4]FMI(I) = 5 & [M:SOH4]FMINUM(I) = "" If [M:SOH4]ALLQTY(I)=0 # Il n'y a rien d'alloué : On bloque la livraison If GERR=2 GMESSAGE+=" \ " Endif GERR=2 : GMESSAGE+=[M:SOH4]ITMREF(I)-format$(GFMDAT,[M:SOH4]DSHIDAT(I)) :#--CPO 83985 GFMDAT au lieu de GFMD If !find([M]LINTYP(I),1,2,6,10) GMESSAGE -=":"-mess([M]LINTYP(I), 423,1) Endif GMESSAGE+="\"+mess(138,192,1) Goto NEXT_LIG Else # Il y a des allocations : Elles ont été genérées manuellement : On demande si on veut livrer If WNBLCTM = 0 Call OUINON(mess(201,197,1)+"\"+mess(112,191,1),OK) From GESECRAN If OK=1 WNBLCTM=9999 Goto NEXT_LIG Else WNBLCTM+=1 Endif Elsif WNBLCTM=9999 Goto NEXT_LIG Endif Endif Endif # Ligne gérée avec un ordre de production et pas de quantité allouée If [M:SOH4]FMI(I)=5 & [M:SOH4]ALLQTY(I)=0 If WNBLCTM = 0 Call OUINON(mess(140,192,1)+"\"+mess(112,191,1),OK) From GESECRAN If OK=1 WNBLCTM=9999 Goto NEXT_LIG Else WNBLCTM+=1 Endif Elsif WNBLCTM=9999 Goto NEXT_LIG Endif Endif If WLIG=0 # Si la ligne est livrable on vérifie que transporteur et mode de livraison sont homogènes WBPTNUM=[M:SOH4]DBPTNUM(I) WMDL =[M:SOH4]DMDL(I) # Pour contrôle site expé et adresse de livraison différents WSTOFCY=[M:SOH4]DSTOFCY(I) WBPAADD=[M:SOH4]DBPAADD(I) Elsif (WBPTNUM<>[M:SOH4]DBPTNUM(I) & [M:SOH4]DBPTNUM(I)<>"") | (WMDL<>[M:SOH4]DMDL(I) & [M:SOH4]DMDL(I)<>"") If WNBLMDL = 0 OK=2 Call OUINON(mess(133,191,1)+"\"+mess(205,100,1)+"\"+mess(134,191,1),OK) From GESECRAN If OK=1 OK=0 : GERR=1 : Break Else WNBLMDL+=1 Endif Endif Endif [M:SOH4]GRPFLG(I) = 2 WLIG += 1 Endif $NEXT_LIG Next I # Il n'y a rien à livrer If WLIG = 0 GERR=1 : GMESSAGE += "\"+mess(62,192,1) OK = 1 : Return Endif Return ########################################################################################### # Avant execution du bouton préparation # ########################################################################################### $AVTBOUT_PRE Local Integer I, WLIG, CDTSTA Local Decimal WALLQTY Local Integer WNBLLIV, WNBLCTM, WNBLMDL Local Char WBPTNUM(GLONBPT), WMDL, WSTOFCY(GLONFCY), WBPAADD #--- Issue X3-138438 Gosub REFRESH_SORDER #--- End issue X3-138438 # Récupération des paramètres stock(livraison) du site / de la société Call GLOBSTOFCY([M:SOH2]STOFCY) From TRTVENGLOB # ISSUE 110438 - 2015-10-09 by TODAN : Move the order hold message to after the Credit hold message #If [F:SOH]HLDSTA>1 : GERR=1 : GMESSAGE = mess(18,492,1) : Return : Endif # order holds Raz GERR,GMESSAGE # Contrôle état crédit de la commande Call SDCDTSTA ([M:SOH0]SOHNUM,[M:SOH0]BPCORD,[M:SOH0]CHGTYP,0,"",[M:SOH0]ORDDAT,[M:SOH2]UNL,2,CDTSTA,GBIDD1,GBIDD1) & From TRTVENCDT Gosub RECOVERED_AUPDTICK # Issue 107888 - 2016-03-21 by CPO : Scheduled invoices object management OK = 2 Case CDTSTA When 2 : # Client bloqué GERR=1 : GMESSAGE = mess(52,192,1) : Return When 3 : # Dépassement d'en cours # FGR 10/03/2015 : X3SUIVI23273 (début) #GMESSAGE = mess(29,192,1) ## Si déblocage crédit non autorisé on bloque #If GCDTUNL=1 # GERR=1 : Return #Else # Call AVERTIR(GMESSAGE,OK) From GESECRAN # Raz GMESSAGE # If OK=1 OK=0 : GERR=1 : Return : Endif #Endif Gosub CTL_DEPASS_ENCOURS If GERR = 1 Then Return Endif # FGR 10/03/2015 : X3SUIVI23273 (fin) When 4 : If GLOKORD = 2 : # Acomptes non versés GERR=1 : GMESSAGE = mess(53,192,1) : Return Endif When 5 : # 78411 Sage Exchange Local Char VCRNUM Local Integer VCRTYP Call SEPP_CUR_DOC([F:SOH]SOHNUM,[L]VCRTYP,[L]VCRNUM) From SEPPCDT If [L]VCRNUM<>[F:SOH]SOHNUM If [L]VCRTYP=4 GMESSAGE = func AFNC.MES1(mess(52,2092,1),mess(54,198,1)-[L]VCRNUM) Else GMESSAGE = func AFNC.MES1(mess(52,2092,1),mess(55,198,1)-[L]VCRNUM) Endif Else GMESSAGE = mess(9,2092,1) Endif GERR=1 : Return When Default Endcase # ISSUE 110438 - 2015-10-09 by TODAN : Move the order hold message to after the Credit hold message If [F:SOH]HLDSTA>1 : GERR=1 : GMESSAGE = mess(18,492,1) : Return : Endif # order holds # Si livraison cde complète et cde non allouée totalement #If [M:SOH2]DME=3 & [M:SOH1]ALLSTA<>3 & [M:SOH0]ALLLINNBR<>0 & sum([M:SOH4]STOMGTCOD) <> [M:SOH4]NBLIG # Call AVERTIR(mess(295,192,1),OK) From GESECRAN # If OK=1 OK=0 : GERR=1 : Return : Endif #Endif Raz WLIG # On se sert de la variable ligne [M]GRPFLG(I) pour dire que la ligne est à préparer For I=0 To [M:SOH4]NBLIG-1 [M:SOH4]GRPFLG(I) = 1 WALLQTY = [M:SOH4]ALLQTY(I) #--- Issue 112531 by TS If [M:SOH4]DLVFLG(I)<>2 Goto NEXT_LIG3 Endif #--- # Si composant de kit/sous-traité, la ligne sera traitée avec le composé If find([M:SOH4]LINTYP(I),3,4,5,11,12,13) Goto NEXT_LIG3 Endif If [M:SOH4]SOQSTA(I) <> 3 & [M:SOH4]DEMSTA(I) = 1 If WLIG> 0 & [M:SOH4]DSTOFCY(I) <> WSTOFCY # Les sites expédition sont différents à la ligne GERR=1 : GMESSAGE = mess(317,192,1) : OK = 1 : Break Endif If WLIG> 0 & [M:SOH4]DBPAADD(I) <> WBPAADD # Les clients livrés sont différents à la ligne GERR=1 : GMESSAGE = mess(352,192,1) : OK = 1 : Break Endif # Cette ligne est en préparation #If sum([F:SOQ]LPRQTYSTU,[F:SOQ]OPRQTYSTU,[F:SOQ]PREQTYSTU)<>0 # GERR=2 : GMESSAGE = [F:SOQ]SOHNUM-":"-mess(27,159,1)-[F:SOQ]ITMREF-":"-mess(309,192,1) # Goto NEXT_LIG3 #Endif # Il n'y a rien à préparer sur cette ligne If [M:SOH4]LPRQTY(I)+[M:SOH4]OPRQTY(I)+[M:SOH4]PREQTY(I)+[M:SOH4]ODLQTY(I)+[M:SOH4]DLVQTY(I)>=[M:SOH4]QTY(I) Goto NEXT_LIG3 Endif # Si article géré en stock If [M:SOH4]STOMGTCOD(I) <> 1 # Si livraison ligne cde complète et ligne cde non allouée totalement #--- Bug 74688 #If [M:SOH2]DME=2 & [M:SOH4]ALLQTY(I) <> 0 & If [M:SOH2]DME>1 & [M:SOH4]ALLQTY(I) <> 0 & & ([M:SOH4]TALLQTY(I)+[M:SOH4]SHTQTY(I) < [M:SOH4]QTY(I)) If WNBLLIV = 0 #--- Bug 74688 If [M:SOH2]DME = 2 Call OUINON(mess(296,192,1)+"\"+mess(112,191,1),OK) From GESECRAN Else Call OUINON(mess(353,192,1)+"\"+mess(112,191,1),OK) From GESECRAN Endif #--- If OK=1 WNBLLIV=9999 Goto NEXT_LIG3 Else WNBLLIV+=1 Endif Elsif WNBLLIV=9999 Goto NEXT_LIG3 Endif Endif # Si article non géré en stock Else # Si livraison cde ou ligne cde complète et qte à livrer saisie < reste à livrer If [M:SOH2]DME > 1 & [M:SOH4]TDLQTY(I) <> 0 & & ([M:SOH4]TDLQTY(I)+[M:SOH4]LPRQTY(I)+[M:SOH4]OPRQTY(I)+[M:SOH4]PREQTY(I)+[M:SOH4]ODLQTY(I)+[M:SOH4]DLVQTY(I)<[M:SOH4]QTY(I)) If WNBLLIV = 0 If [M:SOH2]DME = 2 Call OUINON(mess(212,192,1),OK) From GESECRAN Else Call OUINON(mess(213,192,1),OK) From GESECRAN Endif If OK=1 WNBLLIV=9999 Goto NEXT_LIG3 Else WNBLLIV+=1 Endif Elsif WNBLLIV=9999 Goto NEXT_LIG3 Endif Endif Endif If WALLQTY=0 & [M:SOH4]SHTQTY(I)<>0 If GSHTDLV < 2 If GERR=2 GMESSAGE+=" \ " Endif GERR=2 : GMESSAGE+=[M:SOH4]ITMREF(I)-format$(GFMDAT,[M:SOH4]DSHIDAT(I)) :#--CPO 83985 GFMDAT au lieu de GFMD If !find([M]LINTYP(I),1,2,6,10) GMESSAGE -=":"-mess([M]LINTYP(I), 423,1) Endif GMESSAGE+="\"+mess(183,192,1) Goto NEXT_LIG3 Else If [F:ITM]ITMREF <> [M:SOH4]ITMREF(I) Read [ITM]ITM0=[M:SOH4]ITMREF(I) If fstat Raz [F:ITM] Endif Endif If GSHTDLV=2 & [F:ITM]NEGSTO<>2 If GERR=2 GMESSAGE+=" \ " Endif GERR=2 : GMESSAGE+=[M:SOH4]ITMREF(I)-format$(GFMDAT,[M:SOH4]DSHIDAT(I)) :#--CPO 83985 GFMDAT au lieu de GFMD If !find([M]LINTYP(I),1,2,6,10) GMESSAGE -=":"-mess([M]LINTYP(I), 423,1) Endif GMESSAGE+="\"+mess(184,192,1) Goto NEXT_LIG3 Endif Endif Endif # Ligne gérée en contremarque et commande d'achat non générée If [M:SOH4]FMI(I) > 1 & [M:SOH4]FMI(I) < 4 & [M:SOH4]FMINUM(I) = "" If [M:SOH4]ALLQTY(I)=0 # Il n'y a rien d'alloué : On bloque la livraison If GERR=2 GMESSAGE+=" \ " Endif GERR=2 : GMESSAGE+=[M:SOH4]ITMREF(I)-format$(GFMDAT,[M:SOH4]DSHIDAT(I)) :#--CPO 83985 GFMDAT au lieu de GFMD If !find([M]LINTYP(I),1,2,6,10) GMESSAGE -=":"-mess([M]LINTYP(I), 423,1) Endif GMESSAGE+="\"+mess(111,192,1) Goto NEXT_LIG3 Else # Il y a des allocations : Elles ont été genérées manuellement : On demande si on veut livrer If WNBLCTM = 0 Call OUINON(mess(160,197,1)+"\"+mess(112,191,1),OK) From GESECRAN If OK=1 WNBLCTM=9999 Goto NEXT_LIG3 Else WNBLCTM+=1 Endif Elsif WNBLCTM=9999 Goto NEXT_LIG3 Endif Endif Endif # Ligne gérée avec contremarque receptionnée et pas de quantité allouée If [M:SOH4]FMI(I)=3 & [M:SOH4]ALLQTY(I)=0 If WNBLCTM = 0 Call OUINON(mess(140,192,1)+"\"+mess(112,191,1),OK) From GESECRAN If OK=1 WNBLCTM=9999 Goto NEXT_LIG3 Else WNBLCTM+=1 Endif Elsif WNBLCTM=9999 Goto NEXT_LIG3 Endif Endif # Ligne gérée avec un ordre de production et OF non généré If [M:SOH4]FMI(I) = 5 & [M:SOH4]FMINUM(I) = "" If [M:SOH4]ALLQTY(I)=0 # Il n'y a rien d'alloué : On bloque la livraison If GERR=2 GMESSAGE+=" \ " Endif GERR=2 : GMESSAGE+=[M:SOH4]ITMREF(I)-format$(GFMDAT,[M:SOH4]DSHIDAT(I)) :#--CPO 83985 GFMDAT au lieu de GFMD If !find([M]LINTYP(I),1,2,6,10) GMESSAGE -=":"-mess([M]LINTYP(I), 423,1) Endif GMESSAGE+="\"+mess(138,192,1) Goto NEXT_LIG3 Else # Il y a des allocations : Elles ont été genérées manuellement : On demande si on veut livrer If WNBLCTM = 0 Call OUINON(mess(201,197,1)+"\"+mess(112,191,1),OK) From GESECRAN If OK=1 WNBLCTM=9999 Goto NEXT_LIG3 Else WNBLCTM+=1 Endif Elsif WNBLCTM=9999 Goto NEXT_LIG3 Endif Endif Endif # Ligne gérée avec un ordre de production et pas de quantité allouée If [M:SOH4]FMI(I)=5 & [M:SOH4]ALLQTY(I)=0 If WNBLCTM = 0 Call OUINON(mess(140,192,1)+"\"+mess(112,191,1),OK) From GESECRAN If OK=1 WNBLCTM=9999 Goto NEXT_LIG3 Else WNBLCTM+=1 Endif Elsif WNBLCTM=9999 Goto NEXT_LIG3 Endif Endif If WLIG=0 # Si la ligne est livrable on vérifie que transporteur et mode de livraison sont homogènes WBPTNUM=[M:SOH4]DBPTNUM(I) WMDL =[M:SOH4]DMDL(I) # Pour contrôle site expé et adresse de livraison différents WSTOFCY=[M:SOH4]DSTOFCY(I) WBPAADD=[M:SOH4]DBPAADD(I) Elsif (WBPTNUM<>[M:SOH4]DBPTNUM(I) & [M:SOH4]DBPTNUM(I)<>"") | (WMDL<>[M:SOH4]DMDL(I) & [M:SOH4]DMDL(I)<>"") If WNBLMDL = 0 OK=2 Call OUINON(mess(133,191,1)+"\"+mess(205,100,1)+"\"+mess(134,191,1),OK) From GESECRAN If OK=1 OK=0 : GERR=1 : Break Else WNBLMDL+=1 Endif Endif Endif [M:SOH4]GRPFLG(I) = 2 WLIG += 1 Endif $NEXT_LIG3 Next I # Il n'y a rien à préparer If WLIG = 0 GERR=1 : GMESSAGE += "\"+mess(316,192,1) OK = 1 : Return Endif Return #--- Issue X3-138438 $REFRESH_SORDER Local File SORDER [SOHT] Read [SOHT]SOH0=[M:SOH0]SOHNUM If [F:SOHT]updTick <> [F:SOH]updTick Gosub RELIT From GOBJSUB Endif Close Local File [SOHT] Return #--- End issue X3-138438 ########################################################################################### # Après execution des boutons # ########################################################################################### $EXEBOUT GCONSDIA=0 Case BOUT When "1" : : # Allocation # Bug 56454 : Si la gestion de l'objet n'a verrouillé l'enr, on le déverrouille # (Et si la gestion de l'objet a verrouillé l'enr, il le déverrouillera dans $RELIT) If VERROU=0 Unlock = SYMBOLE2 Endif Gosub RELIT From GOBJSUB When "2" : GFONC1=WFONC1 : # Livraison # FGR 24/04/2015 : X3SUIVI102508 (début) If dim(SVADXMXL) >= 0 Then adxmxl = SVADXMXL Kill SVADXMXL Endif # FGR 24/04/2015 : X3SUIVI102508 (fin) Raz [M:SOH4]GRPFLG If clalev ([F:TSO])=0 Local File TABSOHTYP [TSO] Endif If VERROU=0 Unlock = SYMBOLE2 Endif : # Bug 56454 Gosub RELIT From GOBJSUB When "3" : GFONC1=WFONC1 : # Facture If VERROU=0 Unlock = SYMBOLE2 Endif : # Bug 56454 Gosub RELIT From GOBJSUB # Issue X3-237574 - 2021-04-22 by SR If dim(G111783C)>0 : Kill G111783C : Endif When "4" : GFONC1=WFONC1 : # Proforma If VERROU=0 Unlock = SYMBOLE2 Endif : # Bug 56454 Gosub RELIT From GOBJSUB When "5" : : # Solde If VERROU=0 Unlock = SYMBOLE2 Endif : # Bug 56454 Gosub RELIT From GOBJSUB When "6" : GFONC1=WFONC1 : # Préparation #Raz [M:SOH4]GRPFLG # # hcb 97100 deb # If VERROU=0 Unlock = SYMBOLE2 Endif : # Bug 56454 # pour resoudre ce bug le lock n est plus fait sur l entete mais sur les lignes For [SOQ]SOQ0 Where SOHNUM = [M:SOH0]SOHNUM SYMBOLE2 = "SOQ"+[F:SOQ]SOHNUM+"\"+num$([F:SOQ]SOPLIN)+"\"+num$([F:SOQ]SOQSEQ) Unlock = SYMBOLE2 Next # # hcb 97100 deb Gosub RELIT From GOBJSUB #--- Issue X3-43236 Local Char SYMBOLE1(50) SYMBOLE1="SOH"+[M:SOH0]SOHNUM : Lock=SYMBOLE1 #--- When "8" : #Orders # Issue X3-135076 by ANKUL Gosub RELIT From GOBJSUB # Issue X3-135076 end Endcase Return ########################################################################################### # Après execution des menus # ########################################################################################### $STATUT #fq6051-gbn GCONSULT=SAV_GCONSULT GCONSDIA=SAV_GCONSDIA GCONSDIA=0 Case BOUT When "E" : If mkstat=4 & GREP="" : # Texte entete # GREP="M" : REP="M" # Gosub SETBOUT From GOBJSUB Gosub AVANT_MOD_BOUT : # Bug 77357 Gosub ENTRE_MODIF From GOBJSUB Endif If [M]SOHTEX1 <> "" & !GIMPORT Call SET_IMAGE (4) From GESECRAN Elsif !GIMPORT Call RESET_IMAGE (4) From GESECRAN Endif When "F" : If mkstat=4 & GREP="" : # Texte pied # GREP="M" : REP="M" # Gosub SETBOUT From GOBJSUB Gosub AVANT_MOD_BOUT : # Bug 77357 Gosub ENTRE_MODIF From GOBJSUB Endif If [M]SOHTEX2 <> "" & !GIMPORT Call SET_IMAGE (4) From GESECRAN Elsif !GIMPORT Call RESET_IMAGE (4) From GESECRAN Endif When "H" : If [M:ADB1]ADBFLG = 2 | [M]CNTNAM <> [M:ADB1]CNTNAM : # Adresse client commande # Dde 77155 : Dégriser le bouton enregistrer si utilisation système de taxes américaines #If GREP <> "C" & GREP <> "M" & GREP <> "D" # If GLOCUSATAX # 106867.o If func AFNC.ACTIV("LTA") & [F:CPY]SSTTAXACT = 2 # 106867.n Gosub ENTRE_MODIF From GOBJSUB Elsif GREP <> "C" & GREP <> "M" & GREP <> "D" Gosub MAJADRESSE From SUBSOHB Endif If [M:ADB1]BPRNAM(0) <> "" [M:SOH0]BPCNAM = [M:ADB1]BPRNAM(0) Affzo [M:SOH0]BPCNAM Endif Endif When "J" : : # Adresse client facture If [M:ADB3]ADBFLG = 2 | [M]CNTNAM <> [M:ADB3]CNTNAM #& (dim([M]EECNUM)>0 & [M]EECNUM <> [M:ADB3]EECNUM) # Dde 77155 : Dégriser le bouton enregistrer si utilisation système de taxes américaines #If GREP <> "C" & GREP <> "M" & GREP <> "D" # If GLOCUSATAX # 106867.o If func AFNC.ACTIV("LTA") & [F:CPY]SSTTAXACT = 2 # 106867.n Gosub ENTRE_MODIF From GOBJSUB Elsif GREP <> "C" & GREP <> "M" & GREP <> "D" Gosub MAJADRESSE From SUBSOHB Endif If [M:ADB3]BPRNAM(0) <> "" [M:SOH1]BPINAM = [M:ADB3]BPRNAM(0) Affzo [M:SOH1]BPINAM Endif Endif When "K" : If [M:ADB2]ADBFLG = 2 | [M]CNTNAM <> [M:ADB2]CNTNAM : # Adresse client livré # Dde 77155 : Dégriser le bouton enregistrer si utilisation système de taxes américaines #If GREP <> "C" & GREP <> "M" & GREP <> "D" # 79705 : V7 : SAT in SPRICLINK # Dégriser le bouton enregistrer si la recherche tarif a été executée #If GLOCUSATAX # If GLOCUSATAX | (!find(GREP,"C","M","D") & sum([M]UPDFLG)<>0) # 106867.o If (func AFNC.ACTIV("LTA") & [F:CPY]SSTTAXACT = 2) | (!find(GREP,"C","M","D") & sum([M]UPDFLG)<>0) # 106867.n Gosub ENTRE_MODIF From GOBJSUB Elsif GREP <> "C" & GREP <> "M" & GREP <> "D" Gosub MAJADRESSE From SUBSOHB Endif If [M:ADB2]BPRNAM(0) <> "" [M:SOH1]BPDNAM = [M:ADB2]BPRNAM(0) Affzo [M:SOH1]BPDNAM Endif Gosub SHOW_HIDE_ENTCOD From TRTADRLIB #LTA.n Endif When "U" : If mkstat=4 & GREP="" : # Informations CEE # GREP="M" : REP="M" : # Pour forcer le bouton 'enregistrer' Gosub AVANT_MOD_BOUT : # Bug 77357 Gosub ENTRE_MODIF From GOBJSUB Endif When "L","M" : GFCY=WFCY : # Contremarque #Call GETDEV(GFCY) From DEVSUB # Chargement globales référenciels, comptes et sections de la société Gosub CHARG_PARAM : Raz GERR : Raz GMESSAGE Gosub RELIT From GOBJSUB # Bug 45999 : Revérouiller la cde qui a été dévérouillée dans le traitement de la ctm # Bug 73310 : Verrou doit être fait après le relit (et non avant) sinon, si ctm avec intersociété, c'est la cde intersociété qui est lockée Gosub VERROU_SOH When "R","T" : : # Acompte, Situation Gosub RELIT From GOBJSUB When "S" : : # 78411 Sage Exchange Call SDCDTSTA([M]SOHNUM,[M]BPCORD,[M]CHGTYP,0,[M:SOH1]CUR,[M]ORDDAT,[M]UNL,1,[M]CDTSTA,[M]OST,[M]OSTAUZ) From TRTVENCDT Affzo [M:SOH1]CDTSTA Gosub MANHLD_LIENS From MANHLDLIB Endcase Return ########################################################################################### # 79705 : V7 : SAT in SPRICLINK ####################################################################### # Après exécution d'une action et avant l'exécution de l'action suite # ####################################################################### $AVANT_SUITE Case BOUT When "H","J","K" : # After execution Adresse and before execution recalculate prices # Not trigger recalculate prices if globale not informed If (dim(GADDACTMOD)<0 | GADDACTMOD<>"1") OK=0 Endif Endcase Return # 79705 : V7 : SAT in SPRICLINK ######################################################################### $BOITE Return #################################################################### $EFFMASK Return #################################################################### #################################################################### $RAZDUP #-----------------------------------------------# # Réinitialisation des champs avant duplication # #-----------------------------------------------# Local Shortint I, NLIG Local Integer WRET Local Char VAT(GLONVAT)(3) Local Integer WKIT : # Bug 56680 [M:SOH1]HLDSTA=1 # order holds Raz [M:SOH1]HLDCOD ############################################################# #Modif CRM 01/09/2004 #On détecte s'il y a des lignes relatives à des contrats de service Local Integer ITERSOH4 ITERSOH4 = 0 For ITERSOH4 = 0 To [M:SOH4]NBLIG - 1 If [M:SOH4]CONNUM(ITERSOH4) <> "" Raz [M:SOH4] Break Endif Next ############################################################# GCONSDIA=0 #------------------------------------------------------------------------# # Récupération des paramètres vente du site / de la société # # Chargement globales référenciels, comptes et sections de la société # # -----------------------------------------------------------------------# GFCY = [M:SOH0]SALFCY Call GLOBVAR(GFCY,"VEN") From TRTX3 Gosub CHARG_PARAM : : If GERR=1 OK=0 : Return Endif #Call GETDEV(GFCY) From DEVSUB [M:SOH2]ALLTYP=GALLTYP Call RAZ_CLOB From ACLOB If left$([M:SOH0]SOHTEX1,3)="SOH" Call DUP_CLOB("SOH",[M:SOH0]SOHTEX1,WRET) From TRTX3TEX If WRET<1 Raz [M:SOH0]SOHTEX1 Endif Endif If left$([M:SOH0]SOHTEX2,3)="SOH" Call DUP_CLOB("SOH",[M:SOH0]SOHTEX2,WRET) From TRTX3TEX If WRET<1 Raz [M:SOH0]SOHTEX2 Endif Endif Raz GTARFLG Raz [M:SOH0]SOHNUM, [M:SOH0]REVNUM, [M]PRFNUM If dim([M:SOH1]LNDRTNDAT) > 0 Raz [M:SOH1]LNDRTNDAT If [M:SOH0]SOHCAT=2 [M:SOH1]LNDRTNDAT = addmonth([M:SOH0]ORDDAT,1) Endif Endif # Réalimentation des flags inter-site et inter-société Call ALIBETCPY(2,[M:SOH0]SALFCY,[M:SOH0]BPCORD,GBIDC1,[M:SOH0]POHFCY,[M:SOH0]BPSNUM,[M:SOH1]BETFCY,[M:SOH1]BETCPY) From TRTVENISOC If [M:SOH1]BETFCY=2 # Si commande inter-société, et site achat et fournisseur sont renseignés # --> Alimentation du site d'origine pour déclencher l'automatisme # If [M:SOH0]BPSNUM<>"" & [M:SOH0]POHFCY<>"" # [M:SOH0]ORIFCY=[M:SOH0]SALFCY # Else # Raz [M:SOH0]ORIFCY # Endif # Commande de vente inter-site sans flux automatique [M:SOH0]ORIFCY=[M:SOH0]SALFCY Raz [M:SOH0]CUSORDREF Endif [M:SOH0]ORDDAT=date$ # Initialisation de la date d'expédition avec la date du jour [M:SOH2]SHIDAT=date$ # Contrôle de la date d'expédition avec les périodes d'indisponibilités du site # (Si indisponibilité on ne peut décaler que vers l'avant) Call CTLUVYFCY([M:SOH2]SHIDAT, [M:SOH2]STOFCY, 0) From TRTVENCTL # Calcul de la date de livraison demandée Call CALC_DLVDAT([M:SOH2]SHIDAT, [M:SOH2]DAYLTI, [M:SOH1]BPAADD, [M:SOH0]BPCORD, 0, 0, [M:SOH2]DEMDLVDAT) From TRTVENDAT # Dde 19843 : Test GADJSHIDAT : Globale cachée = 1 : Pas d'ajustement date d'expédition (nvx param en V150) If dim(GADJSHIDAT)>0 & GADJSHIDAT=1 Else # Recadrage si possible de la date d'expédition par rapport à la date de livraison demandée calculée Local Date WSHIDAT : WSHIDAT=[M:SOH2]SHIDAT Call CALC_SHIDAT([M:SOH2]DEMDLVDAT, [M:SOH2]DAYLTI, [M:SOH2]STOFCY, 1, 1, [M:SOH0]ORDDAT, WSHIDAT) From TRTVENDAT Raz GMESSAGE If WSHIDAT<=[M:SOH2]DEMDLVDAT-[M:SOH2]DAYLTI [M:SOH2]SHIDAT=WSHIDAT Endif Endif Raz [M:SOH1]CCLREN, [M:SOH1]CCLDAT #Raz [M:SOH1]CDTSTA : # Pour recalculer l'état crédit Raz [M:SOH2]UNL # 107890 : Scheduled invoices : (LD:14/01/16) If [M:SOH0]SOHCAT=1 [M:SOH3]VCRINVCNDDAT=[M:SOH0]ORDDAT Endif # 107890 : Scheduled invoices : (LD:14/01/16) [M:SOH1]ORDSTA = 1:[M:SOH1]ALLSTA=1:[M:SOH1]DLVSTA=1:[M:SOH1]INVSTA=1 [M:SOH1]OCNPRN = 1 # --> Gestion des signatures : Positionnement flag modif signature [M:SOH1]APPFLG = 1 : GUPDAPPFLG=1 # 94587 : Pb naming convention #Raz [M:SOH0]YAPPFLG : # 89410 : Pb maj encde client en suppression ligne Raz [M:SOH0]OLDAPPFLG # 94587 Raz [M:SOH2]LASDLVNUM, [M:SOH2]LASDLVDAT Raz [M:SOH3]PRFNUM, [M:SOH3]LASINVNUM, [M:SOH3]LASINVDAT Raz [M:SOH3]SQHNUM Raz [M:SOH1]PREOPP # FGR 05/01/2016 : X3SUIVI71065 : en duplication il faut effacer l'affaire d'origine #--CPO 71065 - Code affaire à la ligne (Partie : rajout paramètre société pour contrôle documents mono-affaire) #--Duplication avec paramètre à OUI => si le code affaire de la ligne est <> de celui de l'en-tête, on reprend l'en-tête Call TRAITE_DUPLICATION("[M:SOH1]PJT") From TRTPJT #--/CPO # -- Il faut recalculer les mnt à livrer Raz [M:SOH4]DLRNOT, [M:SOH4]DLRATI # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) Raz [M:SOH4]INRNOT, [M:SOH4]INRATI, [M:SOH4]INRSCHNOT, [M:SOH4]INRSCHATI # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) # ------------------------------------------------- # Issue X3-25616/121617 - 2017-02-21 by FGR : BEGIN Local Integer IACTPJM IACTPJM = func ASYRFNC.ACTIV("PJM") # Issue X3-25616/121617 - 2017-02-21 by FGR : END # ------------------------------------------------- # Issue 121688 # Alimentation des zones en-cours (dépend du tiers risque du client cde et de la devise du clt facture) Call SDCDTSTA("",[M]BPCORD,[M]CHGTYP,0,[M]CUR,[M]ORDDAT,[M]UNL,1,[M]CDTSTA, [M]OST,[M]OSTAUZ) From TRTVENCDT # End issue 121688 For I=0 To [M:SOH4]NBLIG-1 Raz [M:SOH4]UPDFLG(I) Raz [M:SOH4]CREFLG(I) Raz [M:SOH4]DPREOPP(I) # FGR 05/01/2016 : X3SUIVI71065 : en duplication il faut effacer l'affaire d'origine # --> Initialisation des dates [M:SOH4]DSHIDAT(I)=[M:SOH2]SHIDAT [M:SOH4]DDEMDLVDAT(I)=[M:SOH2]DEMDLVDAT If func AFNC.ACTIV("EDIX3") # Ini X3-141143_Duplicate_Sales_order_maxdelivery_date_is_not_updated (JUCON 22/05/19) [M:SOH4]MAXDLVDAT(I)=[M:SOH4]DDEMDLVDAT(I) Endif # End X3-141143_Duplicate_Sales_order_maxdelivery_date_is_not_updated (JUCON 22/05/19) [M:SOH4]DALLTYP(I)=[M:SOH2]ALLTYP # --> date de livraison prevue Call CALC_DLVDAT([M:SOH4]DSHIDAT(I), [M:SOH4]DDAYLTI(I), [M:SOH4]DBPAADD(I), [M:SOH0]BPCORD, 0,0, & [M:SOH4]EXTDLVDAT(I)) From TRTVENDAT Raz GMESSAGE Raz [M:SOH4]ALLQTY(I), [M:SOH4]ALLQTYSTU(I) Raz [M:SOH4]TALLQTY(I), [M:SOH4]TALLQTYSTU(I) Raz [M:SOH4]SHTQTY(I), [M:SOH4]SHTQTYSTU(I) Raz [M:SOH4]WALLQTY(I), [M:SOH4]WALLQTYSTU(I) # Init de la qté à allouer selon paramètre # Bug 72631 : Si pas de gestion des signatures, il faut initialiser la qté à allouer #If GINIALLORD=2 & (GSOHAPPORD=2 & GSOHAPPALL=2) If GINIALLORD=2 & (GAPPSOH<2 | (GSOHAPPORD=2 & GSOHAPPALL=2)) # -- Si Commande non bloquée # Ligne ferme # Article géré en stock ou composé kit/sous-traité # ----> Initialisation de la qté à allouer If [M:SOH1]CDTSTA<>2 & [M]DEMSTA(I)=1 & [M]FMI(I)=1 & ([M]STOMGTCOD(I)<>1 | find([M]LINTYP(I),2,10)) # (Il faut toujours repartir des qté en US pour effectuer les calculs) # --- Qté à allouer = Qté déjà allouée + Reste à allouer Local Decimal WCOEF [M]WALLQTYSTU(I)=[M]QTYSTU(I) WCOEF=1/[M]SAUSTUCOE(I) Call CNVQTY([M]WALLQTYSTU(I),WCOEF,[M]SAU(I),[M]WALLQTY(I)) From TRTVENQTE Endif Endif # Bug 72631 : Pb failure to allocate kit component lines when kit header is allocated ## Bug 56680 : Pb kit géré en ctm ## Si un kit n'est pas à allouer, les composants ne sont pas à allouer #If !find([M]LINTYP(I),3,4,5) # Raz WKIT #Elsif [M]LINTYP(I)=2 # WKIT=I #Elsif [M]WALLQTYSTU(WKIT)=0 # Raz [M]WALLQTYSTU(I), [M]WALLQTY(I) #Endif If [M]LINTYP(I)=2 WKIT=I Elsif !find([M]LINTYP(I),3,4,5) Raz WKIT Elsif [M]WALLQTYSTU(WKIT)=0 Raz [M]WALLQTYSTU(I), [M]WALLQTY(I) Endif # Bug 72631 Raz [M:SOH4]YALLQTY(I), [M:SOH4]YSHTQTY(I) Raz [M:SOH4]LPRQTY(I), [M:SOH4]OPRQTY(I), [M:SOH4]PREQTY(I) Raz [M:SOH4]ODLQTY(I), [M:SOH4]DLVQTY(I), [M:SOH4]INVQTY(I) Raz [M:SOH4]LINREVNUM(I), [M:SOH4]FMINUM(I), [M:SOH4]POPLIN(I) If left$([M:SOH4]SOQTEX(I),3)="SOQ" Call DUP_CLOB("SOQ",[M:SOH4]SOQTEX(I),WRET) From TRTX3TEX If WRET<1 Raz [M:SOH4]SOQTEX(I) Endif Endif Raz [M:SOH4]DETSQHNUM(I), [M:SOH4]SQDLIN(I) # 200515 : Progress billing / X3-199457 : Control on sales order lines associated to a billing plan - 2020-07-16 by LD If dim([M:SOH4]PRGBILNUM)>0 Raz [M:SOH4]PRGBILNUM(I) Endif # 200515 : Progress billing / X3-199457 : Control on sales order lines associated to a billing plan - 2020-07-16 by LD # 200515 : Progress billing / X3-217059 : Blocking control modification on price structure updates on sales order line - 2020-10-06 by LD If dim([M:SOH4]PBILDTOINV) > 0 [M:SOH4]PBILDTOINV(NOL)=1 Endif # 200515 : Progress billing / X3-217059 : Blocking control modification on price structure updates on sales order line - 2020-10-06 by LD [M:SOH4]SOQSTA(I) = 1 Raz [M:SOH4]DCCLREN(I), [M:SOH4]DCCLDAT(I) [M:SOH4]INVFLG(I) = 1 NLIG=I #----------------------------------------------------------------------------# # Recalcul du mnt à liv HT et TTC de la ligne (puisque raz des qtés livrées) # #----------------------------------------------------------------------------# VAT (0) = [M:SOH4]VAT1(I) VAT (1) = [M:SOH4]VAT2(I) VAT (2) = [M:SOH4]VAT3(I) If [M:SOH4]DEMSTA(I) = 1 Gosub CALC_DLR From SUBSOHB : Endif [M:SOH4]DLRNOT += [M:SOH4]LINDLRNOT(I) [M:SOH4]DLRATI += [M:SOH4]LINDLRATI(I) # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) [M:SOH4]INRSCHNOT += [M:SOH4]LININRSCHNOT(I) [M:SOH4]INRSCHATI += [M:SOH4]LININRSCHATI(I) # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) # ------------------------------------------------- # Issue X3-25616/121617 - 2017-02-21 by FGR : BEGIN If IACTPJM Then Raz [M:SOH4]SOQPSONUM(I) Raz [M:SOH4]SOQSEQNUM(I) Endif # Issue X3-25616/121617 - 2017-02-21 by FGR : END # ------------------------------------------------- # Issue X3-244837 by MRDAB If dim([M:SOH4]PCNTNUM) > 0 and [V]GPREFUN = 2 Raz [M:SOH4]PCNTNUM(I) Endif # Issue X3-244837 end Next I # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) # To invoice amount not managed for loan order and intracompany order If [M:SOH0]SOHCAT<>2 & !([M:SOH1]BETFCY=2 & [M:SOH1]BETCPY<=1) [M:SOH4]INRNOT = [M:SOH4]DLRNOT + [M:SOH4]INRSCHNOT [M:SOH4]INRATI = [M:SOH4]DLRATI + [M:SOH4]INRSCHATI Endif # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) # --> Rechargement du code compteur #If [F:TSO]SOHTYP <> [M:SOH0]SOHTYP # FGR 05/10/2015 : X3SUIVI113195 If [F:TSO]SOHTYP <> [M:SOH0]SOHTYP | find([F:TSO]LEG,GCURLEG)<1 # FGR 05/10/2015 : X3SUIVI113195 # FGR 19/11/2012 : X3SUIVI71937 #Read [F:TSO]TSO0 = [M:SOH0]SOHTYP #If fstat Raz [F:TSO] : Call RSTA("TSO", [M:SOH0]SOHTYP) From GLOCK : Endif Local Integer WERR Call LEC_TSO_LEG(GCURLEG,[M:SOH0]SOHTYP,WERR) From TRTLECLEG If WERR Raz [F:TSO] : Call RSTA("TSO", [M:SOH0]SOHTYP) From GLOCK : Endif Endif # 75115 : V7 : Extension of Digital Signature : New field delivery type [M:SOH2]SDHTYP=[F:TSO]SDHTYP GMANCOU=[F:TSO]MANCOU : GCPT=[F:TSO]CODNUM If [F:TSO]CODNUM <> "" GMANCOU=[F:TSO]MANCOU : GCPT=[F:TSO]CODNUM Else #-- Aucun compteur associé au type de commande Call LECTCA(5,WRET) From SUBTCA If fstat | !WRET GERR=1 : GMESSAGE=mess(58,105,1)-mess(5,14,1)-mess(250,199,1) : Return Endif # Compteur : Normale (9) Prêt (10) Facturation directe (11) GMANCOU = [F:TCA]MANCOU([F:TSO]SOHCAT+8) : GCPT = [F:TCA]CODNUM([F:TSO]SOHCAT+8) Endif If dim(GWEBSERV)=1 & GWEBSERV=1 Raz GWEBFOCITMREF, GWEBFOCQTY, GWEBFOCUOM, GWEBFOCMOTIF, GWEBNBGRA Endif Call NTSDUP([M:SOH0]BPCORD,"BPCORD") From TRTNTSCTL # customer notes #------------------------------------------------------------# # Activation/Desactivation des zones en fonction du contexte # #------------------------------------------------------------# Gosub GRIZE_LIENS # FGR 13/01/2014 : X3SUIVI96419 (début) Raz [M:SOH0]NBCON Raz [M:SOH0]CONUMDEL Raz [M:SOH0]CONNUMLIG # FGR 13/01/2014 : X3SUIVI96419 (fin) Affzo [M:SOH0]1-99 Affzo [M:SOH1]1-99 Affzo [M:SOH2]1-99 Affzo [M:SOH3]1-99 Affzo [M:SOH4]1-99 Raz YSQHNUM #------------------------------------------------------------# # Renseignement des unités de répartition # #------------------------------------------------------------# [M:SOH0]DSPWEU = GSALDSPWEU [M:SOH0]DSPVOU = GSALDSPVOU Raz GSOHSUPPLIGDSP :#--CPO 79343 Gosub FREEGROUP_GSOHVCRINVCND From LIBSAL_INVCND_SOH # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management #--Also we have to Raz the differents flags Raz [M:SOH4]DINVCNDISCHG, [M:SOH4]DINVCNDPREV, [M:SOH4]DINVCNDTODEL, [M:SOH4]DINVCNDTOUPD, [M:SOH4]DINVCNDTODIS # End issue 107888 # Issue X3-135076 by ANKUL - drives visibility of fields for PT Signature If func AFNC.ACTIV('KPO') > 0 If dim([M:SOH1]SOHCFMFLG) > 0 and dim([M:SOH0]SOHNUMEND) > 0 and dim([M:SOH1]SOHVALDAT) > 0 Raz [M:SOH1]SOHCFMFLG, [M:SOH0]SOHNUMEND, [M:SOH1]SOHVALDAT Endif Endif # Issue X3-135076 end Gosub RESET_PREP_STA From SUBSOHA1 #Issue X3-246884 by SDEM Return #################################################################### $LIENS Gosub LIENS_SOH If GHISTO=0 # Remise à jour des statuts de la commande Trbegin [SOH] Gosub MAJSTASOH From SUBSOHB # -------------------------------------- # FGR 25/06/2015 : X3SUIVI109125 (début) #Commit If GOK = 0 Then Rollback Else Commit # Note FGR fait dans $LIENS_SOH après Call SDCDTSTA pour ne le faire qu'une seule fois # Issue 110827 - 2015-09-28 by CPO : Obsolete record #--The code before has to be executed (the $LIENS_SOH is called before this actual commit) Read [SOH]= If dim([L]AUPDTICK) > 0 and dim([F]updTick) > 0 Then [L]AUPDTICK = [F:SOH]updTick Endif # End issue 110827 Endif # FGR 25/06/2015 : X3SUIVI109125 (fin) # -------------------------------------- Endif # Gestion de l'état des zones Local Char WSVGGREP(type(GREP)-10) WSVGGREP = GREP : Raz GREP Gosub GRIZE_LIENS GREP = WSVGGREP #------------------------# # affichage icone texte # #------------------------# If [M:SOH0]SOHTEX1 <> "" | [M:SOH0]SOHTEX2 <> "" If !GIMPORT : Call SET_IMAGE (4) From GESECRAN : Endif Else If !GIMPORT : Call RESET_IMAGE (4) From GESECRAN : Endif Endif If [M:SOH4]NBLIG <> 0 & sum([M:SOH4]DETSQHNUM) <> "" For I=0 To [M:SOH4]NBLIG-1 If [M:SOH4]DETSQHNUM(I) <> "" YSQHNUM = [M:SOH4]DETSQHNUM(I) Break Endif Next I Endif ##################################################### # Contrôle de l'incrémentation du cyle de vente des affaires Modif CRM 22/10/2003 ##################################################### Call SETPREOPP("SOH") From SUBOPPB # Remplissage des boites de picking Gosub REMPBOX From SUBSOHC Raz GSOHSUPPLIGDSP :#--CPO 79343 Gosub FREEGROUP_GSOHVCRINVCND From LIBSAL_INVCND_SOH # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management #If GACTX.USER="CPOx" # Infbox "$LIENS Après FREEGROUP : GWFREEHEAP ="-num$(GWFREEHEAP)+"<>"+num$(int(freeheap/1024)) #Endif # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management #--Also we have to Raz the differents flags Raz [M:SOH4]DINVCNDISCHG, [M:SOH4]DINVCNDPREV, [M:SOH4]DINVCNDTODEL, [M:SOH4]DINVCNDTOUPD, [M:SOH4]DINVCNDTODIS # End issue 107888 # User Story X3-46075 Task X3-48218 - 2017-08-17 by CPO : ANALYSIS_FDMA_Display_Quantity_Available_field_on_Sales_Order_line " If !GIMPORT and !GWEBSERV # Issue X3-128239 # If dim([M]WALLTXT)>0 # Raz [M]WALLTXT : Affzo [M]WALLTXT # Endif # If dim([M]WSTKTXT)>0 # Raz [M]WSTKTXT : Affzo [M]WSTKTXT # Endif If dim([M:SOH4]WALLTXT)>0 Raz [M:SOH4]WALLTXT : Affzo [M:SOH4]WALLTXT Endif If dim([M:SOH4]WSTKTXT)>0 Raz [M:SOH4]WSTKTXT : Affzo [M:SOH4]WSTKTXT Endif # End issue X3-128239 Endif # /User Story X3-46075 Task X3-48218 - 2017-08-17 by CPO # Issue X3-135076 by ANKUL - drives visibility of fields for PT Signature Gosub SOHNUMEND_SET_VISIBILITY From SUBSOHA # Issue X3-135076 end Call SHOW_HIDE_PREPAYMENT_INVOICE_FIELDS([M:SOH0]SALFCY) From SUBSOHA1 # Issue X3-243690 by MRDAB Gosub READ_PREPAYMENT_INVOICE_STATUS From SUBSOHA1 # Issue X3-244837 by MRDAB Gosub DISABLE_FIELDS_FOR_INVOICED_PREPAYMENTS From SUBSOHA1 # Issue X3-246053 by MRDAB Return #################################################################### $LIENS_SOH #------------------------------------------------------------------------# # Chargement globales référenciels, comptes et sections de la société # # Chargement des sections analytiques entête du document # # Récupération des paramètres vente du site / de la société # # Réalimentation du cours devise dossier/devise cde # # -----------------------------------------------------------------------# GFCY = [F:SOH]SALFCY #Call GETDEV(GFCY) From DEVSUB Call GLOBVAR(GFCY,"VEN") From TRTX3 Gosub CHARG_PARAM : Raz GERR : Raz GMESSAGE Call CHARG_CCEH("SOH3","NBAXE","SOH") From TRTX3CPT #----------------------------------------------------# # Chargement libellés et formats colonnes tarif # #----------------------------------------------------# #If GACTMUL=2 # Alimentation concernant les colonnes frais/remises en fonction de la structure tarif de la société Call ALICOLREM (1,2,GFLAG,"SOH4",[M:SOH1]CUR,0,[M:SOH0]PLISTC) From TRTPRICE #Else # # Alimentation du format des colonnes frais/remise # Call ALIFORREM (2, GFLAG, "SOH4", 0, [M:SOH1]CUR) From TRTPRICE #Endif # -----------------------------------------------------------------------# # Affichage entêtes colonnes variables (comptes et sections analytiques) # # -----------------------------------------------------------------------# Gosub AFF_TITCOL #--------------------------------------------------# # Init. nbre de postes des elements de facturation # # Init. du tableau des elements de facturation # #--------------------------------------------------# Read [F:BPR]BPR0 = [M]BPCINV If fstat Raz [F:BPR] : Call RSTA("BPR",[M]BPCINV) From GLOCK Endif #----------------------------------# # Alimentation nb axes analytiques # #----------------------------------# #If dim([M:SOH3]NBAXE) > 0 [M:SOH3]NBAXE = GOPTCANA : Endif #----------------------------------------------------# # Récupération du format de saisie des frais/remises # #----------------------------------------------------# #Call FMTREM("SOH4",[M:SOH1]CUR) From TRTPRICE #---------------------------------------------------------# # Lecture Client facture : Alimentation du nom client # # Alimentation de l'en-cours # #---------------------------------------------------------# Read [BPC]BPC0 = [F:SOH]BPCINV If fstat Raz [F:BPC] Call RSTA("BPC",[F:SOH]BPCINV) From GLOCK [F:BPC]CUR = GLOCALDEV Endif Local Integer NBPOSTE NBPOSTE=dim([M:SOH3]INVDTA) Call STRUFOOT (3,"SOH3",NBPOSTE,[F:SOH]CHGTYP,[F:BPC]CUR,[F:SOH]CUR,"NON") From SUBSFIT [M:SOH3]NBFAC = NBPOSTE If [F:SOH]BPINAM(0) <> "" [M:SOH1]BPINAM = [F:SOH]BPINAM(0) Else [M:SOH1]BPINAM = [F:BPC]BPCNAM : Endif # Issue 113254 - 2016-02-15 by CPO : Problème en gestion de l'état crédit des commandes de vente #Dans ce cas il n'y a aucune raison de mettre à jour ce flag. Tout du moins de le passer en dépassement. #-- #Call SDCDTSTA([F:SOH]SOHNUM,[F:SOH]BPCORD,[F:SOH]CHGTYP,0,[F:SOH]CUR,[F:SOH]ORDDAT,[F:SOH]UNL, 2, [M]CDTSTA,[M]OST,[M]OSTAUZ) From TRTVENCDT If [F:SOH]ORDSTA<2 Call SDCDTSTA([F:SOH]SOHNUM,[F:SOH]BPCORD,[F:SOH]CHGTYP,0,[F:SOH]CUR,[F:SOH]ORDDAT,[F:SOH]UNL, 2, [M]CDTSTA,[M]OST,[M]OSTAUZ) From TRTVENCDT Endif # End issue 113254 # -------------------------------------- # FGR 25/06/2015 : X3SUIVI109125 (début) Read [SOH]= If dim([L]AUPDTICK) > 0 and dim([F]updTick) > 0 Then [L]AUPDTICK = [F:SOH]updTick Endif # FGR 25/06/2015 : X3SUIVI109125 (fin) # -------------------------------------- #---------------------------------------------------------# # Lecture Client commande: Alimentation du nom client # # Alimentation du montant mini # # Alimentation du texte commande # #---------------------------------------------------------# GBPCNUM = [F:SOH]BPCORD Read [BPC]BPC0 = [F:SOH]BPCORD If fstat Raz [F:BPC] Call RSTA("BPC",[F:SOH]BPCORD) From GLOCK Endif # Alimentation à partir du modèle d'édition Call ALI_PRTMOD("SOH0",2) From TRTX3 If [M:SOH0]COPNBR=0 [M:SOH0]COPNBR=1 Endif If [F:SOH]BPCNAM(0) <> "" [M:SOH0]BPCNAM = [F:SOH]BPCNAM(0) Else [M:SOH0]BPCNAM = [F:BPC]BPCNAM : Endif Call ALIORDMIN([F:SOH]BPCORD, [F:SOH]CUR, [F:SOH]ORDDAT, [M:SOH0]ORDMINAMT) From TRTVENCDE #---------------------------------------------------------# # Lecture Client livré : Alimentation du nom client # #---------------------------------------------------------# If [F:BPD]BPCNUM<>[F:SOH]BPCORD | [F:BPD]BPAADD<>[F:SOH]BPAADD Read [BPD]BPD0 = [F:SOH]BPCORD;[F:SOH]BPAADD If fstat Raz [F:BPD]: Call RSTA("BPD",[F:SOH]BPCORD) From GLOCK Endif Endif If [F:SOH]BPDNAM(0) <> "" [M:SOH1]BPDNAM = [F:SOH]BPDNAM(0) Else [M:SOH1]BPDNAM = [F:BPD]BPDNAM : Endif #---------------------------# # Alimentation des adresses # #---------------------------# Raz [M:ADB1], [M:ADB2], [M:ADB3] [M:ADB1]BPAADD = [F:SOH]BPAORD [M:ADB1]ADBBPR = [F:SOH]BPCORD [M:ADB1]BPRNAM(0) = [F:SOH]BPCNAM(0) [M:ADB1]BPRNAM(1) = [F:SOH]BPCNAM(1) [M:ADB1]BPAADDLIG(0) = [F:SOH]BPCADDLIG(0) [M:ADB1]BPAADDLIG(1) = [F:SOH]BPCADDLIG(1) [M:ADB1]BPAADDLIG(2) = [F:SOH]BPCADDLIG(2) [M:ADB1]POSCOD = [F:SOH]BPCPOSCOD [M:ADB1]CTY = [F:SOH]BPCCTY [M:ADB1]SAT = [F:SOH]BPCSAT [M:ADB1]CRY = [F:SOH]BPCCRY [M:ADB1]CRYNAM = [F:SOH]BPCCRYNAM [M:ADB1]CNTNAM = [F:SOH]CNTNAM #If [F:SOH]BPCORD = [F:SOH]BPCINV & dim([M:ADB1]EECNUM)>0 # [M:ADB1]EECNUM = [F:SOH]BPIEECNUM #Endif If [M:ADB1]BPRNAM <> "" | [M:ADB1]BPAADDLIG <> "" | & [M:ADB1]POSCOD <> "" | [M:ADB1]CTY <> "" | & [M:ADB1]SAT <> "" | & [M:ADB1]CRY <> "" | [M:ADB1]CRYNAM <> "" [M:ADB1]ADBFLG = 3 Else [M:ADB1]ADBFLG = 0 Endif # Alimentation code adresse (client livré) dans [M:ADB2] pour saisie adresse libre If dim([M:ADB2]BPAADD) > 0 [M:ADB2]BPAADD = [F:SOH]BPAADD Endif [M:ADB2]ADBBPR = [F:SOH]BPCORD [M:ADB2]BPRNAM(0) = [F:SOH]BPDNAM(0) [M:ADB2]BPRNAM(1) = [F:SOH]BPDNAM(1) [M:ADB2]BPAADDLIG(0) = [F:SOH]BPDADDLIG(0) [M:ADB2]BPAADDLIG(1) = [F:SOH]BPDADDLIG(1) [M:ADB2]BPAADDLIG(2) = [F:SOH]BPDADDLIG(2) [M:ADB2]POSCOD = [F:SOH]BPDPOSCOD [M:ADB2]CTY = [F:SOH]BPDCTY [M:ADB2]SAT = [F:SOH]BPDSAT [M:ADB2]CRY = [F:SOH]BPDCRY [M:ADB2]CRYNAM = [F:SOH]BPDCRYNAM [M:ADB2]CNTNAM = [F:SOH]CNDNAM #If [F:SOH]BPCORD = [F:SOH]BPCINV & dim([M:ADB2]EECNUM)>0 # [M:ADB2]EECNUM = [F:SOH]BPIEECNUM #Endif If [M:ADB2]BPRNAM <> "" | [M:ADB2]BPAADDLIG <> "" | & [M:ADB2]POSCOD <> "" | [M:ADB2]CTY <> "" | & [M:ADB2]SAT <> "" | & [M:ADB2]CRY <> "" | [M:ADB2]CRYNAM <> "" [M:ADB2]ADBFLG = 3 Else [M:ADB2]ADBFLG = 0 Endif #LTA.sn If dim([M:ADB2]ADRVAL) > 0 and dim([F:SOH]ADRVAL) > 0 [M:ADB2]ADRVAL = [F:SOH]ADRVAL Endif Gosub SHOW_HIDE_ENTCOD From TRTADRLIB #LTA.en [M:ADB3]BPAADD = [F:SOH]BPAINV [M:ADB3]ADBBPR = [F:SOH]BPCINV [M:ADB3]BPRNAM(0) = [F:SOH]BPINAM(0) [M:ADB3]BPRNAM(1) = [F:SOH]BPINAM(1) [M:ADB3]BPAADDLIG(0) = [F:SOH]BPIADDLIG(0) [M:ADB3]BPAADDLIG(1) = [F:SOH]BPIADDLIG(1) [M:ADB3]BPAADDLIG(2) = [F:SOH]BPIADDLIG(2) [M:ADB3]POSCOD = [F:SOH]BPIPOSCOD [M:ADB3]CTY = [F:SOH]BPICTY [M:ADB3]SAT = [F:SOH]BPISAT [M:ADB3]CRY = [F:SOH]BPICRY [M:ADB3]CRYNAM = [F:SOH]BPICRYNAM [M:ADB3]CNTNAM = [F:SOH]CNINAM #If dim([M:ADB3]EECNUM)>0 # [M:ADB3]EECNUM = [F:SOH]BPIEECNUM #Endif If [M:ADB3]BPRNAM <> "" | [M:ADB3]BPAADDLIG <> "" | & [M:ADB3]POSCOD <> "" | [M:ADB3]CTY <> "" | & [M:ADB3]SAT <> "" | & [M:ADB3]CRY <> "" | [M:ADB3]CRYNAM <> "" [M:ADB3]ADBFLG = 3 Else [M:ADB3]ADBFLG = 0 Endif #If [M:ADB3]ADBFLG=0 : # Bug 67868 If [M:ADB3]ADBFLG=0 & [M:ADB3]BPAADD="" : # Bug 67868 # Aucune adresse chargée pour le client facture # --> Essai de récup. du code adresse dans la fiche client commande If [M:SOH1]BPCINV=[F:BPC]BPCINV [M:ADB3]BPAADD=[F:BPC]BPAINV : Endif Endif # Alimentation pays client livré pour affichage et ctrl n°identification CEE If [M:ADB2]CRY<>"" [M:SOH0]EECNUMCRY=[M:ADB2]CRY Else If [F:BPA]BPATYP<>1 | [F:BPA]BPANUM<>[F:SOH]BPCORD | [F:BPA]BPAADD<>[F:SOH]BPAADD Read [BPA]BPA0=1;[F:SOH]BPCORD;[F:SOH]BPAADD If fstat Raz [F:BPA] Endif Endif [M:SOH0]EECNUMCRY=[F:BPA]CRY Endif # X3-101236 (LCC-26/07/18) Control "EU VAT no" # The country can be the country of the ship to customer or the country of the bill to customer Local Char WDUMMY(20) Call INIEECNUM ([M:SOH0]BPCORD,[M:SOH1]BPAADD,[M:SOH1]BPCINV,WDUMMY,[M:SOH0]EECNUMCRY) From TRTVENDIV # end X3-101236 (LCC-26/07/18) Control "EU VAT no" Raz GREV If GFONC1="GESSOH" Call RAZ_CLOB From ACLOB Endif #--- # GCONSDIA est positionné en AVTBOUT et dépositionné en STATUT et EXEBOUT # Içi c'est trop tôt à cause du bouton supprimer qui utilise GCONSDIA # Or la suppress. d'une cde soldée doit être possible ! #--- # Pour visu des textes si commande soldée #If [F:SOH]ORDSTA=2 # GCONSDIA=1 #Else # GCONSDIA=0 #Endif Raz GTARFLG GUPDAPPFLG=1 # 94587 : Pb naming convention #[M:SOH0]YAPPFLG=[F:SOH]APPFLG : # Bug 89410 [M:SOH0]OLDAPPFLG=[F:SOH]APPFLG # 94587 # 107890 : Scheduled invoices : (LD:14/01/16) If [M:SOH0]SOHCAT=1 & [M:SOH3]VCRINVCNDDAT=[0/0/0] [M:SOH3]VCRINVCNDDAT=[M:SOH0]ORDDAT Endif # 107890 : Scheduled invoices : (LD:14/01/16) # Chargement des lignes dans le tableau Gosub LIENS From TABLEAUX If dim(GWEBSERV)=1 & GWEBSERV=1 Raz GWEBFOCITMREF, GWEBFOCQTY, GWEBFOCUOM, GWEBFOCMOTIF, GWEBNBGRA # Bug 57682 If !clalev([F:TXC]) Local File TEXCLOB [TXC] : Endif If [M:SOH0]SOHTEX1<>"" Read [TXC] TXC0=[M:SOH0]SOHTEX1 If !fstat [M:ACL1]CLOB=[F:TXC]TEXTE : [M:ACL1]CLOBSVG=[F:TXC]TEXTE Call RANGE_CLOB([F:TXC]TEXTE,[M:SOH0]SOHTEX1,[L]WRET) From ACLOB If STAT=1 Call ERREUR(mess(215,126,1)-"("+num$(GCLOMEM)-"Ko)") From GESECRAN Endif Endif Endif If [M:SOH0]SOHTEX2<>"" Read [TXC] TXC0=[M:SOH0]SOHTEX2 If !fstat [M:ACL2]CLOB=[F:TXC]TEXTE : [M:ACL2]CLOBSVG=[F:TXC]TEXTE Call RANGE_CLOB([F:TXC]TEXTE,[M:SOH0]SOHTEX2,[L]WRET) From ACLOB If STAT=1 Call ERREUR(mess(215,126,1)-"("+num$(GCLOMEM)-"Ko)") From GESECRAN Endif Endif Endif # Bug 57682 Endif Gosub MANHLD_LIENS From MANHLDLIB # order holds Return #################################################################### $GRIZE_LIENS #------------------------------------------------------------# # Activation/Desactivation des zones en fonction du contexte # #------------------------------------------------------------# # FGR 23/11/2011 : X3SUIVI71065 (début) If GPJTSNGDOC = G_NON Then Call PJT_MODFCY([M:SOH0]SALFCY, "[M:SOH4]DPJT") From TRTPJT Endif # FGR 23/11/2011 : X3SUIVI71065 (fin) # Issue X3-135076 by ANKUL If [M:SOH1]ORDSTA = 2 # Issue X3-135076 end Diszo [M:SOH0]1-99 Diszo [M:SOH1]1-99 Diszo [M:SOH2]1-99 # 107888 : Scheduled invoices : (LD:19/12/16) #Diszo [M:SOH3]5,15,25 Diszo [M:SOH3]5,10,15,25 # 107888 : Scheduled invoices : (LD:19/12/16) If dim ([M:SOH3]CCE) > 0 Diszo [M:SOH3]CCE Endif # Commande modifiable (uniquement rajout de ligne) # si toute les lignes sont associées à des contrats de service If find("",[M:SOH4]CONNUM(0..[M:SOH4]NBLIG-1)) Diszo [M:SOH4]1-99 Else Actzo [M:SOH4]5 Diszo [M:SOH4]10,15,20 Endif Actzo [M:SOH0]SOHNUM Return Else Actzo [M:SOH0]1-99 Actzo [M:SOH1]1-99 Actzo [M:SOH2]1-99 Actzo [M:SOH3]1-99 Actzo [M:SOH4]1-99 Actzo [M:SOH4]DBPAADD, DEMSTA # FGR 17/02/2014 : X3SUIVI96448 : ça ne les réactive pas sur la première ligne ! Endif # 107888 : Scheduled invoices : (LD:27/05/16) #If [M:SOH0]SOHCAT = 3 If [M:SOH0]SOHCAT = 3 | ([M:SOH0]SOHCAT = 1 & sum([M:SOH4]DLVFLG) = [M:SOH4]NBLIG) # --> Commande à facturation directe # --> Commande normale et aucune ligne livrable # On grize les infos livraisons, elles n'ont pas de signification # 107888 : Scheduled invoices : (LD:27/05/16) Grizo [M:SOH1]DLVSTA Grizo [M:SOH2]LASDLVDAT, LASDLVNUM Else Diszo [M:SOH2]LASDLVNUM Endif # 107890 : Scheduled invoices : (LD:08/12/15) # Invoicing condition managed only for Normal order If [M:SOH0]SOHCAT<>1 Diszo [M:SOH3]INVCND Diszo [M:SOH3]VCRINVCNDDAT Else Actzo [M:SOH3]INVCND Actzo [M:SOH3]VCRINVCNDDAT Endif # 107890 : Scheduled invoices : (LD:08/12/15) If dim([M:SOH1]LNDRTNDAT) > 0 & [M:SOH0]SOHCAT <> 2 Grizo [M:SOH1]LNDRTNDAT Endif # Commande inter-site générée à partir d'une commande d'achat If [M:SOH1]BETFCY = 2 & [M:SOH0]ORIFCY<>"" & [M:SOH0]ORIFCY<>[M:SOH0]SALFCY Diszo [M:SOH0]CUSORDREF Diszo [M:SOH1]BPCINV, BPCPYR, BPAADD : # Coe on ne répercute rien sur la cde d'achat, on bloque la modif Diszo [M:SOH4]DBPAADD, DEMSTA : # Coe on ne répercute rien sur la cde d'achat, on bloque la modif Endif If [M:SOH1]BETFCY = 2 & [M:SOH1]BETCPY <= 1 Grizo [M:SOH1]BPCINV, BPCPYR : Endif # Bug 59281 : En webservice, le n°commande doit tjs être saisissable If find (GREP, "C", "D") & GMANCOU=1 & (dim(GWEBSERV)<1 | GWEBSERV=0) Diszo [M:SOH0]SOHNUM : Endif If GREP <> "C" Diszo [M:SOH0]SOHTYP, SALFCY : Endif If !find (GREP, "C", "D") Diszo [M:SOH0]BPCORD Endif If !find(GREP,"C","D") Diszo [M:SOH1]CUR Elsif GUPDCUR=1 Call CONTDEV([M:SOH1]CUR,[M:SOH0]ORDDAT) From TRTDEV If !mkstat Diszo [M:SOH1]CUR Endif Raz GMESSAGE : mkstat=0 Endif If !find(GREP,"C","D") | GNOTATI=1 Diszo [M:SOH1]PRITYP Endif If [M:SOH2]DME = 3 # Diszo [M:SOH2]STOFCY Diszo [M:SOH4]DBPAADD, DSTOFCY, DDLVPIO, DDRN, DMDL, DBPTNUM Endif If [M:SOH1]DLVSTA > 1 Diszo [M:SOH1]BPCINV Diszo [M:SOH2]ODL, DME Diszo [M:SOH3]IME Endif # Désactivation de la condition de paiement # --> Si commande partiellement facturée If [M:SOH1]INVSTA > 1 Diszo [M:SOH3]PTE Endif If !find(GREP,"C","D") # --> Si la commande existe et des acomptes ont été réglés Local Integer WOK : WOK=1 Call ACOMPTES(5,3,[M:SOH0]SOHNUM,[M:SOH4]NBLIG,[M:SOH3]PTE,[M:SOH0]ORDDAT,[M:SOH4]ORDINVNOT,[M:SOH4]ORDINVATI, & [M:SOH0]CUR,0,"","","",1,WOK) From TRTTPT If WOK=0 Diszo [M:SOH3]PTE : Raz GMESSAGE, GERR Endif Endif # B13099 #If find (3, [M:SOH4]SOQSTA(0..[M:SOH4]NBLIG-1)) <> 0 # Diszo [M:SOH2]ORDCLE #Endif #If sum([M:SOH4]ALLQTY, [M:SOH4]SHTQTY, [M:SOH4]WALLQTY) <> 0 If sum([M:SOH4]ALLQTY, [M:SOH4]SHTQTY) <> 0 Diszo [M:SOH2]ALLTYP : Endif # Issue 112736 # If we want to import SQHNUM the field has to be enterable #Diszo [M:SOH3]PRFNUM,LASINVNUM,SQHNUM If !GIMPORT Diszo [M:SOH3]PRFNUM,LASINVNUM,SQHNUM Endif # End issue 112736 If GLINREP=1 If dim([M:SOH4]REP1) > 0 Diszo [M:SOH4]REP1, REPRAT1 Endif If dim([M:SOH4]REP2) > 0 Diszo [M:SOH4]REP2, REPRAT2 Endif Endif If GLINBPD = 1 Diszo [M:SOH4]DBPAADD Endif If GCDTUNL=1 Diszo [M:SOH2]UNL Endif If GPRIMOD=1 Diszo [M:SOH4]GROPRI If dim([M:SOH4]DISCRGVAL1) > 0 Diszo [M:SOH4]DISCRGVAL1 Endif If dim([M:SOH4]DISCRGVAL2) > 0 Diszo [M:SOH4]DISCRGVAL2 Endif If dim([M:SOH4]DISCRGVAL3) > 0 Diszo [M:SOH4]DISCRGVAL3 Endif If dim([M:SOH4]DISCRGVAL4) > 0 Diszo [M:SOH4]DISCRGVAL4 Endif If dim([M:SOH4]DISCRGVAL5) > 0 Diszo [M:SOH4]DISCRGVAL5 Endif If dim([M:SOH4]DISCRGVAL6) > 0 Diszo [M:SOH4]DISCRGVAL6 Endif If dim([M:SOH4]DISCRGVAL7) > 0 Diszo [M:SOH4]DISCRGVAL7 Endif If dim([M:SOH4]DISCRGVAL8) > 0 Diszo [M:SOH4]DISCRGVAL8 Endif If dim([M:SOH4]DISCRGVAL9) > 0 Diszo [M:SOH4]DISCRGVAL9 Endif Endif If dim([M:SOH4]ORDINVATI)>0 : Diszo [M:SOH4]ORDINVATI : Endif # FGR 23/11/2011 : X3SUIVI71065 (début) If GPJTSNGDOC = G_OUI Then Call PJT_MODFCY([M:SOH0]SALFCY, "[M:SOH4]DPJT") From TRTPJT Endif # FGR 23/11/2011 : X3SUIVI71065 (fin) # Remise à blc des msgs qu'on aurait pu mettre en bas d'écran (kit non gere en stock par ex) GERR=4: GMESSAGE=" " Gosub MANHLD_LIENS From MANHLDLIB # order holds # 78411 Sage Exchange If func AFNC.ACTIV("SEPP") If func SEPPLIB.SEPP_DOC([M:SOH3]PTE) [M:SOH2]ODL = 2 : [M:SOH3]IME = 1 Affzo [M:SOH2]ODL : Affzo [M:SOH3]IME Grizo [M:SOH2]ODL : Grizo [M:SOH3]IME Else Actzo [M:SOH2]ODL : Actzo [M:SOH3]IME Endif Endif Gosub SHOW_HIDE_ENTCOD From TRTADRLIB #109528.n #101380 Call SETUP_SSTFIELDS Return #################################################################### $LIENS_LIG Local Shortint NOL, NLIG Local Char VAT(GLONVAT)(3) Local Decimal WQTY #-------------------------------------# # Lecture de l'enregistrement SORDERQ # #-------------------------------------# NOL=nolign-1 # FGR 24/07/2015 : X3SUIVI109796 : Optimisation (début) plus la peine on a fait un link #Read [SOQ]SOQ0=[F:SOP]SOHNUM;[F:SOP]SOPLIN;[F:SOP]SOPSEQ #If fstat <> 0:Raz [F:SOQ]:Endif # FGR 24/07/2015 : X3SUIVI109796 : Optimisation (fin) plus la peine on a fait un link #---------------------------------------------------------# # Lecture article-vente pour chargement flag ctm # #---------------------------------------------------------# # FGR 28/07/2015 : X3SUIVI108078 : Ajout de [F:ITS] (début) #If [F:ITS]ITMREF <> [F:SOP]ITMREF # Read [F:ITS]ITS0 = [F:SOP]ITMREF # If fstat Raz [F:ITS] : Call RSTA ("ITS",[F:SOP]ITMREF) From GLOCK : Endif #Endif # FGR 28/07/2015 : X3SUIVI108078 : Ajout de [F:ITS] (fin) # FGR 10/11/2015 : X3SUIVI108078 (début) TEST [ITS] If [F:ITS]ITMREF <> [F:SOP]ITMREF Then Call MESSAGE(func AFNC.MES1(mess(435,192,1), [F:SOP]ITMREF)) From GESECRAN Endif # FGR 10/11/2015 : X3SUIVI108078 (fin) TEST [ITS] [M:SOH4]CTMFLG(NOL) = [F:ITS]CTMFLG : # Bug 55476 # 107890 : Scheduled invoices : (LD:14/01/16) If [M:SOH4]DLVFLG(NOL)=0 [M:SOH4]DLVFLG(NOL)=[F:ITM]DLVFLG Endif # 107890 : Scheduled invoices : (LD:14/01/16) # Bug 55476 : Init. flag géré en stock #------------------------------------------------------------# # Lecture article pour chargement flag géré en stock origine # #------------------------------------------------------------# # FGR 24/07/2015 : X3SUIVI109796 : Optimisation (début) plus la peine on a fait un link #If [F:ITM]ITMREF <> [F:SOP]ITMREF # Read [F:ITM]ITM0 = [F:SOP]ITMREF # If fstat Raz [F:ITM] : Call RSTA ("ITM",[F:SOP]ITMREF) From GLOCK : Endif #Endif # FGR 24/07/2015 : X3SUIVI109796 : Optimisation (fin) plus la peine on a fait un link [M:SOH4]YSTOMGTCOD(NOL) = [F:ITM]STOMGTCOD If [F:ITM]STOMGTCOD>1 If [F:ITF]ITMREF<>[F:SOP]ITMREF | [F:ITF]STOFCY<>[F:SOP]STOFCY Read [ITF] ITF0=[F:SOP]ITMREF;[F:SOP]STOFCY If fstat Raz [F:ITF] : Endif Endif If [F:ITF]STOMGTCOD>0 [M:SOH4]YSTOMGTCOD(NOL) = [F:ITF]STOMGTCOD Endif Endif #---------------------------------------------# # Alimentation de l'écran à partir de SORDERP # #---------------------------------------------# [M:SOH4]DBPAADD(NOL) = [F:SOP]BPAADD [M:SOH4]VAT1(NOL) = [F:SOP]VAT(0) [M:SOH4]VAT2(NOL) = [F:SOP]VAT(1) [M:SOH4]VAT3(NOL) = [F:SOP]VAT(2) [M:SOH4]VACITM1(NOL) = [F:SOP]VACITM(0) [M:SOH4]VACITM2(NOL) = [F:SOP]VACITM(1) [M:SOH4]VACITM3(NOL) = [F:SOP]VACITM(2) [M:SOH4]DINVCND(NOL) = [F:SOP]INVCND : # 107890 : Scheduled invoices : (LD:08/12/15) If dim([M:SOH4]SSTCOD(NOL)) >0: [M:SOH4]SSTCOD(NOL) = [F:SOP]SSTCOD :Endif #101380.n If dim([M:SOH4]TSICOD1(NOL))>0: [M:SOH4]TSICOD1(NOL) = [F:SOP]TSICOD(0):Endif If dim([M:SOH4]TSICOD2(NOL))>0: [M:SOH4]TSICOD2(NOL) = [F:SOP]TSICOD(1):Endif If dim([M:SOH4]TSICOD3(NOL))>0: [M:SOH4]TSICOD3(NOL) = [F:SOP]TSICOD(2):Endif If dim([M:SOH4]TSICOD4(NOL))>0: [M:SOH4]TSICOD4(NOL) = [F:SOP]TSICOD(3):Endif If dim([M:SOH4]TSICOD5(NOL))>0: [M:SOH4]TSICOD5(NOL) = [F:SOP]TSICOD(4):Endif [M:SOH4]DETSQHNUM(NOL)= [F:SOP]SQHNUM [M:SOH4]WUPDAPPFLG(NOL) = 1 #----- Chargement sections analytiques -----# Call CHARG_CCE("SOH4",NOL,"SOP",0,[F:SOP]SOHNUM,[F:SOP]SOPLIN,[F:SOP]SOPSEQ,"") From TRTX3CPT #---------------------------------------------# # Alimentation de l'écran à partir de SORDERQ # #---------------------------------------------# [M:SOH4] = [F:SOQ] #Endif [M]DPJT(NOL) = [F:SOQ]PJT : # 71065 : PJT [M]DSTOFCY(NOL) = [F:SOQ]STOFCY [M]DDLVPIO(NOL) = [F:SOQ]DLVPIO [M]DBPTNUM(NOL) = [F:SOQ]BPTNUM [M]DMDL(NOL) = [F:SOQ]MDL [M]DDRN(NOL) = [F:SOQ]DRN [M]DDAYLTI(NOL) = [F:SOQ]DAYLTI [M]DDEMDLVDAT(NOL) = [F:SOQ]DEMDLVDAT [M]DSHIDAT(NOL) = [F:SOQ]SHIDAT [M]DALLTYP(NOL) = [F:SOQ]ALLTYP [M]DCCLREN(NOL) = [F:SOQ]CCLREN [M]DCCLDAT(NOL) = [F:SOQ]CCLDAT [M]GRPFLG(NOL)=1 # --- Alimentation des zones de sauvegarde Raz [M]WIPFLG(NOL) [M]YQTY(NOL) = [M]QTY(NOL) [M]CQTY(NOL) = [M]QTY(NOL) [M]YALLQTY(NOL) = [M]ALLQTY(NOL) [M]YSHTQTY(NOL) = [M]SHTQTY(NOL) [M]YSOQSTA(NOL) = [M]SOQSTA(NOL) [M]YDSHIDAT(NOL) = [M]DSHIDAT(NOL) # Issue X3-200515/X3-220171 - 2020-11-18 by SR : Save the prvious net price [M]YNETPRI(NOL) = [M]NETPRI(NOL) # End issue X3-200515/X3-220171 # --- Calcul du total alloué [M]TALLQTYSTU(NOL) = [F:SOQ]ALLQTYSTU + [F:SOQ]ODLQTYSTU + [F:SOQ]OPRQTYSTU + [F:SOQ]PREQTYSTU [M]TALLQTY(NOL) = [F:SOQ]ALLQTY + [F:SOQ]ODLQTY + [F:SOQ]OPRQTY + [F:SOQ]PREQTY # 107888 : Scheduled invoices : (LD:19/05/16) #If [M:SOH0]SOHCAT = 3 If [M:SOH0]SOHCAT = 3 | [M]DLVFLG(NOL)=1 # Commande à facturation directe # Commande normale et ligne non livrable # 107888 : Scheduled invoices : (LD:19/05/16) [M]TALLQTYSTU(NOL) += [F:SOQ]INVQTYSTU [M]TALLQTY(NOL) += [F:SOQ]INVQTY Else [M]TALLQTYSTU(NOL) += [F:SOQ]DLVQTYSTU [M]TALLQTY(NOL) += [F:SOQ]DLVQTY Endif # --- Qté à allouer = Qté déjà allouée [M]WALLQTY(NOL) = [F:SOQ]ALLQTY + [F:SOQ]SHTQTY [M]WALLQTYSTU(NOL) = [F:SOQ]ALLQTYSTU + [F:SOQ]SHTQTYSTU Gosub CALC_DLBQTYSTU #---------------------------------------------# # Calcul du montant HT et TTC de la ligne # # Calcul du mnt à liv HT et TTC de la ligne # #---------------------------------------------# VAT (0) = [F:SOP]VAT(0) VAT (1) = [F:SOP]VAT(1) VAT (2) = [F:SOP]VAT(2) NLIG=NOL : Gosub CALC_ORD From SUBSOHB If [F:SOQ]DEMSTA = 1 Gosub CALC_DLR From SUBSOHB : Endif # V6 Règle affectation If dim([M:SOH4]PTOCOD)>0 [M:SOH4]PTOCOD(NOL) = func ITMLIB.GET_PTOCOD([M:SOH4]ITMREF(NOL),[M:SOH4]DSTOFCY(NOL)) Endif # FGR 13/02/2014 : X3SUIVI96419 (début) : on mémorise tous les contrats de la commande If [M:SOH4]CONNUM(NOL) <> "" Then [M:SOH0]CONUMDEL([M:SOH0]NBCON) = [M:SOH4]CONNUM(NOL) [M:SOH0]CONNUMLIG([M:SOH0]NBCON) = [M:SOH4]SOPLIN(NOL) [M:SOH0]NBCON += 1 Endif # FGR 13/02/2014 : X3SUIVI96419 (fin) # Issue X3-200515/X3-208171 - 2020-09-07 by SR : Progress billing : Calculation of the minimum amount If dim([M:SOH4]PRGBILNUM) > 0 & [M:SOH4]PRGBILNUM(NOL) <> "" # 200515 : Progress billing / X3-217059 : Blocking control modification on price structure updates on sales order line - 2020-10-06 by LD #[M:SOH4]WPRGMINAMT(NOL) = func LIBSAL_INVCND_SOH.C_AMT_PRGBILNUM([F:SOQ]INVAMT,[M:SOH4]PRGBILNUM(NOL)) #[M:SOH4]WPRGMINAMT(NOL) = arr([M:SOH4]WPRGMINAMT(NOL), 10^-GDECPRI) # The amount line can't be less than the scheduled invoices already invoiced amount [M:SOH4]WPRGMINAMT(NOL) = [F:SOQ]INVAMT # Init working flag that indicates if, for the sales order line, there is scheduled invoices linked to a billing situation not invoiced # PJM is activated and the sales order line is linked to a billing plan [M:SOH4]PBILDTOINV(NOL)=1 If func LIBSAL_INVCND_SOH.VERF_SVICD_PRGBILINV([M:SOH0]SOHNUM,[M]SOPLIN(NOL),[M]SOPLIN(NOL),GMESSAGE) = [V]CST_AERROR # [V]CST_AERROR if there is at least one scheduled invoices linked to a billing situation not invoiced [M:SOH4]PBILDTOINV(NOL)=2 Endif Elsif dim([M:SOH4]PRGBILNUM) > 0 [M:SOH4]PBILDTOINV(NOL)=1 # 200515 : Progress billing / X3-217059 : Blocking control modification on price structure updates on sales order line - 2020-10-06 by LD Endif # End issue X3-200515/X3-208171 Return $CALC_DLBQTYSTU #------------------------------------------------------------------------# # Si kit : Calcul de la qté livrable au niveau du kit # #------------------------------------------------------------------------# Raz [M]DLBQTYSTU (NOL) # Si kit/sous-traité, sauvegarde de l'indice du kit et de la qté cdée pour calcul qté livrable If find([M]LINTYP(NOL),2,10) Local Integer WKIT_NOL : WKIT_NOL=NOL Local Decimal WKIT_QTYSTU : Raz WKIT_QTYSTU # If [M]STOMGTCOD(NOL)=1 & [M]ALLQTYSTU(NOL)<>0 If [M]ALLQTYSTU(NOL)<>0 WKIT_QTYSTU=[M]QTYSTU(NOL) [M]DLBQTYSTU(NOL)=[M]ALLQTYSTU(NOL) Endif Endif # Si composant de kit/sous-traité en rupture, calcul de la qté livrable pour le kit # --- Qté livrable = Qté allouée du kit - Qté Rupture ramenée au niveau kit If find([M]LINTYP(NOL), 3,4,5,11,12,13) & dim(WKIT_QTYSTU)>0 & WKIT_QTYSTU<>0 & [M]SHTQTYSTU(NOL)>0 Local Decimal WRAPPORT : WRAPPORT=WKIT_QTYSTU / [M]QTYSTU(NOL) Local Decimal WDLBQTYSTU : WDLBQTYSTU=[M]WALLQTYSTU(WKIT_NOL)-arr([M]SHTQTYSTU(NOL)*WRAPPORT,0.000001) If WDLBQTYSTU<[M]DLBQTYSTU(WKIT_NOL) [M]DLBQTYSTU(WKIT_NOL)=WDLBQTYSTU Endif Endif Return #################################################################### $INICRE_LIG Local Shortint NOL : NOL=nolign-1 #--------------------------------# # Avant le Write de la ligne SOP # #--------------------------------# Raz [F:SOQ] [F:SOP]SOHNUM = [M:SOH0]SOHNUM [F:SOP]SOPSEQ = [F:SOP]SOPLIN [F:SOP]ENDDAT = [F:SOH]ORDDAT [F:SOP]SOHCAT = [F:SOH]SOHCAT [F:SOP]SALFCY = [F:SOH]SALFCY [F:SOP]BPCINV = [F:SOH]BPCINV [F:SOP]BPCORD = [M:SOH0]BPCORD [F:SOP]LINREVNUM = [M:SOH0]REVNUM [F:SOQ]DSPWEU = [M:SOH0]DSPWEU [F:SOQ]DSPVOU = [M:SOH0]DSPVOU Gosub CHARGESOP # En Import, permet la maj des champs affichés et invisibles If GIMPORT & dim(G_TRTIMPORT)>0 # A ne pas effectuer pour les lignes générées automatiquement If (find([M]LINTYP(NOL),1,2,6,10) & [M]FOCFLG(NOL)<>3) Gosub ACTION From =G_TRTIMPORT : Endif Endif Return #################################################################### $INICRE_SOQ #--------------------------------# # Avant le Write de la ligne SOQ # #--------------------------------# ## --> Il faut raz les zones non gérées à l'écran (pour la dupplication) #Raz [F:SOQ]SDHNUM,[F:SOQ]SDDLIN : # N° et ligne livraison #Raz [F:SOQ]DEMNUM : # N° ordre #Raz [F:SOQ]DLVQTYSTU, [F:SOQ]ODLQTYSTU, [F:SOQ]INVQTYSTU #Raz [F:SOQ]FMILIN, [F:SOQ]FMISEQ #Raz [F:SOQ]POHNUM, [F:SOQ]POQSEQ #Raz [F:SOQ] : # (LD-30/03/04-Bug 21944) [F:SOQ]BPCORD = [F:SOP]BPCORD [F:SOQ]ITMREF = [F:SOP]ITMREF [F:SOQ]ORDDAT = [F:SOH]ORDDAT [F:SOQ]SALFCY = [F:SOH]SALFCY [F:SOQ]SOHCAT = [F:SOH]SOHCAT [F:SOQ]CREUSR = [F:SOP]CREUSR [F:SOQ]CREDAT = [F:SOP]CREDAT [F:SOQ]INVFLG = 1 [F:SOQ]ORIQTY = [M:SOH4]QTY(NOL) Gosub CHARGESOQ [F:SOQ]SOHNUM = [F:SOP]SOHNUM [F:SOQ]SOPLIN = [F:SOP]SOPLIN [F:SOQ]SOQSEQ = [F:SOP]SOPSEQ Return #################################################################### $INIMOD_LIG #----------------------------------# # Avant le Rewrite de la ligne SOP # #----------------------------------# [F:SOP]SOHCAT = [F:SOH]SOHCAT [F:SOP]SALFCY = [F:SOH]SALFCY [F:SOP]BPCINV = [F:SOH]BPCINV Gosub CHARGESOP # En Import, permet la maj des champs affichés et invisibles If GIMPORT & dim(G_TRTIMPORT)>0 # A ne pas effectuer pour les lignes générées automatiquement If (find([M]LINTYP(NOL),1,2,6,10) & [M]FOCFLG(NOL)<>3) Gosub ACTION From =G_TRTIMPORT : Endif Endif Return #################################################################### $INIMOD_SOQ #---------------------------------# # Avant le Rewrite du fichier SOQ # #---------------------------------# [F:SOQ]ORDDAT = [F:SOH]ORDDAT [F:SOQ]SALFCY = [F:SOH]SALFCY [F:SOQ]SOHCAT = [F:SOH]SOHCAT [F:SOQ]UPDUSR = [F:SOP]UPDUSR [F:SOQ]UPDDAT = [F:SOP]UPDDAT Gosub CHARGESOQ Return #################################################################### $VALLIG #---------------------------------------------------# # Traitements complementaires effectués à la ligne # # SIGN vaut +1 en création / modification # # -1 en annulation # # TRTLIG vaut "C","M","A" en créa, modif, annule # # l'enregistrement "ligne" est en ligne # #---------------------------------------------------# Local Char WTRTORD Local Integer NOL : NOL=nolign-1 Local Integer WRET : WRET = 0 # --> Annulation If SIGN = -1 & TRTLIG = "A" #----- Suppression comptes et sections de la ligne de commande -----# Call ENREG_ACCCCE(0,"","","","SOP",0,[F:SOP]SOHNUM,[F:SOP]SOPLIN,[F:SOP]SOPSEQ,"","A") From TRTX3CPT If GOK<1 Return : Endif #----- Gosub LECLIG_SOQ : If GOK < 1 Return : Endif Gosub SUPLIG_SOQ : If GOK < 1 Return : Endif Gosub SUPLIG_SQD From TRTVENCDE Gosub RAZFMIMFG Gosub RAZFMIPOH : # VPO 02/07/09 54983 Gosub VALLIG_INVCND_A From LIBSAL_INVCND_SOH # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management # --> Modification Elsif SIGN = -1 & TRTLIG = "M" Gosub LECLIG_SOQ Gosub VALLIG_INVCND_M_BEFORE From LIBSAL_INVCND_SOH # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management Elsif SIGN = +1 & TRTLIG = "M" Gosub INIMOD_SOQ : If GOK < 1 Return : Endif # 96173 : Import commande avec n°lot : Le n°lot est maj après l'allocation donc trop tard # La maj des chps affichés/invisibles doit se faire avant toute maj # En Import, permet la maj des champs affichés et invisibles If GIMPORT & dim(G_TRTIMPORT)>0 # A ne pas effectuer pour les lignes générées automatiquement If (find([M]LINTYP(NOL),1,2,6,10) & [M]FOCFLG(NOL)<>3) Gosub ACTION From =G_TRTIMPORT : Endif Endif # 96173 Gosub MODLIG_SQD From TRTVENCDE #----- Ecriture des sections de la ligne de commande -----# Call ENREG_ACCCCE(nolign-1,"","","[M:SOH4]CCE","SOP", & 0,[F:SOP]SOHNUM,[F:SOP]SOPLIN,[F:SOP]SOPSEQ,"",TRTLIG) From TRTX3CPT Gosub VALLIG_INVCND_M_AFTER From LIBSAL_INVCND_SOH # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management # --> Création Elsif SIGN = +1 & TRTLIG = "C" Gosub INICRE_SOQ : If GOK < 1 Return : Endif # 96173 : Import commande avec n°lot : Le n°lot est maj après l'allocation donc trop tard # La maj des chps affichés/invisibles doit se faire avant toute maj # En Import, permet la maj des champs affichés et invisibles If GIMPORT & dim(G_TRTIMPORT)>0 # A ne pas effectuer pour les lignes générées automatiquement If (find([M]LINTYP(NOL),1,2,6,10) & [M]FOCFLG(NOL)<>3) Gosub ACTION From =G_TRTIMPORT : Endif Endif # 96173 Gosub CRELIG_SQD From TRTVENCDE #----- Ecriture des sections de la ligne de commande -----# Call ENREG_ACCCCE(nolign-1,"","","[M:SOH4]CCE","SOP", & 0,[F:SOP]SOHNUM,[F:SOP]SOPLIN,[F:SOP]SOPSEQ,"",TRTLIG) From TRTX3CPT Gosub VALLIG_INVCND_C From LIBSAL_INVCND_SOH # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management Endif If GOK < 1 Return : Endif Raz WRET If TRTLIG = "A" | SIGN = +1 Gosub GENALLORD : If WRET = 1 GOK = 0 Endif Endif If GOK < 1 Return : Endif # ------------------------------------------------- # Issue X3-31898 - 2017-11-23 by FGR : BEGIN : Moved here, before SOQ is updated If func ASYRFNC.ACTIV("PJM") Then Local Integer IPJMRET Local Integer IPJMIDX Local Char SMESS(250) Local Integer IRET # Issue X3-87427 - 2018-04-17 by SR : Renaming WALLSTU in WPJMALLSTU Local Char SOPPNUM(GLONPIM) # Issue X3-221202 - 2020-12-22 by FGR Local Char SPBUCOD(GLONPBU) # Issue X3-221202 - 2020-12-22 by FGR Local Char STASCOD(GLONTAC) # Issue X3-221202 - 2020-12-22 by FGR Local Decimal WPJMALLSTU If (TRTLIG = "C" and SIGN = 1) or & (TRTLIG = "M") or & (TRTLIG = "A" and SIGN = -1) & Then If dim(ZPJMSOQQTY) < 0 Then Local Instance ZPJMSOQQTY Using C_TECSOQITM Endif If ZPJMSOQQTY = null Then ZPJMSOQQTY = NewInstance C_TECSOQITM AllocGroup null Endif If TRTLIG = "M" and SIGN = -1 Then # To decrease on previous project # Issue X3-221202 - 2020-12-22 by FGR : BEGIN # If [M:SOH4]DPJT(NOL) <> AVOID.ACHAR and #& find(func PIMPL_CSTD_PROGS.GET_PIMTYP_VALUE(ZPJMSOQQTY.ACTX, [M:SOH4]DPJT(NOL), AVOID.ACHAR, AVOID.ACHAR, SMESS),6,7) and #& [F:SOQ]PJT <> [M:SOH4]DPJT(NOL) #& Then If [M:SOH4]DPJT(NOL) <> AVOID.ACHAR and & find(func PIMPL_CSTD_PROGS.GET_VALUE(ZPJMSOQQTY.ACTX, "PIMTYP", [M:SOH4]DPJT(NOL)),6,7) and & [F:SOQ]PJT <> [M:SOH4]DPJT(NOL) & Then # Issue X3-221202 - 2020-12-22 by FGR : END # When changing PJT value (including when was empty) to another one IPJMRET = fmet ZPJMSOQQTY.SOQ_ADD_LINE([F:SOQ]PJT, [F:SOQ]ITMREF, [M:SOH0]SOHNUM, [F:SOQ]SOPLIN, [F:SOQ]SOQSEQ, IPJMIDX) If IPJMRET >= [V]CST_AERROR Then # TODO FLORENT ICI prevoir gestion erreur Endif # Issue X3-87427 - 2018-04-17 by SR : Renaming WALLSTU in WPJMALLSTU # Issue X3-221202 - 2020-12-22 by FGR : BEGIN #IRET = func PJMTSKITM_CSTD_PROGS.GET_ALLQTY_VALUE(GACTX, [M:SOH4]DPJT(NOL), AVOID.ACHAR, [M:SOH4]ITMREF(NOL), WPJMALLSTU, SMESS) IRET = func PIMPL_CSTD_PROGS.PJM_KEY_SPLIT(GACTX, [M:SOH4]DPJT(NOL), SOPPNUM, SPBUCOD, STASCOD) WPJMALLSTU = func PJMTSKITM_CSTD_PROGS.GET_VALUE(GACTX, "ALLQTY", SOPPNUM, STASCOD, func PJMTSKITM_CSTD_PROGS.GET_ITTSEQ_FROM_ITMREF(GACTX, SOPPNUM, STASCOD, [M:SOH4]ITMREF(NOL))) # Issue X3-221202 - 2020-12-22 by FGR : END If [M:SOH4]ALLQTYSTU(NOL) > 0 and WPJMALLSTU <> 0 Then # To be able to transfert alloc, we have first deallocate current line Call GENALLORD("","","A", 1, 1, 0, [F:SOQ]ALLQTYSTU, [F:SOQ]SHTQTYSTU, WRET) From TRTVENALL If WRET <> 0 Then Return Endif [M:SOH4]ALLQTYSTU(NOL) = 0 [M:SOH4]ALLQTY(NOL) = 0 [M:SOH4]SHTQTYSTU(NOL) = 0 [M:SOH4]SHTQTY(NOL) = 0 Endif # Issue X3-221202 - 2020-12-22 by FGR : BEGIN # Elsif [F:SOQ]PJT <> AVOID.ACHAR and #& find(func PIMPL_CSTD_PROGS.GET_PIMTYP_VALUE(ZPJMSOQQTY.ACTX, [F:SOQ]PJT, AVOID.ACHAR, AVOID.ACHAR, SMESS),6,7) and #& [F:SOQ]PJT <> [M:SOH4]DPJT(NOL) #& Then Elsif [F:SOQ]PJT <> AVOID.ACHAR and & find(func PIMPL_CSTD_PROGS.GET_VALUE(ZPJMSOQQTY.ACTX, "PIMTYP", [F:SOQ]PJT),6,7) and & [F:SOQ]PJT <> [M:SOH4]DPJT(NOL) & Then # Issue X3-221202 - 2020-12-22 by FGR : END # When changing a PJT value to become empty IPJMRET = fmet ZPJMSOQQTY.SOQ_ADD_LINE([F:SOQ]PJT, [F:SOQ]ITMREF, [M:SOH0]SOHNUM, [F:SOQ]SOPLIN, [F:SOQ]SOQSEQ, IPJMIDX) If IPJMRET >= [V]CST_AERROR Then # TODO FLORENT ICI prevoir gestion erreur Endif Endif # 200515 : Progress billing / X3-199480 : Billing plan update when the sales order lines is updated (quantity or price) (*) - 2020-07-27 by LD # Update situation lines when a sales order line is updated # Only if the sales order line is linked to a billing plan, if the quantity or the net price are modified # Issue X3-200515/227027 - 2020-12-18 by MUARN : general tour without PJM If dim([M:SOH4]PRGBILNUM) > 0 & [M:SOH4]PRGBILNUM(NOL)<>"" & ([F:SOQ]QTY <> [M:SOH4]QTY(NOL) | [F:SOP]NETPRI <> [M:SOH4]NETPRI(NOL)) # First the technical class TECPROBIL is fed with the billing plan to update If dim(ZPJMTECPROBIL) < 0 Then Local Instance ZPJMTECPROBIL Using C_TECPROBIL Endif If ZPJMTECPROBIL = null Then ZPJMTECPROBIL = NewInstance C_TECPROBIL AllocGroup null Endif IPJMRET = fmet ZPJMTECPROBIL.PBIL_ADD_LINE_REFRESH([M:SOH4]PRGBILNUM(NOL)) IRET= func SYRSTACKTOOLS.MSGSTACK_GET_FIRST_UPPER_MESSAGE(ZPJMTECPROBIL, SMESS) If IRET > 1 & IRET < [V]CST_AERROR GMESSAGE = SMESS GERR = 2 Elsif IRET GMESSAGE = SMESS GOK = 0 GERR = 1 Endif If GOK < 1 Return : Endif Endif # 200515 : Progress billing / X3-199480 : Billing plan update when the sales order lines is updated (quantity or price) (*) - 2020-07-27 by LD Elsif (TRTLIG = "M" and SIGN = 1) or (TRTLIG <> "M") Then IPJMRET = fmet ZPJMSOQQTY.SOQ_ADD_LINE([F:SOQ]PJT, [F:SOQ]ITMREF, [M:SOH0]SOHNUM, [F:SOQ]SOPLIN, [F:SOQ]SOQSEQ, IPJMIDX) If IPJMRET >= [V]CST_AERROR Then # TODO FLORENT ICI prevoir gestion erreur Endif Endif Endif If GREP = "M" and TRTLIG = "A" and SIGN = -1 Then # Only for deleted lines. If dim(ZPJMPSO) < 0 Then Local Instance ZPJMPSO Using C_TECPSO Endif If ZPJMPSO = null Then ZPJMPSO = NewInstance C_TECPSO AllocGroup null Endif IPJMRET = fmet ZPJMPSO.PSO_ADD_LINE("SOH", [M:SOH0]SOHNUM, [F:SOQ]SOQPSONUM, [F:SOQ]SOQSEQNUM) If IPJMRET >= [V]CST_AERROR Then # TODO FLORENT ICI prevoir gestion erreur Endif Endif Endif # Issue X3-31898 - 2017-11-23 by FGR : END # ------------------------------------------------- # Maj de l'encours article (Table ORDERS) et des mouvements article (Table ITMMVT) # Si cde signée ou Si Paramètre maj encours article cde non signée à "Oui" # ou Si cde passe de signée/partiellement signée à non signée (et ds ce cas c'est une suppression) #If [F:SOH]APPFLG>2 | GSOHAPPORD=2 | ([F:SOH]APPFLG=0 & TRTLIG="M" & (SIGN=-1 & [M]WIPFLG(nolign-1)="A")) If [F:SOH]APPFLG>2 | GSOHAPPORD=2 | ([F:SOH]APPFLG=0 & ((TRTLIG="M" & [M]WIPFLG(nolign-1)="A") | TRTLIG="A")) Gosub MAJITV From SUBSOHA1 : If GOK<1 Return : Endif Gosub MAJORDERS From SUBSOHA1 : If GOK<1 Return : Endif Endif # 96173 : Import commande avec n°lot : Le n°lot est maj après l'allocation donc trop tard # La maj des chps affichés/invisibles doit se faire avant toute maj ## En Import, permet la maj des champs affichés et invisibles #If GIMPORT & dim(G_TRTIMPORT)>0 # # A ne pas effectuer pour les lignes générées automatiquement # If (find([M]LINTYP(NOL),1,2,6,10) & [M]FOCFLG(NOL)<>3) Gosub ACTION From =G_TRTIMPORT : Endif #Endif # 96173 # --> Création et modification apres passage dans le moteur d'allocation If SIGN = +1 If TRTLIG = "C" Gosub CRELIG_SOQ : Endif If TRTLIG = "M" Gosub MODLIG_SOQ : Endif # Raz [M]WALLQTY(NOL), [M]WALLQTYSTU(NOL) Endif # ------------------------------------------------- # Issue X3-31898 - 2017-11-23 by FGR : BEGIN ## Issue X3-18442/120906 - 2017-01-13 by FGR : BEGIN #If func ASYRFNC.ACTIV("PJM") Then # Local Integer IPJMRET # If dim(ZPJMSOQQTY) < 0 Then # Local Instance ZPJMSOQQTY Using C_TECSOQITM # Endif # If ZPJMSOQQTY = null Then # ZPJMSOQQTY = NewInstance C_TECSOQITM AllocGroup null # Endif # #IPJMRET = fmet ZPJMSOQQTY.SOQ_ADD_LINE([F:SOQ]PJT, [F:SOQ]ITMREF) # Issue X3-31898 - 2017-11-17 by FGR # IPJMRET = fmet ZPJMSOQQTY.SOQ_ADD_LINE([F:SOQ]PJT, [F:SOQ]ITMREF, [F:SOQ]SOHNUM, [F:SOQ]SOPLIN, [F:SOQ]SOQSEQ)# Issue X3-31898 - 2017-11-17 by FGR # If IPJMRET >= [V]CST_AERROR Then # # TODO FLORENT ICI prevoir gestion erreur # Endif # # Issue X3-8085/121537 - 2017-02-15 by FGR : BEGIN # If GREP = "M" and TRTLIG = "A" and SIGN = -1 Then # # Only for deleted lines. # If dim(ZPJMPSO) < 0 Then # Local Instance ZPJMPSO Using C_TECPSO # Endif # If ZPJMPSO = null Then # ZPJMPSO = NewInstance C_TECPSO AllocGroup null # Endif # IPJMRET = fmet ZPJMPSO.PSO_ADD_LINE("SOH", [M:SOH0]SOHNUM, [F:SOQ]SOQPSONUM, [F:SOQ]SOQSEQNUM) # If IPJMRET >= [V]CST_AERROR Then # # TODO FLORENT ICI prevoir gestion erreur # Endif # Endif # # Issue X3-8085/121537 - 2017-02-15 by FGR : END #Endif ## Issue X3-18442/120906 - 2017-01-13 by FGR : END # Issue X3-31898 - 2017-11-23 by FGR : END # ------------------------------------------------- Return #################################################################### $RAZFMIMFG # --------------------------------------------------- # # Si contremarque de production, mises à jour de l'OF # # --------------------------------------------------- # If [F:SOQ]FMI = 5 & [F:SOQ]FMINUM<> "" # Call RAZFMIMFG([F:SOQ]FMINUM, [F:SOQ]FMILIN, WRET) From MFGAUTLIB : # GH 06/07/2012 bug 83344 Call RAZFMISCO([F:SOQ]FMINUM, [F:SOQ]FMILIN, WRET) From SCOAUTLIB If WRET<0 WRET=0 Call RAZFMIMFG([F:SOQ]FMINUM, [F:SOQ]FMILIN, WRET) From MFGAUTLIB Endif Endif Return #################################################################### $RAZFMIPOH # VPO 02/07/09 54983 # --------------------------------------------------- # # Si contremarque achat, mises à jour de la commande # # --------------------------------------------------- # If find([F:SOQ]FMI,2,3) & [F:SOQ]FMINUM<> "" Call RAZFMIPOH([F:SOQ]FMINUM, [F:SOQ]FMILIN, [F:SOQ]FMISEQ, WRET) From TRTACHCDE1 Endif Return #################################################################### $GENALLORD Local Decimal WQTY, WALL, WSHT, WALLSTU, WSHTSTU, WQTYSTU Local Decimal WSTUDIS, WALLCPS Local Char WTRTLIG : WTRTLIG=TRTLIG Local Integer WUSERERBPC, WGENSHT, WALLPAR Local Char WSHIDAT Local Char SMESS(250) # Issue X3-31898 - 2017-11-23 by FGR Local Integer IRET # Issue X3-31898 - 2017-11-23 by FGR Local Char SOPPNUM(GLONPIM) # Issue X3-221202 - 2020-12-22 by FGR # Issue X3-248115 - 2021-05-28 by FGR : BEGIN #Local Char SPBUCOD(GLONPBU) # Issue X3-221202 - 2020-12-22 by FGR #Local Char STASCOD(GLONTAC) # Issue X3-221202 - 2020-12-22 by FGR If dim(GLONPBU) >= 0 Then Local Char SPBUCOD(GLONPBU) Else Local Char SPBUCOD(GLONVCR) Endif If dim(GLONTAC) >= 0 Then Local Char STASCOD(GLONTAC) Else Local Char STASCOD(GLONVCR) Endif # Issue X3-248115 - 2021-05-28 by FGR : END If TRTLIG = "A" # Suppression d'une ligne If [F:SOQ]ALLQTYSTU <> 0 | [F:SOQ]SHTQTYSTU <> 0 Call GENALLORD("","","A", 1, 1, 0, [F:SOQ]ALLQTYSTU, [F:SOQ]SHTQTYSTU, WRET) From TRTVENALL If WRET <> 0 Return : Endif Endif Else # Création ou modification d'une ligne # Issue X3-31898 - 2017-11-23 by FGR : BEGIN # Issue X3-221202 - 2020-12-22 by FGR : BEGIN # If [M:SOH4]DPJT(NOL) <> AVOID.ACHAR and #& find(func PIMPL_CSTD_PROGS.GET_PIMTYP_VALUE(GACTX, [M:SOH4]DPJT(NOL), AVOID.ACHAR, AVOID.ACHAR, SMESS),6,7) #& Then # IRET = func PJMTSKITM_CSTD_PROGS.GET_ALLQTY_VALUE(GACTX, [M:SOH4]DPJT(NOL), AVOID.ACHAR, [M:SOH4]ITMREF(NOL), WALLSTU, SMESS) # If WALLSTU <> 0 Then # Return # Endif # Endif # Issue X3-31898 - 2017-11-23 by FGR : END If [M:SOH4]DPJT(NOL) <> AVOID.ACHAR and find(func PIMPL_CSTD_PROGS.GET_VALUE(GACTX, "PIMTYP", [M:SOH4]DPJT(NOL)),6,7) Then IRET = func PIMPL_CSTD_PROGS.PJM_KEY_SPLIT(GACTX, [M:SOH4]DPJT(NOL), SOPPNUM, SPBUCOD, STASCOD) If STASCOD <> AVOID.ACHAR Then # Issue X3-248115 - 2021-05-28 by FGR WALLSTU = func PJMTSKITM_CSTD_PROGS.GET_VALUE(GACTX, "ALLQTY", SOPPNUM, STASCOD, func PJMTSKITM_CSTD_PROGS.GET_ITTSEQ_FROM_ITMREF(GACTX, SOPPNUM, STASCOD, [M:SOH4]ITMREF(NOL))) If WALLSTU <> 0 Then Return Endif Endif # Issue X3-248115 - 2021-05-28 by FGR Endif # Issue X3-221202 - 2020-12-22 by FGR : END If [M]WALLQTYSTU (NOL) - ([M]ALLQTYSTU(NOL)+[M]SHTQTYSTU(NOL)) = 0 # ----- Il n'y a pas de nouvelle allocation, ni de modif de la date d'expédition If [M]SHTQTYSTU(NOL)=0 & [M]ALLQTYSTU(NOL)=0 & ([M]DSHIDAT(NOL)=[M]YDSHIDAT(NOL)) Return Endif # Issue 73816 : No allocation if credit limit exceeded during order creation/modification If [M]SHTQTYSTU(NOL)<>0 & OSTNEW > [M:SOH0]OSTAUZ & GCDTUNL=1 Return Endif If [M]SHTQTYSTU(NOL)<>0 # --------- Il y avait de la rupture : On essaie de réallouer la qté en rupture WTRTLIG = "M" WALLSTU = 0 : WALLCPS = 0 WSHTSTU = [M]SHTQTYSTU (NOL) #---------------------------------------------------------------------# # Point d'entree pour ne pas réallouer les ruptures # #---------------------------------------------------------------------# GPOINT="SOHSHTALL" : Gosub ENTREE From EXEFNC If WSHTSTU = 0 Return Endif Elsif [M]DSHIDAT(NOL)<>[M]YDSHIDAT(NOL) # --------- La date d'expédition a été modifiée : Répercution sur les allocations existante WSHIDAT=[F:SOQ]SHIDAT Call MODZONALL(2,[F:SOQ]SOHNUM,[F:SOQ]SOPLIN,[F:SOQ]SOQSEQ,"BESDAT",WSHIDAT,WRET) From STKALL Endif Elsif [M]WALLQTYSTU (NOL) - ([M]ALLQTYSTU(NOL)+[M]SHTQTYSTU(NOL)) < 0 # ----- C'est une diminution/annulation de l'allocation WTRTLIG = "D" WQTYSTU = ([M]ALLQTYSTU(NOL)+[M]SHTQTYSTU(NOL)) - [M]WALLQTYSTU(NOL) WALLCPS = WQTYSTU # ----------- On traite en priorité la quantité rupture If [M]SHTQTYSTU(NOL) <> 0 # ----------- On décrémente la quantité rupture If WQTYSTU < [M]SHTQTYSTU (NOL) WSHTSTU = WQTYSTU : WALLSTU = 0 Else # ----------- On annule la quantité rupture et on décrémente la quantité allouée WSHTSTU = [M]SHTQTYSTU (NOL) WQTYSTU -= WSHTSTU : WALLSTU = WQTYSTU Endif Else # ----------- On traite ensuite la quantité allouée If WQTYSTU < ([M]ALLQTYSTU(NOL)+[M]SHTQTYSTU(NOL)) # ---------------- On décrémente la quantité rupture WSHTSTU = 0 : WALLSTU = WQTYSTU Else # ---------------- On annule la quantité allouée WTRTLIG = "A" WALLSTU = [M]ALLQTYSTU (NOL) Endif Endif Else # ----- C'est une augmentation de l'allocation # Issue 73816 : No allocation if credit limit exceeded during order creation/modification If OSTNEW > [M:SOH0]OSTAUZ & GCDTUNL=1 Return Endif If [M]ALLQTYSTU(NOL) = 0 & [M]SHTQTYSTU(NOL) = 0 WTRTLIG = "C" Else WTRTLIG = "M" Endif WSHTSTU = [M]SHTQTYSTU(NOL) WALLSTU = [M]WALLQTYSTU(NOL) - ([M]ALLQTYSTU(NOL)+[M]SHTQTYSTU(NOL)) WALLCPS = WALLSTU Endif If WALLSTU + WSHTSTU <> 0 # Génération de l'allocation # (Les quantité allouées et ruptures sont toujours positives) # If [M]STOMGTCOD(NOL) <> 1 & [M]FMI(NOL) <= 1 If [M]STOMGTCOD(NOL) <> 1 # Consommation réservations clients # Si valeur "à la dde" récup. de la réponse faite lors de la saisie WUSERERBPC=GUSERERBPC If WUSERERBPC=3 WUSERERBPC=[M:SOH4]RERBPCFLG(NOL) Endif # Génération des ruptures # --> Récupération du paramêtre stock : Génération de ruptures Local Char WPARAM(10) #-- 80866 Performance import #Call PARAM([M]DSTOFCY(NOL),"GENSHT",WPARAM) From ADOVAL Call PARAML([M]DSTOFCY(NOL),"GENSHT",WPARAM) From ADOVAL GGENSHT=val(WPARAM) WGENSHT=GGENSHT # On génère tjs les ruptures sur un kit/sous-traité et ses composants (sinon déphasage possible) If find([M]LINTYP(NOL),2,3,4,5,10,11,12,13) WGENSHT=2 Endif # On ne génère pas de rupture pour une ligne gérée en contremarque If find([M]FMI(NOL),3,5) WGENSHT=1 Endif # Allocations partielles sf si livraison ligne/cde complète # Un kit/sous-traité et ses composants ne peuvent être alloués partiellement (sinon déphasage possible) WALLPAR=0 If find([M]DME,2,3) & !find([M]LINTYP(NOL),2,3,4,5,10,11,12,13) WALLPAR=1 : Endif # Si on essaie uniquement de réallouer de la rupture, il faut autoriser les allocations partielles If WTRTLIG="M" & WALLSTU=0 & WSHTSTU<>0 WALLPAR=0 Endif If WTRTLIG="M" & [M]DSHIDAT(NOL) <> [M]YDSHIDAT(NOL) # Modif de la date d'expédition : Modifier les allocations WSHIDAT=[F:SOQ]SHIDAT Call MODZONALL(2,[F:SOQ]SOHNUM,[F:SOQ]SOPLIN,[F:SOQ]SOQSEQ,"BESDAT",WSHIDAT,WRET) From STKALL If WRET <>0 Return Endif Endif Call GENALLORD("","",WTRTLIG, WUSERERBPC, WGENSHT, WALLPAR, WALLSTU, WSHTSTU, WRET) From TRTVENALL If WRET=2 & GOK=1 Call MESSAGE([M]ITMREF(NOL)-":"-mess(504,197,1)-"\"-mess(44,192,1)) From GESECRAN Endif If WRET <> 0 Return : Endif If WTRTLIG="D" & [M]DSHIDAT(NOL) <> [M]YDSHIDAT(NOL) # Modif de la date d'expédition : Modifier les allocations WSHIDAT=[F:SOQ]SHIDAT Call MODZONALL(2,[F:SOQ]SOHNUM,[F:SOQ]SOPLIN,[F:SOQ]SOQSEQ,"BESDAT",WSHIDAT,WRET) From STKALL If WRET <>0 Return Endif Endif # Bug 83028 # Si après une diminution de l'allocation il reste des ruptures, on essaie de les réallouer If WTRTLIG="D" If ([M:SOH4]SHTQTYSTU(NOL)-WSHTSTU)>0 WALLSTU = 0 : WALLCPS = 0 # Bug 84767 : Suite à des tests pb en maj qté rupture sur la cde Local Decimal WWSHTSTU #WTRTLIG = "M" #WSHTSTU = [M]SHTQTYSTU(NOL)-WSHTSTU #Call GENALLORD("","","M", WUSERERBPC, WGENSHT, WALLPAR, WALLSTU, WSHTSTU, WRET) From TRTVENALL WWSHTSTU = [M]SHTQTYSTU(NOL)-WSHTSTU Call GENALLORD("","","M", WUSERERBPC, WGENSHT, WALLPAR, WALLSTU, WWSHTSTU, WRET) From TRTVENALL # Bug 84767 If WRET=2 & GOK=1 Call MESSAGE([M]ITMREF(NOL)-":"-mess(504,197,1)-"\"-mess(44,192,1)) From GESECRAN Endif If WRET <> 0 Return : Endif # Bug 84767 # On ajoute à la qté rupture à diminuer la qté rupture qui a été réallouée WSHTSTU=WSHTSTU+([M]SHTQTYSTU(NOL)-WSHTSTU-WWSHTSTU) # On ajoute à la qté allouée la qté qui a été réallouée (mis en négatif car WTRTLIG="D" WALLSTU=WALLSTU*-1 # Bug 84767 Endif Endif # Bug 83028 Endif WALL=WALLSTU*(1/[F:SOP]SAUSTUCOE) Call QTEARR(WALL, [F:SOP]SAU) From TRTDIV WSHT=WSHTSTU*(1/[F:SOP]SAUSTUCOE) Call QTEARR(WSHT, [F:SOP]SAU) From TRTDIV # Création et modification : Qté allouée en + # Nouvelle Qté rupture # Annulation et diminution : Qté allouée en - # Qté rupture en - If find(WTRTLIG, "C","M") [F:SOQ]ALLQTYSTU += WALLSTU [F:SOQ]ALLQTY += WALL [F:SOQ]SHTQTYSTU = WSHTSTU [F:SOQ]SHTQTY = WSHT Else [F:SOQ]ALLQTYSTU -= WALLSTU [F:SOQ]ALLQTY -= WALL [F:SOQ]SHTQTYSTU -= WSHTSTU [F:SOQ]SHTQTY -= WSHT Endif [M]ALLQTY(NOL) = [F:SOQ]ALLQTY [M]ALLQTYSTU(NOL) = [F:SOQ]ALLQTYSTU [M]SHTQTY(NOL) = [F:SOQ]SHTQTY [M]SHTQTYSTU(NOL) = [F:SOQ]SHTQTYSTU [M]TALLQTYSTU(NOL) = [F:SOQ]ALLQTYSTU + [F:SOQ]OPRQTYSTU + [F:SOQ]PREQTYSTU + [F:SOQ]ODLQTYSTU [M]TALLQTY(NOL) = [F:SOQ]ALLQTY + [F:SOQ]OPRQTY + [F:SOQ]PREQTY + [F:SOQ]ODLQTY # 107888 : Scheduled invoices : (LD:19/05/16) #If [M:SOH0]SOHCAT = 3 If [M:SOH0]SOHCAT = 3 | [M]DLVFLG(NOL)=1 # Commande à facturation directe # Commande normale et ligne non livrable # 107888 : Scheduled invoices : (LD:19/05/16) [M]TALLQTYSTU(NOL) += [F:SOQ]INVQTYSTU [M]TALLQTY(NOL) += [F:SOQ]INVQTY Else [M]TALLQTYSTU(NOL) += [F:SOQ]DLVQTYSTU [M]TALLQTY(NOL) += [F:SOQ]DLVQTY Endif Endif Endif Return #################################################################### $TRTSOLDE #---------------------------------------------------------------------# # Si solde d'une ligne : Suppression des allocations en rupture # #---------------------------------------------------------------------# Local Decimal LQTY, LSHT Local Integer LRET #If TRTLIG = "M" & SIGN = -1 # Maj uniquement si article géré en stock et CF et ligne non soldée # If [F:SOQ]STOMGTCOD <> 1 & [F:SOQ]DEMSTA = 1 & [F:SOQ]SOQSTA <> 3 # If [M]SOQSTA(NOL) = 3 & [M]SHTQTY(NOL) <> 0 # LQTY=0:CALL MAJSTOALL("","","A", [M]GRPFLG(NOL),LQTY,[F:SOQ]SHTQTYSTU, WRET) From TRTVENALL # If WRET = 1 GOK = -1 Elsif WRET GOK = 0 :ENDIF # Call GENALLORD("","","A", 1, 1, 0, [F:SOQ]ALLQTYSTU, [F:SOQ]SHTQTYSTU, WRET) From TRTVENALL # If WRET <> 0 GOK=0 : Return : Endif # [F:SOQ]SHTQTY = 0 # [F:SOQ]SHTQTYSTU = 0 # [M]SHTQTY(NOL) = 0 # [M]SHTQTYSTU(NOL)= 0 # Endif # Endif #Endif Return #################################################################### $LECLIG_SOQ #--------------# # Lecture SOQ # #--------------# Readlock [SOQ] SOQ0=[F:SOP]SOHNUM;[F:SOP]SOPLIN;[F:SOP]SOPSEQ # --> Enregistrement locké If fstat = 1:GOK=-1:GLOCK="$"+"SORDERQ"-num$([F:SOP]SOPSEQ):Return:Endif # --> Historisation si modif. avec avenant If fstat = 0 & GREV = 2 # --> Maj du n.avenant [M:SOH4]LINREVNUM(NOL) = [M:SOH0]REVNUM Call HISTO_REV ("SOQ", TRTLIG) From TRTVENMAJ Endif If TRTLIG = "A" Return Endif # --> Enregistrement inexistant If fstat = 4 | fstat = 5 Gosub INICRE_SOQ Gosub CRELIG_SOQ Return Endif If fstat=0 # Bug 63360 : En cas de nouvelle tentative de maj après Rollback, Il faut réinitialiser la classe [M] [M]ALLQTY(NOL) = [F:SOQ]ALLQTY [M]ALLQTYSTU(NOL) = [F:SOQ]ALLQTYSTU [M]SHTQTY(NOL) = [F:SOQ]SHTQTY [M]SHTQTYSTU(NOL) = [F:SOQ]SHTQTYSTU # 107888 : Scheduled invoices : (LD:19/05/16) #If [M:SOH0]SOHCAT = 3 If [M:SOH0]SOHCAT = 3 | [M]DLVFLG(NOL)=1 # Commande à facturation directe # Commande normale et ligne non livrable # 107888 : Scheduled invoices : (LD:19/05/16) [M]TALLQTYSTU(NOL) = [F:SOQ]ALLQTYSTU + [F:SOQ]INVQTYSTU + [F:SOQ]ODLQTYSTU Else [M]TALLQTYSTU(NOL) = [F:SOQ]ALLQTYSTU + [F:SOQ]DLVQTYSTU + [F:SOQ]ODLQTYSTU Endif # Bug 63360 Else GOK=0 Call RSTA("SOQ",[F:SOP]SOHNUM+num$([F:SOP]SOPLIN)+num$([F:SOP]SOPSEQ)) From GLOCK Endif # Maj des statistiques en modif (situation initiale) Call VALSTA("SOD",-1) From SUBPS2 If GOK < 1 : Return : Endif Return #################################################################### $CRELIG_SOQ #----------------------------------# # Apres Write de SOP, Write de SOQ # #----------------------------------# Write [SOQ] If fstat <> 0:GOK=0:Call FSTA("SOQ") From GLOCK:Return:Endif If GREP="D" & TRTLIG="C" & [M]FOCFLG(NOL)=2 # Duplication d'une ligne à l'origine d'une gratuit : maj du nouveau de ligne sur le gratuit Local Integer I I=find ([M]SOPLIN(NOL), [M]ORILIN(0..[M]NBLIG-1)) If I <> 0 [M]ORILIN(I-1)= [F:SOP]SOPLIN : Endif Endif # Maj des statistiques Call VALSTA("SOD",1) From SUBPS2 If GOK < 1 : Return : Endif Return #################################################################### $MODLIG_SOQ #--------------# # Rewrite SOQ # #--------------# Rewrite [SOQ] If fstat <> 0:GOK=0:Call FSTA("SOQ") From GLOCK:Endif # Maj des statistiques Call VALSTA("SOD",1) From SUBPS2 If GOK < 1 : Return : Endif Return #################################################################### $SUPLIG_SOQ #-------------# # Delete SOQ # #-------------# If left$([F:SOQ]SOQTEX,3)="SOQ" Call SUP_CLOB([F:SOQ]SOQTEX,WRET) From TRTX3TEX Endif Delete [SOQ] If fstat = 1:GOK=-1:GLOCK="$"+"SORDERQ"-num$([F:SOP]SOPSEQ):Return:Endif # Maj des statistiques Call VALSTA("SOD",-1) From SUBPS2 If GOK < 1 : Return : Endif Return #################################################################### $VERIF_CRE If OK=0 Return Endif : # Bug 49634 : Si positionné par le spécifique, inutile de continuer Gosub VERIF Return #################################################################### $INICRE # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management #--Too many instructions => moved to SUBSOHA1 Gosub INICRE From SUBSOHA1 # End issue 107888 Return #################################################################### # 101874 : V9 : Taxe code control # valorisation TTC (idem calcul facture) #################################################################### $INIVALTTC Global Integer G_CLCDSPLIN : G_CLCDSPLIN=1 # Valuation is always done in this case GVALTTC=2 #---- Paramètres complementaires appel valorisation # PARAM_T(0) : Flag contrôle des taxes (1=Non/2=Oui) # PARAM_T(1) : Lecture de la trace par le sous-pro (1=Non/2=Oui) # PARAM_T(2) : Flag retour (1=KO/2=OK) Local Char PARAM_T (25) (0..10) PARAM_T(0)="2" : # Contrôle des taxes lors de la création If GIMPORT PARAM_T(1)="1" : # Import : Pas de lecture de la trace Else PARAM_T(1)="2" : # Interactif : Lecture de la trace Endif PARAM_T(2)=num$(0) Call VALTTC ("GESSOH", PARAM_T) From TRTVENFACR If PARAM_T(2)="1" GERR=1 : GOK=0 : Return Endif #Call VALTTC ("GESSOH") From TRTVENFACR Return # 101874 #################################################################### $AB_CRE_MOD Gosub DEVERROU_SQH Return #################################################################### $APRES_CRE Local Char TBPAR(10)(1..50),TBVAL(30)(1..50), LREP(GLONREP) # V6 Affectations Gosub MAJ_MTO_AP_ALL From SALMTOLIB # Mis à jour dans MAJMVC #--------------------------------------------------------------------# # Mise à jour de la fiche prospect/client CRM 10.07.2000 # #--------------------------------------------------------------------# #Call SETORDFIRDAT([M:SOH0]BPCORD,[M:SOH0]ORDDAT) From SUBBPCB #--------------------------------------------------------------------# # Création des contrats de service liés à la cde CRM 18.09.2000 # #--------------------------------------------------------------------# # X3-69134 : Performance enhancements for sales order import / X3-91094 : Miscellaneous improvements (PJT, CRM calls) (LD:05/30/18) # Done in $CREATION #If dim([M:SOH1]REP(0))>0 LREP=[M:SOH1]REP(0) Endif # #Call CRECONSER([M:SOH0]SOHNUM, [M:SOH0]SALFCY, [M:SOH0]BPCORD, [M:SOH1]BPCINV, LREP, #& [M:SOH0]ORDDAT, [M:SOH0]CUR) From SUBCONB1 # X3-69134 : Performance enhancements for sales order import / X3-91094 : Miscellaneous improvements (PJT, CRM calls) (LD:05/30/18) #--------------------------------------------------------------------# # Gestion des points CRM 24.09.2003 # #--------------------------------------------------------------------# Local Integer IERRINF #LSE 21/03/2005 rajout 2 paramètres Local Integer ICHAPTER Local Integer IBRETOUR IERRINF = 0 ICHAPTER= 0 IBRETOUR= 1 Call SOHPOINT([M:SOH0]SOHNUM, IERRINF, ICHAPTER, IBRETOUR ) From TRTPOINT If IERRINF GMESSAGE = mess(IERRINF, ICHAPTER, 2) GERR = 1 Endif #--------------------------------------------------------------------# # Incrémentation des étapes avant-vente de l'affaire CRM 22.10.2003 # #--------------------------------------------------------------------# #LSE 07/08/2006 déplacer dans création #Call ADDOPPSTE("SOH", [M:SOH1]PREOPP, [M:SOH1]PJT) From SUBOPPB If [F:SOH]OCNFLG = 2 & WSLTDOCFLG = 2 #--------------------------------------------------------------------# # Impression bon de commande # #--------------------------------------------------------------------# Gosub SET_CLE From GOBJSUB CLECUR = 1 Endif If [F:SOH]OCNFLG = 2 & WSLTDOCFLG = 2 & !GIMPORT # FGR 20/08/2014 : X3SUIVI86923 (début) # If [M:SOH0]DOCNAM<>"" # [L]REPORT1=[M:SOH0]DOCNAM # Elsif WSLTDOCNAM<>"" # [L]REPORT1=WSLTDOCNAM # Endif # Call ETAT([L]REPORT1,"GESSOH",TBPAR,TBVAL) From ETAT If [M:SOH0]DOCNAM <> "" Then [L]AREPORT = [M:SOH0]DOCNAM Elsif WSLTDOCNAM <> "" Then [L]AREPORT = WSLTDOCNAM Endif Call IMPCOMP([L]REPORT1, [L]AREPORT, GFONCTION, OK, NBMASK, NOMMSK, ABMSK, AMA, TIT) From ETAT # FGR 20/08/2014 : X3SUIVI86923 (fin) Endif # 117129 - Move SE and SST web service calls outside of transactions Gosub RECALC_SST From SUBSOHA1 # 78411 Sage Exchange If func AFNC.ACTIV("SEPP") & func SEPPLIB.SEPP_DOC([M:SOH3]PTE) # If !GIMPORT & !func SEPPCDT.SEPP_OK(2,[M:SOH0]SOHNUM,1) & [M:SOH1]CDTSTA<>4 # 119005 old If !GIMPORT & !GWEBSERV & !func SEPPCDT.SEPP_OK(2,[M:SOH0]SOHNUM,1) & [M:SOH1]CDTSTA<>4 # 119005 new Call CALL_SEAUTH(2,[M:SOH0]SOHNUM) From TRTSEAUTH Endif Endif # ------------------------------------------------- # Issue X3-31898 - 2017-11-23 by FGR : BEGIN # Issue X3-18442/120906 - 2017-01-13 by FGR : BEGIN #Gosub PJM_ORDERS_SOQQTY From SUBSOHA1 # Issue X3-18442/120906 - 2017-01-13 by FGR : END # Issue X3-31898 - 2017-11-23 by FGR : END # ------------------------------------------------- If !GIMPORT # Maintenant on fait toujours un gosub RELIT Gosub RELIT From GOBJSUB [M:SOH0]SOHNUM = [F:SOH]SOHNUM # 112893.sn - Allocate if credit card authorization succeeded If GINIALLORD=2 & (GAPPSOH<2 | ((GSOHAPPORD=2 & GSOHAPPALL=2) | [M:SOH1]APPFLG>2)) If [M:SOH1]CDTSTA = 1 & func AFNC.ACTIV("SEPP") & func SEPPLIB.SEPP_DOC([M:SOH3]PTE) BOUT = "1" Gosub INI_TRTORDALL From TRTVENFEN Local Char PARAM(10)(8) Gosub OUV_TRTORDALL From TRTVENFEN PARAM(1) = "0" PARAM(2) = "1" PARAM(3) = "2" PARAM(4) = "0" PARAM(5) = "0" PARAM(6) = "2" PARAM(7) = "1" FIN=1 Gosub CONT_TRTORDALL From TRTVENFEN Gosub EXEC_TRTORDALL From TRTVENFEN Gosub TERMINE_TRTORDALL From TRTVENFEN Raz GTRACE # TODAN-120377 Affzo [M:SOH1]ALLSTA Affzo [M:SOH4]WALLQTY Affzo [M:SOH4]ALLQTY Kill PARAM Endif Endif# 112893.en Else # If faut repasser dans liens même en import pour recalculer l'état de la commande Gosub LIENS From TABLEAUX Endif Return # Bug 77357 ############################################################################################## # Action AVANT_MOD à executer aussi quand on clique sur un bouton qui déclenchera le bt enr ############################################################################################## $AVANT_MOD_BOUT # X3-218176 : Orders not put back to credit hold after lines added / X3-226050 - 2020-12-08 by LD Local Decimal WSVG_ORDATI : WSVG_ORDATI=[F:SOH]ORDATI # X3-218176 : Orders not put back to credit hold after lines added / X3-226050 - 2020-12-08 by LD # Diminution de l'encours du montant de la commande en cours de modif # X3-218176 : Orders not put back to credit hold after lines added / X3-226050 - 2020-12-08 by LD #If GOSTORD = 2 & COUZON <> "BPCINV" [M:SOH0]OST -= [F:SOH]ORDATI Endif If GOSTORD = 2 & [M:SOH2]UNL<>2 & COUZON <> "BPCINV" [M:SOH0]OST -= [F:SOH]ORDATI Endif # X3-218176 : Orders not put back to credit hold after lines added / X3-226050 - 2020-12-08 by LD Return #################################################################### # Bug 77357 # X3-71649 Modify SALREV parameter - modif: Szymon Dzumak #################################################################### $DEM_AVENANT Local Integer WOK If GREV <> 0 Return Endif If find(GREP,"C","D") Return Endif # --> Demande de modification avec ou sans avenant GREV = 1 If GSALREV = 2 WOK=1 If !GIMPORT Call OUINON(mess(51,194,1),WOK) From GESECRAN Endif If WOK=2 GREV=2 [M:SOH0]REVNUM+=1 Endif Elsif GSALREV = 3 GREV=2 [M:SOH0]REVNUM+=1 Endif Return #################################################################### $AVANT_MODFIC Local Integer SPSTAT, WRET Local Decimal COURS #------------------------------------------# # Traitement avant modification # # --> Déduction des mouvements clients # # --> Historisation si modif. avec avenant # #------------------------------------------# #-- Maj de l'encours des commandes ---# Local Char WSENS, WGREP WSENS='-' : WGREP='' Gosub MAJ_ENCOURS If GOK<1: Return: Endif # V6 Affectations Gosub AVANT_MODFIC From SALMTOLIB # Maj des statistiques Call VALSTA("SOH",-1) From SUBPS2 If GOK < 1 : Return : Endif # Issue X3-86334 - 2018-05-09 By USA : Begin If GREV = 2 Then Call INCREASE_VSORDER_RECORD([F:SOH]SALFCY, [F:SOH]SOHNUM, [F:SOH]REVNUM, [M:SOH0]REVNUM) From SUBSOHREV Call HISTO_REV("SOH", "M") From TRTVENMAJ Endif # Issue X3-86334 - 2018-05-09 By USA : End # Alimentation cours en devise société If [F:SOH]CUR<>[M]CUR | [F:SOH]SALFCY<>[M]SALFCY | [F:SOH]ORDDAT<>[M]ORDDAT Call COURSITE([M]CUR,[M]SALFCY,[M]CHGTYP,[M]ORDDAT,COURS,SPSTAT) From TRTDEV [F:SOH]CHGRAT=COURS Endif ## Si modification de la date, forcage de la modif sur les lignes #If !find(GREP,"C","D") & ([F:SOH]ORDDAT<>[M:SOH0]ORDDAT | [F:SOH]BPCINV<>[M:SOH1]BPCINV) # Local Integer NLIG # For NLIG = 0 To [M]NBLIG-1 # If GREV=2 [M]LINREVNUM(NLIG)=[M:SOH0]REVNUM Endif # [M]UPDFLG(NLIG) = 1 # Next NLIG #Endif ## Si modification de la zone affaire, forcage de la modif sur les lignes pour maj en-cours #If !find(GREP,"C","D") & [F:SOH]PJT <> [M:SOH1]PJT # Local Integer NLIG # For NLIG = 0 To [M]NBLIG-1 # If [M]WIPFLG(NLIG)= "" [M]WIPFLG(NLIG)="M" Endif # If GREV=2 [M]LINREVNUM(NOL)=[M:SOH0]REVNUM Endif # [M]UPDFLG(NLIG) = 1 # Next NLIG #Endif # --> Forçage de la modif sur les lignes If !find(GREP,"C","D") # --> Si modification de la date, # --> Si modification de la zone affaire, forcage de la modif sur les lignes pour maj en-cours # --> Si Cde signée, allouée et pas d'allocation des cdes non signées : Déallocation automatique de la cde # après annulation des signatures existantes # --> Si Cde signée ou partiellement signée et encours article cde non signée à Non, suppression des encours article # après annulation des signatures existantes If ([F:SOH]ORDDAT<>[M:SOH0]ORDDAT | [F:SOH]BPCINV<>[M:SOH1]BPCINV) | & ([F:SOH]PJT <> [M:SOH1]PJT) | & ((GAPPSOH>1 & ([F:SOH]APPFLG>2 | ([F:SOH]APPFLG=2 & GSOHAPPORD=2)) & & (GUPDAPPFLG=2 | find (2,[M:SOH4]WUPDAPPFLG(0..[M:SOH4]NBLIG-1))))) Local Integer NLIG For NLIG = 0 To [M]NBLIG-1 # Issue X3-38651 # If [F:SOH]PJT <> [M:SOH1]PJT # If [M]WIPFLG(NLIG)= "" [M]WIPFLG(NLIG)="M" Endif # Endif # End issue X3-38651 # Modification d'une Cde signée ou partiellement signée If ((GAPPSOH>1 & ([F:SOH]APPFLG>2 | ([F:SOH]APPFLG=2 & GSOHAPPORD=2)) & (GUPDAPPFLG=2 | find (2,[M:SOH4]WUPDAPPFLG (0..[M:SOH4]NBLIG-1))))) # Issue 113857 # Ne plus supprimer systématiquement les allocations en cas d'annulation signature # supprimer ssi la cde repasse à non signée : Suppression par la règle de workflow) # # Si Cde allouée et pas d'allocation des commandes non signées : Déallocation automatique de la cde # If GSOHAPPORD=1 | GSOHAPPALL=1 # Raz [M:SOH4]WALLQTY(NLIG), WALLQTYSTU(NLIG) # Endif # End issue 113857 # 91786 : Ne plus supprimer systématiquement l'encours en cas d'annulation signature # supprimer ssi la cde repasse à non signée : Suppression par la règle de workflow) # Suppression des encours articles #[M]WIPFLG(NLIG)="A" # 91786 Endif If GREV=2 [M]LINREVNUM(NLIG)=[M:SOH0]REVNUM Endif [M]UPDFLG(NLIG) = 1 Next NLIG Endif Endif # Bug 61909 : Vérification à faire en INIMOD après VALTTC Local Char WSVG_PTE(GLONPTE) : WSVG_PTE=[F:SOH]PTE Local Decimal WSVG_ORDINVATI : WSVG_ORDINVATI=[F:SOH]ORDINVATI ## Recherche s'il faut modifier les acomptes ## --> Si la condition de paiement a été modifiée ## --> Si le montant commande a évolué et que la commande n'est pas facturée #MODPTE=0 : Gosub TRT_ACPTE #--CPO 82311 Echéance d'acompte et modification du client facture ou du tiers payeur #--Test du dim => surtout pour l'inter-site If dim(MODBPCINV)<=0 : Local Shortint MODBPCINV : Endif If dim(MODBPCPYR)<=0 : Local Shortint MODBPCPYR : Endif Raz MODBPCINV,MODBPCPYR If [M:SOH1]BPCINV<>[F:SOH]BPCINV : MODBPCINV = 1 : Endif If [M:SOH1]BPCPYR<>[F:SOH]BPCPYR : MODBPCPYR = 1 : Endif #--/ # Cas particulier où on modifie le texte en le supprimant Local Integer WRET If [M:SOH0]SOHTEX1="" & left$([F:SOH]SOHTEX1,3)="SOH" Call SUP_CLOB([F:SOH]SOHTEX1,WRET) From TRTX3TEX Endif If [M:SOH0]SOHTEX2="" & left$([F:SOH]SOHTEX2,3)="SOH" Call SUP_CLOB([F:SOH]SOHTEX2,WRET) From TRTX3TEX Endif # --> Gestion des signatures # Positionnement indicateur "Annulé" sur les lignes de suivi de workflow If GAPPSOH>1 & (GUPDAPPFLG=2 | find(2,[M:SOH4]WUPDAPPFLG(0..[M:SOH4]NBLIG-1)) | [F:SOH]APPFLG=1) Call ANNULE_SUIVI("SOH",mess(652,197,1),1,WRET) From TRTVENDIV If GOK<1 Return : Endif Endif # En Import, permet la maj des champs suite à solde d'une ligne de commande If GIMPORT & dim(G_TRTIMPORT)>0 Gosub ACTION From =G_TRTIMPORT Endif Return #################################################################### $MAJ_ENCOURS # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) Local Decimal WORDBPINOT, WORDBPIATI # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) #----- Maj si cde signée ou Si Paramètre maj encours client cde non signée à "Oui" et cde non intra-société # If !([F:SOH]BETFCY=2 & [F:SOH]BETCPY<=1) If ([F:SOH]APPFLG>2 | GSOHAPPOST=2) & !([F:SOH]BETFCY=2 & [F:SOH]BETCPY<=1) #---- Maj mouvement client (déduction en commande client cde) Call MAJMVC ([F:SOH]BPCORD, [F:SOH]CUR, [F:SOH]CHGTYP, 0, [F:SOH]ORDDAT, [F:SOH]SOHNUM, [F:SOH]SALFCY, & [F:SOH]ORDNOT, [F:SOH]ORDATI, WSENS, "C", "", [F:SOH]SOHCAT) From TRTBPMVT : # Bug 70837 #& [F:SOH]DLRNOT, [F:SOH]DLRATI, WSENS, "C", "", [F:SOH]SOHCAT) From TRTBPMVT : # Bug 70837 If GOK<1: Return: Endif # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) #---- Maj mouvement client (déduction en commande) # Call MAJMVC ([F:SOH]BPCORD, [F:SOH]CUR, [F:SOH]CHGTYP, 0, [F:SOH]ORDDAT, [F:SOH]SOHNUM, [F:SOH]SALFCY, #& [F:SOH]DLRNOT, [F:SOH]DLRATI, WSENS, "F", WGREP, [F:SOH]SOHCAT) From TRTBPMVT # On order amount : To deliver amount for deliverable products + To scheduled invoice amount for undeliverable products WORDBPINOT = [F:SOH]DLRNOT+[F:SOH]INRSCHNOT WORDBPIATI = [F:SOH]DLRATI+[F:SOH]INRSCHATI Call MAJMVC ([F:SOH]BPCORD, [F:SOH]CUR, [F:SOH]CHGTYP, 0, [F:SOH]ORDDAT, [F:SOH]SOHNUM, [F:SOH]SALFCY, & WORDBPINOT, WORDBPIATI, WSENS, "F", WGREP, [F:SOH]SOHCAT) From TRTBPMVT If GOK<1: Return: Endif # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) Endif Return ############################################################################ $TRT_ACPTE Local Integer NVXPAMTYP, ANCPAMTYP, WSTAT # ------------------------------------------------------------------------ # # Traitement des acomptes en cas de modification d'une commande # # Modif. du montant de la cde ou modif de la condition paiement # # ------------------------------------------------------------------------ # # Effectué en AVANT_MODFIC # # car seul endroit où on a en ligne les anciennes et les nvelles valeurs # # Dans [F], les anciennes valeurs, Dans [M], les nouvelles valeurs # # ------------------------------------------------------------------------ # If [M:SOH4]ORDINVATI=WSVG_ORDINVATI & [M:SOH3]PTE=WSVG_PTE | [M:SOH1]INVSTA<>1 Return Endif WSTAT=1 # On recherche s'il y a des acptes (1), s'ils sont émis (2), versés (0) Call ACOMPTES(5,3,[M:SOH0]SOHNUM,[M:SOH4]NBLIG,[M:SOH3]PTE,[M:SOH0]ORDDAT,[M:SOH4]ORDINVNOT,[M:SOH4]ORDINVATI, & [M:SOH0]CUR,0,"","","",1,WSTAT) From TRTTPT If WSTAT=0 Raz GMESSAGE, GERR : Return Endif : # Acomptes versés : Rien à faire If clalev ([F:TPT])=0 Local File TABPAYTERM [TPT] Endif # Si nvlle condition paiement : on recherche s'il y aura des acptes Raz NVXPAMTYP If [M:SOH3]PTE<>WSVG_PTE Filter [F:TPT] Where PTE=[M:SOH3]PTE & PAMTYP=2 Read [F:TPT] First If !fstat NVXPAMTYP=2 Else NVXPAMTYP=1 Endif Filter [F:TPT] :#--CPO 82311 Problème découvert lors du traitement de cette fiche Endif ## VPO 25/08/09 56410 test modifié et déplacé plus bas ##If WSTAT=3 & NVXPAMTYP<>2 Return Endif : # Pas d'acomptes : Rien à faire # Il y a des acomptes # On recherche si les acptes sur la cde sont saisis ou générés Filter [F:TPT] Where PTE=WSVG_PTE & PAMTYP=2 Read [F:TPT] First If !fstat ANCPAMTYP=2 Else ANCPAMTYP=1 Endif Filter [F:TPT] :#--CPO 82311 Problème découvert lors du traitement de cette fiche ## VPO 25/08/09 56410 If WSTAT=3 & NVXPAMTYP<>2 & ANCPAMTYP=1 Return Endif : # Pas d'acomptes et aucun accompte à faire: Rien à faire If WSTAT<>2 & (ANCPAMTYP=2 & NVXPAMTYP=0) MODPTE=1 : # Acptes générés non émis et modif mnt cde : recalcul automatique Elsif WSTAT=2 | NVXPAMTYP=0 : # Acptes émis ou modif mnt cde : On ne fait rien, affichage msg d'information If NVXPAMTYP<>0 GMESSAGE=mess(195,191,1) : # Nvelle condition paiement sans acompte Else GMESSAGE=mess(196,191,1) : # Même condition paiement mais modif mnt cde Endif MODPTE=0 : GMESSAGE-=":"-mess(199,191,1) : GERR=2 Else : # Acptes non émis : on peut les modifier If NVXPAMTYP=1 : # Nvelle condition paiement sans acompte # Dde de suppression des acptes existants WOK=2 : Call OUINON(mess(195,191,1)-":\"-mess(197,191,1),WOK) From GESECRAN If WOK=1 MODPTE=0 Else MODPTE=3 : Endif Elsif NVXPAMTYP=2 : # Nvelle condition paiement avec acompte MODPTE=1:WOK=2 # S'il y avait des acomptes, Dde de recalcul If WSTAT<>3 Call OUINON(mess(195,191,1)-":\"-mess(198,191,1),WOK) From GESECRAN Endif If WOK=1 MODPTE=0 Endif Endif Endif Close Local File [TPT] Return #################################################################### $VERIF_MOD #-----------------------# # Verification en modif # #-----------------------# If OK=0 Return Endif : # Bug 49634 : Si positionné par le spécifique, inutile de continuer Gosub VERIF : If OK=0 Return Endif Gosub GATHER_CONTRACTS_TO_UPDATE From SUBSOHA1 # Issue X3-246053 by MRDAB Gosub LOCK_PREPAYMENT_CONTRACTS From SUBSOHA1 # Issue X3-244526 by MRDAB # --> Gestion des signatures # Modification de champs, ajout, suppr d'une ligne de prix : Annulation des signatures existantes If GAPPSOH>1 & find([F:SOH]APPFLG, 2,3) & (GUPDAPPFLG=2 | find (2,[M:SOH4]WUPDAPPFLG (0..[M:SOH4]NBLIG-1))) OK=2 : Call AVERTIR(mess(230,191,1),OK) From GESECRAN If OK=1 OK=0 : Return Else OK=1 : Endif # Commande allouée et pas d'allocation des commandes non signées : Déallocation automatique de la commande If find([F:SOH]ALLSTA,2,3) & (GSOHAPPORD=1 | GSOHAPPALL=1) OK=2 : Call AVERTIR(mess(231,191,1)-":\"-mess(232,191,1),OK) From GESECRAN If OK=1 OK=0 : Return Else OK=1 : Endif Endif Endif # ------------------------------------- # FGR 13/02/2014 : X3SUIVI96419 (début) Local Integer NI Local Char SMESSLIGN(type(GMESSAGE)-10) Local Integer NE Raz SMESSLIGN NE = 0 For NI = 0 To [M:SOH4]NBLIG If [M:SOH4]CONNUM(NI) <> "" and [M:SOH4]SOQSTA(NI) <> 3 Then # Toutes les lignes relatives à un contrat et non soldées doivent être supprimées If SMESSLIGN <> "" Then SMESSLIGN += "," Endif SMESSLIGN -= num$(NI+1) NE += 1 If NE > 10 Then # 10 c'est déjà pas mal SMESSLIGN -= "..." Break Endif Endif Next NI If SMESSLIGN <> "" Then GERR = 1 OK = 0 GMESSAGE = mess(391,192,1) - "(" + mess(7,105,1) - ":" + SMESSLIGN + ")" Return Endif # FGR 13/02/2014 : X3SUIVI96419 (fin) # ------------------------------------- Return #################################################################### $INIMOD # Issue X3-123565 - 20190212 by VAVIL : Chronological control on Sales Orders, # Open Orders and Quote, for Portuguese Legislation If func PORLEGLIB.DIGSIGN([M:SOH0]SALFCY,"") Local Integer WERR Call LEC_TSO_LEG(GCURLEG,[M]SOHTYP,WERR) From TRTLECLEG If WERR Raz [F:TSO] : Call RSTA("TSO", [M]SOHTYP) From GLOCK : Endif [M:SOH0]SOHTYP = [F:TSO]SOHTYP GCPT = [F:TSO]CODNUM If [F:TSO]CODNUM <> "" GCPT=[F:TSO]CODNUM Else Call LECTCA(5,WRET) From SUBTCA If fstat | !WRET GERR=1 : GMESSAGE=mess(58,105,1)-mess(5,14,1)-mess(250,199,1) : Return Endif GCPT = [F:TCA]CODNUM([F:TSO]SOHCAT+8) Endif If GOK=0 : GERR = 1 : Return : Endif Endif # Issue X3-123565 end #-----------------------------# # Chargement avant le Rewrite # #-----------------------------# # FGR 20/11/2015 : X3SUIVI112575 (début) : c'était fait trop tard If dim(GWEBSERV)=1 & GWEBSERV=1 #----- Gestion des adresses : # Bug 78821 If dim([M:ADB1]ADBFLG) [M:ADB1]ADBFLG=2 Endif : # Bug 78821 If dim([M:ADB2]ADBFLG) [M:ADB2]ADBFLG=2 Endif : # Bug 78821 If dim([M:ADB3]ADBFLG) [M:ADB3]ADBFLG=2 Endif : # Bug 78821 Endif # FGR 20/11/2015 : X3SUIVI112575 (fin) : c'était fait trop tard # 86037 : Flag signé à vide après solde ligne de cde ## --> Gestion des signatures #If [F:SOH]ORDSTA<>2 & (GUPDAPPFLG=2 | find (2,[M:SOH4]WUPDAPPFLG (0..[M:SOH4]NBLIG-1)) | [F:SOH]APPFLG=1) # If GAPPSOH>1 [F:SOH]APPFLG=0 Else [F:SOH]APPFLG=4 : Endif #Endif # 86037 # -- Raz variable utilisée pour la maj des mvts clients Raz WQUONOT, WQUOATI Gosub CHARGENTETE # 86037 : Flag signé à vide après solde ligne de cde # --> Gestion des signatures If [F:SOH]ORDSTA<>2 & (GUPDAPPFLG=2 | find (2,[M:SOH4]WUPDAPPFLG (0..[M:SOH4]NBLIG-1)) | [F:SOH]APPFLG=1) If GAPPSOH>1 [F:SOH]APPFLG=0 Else [F:SOH]APPFLG=4 : Endif Endif # 86037 # Tax by document # If func AFNC.ACTIV("LTA") & GLOCUSATAX # 106867.o If func AFNC.ACTIV("LTA") & [F:CPY]SSTTAXACT = 2 # 106867.n GTAXBYDOC = 1 Endif # --- Valorisation TTC (idem calcul facture) # 101874 : V9 : Taxe code control Gosub INIVALTTC If GOK=0 : Return Endif # 101874 # Bug 61909 # Recherche s'il faut modifier les acomptes # --> Si la condition de paiement a été modifiée # --> Si le montant commande a évolué et que la commande n'est pas facturée MODPTE=0 : Gosub TRT_ACPTE # Bug 57682 If dim(GWEBSERV)=1 & GWEBSERV=1 If [M:ACL1]CLOB=[M:ACL1]CLOBSVG & [M:ACL2]CLOB=[M:ACL2]CLOBSVG # Si aucune modification de texte, ne rien faire ! Else Call RANGE_TEXTE ([L]WRET) ##----- Gestion des adresses : # Bug 78821 #If dim([M:ADB1]ADBFLG) [M:ADB1]ADBFLG=2 Endif : # Bug 78821 #If dim([M:ADB2]ADBFLG) [M:ADB2]ADBFLG=2 Endif : # Bug 78821 #If dim([M:ADB3]ADBFLG) [M:ADB3]ADBFLG=2 Endif : # Bug 78821 Endif # FGR 20/11/2015 : X3SUIVI112575 (début) : c'est déjà trop tard #----- Gestion des adresses : # Bug 78821 #If dim([M:ADB1]ADBFLG) [M:ADB1]ADBFLG=2 Endif : # Bug 78821 #If dim([M:ADB2]ADBFLG) [M:ADB2]ADBFLG=2 Endif : # Bug 78821 #If dim([M:ADB3]ADBFLG) [M:ADB3]ADBFLG=2 Endif : # Bug 78821 # FGR 20/11/2015 : X3SUIVI112575 (fin) : c'est déjà trop tard Endif # Bug 57682 #85785 * RMA * document amount cannot be negative If func PORLEGLIB.DIGSIGN("", [F:SOH]CPY) & ([F:SOH]ORDINVATI<0 | [F:SOH]ORDINVATIL<0) GERR = 1: GMESSAGE = mess(00216,00191,1) : GOK = 0 : Return Endif Return # Bug 57682 ################################################## # Sous-programme nécessaire pour le Webservice # ################################################## # Rangement des textes entête et pied en mémoire # ################################################## Subprog RANGE_TEXTE(STAT) Variable Integer STAT #----- Variables locales -----# Local Integer WDBASE Local Integer WEXIST Local Char PARAM(50)(1..6) #----- [L]PARAM(2)="SOH" [L]PARAM(3)="TRTX3TEX" [L]PARAM(4)="" [L]PARAM(5)="0" [L]PARAM(6)="1" If [M:ACL1]CLOB<>[M:ACL1]CLOBSVG # Issue X3-33114 - 2017-05-22 by CPO : Replace transclass with Transmask in sales process (transmask cannot be used here) [M:ACL]=[M:ACL1] [L]PARAM(1)=[M:SOH0]SOHTEX1 Gosub EXEC From TRTX3TEX Call RANGE_CLOB ([M:ACL]CLOB,[L]PARAM(1),STAT) From ACLOB If STAT=1 Call ERREUR(mess(215,126,1)-"("+num$(GCLOMEM)-"Ko)") From GESECRAN Endif [M:SOH0]SOHTEX1=[L]PARAM(1) Endif If [M:ACL2]CLOB<>[M:ACL2]CLOBSVG # Issue X3-33114 - 2017-05-22 by CPO : Replace transclass with Transmask in sales process (transmask cannot be used here) [M:ACL]=[M:ACL2] [L]PARAM(1)=[M:SOH0]SOHTEX2 Gosub EXEC From TRTX3TEX Call RANGE_CLOB ([M:ACL]CLOB,[L]PARAM(1),STAT) From ACLOB If STAT=1 Call ERREUR(mess(215,126,1)-"("+num$(GCLOMEM)-"Ko)") From GESECRAN Endif [M:SOH0]SOHTEX2=[L]PARAM(1) Endif Raz mkstat End # Bug 57682 #################################################################### # FGR 13/02/2014 : X3SUIVI96419 : plus de place déplacé dans SUBSOHA1 #$MODIF # ##----------------------------------------------------------------# ## Modification des enregistrements sans SVCRVAT et SVCRFOOT # ##----------------------------------------------------------------# #Call UPD_VALORISATION ("M","SOH") From TRTVENFACC #If GOK<1 Return Endif # ##-------------------------------------# ## Modification des lignes de commande # ##-------------------------------------# #If clalev([F:SOQ1])=0 Local File SORDERQ[SOQ1] Endif #If clalev([F:SOP1])=0 Local File SORDERP[SOP1] Endif #Gosub CAL_OST : # Issue 73816 : No allocation if credit limit exceeded during order creation/modification #Gosub MODIF From TABLEAUX #If GOK<1 : Return : Endif # ##----------------------------------------------------------------# ## ACA - Modification des enr. analytiques des elts de facturation# ##----------------------------------------------------------------# #[M:SIHV]VCRTYP=20 : [M:SIHV]NUM=[F:SOH]SOHNUM #Gosub CREMOD_DIE_FOOT From SUBSIHV #If GOK < 1 : Return : Endif # #Close Local File [SOP1] #Close Local File [SOQ1] # #Default File [SOH] # ## Recalcul des statuts de la commande #Gosub MAJSTASOH From SUBSOHB ##----------------------------# ## Maj des mouvements clients # ##----------------------------# # ##-- Maj de l'encours des commandes ---# #Local Char WSENS, WGREP #WSENS='+' : WGREP=GREP #Gosub MAJ_ENCOURS #If GOK<1: Return: Endif # ## Bug 64124 : Calcul état crédit de la commande (pour que CDTSTA soit maj lors de l'appel au workflow) #Call SDCDTSTA ([M:SOH0]SOHNUM,[M:SOH0]BPCORD,[M:SOH0]CHGTYP,0,"",[M:SOH0]ORDDAT,[M:SOH2]UNL, 2,[M:SOH1]CDTSTA,GBIDD1,GBIDD1) #& From TRTVENCDT #[F:SOH]CDTSTA=[M:SOH1]CDTSTA ## Bug 64124 ##------------------------------------------# ## Modification des acomptes de la commande # ##------------------------------------------# #If MODPTE=1 | MODPTE=3 # #----- Suppression des acomptes existants # Call ACOMPTES(5,2,[F:SOH]SOHNUM,[F:SOH]LINNBR,[F:SOH]PTE,[F:SOH]ORDDAT,[F:SOH]ORDINVNOT,[F:SOH]ORDINVATI, #& [F:SOH]CUR,0,"","","",1,OK) From TRTTPT # If GOK<1 Return : Endif #Endif #If MODPTE=1 # #----- Récréation des acomptes # Call ACOMPTES(5,1,[F:SOH]SOHNUM,[F:SOH]LINNBR,[F:SOH]PTE,[F:SOH]ORDDAT,[F:SOH]ORDINVNOT,[F:SOH]ORDINVATI, #& [F:SOH]CUR,[F:SOH]CHGTYP,[F:SOH]BPCINV,[F:SOH]BPCPYR,[F:SOH]BPAPYR, #& 1,OK) From TRTTPT # If GOK < 1 Return : Endif #Endif ##--CPO 82311 Acomptes sur commande et modification du client facturé ou du tiers payeur #If MODPTE<>1 and MODPTE<>3 and (MODBPCINV=1 | MODBPCPYR=1) # Gosub UPDATE_DUD_SOH_MODBPC From SUBSOHB #If GOK<1 Return : Endif #Endif #Raz MODBPCINV,MODBPCPYR ##--/CPO # ##LSE 07/08/2006 ##Incrémentation des étapes avant-vente de l'affaire #Local Integer IERRINF #Local Integer ICHAPTER #Local Integer IBRETOUR #IBRETOUR=1 #Call ADDOPPSTE("SOH", [M:SOH1]PREOPP, [M:SOH1]PJT,IERRINF,ICHAPTER,IBRETOUR) From SUBOPPB #If IBRETOUR=0 # GMESSAGE = mess(IERRINF, ICHAPTER, 1) # GERR = 1 # GOK = 0 #Endif #If GOK < 1 : Return : Endif # ##--------------------------------------------------------------------# ## Création des contrats de service liés à la cde CRM 18.09.2000 # ##--------------------------------------------------------------------# ## FGR 13/02/2013 : X3SUIVI96419 (début) : déplacé depuis $APRES_MOD #Local Char LREP(GLONREP) #Local Integer NI #Local Integer NE # # If dim([M:SOH1]REP(0)) > 0 Then # LREP = [M:SOH1]REP(0) # Endif # Call CRECONSER([M:SOH0]SOHNUM, [M:SOH0]SALFCY, [M:SOH0]BPCORD, [M:SOH1]BPCINV, LREP, [M:SOH0]ORDDAT, [M:SOH0]CUR) From SUBCONB1 # If GERR = 1 Then # GOK = 0 # Return # Endif # # Et suppression de ceux dont les lignes ont été supprimées # For NI = 0 To [M:SOH0]NBCON-1 # # On regarde si le contrat est toujours dans SOH4 # NE = find([M:SOH0]CONUMDEL(NI), [M:SOH4]CONUM(0..[M:SOH4]NBLIG-1)) # If NE = 0 Then # # Si on ne l'a pas trouvé c'est qu'on doit le supprimer # Call DELSOHCON(2, [M:SOH0]SOHNUM, [M:SOH0]CONUMDEL(NI)) From SUBCONB1 # Endif # Next NI ## FGR 13/02/2013 : X3SUIVI96419 (début) # ## Detail local tax data #If func AFNC.ACTIV("LTA") & GLOCUSATAX # Gosub CREMOD_LTV From TRTTAXUSA # If GOK < 1 : Return : Endif #Endif # ## Maj des statistiques #Call VALSTA("SOH",1) From SUBPS2 #If GOK < 1 : Return : Endif # #Gosub DEVERROU_SQH # ##--CPO 79343 #If GSOHSUPPLIGDSP>0 # Call MESSAGE(mess(251,191,1)) From GESECRAN # Raz GSOHSUPPLIGDSP #Endif ##--/CPO # #Return #################################################################### $APRES_MOD Local Char TBPAR(10)(1..50),TBVAL(30)(1..50),WSAV_GLE #Local Char LREP(GLONREP) # FGR 13/02/2013 : X3SUIVI96419 : déplacé dans $MODIF #- X3Suivi S71065, 79777 WSAV_GLE = GCLE # V6 Affectations Gosub MAJ_MTO_AP_ALL From SALMTOLIB GCLE=WSAV_GLE #--------------------------------------------------------------------# # Création des contrats de service liés à la cde CRM 18.09.2000 # #--------------------------------------------------------------------# ## FGR 13/02/2013 : X3SUIVI96419 : déplacé dans $MODIF #If dim([M:SOH1]REP(0))>0 LREP=[M:SOH1]REP(0) Endif #Call CRECONSER([M:SOH0]SOHNUM, [M:SOH0]SALFCY, [M:SOH0]BPCORD, [M:SOH1]BPCINV, LREP, [M:SOH0]ORDDAT, [M:SOH0]CUR) From SUBCONB1 #--------------------------------------------------------------------# # Gestion des points CRM 24.09.2003 # #--------------------------------------------------------------------# Local Integer IERRINF #LSE 21/03/2005 rajout 2 paramètres Local Integer ICHAPTER Local Integer IBRETOUR IERRINF = 0 ICHAPTER= 0 IBRETOUR= 1 Call SOHPOINT([M:SOH0]SOHNUM, IERRINF, ICHAPTER, IBRETOUR) From TRTPOINT If IERRINF GMESSAGE = mess(IERRINF, ICHAPTER, 2) GERR = 1 Endif #--------------------------------------------------------------------# # Incrémentation des étapes avant-vente de l'affaire CRM 22.10.2003 # #--------------------------------------------------------------------# #LSE 07/08/2006 déplacer dans création #Call ADDOPPSTE("SOH", [M:SOH1]PREOPP, [M:SOH1]PJT) From SUBOPPB #--------------------------------------------------------------------# # Impression bon de commande # #--------------------------------------------------------------------# If [F:SOH]OCNFLG=2 & WSLTDOCFLG=2 & [F:SOH]OCNPRN<>2 Gosub SET_CLE From GOBJSUB CLECUR = 1 Endif If [F:SOH]OCNFLG=2 & WSLTDOCFLG=2 & [F:SOH]OCNPRN<>2 & !GIMPORT # Issue X3-242198 - 2021-05-11 by SR : Save the previous value of REPORT1 Local Char WREPORT1(GLONARP) : WREPORT1 = [L]REPORT1 If [M:SOH0]DOCNAM<>"" [L]REPORT1=[M:SOH0]DOCNAM Elsif WSLTDOCNAM<>"" [L]REPORT1=WSLTDOCNAM Endif Call ETAT([L]REPORT1,"GESSOH",TBPAR,TBVAL) From ETAT # Issue X3-242198 - 2021-05-11 by SR : Restore the previous value of REPORT1 [L]REPORT1 = WREPORT1 Endif # 117129 - Move SE and SST web service calls outside of transactions Gosub RECALC_SST From SUBSOHA1 # 78411 Sage Exchange # If auth exists, check for need for re-auth, If no auth exists, authorize # If no longer SE PTE, Void any current auths If func AFNC.ACTIV("SEPP") If !clalev([F:SEU]) Local File SEAUTH [SEU] Endif If func SEPPLIB.SEPP_DOC([F:SOH]PTE) Call AUTH_CHK(2,[F:SOH]SOHNUM,GERR,GMESSAGE) From SEPPLIB If GERR If [F:SEU]MANAUT=2 Call MESSAGE(mess(48,2092,1)) From GESECRAN Endif Call SDCDTSTA([M]SOHNUM,[M]BPCORD,[M]CHGTYP,0,[M:SOH1]CUR,[M]ORDDAT,[M]UNL,1,[M]CDTSTA,[M]OST,[M]OSTAUZ) From TRTVENCDT Affzo [M:SOH1]CDTSTA GOK=0 : Return Endif If !func SEPPCDT.SEPP_OK(2,[M:SOH0]SOHNUM,1) & [M:SOH1]CDTSTA<>4 Call CALL_SEAUTH(2,[M:SOH0]SOHNUM) From TRTSEAUTH Endif Elsif func SEPPCDT.SEPP_OK(2,[M:SOH0]SOHNUM,1) Local Integer SERR Local Char SEMESSAGE(150) Call VOID_ALL(2,[M:SOH0]SOHNUM,SERR,SEMESSAGE) From SEPPLIB If SERR : Call ERREUR (SEMESSAGE) From GESECRAN : Endif Endif Endif # ------------------------------------------------- # Issue X3-31898 - 2017-11-23 by FGR : BEGIN # Issue X3-18442/120906 - 2017-01-13 by FGR : BEGIN #Gosub PJM_ORDERS_SOQQTY From SUBSOHA1 # Issue X3-18442/120906 - 2017-01-13 by FGR : END # Issue X3-31898 - 2017-11-23 by FGR : END # ------------------------------------------------- If !GIMPORT # Maintenant on fait toujours un gosub RELIT Gosub RELIT From GOBJSUB [M:SOH0]SOHNUM = [F:SOH]SOHNUM Else # If faut repasser dans liens même en import pour recalculer l'état de la commande Gosub LIENS From TABLEAUX Endif Raz CHG_FLG #Issue X3-X3-249553 by SDEM Return ############################################################### $VERF_ANU #----------------------------------------# # Controle de suppression d'une commande # #----------------------------------------# # --> Commande non supprimable si livrée ou facturée If [F:SOH]DLVSTA <> 1 | [F:SOH]INVSTA <> 1 GERR=1 : GMESSAGE=mess(15,192,1) : OK=0 : Return Endif # --> Commande non supprimable si en préparation If sum([M:SOH4]LPRQTY,[M:SOH4]OPRQTY,[M:SOH4]PREQTY) <> 0 GERR=1 : GMESSAGE=mess(54,123,1)-"\"-mess(310,192,1) : OK=0 : Return Endif # --> Commande non supprimable si elle a été générée sur autre site If [F:SOH]ORIFCY<>"" & [F:SOH]ORIFCY<>[F:SOH]SALFCY GERR=1 : GMESSAGE=mess(54,123,1)-":"-mess(862,196,1) : OK=0 : Return Endif # --> pas de suppression si ligne allouee If sum([M:SOH4]ALLQTYSTU) | sum([M:SOH4]SHTQTYSTU) OK=2 : Call AVERTIR(mess(119,191,1)-":"-mess(205,100,1), OK) From GESECRAN If OK=1 OK=0 : Return : Endif Endif # --> Commande non supprimable s'il existe des contremarque pour cette cde If sum([M:SOH4]FMINUM) <> "" OK=1 : Call AVERTIR(mess(53,191,1),OK) From GESECRAN If OK=1 OK=0 : Return Endif Endif # --> Gestion des signatures # Commande signée : Annulation des signatures existantes, modification ? If find([F:SOH]APPFLG, 2,3) OK=2 : Call AVERTIR(mess(229,191,1)+"\"+mess(53,123,1)-"?",OK) From GESECRAN If OK=1 OK=0 : Return : Endif Endif # --> Controle qu'aucun acompte n'a été versé Call ACOMPTES(5,3,[F:SOH]SOHNUM,[F:SOH]LINNBR,[F:SOH]PTE,[F:SOH]ORDDAT,[F:SOH]ORDINVNOT,[F:SOH]ORDINVATI, & [F:SOH]CUR,0,"","","",1,OK) From TRTTPT If OK=0 Return Endif # --> Ce document est associé à une proforma If [F:SOH]PRFNUM <> "" GERR=2 : GMESSAGE=mess(106,191,1)-[F:SOH]PRFNUM Endif # FGR 30/04/2013 : X3SUIVI63021 (début) : déplacé dans AV_ANNULE #----------------------------------------------# #Modif CRM 07/09/2001 #----------------------------------------------# #Suppression des contrats de service associés. #If GMODU(12) = 2 Then # # FGR 27/04/2009 : X3SUIVI54600 : Pas le peine de le faire chez ceux qui n'ont pas le "Support client" #Endif # FGR 30/04/2013 : X3SUIVI63021 (fin) : déplacé dans AV_ANNULE # FGR 29/04/2013 : X3SUIVI89648 (début) If GMODU(12) = G_YES Then Local Char SSREMSG(type(GMESSAGE)-10) Call VERIF_SRE_COV([M:SOH0]SOHNUM, SSREMSG) From SUBSREB3 If SSREMSG <> "" Then GERR = 1 GMESSAGE = SSREMSG OK = 0 Return Endif Endif # FGR 29/04/2013 : X3SUIVI89648 (fin) # 200515 : Progress billing / X3-199457 : Control on sales order lines associated to a billing plan - 2020-07-16 by LD # The sales order is not deletable if a line is associated to a billing plan If dim([M:SOH4]PRGBILNUM)> 0 If sigma(indcum=0,[M:SOH4]NBLIG-1,[M:SOH4]PRGBILNUM(indcum)<>"")<>0 Local Integer WI : WI=0 While WI<[M:SOH4]NBLIG & [M:SOH4]PRGBILNUM(WI)="" WI+=1 Wend If WI<[M:SOH4]NBLIG GERR=1 : OK=0 : GMESSAGE = mess(54,123,1)-":"-func AFNC.MES1(mess(291,191,1),num$([M:SOH4]SOPLIN(WI)))-[M:SOH4]PRGBILNUM(WI) : Return Endif Endif Endif # 200515 : Progress billing / X3-199457 : Control on sales order lines associated to a billing plan - 2020-07-16 by LD Gosub VERF_ANU_SO_LINE From SUBSOHA1 #Issue X3-243729 by SDEM Return # 101874 : V9 : Taxe code control # Move in SUBSOHA1 ######################################################################### #$AV_ANNULE # # ------------------------------------------------------------------- # # FGR 30/04/2013 : X3SUIVI63021 (début) : déplacement depuis VERF_ANU # #Suppression des contrats de service associés. # If GMODU(12) = 2 Then # # FGR 27/04/2009 : X3SUIVI54600 : Pas le peine de le faire chez ceux qui n'ont pas le "Support client" # Local Integer ZF # Local Integer IFOUNDCON # Local Integer IFOUNDSIV # FGR 20/09/2007 : X3SUIVI22621 # Local Integer ICHOIX # # ICHOIX = 2 # IFOUNDCON = 0 # IFOUNDSIV = 0 # FGR 20/09/2007 : X3SUIVI22621 # #Recherche tout d'abord si un ou plusieurs contrats de maintenance ont été créés au travers de la commande. # For ZF = 0 To [M:SOH4]NBLIG-1 # If [M:SOH4]CONNUM(ZF) <> "" Then # IFOUNDCON = 1 # Filter [SID] Where [F:SID]CONNUM = [M:SOH4]CONNUM(ZF) # For [SID] Hint Key SID4 # IFOUNDSIV += 1 # Break # Next # Filter [SID] # If IFOUNDSIV Then # # FGR 24/04/2009 : X3SUIVI54600 : Pas la peine de continuer : s'il y en a UN on n'a pas le droit de supprimer # Break # Endif # Endif # Next # If IFOUNDSIV Then # # FGR 20/09/2007 : X3SUIVI22621 On test si des factures (quel que soit leur statut) existent sur les # # contrats. S'il y en a, on interdit la suppression de la commande. # # Un ou plusieurs contrats ont été facturés. Suppression de la commande interdite. # GERR = 1 : GMESSAGE = mess(944,196,1) : OK = 0 : Return # Else # #Demande si l'utilisateur souhaite supprimer les contrats associés. # If IFOUNDCON Then # Call OUINON(mess(456,196,1), ICHOIX) From GESECRAN #Souhaitez-vous supprimer les contrats de service associés ? # If ICHOIX = 2 Then #Réponse OUI # #Supprime tous les contrats associées et leurs éléments. # For ZF = 0 To [M:SOH4]NBLIG-1 # If [M:SOH4]CONNUM(ZF) <> "" Then # Call DELSOHCON(2, [M:SOH0]SOHNUM, [M:SOH4]SOPLIN(ZF)) From SUBCONB1 # Endif # Next # Endif # Endif # Endif # Endif # # FGR 29/04/2013 : X3SUIVI63021 (fin) : déplacement depuis VERF_ANU # # ----------------------------------------------------------------- # # V6 Affectations # Gosub SUP_MTO_AV_ALL From SALMTOLIB #Return # 101874 # 101874 : V9 : Taxe code control # Move in SUBSOHA1 ################################################################ #$ANNULE ##------------------------------------------# ## Annulation d'une commande # ##------------------------------------------# # #Local Decimal WQUOATI, WQUONOT : # En devis #Local Integer WRET # ## Raz des variables utilisées pour la maj des mvts clients #Raz WQUONOT, WQUOATI # ##----------------------------------------------------------------# ## Suppression des enregistrements sans SVCRVAT et SVCRFOOT # ##----------------------------------------------------------------# #Call UPD_VALORISATION ("A","SOH") From TRTVENFACC #If GOK<1 Return Endif # #If left$([F:SOH]SOHTEX1,3)="SOH" # Call SUP_CLOB([F:SOH]SOHTEX1,WRET) From TRTX3TEX #Endif #If left$([F:SOH]SOHTEX2,3)="SOH" # Call SUP_CLOB([F:SOH]SOHTEX2,WRET) From TRTX3TEX #Endif # ##-----------------------------------------------------------------# ## Suppression des enr. historiques VOH VOP VOQ VOC (avenants) # ##-----------------------------------------------------------------# #Gosub SUP_HISTO #If GOK < 1 : Return : Endif # ##------------------------------------------# ## --> Mise à jour des mouvements clients # ##------------------------------------------# #If sum([M:SOH4]SQDLIN) <> 0 # If clalev([F:SOP1])=0 Local File SORDERP[SOP1] Endif # If clalev([F:SOQ1])=0 Local File SORDERQ[SOQ1] Endif #Endif #Gosub ANNULE From TABLEAUX : # Effacement des lignes #If GOK<1 : Return : Endif # ## --> Gestion des signatures ##------------------------------------------------------------------------# ## Positionnement indicateur "Annulé" sur les lignes de suivi de workflow # ##------------------------------------------------------------------------# #If GAPPSOH>1 # Call ANNULE_SUIVI("SOH",mess(653,197,1),1,WRET) From TRTVENDIV # If GOK<1 Return : Endif #Endif # #If sum([M:SOH4]SQDLIN) <> 0 # Close Local File [SOP1] # Close Local File [SOQ1] # Default File [SOH] #Endif # ##----------------------------------------------------------------# ## ACA - Suppression des enr. analytiques des elts de facturation # ##----------------------------------------------------------------# #[M:SIHV]VCRTYP=20 : [M:SIHV]NUM=[F:SOH]SOHNUM #Gosub ANU_DIE_FOOT From SUBSIHV #If GOK < 1 : Return : Endif # ##-- Maj de l'encours des commandes ---# #Local Char WSENS, WGREP #WSENS='-' : WGREP='' #Gosub MAJ_ENCOURS #If GOK<1: Return: Endif # ##----- Suppression des acomptes liés à cette commande #Call ACOMPTES(5,2,[F:SOH]SOHNUM,[F:SOH]LINNBR,[F:SOH]PTE,[F:SOH]ORDDAT,[F:SOH]ORDINVNOT,[F:SOH]ORDINVATI, #& [F:SOH]CUR,0,"","","",1,OK) From TRTTPT : If GOK<1 Return : Endif # ## Detail local tax data #If func AFNC.ACTIV("LTA") & GLOCUSATAX # Gosub CREMOD_LTV From TRTTAXUSA # If GOK < 1 : Return : Endif #Endif # ## 78411 Sage Exchange #If func AFNC.ACTIV("SEPP") & func SEPPLIB.SEPP_DOC([M:SOH3]PTE) # Call VOID_ALL(2,[F:SOH]SOHNUM,GERR,GMESSAGE) From SEPPLIB # If GERR : GOK=0 : Return : Endif #Endif # ## Maj des statistiques #Call VALSTA("SOH",-1) From SUBPS2 #If GOK < 1 : Return : Endif #Return # 101874 #------------------------------------------------------------------------ $SUP_HISTO If clalev([F:VOH])=0 : Local File VSORDER [VOH] : Endif If clalev([F:VOP])=0 : Local File VSORDERP [VOP] : Endif If clalev([F:VOQ])=0 : Local File VSORDERQ [VOQ] : Endif If clalev([F:VOC])=0 : Local File VSORDERC [VOC] : Endif If clalev([F:CAL])=0 : Local File CPTANALIN [CAL] : Endif #--CPO 103128 Record from CPTANALIN must also be deleted Delete [VOH] Where SOHNUM=[F:SOH]SOHNUM Delete [VOP] Where SOHNUM=[F:SOH]SOHNUM Delete [VOQ] Where SOHNUM=[F:SOH]SOHNUM Delete [VOC] Where SOHNUM=[F:SOH]SOHNUM Delete [CAL] Where ABRFIC="VOP" and VCRNUM=[F:SOH]SOHNUM #--CPO 103128 Record from CPTANALIN must also be deleted Return ############################################################### $CHARGESOP #-----------------------------------------------# # Chargement ligne avant le write ou le rewrite # #-----------------------------------------------# If dim([F:SOP]CPY)>0 : [F:SOP]CPY=GSOCIETE : Endif [F:SOP]STOFCY = [M:SOH4]DSTOFCY(nolign-1) [F:SOP]VACITM(0) = [M:SOH4]VACITM1(nolign-1) [F:SOP]VACITM(1) = [M:SOH4]VACITM2(nolign-1) [F:SOP]VACITM(2) = [M:SOH4]VACITM3(nolign-1) [F:SOP]VAT(0) = [M:SOH4]VAT1(nolign-1) [F:SOP]VAT(1) = [M:SOH4]VAT2(nolign-1) [F:SOP]VAT(2) = [M:SOH4]VAT3(nolign-1) [F:SOP]BPAADD = [M:SOH4]DBPAADD(nolign-1) [F:SOP]SQHNUM = [M:SOH4]DETSQHNUM(nolign-1) [F:SOP]INVCND = [M:SOH4]DINVCND(NOL) : # 107890 : Scheduled invoices : (LD:08/12/15) If dim([M:SOH4]TSICOD1)>0: [F:SOP]TSICOD(0) = [M:SOH4]TSICOD1(nolign-1): Endif If dim([M:SOH4]TSICOD2)>0: [F:SOP]TSICOD(1) = [M:SOH4]TSICOD2(nolign-1): Endif If dim([M:SOH4]TSICOD3)>0: [F:SOP]TSICOD(2) = [M:SOH4]TSICOD3(nolign-1): Endif If dim([M:SOH4]TSICOD4)>0: [F:SOP]TSICOD(3) = [M:SOH4]TSICOD4(nolign-1): Endif If dim([M:SOH4]TSICOD5)>0: [F:SOP]TSICOD(4) = [M:SOH4]TSICOD5(nolign-1): Endif Return ############################################################### $CHARGESOQ #------------------------------------------------------# # Chargement ligne avant le write ou le rewrite # # Alimentation des zones de SORDERQ à partir du masque # #------------------------------------------------------# # Cas particulier où on modifie le texte en le supprimant Local Integer WRET If [M:SOH4]SOQTEX(NOL)="" & left$([F:SOQ]SOQTEX,3)="SOQ" Call SUP_CLOB([F:SOQ]SOQTEX,WRET) From TRTX3TEX Endif [F:SOQ] = [M:SOH4] If dim([F:SOQ]CPY)>0 : [F:SOQ]CPY=GSOCIETE : Endif [F:SOQ]BPAADD = [F:SOP]BPAADD [F:SOQ]STOFCY = [M:SOH4]DSTOFCY(NOL) [F:SOQ]DLVPIO = [M:SOH4]DDLVPIO(NOL) [F:SOQ]BPTNUM = [M:SOH4]DBPTNUM(NOL) [F:SOQ]MDL = [M:SOH4]DMDL(NOL) [F:SOQ]DRN = [M:SOH4]DDRN(NOL) [F:SOQ]DAYLTI = [M:SOH4]DDAYLTI(NOL) [F:SOQ]DEMDLVDAT = [M:SOH4]DDEMDLVDAT(NOL) [F:SOQ]SHIDAT = [M:SOH4]DSHIDAT(NOL) [F:SOQ]ALLTYP = [M:SOH4]DALLTYP(NOL) [F:SOQ]CCLREN = [M:SOH4]DCCLREN(NOL) [F:SOQ]CCLDAT = [M:SOH4]DCCLDAT(NOL) # Issue X3-38651 # PJT has changed : We need to update ORDERS If [F:SOQ]PJT<>[M:SOH4]DPJT(NOL) If [M:SOH4]WIPFLG(NOL) = "" [M:SOH4]WIPFLG(NOL) = "M" : Endif Endif # End issue X3-38651 [F:SOQ]PJT = [M:SOH4]DPJT(NOL) : # 71065 : PJT If [F:SOH]BETFCY=2 & [F:SOH]ORIFCY<>"" & [F:SOH]ORIFCY<>[F:SOH]SALFCY [F:SOQ]POHNUM = [F:SOH]CUSORDREF [F:SOQ]POPLIN = [M:SOH4]POPLIN(NOL) [F:SOQ]POQSEQ = 1 Endif # Ini SAM 120075 (JUCON 29/11/16) If func AFNC.ACTIV("EDIX3") If [M:SOH4]MAXDLVDAT(NOL)=[00/00/00] [M:SOH4]MAXDLVDAT(NOL) = [M:SOH4]DDEMDLVDAT(NOL) [F:SOQ]MAXDLVDAT = [M:SOH4]MAXDLVDAT(NOL) Endif Endif # End SAM 120075 (JUCON 29/11/16) #LTA.sn # If GLOCUSATAX # 106867.o If func AFNC.ACTIV("LTA") & [F:CPY]SSTTAXACT = 2 # 106867.n #Check from address, if different If [F:SOQ]STOFCY <> [F:SOH]STOFCY Call CHECK_FRADR([F:SOQ]STOFCY,1,WRET) From TRTADRLIB Endif # Check delivery address, if different If [F:SOQ]BPAADD <> "" and [F:SOQ]BPAADD <> [F:SOH]BPAADD Call CHECK_LIN_TOADR(1, [F:SOH]BPCORD, [F:SOQ]BPAADD) From TRTADRLIB Endif Endif #LTA.en # Calcul de la zone complémennt priorité de livraison [F:SOQ]DLVPIOCMP=9-[F:SOQ]DLVPIO If [M:SOH4]SOQTEX(NOL)<>"" If left$([M:SOH4]SOQTEX(NOL),3)="SOQ" Call CRE_CLOB([M:SOH4]SOQTEX(NOL),GOK) From TRTX3TEX If GOK<1 Return Endif Elsif !find(left$([M:SOH4]SOQTEX(NOL),3),"ITU","ITS") Call DUP_CLOB("SOQ",[M:SOH4]SOQTEX(NOL),GOK) From TRTX3TEX If GOK<1 Return Endif Endif [F:SOQ]SOQTEX = [M:SOH4]SOQTEX(NOL) Endif # Récupération du chrono pour les en-cours If [F:ITM]ITMREF <> [M]ITMREF(NOL) Read [ITM] ITM0=[M]ITMREF(NOL) If fstat Raz [F:ITM] Endif Endif # 91786 # Mise à jour des encours Si cde signée ou Si Paramètre maj encours article cde non signée à "Oui" #If [F:SOQ]STOMGTCOD <> 1 & [F:SOQ]DEMNUM = "" If [F:SOQ]STOMGTCOD <> 1 & [F:SOQ]DEMNUM = "" & ([F:SOH]APPFLG>2 | GSOHAPPORD=2) # 91786 Call NUMERO(GWIP,[F:SOQ]STOFCY,[F:SOQ]ORDDAT,"",[F:SOQ]DEMNUM,STAT) From SUBANM If GOK<0 Return Endif If STAT <> 0 # Call ERREUR(GWIP-mess(60,199,1)) From GESECRAN GERR=1 : GMESSAGE = GWIP-mess(60,199,1) Endif Endif # V6.1 : Le code prépa est rendu saisissable, l'init se fait en AM_ITMREF ## Initialisation du code prépa #Local Char WTSCCOD(GLONADI) (0..5) #Local Char WTSICOD(GLONADI) (0..5) #Local Integer I #If dim([M:SOH0]TSCCOD) <> -1 # For I = 1 To dim([M:SOH0]TSCCOD) # WTSCCOD(I-1) = [M:SOH0]TSCCOD(I-1) # Next I #Endif #If dim([M:SOH4]TSICOD1)>0: WTSICOD(0) = [M:SOH4]TSICOD1(nolign-1): Endif ##If dim([M:SOH4]TSICOD2)>0: WTSICOD(1) = [M:SOH4]TSICOD2(nolign-1): Endif #If dim([M:SOH4]TSICOD3)>0: WTSICOD(2) = [M:SOH4]TSICOD3(nolign-1): Endif #If dim([M:SOH4]TSICOD4)>0: WTSICOD(3) = [M:SOH4]TSICOD4(nolign-1): Endif #If dim([M:SOH4]TSICOD5)>0: WTSICOD(4) = [M:SOH4]TSICOD5(nolign-1): Endif #If [F:BPC]BPCNUM<>[M:SOH0]BPCORD # Read [BPC]BPC0=[M:SOH0]BPCORD # If fstat Raz [F:BPC] Endif #Endif #Call REC_PRECOD([M:SOH4]DSTOFCY(NOL),[M:SOH4]ITMREF(NOL),[F:ITM]TCLCOD,WTSICOD(0), #& WTSICOD(1),WTSICOD(2),WTSICOD(3),WTSICOD(4),[M:SOH0]BPCORD, #& [F:BPC]BCGCOD,WTSCCOD(0),WTSCCOD(1),WTSCCOD(2),WTSCCOD(3), #& WTSCCOD(4),[F:SOQ]PRECOD) From STKLIB # Stockage a la ligne des elt de facturation Call UPD_DSPLIN("SOQ",NOL) From TRTVENFACC Return ############################################################### $VERIF Local Shortint RES # Issue X3-160406 - 2019-10-11 by SR : In all cases, all Customers must be active Raz RES Call CTLBPCSTA([M:SOH0]BPCORD,1,RES) From TRTVENCTL If RES = 1 : GERR=1 : OK=0 : Return : Endif Call CTLBPCSTA([M:SOH1]BPCINV,2,RES) From TRTVENCTL If RES = 1 : GERR=1 : OK=0 : Return : Endif # End issue X3-160406 # VPO 07/12/10 68435 verifier valeur Condition de paiement, Code escompte, Regime de taxe # VPO 01/03/11 71999 ameliorer message d'erreur If [M:SOH1]VACBPR<>"" mkstat=0 # 71937 : Multilégislation #Call CONTADI([M:SOH1]VACBPR,"1","") From SUBADI #If mkstat : GERR=1 : OK=0 : GMESSAGE=mess(32,126,1)-'"'+func AFNC.INTCLE("AMZ","SOH1~VACBPR")+'"\'+GMESSAGE : Return : Endif #Call CONTROLE("ADI","",[M:SOH1]VACBPR,"1",RES) From CONTOBJ #If RES : GERR=1 : OK=0 : GMESSAGE=mess(32,126,1)-'"'+func AFNC.INTCLE("AMZ","SOH1~VACBPR")+'"\'+GMESSAGE : Return : Endif Call CONTTVB([M:SOH1]VACBPR,GCURLEG,"SOH1","VACBPR",[M:SOH0]SALFCY,"","") From SUBTVB If mkstat : GERR=1 : OK=0 : GMESSAGE=mess(32,126,1)-'"'+func AFNC.INTCLE("AMZ","SOH1~VACBPR")+'"\'+GMESSAGE : Return : Endif # 71937 : Multilégislation mkstat=0 Call C_VACBPR([M:SOH1]VACBPR) From SUBSOH If mkstat : GERR=1 : OK=0 : GMESSAGE=mess(32,126,1)-'"'+func AFNC.INTCLE("AMZ","SOH1~VACBPR")+'"\'+GMESSAGE : Return : Endif Endif If [M:SOH3]PTE<>"" # TODAN-120946.sn # Check if the payment term is CC and one of the line is not deliverable... If func SEPPLIB.SEPP_DOC([M:SOH3]PTE) If [M:SOH4]NBLIG > 0 and find(1, [M:SOH4]DLVFLG(0..[M:SOH4]NBLIG-1)) GERR=1 : OK = 0 : GMESSAGE= mess(62,2092,1) # Credit card payment is prohibited when a line contains an invoicing term. Return Endif Endif # TODAN-120946.en #MAE, Exi 71937 #Call CONTROLE("TPT","",[M:SOH3]PTE,"",RES) From CONTOBJ #If RES : GERR=1 : OK=0 : GMESSAGE=mess(32,126,1)-'"'+func AFNC.INTCLE("AMZ","SOH3~PTE")+'"\'+GMESSAGE : Return : Endif #-- X3Suivi 71937 : Données par législation pour le Conditions de paiement #--CPO 71937 01/08/2013 Suite dev review Call CONTTPT ([M:SOH3]PTE,GCURLEG,'','',[M:SOH0]SALFCY,'','') From SUBTPT If mkstat : GERR=1 : OK=0 : GMESSAGE=mess(32,126,1)-'"'+func AFNC.INTCLE("AMZ","SOH3~PTE")+'"\'+GMESSAGE : Return : Endif # FGR 22/07/2013 : X3SUIVI87923 (début) Call CTRL_PTE_SEPA_SDD([M:SOH3]PTE, GSOCIETE, [M:SOH1]BPCPYR) From TRTVENSDD If mkstat Then GERR = 1 OK = 0 GMESSAGE = mess(32,126,1)-'"'+func AFNC.INTCLE("AMZ","SOH3~PTE")+'"\'+GMESSAGE Return Endif # FGR 22/07/2013 : X3SUIVI87923 (fin) Gosub CHECK_TPT_FOR_PREPAYMENT_INVOICES From SUBSOHA1 # Issue X3-247735 by MRDAB Endif If [M:SOH3]DEP<>"" #--CPO 71937 TABDEPAGIO #Call CONTROLE("TDA","!",[M:SOH3]DEP,"",RES) From CONTOBJ #If RES : GERR=1 : OK=0 : GMESSAGE=mess(32,126,1)-'"'+func AFNC.INTCLE("AMZ","SOH3~DEP")+'"\'+GMESSAGE : Return : Endif Call CONTTDA([M:SOH3]DEP,GCURLEG,"SOH3","DEP",[M:SOH0]SALFCY,"","") From SUBTDA If mkstat : GERR=1 : OK=0 : GMESSAGE=mess(32,126,1)-'"'+func AFNC.INTCLE("AMZ","SOH3~DEP")+'"\'+GMESSAGE : Return : Endif #--/CPO Endif # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management If [M:SOH3]INVCND<>"" Call CONTINVCND([M:SOH3]INVCND,GCURLEG,"SOH3","INVCND",[M:SOH0]SALFCY,"","") From SUBINVCND If mkstat : GERR=1 : OK=0 : GMESSAGE=mess(32,126,1)-'"'+func AFNC.INTCLE("AMZ","SOH3~INVCND")+'"\'+GMESSAGE : Return : Endif Endif Gosub VERIF From LIBSAL_INVCND_SOH # End issue 107888 If dim(GWEBSERV)=1 & GWEBSERV=1 # Etiquette de création des gratuits en mode Web Service Gosub TRTCREGRA_WEBSERV From TRTVENBOM # Issue 107888 - 2016-09-09 by CPO : US150 Free products not deliverable invoicing #TODO 107888 US150 içi, création échéancier ? ou alors, faut-il le faire dans le TRTCREGRA_WEBSERV ? # Etiquette de création d'une nomenclature en mode Web Service Gosub TRTCRENOM_ADAPI From TRTVENBOM # Issue 107888 - 2016-09-09 by CPO : US155 Kit & flexible kit scheduled invoices #TODO 107888 US155 içi, création échéancier ? ou alors, faut-il le faire dans le TRTCRENOM_WEBSERV ? Endif #---------------------------------------------------# # Verifications et traitements avant creation/modif # #---------------------------------------------------# # FGR 08/10/2014 : X3SUIVI 103220 (début) #Local Char CHAINE, WMESS(80) Local Char WMESS(80) If dim(CHAINE) <= 0 Then Local Char CHAINE(250) Endif # FGR 08/10/2014 : X3SUIVI 103220 (fin) Local Integer RET Local Char SVMESSAGE(250) Local Integer NE # FGR 13/08/2014 : X3SUIVI93839 Local Char SAXECTRL(GLONCCE) # FGR 13/08/2014 : X3SUIVI93839 If GREP="D" # --> Ctrl particulier en dupli. pour l'euro : vérifier que ce n'est pas une devise "in" Call CONTDEV([M:SOH1]CUR,[M:SOH0]ORDDAT) From TRTDEV If mkstat GERR=1 : GMESSAGE : OK=0 : Return : Endif # Issue X3-160406 - 2019-10-11 by SR : already done above # --> Ctrl particulier en dupli. : Ctrl client commande inactif # Car le client commande est non modifiable en dupli. : Pas de passage en action ctrl bpcord #If [F:BPC]BPCNUM <> [M:SOH0]BPCORD # Read [BPC]BPC0 = [M:SOH0]BPCORD # If fstat Raz [F:BPC] : Endif #Endif #If [F:BPC]BPCSTA <> 2 # GERR=1 : GMESSAGE = mess(194,192,1) # OK=0 : Return #Endif # End issue X3-160406 # --> Commande inter-site : Demande de confirmation en dupplication # Le client commande est aussi le fsseur (correspond au site de vente) If [M:SOH1]BETFCY=2 & [M:SOH0]BPCORD=[M:SOH0]BPSNUM Local Integer WOK : WOK=1 Call AVERTIR (mess(151,191,1), WOK)From GESECRAN If WOK=1 GERR=1 : OK=0 : Return : Endif Endif # Issue X3-44998 - 2017-07-27 by CPO : Duplicated sale documents: analytical dimension not controlled (idem X3SUIVI93839) #--This control has to be done also during Creation/Update of a document #If func AFNC.ACTIV("ANA")>0 # SAM 119859 (X3-7678 JUCON 21/11/2013) # # ------------------------------------- # # FGR 13/08/2014 : X3SUIVI93839 (début) # For I = 0 To [M:SOH3]NBAXE-1 # If [M:SOH3]CCE(I) <> "" Then # nolign = I + 1 # Call C_CCE([M:SOH3]CCE(I)) From W1SOH3 # If mkstat Then # OK = 0 # Break # Endif # Endif # Next # If OK = 0 Then # Return # Endif # # FGR 13/08/2014 : X3SUIVI93839 (fin) #Endif # SAM 119859 (X3-7678 JUCON 21/11/2016) # End issue X3-44998 # ------------------------------------- # Vérification que les articles sont actifs For I=0 To [M:SOH4]NBLIG-1 Read [ITM]ITM0=[M:SOH4]ITMREF(I) If [F:ITM]ITMSTA = 6 GERR=1 : GMESSAGE = [M:SOH4]ITMREF(I)-":"-mess(3,196,1)+" ("+mess([F:ITM]ITMSTA,246,1)+")" OK=0 : Break Endif # 89275 : Duplication cde et ctrl des prix If GDACLOK=1 GNETMAR=1 Call CTLNETPRI([M:SOH0]BPCORD, [M]CHGTYP, [M]ORDDAT, [M:SOH0]CUR,I) From TRTVENPRI If mkstat=2 OK=0 : Break Endif Call CTLPFM([M:SOH0]CUR,[M:SOH4]CPRPRI(I), I) From TRTVENPRI If mkstat=2 OK=0 : Break Endif Endif # 89275 # Issue X3-44998 - 2017-07-27 by CPO : Duplicated sale documents: analytical dimension not controlled (idem X3SUIVI93839) #--This control has to be done also during Creation/Update of a document (moved below) # ------------------------------------- # FGR 13/08/2014 : X3SUIVI93839 (début) #For NE = 1 To 20 # If evalue("type([M:SOH4]CCE" + num$(NE) + "(I)) >= 0") Then # SAXECTRL = evalue("[M:SOH4]CCE" + num$(NE) + "(I)") # If SAXECTRL <> "" Then # # Issue X3-44998 - 2017-07-27 by CPO : Duplicated sale documents: analytical dimension not controlled (idem X3SUIVI93839) # #Call CTRL_CCE(SAXECTRL, NE, "", GFINRSP, [M:SOH0]ORDDAT) From TRTX3CPT # nolign = I + 1 # #--for the ENAFLG flag # Call CONTSEL("CCE","!",SAXECTRL,num$(GDIE(NE)),mkstat) From CONTOBJ # If !mkstat # Call CTRL_CCE(SAXECTRL, NE, "", GFINRSP, [M:SOH0]ORDDAT) From TRTX3CPT # Endif # # End issue X3-44998 # If mkstat Then # OK = 0 # GMESSAGE = mess(162,154,1)-[M:SOH4]ITMREF(I)-":"-GMESSAGE # Issue X3-44998 - 2017-07-27 by CPO : Duplicated sale documents: analytical dimension not controlled (idem X3SUIVI93839) # Break # Endif # Endif # Endif #Next NE #If OK = 0 Then # Break #Endif # FGR 13/08/2014 : X3SUIVI93839 (fin) # ------------------------------------- # End issue X3-44998 Next I GNETMAR=0 : # 89275 If OK=0 Return Endif Endif If [M:SOH0]SALFCY<>[M:SOH2]STOFCY Read [FCY]FCY0=[M:SOH2]STOFCY # If fstat | [F:FCY]LEGCPY<>GSOCIETE If fstat Raz [F:FCY] : Call RSTA ("FCY",[M:SOH2]STOFCY) From GLOCK : OK=0 : Return Endif If dim(GVENFLG01)<=0 | (dim(GVENFLG01)>0 & GVENFLG01<>1) If [F:FCY]LEGCPY<>GSOCIETE GERR=1 : GMESSAGE=mess(2,194,1) : OK=0 : Return Endif Endif Endif #VPO 28/08/09 51875 verif SHIDAT affichee # Issue X3-125879 - 2019-05-09 by SR : Only if SHIPDAT not enterable #If [M:SOH2]SHIDAT<>[0/0/0] If varmode([M:SOH2]SHIDAT) <> 0 & [M:SOH2]SHIDAT<>[0/0/0] mkstat=0 Local Char PARVALUES(250)(1..20) , SAUVACT(20) Call C_SHIDAT([M:SOH2]SHIDAT) From SUBSOH If mkstat : GERR = 1 : OK=0 : Return : Endif SAUVACT = GACTION : GACTION = "CTLDATORD" PARVALUES(1) = [M:SOH0]ORDDAT Local Date VALUEDAT VALUEDAT = [M]SHIDAT Call S_AFF_DAT(VALUEDAT,PARVALUES,"CTLDATORD","TRTVENCTL","") From GACTION GACTION = SAUVACT If mkstat : GERR = 1 : OK=0 : Return : Endif SAUVACT = GACTION : GACTION = "CTLUVYFCY" PARVALUES(1) = [M]STOFCY PARVALUES(2) = "1" Local Date VALUEDAT VALUEDAT = [M]SHIDAT Call S_AFF_DAT(VALUEDAT,PARVALUES,"CTLUVYFCY","TRTVENCTL","") From GACTION GACTION = SAUVACT If mkstat : GERR = 1 : OK=0 : Return : Endif Endif # Si transformation d'un devis avec prospect il est possible que la condition de paiement soit à "" If [M:SOH3]PTE="" GMESSAGE = mess(265,192,1) : GERR=1 : OK=0 : Return : Endif #--> Vérification que tous les axes entête ont bien été saisis (s'ils sont saisissables) If GHEADIE = 1 : # Axes entêtes saisissables (Initialisé par GETCPY) If dim([M]NBAXE)>0 For nolign = 1 To GNBDIE If [M]CCE(nolign-1)="" & GOBLDIE(nolign)=2 GERR=1 : GMESSAGE = mess(177,199,1) : OK = 0 : Break Endif Next nolign Endif If OK = 0 Return Endif Endif # X3-69134 : Performance enhancements for sales order import : X3-74053 : Analytical dimensions management (LD:05/29/18) # For import, as it has been done in SUBSOH.C_CCEX, it is not necessary to redo it If !GIMPORT & !GWEBSERV # X3-69134 : Performance enhancements for sales order import : X3-74053 : Analytical dimensions management (LD:05/29/18) # Issue X3-44998 - 2017-07-27 by CPO : Duplicated sale documents: analytical dimension not controlled (idem X3SUIVI93839) #--This control has to be done also during Creation/Update of a document (moved outside GREP="D") Gosub VERIF_CTL_ALLCCE From SUBSOHA1 If OK=0 : Return : Endif # End issue X3-44998 # X3-69134 : Performance enhancements for sales order import : X3-74053 : Analytical dimensions management (LD:05/29/18) Endif # X3-69134 : Performance enhancements for sales order import : X3-74053 : Analytical dimensions management (LD:05/29/18) # 107890 : Scheduled invoices : (LD:08/12/15) Local Integer WI, WJ WJ=find(1,[M:SOH4]DLVFLG(0..[M:SOH4]NBLIG-1)) If [M:SOH0]SOHCAT=1 & WJ<>0 # Invoicing condition is mandatory for undeliverable item For WI=WJ-1 To [M:SOH4]NBLIG-1 If [M:SOH4]DLVFLG(WI)=1 & [M:SOH4]DINVCND(WI)="" GERR=1 : GMESSAGE = [M:SOH4]ITMREF(WI)-":"-mess(865,197,1)-":"-mess(864,197,1) OK=0 : Break Endif Next I If OK = 0 Return Endif Endif # 107890 : Scheduled invoices : (LD:08/12/15) # FGR 13/03/2014 : X3SUIVI97696 (début) déplacé après "Spécificité USA" # # --> Contrôle En-cours autorisé atteint # # Issue 73816 : No allocation if credit limit exceeded during order creation/modification # #Local Decimal OSTNEW # #OSTNEW = [M:SOH0]OST # #If GOSTORD = 2 # # OSTNEW += [M:SOH4]ORDATI # #Endif # Gosub CAL_OST # If (OSTNEW > [M:SOH0]OSTAUZ) # Call FMT_MNTCUR([M]OSTAUZ, [M]CUR, CHAINE) From TRTVENPRI # OK=2 : GERR=3 : GMESSAGE = sum(mess(29,192,1), CHAINE, [M]CUR) # Endif # # --> Contrôle Montant mini de commande # If [M:SOH4]NBLIG <> 0 & [M:SOH4]ORDNOT < [M:SOH0]ORDMINAMT # Call FMT_MNTCUR([M]ORDMINAMT, [M]CUR, CHAINE) From TRTVENPRI # WMESS = sum(mess(28,192,1), CHAINE, [M]CUR) # If GDACLOK = 1 # GERR=1 : GMESSAGE=WMESS : OK=0 : Return # Else # If GERR = 3 GMESSAGE += " \ " Endif # GERR=3 : GMESSAGE += WMESS # Endif # Endif # If GERR=3 & GMESSAGE<>"" # Local Integer WOK : WOK=2 : Call AVERTIR(GMESSAGE, WOK) From GESECRAN # Raz GMESSAGE, GERR : If WOK=1 OK=0 : GERR=1 : Return : Endif # Endif # FGR 13/03/2014 : X3SUIVI97696 (fin) # --> Traitement des groupés s'il y a plus d'une ligne # si au moins une ligne a été modifiée If [M:SOH4]NBLIG >= 1 & (sum([M:SOH4]UPDFLG) <> 0 | [M:SOH4]NBLIG <> [F:SOH]LINNBR) # --> Pas de trt si une ligne est soldée # --> Pas de trt si la commande est livrée, facturée # --> Pas de trt si la commande est sur une liste de prépa ou préparée : # 97383 RET=1 # 107888 : Scheduled invoices : (LD:19/05/16) # If (find (3, [M:SOH4]SOQSTA(0..[M:SOH4]NBLIG-1)) <> 0 | #& ([M:SOH1]DLVSTA <> 1 & [M:SOH0]SOHCAT <> 3) | #& ([M:SOH1]INVSTA <> 1 & [M:SOH0]SOHCAT = 3) | #& (sum([M:SOH4]LPRQTY,[M:SOH4]OPRQTY,[M:SOH4]PREQTY)<>0)) : # 97383 # --> Pas de trt si une ligne est soldée # Commande normale/prêt et il y a des lignes livrables # --> Pas de trt si la commande est sur une liste de prépa ou préparée : # 97383 # --> Pas de trt si la commande est livrée # Commande à facturation directe # Commande normale et ligne non livrable # --> Pas de trt si la commande est facturée If (find (3, [M:SOH4]SOQSTA(0..[M:SOH4]NBLIG-1)) <> 0 | & ([M:SOH1]DLVSTA <> 1 & [M:SOH0]SOHCAT <> 3 & sum([M:SOH4]DLVFLG)<>[M:SOH4]NBLIG) | & ([M:SOH1]INVSTA <> 1 & ([M:SOH0]SOHCAT = 3 | sum([M:SOH4]DLVFLG)=[M:SOH4]NBLIG)) | & (sum([M:SOH4]LPRQTY,[M:SOH4]OPRQTY,[M:SOH4]PREQTY)<>0)) : # 97383 # 107888 : Scheduled invoices : (LD:19/05/16) RET=0 Endif # Issue X3-200515/216443 - 2020-10-06 by MUARN : pas de trt si une ligne associée à un plan de facturation # ayant une échénance non facturée associé à une situation d'avancement # no trt if a scheduled invoice linked to a progress status not invoiced If dim([M:SOH4]PBILDTOINV) > 1 & RET = 1 & find(2,[M:SOH4]PBILDTOINV(0..[M:SOH4]NBLIG-1)) RET = 0 Endif # End issue X3-200515/216443 If RET=1 If GGRPPRI = 3 & !GIMPORT SVMESSAGE=GMESSAGE Call OUINON(mess(61,196,1), RET) From GESECRAN GMESSAGE=SVMESSAGE Endif If GGRPPRI = 2 | RET = 2 Call RECH_GROUPE("SOH") From TRTVENTAR Gosub RECALC_GROUPE From SUBSOHB # Issue X3-38233 - 2019-03-14 by SR : GERR = 2 is not an error. It's a warning #If OK=0 or GERR>0 : OK=0 : Return : Endif # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management If OK=0 or find(GERR,0,2) = 0 : OK=0 : Return : Endif # Optimisation 15/10/02 # Affzo [M:SOH0]1-99 # Affzo [M:SOH1]1-99 # Affzo [M:SOH4]1-99 Endif Endif Endif # --> Il doit y avoir au moins une ligne # Test fait après la rech. groupé si elle a supprimé des gratuits et nblig devient = à 0 If [M:SOH4]NBLIG = 0 GERR=1 : GMESSAGE = mess(61,199,1) OK=0 Return : # 104513 : Pb Sales Order creation without lines Endif # X3-69134 : Performance enhancements for sales order import / X3-91094 : Miscellaneous improvements (PJT, CRM calls) (LD:05/30/18) # Ctrl has to be done only if [M:SOH1]PJT or [M:SOH4]DPJT is fed If [M:SOH1]PJT<>"" | sigma(indcum=0, [M:SOH4]NBLIG-1, ([M:SOH4]DPJT(indcum)<>""))>0 # X3-69134 : Performance enhancements for sales order import / X3-91094 : Miscellaneous improvements (PJT, CRM calls) (LD:05/30/18) # FGR 01/12/2011 : X3SUIVI71065 (début) Call PJT_CONTROLE_HEAD_DETAIL("[M:SOH1]PJT", "[M:SOH4]DPJT") From TRTPJT If GERR <> 0 Then OK = 0 : Return Endif # FGR 01/12/2011 : X3SUIVI71065 (fin) # X3-69134 : Performance enhancements for sales order import / X3-91094 : Miscellaneous improvements (PJT, CRM calls) (LD:05/30/18) Endif # X3-69134 : Performance enhancements for sales order import / X3-91094 : Miscellaneous improvements (PJT, CRM calls) (LD:05/30/18) # ------------------------------------------------------------- # # Spécificité USA : Branchement du sous-pro de calcul des taxes # # ------------------------------------------------------------- # #Call LECKUACT("KUA",RET) From TRTX3 # If GLOCUSATAX # 106867.o If func AFNC.ACTIV("LTA") & [F:CPY]SSTTAXACT = 2 # 106867.n Local Integer WTRA : WTRA=0 # If GTRACE="" Call OUVRE_TRACE(mess(322,197,1)) From LECFIC : WTRA=1 Endif # 107858.o If !GIMPORT & !GWEBSERV & GTRACE="" # 107858.sn Call OUVRE_TRACE(mess(322,197,1)) From LECFIC WTRA=1 Endif # 107858.en Call CLCTAXEUSA("SOH4", "2") From TRTTAXSST # 106867.n # Call CLCTAXEUSA("SOH4", "2") From TRTTAXUSA # 106867.o If !GIMPORT & !GWEBSERV # 107858.n Call FERME_TRACE From LECFIC Endif # 107858.n # If GMESSAGE <> "" & !GIMPORT # 107858.o If GMESSAGE <> "" & !GIMPORT & !GWEBSERV # 107858.n Call OUINON(mess(322,197,1)-"\"-GMESSAGE+"\"+mess(88,191,1), RET) From GESECRAN If RET=2 Call LEC_TRACE From LECFIC : Endif Raz GMESSAGE Endif # If !WTRA Call OUVRE_TRACE("") From LECFIC Endif # 107858.o If !GIMPORT & !GWEBSERV & !WTRA # 107858.sn Call OUVRE_TRACE("") From LECFIC Endif # 107858.en Affzo [M:SOH4]1-99 Endif #LTA.sn # If func AFNC.ACTIV("LTA") and GLOCUSATAX and func TRTADRLIB.CHKADR_MANDATORY() # 106867.o If func AFNC.ACTIV("LTA") and [F:CPY]SSTTAXACT = 2 and func TRTADRLIB.CHKADR_MANDATORY() # 106867.n Gosub CHKADR_ORDER From TRTADRLIB If GERR <> 0 Then OK = 0 Return Endif Endif #LTA.en # FGR 13/03/2014 : X3SUIVI97696 (début) déplacé après "Spécificité USA" # --> Contrôle En-cours autorisé atteint # Issue 73816 : No allocation if credit limit exceeded during order creation/modification #Local Decimal OSTNEW #OSTNEW = [M:SOH0]OST #If GOSTORD = 2 # OSTNEW += [M:SOH4]ORDATI #Endif Gosub CAL_OST If (OSTNEW > [M:SOH0]OSTAUZ) Call FMT_MNTCUR([M]OSTAUZ, [M]CUR, CHAINE) From TRTVENPRI If !([M:SOH1]BETFCY = 2 & [M:SOH1]BETCPY <> 2) or GCTLBETFCY = 2 Then # FGR 10/03/2015 : X3SUIVI23273 - Si pas (Intersit & non intersoc) ou si Ctrl intersit encours&prix OK = 2 GERR = 3 GMESSAGE = sum(mess(29,192,1), CHAINE, [M]CUR) Endif Endif # --> Contrôle Montant mini de commande If [M:SOH4]NBLIG <> 0 & [M:SOH4]ORDNOT < [M:SOH0]ORDMINAMT Call FMT_MNTCUR([M]ORDMINAMT, [M]CUR, CHAINE) From TRTVENPRI WMESS = sum(mess(28,192,1), CHAINE, [M]CUR) If GDACLOK = 1 GERR=1 : GMESSAGE=WMESS : OK=0 : Return Else If GERR = 3 GMESSAGE += " \ " Endif GERR=3 : GMESSAGE += WMESS Endif Endif If GERR=3 & GMESSAGE<>"" Local Integer WOK : WOK=2 : Call AVERTIR(GMESSAGE, WOK) From GESECRAN Raz GMESSAGE, GERR : If WOK=1 OK=0 : GERR=1 : Return : Endif Endif # FGR 13/03/2014 : X3SUIVI97696 (fin) ################################# #Modif CRM 22/10/2003 If GMODU(13) = 2 Call SETMKGORI("SOH", [M:SOH1]PJT) From SUBOPPB Endif ################################# #Modif CRM 24/09/2003 Raz [F:SOQ]PITFLG ################################# #Modif CRM 20/10/2003 If GMODU(12) = 2 Call SOHSRENUM From SUBSREB3 Endif #85785 * RMA * document amount cannot be negative If func PORLEGLIB.DIGSIGN([M:SOH0]SALFCY, "") & ([M:SOH4]ORDINVATI<0) GERR = 1: GMESSAGE = mess(00216,00191,1) : OK = 0 : Return Endif If func AFNC.ACTIV("DKS") & GCURLEG ="POR" & !func PORLEGLIB.CONT_DATETIME(GREP,GFONCTION) : OK = 0 : GERR = 1 : Return : Endif Return #################################################################### # Issue 73816 : No allocation if credit limit exceeded during order creation/modification # --> Calcul En-cours $CAL_OST Local Decimal OSTNEW OSTNEW = [M:SOH0]OST # X3-218176 : Orders not put back to credit hold after lines added / X3-226050 - 2020-11-25 by LD # If valuation + Tax amount is increased and the sales order has been manually unblocked for credit hold # If the user don't have Authorization to unlock order # Credit control has to be done again to recalculate credit status #If GOSTORD = 2 OSTNEW += [M:SOH4]ORDATI Endif If GOSTORD = 2 & [M:SOH2]UNL<>2 OSTNEW += [M:SOH4]ORDATI Endif If dim(WSVG_ORDATI)>0 If [M]ORDATI>WSVG_ORDATI & [M:SOH2]UNL=2 & GCDTUNL=1 [M:SOH2]UNL=1 Local Decimal WOST Call SDCDTSTA ([M:SOH0]SOHNUM,[M:SOH0]BPCORD,[M:SOH0]CHGTYP,0,[M:SOH0]CUR,[M:SOH0]ORDDAT,[M:SOH2]UNL,1,[M:SOH1]CDTSTA,WOST,GBIDD1) From TRTVENCDT If GOSTORD = 2 OSTNEW=WOST+[M:SOH4]ORDATI-WSVG_ORDATI Endif Endif Endif # X3-218176 : Orders not put back to credit hold after lines added / X3-226050 - 2020-11-25 by LD Return #################################################################### $CHARGENTETE #--------------------------------------------------# # Chargement de l'entete avant le Write ou Rewrite # #--------------------------------------------------# Local Integer I, WRET If dim([F:SOH]CPY)>0 : [F:SOH]CPY=GSOCIETE : Endif # Alimentation du numero d'avenant If GREV = 2:[F:SOH]REVNUM = [M:SOH0]REVNUM:Endif # Initialisation de la date de retour de prêt If dim([M:SOH1]LNDRTNDAT) > 0 If [M:SOH0]SOHCAT = 2 & [M:SOH1]LNDRTNDAT = [0/0/0] [M:SOH1]LNDRTNDAT = addmonth([M:SOH0]ORDDAT,1) [F:SOH]LNDRTNDAT = [M:SOH1]LNDRTNDAT Endif Endif # Alimentation des types de frais/remises et des no éléments de facturation For I = 1 To dim([F:SOH]DISCRGTYP) [F:SOH]DISCRGTYP (I-1) = GDISCRGTYP (I-1) [F:SOH]INVDTALIN (I-1) = GINVDTALIN (I-1) Next I [F:SOH]LINNBR = [M:SOH4]NBLIG # Alimentation des totaux [F:SOH]ORDNOT = [M:SOH4]ORDNOT [F:SOH]ORDATI = [M:SOH4]ORDATI [F:SOH]DLRNOT = [M:SOH4]DLRNOT [F:SOH]DLRATI = [M:SOH4]DLRATI [F:SOH]PFMTOT = [M:SOH4]PFMTOT # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) [F:SOH]INRSCHNOT = [M:SOH4]INRSCHNOT [F:SOH]INRSCHATI = [M:SOH4]INRSCHATI [F:SOH]INRNOT = [M:SOH4]INRNOT [F:SOH]INRATI = [M:SOH4]INRATI # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) # Alimentation de l'adresse commande [F:SOH]CNTNAM = [M:ADB1]CNTNAM #If find([M:ADB1]ADBFLG,0,1) Call CHARGE_ADRMSK("ADB1", [F:SOH]BPCORD) From TRTVENDIV : Endif : # Bug 67868 If GACTSAD=2 & find([M:ADB1]ADBFLG,0,1) Call CHARGE_ADRMSK("ADB1", [F:SOH]BPCORD) From TRTVENDIV : Endif : # Bug 67868 Gosub CHARGE_ADRBPC From SUBSOHB # Alimentation de l'adresse livraison [F:SOH]CNDNAM = [M:ADB2]CNTNAM #If find([M:ADB2]ADBFLG,0,1) Call CHARGE_ADRMSK("ADB2", [F:SOH]BPCORD) From TRTVENDIV : Endif : # Bug 67868 # If (GACTSAD=2 | GLOCUSATAX) & find([M:ADB2]ADBFLG,0,1) Call CHARGE_ADRMSK("ADB2", [F:SOH]BPCORD) From TRTVENDIV : Endif : # Bug 67868 # 106867.o If (GACTSAD=2 | (func AFNC.ACTIV("LTA") & [F:CPY]SSTTAXACT = 2)) & find([M:ADB2]ADBFLG,0,1) Call CHARGE_ADRMSK("ADB2", [F:SOH]BPCORD) From TRTVENDIV : Endif : # Bug 67868 # 106867.n Gosub CHARGE_ADRBPD From SUBSOHB # Alimentation de l'adresse facturation [F:SOH]CNINAM = [M:ADB3]CNTNAM #LTA.sn # If GLOCUSATAX and [F:SOH]ADRVAL <> 2 # 106867.o If func AFNC.ACTIV("LTA") and [F:CPY]SSTTAXACT = 2 and [F:SOH]ADRVAL <> 2 # 106867.n Call CHECK_DOC_TOADR(2, RET) From TRTADRLIB If RET = 0 : [F:SOH]ADRVAL = 2 : Endif Endif #LTA.en #If find([M:ADB3]ADBFLG,0,1) Call CHARGE_ADRMSK("ADB3", [F:SOH]BPCINV) From TRTVENDIV : Endif : # Bug 67868 If GACTSAD=2 & find([M:ADB3]ADBFLG,0,1) Call CHARGE_ADRMSK("ADB3", [F:SOH]BPCINV) From TRTVENDIV : Endif : # Bug 67868 #If dim([M:ADB3]EECNUM)>0 [F:SOH]BPIEECNUM = [M:ADB3]EECNUM Endif Gosub CHARGE_ADRBPI From SUBSOHB # Alimentation des zones venant du client livré [F:SOH]STOFCY = [M:SOH2]STOFCY [F:SOH]DLVPIO = [M:SOH2]DLVPIO [F:SOH]DRN = [M:SOH2]DRN [F:SOH]DAYLTI = [M:SOH2]DAYLTI [F:SOH]MDL = [M:SOH2]MDL [F:SOH]BPTNUM = [M:SOH2]BPTNUM # Calcul du nombre de lignes soldées et de l'état solde Raz [F:SOH]CLELINNBR Raz [F:SOH]INVLINNBR # Issue X3-59732 #For I=0 To [M]NBLIG-1 For I=0 To [M:SOH4]NBLIG-1 # End issue X3-59732 If [M:SOH4]SOQSTA(I) = 3 : [F:SOH]CLELINNBR +=1 : Endif If [M:SOH4]INVFLG(I) = 2 : [F:SOH]INVLINNBR +=1 : Endif Next I If [F:SOH]CLELINNBR >= [F:SOH]LINNBR : [F:SOH]ORDSTA = 2 : Else:[F:SOH]ORDSTA=1 : Endif [M:SOH1]ORDSTA = [F:SOH]ORDSTA # 88452 - order holds import If dim([M:SOH1]HLDSTA)>0 & [M:SOH1]HLDSTA>1 If [F:SOH]HLDUSR="" : [F:SOH]HLDUSR = GUSER : Endif If [F:SOH]HLDDAT=[0/0/0] : [F:SOH]HLDDAT = date$ : Endif If [F:SOH]HLDTIM="" : [F:SOH]HLDTIM = time$ : Endif Endif If [M:SOH0]SOHTEX1<>"" If left$([M:SOH0]SOHTEX1,3)="SOH" Call CRE_CLOB([M:SOH0]SOHTEX1,GOK) From TRTX3TEX If GOK<1 Return Endif Elsif left$([M:SOH0]SOHTEX1,3)<>"BPC" Call DUP_CLOB("SOH",[M:SOH0]SOHTEX1,GOK) From TRTX3TEX If GOK<1 Return Endif Endif [F:SOH]SOHTEX1 = [M:SOH0]SOHTEX1 Endif If [M:SOH0]SOHTEX2<>"" If left$([M:SOH0]SOHTEX2,3)="SOH" Call CRE_CLOB([M:SOH0]SOHTEX2,GOK) From TRTX3TEX If GOK<1 Return Endif Elsif left$([M:SOH0]SOHTEX2,3)<>"BPC" Call DUP_CLOB("SOH",[M:SOH0]SOHTEX2,GOK) From TRTX3TEX If GOK<1 Return Endif Endif [F:SOH]SOHTEX2 = [M:SOH0]SOHTEX2 Endif # Raz du no devis de l'entête commande s'il y en a plusieurs # Issue 112736 : # In Import mode, it is too early to do that here because # for lines [M:SOH4] is charged with the imported file in VALLIG called in CREATION and MODIF # and we can't do it in CREATION and MODIF because it's too late [F:SOH] is already updated # So we can't do that in Import mode If !GIMPORT If [F:SOH]SQHNUM <> "" For I=0 To [M:SOH4]NBLIG-1 If [M:SOH4]DETSQHNUM(I)<>"" & [M:SOH4]DETSQHNUM(I) <> [F:SOH]SQHNUM Raz [F:SOH]SQHNUM, [M:SOH3]SQHNUM Break Endif Next I If sum([M:SOH4]DETSQHNUM(0..[M:SOH4]NBLIG-1)) = "" Raz [F:SOH]SQHNUM, [M:SOH3]SQHNUM Endif # Maj du no devis dans l'entête commande s'il n'y en a qu'une Else For I=0 To [M:SOH4]NBLIG-1 If [M:SOH4]DETSQHNUM(I)<>"" If [M:SOH3]SQHNUM="" [M:SOH3]SQHNUM=[M:SOH4]DETSQHNUM(I) [F:SOH]SQHNUM=[M:SOH4]DETSQHNUM(I) Elsif [M:SOH3]SQHNUM<>[M:SOH4]DETSQHNUM(I) Raz [F:SOH]SQHNUM, [M:SOH3]SQHNUM Break Endif Endif Next I Endif Endif # End issue 112736 # Alimentation des montants en devise société Call COURMNT([F:SOH]CUR,GLOCALDEV,GLOCALDEV,[F:SOH]CHGTYP,[F:SOH]ORDDAT,1, & [F:SOH]ORDNOT,[F:SOH]ORDNOTL,[F:SOH]CHGRAT,WRET) From TRTDEV Call COURMNT([F:SOH]CUR,GLOCALDEV,GLOCALDEV,[F:SOH]CHGTYP,[F:SOH]ORDDAT,1, & [F:SOH]ORDATI,[F:SOH]ORDATIL,[F:SOH]CHGRAT,WRET) From TRTDEV # ACA BPAPYR Initialisé avec : # si le tiers payeur de la commande est le tiers payeur du client commande : # l'adresse du tiers payeur à partir de l'adresse du tiers payeur du client commande # sinon il faut prendre l'adresse par défaut du tiers payeur. Read [BPC]BPC0=[F:SOH]BPCORD If fstat Raz [F:BPC] Endif If [F:BPC]BPCPYR=[F:SOH]BPCPYR [F:SOH]BPAPYR=[F:BPC]BPAPYR Else Read [BPR]BPR0=[F:SOH]BPCPYR If fstat Raz [F:BPR] Endif [F:SOH]BPAPYR=[F:BPR]BPAADD Endif # 106776- EDI fields If func AFNC.ACTIV("EDIX3") If [F:SOH]DEMDLVHOU <> [M:SOH2]DEMDLVHOU [F:SOH]DEMDLVHOU = [M:SOH2]DEMDLVHOU Endif Endif Return #################################################################### $VERROU_SOH Local Char MACLCK(50), USRLCK(50) : # Bug 82375 #--------------------------------------------------# # Verrouillage de la commande pour bouton # #--------------------------------------------------# If dim (BOUT)>0 # # hcb 97100 + 98749 deb Case BOUT When "6" : # pour resoudre ce bug le lock n est plus fait sur l entete mais sur les lignes For [SOQ]SOQ0 Where SOHNUM = [M:SOH0]SOHNUM SYMBOLE2 = "SOQ"+[F:SOQ]SOHNUM+"\"+num$([F:SOQ]SOPLIN)+"\"+num$([F:SOQ]SOQSEQ) Lock = SYMBOLE2 If fstat # Modification en cours sur un autre poste GMESSAGE=[F:SOQ]SOHNUM+"\"+num$([F:SOQ]SOPLIN)+"\"+num$([F:SOQ]SOQSEQ)-":"-mess(10,100,1) GERR = 1 Call QUILOCKE(SYMBOLE2,[L]MACLCK,[L]USRLCK) From OBJDIV If [L]USRLCK<>"" GMESSAGE -= "\"+mess(101,126,1)-":"-[L]USRLCK : # La fiche est utilisée par Endif Break Endif Next When "E", "F", "H", "J", "K", "L", "M", "1", "2", "3", "4" , "5" : SYMBOLE2 = "SOH"+[M:SOH0]SOHNUM Lock = SYMBOLE2 If fstat # modification en cours sur un autre poste GERR = 1 : GMESSAGE=[M:SOH0]SOHNUM-":"-mess(10,100,1) Call QUILOCKE(SYMBOLE2,[L]MACLCK,[L]USRLCK) From OBJDIV If [L]USRLCK<>"" GMESSAGE -= "\"+mess(101,126,1)-":"-[L]USRLCK : # La fiche est utilisée par Endif Endif # When Default Endcase # # hcb 97100 + 98749 fin Else SYMBOLE2 = "SOH"+[M:SOH0]SOHNUM # X3-98359 Locked symbol after manual allocation (LCC-06/08/18) If dim(GLOCKSUP) # If dim(GLOCKSUP) -> The action is Manual Allocation Call QUILOCKE(SYMBOLE2,[L]MACLCK,[L]USRLCK) From OBJDIV #-> Test is the lock is already done Endif # End X3-98359 Locked symbol after manual allocation (LCC-06/08/18) Lock = SYMBOLE2 If fstat # modification en cours sur un autre poste GERR = 1 : GMESSAGE=[M:SOH0]SOHNUM-":"-mess(10,100,1) Call QUILOCKE(SYMBOLE2,[L]MACLCK,[L]USRLCK) From OBJDIV If [L]USRLCK<>"" GMESSAGE -= "\"+mess(101,126,1)-":"-[L]USRLCK : # La fiche est utilisée par Endif Endif Endif # X3-98359 Locked symbol after manual allocation (LCC-06/08/18) If dim(GLOCKSUP) # If dim(GLOCKSUP) -> The action is Manual Allocation If GERR=1 or [L]USRLCK<>"" GLOCKSUP=2 # The lock has been done by the Supervisor Else GLOCKSUP=0 # The lock has been done by the action Manual Allocation Endif Endif # End X3-98359 Locked symbol after manual allocation (LCC-06/08/18) Return #################################################################### $DEVERROU_SQH #--------------------------------------------------# # Déverrouillage des devis bloqués par le picking # #--------------------------------------------------# Local Integer I Local Char SYMBOLE2(50) For I=0 To [M:SOH4]NBLIG-1 If [M:SOH4]CREFLG(I)=0 & [M:SOH4]DETSQHNUM(I)<>"" SYMBOLE2 = "SQH"+[M:SOH4]DETSQHNUM(I) Unlock = SYMBOLE2 Endif Next I Return #----------------------------------------------------------------# # Activation/Desactivation des zones en fonction des codes acces # #----------------------------------------------------------------# #Read [ACC]CODACC = GUSER;"/SCDTUNL" #If fstat = 0 & [F:ACC]MODIF=1 # Diszo [M:SOH2]UNL #Else # Actzo [M:SOH2]UNL #Endif #Read [ACC]CODACC = GUSER;"/SPRIMOD" #If fstat = 0 & [F:ACC]MODIF=1 # Diszo [M:SOH4]GROPRI # If dim([M:SOH4]DISCRGVAL1) > 0 Diszo [M:SOH4]DISCRGVAL1 Endif # If dim([M:SOH4]DISCRGVAL2) > 0 Diszo [M:SOH4]DISCRGVAL2 Endif # If dim([M:SOH4]DISCRGVAL3) > 0 Diszo [M:SOH4]DISCRGVAL3 Endif # If dim([M:SOH4]DISCRGVAL4) > 0 Diszo [M:SOH4]DISCRGVAL4 Endif # If dim([M:SOH4]DISCRGVAL5) > 0 Diszo [M:SOH4]DISCRGVAL5 Endif # If dim([M:SOH4]DISCRGVAL6) > 0 Diszo [M:SOH4]DISCRGVAL6 Endif # If dim([M:SOH4]DISCRGVAL7) > 0 Diszo [M:SOH4]DISCRGVAL7 Endif # If dim([M:SOH4]DISCRGVAL8) > 0 Diszo [M:SOH4]DISCRGVAL8 Endif # If dim([M:SOH4]DISCRGVAL9) > 0 Diszo [M:SOH4]DISCRGVAL9 Endif #Else # Actzo [M:SOH4]GROPRI # If dim([M:SOH4]DISCRGVAL1) > 0 Actzo [M:SOH4]DISCRGVAL1 Endif # If dim([M:SOH4]DISCRGVAL2) > 0 Actzo [M:SOH4]DISCRGVAL2 Endif # If dim([M:SOH4]DISCRGVAL3) > 0 Actzo [M:SOH4]DISCRGVAL3 Endif # If dim([M:SOH4]DISCRGVAL4) > 0 Actzo [M:SOH4]DISCRGVAL4 Endif # If dim([M:SOH4]DISCRGVAL5) > 0 Actzo [M:SOH4]DISCRGVAL5 Endif # If dim([M:SOH4]DISCRGVAL6) > 0 Actzo [M:SOH4]DISCRGVAL6 Endif # If dim([M:SOH4]DISCRGVAL7) > 0 Actzo [M:SOH4]DISCRGVAL7 Endif # If dim([M:SOH4]DISCRGVAL8) > 0 Actzo [M:SOH4]DISCRGVAL8 Endif # If dim([M:SOH4]DISCRGVAL9) > 0 Actzo [M:SOH4]DISCRGVAL9 Endif #Endif #Diszo [M:SOH2]LASDLVNUM #Diszo [M:SOH3]PRFNUM, LASINVNUM,SQHNUM #Return #################################################################### $FIN_ACTION # Pour forcer un réaffichage de la commande If REPONSE=GSTALIT-1024 Gosub RELIT From GOBJSUB Endif # User Story X3-46075 Task X3-48218 - 2017-08-17 by CPO : ANALYSIS_FDMA_Display_Quantity_Available_field_on_Sales_Order_line If find(REPONSE, GSTAENR, GSTACRE, GSTAANU)>0 or GREP="" If !GIMPORT and !GWEBSERV # Issue X3-128239 # If dim([M]WALLTXT)>0 # Raz [M]WALLTXT : Affzo [M]WALLTXT # Endif # If dim([M]WSTKTXT)>0 # Raz [M]WSTKTXT : Affzo [M]WSTKTXT # Endif If dim([M:SOH4]WALLTXT)>0 Raz [M:SOH4]WALLTXT : Affzo [M:SOH4]WALLTXT Endif If dim([M:SOH4]WSTKTXT)>0 Raz [M:SOH4]WSTKTXT : Affzo [M:SOH4]WSTKTXT Endif # End Issue X3-128239 Endif Endif # /User Story X3-46075 Task X3-48218 - 2017-08-17 by CPO # Issue X3-243729 By SDEM If [V]GPREFUN = 2 and maxtab([V]GDEL_ARR)>-1 and find(REPONSE, GSTAENR, GSTACRE)>0 Gosub UNLOCK_PREPAYMENT_CONTRACTS From SUBSOHA1 Endif # Issue X3-243729 end Return ######################################################################### #--------------------------------------------------------------------------# # Chargement des paramètres avec GFCY = Site de la commande # # ------------------------------------------------------------------------ # # Chargement des globales référenciels, comptes et sections de la société # # Chargement des paramètres de localisation # # ------------------------------------------------------------------------ # $CHARG_PARAM Local Char PARAM2(GLONADP) # --- Chargement des globales référenciels, comptes et sections de la société Call GETCPY(GFCY,"SLT",2,GFLAG) From TRTX3CPT # 106867.sn If func AFNC.ACTIV("LTA") Gosub GET_CPY_SSTTAXACT From TRTTAXSST Endif # 106867.en # --- Si changement société If GSOC_UPDFLG # --- Chargement des paramètres de localisation # --- Utilisation systeme de taxe # If func AFNC.ACTIV("KUS") # 106867.so # #-- 80866 Performance import # #Call PARAM(GFCY,"USATAX",PARAM2) From ADOVAL # Call PARAML(GFCY,"USATAX",PARAM2) From ADOVAL # GLOCUSATAX=val(PARAM2) # If GLOCUSATAX>0 GLOCUSATAX-=1 : Endif # Else # Raz GLOCUSATAX # Endif # 106867.eo If dim(OK)<1 Local Integer OK : Endif # --- Récupération du compteur des encours article Call LECTCA(7,OK) From SUBTCA If fstat | !OK GERR=1 : GMESSAGE=mess(58,105,1)-mess(7,14,1)-mess(250,199,1) : Return Endif GWIP=[F:TCA]CODNUM(8) # V6.2 : Certification # --- Contrôle date documents #-- 80866 Performance import #Call PARAM(GFCY,"CTLDATORI",PARAM2) From ADOVAL Call PARAML(GFCY,"CTLDATORI",PARAM2) From ADOVAL GCTLDATORI=val(PARAM2) : If GCTLDATORI=0 GCTLDATORI=2 : Endif # FGR 28/11/2011 : X3SUIVI71065 GPJTSNGDOC = func TRTPJT.GET_PARAM_PJTSNGDOC(GFCY) Endif #--- Prix / Montant HT/TTC : # 82808 : Modification champ PRITYP Call PARAML(GFCY,"NOTATI",PARAM2) From ADOVAL : # 82808 GNOTATI = val(PARAM2) : # 82808 # FGR 26/07/2013 : X3SUIVI87923 (début) If func AFNC.ACTIV("SDD") Then Call PARAML(GFCY, "SDDMGT", PARAM2) From ADOVAL # FGR 28/07/2015 : X3SUIVI108078 : Plus Call PARAM (performances) GSDDMGT = val(PARAM2) If GSDDMGT <> 1 and GSDDMGT <> 2 Then GSDDMGT = 1 Endif Endif # FGR 26/07/2013 : X3SUIVI87923 (fin) # FGR 23/02/2015 : X3SUIVI104383 (début) Call PARAMUTIL("SOHTYPNOR", PARAM2, GUSER, GFCY) From SUBAUS GSOHTYPNOR = PARAM2 Call PARAMUTIL("SOHTYPINV", PARAM2, GUSER, GFCY) From SUBAUS GSOHTYPINV = PARAM2 Call PARAMUTIL("SOHTYPLND", PARAM2, GUSER, GFCY) From SUBAUS GSOHTYPLND = PARAM2 #Call PARAMUTIL("SOHTYPOPN", PARAM2, GUSER, GFCY) From SUBAUS #GSOHTYPOPN = PARAM2 Call PARAMUTIL("QUOORDCAT", PARAM2, GUSER, GFCY) From SUBAUS GQUOORDCAT = val(PARAM2) # FGR 23/02/2015 : X3SUIVI104383 (fin) Return ########################################################################################################## #------------------------------------------------------------------------# # Affichage entêtes colonnes variables (comptes et sections analytiques) # #------------------------------------------------------------------------# $AFF_TITCOL If GSOC_UPDFLG & !GIMPORT & GFLAG<>"" & dim([M:SOH4]CCE1)>0 Local Char BASPAG(10) BASPAG="NBLIG" : Gosub TIT_COL From ="W1WK2"+GFLAG+"4" #----- Pour forcer l'utilisation des formats évalués si tableau vide -----# # Affzo nécessaire si sections invisibles pour faire disparaitre les colonnes If [M:SOH4]NBLIG=0 [M:SOH4]NBLIG=1 : Affzo [SOH4]5 : Effzo [SOH4]5 Endif #----- Endif Raz GSOC_UPDFLG Return ########################################################################################################## #MAE, écran des commandes en création et alimenté par le client et le site via les navigations $AVANT_CHOI If GCREFONC = 1 Local Char VALEUR REPONSE = GSTANEW Gosub NOUVEAU From GOBJSUB Gosub SETBOUT From GOBJSUB # FGR 18/02/2014 : X3SUIVI96940 ne pas faire le diszo : ça désactive les actions sur champ (contrôle, AM...) #Diszo [M:SOH0]BPCORD # FGR 18/02/2014 : X3SUIVI96940 empêche l'exécution du AM_BPCORD #GCREFONC = 0 GCREFONC = 2 Endif Return ######################################################################### # 101380 - Setup SST Override related fields ######################################################################### Subprog SETUP_SSTFIELDS # 106867.sn If func AFNC.ACTIV("LTA") & GSOCIETE<>[F:CPY]CPY Gosub GET_CPY_SSTTAXACT From TRTTAXSST Endif # 106867.en # If GLOCUSATAX # 106867.o If func AFNC.ACTIV("LTA") & [F:CPY]SSTTAXACT = 2 # 106867.n Grizo [M:SOH4]VACITM1,VACITM2,VACITM3 If dim([M:SOH4]SSTCOD)>0 : Chgfmt [M:SOH4]SSTCOD With "K:" + num$(type([M:SOH4]SSTCOD)-10) + "B" # Show enterable Chgfmt [M:SOH3]SFISSTCOD With "K:" + num$(type([M:SOH3]SFISSTCOD)-10) + "B" # Show enterable Actzo [M:SOH4]SSTCOD Endif Else Actzo [M:SOH4]VACITM1,VACITM2,VACITM3 If dim([M:SOH4]SSTCOD)>0 Chgfmt [M:SOH4]SSTCOD With "-K:" + num$(type([M:SOH4]SSTCOD)-10) + "B" # Hide Chgfmt [M:SOH3]SFISSTCOD With "-K:" + num$(type([M:SOH3]SFISSTCOD)-10) + "B" # Hide Endif Endif End ######################################################################### # 101380 - Retrieve SST Code from source doc when copying from earlier document # Invoicing elements can be re-ordered or dropped due to transfer rules. ######################################################################### Subprog RELOAD_SFISST Local Integer NEWELEM, SRCELEM, INBFAC # Should never get here without an SO attached, but just in case # If [M:SOH3]SQHNUM="" | !GLOCUSATAX : End : Endif # 106867.o If [M:SOH3]SQHNUM="" | !(func AFNC.ACTIV("LTA")) | [F:CPY]SSTTAXACT <> 2 : End : Endif # 106867.n INBFAC=[M:SOH3]NBFAC Local Char OGSSTCOD(8) (INBFAC) Local Integer OGINVDTA (INBFAC) #Get the elements from the order and store in local variables For SRCELEM=0 To INBFAC-1 [L]OGINVDTA(SRCELEM) = [F:SQH]INVDTA(SRCELEM) [L]OGSSTCOD(SRCELEM) = [F:SQH]SFISSTCOD(SRCELEM) Next SRCELEM #Find the correct inv element on the SDH header and update the SSTCOD For NEWELEM=0 To INBFAC-1 SRCELEM = find([F:SOH]INVDTA(NEWELEM), [L]OGINVDTA(0..INBFAC-1)) If SRCELEM>0 [F:SOH]SFISSTCOD(NEWELEM)=[L]OGSSTCOD(SRCELEM-1) Endif Next NEWELEM End ####################################################################################### ## TODAN-120946. Validate the line to see if there is any non-deliverable item ####################################################################################### $VALIDATE_INVOICING_TERM # Payment term was not SE and now SE. So check the line for non-deliverable item If !func SEPPLIB.SEPP_DOC([M:SOH3]PTE) & [M:SOH4]NBLIG > 0 & find(1, [M:SOH4]DLVFLG(0..[M:SOH4]NBLIG-1)) GOK = -1 : GMESSAGE= mess(62,2092,1) : mkstat=2 Endif Return ###################################################################################### $SOHNUMEND_SET_VISIBILITY # Issue X3-135076 by ANKUL - drives visibility of fields for PT Signature If func AFNC.ACTIV('KPO') > 0 Local Shortint SHOWFIELD #1 - reg; 2 - display; 3 - hidden If !clalev([F:SLT]) : Local File SALTRS [SLT] : Endif #set flg to show or hide the field If [F:SLT]STRTYP <> 2 | [F:SLT]STRNUM <> GFLAG Read [F:SLT]SLT0 = 2;GFLAG Endif If fstat : Raz [F:SLT] : Endif SHOWFIELD = [F:SLT]ELESGNCOD If dim([M:SOH1]SOHVALDATC) > 0 and dim([M:SOH1]SOHVALDAT) > 0 and [M:SOH1]SOHVALDAT <> [0/0/0] [M:SOH1]SOHVALDATC = format$("D:" + GFMDAT, [M:SOH1]SOHVALDAT) Endif If func PORLEGLIB.DIGSIGN("", [F:SOH]CPY)=1 and find(SHOWFIELD, 1, 2) Chgfmt [M:SOH1]SOHCFMFLG With "LA1:15X" Chgfmt [M:SOH0]SOHNUMEND With "K:" + num$(GLONVCR) + "X" Chgfmt [M:SOH1]SOHVALDATC With "K:10X" Else If dim([M:SOH1]SOHCFMFLG) > 0 and dim([M:SOH0]SOHNUMEND) > 0 and dim([M:SOH1]SOHVALDATC) > 0 Chgfmt [M:SOH1]SOHCFMFLG With "-LA1:15X" Chgfmt [M:SOH0]SOHNUMEND With "-K:" + num$(GLONVCR) + "X" Chgfmt [M:SOH1]SOHVALDATC With "-K:10X" Endif Endif # Issue X3-177254 - 20200520 by VAVIL : Fields that user must be able to change after the Electronic Signature - orders If dim([M:SOH1]SOHCFMFLG) > 0 and dim([M:SOH0]SOHNUMEND) > 0 and dim([M:SOH1]SOHVALDAT) > 0 If [M:SOH1]SOHCFMFLG = 2 and [M:SOH1]INVSTA <= 1 and [M:SOH1]ORDSTA = 1 Diszo [M:SOH0]1-99 : Actzo [M:SOH0]SOHNUM # Issue X3-225917 - 20201209 by VAVIL : Sales order - we cannot change shipment site after the digital signature Diszo [M:SOH1]1-99 : Actzo [M:SOH1]PJT, REP, HLDSTA, HLDBTN, HLDCOD,CDTSTA,CDTBTN Diszo [M:SOH2]1-99 : Actzo [M:SOH2]DEMDLVDAT, SHIDAT, DAYLTI, DRN, MDL, BPTNUM, EECICT,ICTCTY,DME,ORDCLE,ODL,STOFCY # Issue end X3-225917 Diszo [M:SOH3]1-99 : Actzo [M:SOH3]IME, INVCND, PTE If dim([M:SOH3]NBAXE) > 0 Actzo [M:SOH3]NBAXE Endif If dim([M:SOH3]DIE) > 0 Actzo [M:SOH3]DIE Endif If dim([M:SOH3]NAMDIE) > 0 Actzo [M:SOH3]NAMDIE Endif If dim([M:SOH3]CCE) > 0 Actzo [M:SOH3]CCE Endif Diszo [M:SOH4]ITMREF,ITMDES,ITMDES1,SAU,QTY,SAUSTUCOE,STU,GROPRI,NETPRI If dim([M:SOH4]ECCVALMAJ) > 0 Diszo [M:SOH4]ECCVALMAJ Endif If dim([M:SOH4]ECCVALMIN) > 0 Diszo [M:SOH4]ECCVALMIN Endif If dim([M:SOH4]DSTOFCY) > 0 Diszo [M:SOH4]DSTOFCY Endif If dim([M:SOH4]LINREVNUM) > 0 Diszo [M:SOH4]LINREVNUM Endif If dim([M:SOH4]LINREVDAT) > 0 Diszo [M:SOH4]LINREVDAT Endif If dim([M:SOH4]SHTQTY) > 0 Diszo [M:SOH4]SHTQTY Endif If dim([M:SOH4]DALLTYP) > 0 Diszo [M:SOH4]DALLTYP Endif If dim([M:SOH4]TDLQTY) > 0 Diszo [M:SOH4]TDLQTY Endif If dim([M:SOH4]CPRPRI) > 0 Diszo [M:SOH4]CPRPRI Endif If dim([M:SOH4]PFM) > 0 Diszo [M:SOH4]PFM Endif If dim([M:SOH4]DINVCND) > 0 Diszo [M:SOH4]DINVCND Endif If dim([M:SOH4]SSTCOD) > 0 Diszo [M:SOH4]SSTCOD Endif If dim([M:SOH4]DBPAADD) > 0 Diszo [M:SOH4]DBPAADD Endif If dim([M:SOH4]FMI) > 0 Diszo [M:SOH4]FMI Endif If dim([M:SOH4]DEMSTA) > 0 Diszo [M:SOH4]DEMSTA Endif If dim([M:SOH4]DISCRGVAL1) > 0 Diszo [M:SOH4]DISCRGVAL1 Endif If dim([M:SOH4]DISCRGVAL2) > 0 Diszo [M:SOH4]DISCRGVAL2 Endif If dim([M:SOH4]DISCRGVAL3) > 0 Diszo [M:SOH4]DISCRGVAL3 Endif If dim([M:SOH4]DISCRGVAL4) > 0 Diszo [M:SOH4]DISCRGVAL4 Endif If dim([M:SOH4]DISCRGVAL5) > 0 Diszo [M:SOH4]DISCRGVAL5 Endif If dim([M:SOH4]DISCRGVAL6) > 0 Diszo [M:SOH4]DISCRGVAL6 Endif If dim([M:SOH4]DISCRGVAL7) > 0 Diszo [M:SOH4]DISCRGVAL7 Endif If dim([M:SOH4]DISCRGVAL8) > 0 Diszo [M:SOH4]DISCRGVAL8 Endif If dim([M:SOH4]DISCRGVAL9) > 0 Diszo [M:SOH4]DISCRGVAL9 Endif If dim([M:SOH4]VACITM1) > 0 Diszo [M:SOH4]VACITM1 Endif If dim([M:SOH4]VACITM2) > 0 Diszo [M:SOH4]VACITM2 Endif If dim([M:SOH4]VACITM3) > 0 Diszo [M:SOH4]VACITM3 Endif Diszo [M:SOH4]10,15,20,25,30 Else # Issue X3-227574 - 2021-04-07 by JOPAU Actzo [M:SOH4]ITMREF,ITMDES,ITMDES1,SAU,QTY,SAUSTUCOE,STU,GROPRI,NETPRI If dim([M:SOH4]ECCVALMAJ) > 0 Actzo [M:SOH4]ECCVALMAJ Endif If dim([M:SOH4]ECCVALMIN) > 0 Actzo [M:SOH4]ECCVALMIN Endif If dim([M:SOH4]DSTOFCY) > 0 Actzo [M:SOH4]DSTOFCY Endif If dim([M:SOH4]LINREVNUM) > 0 Actzo [M:SOH4]LINREVNUM Endif If dim([M:SOH4]LINREVDAT) > 0 Actzo [M:SOH4]LINREVDAT Endif If dim([M:SOH4]SHTQTY) > 0 Actzo [M:SOH4]SHTQTY Endif If dim([M:SOH4]DALLTYP) > 0 Actzo [M:SOH4]DALLTYP Endif If dim([M:SOH4]TDLQTY) > 0 Actzo [M:SOH4]TDLQTY Endif If dim([M:SOH4]CPRPRI) > 0 Actzo [M:SOH4]CPRPRI Endif If dim([M:SOH4]PFM) > 0 Actzo [M:SOH4]PFM Endif If dim([M:SOH4]DINVCND) > 0 Actzo [M:SOH4]DINVCND Endif If dim([M:SOH4]SSTCOD) > 0 Actzo [M:SOH4]SSTCOD Endif If dim([M:SOH4]DBPAADD) > 0 Actzo [M:SOH4]DBPAADD Endif If dim([M:SOH4]FMI) > 0 Actzo [M:SOH4]FMI Endif If dim([M:SOH4]DEMSTA) > 0 Actzo [M:SOH4]DEMSTA Endif If dim([M:SOH4]DISCRGVAL1) > 0 Actzo [M:SOH4]DISCRGVAL1 Endif If dim([M:SOH4]DISCRGVAL2) > 0 Actzo [M:SOH4]DISCRGVAL2 Endif If dim([M:SOH4]DISCRGVAL3) > 0 Actzo [M:SOH4]DISCRGVAL3 Endif If dim([M:SOH4]DISCRGVAL4) > 0 Actzo [M:SOH4]DISCRGVAL4 Endif If dim([M:SOH4]DISCRGVAL5) > 0 Actzo [M:SOH4]DISCRGVAL5 Endif If dim([M:SOH4]DISCRGVAL6) > 0 Actzo [M:SOH4]DISCRGVAL6 Endif If dim([M:SOH4]DISCRGVAL7) > 0 Actzo [M:SOH4]DISCRGVAL7 Endif If dim([M:SOH4]DISCRGVAL8) > 0 Actzo [M:SOH4]DISCRGVAL8 Endif If dim([M:SOH4]DISCRGVAL9) > 0 Actzo [M:SOH4]DISCRGVAL9 Endif If dim([M:SOH4]VACITM1) > 0 Actzo [M:SOH4]VACITM1 Endif If dim([M:SOH4]VACITM2) > 0 Actzo [M:SOH4]VACITM2 Endif If dim([M:SOH4]VACITM3) > 0 Actzo [M:SOH4]VACITM3 Endif Actzo [M:SOH4]10,15,20,25,30 # End issue X3-227574 Endif Endif # Issue X3-135076 end Endif # Issue X3-135076 end Return Subprog AS_SOHTYP(VALEUR) Variable Char VALEUR() If GREP="" & VALEUR="" Local Char WSOHTYP(GLONTSO) : Local Integer WSOHCAT Gosub SOHTYP From TRTVENCDE : VALEUR=WSOHTYP Endif End ###################################################################################### ######################################## Subprog C_SOHTYP(VALEUR) : # --- Web - Obligatoire - Synchrone Variable Char VALEUR() # --> Refuser les commandes de prêt si module non présent If [TSO]SOHCAT = 2 & dim([M:SOH1]LNDRTNDAT) < 0 : mkstat=2 : Endif # Bug 56725 : Interdire la saisie d'une commande inter-site de prêt ## --> En V150, une commande de prêt peut être inter-sites #If [TSO]SOHCAT = 2 & [M:SOH1]BETFCY=2 mkstat=2 : GMESSAGE=mess(291,192,1) : Endif #-- X3Suivi 75115 Libellé Catégorie --# [M:SOH0]SOHCAT=[F:TSO]SOHCAT [M:SOH0]WSOHCAT = mess(8,105,1) - ':' - mess([M:SOH0]SOHCAT,412,1) Affzo [M:SOH0]WSOHCAT Local Integer WLND : WLND=[F:TSO]SOHCAT Local Integer WBETFCY : WBETFCY=[M:SOH1]BETFCY Gosub CTR_LNDBETFCY From SUBSOHB : If mkstat=2 End Endif # --> Refuser les commandes à facturation directe si commande intra-société If [TSO]SOHCAT = 3 & [M:SOH1]BETFCY=2 & [M:SOH1]BETCPY<=1 mkstat=2: GMESSAGE=mess(256,192,1) : Endif End ######################################## Subprog AP_SOHTYP(VALEUR) : # --- Web - Obligatoire - Synchrone Variable Char VALEUR() [M:SOH0]SOHCAT=[F:TSO]SOHCAT If [F:TSO]CODNUM <> "" GMANCOU=[F:TSO]MANCOU : GCPT=[F:TSO]CODNUM Else #-- Aucun compteur associé au type de commande If !clalev([F:TCA]) Local File TABCOUAFF [TCA] Endif Local Integer WRET Call LECTCA(5,WRET) From SUBTCA If fstat | !WRET GERR=1 : GMESSAGE=mess(58,105,1)-mess(5,14,1)-mess(250,199,1) : End Endif # Compteur : Normale (9) Prêt (10) Facturation directe (11) GMANCOU = [F:TCA]MANCOU([F:TSO]SOHCAT+8) : GCPT = [F:TCA]CODNUM([F:TSO]SOHCAT+8) Endif # 107888 : Scheduled invoices : (LD:27/05/16) #If [M:SOH0]SOHCAT = 3 If [M:SOH0]SOHCAT = 3 | ([M:SOH0]SOHCAT = 1 & sum([M:SOH4]DLVFLG) = [M:SOH4]NBLIG) # --> Commande à facturation directe # --> Commande normale et aucune ligne livrable # On grize les infos livraisons, elles n'ont pas de signification # 107888 : Scheduled invoices : (LD:27/05/16) Grizo [M:SOH1]DLVSTA Grizo [M:SOH2]LASDLVDAT Grizo [M:SOH2]LASDLVNUM Else # 107888 : Scheduled invoices : (LD:27/05/16) # --> Commande normale et il y a des lignes livrables # --> Commande de prêt # 107888 : Scheduled invoices : (LD:27/05/16) Diszo [M:SOH1]DLVSTA Diszo [M:SOH2]LASDLVDAT Diszo [M:SOH2]LASDLVNUM Endif If dim([M:SOH1]LNDRTNDAT) > 0 If [M:SOH0]SOHCAT = 2 Actzo [M:SOH1]LNDRTNDAT Else Grizo [M:SOH1]LNDRTNDAT Endif Endif # Bug 59281 : En webservice, le n°commande doit tjs être saisissable donc si GMANCOU=1 on raz le champ If GREP="C" & GMANCOU=1 & (dim(GWEBSERV)>1 & GWEBSERV=1) Effzo [M:SOH0]SOHNUM : Endif If GREP="C" & GMANCOU=1 Diszo [M:SOH0]SOHNUM Else Actzo [M:SOH0]SOHNUM Endif End ######################################## Subprog AM_SOHTYP(VALEUR) : # --- Web - Obligatoire - Synchrone Variable Char VALEUR() If GMANCOU=1 & [M]SOHNUM <> "" Effzo [M:SOH0]SOHNUM Endif If [M:SOH0]SOHCAT=2 & dim([M:SOH1]LNDRTNDAT) > 0 If [M:SOH1]LNDRTNDAT = [0/0/0] & [M:SOH0]ORDDAT <> [0/0/0] [M:SOH1]LNDRTNDAT = addmonth([M:SOH0]ORDDAT,1) Affzo [M:SOH1]LNDRTNDAT Endif Endif # 75115 : V7 : Extension of Digital Signature : New field delivery type [M:SOH2]SDHTYP=[F:TSO]SDHTYP Affzo [M:SOH2]SDHTYP # 107890 : Scheduled invoices : (LD:08/12/15) # Invoicing condition managed only for Normal order If [M:SOH0]SOHCAT<>1 Raz [M:SOH3]INVCND Raz [M:SOH3]VCRINVCNDDAT Diszo [M:SOH3]INVCND Diszo [M:SOH3]VCRINVCNDDAT Else # Invoicing condition initialized from bill to customer If [M:SOH1]BPCINV<>"" Local File BPCUSTOMER [BPC] If [F:BPC]BPCNUM <> [M:SOH1]BPCINV Read [F:BPC]BPC0 = [M:SOH1]BPCINV If fstat Raz [F:BPC] : Endif [M:SOH3]INVCND=[F:BPC]INVCND Endif Endif If [M:SOH3]VCRINVCNDDAT = [0/0/0] & [M:SOH0]ORDDAT <> [0/0/0] [M:SOH3]VCRINVCNDDAT = [M:SOH0]ORDDAT Endif Actzo [M:SOH3]INVCND Actzo [M:SOH3]VCRINVCNDDAT Endif Affzo [M:SOH3]INVCND Affzo [M:SOH3]VCRINVCNDDAT # 107890 : Scheduled invoices : (LD:08/12/15) End # --------------------------------------- SALFCY --------------------------------- ######################################## Subprog C_SALFCY(VALEUR) : # --- Web - Obligatoire - Synchrone Variable Char VALEUR() Local Char WLEGCPY # Issue X3-135076 by ANKUL Read [FCY2]FCY0= VALEUR If !fstat [F:SOH]CPY=[F:FCY2]LEGCPY Gosub SOHNUMEND_SET_VISIBILITY From SUBSOHA Endif # Issue X3-135076 end Call SHOW_HIDE_PREPAYMENT_INVOICE_FIELDS(VALEUR) From SUBSOHA1 # Issue X3-243690 by MRDAB # Si le site de stockage est déjà renseigné revérifier la société juridique If [M:SOH2]STOFCY<>"" & [M:SOH2]STOFCY <> VALEUR If [F:FCY]FCY <> VALEUR Read [FCY]FCY0=VALEUR Endif # Nouvelle société juridique WLEGCPY=[F:FCY]LEGCPY Read [FCY]FCY0=[M:SOH2]STOFCY If [F:FCY]LEGCPY <> WLEGCPY Raz [M:SOH2]STOFCY Affzo [M:SOH2]STOFCY Endif Endif End ######################################## Subprog AM_SALFCY(VALEUR) : # --- Web - Obligatoire - Synchrone Variable Char VALEUR() # Issue X3-134504 - 2019-04-15 by SR : Control of SOHTYP depending of the legistation of the new site Local Char WSOHTYP(GLONTSO) : Local Integer WSOHCAT : Local Char WSDHTYP(GLONTSD) If [M:SOH0]BPCORD <> "" # Alimentation flag inter-site et inter-sociétéF Call ALIBETCPY(2,VALEUR,[M:SOH0]BPCORD,GBIDC1,[M:SOH0]POHFCY,[M:SOH0]BPSNUM,[M:SOH1]BETFCY,[M:SOH1]BETCPY) From TRTVENISOC If [M:SOH1]BETFCY=2 # Bug 56725 : Interdire la saisie d'une commande inter-site de prêt # # En V150, une commande de prêt ne peut pas être inter-site # If [M:SOH0]SOHCAT=2 GMESSAGE=mess(291,192,1) : mkstat=2 : End : Endif Local Integer WLND : WLND=[M:SOH0]SOHCAT Local Integer WBETFCY : WBETFCY=[M:SOH1]BETFCY Gosub CTR_LNDBETFCY From SUBSOHB : If mkstat=2 End Endif # Commande inter-site # Le client commande est aussi le fsseur (correspond au site de vente) If [M:SOH0]BPCORD=[M:SOH0]BPSNUM Local Integer WOK : WOK=1 Call AVERTIR (mess(151,191,1), WOK)From GESECRAN If WOK=1 mkstat=2 : End : Endif Endif # Site achat et fournisseur sont renseignés --> Alim. du site d'origine pour déclencher l'automatisme # If [M:SOH1]BETFCY=2 & [M:SOH0]BPSNUM<>"" & [M:SOH0]POHFCY<>"" # Commande de vente inter-site sans flux automatique [M:SOH0]ORIFCY=[M:SOH0]SALFCY # Endif Endif Affzo [M:SOH1]BETFCY Affzo [M:SOH1]BETCPY Endif # --> Refuser les commandes à facturation directe si commande intra-société If [M:SOH0]SOHCAT=3 & [M:SOH1]BETFCY=2 & [M:SOH1]BETCPY<=1 mkstat=2:GMESSAGE=mess(256,192,1): End: Endif [M:SOH2]ALLTYP=GALLTYP # Chargement des globales référenciels, comptes et sections de la société GFCY=VALEUR : Gosub CHARG_PARAM From SUBSOHA : If GERR=1 mkstat=2 : End Endif #- # Issue X3-134504 - 2019-04-11 by SR : if LEG is changed : Control and intialization of SOHTYP/SOHCAT/SDHTYP # 218177 : Behavior harmonization on sales document type / X3-241356 : harmonization in document type - sales order - 2021-04-08 by LD #If [M:SOH0]SOHTYP <> "" # If !clalev([F:TSO]) : Local File TABSOHTYP [TSO] : Endif # # # # is the existing SOHTYP value still OK with the new LEG ? # Call CONTTSO([M:SOH0]SOHTYP,GCURLEG,"SOH0","SOHTYP",VALEUR,"",GSOCIETE) From SUBTSO # # If SOHTYP not OK # If mkstat # Raz GMESSAGE # Raz mkstat # Raz [M:SOH0]SOHTYP # Gosub SOHTYP From TRTVENCDE # [M:SOH0]SOHTYP = WSOHTYP # [M:SOH0]SOHCAT = WSOHCAT # [M:SOH2]SDHTYP = WSDHTYP # # SOHTYP OK but may be the TSO record which will be used is not the same than previously, we have to reload SOHCAT/SDHTYP fields # Else # [M:SOH0]SOHCAT = [F:TSO]SOHCAT # [M:SOH2]SDHTYP = [F:TSO]SDHTYP # Endif # Call AM_SOHTYP([M:SOH0]SOHTYP) # If mkstat : End : Endif #Endif Raz WSOHTYP If [M:SOH0]SOHTYP <> "" If !clalev([F:TSO]) : Local File TABSOHTYP [TSO] : Endif # # is the existing SOHTYP value still OK with the new LEG ? Call CONTTSO([M:SOH0]SOHTYP,GCURLEG,"SOH0","SOHTYP",VALEUR,"",GSOCIETE) From SUBTSO # If SOHTYP not OK If mkstat Raz GMESSAGE Raz mkstat Raz [M:SOH0]SOHTYP Endif Endif If [M:SOH0]SOHTYP = "" # First the type is initialized from the general parameter associated to the category # And if it is not ok, we search for the first type available Case GORDCAT When 1, 4 : # 1-Normal or All category WSOHTYP = GSOHTYPNOR When 2 : # 2-Loan WSOHTYP = GSOHTYPLND When 3 : # 3-Direct invoicing WSOHTYP = GSOHTYPINV Endcase If WSOHTYP<>"" Call CONTTSO(WSOHTYP,GCURLEG,"SOH0","SOHTYP",VALEUR,"",GSOCIETE) From SUBTSO If mkstat Raz GMESSAGE Raz mkstat Raz WSOHTYP Endif Endif If WSOHTYP = "" # Search for first type available Gosub SOHTYP From TRTVENCDE Endif [M:SOH0]SOHTYP = WSOHTYP Endif # SOHTYP OK but may be the TSO record which will be used is not the same than previously, we have to reload SOHCAT/SDHTYP fields If [M:SOH0]SOHTYP <> "" [M:SOH0]SOHCAT = [F:TSO]SOHCAT [M:SOH2]SDHTYP = [F:TSO]SDHTYP Call AP_SOHTYP([M:SOH0]SOHTYP) If GERR=1 : End : Endif Call AM_SOHTYP([M:SOH0]SOHTYP) Endif # 218177 : Behavior harmonization on sales document type / X3-241356 : harmonization in document type - sales order - 2021-04-08 by LD # End issue X3-134504 #- #If GACTMUL=2 # Alimentation concernant les colonnes frais/remises en fonction de la structure tarif de la société Local Char WSVG_PLISTC : WSVG_PLISTC=[M:SOH0]PLISTC Call ALICOLREM (1,2,GFLAG,"SOH4", [M:SOH1]CUR, 1,[M:SOH0]PLISTC) From TRTPRICE #Endif # Affichage entêtes colonnes variables (sections analytiques) en cas de changement de société If WSVG_PLISTC=GPLISTC # (A faire ssi la structure tarif n'a pas changé, sinon cela a déjà été fait dans ALICOLREM) Gosub AFF_TITCOL From SUBSOHA Else # Affzo nécessaire si sections invisibles pour faire disparaitre les colonnes If [M:SOH4]NBLIG=0 [M:SOH4]NBLIG=1 : Affzo [SOH4]5 : Effzo [SOH4]5 Endif Endif # Effacement tableau des sections entête si changement société If dim([M:SOH3]NBAXE)>0 & [M:SOH3]NBAXE>0 [M:SOH0]SALFCY=VALEUR Effzo [SOH3]20 : Affzo [SOH3]20 Endif If GSOC_UPDFLG # Local Char WSOHTYP(GLONTSO) # Local Integer WSOHCAT # Gosub SOHTYP From TRTVENCDE # [M:SOH0]SOHTYP=WSOHTYP # [M:SOH0]SOHCAT=WSOHCAT Endif If GUPDCUR=1 Diszo [M:SOH1]CUR Else Actzo [M:SOH1]CUR Endif If GNOTATI=1 Diszo [M:SOH1]PRITYP Else Actzo [M:SOH1]PRITYP Endif If GLINREP=1 If dim([M:SOH4]REP1) > 0 Diszo [M:SOH4]REP1, REPRAT1 Endif If dim([M:SOH4]REP2) > 0 Diszo [M:SOH4]REP2, REPRAT2 Endif Else If dim([M:SOH4]REP1) > 0 Actzo [M:SOH4]REP1, REPRAT1 Endif If dim([M:SOH4]REP2) > 0 Actzo [M:SOH4]REP2, REPRAT2 Endif Endif If GLINBPD=1 Diszo [M:SOH4]DBPAADD Else Actzo [M:SOH4]DBPAADD Endif #If [M:SOH1]BETFCY=2 & [M:SOH0]ORIFCY<>"" If [M:SOH1]BETFCY=2 & [M:SOH0]ORIFCY<>[M:SOH0]SALFCY Diszo [M:SOH0]CUSORDREF Else Actzo [M:SOH0]CUSORDREF Endif #------------------------------------------------------------# # Renseignement des unités de répartition # #------------------------------------------------------------# [M:SOH0]DSPWEU = GSALDSPWEU [M:SOH0]DSPVOU = GSALDSPVOU # JPGA : Traitement des exceptions Société : MAJ des informations au cas ou on changerait de Société If [M:SOH0]BPCORD <> "" If dim([M:SOH1]VACBPR) > 0 #Gbn-79727-Ajouter alim à partir du client livré # JPGA : Initialisation du Régime taxe If [F:BPD]VACBPR<>"" If [F:BPD]VACBPR<>[M:SOH1]VACBPR [M:SOH1]VACBPR = [F:BPD]VACBPR Endif Else Call INIT_REGIME([M:SOH0]BPCORD, GSOCIETE, "C", [M:SOH1]VACBPR) From CPTSUB Endif Affzo [M:SOH1]VACBPR Endif If dim([M:SOH3]PTE) > 0 # JPGA : Initialisation du code condition de paiement # Issue X3-154390 - 20191206 by LD # Updating the sites changes the payment term #Call INIPTE ([F:BPC]BPCPYR, [F:BPC]BPCINV, "C", [M:SOH3]PTE) From TRTX3 Call INIPTE ([M:SOH1]BPCPYR, [M:SOH1]BPCINV, "C", [M:SOH3]PTE) From TRTX3 # Issue X3-154390 - 20191206 by LD Affzo [M:SOH3]PTE Endif If dim([M:SOH3]DEP) > 0 # JPGA : Initialisation des escomptes et agios Call INIT_ESCOMPTE([M:SOH0]BPCORD, GSOCIETE, "C", [M:SOH3]DEP) From CPTSUB Affzo [M:SOH3]DEP Endif Endif Gosub SHOW_HIDE_ENTCOD From TRTADRLIB #109528.n # 101380.sn Call SETUP_SSTFIELDS From SUBSOHA # ACA - On recharge la liste des éléments de facturation, pour gérer le flag "remise sur taxe" Local Integer NBPOSTE : NBPOSTE=dim([M:SOH3]INVDTA) Call STRUFOOT (3,"SOH3",NBPOSTE,[F:SOH]CHGTYP,[F:BPC]CUR,[F:SOH]CUR,"NON") From SUBSFIT [M:SOH3]NBFAC = NBPOSTE Affzo [M:SOH3]25 # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management #--only if there are scheduling invoices filled on order's lines If [M:SOH4]NBLIG>0 and sigma(0,[M:SOH4]NBLIG-1,[M:SOH4]DINVCND(indcum)<>"")>1 [M:SOH3]INVCNDTOUPD=[V]CST_AYES Endif # End issue 107888 # Issue 120236 - Shippment site by default -> Stock site by default of the customer or user If [M:SOH2]STOFCY="" If [F:BPD]STOFCY="" or [M:SOH0]BPCORD="" Read [FCY]FCY0=GFCYDEF(7) If fstat: Raz [F:FCY]: Endif Else Read [FCY]FCY0=[F:BPD]STOFCY Endif If [F:FCY]LEGCPY = GSOCIETE: [M:SOH2]STOFCY=[F:FCY]FCY: Affzo [M:SOH2]STOFCY Endif Endif # End issue 120236 End # --------------------------------------- CUSORDREF ------------------------------ ########################################################################## ## Etiquette ajoutée par le superviseur 03/11/2003 17:57:49 (LD) ########################################################################## Subprog IB_CUSORDREF If [M]CUSORDREF="" | [M]BETFCY<>2 | [M]ORIFCY=[M]SALFCY Raz GBOUT1 Endif End ######################################## Subprog AM_CUSORDREF(VALEUR) Variable Char VALEUR() If VALEUR = "" | [M:SOH0]BPCORD = "" End : Endif Look [SOH] SOH1=[M:SOH0]BPCORD;VALEUR If !fstat Local Integer WOK : WOK=2 Call AVERTIR (mess(80,191,1), WOK) From GESECRAN If WOK=1 mkstat=2 : End : Endif Endif End ######################################## # 107890 : Scheduled invoices : (LD:14/01/16) # --------------------------------------- ORDDAT --------------------------------- ######################################## Subprog AM_ORDDAT(VALEUR) Variable Date VALEUR Local Integer WOK # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management # Controls for Schedule invoices : # If the order date is increased and the scheduled invoice start date becomes lower : # The scheduled invoice start date is reinitialized only if no scheduled invoice are invoiced If [M:SOH0]SOHCAT=1 # Order date is increased If VALEUR>[M:SOH0]ORDDAT If [M:SOH3]VCRINVCNDDAT<VALEUR # Scheduled invoice start date is lower If [M:SOH1]INVSTA=1 # No scheduled invoice are invoiced # Scheduled invoice start date is reinitialized [M:SOH3]VCRINVCNDDAT=VALEUR Affzo [M:SOH3]VCRINVCNDDAT # The system proposes to recalculate scheduled invoices for lines that are not partially invoiced a not linked to a progress status # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management #--only if there are scheduling invoices filled on order's lines If [M:SOH4]NBLIG>0 and sigma(0,[M:SOH4]NBLIG-1,[M:SOH4]DINVCND(indcum)<> "")>1 WOK=2 Call OUINON(mess(498,192,1),WOK) From GESECRAN If WOK=2 GERR=0 Gosub AM_ORDDAT_UPDATE_INVCNDDAT From LIBSAL_INVCND_SOH If GERR=1 : mkstat=2 : End : Endif Endif Endif # End issue 107888 Elsif ([M:SOH4]NBLIG-1 >= 0 and sigma(0,[M:SOH4]NBLIG-1,[M:SOH4]DINVCND(indcum)) <> "") # There are Scheduled invoice for the order # Scheduled invoice are invoiced # Order date can't be modified # !! We'll need to change this when we can mix deliverable and undeliverable item GMESSAGE=mess(496,192,1)-format$(GFMDAT4,[M:SOH3]VCRINVCNDDAT) GERR=1 : mkstat=2 : End Endif Endif Endif Endif End # 107890 : Scheduled invoices : (LD:14/01/16) # --------------------------------------- BPCORD --------------------------------- ######################################## Subprog C_BPCORD(VALEUR) : # --- Web - Faible - Synchrone Variable Char VALEUR() #Local Char WMESS9(250), WMESS1(250) # FGR 10/03/2015 : X3SUIVI23273 #Local Integer WCDTSTA # FGR 10/03/2015 : X3SUIVI23273 #Local Decimal WOST, WOSTAUZ # FGR 10/03/2015 : X3SUIVI23273 #Local Integer WOK # FGR 10/03/2015 : X3SUIVI23273 Call C_BPCORD(VALEUR) From TRTVENCDE If mkstat=2 End : Endif # Si prospect proposer la transformation du prospect en client If [F:BPC]BPCTYP=4 & GORITRFBPP = "" Local Integer OK : OK=2 GMESSAGE=VALEUR-mess(259,196,1) Call AVERTIR (GMESSAGE, OK) From GESECRAN If OK=1 mkstat = 2 : Raz GMESSAGE : End Endif Elsif [F:BPC]BPCTYP<>4 Raz GORITRFBPP Endif # # ------------------------------------- # # FGR 10/03/2015 : X3SUIVI23273 (début) # #-- Contrôle état crédit pour le client --" # Call SDCDTSTA('', VALEUR, [M:SOH0]CHGTYP, 0, [M:SOH1]CUR, [M:SOH0]ORDDAT, 0, 1, WCDTSTA, WOST, WOSTAUZ) From TRTVENCDT # WMESS9 = '\' + '\' + format$("N:9.2",WOST) + '>' - format$("N:9.2",WOSTAUZ) # Case WCDTSTA # When 3 # # Dépassement d'en cours # If !([M:SOH1]BETFCY = 2 & [M:SOH1]BETCPY <> 2) or GCTLBETFCY = 2 Then # #- Si pas (Intersit & non intersoc) ou si Ctrl intersit encours&prix # WOK = 2 # FGR 21/03/2014 : X3SUIVI98224 pas WOK=1 pour ne pas bloquer en import # WMESS1 = mess(29,192,1) # #-- 81855 # If dim(GVENFLG02) >= 0 & (GVENFLG02 = 2 or GVENFLG02 = 3) Then # WMESS1 += WMESS9 # Endif # Call AVERTIR(WMESS1, WOK) From GESECRAN # If WOK = 1 Then # mkstat = 2 # End # Endif # Endif # When Default # Endcase # # FGR 10/03/2015 : X3SUIVI23273 (fin) # # ------------------------------------- # Contrôle si le tiers risque est bloqué If (find(GREP, "C", "D") | [M]BPCORD <> VALEUR) Local Integer WOSTCTL If [F:BPC]BPCRSK<>VALEUR Local File BPCUSTOMER [BPC1] : # Lecture du tiers risque ss une autre abrev pour ne pas casser [F:BPC] du clt cde If [F:BPC1]BPCNUM <> [F:BPC]BPCRSK Read [F:BPC1]BPC0 = [F:BPC]BPCRSK If fstat Raz [F:BPC1] : Endif Endif WOSTCTL=[F:BPC1]OSTCTL Else WOSTCTL=[F:BPC]OSTCTL Endif If WOSTCTL = 3 Local Integer WOK : WOK=2 # FGR 21/03/2014 : X3SUIVI98224 pas WOK=1 pour ne pas bloquer en import Call AVERTIR (mess(151,199,1), WOK) From GESECRAN If WOK=1 mkstat=2 : End : Endif Endif Endif # Controle existence référence client If [M:SOH0]CUSORDREF = "" End : Endif If !find (GREP, "C","D") End : Endif Look [SOH] SOH1=VALEUR;[M:SOH0]CUSORDREF If !fstat Local Integer WOK : WOK=2 Call AVERTIR (mess(80,191,1), WOK) From GESECRAN If WOK=1 mkstat=2 : End : Endif Endif End ######################################## Subprog AP_BPCORD(VALEUR) : # --- Web - Faible - Asynchrone Variable Char VALEUR() # --> Alimentation de la raison sociale If [M:ADB1]BPRNAM(0) <> "" [M]BPCNAM = [M:ADB1]BPRNAM(0) Else [M]BPCNAM = [F:BPC]BPCNAM Endif Affzo [M:SOH0]BPCNAM End ######################################## #--------------------------------------- $AAP_BPCORD #----------------------------------------# # Action avant bouton tunnel client # #----------------------------------------# Local Char WOBJET(GLONAOB) If [F:BPC]BPCTYP = 4 WOBJET="BPC" : If GORITRFBPP = "" GORITRFBPP="GESSOH" : Endif Endif Return #--------------------------------------- $BAP_BPCORD #----------------------------------------# # Action apres bouton tunnel client # #----------------------------------------# # Il faut vérifier que le client a bien été créé Read [F:BPC]BPC0 = VALEUR If fstat : mkstat=2 : Return : Endif If [F:BPC]BPCTYP=4 : mkstat=2 : Endif Return ######################################## Subprog AM_BPCORD(VALEUR) : # --- Web - Obligatoire - Synchrone Variable Char VALEUR() Local Char WMESS9(250), WMESS1(250) # FGR 10/03/2015 : X3SUIVI23273 Local Integer WCDTSTA # FGR 10/03/2015 : X3SUIVI23273 Local Decimal WOST, WOSTAUZ # FGR 10/03/2015 : X3SUIVI23273 Local Integer WOK # FGR 10/03/2015 : X3SUIVI23273 Local Char WVALEUR(type([M:SOH0]BPCORD)-10) : WVALEUR = [M:SOH0]BPCORD # --> Si utilisation du bouton adresse, il ne faut pas passer en AM_ #MAE If !GIMPORT & VALEUR = [M]BPCORD End : Endif #si création cmd par client, on passe en AM If !GIMPORT & VALEUR = [M]BPCORD & GCREFONC = 0 End : Endif # --- Changement de client en duplication de devis # --> Sauvegarde devise, régime, type de prix If GREP="D" Local Char WANCVACBPR Local Integer WANCPRITYP Local Char WANCBPCORD : WANCBPCORD=[M:SOH0]BPCORD Local Char WANCLAN : WANCLAN=[M:SOH0]LAN WANCVACBPR = [M:SOH1]VACBPR WANCPRITYP = [M:SOH1]PRITYP Call OUVRE_TRACE(mess(172,123,1)) From LECFIC Endif Local Char WANCCUR(GLONCUR) : WANCCUR = [M:SOH1]CUR Call ALICDE(1,"C",VALEUR) From TRTVENCDE GFLTBPC = [F:SOH]BPCORD GBPCNUM = VALEUR # GRNA 20/05/2011 Local Char CUSSEAORI : CUSSEAORI = "SOH1" Gosub AM_BPRNUM From CUSSEALIB # --> Initialisation de la date d'expédition et de la date de livraison demandée Local Char WBPCORD, WBPAADD Local Integer WDAYLTI WBPCORD=VALEUR : WBPAADD=[M:SOH1]BPAADD : WDAYLTI=[M:SOH2]DAYLTI Gosub INIT_DAT From SUBSOH1 If [M:SOH0]SALFCY <> "" # Alimentation flag inter-site et inter-société Call ALIBETCPY(2,[M:SOH0]SALFCY,VALEUR,GBIDC1,[M:SOH0]POHFCY,[M:SOH0]BPSNUM,[M:SOH1]BETFCY,[M:SOH1]BETCPY) From TRTVENISOC If [M:SOH1]BETFCY=2 # Bug 56725 : Interdire la saisie d'une commande inter-site de prêt # # En V150, une commande de prêt ne peut pas être inter-site # If [M:SOH0]SOHCAT=2 [M:SOH0]BPCORD=WVALEUR : GMESSAGE=mess(291,192,1) : mkstat=2 : End : Endif Local Integer WLND : WLND=[M:SOH0]SOHCAT Local Integer WBETFCY : WBETFCY=[M:SOH1]BETFCY mkstat=0 : #-- X3Suivi 76224 Gosub CTR_LNDBETFCY From SUBSOHB : If mkstat=2 [M:SOH0]BPCORD=WVALEUR : End Endif # Commande inter-site # Le client commande est aussi le fsseur (correspond au site de vente) If [M:SOH0]BPCORD=[M:SOH0]BPSNUM Local Integer WOK : WOK=1 #--CPO 79556 En import le message ne doit pas bloquant If GIMPORT=1 : WOK = 2 : Endif #--/CPO Call AVERTIR (mess(151,191,1), WOK)From GESECRAN If WOK=1 [M:SOH0]BPCORD=WVALEUR : mkstat=2 : End : Endif Endif # Si commande inter-société, et site achat et fournisseur sont renseignés # --> Alimentation du site d'origine pour déclencher l'automatisme # If [M:SOH0]BPSNUM<>"" & [M:SOH0]POHFCY<>"" # Commande de vente inter-site sans flux automatique [M:SOH0]ORIFCY=[M:SOH0]SALFCY # Endif # 107605 : Raz site origine si la cde n'est plus intersite Else Raz [M:SOH0]ORIFCY # 107605 Endif Endif # ------------------------------------- # FGR 10/03/2015 : X3SUIVI23273 (début) #-- Contrôle état crédit pour le client --" Call SDCDTSTA('', VALEUR, [M:SOH0]CHGTYP, 0, [M:SOH1]CUR, [M:SOH0]ORDDAT, 0, 1, WCDTSTA, WOST, WOSTAUZ) From TRTVENCDT WMESS9 = '\' + '\' + format$("N:9.2",WOST) + '>' - format$("N:9.2",WOSTAUZ) Case WCDTSTA When 3 # Dépassement d'en cours If !([M:SOH1]BETFCY = 2 & [M:SOH1]BETCPY <> 2) or GCTLBETFCY = 2 Then #- Si pas (Intersit & non intersoc) ou si Ctrl intersit encours&prix WOK = 2 # FGR 21/03/2014 : X3SUIVI98224 pas WOK=1 pour ne pas bloquer en import WMESS1 = mess(29,192,1) #-- 81855 If dim(GVENFLG02) >= 0 & (GVENFLG02 = 2 or GVENFLG02 = 3) Then WMESS1 += WMESS9 Endif Call AVERTIR(WMESS1, WOK) From GESECRAN If WOK = 1 Then mkstat = 2 End Endif Endif When Default Endcase # FGR 10/03/2015 : X3SUIVI23273 (fin) # ------------------------------------- If WANCCUR<>[M:SOH1]CUR # Alimentation du format des colonnes frais/remise Call ALIFORREM (2, GFLAG, "SOH4", 0, [M:SOH1]CUR) From TRTPRICE Endif # --> Refuser les commandes à facturation directe si commande intra-société If [M:SOH0]SOHCAT=3 & [M:SOH1]BETFCY=2 & [M:SOH1]BETCPY<=1 [M:SOH0]BPCORD=WVALEUR : mkstat=2:GMESSAGE=mess(256,192,1): End: Endif If GREP="D" Raz [M:SOH1]PJT Raz [M:SOH4]DPJT : # 71065 : PJT # --> Recalcul des lignes Local Char WZONCOU : WZONCOU="BPCORD" Local Char FFLGMOD Local Integer OK Call OUINON (mess(21,191,1),OK) From GESECRAN If OK=2 GTARFLG="1" Endif Gosub RECALC_LIGNE From SUBSOHB Raz GTARFLG If mkstat = 2 [M:SOH0]BPCORD = WANCBPCORD : End Endif Raz GMESSAGE Call FERME_TRACE From LECFIC Call LEC_TRACE From LECFIC Endif # --> Affichage des observations du client commande If !GIMPORT If len(vireblc([F:BPC]BPCREM,2)) & GERR=0 GMESSAGE = [F:BPC]BPCREM : GERR=2 : Endif Endif If GWEBSERV # ACA 70505 Call CHARGE_ADRMSK("ADB1", VALEUR) From TRTVENDIV If dim([M:ADB2]BPAADD)>0 : [M:ADB2]BPAADD = [M:SOH1]BPAADD : Endif Call CHARGE_ADRMSK("ADB2", VALEUR) From TRTVENDIV Call CHARGE_ADRMSK("ADB3", [M:SOH1]BPCINV) From TRTVENDIV Endif # --> Réalimentation de la raison sociale en fonction de la saisie adresse If [M:ADB1]BPRNAM(0) <> "" [M]BPCNAM = [M:ADB1]BPRNAM(0) Else [M]BPCNAM = [F:BPC]BPCNAM Endif If [M]BPCINV = VALEUR [M:SOH1]BPINAM = [M]BPCNAM : Endif Affzo [M:SOH0]BPCNAM,CUR Affzo [M:SOH1]1-99 Affzo [M:SOH2]1-99 # 107890 : Scheduled invoices : (LD:08/12/15) #Affzo [M:SOH3]5,15,20,25 Affzo [M:SOH3]5,10,15,20,25 # 107890 : Scheduled invoices : (LD:08/12/15) If [M:SOH1]BETFCY = 2 & [M:SOH1]BETCPY<= 1 Grizo [M:SOH1]BPCINV, BPCPYR Else Actzo [M:SOH1]BPCINV, BPCPYR Endif #If [M:SOH1]BETFCY=2 & [M:SOH0]ORIFCY<>"" If [M:SOH1]BETFCY=2 & [M:SOH0]ORIFCY<>[M:SOH0]SALFCY Diszo [M:SOH0]CUSORDREF Else Actzo [M:SOH0]CUSORDREF Endif If [M:SOH2]DME = 3 # Diszo [M:SOH2]STOFCY Diszo [M:SOH4]DBPAADD, DSTOFCY, DDLVPIO, DDRN, DMDL, DBPTNUM Else # Actzo [M:SOH2]STOFCY Actzo [M:SOH4]DBPAADD, DSTOFCY, DDLVPIO, DDRN, DMDL, DBPTNUM Endif #--CPO 82369 Duplication avec changement du client #Call NEW_SFIT ("M","SOH3",[M:SOH1]CUR,[M:SOH1]BPCINV,VALEUR,[M:SOH0]ORDDAT) From SUBSFIT If GREP="D" GREP="C" Local Char SFIT_OBJ : SFIT_OBJ="SOH" Gosub INIT_SFIT From SUBSFIT Call NEW_SFIT ("M","SOH3",[M:SOH1]CUR,[M:SOH1]BPCINV,VALEUR,[M:SOH0]ORDDAT) From SUBSFIT GREP="D" Else Call NEW_SFIT ("M","SOH3",[M:SOH1]CUR,[M:SOH1]BPCINV,VALEUR,[M:SOH0]ORDDAT) From SUBSFIT Endif #--/CPO # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management #--only if there are scheduling invoices filled on order's lines If [M:SOH4]NBLIG>0 and sigma(0,[M:SOH4]NBLIG-1,[M:SOH4]DINVCND(indcum)<>"")>1 [M:SOH3]INVCNDTOUPD=[V]CST_AYES Endif # End issue 107888 End # -------------------------------------------------------------------------------- # Ecran SOH1 # -------------------------------------------------------------------------------- # --------------------------------------- BPCINV --------------------------------- Subprog C_BPCINV(VALEUR) : # --- Web - Faible - Asynchrone Variable Char VALEUR() #If (find(GREP, "C", "D") | [M]BPCINV <> VALEUR) & [F:BPC]OSTCTL = 3 # Local Integer WOK : WOK=1 # Call AVERTIR (mess(151,199,1), WOK) From GESECRAN # If WOK=1 mkstat=2 : End : Endif #Endif # La modif du client facture est bloquée puisqu'on ne peut pas lé repercuter sur la cde d'achat # Commande inter-site avec commande d'achat réciproque #If [M:SOH1]BETFCY=2 & [M:SOH0]ORIFCY<>"" # Local Char LINVFCY # Call RECINVFCY(VALEUR, LINVFCY) From TRTVENISOC # If GERR=1 mkstat=2 : End : Endif #Endif End ####################################### Subprog AP_BPCINV(VALEUR) Variable Char VALEUR() # --> Si modif client raz adresse avant de passer dans le bouton adresse If !GIMPORT & VALEUR <> [M]BPCINV Raz [M:ADB3] : Endif # --> Si saisie de l'adresse alimentation de la raison sociale If [M:ADB3]BPRNAM(0) <> "" [M]BPINAM = [M:ADB3]BPRNAM(0) Else [M]BPINAM = [F:BPC]BPCNAM Endif Affzo [M:SOH1]BPINAM End ######################################## Subprog AM_BPCINV(VALEUR) : # --- Web - Obligatoire - Synchrone Variable Char VALEUR() If GWEBSERV # ACA 70505 Call CHARGE_ADRMSK("ADB3", VALEUR) From TRTVENDIV Endif # --> Si utilisation du bouton adresse, il ne faut pas passer en AM_ If !GIMPORT & VALEUR = [M]BPCINV End : Endif If GREP = "C" Local Char WANCCUR(GLONCUR) : WANCCUR=[M:SOH1]CUR If GTARFLG = "" Then Call ALICDE(1, "F", VALEUR) From TRTVENCDE If WANCCUR<>[M:SOH1]CUR # ---------------------------------------------------- # FGR 07/02/2014 : X3SUIVI95380 (début) # Alimentation du format des colonnes frais/remise Call ALIFORREM (2, GFLAG, "SOH4", 0, [M:SOH1]CUR) From TRTPRICE # Note : Fait dans AM_CUR Call CHANGE_CUR_BPCINV(WANCCUR) # FGR 07/02/2014 : X3SUIVI95380 (fin) # ---------------------------------------------------- # If faut arrondir les frais/remises en fonction des nouveaux formats If [M:SOH4]NBLIG<>0 Call ARRCOLREM ([M:SOH1]CUR, "SOH4") From TRTPRICE Affzo [M:SOH4]1-99 Endif Endif Else # Alimentation du format des colonnes frais/remise Call ALIFORREM (2, GFLAG, "SOH4", 0, [M:SOH1]CUR) From TRTPRICE Endif #Else # Modif. clt facture : recalcul de l'état crédit et rechargement des zones d'en-cours # Call SDCDTSTA([M:SOH0]SOHNUM,VALEUR,[M:SOH0]CHGTYP,0,[M:SOH1]CUR,date$,[M:SOH2]UNL, 1, [M:SOH1]CDTSTA,[M]OST,[M]OSTAUZ) From TRTVENCDT Endif # Issue 112065 # Reinit EECNUM when order modification If find(GREP,"","M") & dim([M:SOH0]BPIEECNUM)>0 Call INIEECNUM ([M:SOH0]BPCORD,[M:SOH1]BPAADD,VALEUR,[M:SOH0]BPIEECNUM,[M:SOH0]EECNUMCRY) From TRTVENDIV Endif # End issue 112065 # --> Affichage des observations du client facture If !GIMPORT & VALEUR <> [M:SOH0]BPCORD If len(vireblc([F:BPC]BPCREM,2)) & GERR=0 GMESSAGE = [F:BPC]BPCREM : GERR=2 : Endif Endif # --> Réalimentation de la raison sociale If [M:ADB3]BPRNAM(0) <> "" [M]BPINAM = [M:ADB3]BPRNAM(0) Else [M]BPINAM = [F:BPC]BPCNAM Endif Affzo [M:SOH1]BPINAM Affzo [M:SOH1]20 # 107890 : Scheduled invoices : (LD:08/12/15) #Affzo [M:SOH3]5,15,20,25 Affzo [M:SOH3]5,10,15,20,25 # 107890 : Scheduled invoices : (LD:08/12/15) #--CPO 82369 Duplication avec changement du client #Call NEW_SFIT ("M","SOH3",[M:SOH1]CUR,VALEUR,[M:SOH0]BPCORD,[M:SOH0]ORDDAT) From SUBSFIT If GREP="D" GREP="C" Local Char SFIT_OBJ : SFIT_OBJ="SOH" Gosub INIT_SFIT From SUBSFIT Call NEW_SFIT ("M","SOH3",[M:SOH1]CUR,VALEUR,[M:SOH0]BPCORD,[M:SOH0]ORDDAT) From SUBSFIT GREP="D" Else Call NEW_SFIT ("M","SOH3",[M:SOH1]CUR,VALEUR,[M:SOH0]BPCORD,[M:SOH0]ORDDAT) From SUBSFIT Endif #--/CPO # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management #--only if there are scheduling invoices filled on order's lines If [M:SOH4]NBLIG>0 and sigma(0,[M:SOH4]NBLIG-1,[M:SOH4]DINVCND(indcum)<>"")>1 [M:SOH3]INVCNDTOUPD=[V]CST_AYES Endif # End issue 107888 End ###################################################################################### # FGR 07/02/2014 : X3SUIVI95380 (début) Pas possible d'utiliser AM_CUR à cause des # valeur AVANT et APRES du champ. Obligé de refaire la même chose dans un autre S/P. Subprog CHANGE_CUR_BPCINV(SOLDCUR) Value Char SOLDCCUR Local Integer SPSTAT, I Local Decimal MONTANT, MONTORG (0..1), MONTDES (0..1) Local Char FFLGMOD(1) Local Date WOSTDAT Local Libelle WOSTCHGTYP # # --> Recalcul du montant mini cde # Call CONVERT(SOLDCUR, [M:SOH0]CUR, GLOCALDEV, [M]CHGTYP, date$, [M:SOH0]ORDMINAMT,MONTANT,SPSTAT) From TRTDEV # [M:SOH0]ORDMINAMT = MONTANT # # --> Recalcul de l'en-cours et de l'en-cours autorise # If [M:SOH0]OSTAUZ <> 99999999999.99 # If GOSTCHGTYP=2 # # Si Origine cours pour contrôle en-cours = actualisé # WOSTDAT=datesyst : # Date : date du jour # WOSTCHGTYP= GOSTTYPCUR : # Type de cours : Type de cours ctrl au cours actualisé # Else # # Si Origine cours pour contrôle en-cours = historique # WOSTDAT=[M]ORDDAT : # Date : date du document # WOSTCHGTYP=[M]CHGTYP : # Type de cours : Type de cours du document # Endif # MONTORG(0) = [M:SOH0]OST # MONTORG(1) = [M:SOH0]OSTAUZ # Call CONVERT(SOLDCUR,[M:SOH0]CUR,GLOCALDEV,WOSTCHGTYP,WOSTDAT,MONTORG(0),MONTDES(0),SPSTAT) From TRTDEV # Call CONVERT(SOLDCUR,[M:SOH0]CUR,GLOCALDEV,WOSTCHGTYP,WOSTDAT,MONTORG(1),MONTDES(1),SPSTAT) From TRTDEV # [M:SOH0]OST = MONTDES(0) # [M:SOH0]OSTAUZ = MONTDES(1) # Endif # # --> Recalcul des montants de facturation # If [M:SOH3]NBFAC <> 0 # For I = 0 To [M:SOH3]NBFAC-1 # If [M:SOH3]AMTCOD(I) = 2 # [M:SOH3]FORMAT(I) = "NZ:"+[F:TCU]CURFMT1 # Call CONVERT(SOLDCUR, [M:SOH0]CUR, GLOCALDEV, [M]CHGTYP, date$, [M:SOH3]INVDTAAMT(I),MONTANT,SPSTAT) From TRTDEV # [M:SOH3]INVDTAAMT(I) = MONTANT # Endif # Next I # Endif Affzo [M:SOH3]1-99 Affzo [M:SOH0]CUR Affzo [M:SOH4]5 # On a pas fait de recherche tarif : on fera une conversion If [M:SOH4]NBLIG <> 0 & GTARFLG = "" Local Char WZONCOU : WZONCOU = "CUR" Local Char WANCCUR : WANCCUR=SOLDCUR Local Char WANCVACBPR : WANCVACBPR=[M:SOH1]VACBPR Local Integer WANCPRITYP : WANCPRITYP=[M:SOH1]PRITYP Gosub RECALC_LIGNE From SUBSOHB Endif Raz GTARFLG End # FGR 07/02/2014 : X3SUIVI95380 (fin) # --------------------------------------- BPCPYR --------------------------------- ###################################################################################### ## Etiquette ajoutée par le superviseur (écran SOH1) 27/09/2004 15:36:06 (LD) ###################################################################################### Subprog AM_BPCPYR(VALEUR) Variable Char VALEUR() If GREP = "C" Call INIPTE (VALEUR, [M:SOH1]BPCINV, "C", [M:SOH3]PTE) From TRTX3 Affzo [M:SOH3]PTE Endif End ###################################################################################### # --------------------------------------- BPAADD --------------------------------- Subprog C_BPAADD(VALEUR) : # --- Web - Faible - Asynchrone Variable Char VALEUR() Local Char WSTOFCY # Commande inter-site et un site de réception est lié à l'adresse de livraison # Il faut vérifier que les couples articles-site de réception existent If [M:SOH1]BETFCY=2 & [M:SOH0]SOHCAT=3 & [F:BPD]RCPFCY<>"" & [M:SOH4]NBLIG>0 Local Char WFCY : WFCY=[F:BPD]RCPFCY Local Integer OK Gosub VERIF_LIGNE_ITF From TRTVENCDE If OK=0 GMESSAGE = mess(74,187,1)-":"-GMESSAGE-mess(293,192,1)-WFCY : mkstat=2 : End Endif Endif # Contrôle de l'emplacement client si cde de prêt # En modif de cde, on ne peut controler qu'en AM_ # --> le site est rechargé ou pas si on desire ou pas realimenter les zones If GREP <> "C" & GREP <> "D" End Endif If [F:BPD]STOFCY <> "" WSTOFCY = [F:BPD]STOFCY Else WSTOFCY = GFCYDEF(7) Endif Gosub CTR_LOC From SUBSOHB # BPAADD rendu non modifiable pour l'instant # Commande inter-site avec commande d'achat réciproque #If [M:SOH1]BETFCY=2 & [M:SOH0]ORIFCY<>"" # Local Char LPRHFCY # Call RECPRHFCY([M:SOH0]BPCORD, VALEUR, LPRHFCY) From TRTVENISOC # If GERR=1 mkstat=2 : End : Endif #Endif End ######################################## Subprog AP_BPAADD(VALEUR) Variable Char VALEUR() # --> Si modif client raz adresse avant de passer dans le bouton adresse If !GIMPORT & VALEUR <> [M]BPAADD Raz [M:ADB2] : Endif # --> Alimentation de la raison sociale If [M:ADB2]BPRNAM(0) <> "" [M]BPDNAM = [M:ADB2]BPRNAM(0) Else [M]BPDNAM = [F:BPD]BPDNAM(0) Endif Affzo [M]BPDNAM End ######################################## Subprog AM_BPAADD(VALEUR) Variable Char VALEUR() Local Integer OK, OK1, W_ALICDE : W_ALICDE=1 Local Date WDEMDLVDAT If GWEBSERV # ACA 70505 # FGR 23/06/2014 : X3SUIVI100043 (début) #If dim([M:ADB2]BPAADD)>0 : [M:ADB2]BPAADD = [M:SOH1]BPAADD : Endif #Call CHARGE_ADRMSK("ADB2", VALEUR) From TRTVENDIV If dim([M:ADB2]BPAADD)>0 : [M:ADB2]BPAADD = VALEUR : Endif Call CHARGE_ADRMSK("ADB2", [M:SOH0]BPCORD) From TRTVENDIV # FGR 23/06/2014 : X3SUIVI100043 (fin) Endif # --> Si utilisation du bouton adresse, il ne faut pas passer en AM_ If !GIMPORT & VALEUR = [M]BPAADD End : Endif OK=2 : OK1=2 If !find(GREP,"C","D") Call OUINON(mess(129,191,1),OK) From GESECRAN Endif If OK=2 W_ALICDE=2 If [M:SOH4]NBLIG<>0 # On affiche plus les msgs d'avertissement si infos douanières ou régime de taxes différents sur les lignes #Gosub CTR_COHERENCE_LIGNE If mkstat=2 # Restauration de la raison sociale If [M]BPDNAM = [F:BPD]BPDNAM(0) If [M:ADB2]BPRNAM(0) <> "" [M]BPDNAM = [M:ADB2]BPRNAM(0) Else If [F:BPD]BPCNUM<>[M:SOH0]BPCORD | [F:BPD]BPAADD<>[M:SOH1]BPAADD Read [F:BPD]BPD0 = [M:SOH0]BPCORD;[M:SOH1]BPAADD : If fstat Raz [BPD] Endif Endif [M]BPDNAM = [F:BPD]BPDNAM(0) Endif Affzo [M]BPDNAM : mkstat=2 : # (cassé par l'affzo) Endif End Endif Endif Raz GMESSAGE : OK=1 # --> Créat./duplicat. et aucune ligne encore saisie : on demande si réinit. de la date liv ddée # Si le délai de livraison est modifié, ou si les jours ou les périodes d'indispo sont différentes # Reinit date liv. ddée ou recalcul date expédition If [M:SOH2]DEMDLVDAT<>[0/0/0] & find(GREP,"C","D") & [M:SOH4]NBLIG=0 : # Bug 65068 If clalev([F:BPD1]) = 0 Local File BPDLVCUST [BPD1] : Endif : # Bug 65068 If [F:BPD1]BPCNUM<>[M:SOH0]BPCORD | [F:BPD1]BPAADD<>[M:SOH1]BPAADD : # Bug 65068 Read [F:BPD1]BPD0 = [M:SOH0]BPCORD;[M:SOH1]BPAADD : # Bug 65068 If fstat Raz [F:BPD1] Endif : # Bug 65068 Endif : # Bug 65068 Local Integer WUVYDAY (0..6), WUVYDAY1 (0..6), I : # Bug 65068 Local Integer WUVYDAYDIFF : [L]WUVYDAYDIFF = 0 : #--CPO 80905 For I=0 To 6 : # Bug 65068 WUVYDAY(I) = evalue ("[F:BPD]UVYDAY"+num$(I+1)) : # Bug 65068 WUVYDAY1(I) = evalue ("[F:BPD1]UVYDAY"+num$(I+1)) : # Bug 65068 If WUVYDAY1(I)<>WUVYDAY(I) : [L]WUVYDAYDIFF = 1 : Endif : #--CPO 80905 Next : # Bug 65068 #If [M:SOH2]DAYLTI<>[F:BPD]DAYLTI | [F:BPD1]UVYCOD<>[F:BPD]UVYCOD | WUVYDAY1<>WUVYDAY : # Bug 65068 If [M:SOH2]DAYLTI<>[F:BPD]DAYLTI | [F:BPD1]UVYCOD<>[F:BPD]UVYCOD | [L]WUVYDAYDIFF = 1 : #--CPO 80905 #--CPO 80905 Dde de CH #Call OUINON(mess(496,197,1)-":"-format$(GFMD,[M:SOH2]DEMDLVDAT)-"\"-mess(162,191,1)-":"-mess(161,191,1), OK) From GESECRAN Call OUINON(mess(794,197,1), OK) From GESECRAN If OK=2 # Si réinit. date liv ddée : il faut réinitialiser la date d'expé puis calculer la date liv ddée Local Char WBPCORD, WBPAADD Local Integer WDAYLTI WBPCORD=[M:SOH0]BPCORD : WBPAADD=VALEUR : WDAYLTI=[F:BPD]DAYLTI Gosub INIT_DAT From SUBSOH1 Endif Endif Endif If OK=1 # --> Pas de réinit date liv. ddée # Vérification date liv. ddée pour la nouvelle adresse de livraison WDEMDLVDAT=[M:SOH2]DEMDLVDAT Call CTLUVYBPD(WDEMDLVDAT, VALEUR, [M:SOH0]BPCORD, 0) From TRTVENCTL If mkstat=2 Call AVERTIR(mess(496,197,1)-":"-format$(GFMDAT,WDEMDLVDAT)-"\"-GMESSAGE, OK1) From GESECRAN Endif :#--CPO 83985 GFMDAT au lieu de GFMD Raz GMESSAGE : If OK1=1 : End : Endif mkstat=0 # ------------------------------------------------------ # FGR 20/08/2014 : X3SUIVI95377 (début) : on vérifie que la date d'expédition est cohérente avec la livraison Local Integer IFORCECALCUL IFORCECALCUL = 0 If WDEMDLVDAT <> [0/0/0] and [M:SOH2]DAYLTI = [F:BPD]DAYLTI Then Local Date WSHIDAT Call CALC_SHIDAT(WDEMDLVDAT, [F:BPD]DAYLTI, [F:BPD]STOFCY, 1, 1, [M:SOH0]ORDDAT, WSHIDAT) From TRTVENDAT If WSHIDAT <> [M:SOH2]SHIDAT Then IFORCECALCUL = 1 Endif Endif # FGR 20/08/2014 : X3SUIVI95377 (fin) # ------------------------------------------------------ # Date liv ddée ok pour la nouvelle adresse de livraison # Recalcul date expedition si le délai est modifié #If WDEMDLVDAT <> [0/0/0] & ([M:SOH2]DAYLTI<>[F:BPD]DAYLTI | WDEMDLVDAT<>[M:SOH2]DEMDLVDAT) # FGR 20/08/2014 : X3SUIVI95377 If (WDEMDLVDAT <> [0/0/0] & ([M:SOH2]DAYLTI<>[F:BPD]DAYLTI | WDEMDLVDAT<>[M:SOH2]DEMDLVDAT)) or IFORCECALCUL = 1 Then #Call MESSAGE(mess(162,191,1)-":"-mess(163,191,1)) From GESECRAN : Raz GMESSAGE If IFORCECALCUL = 1 Then Call MESSAGE(mess(260,191,1)-":"-mess(163,191,1)) From GESECRAN Else Call MESSAGE(mess(162,191,1)-":"-mess(163,191,1)) From GESECRAN Endif Raz GMESSAGE Call CALC_SHIDAT(WDEMDLVDAT, [F:BPD]DAYLTI, [F:BPD]STOFCY, 1, 1, [M:SOH0]ORDDAT, [M:SOH2]SHIDAT) From TRTVENDAT Endif [M:SOH2]DEMDLVDAT=WDEMDLVDAT Endif Call ALICDE(1,"L",VALEUR) From TRTVENCDE Affzo [M:SOH1]BPDNAM Affzo [M:SOH1]15,20 Affzo [M:SOH2]5,15 Affzo [M:SOH2]DAYLTI,SHIDAT Affzo [M:SOH2]DEMDLVDAT Else # Réalimentation du code adresse (client livré) dans [M:ADB2] pour saisie adresse libre If dim([M:ADB2]BPAADD) > 0 [M:ADB2]BPAADD = [F:BPD]BPAADD Call RECH_CNTNAM([M:SOH0]BPCORD, [F:BPD]BPAADD, [M:ADB2]CNTNAM) From TRTVENDIV Endif Endif # En modif, contrôle de l'emplacement client If !find(GREP,"C","D") Local Char WSTOFCY : WSTOFCY = [M:SOH2]STOFCY Gosub CTR_LOC From SUBSOHB : If mkstat=2 End : Endif Endif # --> Réalimentation de la raison sociale If [M:ADB2]BPRNAM(0) <> "" [M]BPDNAM = [M:ADB2]BPRNAM(0) Else [M]BPDNAM = [F:BPD]BPDNAM(0) Endif GBIDI1=W_ALICDE # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management #--only if there are scheduling invoices filled on order's lines If [M:SOH4]NBLIG>0 and sigma(0,[M:SOH4]NBLIG-1,[M:SOH4]DINVCND(indcum)<> "")>1 [M:SOH3]INVCNDTOUPD=[V]CST_AYES Endif # End issue 107888 End ## ------------------------------------------------------------------------------- ## Contrôle de cohérence entre le client livré entête et les clients livrés lignes ## ------------------------------------------------------------------------------- #$CTR_COHERENCE_LIGNE # ## Si adresses de livraison à la ligne différentes de celle de l'entête ## Vérif.cohérence entre l'adresse entête et adresses à la ligne concernant les infos douanières et le régime de taxe #Local Char WVACBPR(GLONADI), WDETVACBPR(GLONADI), WENTVACBPR(GLONADI) #Local Integer WI, WJ, WOK #WJ=sigma(WI=0,[M]NBLIG-1,[M:SOH4]DBPAADD(WI)<>VALEUR) #If WJ<>0 # If clalev([F:BPD1]) = 0 Local File BPDLVCUST [BPD1] : Endif # For WI=0 To [M]NBLIG-1 # If [M]DBPAADD(WI)<>VALEUR # If [F:BPD1]BPCNUM<>[M:SOH0]BPCORD | [F:BPD1]BPAADD<>[M:SOH4]DBPAADD(WI) # Read [F:BPD1]BPD0 = [M:SOH0]BPCORD;[M:SOH4]DBPAADD(WI) # If fstat Raz [F:BPD1] Endif # Endif # If [F:BPD]VACBPR="" | [F:BPD1]VACBPR="" # Call INIT_REGIME([M:SOH0]BPCORD, GSOCIETE, "C", WVACBPR) From CPTSUB # Endif # If [F:BPD1]VACBPR<>"" WDETVACBPR=[F:BPD1]VACBPR Else WDETVACBPR=WVACBPR Endif # If [F:BPD]VACBPR <>"" WENTVACBPR=[F:BPD]VACBPR Else WENTVACBPR=WVACBPR Endif # WOK=2 # If (WDETVACBPR<>WENTVACBPR) # WOK=1 : # Régime de taxe client livré XXX différent du régime de taxe client livré ligne YYY # GMESSAGE=mess(620,197,1)-mess(42,191,1)-"("+WENTVACBPR+")"-mess(621,197,1)-mess(620,197,1)-mess(42,191,1)-mess(18,197,1)-[M:SOH4]DBPAADD(WI)-"("+WDETVACBPR+")" # Elsif ([F:BPD]EECNUM<>[F:BPD1]EECNUM & [F:BPD1]EECNUM<>"") # WOK=1 : # N°Identification CEE client livré XXX différent du N°identification CEE client livré ligne YYY # GMESSAGE=mess(629,197,1)-mess(42,191,1)-"("+[F:BPD]EECNUM+")"-mess(621,197,1)-mess(629,197,1)-mess(42,191,1)-mess(18,197,1)-[M:SOH4]DBPAADD(WI)-"("+[F:BPD1]EECNUM+")" # Elsif ([F:BPD]EECICT<>[F:BPD1]EECICT & [F:BPD1]EECICT<>"") # WOK=1 : # Code incoterm client livré XXX différent du code incoterm client livré ligne YYY # GMESSAGE=mess(630,197,1)-mess(42,191,1)-"("+[F:BPD]EECICT+")"-mess(621,197,1)-mess(630,197,1)-mess(42,191,1)-mess(18,197,1)-[M:SOH4]DBPAADD(WI)-"("+[F:BPD1]EECICT+")" # Elsif dim([M:SQH0]EECLOC)>0 & ([F:BPD]EECLOC<>[F:BPD1]EECLOC & [F:BPD1]EECLOC<>0) # WOK=1 : # Lieu transport CEE client livré XXX différent du Lieu transport CEE client livré ligne YYY # # GMESSAGE=mess(631,197,1)-mess(42,191,1)-"("+mess([F:BPD]EECLOC,236,1)+")"-mess(621,197,1)-mess(631,197,1)-mess(42,191,1)-mess(18,197,1)-[M:SOH4]DBPAADD(WI)-"("+mess([F:BPD1]EECLOC,236, #& 1)+")" # Endif # # Si incohérence, on prévient l'utilisateur, s'il décide de continuer on force la répercution sur les lignes # If WOK=1 # Call AVERTIR (GMESSAGE, WOK) From GESECRAN # If WOK=2 W_ALICDE=21 Else mkstat=2 : Raz GMESSAGE : Break : Endif # Endif # Endif # Next #Endif #If mkstat=2 Return Endif ## Il y a des incohérences entre le clt livré entête et les clts livrés lignes ## --> Répercution automatique obligatoire sur les lignes détails #If W_ALICDE=21 Call MESSAGE (mess(204,191,1)-":\"-mess(205,191,1)) From GESECRAN Endif # #Return # --------------------------------------- PJT --------------------------------- ######################################## # Issue X3-63242 - 2017-11-24 by FGR : BEGIN backporting missing #Subprog IB_PJT # #If GMODU(13) = 2 # GBOUT1 = mess(8, 31, 1) #Sélection # GBOUT2 = mess(1, 967, 1) #Affaires # Call TEXTE(23406, GBOUT3) From OBJDIV #Affaires client # # If [M:SOH1]PJT = "" # Call TEXTE(23422, GBOUT4) From OBJDIV #Origine marketing # # FGR 29/01/2010 : X3SUIVI60111 (début) # If [M:SOH1]OPGNUM <> "" Then # Case [M:SOH1]OPGTYP # When "OMM" # GBOUT5 = mess(2,2994,1) - ":" - [M:SOH1]OPGNUM # When "OMP" # GBOUT5 = mess(3,2994,1) - ":" - [M:SOH1]OPGNUM # When "OMT" # GBOUT5 = mess(4,2994,1) - ":" - [M:SOH1]OPGNUM # When "OMN" # GBOUT5 = mess(5,2994,1) - ":" - [M:SOH1]OPGNUM # When Default # Raz GBOUT5 # Endcase # Else # Raz GBOUT5 # Endif # # FGR 29/01/2010 : X3SUIVI60111 (fin) # Else # Raz GBOUT4 # Raz GBOUT5 # FGR 29/01/2010 : X3SUIVI60111 # Endif #Else # Raz GBOUT1 # Raz GBOUT2 # Raz GBOUT3 # Raz GBOUT4 # Raz GBOUT5 # FGR 29/01/2010 : X3SUIVI60111 #Endif # #End Subprog IB_PJT If GMODU(13) = 2 Then If [M:SOH1]PJT = "" Then Call TEXTE(23422, GBOUT5) From OBJDIV # Origine marketing If [M:SOH1]OPGNUM <> "" Then Case [M:SOH1]OPGTYP When "OMM" GBOUT6 = mess(2,2994,1) - ":" - [M:SOH1]OPGNUM When "OMP" GBOUT6 = mess(3,2994,1) - ":" - [M:SOH1]OPGNUM When "OMT" GBOUT6 = mess(4,2994,1) - ":" - [M:SOH1]OPGNUM When "OMN" GBOUT6 = mess(5,2994,1) - ":" - [M:SOH1]OPGNUM When Default Raz GBOUT6 Endcase Else Raz GBOUT6 Endif Else Raz GBOUT5 Raz GBOUT6 Endif Else Raz GBOUT5 Raz GBOUT6 Endif # Issue X3-200515/X3-227027 - 2020-12-22 by SR : General tour : Raz Jum to button if ther is at least one progress billing or one Milestone linked. If [M:SOH4]NBLIG > 0 Gosub INIT_JUMP_TO_PJT From LIBSAL_INVCND_SOH Endif # End issue X3-200515/X3-227027 End # Issue X3-63242 - 2017-11-24 by FGR : END ########################################################################## Subprog AM_PJT(VALEUR) Variable Char VALEUR() [M:SOH1]CMGNUM = "" [M:SOH1]OPGNUM = "" [M:SOH1]OPGTYP = "" # Issue X3-81031 # En modification du code affaire entête : # On doit conserver l'initialisation des axes si pas de lignes : Réhabilitation de la modification 71065 # Et réinitialiser systématiquement l’axe affaire (entête et lignes) : C'est ce qui est géré par le type de données PJT # Header project code modification : # We neeed to do the analytical dimension intialization if there is no lines # And we need to initialize the dimension managed by project (header and lines) : That's managed by the data type PJT ## X3-3808 : Update project dimension on sales documents / X3-49222 (LD 08/10/17) ## Ceci est désormais géré par le type de données PJT/This is now managed by activity code PJM # 71065 : PJT # Réinitialisation des sections analytiques # ssi aucune ligne saisie (car il n'y a pas de réinitialisation des sections sur les lignes) If [M:SOH4]NBLIG=0 If dim([M]NBAXE)>0 Local Integer WOK : WOK=2 Call OUINON(mess(236,187,1)-mess(622,197,1)-"?",WOK) From GESECRAN If WOK=2 If [M]NBAXE>0 For I=1 To [M]NBAXE Raz [M]CCE(I-1) : Next Endif [M:SOH1]PJT=VALEUR Call INIT_CCEH("SOH3","NBAXE","SOH") From TRTX3CPT Affzo [M:SOH3]20 Endif Endif Endif # 71065 : PJT ## X3-3808 : Update project dimension on sales documents / X3-49222 (LD 08/10/17) # End issue X3-81031 End # --------------------------------------- VACBPR --------------------------------- ###################################################################################### ## Etiquette ajoutée par le superviseur (écran SOH1) 30/09/2005 09:09:04 (LD) ###################################################################################### Subprog C_VACBPR(VALEUR) Variable Char VALEUR() If VALEUR<>[M]VACBPR Local Integer OK : OK=2 # 107888 : Scheduled invoices : (LD:10/05/16) # --> Dde de confirmation s'il y a des livraisons # If [M]SOHCAT <> 3 & sum([M]ODLQTY,[M]DLVQTY) <> 0 # Call AVERTIR(mess(120,191,1)-":"-mess(205,100,1),OK) From GESECRAN # If OK=1 mkstat=2 : End : Endif # Endif # --> Commande normale # Dde de confirmation s'il y a des livraisons (pour les articles livrables) ou des factures (pour les articles non livrables) If [M]SOHCAT = 1 If sum([M]ODLQTY,[M]DLVQTY,[M]INVQTY) <> 0 Call AVERTIR(mess(275,191,1)-":"-mess(205,100,1),OK) From GESECRAN If OK=1 mkstat=2 : End : Endif Endif Endif # --> Commande de prêt # Dde de confirmation s'il y a des livraisons If [M]SOHCAT = 2 If sum([M]ODLQTY,[M]DLVQTY) <> 0 Call AVERTIR(mess(120,191,1)-":"-mess(205,100,1),OK) From GESECRAN If OK=1 mkstat=2 : End : Endif Endif Endif # 107888 : Scheduled invoices : (LD:10/05/16) # --> Commande à facturation directe # Dde de confirmation s'il y a des factures If [M]SOHCAT = 3 & sum([M]ODLQTY, [M]INVQTY) <> 0 Call AVERTIR(mess(58,117,1)-":"-mess(205,100,1),OK) From GESECRAN If OK=1 mkstat=2 : End : Endif Endif Endif End ######################################## Subprog AM_VACBPR(VALEUR) Variable Char VALEUR() If [M:SOH4]NBLIG <> 0 # GTARFLG = "V" Local Char WZONCOU : WZONCOU = "VACBPR" Local Char FFLGMOD(1) Local Char WANCCUR : WANCCUR=[M]CUR Local Char WANCVACBPR : WANCVACBPR=[M]VACBPR Local Integer WANCPRITYP : WANCPRITYP=[M]PRITYP [M:SOH1]VACBPR=VALEUR Gosub RECALC_LIGNE From SUBSOHB If mkstat [M:SOH1]VACBPR=WANCVACBPR : End : Endif : # Bug 75162 Raz GTARFLG Endif End # --------------------------------------- CUR --------------------------------- ######################################## Subprog AM_CUR(VALEUR) Variable Char VALEUR() Local Integer SPSTAT, I Local Decimal MONTANT, MONTORG (0..1), MONTDES (0..1) Local Char FFLGMOD(1) Local Date WOSTDAT Local Libelle WOSTCHGTYP # --> Recalcul du montant mini cde Call CONVERT([M:SOH0]CUR, VALEUR, GLOCALDEV, [M]CHGTYP, date$, [M:SOH0]ORDMINAMT,MONTANT,SPSTAT) From TRTDEV [M:SOH0]ORDMINAMT = MONTANT # --> Recalcul de l'en-cours et de l'en-cours autorise If [M:SOH0]OSTAUZ <> 99999999999.99 If GOSTCHGTYP=2 # Si Origine cours pour contrôle en-cours = actualisé WOSTDAT=datesyst : # Date : date du jour WOSTCHGTYP= GOSTTYPCUR : # Type de cours : Type de cours ctrl au cours actualisé Else # Si Origine cours pour contrôle en-cours = historique WOSTDAT=[M]ORDDAT : # Date : date du document WOSTCHGTYP=[M]CHGTYP : # Type de cours : Type de cours du document Endif MONTORG(0) = [M:SOH0]OST MONTORG(1) = [M:SOH0]OSTAUZ # Call CONVERT([M:SOH0]CUR,VALEUR,GLOCALDEV,[M]CHGTYP,date$,MONTORG(0),MONTDES(0),SPSTAT) From TRTDEV # Call CONVERT([M:SOH0]CUR,VALEUR,GLOCALDEV,[M]CHGTYP,date$,MONTORG(1),MONTDES(1),SPSTAT) From TRTDEV Call CONVERT([M:SOH0]CUR,VALEUR,GLOCALDEV,WOSTCHGTYP,WOSTDAT,MONTORG(0),MONTDES(0),SPSTAT) From TRTDEV Call CONVERT([M:SOH0]CUR,VALEUR,GLOCALDEV,WOSTCHGTYP,WOSTDAT,MONTORG(1),MONTDES(1),SPSTAT) From TRTDEV [M:SOH0]OST = MONTDES(0) [M:SOH0]OSTAUZ = MONTDES(1) Endif # --> Recalcul des montants de facturation If [M:SOH3]NBFAC <> 0 For I = 0 To [M:SOH3]NBFAC-1 If [M:SOH3]AMTCOD(I) = 2 [M:SOH3]FORMAT(I) = "NZ:"+[F:TCU]CURFMT1 Call CONVERT([M:SOH0]CUR, VALEUR, GLOCALDEV, [M]CHGTYP, date$, [M:SOH3]INVDTAAMT(I),MONTANT,SPSTAT) From TRTDEV [M:SOH3]INVDTAAMT(I) = MONTANT Endif Next I Endif #If GACTMUL=2 # Alimentation du format des colonnes frais/remise Call ALIFORREM (2, GFLAG, "SOH4", 0, VALEUR) From TRTPRICE #Endif [M:SOH0]CUR = VALEUR Affzo [M:SOH3]1-99 Affzo [M:SOH0]CUR Affzo [M:SOH4]5 # On a pas fait de recherche tarif : on fera une conversion If [M:SOH4]NBLIG <> 0 & GTARFLG = "" Local Char WZONCOU : WZONCOU = "CUR" Local Char WANCCUR : WANCCUR=[M:SOH1]CUR Local Char WANCVACBPR : WANCVACBPR=[M:SOH1]VACBPR Local Integer WANCPRITYP : WANCPRITYP=[M:SOH1]PRITYP [M:SOH1]CUR=VALEUR # GTARFLG = "C" : Gosub RECALC_LIGNE From SUBSOHB Endif Raz GTARFLG # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management #--only if there are scheduling invoices filled on order's lines If [M:SOH4]NBLIG>0 and sigma(0,[M:SOH4]NBLIG-1,[M:SOH4]DINVCND(indcum)<>"")>1 [M:SOH3]INVCNDTOUPD=[V]CST_AYES Endif # End issue 107888 End # --------------------------------------- PRITYP --------------------------------- ######################################## Subprog AM_PRITYP(VALEUR) Variable Integer VALEUR # On a pas fait de recherche tarif : on fera juste la bascule de prix If [M:SOH4]NBLIG <> 0 & GTARFLG = "" # GTARFLG = "P" : Local Char WZONCOU : WZONCOU = "PRITYP" Local Char FFLGMOD(1) Local Char WANCCUR : WANCCUR=[M]CUR Local Char WANCVACBPR : WANCVACBPR=[M]VACBPR Local Integer WANCPRITYP : WANCPRITYP=[M]PRITYP [M]PRITYP = VALEUR Gosub RECALC_LIGNE From SUBSOHB Endif Raz GTARFLG # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management #--only if there are scheduling invoices filled on order's lines If [M:SOH4]NBLIG>0 and sigma(0,[M:SOH4]NBLIG-1,[M:SOH4]DINVCND(indcum)<>"")>1 [M:SOH3]INVCNDTOUPD=[V]CST_AYES Endif # End issue 107888 End # -------------------------------------------------------------------------------- # Ecran SOH2 # -------------------------------------------------------------------------------- # --------------------------------------- STOFCY --------------------------------- ######################################## Subprog C_STOFCY(VALEUR) Variable Char VALEUR() If [M:SOH4]NBLIG<>0 & VALEUR<>[M]STOFCY Gosub CTR_STOFCY From SUBSOHB Endif End # --------------------------------------- LASDLVNUM --------------------------------- ######################################## Subprog IB_LASDLVNUM If GFONC1 = "GESSDH" | [M]LASDLVNUM = "" | GREP <> "" Raz GBOUT1 : Endif End # --------------------------------------- DEMDLVDAT --------------------------------- ########################################################################## ## Etiquette ajoutée par le superviseur 19/11/2003 08:03:23 (LD) ########################################################################## Subprog C_DEMDLVDAT(VALEUR) Variable Date VALEUR Local Date WDEMDLVDAT : WDEMDLVDAT=VALEUR # --> Vérification de la date de livraison demandée Call CTLUVYBPD(WDEMDLVDAT, [M:SOH1]BPAADD, [M:SOH0]BPCORD, 0) From TRTVENCTL If mkstat=2 Local Integer WOK : WOK=2 Call AVERTIR(mess(496,197,1)-":"-format$(GFMDAT,WDEMDLVDAT)-":"-GMESSAGE, WOK) From GESECRAN : Raz GMESSAGE :#--CPO 83985 GFMDAT au lieu de GFMD If WOK=1 : End : Endif mkstat=0 Endif VALEUR=WDEMDLVDAT End ######################################## Subprog AM_DEMDLVDAT(VALEUR) Variable Date VALEUR # Controle lié à l'inter-site Gosub CTR_BETFCY From SUBSOHB : If mkstat=2 End Endif # --> Recalcul date expedition Call CALC_SHIDAT(VALEUR, [M:SOH2]DAYLTI, [M:SOH2]STOFCY, 1, 1, [M:SOH0]ORDDAT, [M:SOH2]SHIDAT) From TRTVENDAT #If mkstat Call MESSAGE (mess(278,192,1)-format$(GFMD,[M:SOH2]SHIDAT)-"\"-GMESSAGE) From GESECRAN : Endif Affzo [M:SOH2]SHIDAT End # --------------------------------------- DAYLTI --------------------------------- ######################################## Subprog AM_DAYLTI(VALEUR) Variable Decimal VALEUR # --> Recalcul date expedition Call CALC_SHIDAT([M:SOH2]DEMDLVDAT, VALEUR, [M:SOH2]STOFCY, 1, 1, [M:SOH0]ORDDAT, [M:SOH2]SHIDAT) From TRTVENDAT #If mkstat Call MESSAGE (mess(278,192,1)-format$(GFMD,[M:SOH2]SHIDAT)-"\"-GMESSAGE) From GESECRAN : Endif Affzo [M:SOH2]SHIDAT End # --------------------------------------- SHIDAT --------------------------------- ######################################## Subprog C_SHIDAT(VALEUR) Variable Date VALEUR If VALEUR > [M:SOH2]DEMDLVDAT Local Integer WOK : WOK=2 # Issue X3-125879 - 2019-05-09 by SR : Add the name of the field Call AVERTIR (mess(184,197,1)-":"-mess(33,192,1), WOK) From GESECRAN : Raz GMESSAGE If WOK=1 mkstat=2 : End : Endif Endif End # --------------------------------------- DME --------------------------------- ########################################################################## ## Etiquette ajoutée par le superviseur 06/07/2004 16:01:31 (LD) ########################################################################## Subprog C_DME(VALEUR) Variable Integer VALEUR If !find (GREP, "C","D") & [M]BETFCY=2 & [M:SOH0]ORIFCY<>[M:SOH0]SALFCY # Commande inter-sites générée à partir des achats # On ne peut aller que du + restrictif vers le - restrictif pour ne pas déphaser les ctrls sur la cde d'achat # Commande complète (3) -> Ligne complète (2) -> Livraison partielle autorisée (1) If VALEUR > [M:SOH2]DME mkstat=2 : GMESSAGE=mess(74,187,1)-"\"-mess(294,192,1) : Endif Endif End ######################################## Subprog AM_DME(VALEUR) : # --- Web - Obligatoire - Synchrone Variable Integer VALEUR If VALEUR = 3 # Diszo [M:SOH2]STOFCY Diszo [M:SOH4]DBPAADD, DSTOFCY, DDLVPIO, DDRN, DMDL, DBPTNUM Else # Actzo [M:SOH2]STOFCY Actzo [M:SOH4]DBPAADD, DSTOFCY, DDLVPIO, DDRN, DMDL, DBPTNUM Endif End # --------------------------------------- ALLTYP --------------------------------- ######################################## Subprog AM_ALLTYP(VALEUR) : # --- Web - Faible - Synchrone Variable Integer VALEUR # --> On modifie forcément toutes les lignes détails (sinon cela n'a aucun sens) If [M:SOH4]NBLIG <> 0 Local Char WZONCOU : WZONCOU = "ALLTYP" Local Char FFLGMOD(1) : FFLGMOD = "1" Local Char WANCCUR : WANCCUR=[M]CUR Local Char WANCVACBPR : WANCVACBPR=[M]VACBPR Local Integer WANCPRITYP : WANCPRITYP=[M]PRITYP Gosub RECALC_LIGNE From SUBSOHB Endif End # -------------------------------------------------------------------------------- # Ecran SOH3 # -------------------------------------------------------------------------------- # --------------------------------------- UNL --------------------------------- Subprog AM_UNL(VALEUR) Variable Integer VALEUR # Si valeur à oui et commande bloquée ou en dépassement d'en-cours: On débloque la commande If VALEUR = 2 & find([M:SOH1]CDTSTA,2,3) [M:SOH1]CDTSTA = 1 Elsif VALEUR = 1 # Si valeur à non il faut recalculer l'état crédit Call SDCDTSTA("",[M]BPCORD,[M]CHGTYP,0,[M:SOH1]CUR,[M]ORDDAT,VALEUR,1,[M]CDTSTA,[M]OST,[M]OSTAUZ) From TRTVENCDT Endif Affzo [M:SOH1]CDTSTA : End ######################################## # 107890 : Scheduled invoices : (LD:14/01/16) # --------------------------------------- UNL --------------------------------- ######################################## Subprog C_VCRINVCNDDAT(VALEUR) Variable Date VALEUR If [M:SOH0]SOHCAT=1 & VALEUR < [M:SOH0]ORDDAT GMESSAGE=mess(32,192,1)-format$(GFMDAT4,[M:SOH0]ORDDAT): mkstat=2 Endif End ######################################## Subprog AM_VCRINVCNDDAT(VALEUR) Variable Date VALEUR # The system proposes to recalculate scheduled invoices for lines that are not partially invoiced # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management Local Integer WOKCPO Local Date WCPO_DAT : WCPO_DAT = [M:SOH3]VCRINVCNDDAT #--only if there are scheduling invoices filled on order's lines If [M:SOH4]NBLIG>0 and sigma(0,[M:SOH4]NBLIG-1,[M:SOH4]DINVCND(indcum)<> "")>0 WOKCPO=2 Call OUINON(mess(498,192,1)+"\"+"("+mess(518,192,1)-"'"+mess(1,2419,1)+"'"+")",WOKCPO) From GESECRAN If WOKCPO=2 GERR=0 [M:SOH3]VCRINVCNDDAT=VALEUR Gosub AM_ORDDAT_UPDATE_INVCNDDAT From LIBSAL_INVCND_SOH If GERR=1 [M:SOH3]VCRINVCNDDAT = WCPO_DAT mkstat=2 : End Endif Endif Endif # End issue 107888 End # 107890 : Scheduled invoices : (LD:14/01/16) ###################################################################################### Subprog AM_PTE(VALEUR) Variable Char VALEUR() # 78411 Sage Exchange If func AFNC.ACTIV("SEPP") If !clalev([F:SEU]) Local File SEAUTH [SEU] Endif # If Payment terms were SE and no longer are - void any outstanding Auth If !func SEPPLIB.SEPP_DOC(VALEUR) & func SEPPLIB.SEPP_DOC([M:SOH3]PTE) & func SEPPCDT.SEPP_OK(2,[M:SOH0]SOHNUM,1) & & !find(GREP,"C","D") & find([F:SEU]STAFLG,3,8) Call MESSAGE(mess(38,2092,1)) From GESECRAN Endif # If payment terms were or are now Sage Exchange, recalc credit hold If (func SEPPLIB.SEPP_DOC(VALEUR) | func SEPPLIB.SEPP_DOC([M]PTE)) [F:SOH]PTE = VALEUR Call SDCDTSTA([M]SOHNUM,[M]BPCORD,[M]CHGTYP,0,[M:SOH1]CUR,[M]ORDDAT,[M]UNL,1,[M]CDTSTA,[M]OST,[M]OSTAUZ) From TRTVENCDT Affzo [M:SOH1]CDTSTA # TTD-114631.sn: Creation only. If GREP = "C" If NBLIG > 0 Raz [M:SOH4]WALLQTY # Qty to allocate Raz [M:SOH4]WALLQTYSTU # STK qty. to be allocated (Hidden field) Endif Affzo [M:SOH4]WALLQTY, WALLQTYSTU Endif # TTD-114631.en Endif Endif End ###################################################################################### Subprog C_PTE(VALEUR) Variable Char VALEUR() # 78411 Sage Exchange If func AFNC.ACTIV("SEPP") If func SEPPLIB.SEPP_DOC(VALEUR) # TODAN-120946. Payment term was not SE and now SE. So check the line for non-deliverable item # Note: Need to move the call to SUBSOHA to avoid the - # SUBSOH: Error No 128 - - Number of instructions or expressions too large Gosub VALIDATE_INVOICING_TERM From SUBSOHA : If GOK < 1: End : Endif [M:SOH2]ODL = 2 : [M:SOH3]IME = 1 Affzo [M:SOH2]ODL : Affzo [M:SOH3]IME Grizo [M:SOH2]ODL : Grizo [M:SOH3]IME Else Actzo [M:SOH2]ODL : Actzo [M:SOH3]IME Endif Endif End # --------------------------------------- LASINVNUM -------------------------------- ######################################## Subprog IB_LASINVNUM If GFONC1 = "GESSIH" | [M]LASINVNUM = "" | GREP <> "" Raz GBOUT1 Endif End # --------------------------------------- SQHNUM -------------------------------- ######################################## Subprog IB_SQHNUM If GFONC1 = "GESSQH" | [M]SQHNUM = "" | GREP <> "" Raz GBOUT1 Endif End # --------------------------------------- NBAXE -------------------------------- ######################################## Subprog C_NBAXE #If !find(status,1,4,5,20,21,26,92,93) End : Endif ##----- Contrôle sections obligatoires -----# #If GCCECOD=1 # For nolign=1 To GOPTCANA # If [M]CCE(nolign-1)="" & evalue("GANASAI"+num$(nolign))=2 # mkstat=2 : GMESSAGE= mess(177,199,1) : Break # Endif # Next nolign #Endif #----------------# # Contrôle NBAXE # #----------------# If !find(status,1,4,5,20,21,26,92,93) | GIMPORT End : Endif #----- Contrôle Sections d'entête obligatoires si saisissables -----# If [M:SOH3]NBAXE>0 & GHEADIE=1 Local Integer I For I=1 To [M:SOH3]NBAXE If CCE(I-1)="" & GOBLDIE(I)=2 mkstat=1 : GMESSAGE= mess(46,106,1)-GDIE(I) : Break Endif Next I Endif End # --------------------------------------- NBFAC -------------------------------- ########################################################################## Subprog C_NBFAC # --- Si l'on sort du tableau, calcul de la valeur TTC (calcul facture complet) If GIMPORT : End : Endif If [M:SOH4]NBLIG=0 : End : Endif If status >= 65 & status <= 100 End Endif If find(status,7,27,28) | status >= 1792 End Endif If dim(G_MOD_DTAAMT)>0 & G_MOD_DTAAMT>0 # 101874 : V9 : Taxe code control # Valuation is always done in this case #If dim(GVALTTCSOH)>0 & dim(GVALTTC)>0 : GVALTTC=GVALTTCSOH : Endif GVALTTC=2 #---- Paramètres complementaires appel valorisation # PARAM_T(0) : Flag contrôle des taxes (1=Non/2=Oui) # PARAM_T(1) : Lecture de la trace par le sous-pro (1=Non/2=Oui) # PARAM_T(2) : Flag retour (1=KO/2=OK) Local Char PARAM_T (25) (0..10) PARAM_T(0)="1" : # Pas de contrôle des taxes PARAM_T(1)="1" : # Pas de lecture de la trace PARAM_T(2)="0" Call VALTTC ("GESSOH", PARAM_T) From TRTVENFACR Raz G_MOD_DTAAMT If PARAM_T(2)="1" mkstat=2 : End Endif # 101874 Endif End #-------- A supprimer ultérieurement Subprog AP_NBFAC End ######################################## Subprog AM_INVDTAAMT(VALEUR) Variable Decimal VALEUR # ACA - On vérifie que la saisie ne s'est pas faite avec trop de décimales # Possible à cause du picking qui ajoute 2 décimales pour les éléments calculés #Fq76549-Gbn If [M:SOH3]AMTCOD(nolign-1)=1 & and [M:SOH3]INVDTATYP(nolign-1)<>3 & and arr(VALEUR,[F:TCU]CURRND) <> VALEUR : # Trop de decimales GERR=1 : GMESSAGE=mess(303,184,1)-mess(134,126,1)-":"-num$([F:TCU]DECNBR) mkstat=1 End Endif # ACA - On retabli le bon nombre de decimales pour le format If [M:SOH3]AMTCOD(nolign-1)=1 & and [M:SOH3]FORMAT(nolign-1)<>func TRTX3FNC.GETFMTREM(1) [M:SOH3]FORMAT(nolign-1)=func TRTX3FNC.GETFMTREM(1) Endif If dim(G_MOD_DTAAMT)<=0 : Global Integer G_MOD_DTAAMT : Endif G_MOD_DTAAMT += 1 If GREP="C" Call ADD_NBTRF(0, [M:SOH3]INVDTA(nolign-1), VALEUR) From SUBSFIT Endif #--CPO 102340 Avenants lignes mis à jour si modification en-tête #--Il faut enrichir la correction 90362 qui met à 1 les UPDFLG si pas d'éléments répartis #--Mettre le flag à 1 uniquement si passage d'un élément réparti à 0 If [M:SOH3]INVDTAAMT(nolign-1)<>0 and VALEUR = 0 #--Vérifier que l'élément est réparti sur lignes If clalev([F:SFI])=0 : Local File SFOOTINV [SFI] : Endif If [M:SOH3]INVDTA(nolign-1)<>[F:SFI]SFINUM Read [F:SFI]SFI0 = [M:SOH3]INVDTA(nolign-1) If fstat : Raz [F:SFI] : Endif Endif If find([F:SFI]DSPLIN,2,3,4)>0 If dim(G_PREV_DSPLIN)<0 : Global Integer G_PREV_DSPLIN : Endif G_PREV_DSPLIN = 1 Endif Endif #--/102340 End # --------------------------------------- PRFNUM -------------------------------- ######################################## Subprog IB_PRFNUM If GFONC1 = "GESSIH" | [M]PRFNUM = "" | GREP <> "" Raz GBOUT1 Endif End ##################################################################### # LES ACTIONS SUR LES ZONES ECRAN DETAIL # ##################################################################### # -------------------------------------- NBLIG ------------------------------ # --- Web - Obligatoire - Synchrone Subprog IB_NBLIG Local Integer NOL : NOL=nolign-1 # Bouton 1 : Solde d'une ligne de commande # Bouton 2 : Calcul tarif # Bouton 3 : Visu info qté cde vente # Bouton 4 : If Deliverable Item : Visu détail allocation : # 107890 : Scheduled invoices : (LD:21/12/15) # Bouton 4 : If Undeliverable Item :Timetable (Echéancier) : # 107890 : Scheduled invoices : (LD:21/12/15) # Bouton 5 : Stock par site # Bouton 6 : Saisie texte ligne # Bouton 7 : Visu avenants ligne commande # Bouton 8 : Explication du prix # Bouton 9 : Devis # Bouton 10 : Contrats de service # Bouton 11 : Configurateur # Bouton 12 : Allocations manuelles # Bouton 13 : Detail valorisation # Bouton 14 : Ordre de fabrication # Bouton 15 : Commande # Bouton 16 : derniers articles commandés # SEGAY 05/12/2008 : branchement traçabilité pièces # Bouton 17 : traçabilité pièces # Bouton 18 : affectation(s) ## Bouton 19 : Planification multi-niveau (v6.2) - FQ 64659 GA 08/2010 # Bouton 19 : Product information - DF 79831 Raz GBOUT18, GBOUT14 # SEGAY 05/12/2008 : branchement traçabilité pièces If find(GREP,"C","D") or find("CONSPIV",GNAVIG(1..GPILNAV)) Then Raz GBOUT17 Endif # Call IB_NOTECHECK([M:SOH4]ITMREF(NOL),"ITMREF",20) From TRTNTSCTL # product notes EWI 86290 If nolign <= [M]NBLIG GBOUT3=mess(164,198,1) GBOUT9=mess(121,198,1)-[M]DETSQHNUM(nolign-1) If GREP = "" Then # FGR 19/03/2014 : X3SUIVI95697 : GBOUT14 disponible slt si GREP="" #MAE, EVOL_ERGO # --> déf. bouton ordre de fabrication et commandes # FQ 69784 GA 12/2010 partager même bouton GBOUT14, car GBOUT15 est utilisé pour MULTIWX # + ajout cas d'une contremarque EO If [M:SOH4]FMINUM(NOL) <> "" # GH 06/07/2012 bug 83344 Local Integer FMI [L]FMI = [M:SOH4]FMI(NOL) If [L]FMI = 5 If !clalev([F:MFG]) : Local File MFGHEAD [MFG] : Endif Look [MFG]MFG0 = [M]FMINUM(nolign-1) If fstat : [L]FMI=6 : Endif Endif # If GFONC1 <> "GESMFG" & [L]FMI=5 : # GH 06/07/2012 bug 83344 : # & [M:SOH4]FMI(NOL) = 5 GBOUT14 = mess(166,198,1)-[M]FMINUM(nolign-1) : # WO If dim([M:SOH4]WOBJ1)>0 : [M:SOH4]WOBJ1 = "MFG" : Endif Elsif GFONC1 <> "GESSCO" & [L]FMI = 6 : # GH 06/07/2012 bug 83344 : # & [M:SOH4]FMI(NOL) = 6 GBOUT14 = mess(641,197,1)-[M]FMINUM(nolign-1) : # EO If dim([M:SOH4]WOBJ1)>0 : [M:SOH4]WOBJ1 = "SCO" : Endif Elsif GFONC1 <> "GESPOH" GBOUT14 = mess(191,198,1)-[M]FMINUM(nolign-1) : # PO If dim([M:SOH4]WOBJ1)>0 : [M:SOH4]WOBJ1 = "POH" : Endif Endif Else Raz GBOUT14 Endif Else Raz GBOUT14 Endif If [M]DETSQHNUM(NOL) = "" | GFONC1 = "GESSQH" Raz GBOUT9 Endif # --> Déf. bouton stock site If [M]STOMGTCOD(NOL) = 1 : Raz GBOUT5 : Endif If [M]STOMGTCOD(NOL) > 1 & [M]SOQSTA(NOL) <> 3 : GBOUT18 = mess(467,198,1) : Endif # --> Déf. bouton détail allocation # 107890 : Scheduled invoices : (LD:18/12/15) # This part has been moved because Scheduled invoices can be accessible even if the order is closed # Because of the limit of the number of button, we have to use one button for severals purposes : # If [M]STOMGTCOD(NOL) = 1 | [M]DALLTYP(NOL) = 1 | ([M]ALLQTY(NOL)=0 & [M]SHTQTY(NOL)=0) # If [M]STOMGTCOD(NOL) = 1 | ([M]ALLQTY(NOL)=0 & [M]SHTQTY(NOL)=0) # Raz GBOUT4 # Endif Raz GBOUT4 If [M]DLVFLG(nolign-1)=2 # Deliverable Item : Allocation detail If [M]STOMGTCOD(NOL)>1 & ([M]ALLQTY(NOL)+[M]SHTQTY(NOL)<>0) Call TEXTE(15286, GBOUT4) From OBJDIV Endif Else # Undeliverable Item : Timetable (Echéancier) If [M:SOH4]DINVCND(nolign-1)<>"" # Call TEXTE(25808, GBOUT4) From OBJDIV Call TEXTE(56726, GBOUT4) From OBJDIV # SAM 107888 Scheduled invoices (JUCON 14/11/16) Endif Endif # 107890 : Scheduled invoices : (LD:18/12/15) # --> Si la cde est soldée aucun bouton actif If [M:SOH1]ORDSTA = 2 # 107890 : Scheduled invoices : (LD:12/07/16) #Raz GBOUT1, GBOUT2, GBOUT4, GBOUT11, GBOUT12, GBOUT15 : # GH 22/10/12 bug 84890 ajout de GBOUT15 Raz GBOUT1, GBOUT2, GBOUT11, GBOUT12, GBOUT15 : # GH 22/10/12 bug 84890 ajout de GBOUT15 # 107890 : Scheduled invoices : (LD:12/07/16) If [M]LINREVNUM(NOL) = 0 Raz GBOUT7 : Endif If [M]CONNUM(NOL) = "" Raz GBOUT10 : Endif : End Endif # --> Pas de solde si solde non autorisé ou si la ligne de commande n'est pas créée If [M:SOH2]ORDCLE=1 | [M]CREFLG(NOL)=0 Raz GBOUT1 Endif # --> Pas de solde/désolde si cde inter-site générée par le module achat If [M:SOH0]ORIFCY<>"" & [M:SOH0]ORIFCY<>[M:SOH0]SALFCY Raz GBOUT1 Endif # --> Pas de solde pour les composants de kit/sous-traité If find ([M:SOH4]LINTYP (NOL),3,4,5,11,12,13) Raz GBOUT1 Else # --> Ligne déjà soldée If [M:SOH4]SOQSTA(NOL) = 3 # --> Ligne à désolder sf si totalement livrée/facturée # 107888 : Scheduled invoices : (LD:10/05/16) # If ([M:SOH0]SOHCAT <> 3 & ([M]DLVQTY(NOL) + [M]ODLQTY(NOL)) >= [M]QTY(NOL)) | #& ([M:SOH0]SOHCAT = 3 & ([M]INVQTY(NOL) + [M]ODLQTY(NOL)) >= [M]QTY(NOL)) #| ##& ([M:SOH4]CONNUM(NOL) <> "") # FGR 13/02/2014 : X3SUIVI96419 # Raz GBOUT1 # Endif # --> Ligne à désolder sf si totalement livrée/facturée # Commande normale/prêt et ligne livrable désolde sf si Totalement livrée # Commande normale et ligne non livrable désolde sf si Totalement facturée # Commande à facturation directe désolde sf si Totalement facturée If ([M:SOH0]SOHCAT <> 3 & [M]DLVFLG(NOL)=2 & ([M]DLVQTY(NOL) + [M]ODLQTY(NOL)) >= [M]QTY(NOL)) | & ([M:SOH0]SOHCAT <> 3 & [M]DLVFLG(NOL)=1 & ([M]INVQTY(NOL) + [M]ODLQTY(NOL)) >= [M]QTY(NOL)) | & ([M:SOH0]SOHCAT = 3 & ([M]INVQTY(NOL) + [M]ODLQTY(NOL)) >= [M]QTY(NOL)) Raz GBOUT1 Endif # 107888 : Scheduled invoices : (LD:10/05/16) # --> Ligne n'est pas soldée Else # --> Ligne à solder sf si préparée If ([M]LPRQTY(NOL) + [M]OPRQTY(NOL) + [M]PREQTY(NOL)) <> 0 Raz GBOUT1 Endif # FGR 13/02/2014 : X3SUIVI96419 (début) If [M:SOH4]CONNUM(NOL) <> "" Then # Si on a désoldé c'est pour supprimer la ligne : on n'a pas de droit de solder Raz GBOUT1 Endif # FGR 13/02/2014 : X3SUIVI96419 (fin) Endif Endif # --> Déf. bouton Recalcul tarif si ligne non soldée, livrée, facturée, gratuit # --> Pas de recalcul si ligne soldée, livrée, facturée ou si gratuit If [M]SOQSTA(NOL) = 3 | & [M]ODLQTY(NOL) <> 0 | [M]DLVQTY(NOL) <> 0 | [M]INVQTY(NOL) <> 0 | & [M]FOCFLG(NOL) = 3 Raz GBOUT2 Endif # 200515 : Progress billing / X3-217465 : Control on sales order line price search - 2020-10-12 by LD # If the sales order line is linked to a progress billing # If there is scheduled invoices linked to a billing situation not invoiced we can't modify the price (to avoid bad price when invoicing) # So price calculation has to be inhibited # This working flag indicates if, for the sales order line, there is scheduled invoices linked to a billing situation not invoiced If dim([M:SOH4]PBILDTOINV) > 0 & [M:SOH4]PBILDTOINV(NOL)=2 Raz GBOUT2 Endif # 200515 : Progress billing / X3-217465 : Control on sales order line price search - 2020-10-12 by LD # --> Déf. bouton détail allocation ## 107890 : Scheduled invoices : (LD:18/12/15) ## Because of the limit of the number of button, we have to use one button for severals purposes : ## This part has been moved because Scheduled invoices can be accessible even if the order is closed ## If [M]STOMGTCOD(NOL) = 1 | [M]DALLTYP(NOL) = 1 | ([M]ALLQTY(NOL)=0 & [M]SHTQTY(NOL)=0) ## If [M]STOMGTCOD(NOL) = 1 | ([M]ALLQTY(NOL)=0 & [M]SHTQTY(NOL)=0) ## Raz GBOUT4 ## Endif # Raz GBOUT4 # If [M]DLVFLG(nolign-1)=2 # # Deliverable Item : Allocation detail # If [M]STOMGTCOD(NOL)>1 & ([M]ALLQTY(NOL)+[M]SHTQTY(NOL)<>0) # Call TEXTE(15286, GBOUT4) From OBJDIV # Endif # Else # # Undeliverable Item : Timetable (Echéancier) # If [M:SOH4]DINVCND(nolign-1)<>"" # Call TEXTE(25808, GBOUT4) From OBJDIV # Endif # Endif ## 107890 : Scheduled invoices : (LD:18/12/15) # --> Déf. bouton Avenants si masque avenant existe et ligne avec avenant # If filinfo(filpath(adxrob(0),"WK"+num$([F:SLT]STRTYP)+[F:SLT]STRNUM+"A","srm",0),0)>=0 # ( pour l'instant : pas d'ecran d'avenant généré par la transaction ) If [M]LINREVNUM(NOL) = 0 Raz GBOUT7 Endif # Endif # --> Déf. bouton allocation manuelle # Si kit/sous-traité, garder la cohérence sur le type allocation If [M]UPDFLG(NOL)<>0 | [M]DEMSTA(NOL)<>1 | find([M]CDTSTA,2,5) | & [M]STOMGTCOD(NOL) = 1 | [M]SOQSTA(NOL) = 3 | & (find([M]LINTYP(NOL),3,4,5,11,12,13) & [M]DALLTYP(NOL)=1) | & sum([M:SOH4]OPRQTY(NOL),[M:SOH4]PREQTY(NOL),[M:SOH4]ODLQTY(NOL),[M:SOH4]DLVQTY(NOL))>=sum([M:SOH4]QTY(NOL)) | & (GAPPSOH>1 & (GSOHAPPORD=1 | GSOHAPPALL=1) & [M:SOH1]APPFLG<=2) | & (find([M]LINTYP(NOL),3,4,5,11,12,13) & [M:SOH4]WALLQTY(NOL)=0) : # 93012 : Pas de bt si composant kit non alloué car pas de saisie possible de la qté à allouer (Il faut passer par le # composé) #& (GAPPSOH>1 & (GSOHAPPORD=1 | GSOHAPPALL=1) & [M:SOH1]APPFLG<=2) #& sum([M:SOH4]LPRQTY(NOL),[M:SOH4]OPRQTY(NOL),[M:SOH4]PREQTY(NOL),[M:SOH4]ODLQTY(NOL),[M:SOH4]DLVQTY(NOL))>=sum([M:SOH4]QTY(NOL)) | : # 100013 #& sum([M:SOH4]LPRQTY,[M:SOH4]OPRQTY,[M:SOH4]PREQTY,[M:SOH4]ODLQTY,[M:SOH4]DLVQTY)>=sum([M:SOH4]QTY) | : # 90571 Raz GBOUT12 Endif # Ctrl autorisation bouton allocation manuelle If !find (GREP, "C", "D") GBIDC2="A": GFCY=[M]SALFCY : Gosub AUTORIS_OPT From CONTX3 If !GBIDI2 Raz GBOUT12 Endif Endif #Modif CRM 20 Septembre 2000 If [M:SOH4]CONNUM(NOL) = "" Raz GBOUT10 Else If GMODU(12) = 2 GBOUT10 = mess(293, 196, 2) #Contrats de service; Else Raz GBOUT10 Endif Endif # Pas de configurateur si commande soldé ou gratuit (pb insertion) If [M:SOH1]ORDSTA=2 | [M:SOH4]FOCFLG(NOL)=3 Raz GBOUT11 Endif # Pas de configurateur si composant (pb insertion) ### If ([M:SOH4]LINTYP(NOL)>2 & [M:SOH4]LINTYP(NOL)<6) | ([M:SOH4]LINTYP(NOL)>6 & [M:SOH4]LINTYP(NOL)<=9) | ###& ([M:SOH4]LINTYP(NOL)>10 & [M:SOH4]LINTYP(NOL)<14) If find ([M:SOH4]LINTYP (NOL),3,4,5,7,8,9,11,12,13) Raz GBOUT11 Endif If [M:SOH4]ITMREF(NOL) = "" Raz GBOUT16 Endif # FQ 64659 GA 08/2010 # --> Pas de multi-niveau: # - en création de la commande de vente # - si on est venu depuis MULTIWOX # - pour les composants de kit/sous-traité # - si tout est déjà affecté ou alloué, ou la contremarque déjà faite # GH 10/10/12 bug 84957 (cohérence avec le plan de travail) If find(GREP,"C","D") & | find("MULTIWOX",GNAVIG(1..GPILNAV)) & | find ([M:SOH4]LINTYP (NOL),3,4,5,7,8,9,11,12,13) & | [M:SOH4]FMINUM(NOL)<>"" Raz GBOUT15 # FQ 69784 GA 12/2010 pb intégration avec module ETO: avant GBOUT19 Else # Recherche de la qté encore affectable If !clalev([F:ORD]) : Local File ORDERS [ORD] : Endif Read [ORD]ORD3 = [M:SOH4]DSTOFCY(NOL);2;[M:SOH0]SOHNUM;[M:SOH4]SOPLIN(NOL);[M:SOH4]SOPLIN(NOL) GBIDD1 = max(0,[F:ORD]RMNEXTQTY - [F:ORD]ALLQTY -[F:ORD]MTOQTY) * (fstat=0) If GBIDD1=0 : Raz GBOUT15 : Endif Endif #Call IB_PRDINF([M:SOH4]ITMREF(NOL),19) From PRDINFLIB # DF 79831 EWI 86290 Else Raz GBOUT1, GBOUT2, GBOUT3, GBOUT4, GBOUT5, GBOUT6, GBOUT7, GBOUT8, GBOUT9, GBOUT12, GBOUT13 Raz GBOUT14, GBOUT15, GBOUT16, GBOUT17, GBOUT18 #GBOUT19, GBOUT20 # DF 79831, product notes EWI 86290 Endif End ###################################################################################### ## Etiquette ajoutée par le superviseur (écran SOH4) 09/11/2004 18:02:44 (LD) ###################################################################################### Subprog AV_NBLIG # Issue 113880 # This display (GERR=4) is no more possible with web client End # End issue 113880 ## Si kit ou sous-traité, affichage au niveau du composé de la qté livrable lorsque l'on clique sur la ligne (status=71) #If status<>71 | nolign>[M]NBLIG | (!find(2,10, [M]LINTYP(0..[M]NBLIG-1))) End Endif #GERR=4: GMESSAGE=" " #If find([M]LINTYP(nolign-1),2,10) & [M]DLBQTYSTU(nolign-1)<([M]ALLQTYSTU(nolign-1)+[M]SHTQTYSTU(nolign-1)) # Local Decimal WDLBQTY # If [M]SAUSTUCOE(nolign-1)<>1 # WDLBQTY=[M]DLBQTYSTU(nolign-1)*(1/[M]SAUSTUCOE(nolign-1)) # Else # WDLBQTY=[M]DLBQTYSTU(nolign-1) # Endif # Call QTEARR(WDLBQTY, [M]SAU(nolign-1)) From TRTDIV # GMESSAGE=(mess(610,197,1)-num$(WDLBQTY)-[M]SAU(nolign-1)) #Endif #End ######################################## # --- Web - Obligatoire - Synchrone Subprog C_NBLIG Local Integer NOL # Valeurs de GMODIF : # 0 = Modification ligne # 1 = Suppression ligne # 2 = Nouvelle ligne # 3 = Suppression des composants kit (suite à GMODIF=1) # 4 = Suppression des composants nomenclature (suite à GMODIF=1) # Issue X3-177254 - 20200520 by VAVIL : Fields that user must be able to change after the Electronic Signature - orders If func AFNC.ACTIV('KPO') > 0 If dim([M:SOH1]SOHVALDATC) > 0 and dim([M:SOH1]SOHVALDAT) > 0 and [M:SOH1]SOHVALDAT <> [0/0/0] If [M:SOH1]SOHCFMFLG = 2 and (status = 73 | status = 82 | status = 65) mkstat = 2 : GMESSAGE = mess(23,2038,1) : End Endif Endif Endif # Issue X3-135076 end GMODIF=2 If [M:SOH1]ORDSTA <> 2 If [M:SOH4]NBLIG <> 0 Diszo [M:SOH0]SOHTYP Diszo [M:SOH0]SALFCY If GREP <> "D" Diszo [M:SOH0]BPCORD Endif # If [M:SOH2]DME = 3 Diszo [M:SOH2]STOFCY # Else Actzo [M:SOH2]STOFCY Endif Elsif find (GREP, "C", "D") Actzo [M:SOH0]SOHTYP Actzo [M:SOH0]SALFCY Actzo [M:SOH0]BPCORD # Actzo [M:SOH2]STOFCY Endif If sum([M:SOH4]ALLQTY)<>0 | sum([M:SOH4]SHTQTY)<>0 | sum([M:SOH4]WALLQTY)<>0 Diszo [M:SOH2]ALLTYP Else Actzo [M:SOH2]ALLTYP Endif Endif # --> CONTRôLE D'insertion de lignes If status = 73 | status = 82 NOL=nolign-1 : Gosub TEST_INS From SUBSOHB : Endif # --> Contrôle de suppression de lignes If status = 65 NOL=nolign-1 : GMODIF = 1 : Gosub TEST_ANU From SUBSOHB If mkstat End Endif GUPDAPPFLG=2 : # Raz signatures si suppression d'une ligne Endif If status = 68 | status= 83 GMODIF = 1 For NOL=nolign-1 To nolign1-1 Gosub TEST_ANU From SUBSOHB If mkstat : Break : Endif Next NOL If mkstat End Endif GUPDAPPFLG=2 : # Raz signatures si suppression d'une ligne Endif # --> Contrôle de modification de lignes If status = 75 NOL=nolign-1 GMODIF=0 Gosub TEST_MOD From SUBSOHB Endif If GMESSAGE = "" : GERR=4 : Endif End ######################################## # --- Web - Obligatoire - Synchrone Subprog AVANT_NBLIG Local Integer NOL : NOL=nolign-1 Local Integer WRETOUR Local Char WNUMTEX(12) If GMODIF = 2 # --> Création d'une ligne : Alimentation des zones venant de l'entête Call INIT_SOH(NOL, 1) From SUBSOHB Else # --> Lecture des fichiers en ligne Call LECT_FIC(NOL) From SUBSOHB Endif #--CPO 79343 If GMODIF=1 and GREP<>"C" and GSOHSUPPLIGDSP <> 999999 Local Integer WTEMPDSP : Raz WTEMPDSP Call CTLSUPP_EXISTDSP("SOH",NOL,WTEMPDSP) From TRTVENDIV If WTEMPDSP=1 If [M:SOH4]CREFLG(NOL)<>0 GSOHSUPPLIGDSP = 999999 :#--CPO La suppression d'une ligne non pickée est définitive si on enregistre... Endif Endif Endif #--/CPO Call AVANT_LIGNE(NOL) From SUBSOHB # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management #--In order the keep the association nolign-1 and GSOHVCRINVCND_UPD(nolign-1) #--We are going to do an Insa/Dela instruction on GSOHVCRINVCND_UPD(..) If GMODIF=1 Gosub AVANT_NBLIG_DINVCND_DEL From LIBSAL_INVCND_SOH Elsif GMODIF=2 #CPO 18/01/2016 Gosub AVANT_NBLIG_DINVCND_INS From LIBSAL_INVCND_SOH Endif # End issue 107888 End ############################################################################# # APRES_NBLIG : Web # # # # Décomposée en 2 actions # # # # 1 - Traitement si fin sans validation # # - Traitement de validation # # - Suppression d'un gratuit lié à une ligne # # - Suppression d'une nomenclature # # - Modification d'une nomenclature si suppression du composé seul # # - Modification d'une nomenclature si modification du composé # # 2 - Création d'un gratuit # # # ############################################################################# $P1_NBLIG #--nombre d'instructions trop important Gosub P1_NBLIG From SUBSOH1 # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management Return ############################################################################# $P2_NBLIG #--nombre d'instructions trop important Gosub P2_NBLIG From SUBSOH1 # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management #Local Integer ORI : ORI=nolign-1 #Local Integer NL : NL=nolign #Local Integer FUNCTION : FUNCTION=2 #Local Integer RET # ##---------------------------------------------------------------------------# ## Création d'une ligne # ## --> Génération des gratuits # ##---------------------------------------------------------------------------# #If GMODIF = 2 & GFOCITMREF <> "" # If !GIMPORT | (GIMPORT & ((dim(G_FOCFLG)>0 & G_FOCFLG=0) | (dim(G_FOCFLG)<=0))) # # Recherche de l'article origine si on est positionné sur un composant # If !find([M]LINTYP(ORI),1,2,6,10) # While !find([M]LINTYP(ORI),1,2,6,10) & ORI >= 0 # ORI-=1 # Wend # Endif # # Mode web service : Pb avec les insertions de ligne # # --> Le gratuit sera généré juste avt la création de la cde dans l'action VERIF # # Stockage de la référence du gratuit ds un tableau de globales # # Utilisation du chps [M:SOH4]FOCNUMLIG pour stocker, pour l'article à l'origine du gratuit, # # l'indice du gratuit ds le tableau de globales # # (Utiliser SOPLIN pour faire le lien n'est pas possible car à l'insertion des gratuits, tt est renuméroté) # If dim(GWEBSERV)=1 & GWEBSERV=1 # GWEBNBGRA+=1 # GWEBFOCITMREF(GWEBNBGRA-1)=GFOCITMREF : GWEBFOCQTY(GWEBNBGRA-1) =GFOCQTY # GWEBFOCUOM(GWEBNBGRA-1) =GFOCUOM : GWEBFOCMOTIF(GWEBNBGRA-1)=GFOCMOTIF # # [M:SOH4]FOCNUMLIG(ORI)=GWEBNBGRA # Else # If !GIMPORT & ORI = [M]NBLIG [M]NBLIG +=1 : Endif # Call CREGRA("G",1, ORI, [M:SOH0]ORDDAT, FUNCTION, NL, RET) From TRTVENBOM # If !GIMPORT & ORI = NL-1 & ORI = [M]NBLIG - 1 :[M]NBLIG-=1:Endif # If GIMPORT VALEUR=[M]NBLIG Endif # # GPOINT="CPLCREGRA" : Gosub ENTREE From EXEFNC # ## Test utilisation CPLCREGRA ##Local Integer NOCPS : NOCPS=NL-1 ##Raz GBIDI1, GBIDC1 # ##If [F:ITS]ITMREF <> [M:SOH4]ITMREF(NL-1) ## Read [ITM]ITM0=[M:SOH4]ITMREF(NL-1) ## If fstat Raz [F:ITS] : Endif ##Endif ##If [F:ITS]ITMTYP = 2 [M]LINTYP(NL-1) = 6 :ENDIF ##If [F:ITS]ITMTYP = 3 [M]LINTYP(NL-1) = 2 :ENDIF ##Call IMPCRENOM([M:SOH4]ITMREF(NL-1),NL-1,[M:SOH0]ORDDAT,2,GBIDI1,[M:SOH4]SOPLIN(NL),GBIDC1,NOCPS,GBIDI1) From TRTVENBOM ## Test utilisation CPLCREGRA # # Affzo [M:SOH4]5 # If GIMPORT Return Endif : # Bug 72428 # Endif # Endif #Endif # ## 101874 : V9 : Taxe code control ## Valuation depends on SOHVALLIG parameter ##If dim(GVALTTCSOH)>0 & dim(GVALTTC)>0 : GVALTTC=GVALTTCSOH : Endif #GVALTTC=GSOHVALLIG ##If (!GIMPORT & !(dim(GWEBSERV)=1 & GWEBSERV=1)) : Call VALTTC ("GESSOH") From TRTVENFACR : Endif #If (!GIMPORT & !(dim(GWEBSERV)=1 & GWEBSERV=1)) # #---- Paramètres complementaires appel valorisation # # PARAM_T(0) : Flag contrôle des taxes (1=Non/2=Oui) # # PARAM_T(1) : Lecture de la trace par le sous-pro (1=Non/2=Oui) # # PARAM_T(2) : Flag retour (1=KO/2=OK) # Local Char PARAM_T (25) (0..10) # PARAM_T(0)="1" : # Pas de contrôle des taxes # PARAM_T(1)="1" : # Pas de lecture de la trace # PARAM_T(2)="0" # Call VALTTC ("GESSOH", PARAM_T) From TRTVENFACR #Endif ## 101874 # ## Pb en import en suppression de ligne : affzo remet la variable status qui valait 65 à 1 #If !GIMPORT Affzo [M:SOH4]10,15,20 Endif Return ######################################## Subprog B2_NBLIG # -------- Bouton recalcul tarif ----------------- Local Integer NOL, TYPRECH # --> Pas d'éxécution du bouton If nolign > [M]NBLIG End : Endif NOL=nolign-1 # --> Ctrl autorisation modification If !find (GREP, "C", "D") GBIDC2="M": GFCY=[M]SALFCY : Gosub AUTORIS_OPT From CONTX3 If !GBIDI2 GZNUM=0:GERR = 1:GMESSAGE = mess(2,104,1): End : Endif Endif Call LECT_FIC(NOL) From SUBSOHB Call SUB_TOT(NOL) From SUBSOHB If find([M]LINTYP(NOL),1,2,6,10) TYPRECH = 1 Else Local Integer ORI : ORI=NOL While !find([M]LINTYP(ORI),2,6,10) & ORI >= 0 ORI-=1 Wend If find([M]LINTYP(ORI),2,6,10) GPNTITMREF=[M]ITMREF(ORI) Endif TYPRECH=4 Endif Call ALICLCAMT([M:SOH4]ITMREF(NOL), [M]QTY(NOL), NOL, "SOH4", [M:SOH4]CLCAMT1(NOL), [M:SOH4]CLCAMT2(NOL)) From TRTX3 Call RECH_TARIF(TYPRECH,[M]ITMREF(NOL),NOL,[M]QTY(NOL),"SOH",[M]GROPRI(NOL)) From TRTVENTAR Call CLCNETPRI([M]QTY(NOL), [M:SOH0]CUR, NOL) From TRTVENPRI Call CLCPFM([M]DSTOFCY(NOL), [M:SOH1]PRITYP, [M]CHGTYP, [M:SOH0]ORDDAT, [M:SOH0]CUR, NOL, 1) From TRTVENPRI Call APRES_LIGNE (NOL,1) From SUBSOHB If GREV=2 [M]LINREVNUM(NOL) = [M:SOH0]REVNUM:Endif [M]UPDFLG(NOL) = 1 [M]WUPDAPPFLG(NOL) = 2 # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management If [M:SOH4]DINVCND(NOL)<>"" and [M:SOH4]DINVCNDTOUPD(NOL)=[V]CST_AYES Gosub P1_NBLIG_DINVCND_UPD From LIBSAL_INVCND_SOH If mkstat=2 : GERR=1 : End : Endif Endif # End issue 107888 Affzo [M:SOH4]5,10,15 mkstat=4 nolign=NOL+1 End # 107890 : Scheduled invoices : (LD:18/12/15) ######################################## Subprog B4_NBLIG Call B4_NBLIG From SUBSOH1 End # 107890 : Scheduled invoices : (LD:18/12/15) # -------------------------------------- ITMREF ------------------------ ######################################## Subprog IB_ITMREF Local Integer NOL : NOL=nolign-1 # Bouton 1 : Tunnel article # Bouton 2 : Sélection article-client # Bouton 3 : Visu tarif # Bouton 4 : Stock par site # Bouton 5 : Stock dispo # Bouton 6 : Article de remplacement # Désactivation bouton interro stock et disponible à la vente If [M]STOMGTCOD(NOL) = 1 Raz GBOUT4, GBOUT5 Endif # Désactivation bouton article remplacement If [M]ITMREF(NOL) = "" Raz GBOUT6 Else If [F:ITM]ITMREF <> [M:SOH4]ITMREF(NOL) Read [F:ITM]ITM0 = [M:SOH4]ITMREF(NOL) If fstat Raz [F:ITM] : Endif Endif # --> Si ligne non normale, ou si allocation, ou si contremarque If [F:ITM]RPLITM = "" | [M]LINTYP(NOL) <> 1 | sum([M]TALLQTY(NOL),[M]SHTQTY(NOL),[M]LPRQTY(NOL)) <> 0 | & [M]FMINUM(NOL) <> "" Raz GBOUT6 Endif Endif End ###################################################################################### ## Etiquette ajoutée par le superviseur (écran SOH4) 09/11/2004 17:18:20 (LD) ###################################################################################### Subprog AV_ITMREF(VALEUR) Variable Char VALEUR() If VALEUR="" | nolign>[M]NBLIG End Endif Gosub COLOR_KIT End ######################################## Subprog AS_ITMREF(VALEUR) : # --- Web - Obligatoire - Synchrone Variable Char VALEUR() If GMODIF <> 2 mkstat=2 Endif End ######################################## Subprog C_ITMREF(VALEUR) Variable Char VALEUR() Local Integer NOL : NOL = nolign-1 Local Integer RET, OK, I Local Char REP # ------------------------------------------------------------------------------------ # # Penser à mettre en phase Gestion articles de remplacement (TRT_RPLITM de SUBSOHB) # # Inter-societe (C_ITMREF de TRTVENISOC) # # ------------------------------------------------------------------------------------ # # --> Etape n°1 : Remplacement par article de substitution Call CTLSBSITM(VALEUR, [M:SOH0]ORDDAT, RET) From TRTVENCTL If RET = 1 GMESSAGE = mess(40,192,1) : mkstat=2 : End Elsif RET = 2 VALEUR = [F:ITS]ITMREF GMESSAGE = mess(10,191,1) - VALEUR : GERR=2 Endif # --> Etape n°2 : Lecture article If [F:ITM]ITMREF <> VALEUR Read [ITM]ITM0=VALEUR If fstat GMESSAGE = mess(8,192,1) : mkstat=2 : End : Endif Endif # --> Etape n°3 : Ctrl du statut de l'article : Ctrl statut non utilisable # Les autres statuts dépendent du code FMI, il sont ctrlés en AM_ITMREF #If [F:ITM]ITMSTA = 6 # If GERR = 2 GMESSAGE += " \ " Endif # GMESSAGE += mess(3,196,1)+" ("+mess([F:ITM]ITMSTA,246,1)+")" # mkstat=2 : End #Endif # Issue X3-237901 - 2021-04-14 by ADSHO : Enhance messages for Product status with status Prototype If func AFNC.ACTIV("NPI") > 0 If [F:ITM]ITMSTA = 6 or ([F:ITM]ITMSTA = 2 and [F:ITM]NPIPRO = 2) If GERR = 2 GMESSAGE += " \ " Endif If [F:ITM]ITMSTA = 2 and [F:ITM]NPIPRO = 2 GMESSAGE += mess(3,196,1) + " (" + mess([F:ITM]ITMSTA,246,1) + " - " + mess(1226,196,1) + ")" Else GMESSAGE += mess(3,196,1)+" ("+mess([F:ITM]ITMSTA,246,1)+")" Endif mkstat=2 End Endif Else If [F:ITM]ITMSTA = 6 If GERR = 2 GMESSAGE += " \ " Endif GMESSAGE += mess(3,196,1)+" ("+mess([F:ITM]ITMSTA,246,1)+")" mkstat=2 End Endif Endif # End issue X3-237901 # On vérifie que la date de commande est bien >= la date de début de vie de l'article If [F:ITM]LIFSTRDAT<>[0/0/0] & [M:SOH0]ORDDAT<[F:ITM]LIFSTRDAT mkstat=2 : GMESSAGE=mess(331,199,1)-":"-format$(GFMDAT,[F:ITM]LIFSTRDAT) : End Endif # On vérifie que l'article est toujours vendu If clalev([F:ITG])= 0 Local File ITMCATEG [ITG] : Endif If [F:ITG]TCLCOD <> [F:ITM]TCLCOD Read [ITG]ITG1=[F:ITM]TCLCOD;"" If fstat GMESSAGE = [F:ITM]TCLCOD-":"-mess(338,199,1) : mkstat=2 : End : Endif Endif If [F:ITG]SALFLG<>2 GMESSAGE = mess(221,199,1)-"("-[F:ITM]TCLCOD-")" : mkstat=2 : End : Endif # 107890 : Scheduled invoices : (LD:08/12/15) If [M:SOH0]SOHCAT=2 # Undeliverable item are not authorized for loan order If [F:ITM]DLVFLG<>2 GMESSAGE=mess(647,199,1) : mkstat=2 : End Endif # 107890 : Scheduled invoices Step 1 : (LD:09/12/15) Elsif [M:SOH0]SOHCAT=1 # Undeliverable Kit are not authorized for normal order # Issue 107888 - 2016-09-09 by CPO : US155 Kit & flexible kit scheduled invoices #If [F:ITM]DLVFLG<>2 & find([F:ITS]ITMTYP, 2,3) # GMESSAGE=mess(647,199,1) : mkstat=2 : End #Endif If [F:ITM]DLVFLG<>2 If [F:ITS]ITMTYP = 3 # Undeliverable kit are not allowed GMESSAGE=mess(647,199,1) : mkstat=2 : End Elsif [F:ITS]ITMTYP = 2 # Flexible kits are allowed #TODO Endif Endif Endif # 107890 : Scheduled invoices : (LD:08/12/15) # 107890 : Scheduled invoices : (LC:09/01/17) (US X3 16900) If [M:SOH1]BETFCY = 2 & [M:SOH1]BETCPY <> 2 If [F:ITM]DLVFLG <> 2 : GMESSAGE=mess(545,192,1) : mkstat = 2 : End : Endif # non livrable Endif # --> Etape n°4 : Recherche interdit If dim([M]REP1(NOL)) > 0 REP = [M]REP1(NOL):Endif Call RECH_INTERDIT (VALEUR, [M]DBPAADD(NOL), REP, 2) From TRTVENTAR If mkstat = 2 End : Endif # --> Etape n°5 : Controle article-site #Call CONTITF(VALEUR,[M:SOH4]DSTOFCY(NOL),[F:ITM]STOMGTCOD, "O") From TRTVENCTL #If mkstat = 2 : End : Endif # --> Etape n°5 : Si cde de prêt, l'article doit etre géré en pret If [M:SOH0]SOHCAT = 2 & [F:ITS]LNDFLG = 1 GMESSAGE=mess(34,192,1) : mkstat=2 : End Endif # --> Etape n°5 : Si cde de prêt et article géré en stock, il doit être géré en emplacement If [M:SOH0]SOHCAT = 2 & [F:ITM]STOMGTCOD <> 1 If [F:ITF]ITMREF <> VALEUR | [F:ITF]STOFCY <> [M:SOH4]DSTOFCY(NOL) Read [ITF] ITF0=[F:ITM]ITMREF;[M:SOH4]DSTOFCY(NOL) If fstat Raz [F:ITF] : Endif Endif If [F:ITF]STOMGTCOD>1 & [F:ITF]LOCMGTCOD <> 2 GMESSAGE = mess(119,192,1) : mkstat = 2 : End Endif Endif # --> Etape n°6 : Si cde inter-site : Ctrl existence article-site sur le site de réception # (Pour la maj stock en transit à la sortie des stocks) #If [M:SOH1]BETFCY=2 & [M:SDH1]PRHFCY<>"" # Call CONTITF(VALEUR, [M:SDH1]PRHFCY, [F:ITM]STOMGTCOD) From TRTVENCTL # If mkstat=2 GMESSAGE = mess(54,198,1)-mess(350,198,1)-":"-mess(293,192,1)-[M:SDH1]PRHFCY : End Endif #Endif # X3-85706 (LCC 13-04-18) Error message when we try to validate a delivery - ITMFACILIT [IFF1] Key..no current records If !clalev([BPD]): Local File BPDLVCUST: Endif Read [F:BPD]BPD0 = [M:SOH0]BPCORD;[M:SOH4]DBPAADD(NOL) : If fstat Raz [BPD] Endif If [M:SOH1]BETFCY=2 & [F:BPD]RCPFCY<>"" & [M:SOH0]SOHCAT<>3 If [F:ITM]RCPFLG=2 Call CONTITF(VALEUR, [F:BPD]RCPFCY, [F:ITM]STOMGTCOD) From TRTVENCTL If mkstat=2 GMESSAGE = mess(74,187,1)-":"-mess(293,192,1)-[F:BPD]RCPFCY : End Endif Endif Endif # End X3-85706 (LCC 13-04-18) Error message when we try to validate a delivery - ITMFACILIT [IFF1] Key..no current records # --> Etape n°6 : Si cde à facturation directe inter-site, l'article ne doit pas être réceptionné # Issue 113089/130 - 2016-10-14 by SR : Message 269,194 remplacé par 578,194 If [M:SOH0]SOHCAT=3 & [M:SOH1]BETFCY=2 If [F:ITM]RCPFLG=2 GMESSAGE=mess(98,197,1)-mess(3,446,1)-mess(578,194,1) : mkstat=2 : End : Endif Endif # Bug 82658 : Recherche tarif si changement de référence article # Erreur suite à la recherche tarif effectuée en AM_ If dim(GERRITMREF)>0 & GERRITMREF=2 # Si on resaisit l'article initial # --> Il faut redéclencher l'AM_ pour recharger les champs avec l'article initial If VALEUR=[M]ITMREF(NOL) Call AM_ITMREF(VALEUR) Endif Endif # Bug 82658 # FGR 10/04/2015 : X3SUIVI105605 (début) If VALEUR <> [M:SOH4]ITMREF(NOL) Then If dim([M:SOH4]ECCVALMAJ) > 0 Then Raz [M:SOH4]ECCVALMAJ(NOL) Raz [M:SOH4]ECCVALMIN(NOL) Endif Endif # FGR 10/04/2015 : X3SUIVI105605 (fin) End ######################################## Subprog AM_ITMREF(VALEUR) : # --- Web - Obligatoire - Synchrone Variable Char VALEUR() Local Integer NOL : NOL = nolign-1 # --------------------------------------------------------------------------------- # # Penser à mettre en phase gestion articles de remplacement (TRT_RPLITM de SUBSOHB) # # --------------------------------------------------------------------------------- # # Si utilisation du bouton article de remplacement # Bug 82658 : Redéclenchement volontaire de l'AM_ # suite à la recherche tarif avec erreur et resaisit de l'article initial #If VALEUR = [M]ITMREF(NOL) & !GIMPORT End Endif If VALEUR = [M]ITMREF(NOL) & !GIMPORT & (dim(GERRITMREF)<0 | GERRITMREF<>2 ) End Endif If dim(GERRITMREF)>0 Kill GERRITMREF Endif # Bug 82658 # --> Etape n°6 : Init des zones #--------------------------------------------------------------------------# # Si retour par Shift-Tab ou click souris sur ligne en cours de création : # # Effacement de la quantité commandée pour forcer la recherche tarif # # Effacement des sections analytiques pour réactiver l'INISEC # #--------------------------------------------------------------------------# #MAE, le 14/04/08, pas de Raz de la quantité si on vient des articles commandés If GPILNAV > 1 If find (GNAVIG(GPILNAV -1),"VISUITM") Raz [M]QTY(NOL) Endif Endif # A cause de l'INISEC "SOP" qui peut être paramétré avec [F:POP] If GMODU(6)=2 & GOPTCANA>0 & dim([F:POP]POHNUM)>0 : Raz [F:POP] : Endif #If dim([M]CCE1(NOL))>0 Raz [M]CCE1(NOL) : Endif #If dim([M]CCE2(NOL))>0 Raz [M]CCE2(NOL) : Endif #If dim([M]CCE3(NOL))>0 Raz [M]CCE3(NOL) : Endif #If dim([M]CCE4(NOL))>0 Raz [M]CCE4(NOL) : Endif #If dim([M]CCE5(NOL))>0 Raz [M]CCE5(NOL) : Endif #If dim([M]CCE6(NOL))>0 Raz [M]CCE6(NOL) : Endif #If dim([M]CCE7(NOL))>0 Raz [M]CCE7(NOL) : Endif #If dim([M]CCE8(NOL))>0 Raz [M]CCE8(NOL) : Endif #If dim([M]CCE9(NOL))>0 Raz [M]CCE9(NOL) : Endif [M]GRPFLG(NOL) = 1 [M]LINTYP(NOL) = 1 [M]FOCFLG(NOL) = 1 If [F:ITS]ITMTYP = 2 [M]LINTYP(NOL) = 6 :Endif If [F:ITS]ITMTYP = 3 [M]LINTYP(NOL) = 2 :Endif Call INIT_ITM (NOL, VALEUR) From SUBSOHB # -------------------------------------------- # # --> Etape n°7 : Gestion du FMI # # -------------------------------------------- # Local Integer WFMI, WOK : WOK=2 Call ALIFMI(VALEUR, [M:SOH4]DSTOFCY(NOL), WFMI) From TRTVENCDE Case WFMI When 1 : # Stock # Issue X3-237901 - 2021-04-14 by ADSHO : Enhance messages for Product status with status Prototype # If [F:ITM]ITMSTA>1 # Call AVERTIR (VALEUR-":"-mess(3,196,1)+" ("+mess([F:ITM]ITMSTA,246,1)+")", WOK) From GESECRAN # If WOK=1 mkstat=2 : End Endif # Endif If func AFNC.ACTIV("NPI") > 0 If [F:ITM]ITMSTA > 1 and [F:ITM]NPIPRO <> 2 Call AVERTIR (VALEUR-":"-mess(3,196,1)+" ("+mess([F:ITM]ITMSTA,246,1)+")", WOK) From GESECRAN If WOK=1 mkstat=2 End Endif Endif Else If [F:ITM]ITMSTA>1 Call AVERTIR (VALEUR-":"-mess(3,196,1)+" ("+mess([F:ITM]ITMSTA,246,1)+")", WOK) From GESECRAN If WOK=1 mkstat=2 End Endif Endif Endif # End issue X3-237901 When 3 : # Contremarque achat If [F:ITM]ITMSTA=3 Call AVERTIR (VALEUR-":"-mess(281,197,1)-":\"-mess(3,196,1)+" ("+mess([F:ITM]ITMSTA,246,1)+")", WOK) From GESECRAN If WOK=1 mkstat=2 : End Endif Elsif [F:ITM]ITMSTA>1 GMESSAGE=VALEUR-":"-mess(281,197,1)-":\"-mess(3,196,1)+" ("+mess([F:ITM]ITMSTA,246,1)+")" : mkstat=2 : End Endif When 5 : # Contremarque production Call CONTMFGITM([M]DSTOFCY(NOL), 1) From MFGLIB : If mkstat=2 End Endif Endcase [M:SOH4]FMI(NOL)=WFMI # Bug 82658 : Recherche tarif si changement de référence article # Si ce n'est pas un gratuit et qté non nulle If [M]QTY(NOL)<>0 & [M]FOCFLG(NOL) <> 3 # --> Calcul des montants de base calcul de taxe Call ALICLCAMT(VALEUR, [M:SOH4]QTY(NOL), NOL, "SOH4", [M:SOH4]CLCAMT1(NOL), [M:SOH4]CLCAMT2(NOL)) From TRTX3 # --------------- Recherche tarif ----------------- Local Integer TYP Local Char WSVG_ITMREF(GLONITM) # Article normal ou composé TYP=1 # Composant If find([M:SOH4]LINTYP(NOL),3,4,5,7,8,9,11,12,13) Local Integer ORI : ORI=NOL While !find([M]LINTYP(ORI),2,6,10) & ORI >= 0 ORI-=1 Wend If find([M]LINTYP(ORI),2,6,10) GPNTITMREF=[M]ITMREF(ORI) Endif TYP=4 Endif # --> Recherche tarif Call RECH_TARIF(TYP,VALEUR,NOL,[M]QTY(NOL),"SOH",[M]GROPRI(NOL)) From TRTVENTAR # --> Calcul du prix net Call CLCNETPRI([M]QTY(NOL), [M:SOH0]CUR, NOL) From TRTVENPRI # Le ctrl du prix net et le calcul de marge utilise la classe [M] WSVG_ITMREF=[M]ITMREF(NOL) : [M]ITMREF(NOL)=VALEUR # Issue X3-200515/X3-208171 - 2020-09-08 by SR : Progress billing #If GDACLOK = 1 If GDACLOK = 1 | (dim([M:SOH4]PRGBILNUM) > 1 & [M:SOH4]PRGBILNUM(NOL) <> "") Call CTLNETPRI([M:SOH0]BPCORD,[M:SOH0]CHGTYP,[M:SOH0]ORDDAT,[M:SOH0]CUR,NOL) From TRTVENPRI If mkstat=2 [M]ITMREF(NOL)=WSVG_ITMREF # Déclaration d'une globale signalant l'erreur sur le champ, globale testée en C_ If dim(GERRITMREF)<0 Global Integer GERRITMREF : GERRITMREF=2 Endif End Endif Endif # --> Calcul de la marge Call CLCPFM([M]DSTOFCY(NOL), [M:SOH1]PRITYP, [M]CHGTYP, [M:SOH0]ORDDAT, [M:SOH0]CUR, NOL, 2) From TRTVENPRI If GDACLOK = 1 Call CTLPFM([M:SOH0]CUR,[M:SOH4]CPRPRI(NOL), NOL) From TRTVENPRI If mkstat=2 [M]ITMREF(NOL)=WSVG_ITMREF # Déclaration d'une globale signalant l'erreur sur le champ, globale testée en C_ If dim(GERRITMREF)<0 Global Integer GERRITMREF : GERRITMREF=2 Endif End Endif Endif Gosub AFF_RECH_TAR Affzo [M:SOH4]CPRPRI(NOL) Affzo [M:SOH4]PFM(NOL) Endif # Bug 82658 If !(dim(GWEBSERV)=1 & GWEBSERV=1) Affzo [M:SOH4]DSTOFCY(NOL) Affzo [M:SOH4]ITMDES(NOL),ITMDES1(NOL), SAU(NOL), SAUSTUCOE(NOL), STU(NOL), LINTYP(NOL),FOCFLG(NOL) Affzo [M:SOH4]VACITM1(NOL),VACITM2(NOL),VACITM3(NOL) Affzo [M:SOH4]PCK(NOL),PCKCAP(NOL),DEMSTA(NOL) Affzo [M:SOH4]PRECOD(NOL) If find([M]FMI(NOL),3,5) [M]DALLTYP(NOL)=2 Endif Affzo [M:SOH4]FMI(NOL) Endif If [M:SOH4]DACSAUCOE(NOL) < 2 Diszo [M:SOH4]SAUSTUCOE(NOL) Else Actzo [M:SOH4]SAUSTUCOE(NOL) Endif # Si import des composants : le type de ligne doit etre garni dans [M] # notamment pour la recherche des tarifs composants If GIMPORT & (dim(G_LINTYP)>0 & G_LINTYP=1) If find([F:SOP]LINTYP,3,4,5,7,8,9,11,12,13) : [M]LINTYP(NOL)=[F:SOP]LINTYP : Endif Endif ## Si import des gratuits : le flag gratuit doit etre garni dans [M] If GIMPORT & (dim(G_FOCFLG)>0 & G_FOCFLG=1) # Garnissage du flag gratuit dans [M] If find([F:SOP]FOCFLG, 1,2,3) [M]FOCFLG(NOL)=[F:SOP]FOCFLG Else [M]FOCFLG(NOL)=1 Endif # Sur la ligne du gratuit il faut rechercher l'article origine If [M]FOCFLG(NOL)=3 and NOL>0 # Issue 112809 - 2016-01-25 by CPO : added "and NOL>0" Imported free item on first order line Local Integer WNOLCPE : WNOLCPE=NOL-1 If WNOLCPE>=0 & !find([M]LINTYP(WNOLCPE),1,2,6,10) While !find([M]LINTYP(WNOLCPE),1,2,6,10) & WNOLCPE >= 0 WNOLCPE-=1 Wend Endif If WNOLCPE>=0 # Issue 112809 - 2016-01-25 by CPO : "ceinture-bretelles" (si 2 et plus premières lignes de gratuits...) [M]ORILIN(NOL)=[M]SOPLIN(WNOLCPE) Endif Endif Endif # V6 Règle affectation If dim([M:SOH4]PTOCOD)>0 [M:SOH4]PTOCOD(NOL) = func ITMLIB.GET_PTOCOD(VALEUR,[M:SOH4]DSTOFCY(NOL)) Endif End # -------------------------------------- ITMDES ------------------------ ######################################## Subprog IB_ITMDES Global Char GITMREF # Alimentation GITMREF pour appel GOBJETC GITMREF=[M]ITMREF(nolign-1) Call IB_NOTECHECK([M:SOH4]ITMREF(nolign-1),"ITMREF",2) From TRTNTSCTL # product notes EWI 86290 Call IB_PRDINF([M:SOH4]ITMREF(nolign-1),3) From PRDINFLIB # DF 79831 EWI 86290 End # -------------------------------------- ITMDES1 ----------------------- ######################################## Subprog IB_ITMDES1 Global Char GITMREF # Alimentation GITMREF pour appel GOBJETC GITMREF=[M]ITMREF(nolign-1) End # -------------------------------------- DSTOFCY ------------------------ ######################################## Subprog IB_DSTOFCY # Activation du bouton article-site If [M:SOH4]STOMGTCOD(nolign-1) = 1 Raz GBOUT1, GBOUT3 Else GBOUT1=mess(4,198,1) Endif End ######################################## Subprog AS_DSTOFCY(VALEUR) : # --- Web - Obligatoire - Synchrone Variable Char VALEUR() Local Integer NOL : NOL = nolign-1 # --> Zone non modifiable si il y a des allocations #If sum([M]ALLQTY(NOL),[M]SHTQTY(NOL),[M]ODLQTY(NOL),[M]DLVQTY(NOL),[M]INVQTY(NOL)) <> 0 If ([M]TALLQTY(NOL)+[M]SHTQTY(NOL)+[M]LPRQTY(NOL))<>0 mkstat = 2 : End : Endif # --> Zone non modifiable si la contremarque a été générée If [M]FMINUM(NOL) <> "" mkstat = 2 : End : Endif # --> Zone non modifiable si livraison commande complète If [M:SOH2]DME = 3 mkstat = 2 : End : Endif End ######################################## Subprog AM_DSTOFCY(VALEUR) : # --- Web - Faible - Asynchrone Variable Char VALEUR() Local Integer NOL : NOL=nolign-1 Local Integer WFMI, WOK, WI : WOK=1 Local Integer WSTOMGTCOD Local Char WTSCCOD(GLONADI) (0..5) Local Char WTSICOD(GLONADI) (0..5) WSTOMGTCOD=[M:SOH4]STOMGTCOD(NOL) # Si modification du site, il faut recharger STOMGTCOD If [F:ITM]ITMREF <> [M:SOH4]ITMREF(NOL) Read [ITM]ITM0=[M:SOH4]ITMREF(NOL) If fstat Raz [F:ITM] Endif Endif [M:SOH4]STOMGTCOD(NOL) = [F:ITM]STOMGTCOD If [F:ITM]STOMGTCOD>1 Call CONTITF([M:SOH4]ITMREF(NOL),VALEUR,[F:ITM]STOMGTCOD) From TRTVENCTL If mkstat=2 GERR=1 : End : Endif [M:SOH4]STOMGTCOD(NOL) = [F:ITF]STOMGTCOD Endif [M:SOH4]YSTOMGTCOD(NOL) = [M:SOH4]STOMGTCOD(NOL) : # Bug 55476 # L'article devient non géré en stock, il faudra supprimer l'encours If WSTOMGTCOD<>[M:SOH4]STOMGTCOD(NOL) & [M:SOH4]STOMGTCOD(NOL)=1 [M]WIPFLG(NOL) = "A" Elsif [M]WIPFLG(NOL) = "" [M]WIPFLG(NOL) = "M" Endif Call ALIFMI([M]ITMREF(NOL), VALEUR, WFMI) From TRTVENCDE If WFMI <> [M]FMI(NOL) Case WFMI When 1 : # Stock If [F:ITM]ITMSTA>1 Call AVERTIR (mess(3,196,1)+" ("+mess([F:ITM]ITMSTA,246,1)+")", WOK) From GESECRAN If WOK=1 mkstat=2 : End Endif Endif When 3 : # Contremarque achat If [F:ITM]ITMSTA=3 Call AVERTIR (mess(281,197,1)-":\"-mess(3,196,1)+" ("+mess([F:ITM]ITMSTA,246,1)+")", WOK) From GESECRAN If WOK=1 mkstat=2 : End Endif Elsif [F:ITM]ITMSTA>1 GMESSAGE=mess(281,197,1)-":\"-mess(3,196,1)+" ("+mess([F:ITM]ITMSTA,246,1)+")" : mkstat=2 : End Endif When 5 : # Contremarque production Call CONTMFGITM([M]DSTOFCY(NOL), 1) From MFGLIB : If mkstat=2 End Endif Endcase [M:SOH4]FMI(NOL)=WFMI If find([M:SOH4]FMI(NOL),3,5) [M:SOH4]DALLTYP(NOL)=2 Endif Endif # Si modification du site, réinitialisation du code prépa If dim([M:SOH0]TSCCOD) <> -1 For WI = 1 To dim([M:SOH0]TSCCOD) WTSCCOD(WI-1) = [M:SOH0]TSCCOD(WI-1) #--CPO 90371 Lors de la correction de cette fiche - ici on fait For WI et Next I #Next I Next WI #--/ Endif If dim([M:SOH4]TSICOD1)>0: WTSICOD(0) = [M:SOH4]TSICOD1(NOL): Endif If dim([M:SOH4]TSICOD2)>0: WTSICOD(1) = [M:SOH4]TSICOD2(NOL): Endif If dim([M:SOH4]TSICOD3)>0: WTSICOD(2) = [M:SOH4]TSICOD3(NOL): Endif If dim([M:SOH4]TSICOD4)>0: WTSICOD(3) = [M:SOH4]TSICOD4(NOL): Endif If dim([M:SOH4]TSICOD5)>0: WTSICOD(4) = [M:SOH4]TSICOD5(NOL): Endif If [F:BPC]BPCNUM<>[M:SOH0]BPCORD Read [BPC]BPC0=[M:SOH0]BPCORD : If fstat Raz [F:BPC] Endif Endif Call REC_PRECOD(VALEUR,[M:SOH4]ITMREF(NOL),[F:ITM]TCLCOD,WTSICOD(0), & WTSICOD(1),WTSICOD(2),WTSICOD(3),WTSICOD(4),[M:SOH0]BPCORD, & [F:BPC]BCGCOD,WTSCCOD(0),WTSCCOD(1),WTSCCOD(2),WTSCCOD(3), & WTSCCOD(4),[M:SOH4]PRECOD(NOL)) From STKLIB Affzo [M:SOH4]PRECOD(NOL) # V6 Règle affectation If dim([M:SOH4]PTOCOD)>0 [M:SOH4]PTOCOD(NOL) = func ITMLIB.GET_PTOCOD([M:SOH4]ITMREF(NOL), VALEUR) Endif # Issue X3-66385 If [M]UPDFLG(NOL)<>0 | [M]CREFLG(NOL)<>0 End Endif # Réinitialisation de l'emballage uniquement en saisie de la ligne # Package reinitialization only when the line is being fed If [F:ITU]ITMREF <> [M:SOH4]ITMREF(NOL) | [F:ITU]BPCNUM <> [M:SOH0]BPCORD Read [ITU] ITU0=[M:SOH4]ITMREF(NOL);[M:SOH0]BPCORD If fstat Raz [F:ITU] Endif Endif # L'emballage est initialisé en priorité avec l'article client # Il est initialisé avec l'article (article site ou catégorie article) uniquement si l'UV de l'article = l'UV de la ligne # et si l'UV de l'article client = l'UV de la ligne mais il n'y a pas d'emballage pour l'article client # ou si l'UV de l'article client est différente de l'UV de la ligne # Package is initialized in priority with product customer # It is initialized with product (product site or product category) only if UV product= UV line # and if UV product customer = UV line but there is no package for product customer # or if UV product customer <> UV line If [M:SOH4]SAU(NOL) = [F:ITM]SAU & ([F:ITU]PCK = "" | [M:SOH4]SAU(NOL) <> [F:ITU]SAU) Call ALIPCK ([M:SOH4]ITMREF(NOL), VALEUR, [M:SOH4]PCK(NOL), [M:SOH4]PCKCAP(NOL)) From TRTVENDIV Affzo [M:SOH4]PCK(NOL) Affzo [M:SOH4]PCKCAP(NOL) Endif # End issue X3-66385 End # -------------------------------------- SAU ------------------------ ######################################## Subprog AS_SAU(VALEUR) : # --- Web - Obligatoire - Synchrone Variable Char VALEUR() If GMODIF <> 2 | [M]LINTYP(nolign-1) <> 1 mkstat=2 : Endif #LSE 05/12/2006 FQ38520 Local Integer NOL : NOL=nolign-1 If [F:ITM]ITMREF <> [M:SOH4]ITMREF(NOL) Read [ITM]ITM0=[M:SOH4]ITMREF(NOL) If fstat Raz [F:ITM] Endif Endif If [F:ITM]HDKITMTYP=5 mkstat=2 Endif End ######################################## Subprog AM_SAU(VALEUR) : # --- Web - Obligatoire - Synchrone Variable Char VALEUR() Local Integer NOL : NOL=nolign-1 [M:SOH4]QTY(NOL) = 0 [M:SOH4]QTYSTU(NOL) = 0 # Raz de l'emballage et sa capacité, si l'unité de commande n'est plus l'UV article ou article-client If [F:ITU]ITMREF <> [M:SOH4]ITMREF(NOL) | [F:ITU]BPCNUM <> [M:SOH0]BPCORD Read [ITU] ITU0=[M:SOH4]ITMREF(NOL);[M:SOH0]BPCORD If fstat Raz [F:ITU] Endif Endif # Issue X3-66385 #If VALEUR <> [F:ITU]SAU # If [F:ITM]ITMREF <> [M:SOH4]ITMREF(NOL) # Read [ITM]ITM0=[M:SOH4]ITMREF(NOL) # If fstat Raz [F:ITM] Endif # Endif # If VALEUR <> [F:ITM]SAU # Raz [M:SOH4]PCK(NOL), [M:SOH4]PCKCAP(NOL) # Else ## L'unité de commande est l'UV article : On réinitialise l'emballage # ## If [F:ITS]ITMREF <> [M:SOH4]ITMREF(NOL) ## Read [ITS]ITS0=[M:SOH4]ITMREF(NOL) ## If fstat Raz [F:ITS] Endif ## Endif # # Call ALIPCK ([M:SOH4]ITMREF(NOL), [M:SOH4]DSTOFCY(NOL), [M:SOH4]PCK(NOL), [M:SOH4]PCKCAP(NOL)) From TRTVENDIV # Endif #Else ## L'unité de commande est l'UV article-client : On réinitialise l'emballage # [M:SOH4]PCK(NOL) = [F:ITU]PCK # [M:SOH4]PCKCAP(NOL) = [F:ITU]PCKCAP #Endif If [F:ITM]ITMREF <> [M:SOH4]ITMREF(NOL) Read [ITM]ITM0=[M:SOH4]ITMREF(NOL) If fstat Raz [F:ITM] Endif Endif Raz [M:SOH4]PCK(NOL), [M:SOH4]PCKCAP(NOL) # L'emballage est initialisé en priorité avec l'article client # Il est initialisé avec l'article (article site ou catégorie article) uniquement si l'UV de l'article = l'UV de la ligne # et si l'UV de l'article client = l'UV de la ligne mais il n'y a pas d'emballage pour l'article client # ou si l'UV de l'article client est différente de l'UV de la ligne # Package is initialized in priority with product customer # It is initialized with product (product site or product category) onky if UV product= UV line # and if UV product customer = UV line but there is no package for product customer # or if UV product customer <> UV line If VALEUR = [F:ITU]SAU # L'unité de commande est l'UV article-client : On réinitialise l'emballage [M:SOH4]PCK(NOL) = [F:ITU]PCK [M:SOH4]PCKCAP(NOL) = [F:ITU]PCKCAP Endif If [M:SOH4]PCK(NOL) = "" If VALEUR = [F:ITM]SAU Call ALIPCK ([M:SOH4]ITMREF(NOL), [M:SOH4]DSTOFCY(NOL), [M:SOH4]PCK(NOL), [M:SOH4]PCKCAP(NOL)) From TRTVENDIV Endif Endif # End issue X3-66385 Affzo [M:SOH4]SAUSTUCOE(NOL), PCK(NOL), PCKCAP(NOL) If [M:SOH4]DACSAUCOE(NOL) < 2 Diszo [M:SOH4]SAUSTUCOE(NOL) Else Actzo [M:SOH4]SAUSTUCOE(NOL) Endif End # -------------------------------------- SAUSTUCOE ------------------------ ######################################## Subprog AS_SAUSTUCOE(VALEUR) Variable Decimal VALEUR If GMODIF<>2 | [M]LINTYP(nolign-1)<>1 | [M]SAU(nolign-1)=[M]STU(nolign-1) mkstat=2 Endif End ########################################################################## ## Etiquette ajoutée par le superviseur 16/07/2003 08:21:53 (LD) ########################################################################## Subprog AM_SAUSTUCOE(VALEUR) Variable Decimal VALEUR Local Integer NOL : NOL=nolign-1 Local Shortint TYP Local Decimal WANC_SAUSTUCOE, WANC_QTYSTU WANC_QTYSTU=[M]QTYSTU(NOL) Call CNVQTY([M]QTY(NOL),VALEUR,[M]STU(NOL),[M]QTYSTU(NOL)) From TRTVENQTE # Si la modification du coef a modifié la qté cdée, Init de la qté à allouer selon paramètre : # Si Init de la qté à allouer à oui et # Si Pas de gestion des signatures Ou (Allocation et encours article cdes non signées à oui Ou commande signée) #85683 : Init qté à allouer à tord #Fq72189-Gbn-GAPPSOH=1 remplacé par GAPPSOH<>2 #If GINIALLORD=2 & WANC_QTYSTU<>[M]QTYSTU(NOL) & (GAPPSOH<>2 | ((GSOHAPPORD=2 & GSOHAPPALL=2) | [M:SOH1]APPFLG>2)) If GINIALLORD=2 & WANC_QTYSTU<>[M]QTYSTU(NOL) & (GAPPSOH<2 | ((GSOHAPPORD=2 & GSOHAPPALL=2) | [M:SOH1]APPFLG>2)) #85683 Local Decimal WSAUSTUCOE : WSAUSTUCOE=VALEUR Gosub INIT_WALLQTYSTU From SUBSOH1 Endif # La modif. du coef de conversion UV_US entraîne une nvelle recherche tarif (utile si tarif en US) # Pas de recherche tarif pour les gratuits If [M:SOH4]FOCFLG(NOL) = 3 End : Endif # ----- Recherche tarif ------- # Article normal ou composé TYP=1 # Composant If find([M:SOH4]LINTYP(NOL),3,4,5,7,8,9,11,12,13) TYP=4 Endif # --> Recherche tarif WANC_SAUSTUCOE=[M]SAUSTUCOE(NOL) [M]SAUSTUCOE(NOL)=VALEUR Call RECH_TARIF(TYP,[M]ITMREF(NOL),NOL,[M]QTY(NOL),"SOH",[M]GROPRI(NOL)) From TRTVENTAR # --> Calcul du prix net Call CLCNETPRI([M]QTY(NOL), [M:SOH0]CUR, NOL) From TRTVENPRI # Issue X3-200515/X3-208171 - 2020-09-08 by SR : Progress billing #If GDACLOK = 1 If GDACLOK = 1 | (dim([M:SOH4]PRGBILNUM) > 1 & [M:SOH4]PRGBILNUM(NOL) <> "") Call CTLNETPRI([M:SOH0]BPCORD,[M:SOH0]CHGTYP,[M:SOH0]ORDDAT,[M:SOH0]CUR,NOL) From TRTVENPRI If mkstat=2 [M]SAUSTUCOE(NOL)=WANC_SAUSTUCOE : End : Endif Endif # --> Calcul de la marge Call CLCPFM([M]DSTOFCY(NOL), [M]PRITYP, [M]CHGTYP, [M:SOH0]ORDDAT, [M:SOH0]CUR, NOL, 2) From TRTVENPRI If GDACLOK = 1 Call CTLPFM([M:SOH0]CUR,[M:SOH4]CPRPRI(NOL), NOL) From TRTVENPRI If mkstat=2 [M]SAUSTUCOE(NOL)=WANC_SAUSTUCOE : End : Endif Endif Gosub AFF_RECH_TAR Affzo [M:SOH4]CPRPRI(NOL), PFM(NOL) nolign=NOL+1 End ########################################################################## # -------------------------------------- QTY ------------------------ ######################################## Subprog IB_QTY Local Integer NOL : NOL=nolign-1 Local Integer LBOMALT # 241331 Local Char LECCVALMAJ(GLONECS), LECCVALMIN(GLONEVL) # 241331 # Bouton 1 : Article site # Bouton 2 : Stock par site # Bouton 3 : Filtre allocation # Bouton 4 : Visu détail allocation # Bouton 5 : Stock dispo # Bouton 6 : Article de remplacement # Bouton 7 : Stock projeté # User Story X3-46075 Task X3-48218 - 2017-08-17 by CPO : ANALYSIS_FDMA_Display_Quantity_Available_field_on_Sales_Order_line # Button 8 : Trial kitting # 241331 # Désactivation boutons Article-site, Stock par site, Filtre allocation, Stock dispo # --> Si article non géré en stock If [M:SOH4]STOMGTCOD(NOL) = 1 Raz GBOUT1, GBOUT2, GBOUT3, GBOUT5,GBOUT7 : Endif # User Story X3-46075 Task X3-48218 - 2017-08-17 by CPO : added GBOUT7 # ANALYSIS_FDMA_Display_Quantity_Available_field_on_Sales_Order_line # Désactivation bouton détail allocation # --> Si Allocation globale ou aucune allocation #If [M]DALLTYP(NOL) = 1 | ([M]ALLQTY(NOL) = 0 & [M]SHTQTY(NOL) = 0) # --> Si aucune allocation If ([M]ALLQTY(NOL) = 0 & [M]SHTQTY(NOL) = 0) Raz GBOUT4 : Endif # Désactivation bouton article remplacement If [M]ITMREF(NOL) = "" Raz GBOUT6 Else If [F:ITM]ITMREF <> [M:SOH4]ITMREF(NOL) Read [F:ITM]ITM0 = [M:SOH4]ITMREF(NOL) If fstat Raz [F:ITM] : Endif Endif # --> Si ligne non normale, ou si allocation, ou si contremarque If [F:ITM]RPLITM = "" | [M]LINTYP(NOL) <> 1 | sum([M]TALLQTY(NOL),[M]SHTQTY(NOL),[M]LPRQTY(NOL)) <> 0 | & [M]FMINUM(NOL) <> "" Raz GBOUT6 Endif Endif # Issue 241331 - 2021-05-06 by STLIG : disable trial kitting button If dim([M:SOH4]ECCVALMAJ) > 0 LECCVALMAJ = [M:SOH4]ECCVALMAJ(NOL) LECCVALMIN = [M:SOH4]ECCVALMIN(NOL) Endif If !func SUBBMR.DEF_BOM([M:SOH4]ITMREF(NOL), & LECCVALMAJ, & LECCVALMIN, & LBOMALT) Raz GBOUT8 Endif End ######################################## Subprog AS_QTY(VALEUR) : # --- Web - Obligatoire - Synchrone Variable Decimal VALEUR Local Integer NOL : NOL=nolign-1 # Issue X3-126595 ##If !GIMPORT If !GIMPORT & !(dim(GWEBSERV)=1 & GWEBSERV=1) # End issue X3-126595 If ([M]LINTYP(NOL)>2 & [M]LINTYP(NOL)<6) | ([M]LINTYP(NOL)>10 & [M]LINTYP(NOL)<14) mkstat=2 : Endif Endif # Pas de modif qté si commande générée à partir de la commande d'achat If [M:SOH0]ORIFCY<>"" & [M:SOH0]ORIFCY<>[M:SOH0]SALFCY : mkstat=2 Endif # User Story X3-46075 Task X3-48218 - 2017-08-17 by CPO : ANALYSIS_FDMA_Display_Quantity_Available_field_on_Sales_Order_line Gosub DISPLAY_QTY_STOCKSTATUS From SUBSOH1 ## Issue 113880 ## This display (GERR=4) is no more possible with web client #End ## End issue 113880 End # /User Story X3-46075 Task X3-48218 - 2017-08-17 by CPO ######################################## Subprog C_QTY(VALEUR) Variable Decimal VALEUR Local Integer NOL : NOL=nolign-1 Local Decimal WQTY # Issue X3-200515/X3-207051 - 2020-09-16 by SR : Add the min quantity after the error message Local Decimal WQTY_INVCND : Raz WQTY_INVCND # 200515 : Progress billing / X3-216438 : Blocking control on quantity or net price update when all scheduled invoices are linked to progress status - 2020-11-19 by LD # Flag to know if all scheduled invoices are linked to progress status # =1 There is a scheduled invoices lines not linked to a progress status # =2 All scheduled invoices are linked to progress status Local Integer WALLPRGBILLIN : WALLPRGBILLIN=1 # 200515 : Progress billing / X3-216438 : Blocking control on quantity or net price update when all scheduled invoices are linked to progress status - 2020-11-19 by LD # --------------------------------------------------------------- # # Penser à mettre en phase l'inter-societe (C_QTY de TRTVENISOC) # # --------------------------------------------------------------- # #-----------------------------------------------------------# # Ctr par rapport qte mini et qte maxi # # --> En retour GMESSAGE et mkstat à 2 ou GERR=2 # #---------------------------------------------------------- # Gosub CTR_QTY From SUBSOHB If mkstat=2 End : Endif #-----------------------------------------------------------------------------------------# # Si on modifie la qté commandée initiale : # # Elle ne doit pas être inférieure à ce qui est déjà alloué, préparé et livré/facturé # #-----------------------------------------------------------------------------------------# #If [M:SOH0]SOHCAT = 3 # WQTY = [M:SOH4]ALLQTY(NOL)+[M:SOH4]SHTQTY(NOL)+[M:SOH4]INVQTY(NOL)+[M:SOH4]ODLQTY(NOL) #Else # WQTY = [M:SOH4]ALLQTY(NOL)+[M:SOH4]SHTQTY(NOL)+[M:SOH4]DLVQTY(NOL)+[M:SOH4]ODLQTY(NOL) #Endif WQTY = [M:SOH4]TALLQTY(NOL)+[M:SOH4]SHTQTY(NOL)+[M:SOH4]LPRQTY(NOL) If VALEUR < WQTY & VALEUR <> [M:SOH4]YQTY(NOL) # Issue X3-231425 - 2021-02-17 by MUARN : new message add invoiced #mkstat=2: If GERR=2 GMESSAGE+= "\" Endif : GMESSAGE+=mess(312,192,1) : End mkstat=2: If GERR=2 GMESSAGE+= "\" Endif : GMESSAGE+=mess(603,192,1) : End Endif # On prévient si la modification de la qté cdée solde la ligne de commande If [M]SOQSTA(NOL) <> 3 & [M]ALLQTY(NOL) = 0 & [M]WALLQTY(NOL) = 0 # 107888 : Scheduled invoices : (LD:19/05/16) ## -- Commande normale # If ([M:SOH0]SOHCAT <> 3 & ([M]DLVQTY(NOL) + [M]ODLQTY(NOL) >= VALEUR)) | #& ([M:SOH0]SOHCAT = 3 & ([M]INVQTY(NOL) + [M]ODLQTY(NOL) >= VALEUR)) # Commande normale/prêt et ligne livrable désolde sf si Totalement livrée # Commande normale et ligne non livrable désolde sf si Totalement facturée # Commande à facturation directe désolde sf si Totalement facturée If ([M:SOH0]SOHCAT <> 3 & [M]DLVFLG(NOL)=2 & ([M]DLVQTY(NOL) + [M]ODLQTY(NOL)) >= VALEUR) | & ([M:SOH0]SOHCAT <> 3 & [M]DLVFLG(NOL)=1 & ([M]INVQTY(NOL) + [M]ODLQTY(NOL)) >= VALEUR) | & ([M:SOH0]SOHCAT = 3 & ([M]INVQTY(NOL) + [M]ODLQTY(NOL)) >= VALEUR) # 107888 : Scheduled invoices : (LD:19/05/16) If GERR=2 GMESSAGE+= "\" Endif : GMESSAGE+=mess(103,191,1) Local Integer WOK : WOK=2 Call AVERTIR (GMESSAGE, WOK) From GESECRAN If WOK=1 mkstat=2 : End : Endif Endif Endif Gosub VERIF_CPSALLQTY From SUBSOH1 : If mkstat=2 End Endif # Issue X3-200515/201739 - 2020-07-29 by MUARN : Control quantity on sales order lines # the quantity can't be lower than the invoiced quantity plus the validated quantity on progress status Raz GERR If dim([M:SOH4]PRGBILNUM)> 0 & [M:SOH4]PRGBILNUM(NOL)<>"" # Issue X3-200515/X3-207051 - 2020-09-16 by SR : Add the min quantity after the error message #If VALEUR < func LIBSAL_INVCND_SOH.C_QTY_INVCND # 200515 : Progress billing / X3-216438 : Blocking control on quantity or net price update when all scheduled invoices are linked to progress status - 2020-11-19 by LD #WQTY_INVCND = func LIBSAL_INVCND_SOH.C_QTY_INVCND WQTY_INVCND = func LIBSAL_INVCND_SOH.C_QTY_INVCND (WALLPRGBILLIN) If VALEUR <> [M:SOH4]QTY(NOL) & WALLPRGBILLIN=2 GMESSAGE=mess(294,191,1)-mess(601,192,1) mkstat=2 : End Endif # 200515 : Progress billing / X3-216438 : Blocking control on quantity or net price update when all scheduled invoices are linked to progress status - 2020-11-19 by LD If VALEUR < WQTY_INVCND GMESSAGE=mess(585,192,1)-"("+format$("N:"+GFMTQTY, num$(WQTY_INVCND))+")" mkstat=2 Elsif GERR>0 mkstat=2 Endif Endif # End issue X3-200515/201739 End ######################################## Subprog AP_QTY(VALEUR) Variable Decimal VALEUR If [M]STOMGTCOD(nolign-1)=1 End Endif End ######################################## Subprog AM_QTY(VALEUR) Variable Decimal VALEUR Local Integer NOL : NOL=nolign-1 Local Shortint TYP Local Decimal QTY_UV, QTY_UV1, COEF Local Integer WRECH_TAR Local Decimal WSNETPRI, WSNETPRINOT, WSNETPRIATI : # Bug 70861 Local Decimal WQTY # Issue X3-200515/216719 - 2020-10-13 by MUARN : pour contrôle montant mini déjà facturé en progress billing Local Decimal WCPO_QTY : WCPO_QTY = [M:SOH4]QTY(NOL) # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management # Controle article-site Call CONTITF([M:SOH4]ITMREF(NOL),[M:SOH4]DSTOFCY(NOL),[M:SOH4]STOMGTCOD(NOL)) From TRTVENCTL If mkstat = 2 GERR=1 : End : Endif # Controle lié à la contremarque Gosub CTR_CTM From SUBSOHB : If mkstat=2 End Endif # Controle lié à l'inter-site : 15/01/04 : On bloque la modif de qté si inter-site #Gosub CTR_BETFCY From SUBSOHB : If mkstat=2 End Endif # Traitement d'une ligne de contremarque Gosub TRT_CTM From SUBSOH1 # Si la qté cdée a évoluée, Init de la qté à allouer selon paramètre : # Si Init de la qté à allouer à oui et # Si Pas de gestion des signatures Ou (Allocation et encours article cdes non signées à oui Ou cde signée) #85683 : Init qté à allouer à tord #If GINIALLORD=2 & (GAPPSOH<>2 | ((GSOHAPPORD=2 & GSOHAPPALL=2) | [M:SOH1]APPFLG>2)) If GINIALLORD=2 & (GAPPSOH<2 | ((GSOHAPPORD=2 & GSOHAPPALL=2) | [M:SOH1]APPFLG>2)) #85683 Local Decimal WSAUSTUCOE : WSAUSTUCOE=[M]SAUSTUCOE(NOL) Gosub INIT_WALLQTYSTU From SUBSOH1 Endif # --> Calcul des montants de base calcul de taxe Local Decimal WUNTCLCAMT1, WUNTCLCAMT2 : Raz WUNTCLCAMT1, WUNTCLCAMT2 If [M]QTY(NOL) <> 0 WUNTCLCAMT1=[M]CLCAMT1(NOL)/[M]QTY(NOL) : WUNTCLCAMT2=[M]CLCAMT2(NOL)/[M]QTY(NOL) Endif Call ALICLCAMT([M:SOH4]ITMREF(NOL), VALEUR, NOL, "SOH4", [M:SOH4]CLCAMT1(NOL), [M:SOH4]CLCAMT2(NOL)) From TRTX3 # Pas de recherche tarif pour les gratuits If [M:SOH4]FOCFLG(NOL) = 3 End : Endif #-------------------------------------------# # Recherche tarif si modif qte ou creation # #-------------------------------------------# If GMODIF = 0 WRECH_TAR = 1 # 200515 : Progress billing / X3-217465 : Control on sales order line price search - 2020-10-12 by LD # If the sales order line is linked to a progress billing # If there is scheduled invoices linked to a billing situation not invoiced we can't modify the price (to avoid bad price when invoicing) # So price calculation has to be inhibited # This working flag indicates if, for the sales order line, there is scheduled invoices linked to a billing situation not invoiced If dim([M:SOH4]PBILDTOINV) <= 0 | [M:SOH4]PBILDTOINV(NOL)=1 # Price calculation can be done only if progress billing is not activated or if there is no scheduled invoices linked to a billing situation not invoiced # 200515 : Progress billing / X3-217465 : Control on sales order line price search - 2020-10-12 by LD If [M:SOH4]FOCFLG(NOL) = 2 GMESSAGE = mess(7,191,1)+"\"+mess(21,191,1) Else GMESSAGE = mess(21,191,1) Endif Call OUINON(GMESSAGE,WRECH_TAR) From GESECRAN Raz GMESSAGE If WRECH_TAR=2 & find([M:SOH4]LINTYP(NOL),2,6,10) GTARFLG="1" Endif : # Bug 62571 # 200515 : Progress billing / X3-217465 : Control on sales order line price search - 2020-10-12 by LD Endif # 200515 : Progress billing / X3-217465 : Control on sales order line price search - 2020-10-12 by LD Else WRECH_TAR= 2 Endif If WRECH_TAR = 2 # --------------- Recherche tarif ----------------- # Article normal ou composé TYP=1 # Composant If find([M:SOH4]LINTYP(NOL),3,4,5,7,8,9,11,12,13) Local Integer ORI : ORI=NOL While !find([M]LINTYP(ORI),2,6,10) & ORI >= 0 ORI-=1 Wend If find([M]LINTYP(ORI),2,6,10) GPNTITMREF=[M]ITMREF(ORI) Endif TYP=4 Endif # --> Recherche tarif Call RECH_TARIF(TYP,[M]ITMREF(NOL),NOL,VALEUR,"SOH",[M]GROPRI(NOL)) From TRTVENTAR Endif # Bug 70861 : Recalcul prix net si recherche tarif ou si ligne directe (car impact des frais/remise par ligne sur le prix net) WSNETPRI=[M]NETPRI(NOL) : WSNETPRINOT=[M]NETPRINOT(NOL) : WSNETPRIATI=[M]NETPRIATI(NOL) If WRECH_TAR=2 | [M]DETSQHNUM(NOL) = "" # 200515 : Progress billing / X3-217465 : Control on sales order line price search - 2020-10-12 by LD # If the sales order line is linked to a progress billing # If there is scheduled invoices linked to a billing situation not invoiced we can't modify the price (to avoid bad price when invoicing) # This working flag indicates if, for the sales order line, there is scheduled invoices linked to a billing situation not invoiced If dim([M:SOH4]PBILDTOINV) > 0 & [M:SOH4]PBILDTOINV(NOL)=2 # Simulation Netpri calcul to see if the price is modified Local Decimal WNETPRI, WQTY Local Integer I : I=NOL WQTY=VALEUR Gosub SIMUL_NETPRI From SUBSOHB If [M:SOH4]NETPRI(NOL)<>WNETPRI GMESSAGE=mess(293,191,1)-"\"-mess(601,192,1)-":"-mess(582,192,1) : mkstat=2 : End Endif Endif # 200515 : Progress billing / X3-217465 : Control on sales order line price search - 2020-10-12 by LD # --> Calcul du prix net Call CLCNETPRI(VALEUR, [M:SOH0]CUR, NOL) From TRTVENPRI # Issue X3-200515/X3-208171 - 2020-09-08 by SR : Progress billing #If GDACLOK = 1 If GDACLOK = 1 | (dim([M:SOH4]PRGBILNUM) > 1 & [M:SOH4]PRGBILNUM(NOL) <> "") # Issue X3-200515/216719 - 2020-10-13 by MUARN : pour contrôle montant mini déjà facturé en progress billing WQTY = [M:SOH4]QTY(NOL) [M:SOH4]QTY(NOL) = VALEUR # End issue X3-200515/216719 Call CTLNETPRI([M:SOH0]BPCORD,[M:SOH0]CHGTYP,[M:SOH0]ORDDAT,[M:SOH0]CUR,NOL) From TRTVENPRI # Issue X3-200515/216719 - 2020-10-13 by MUARN : pour contrôle montant mini déjà facturé en progress billing [M:SOH4]QTY(NOL) = WQTY # End issue X3-200515/216719 If mkstat=2 End Endif Endif Endif # Bug 70861 # -- Calcul de la marge ssi recherche tarif ou mnts base clc taxe modifiés If WRECH_TAR=2 | [M]CLCAMT1(NOL)/VALEUR<>WUNTCLCAMT1 | [M]CLCAMT2(NOL)/VALEUR<>WUNTCLCAMT2 & | [M]NETPRI(NOL)<>WSNETPRI | [M]NETPRINOT(NOL)<>WSNETPRINOT | [M]NETPRIATI(NOL)<>WSNETPRIATI : # Bug 70861 [M]QTY(NOL)=VALEUR Call CLCPFM([M]DSTOFCY(NOL), [M:SOH1]PRITYP, [M]CHGTYP, [M:SOH0]ORDDAT, [M:SOH0]CUR, NOL, 2) From TRTVENPRI If GDACLOK = 1 Call CTLPFM([M:SOH0]CUR,[M:SOH4]CPRPRI(NOL), NOL) From TRTVENPRI If mkstat=2 End Endif Endif Affzo [M:SOH4]CPRPRI(NOL) Affzo [M:SOH4]PFM(NOL) Endif If WRECH_TAR=2 | [M]DETSQHNUM(NOL) = "" : # Bug 70861 Gosub AFF_RECH_TAR # bug 15688 : Ctrl reporté en action ctrl du prix # If find([M]LINTYP(NOL),1,2,6) # If [M]FOCFLG(NOL) <> 3 & [M]GROPRI(NOL)=0 & !GIMPORT # GERR=3:GMESSAGE=mess(62,194,1) # Endif # Endif Endif # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management #--Changing the quantity or due to the price search, the invoice schedule has to be updated If [M:SOH4]DINVCND(NOL)<>"" and WCPO_QTY<>VALEUR #CPO 18/01/2016 : and [M:SOH4]QTY(NOL)<>0 [M:SOH4]DINVCNDTOUPD(NOL)=[V]CST_AYES [M:SOH4]DINVCNDTODIS(NOL)=[V]CST_AYES #CPO 18/01/2016 Thus, we only do it once after an order line modification #--Here it is to early to call the redispatch for the global invoice condition schedule associated to the line #--It will be done in "after line" action on P1_NBLIG Else [M:SOH4]DINVCNDTOUPD(NOL)=[V]CST_ANO [M:SOH4]DINVCNDTODIS(NOL)=[V]CST_ANO #CPO 18/01/2016 Endif # End issue 107888 # Issue X3-62703 - 2017-11-07 by CPO : Available stock display If (NOL>([M]NBLIG-1)) or [M:SOH4]UPDFLG(NOL)=0 #--to avoid doing it twice for a newly inserted line (already done in AS_WALLQTY for nolign<=[M]NBLIG) Gosub DISPLAY_QTY_STOCKSTATUS From SUBSOH1 # Issue X3-62703 - 2017-11-07 by CPO : Available stock display Endif # End issue X3-62703 Gosub UPD_PREP_MESS From SUBSOHA1 # X3-246884 By SDEM nolign=NOL+1 Raz [M:SOH4]TDLQTY(NOL), [M:SOH4]TDLQTYSTU(NOL) End # Issue 241331 - 2021-05-06 by STLIG : power trial kitting button Subprog B8_QTY(VALEUR) Variable Decimal VALEUR Local Char SAVACT(20) : SAVACT = "" Local Char LPARAM(250)(1..20) : Raz LPARAM Local Char LVALEUR(10) : LVALEUR = "" Local Char LECCVALMAJ(GLONECS), LECCVALMIN(GLONEVL) : Raz LECCVALMAJ, LECCVALMIN Local Integer LBOMALT If dim([M:SOH4]ECCVALMAJ) > 0 LECCVALMAJ = [M:SOH4]ECCVALMAJ(nolign-1) LECCVALMIN = [M:SOH4]ECCVALMIN(nolign-1) Endif LPARAM(1) = [M:SOH0]SALFCY LPARAM(2) = num$(func SUBBMR.DEF_BOM([M:SOH4]ITMREF(nolign-1), & LECCVALMAJ, & LECCVALMIN, & LBOMALT)) LPARAM(3) = num$(LBOMALT) LPARAM(4) = date$ LPARAM(5) = [M:SOH4]ITMREF(nolign-1) LPARAM(6) = "SOH4" LPARAM(7) = num$(VALEUR) LPARAM(8) = LECCVALMAJ LPARAM(9) = LECCVALMIN SAVACT = GACTION GACTION = "BOMRET" Call TRAITE_CHAR(LVALEUR, LPARAM, "FBOMRET", "SUBBMR", "DBOMRET", 3, "") From GTRAITE GACTION = SAVACT End # ------------------------------------ ALLQTY ------------------------ Subprog AV_ALLQTY(VALEUR) Variable Decimal VALEUR If VALEUR=0 | nolign>[M]NBLIG End Endif Gosub COLOR_KIT End # ------------------------------------ WALLQTY ------------------------ ######################################## Subprog IB_WALLQTY # Bouton 1 : Stock par site # Bouton 2 : Filtre allocation # Bouton 3 : Visu détail allocation # Bouton 5 : Stock dispo # Bouton 6 : Stock projeté # User Story X3-46075 Task X3-48218 - 2017-08-17 by CPO : ANALYSIS_FDMA_Display_Quantity_Available_field_on_Sales_Order_line # Désactivation bouton filtre allocation # --> Si article non géré en stock ou si FMI n'est pas sur stock #If [M]STOMGTCOD(nolign-1) = 1 | [M]FMI(nolign-1) <> 1 # --> Si article non géré en stock If [M]STOMGTCOD(nolign-1) = 1 Raz GBOUT2, GBOUT6 : Endif # User Story X3-46075 Task X3-48218 - 2017-08-17 by CPO : added GBOUT6 ANALYSIS_FDMA_Display_Quantity_Available_field_on_Sales_Order_line # Désactivation bouton visu détail allocation # --> Si allocation globale ou aucune allocation #If [M]DALLTYP(nolign-1) = 1 | ([M]ALLQTY(nolign-1) = 0 & [M]SHTQTY(nolign-1) = 0) # --> Si aucune allocation If ([M]ALLQTY(nolign-1) = 0 & [M]SHTQTY(nolign-1) = 0) Raz GBOUT3 : Endif End ######################################## Subprog AV_WALLQTY(VALEUR) Variable Decimal VALEUR If VALEUR=0 | nolign>[M]NBLIG End Endif Gosub COLOR_KIT End ######################################## Subprog AS_WALLQTY(VALEUR) : # --- Web - Obligatoire - Synchrone Variable Decimal VALEUR Local Integer NOL : NOL = nolign-1 Local Integer OK : OK=2 Local Decimal WCOE Local Decimal WRALLQTY, WTALLQTY, WFIRAVAQTY Local Date WFIRAVADAT # ---------- Pas de saisie de la quantité allouée ------------ # --> Gestion des signatures et (Pas d'encours cde non signée ou Pas d'allocation cde non signée et la cde n'est pas signée) If GAPPSOH>1 & ((GSOHAPPORD=1 | GSOHAPPALL=1) & [M:SOH1]APPFLG<=2) mkstat=2 Endif # --> La commande bloquée # --> Ce n'est pas une ligne ferme If find([M:SOH1]CDTSTA,2,5) | [M]DEMSTA(NOL) <> 1 mkstat = 2 : End : Endif # --> Contremarque ou Ordre de production #If find([M]FMI(NOL),2,3,5) mkstat=2 : End : Endif If [M]FMI(NOL)=2 mkstat=2 : End : Endif If func MANHLDLIB.BLK_ALLOC([M:SOH1]HLDSTA,[M:SOH1]HLDCOD) : mkstat=2 : End : Endif # order holds # --> Article non géré en stock et ce n'est pas un kit/sous-traité #If !find([M]LINTYP(NOL),2,10) & [M]STOMGTCOD(NOL) = 1 mkstat = 2 : End : Endif : # Bug 71111 If !GIMPORT : # Bug 71111 If !find([M]LINTYP(NOL),2,10) & [M]STOMGTCOD(NOL) = 1 mkstat = 2 : End : Endif : # Bug 71111 Else : # Bug 71111 If !find([M]LINTYP(NOL),2,3,4,5,10,11,12,13) & [M]STOMGTCOD(NOL) = 1 mkstat = 2 : End : Endif : # Bug 71111 Endif # User Story X3-46075 Task X3-48218 - 2017-08-17 by CPO : ANALYSIS_FDMA_Display_Quantity_Available_field_on_Sales_Order_line ## Issue 113880 ## This display (GERR=4) is no more possible with web client #End ## End issue 113880 # Issue X3-62703 - 2017-11-07 by CPO : Available stock display # User Story X3-46075 Task X3-48218 - 2017-08-17 by CPO : ANALYSIS_FDMA_Display_Quantity_Available_field_on_Sales_Order_line #--moved call from AV_WALLQTY to AS_WALLQTY as the AV_ is also called when entering to the fonction/going to another order (performance) #--test on nolign opposite to the one done in AM_QTY to avoid calling twice also #--only for existing lines not modified #--the only problem I see is that the UPDFLG/CREFLG flags are setted in _NBLIG... If (NOL<=([M]NBLIG-1) and [M:SOH4]UPDFLG(NOL)<>0) or (dim([M]WSTKTXT)>0 and [M]WSTKTXT="" and [M:SOH4]CREFLG(NOL)<>0 and [M:SOH4]UPDFLG(NOL)=0) Gosub DISPLAY_QTY_STOCKSTATUS From SUBSOH1 Endif # End issue X3-62703 Gosub DISPLAY_ALLQTY_STOCKSTATUS From SUBSOH1 End # /User Story X3-46075 Task X3-48218 - 2017-08-17 by CPO ######################################## Subprog AP_WALLQTY(VALEUR) Variable Decimal VALEUR If [M]STOMGTCOD(nolign-1)=1 End Endif # User Story X3-46075 Task X3-48218 - 2017-08-17 by CPO : ANALYSIS_FDMA_Display_Quantity_Available_field_on_Sales_Order_line #GERR=4 : GMESSAGE = " " # Issue X3-128239 #If !GIMPORT and !GWEBSERV and dim([M]WALLTXT)>0 # Raz [M]WALLTXT : Affzo [M]WALLTXT #Endif If !GIMPORT and !GWEBSERV and dim([M:SOH4]WALLTXT)>0 Raz [M:SOH4]WALLTXT : Affzo [M:SOH4]WALLTXT Endif # End issue X3-128239 # /User Story X3-46075 Task X3-48218 - 2017-08-17 by CPO End ######################################## Subprog AM_WALLQTY(VALEUR) Variable Decimal VALEUR Local Integer NOL : NOL=nolign-1 Local Decimal WALLQTY, WALLCLI Local Decimal WTOTDLVQTY, WCOEF Local Integer OK # --> Calcul du total déjà préparé/livré WTOTDLVQTY = [M:SOH4]OPRQTY(NOL)+[M:SOH4]PREQTY(NOL)+[M:SOH4]ODLQTY(NOL) If [M:SOH0]SOHCAT = 3 WTOTDLVQTY += [M:SOH4]INVQTY(NOL) Else WTOTDLVQTY += [M:SOH4]DLVQTY(NOL) Endif # --> Calcul de la nouvelle qté à allouer WALLQTY=VALEUR-([M:SOH4]ALLQTY(NOL)+[M:SOH4]SHTQTY(NOL)) Raz GMESSAGE If WALLQTY > 0 # Augmentation de la qté à allouer # ------------------------------------- # FGR 10/03/2015 : X3SUIVI23273 (début) # --> Blocage si dépassement en-cours If !([M:SOH1]BETFCY = 2 & [M:SOH1]BETCPY <> 2) or GCTLBETFCY = 2 Then #- Si pas (Intersit & non intersoc) ou si Ctrl intersit encours&prix If [M:SOH1]CDTSTA = 3 & GCDTUNL = 1 Then mkstat = 2 GMESSAGE = mess(101,197,1) End Elsif [M:SOH1]CDTSTA = 3 Then # --> Si pas de blocage et dépassement d'en-cours : Dde de confirmation GMESSAGE = mess(101,197,1) Elsif [M:SOH1]CDTSTA = 4 Then # --> Si Acompte non versé : Dde de confirmation GMESSAGE = mess(102,197,1) Endif Elsif [M:SOH1]CDTSTA = 4 Then # --> Si Acompte non versé : Dde de confirmation GMESSAGE = mess(102,197,1) Endif # FGR 10/03/2015 : X3SUIVI23273 (fin) # ------------------------------------- # --> Ligne de contremarque If find([M:SOH4]FMI(NOL),3,5) If GMESSAGE<>"" GMESSAGE+="\" Endif If [M:SOH4]FMI(NOL)=3 GMESSAGE+=mess(281,197,1) If [M:SOH4]FMINUM(NOL)<>"" GMESSAGE-=":"-mess(142,191,1) : Endif Endif If [M:SOH4]FMI(NOL)=5 GMESSAGE+=mess(280,197,1) If [M:SOH4]FMINUM(NOL)<>"" GMESSAGE-=":"-mess(143,191,1) : Endif Endif Endif Endif # --> Si qté allouée supérieure à la qtée cdée : Dde de confirmation If VALEUR + WTOTDLVQTY > [M:SOH4]QTY(NOL) If GMESSAGE<>"" GMESSAGE+="\" Endif GMESSAGE+=mess(213,191,1) Endif # -->Livraison ligne/cde complète : On doit tout allouer If find([M:SOH2]DME,2,3) # Si la qté à allouer est inférieure au reste à allouer : Dde confirmation If VALEUR < [M]QTY(NOL) - WTOTDLVQTY If GMESSAGE<>"" GMESSAGE+="\" Endif GMESSAGE+=mess(295,192,1) Endif If [M]STOMGTCOD(NOL) > 1 # Calcul stock disponible Local Integer WRET Local Decimal WSTUDISSTU Local Char WNUM If find(GUSERERBPC, 2,3) WNUM=vireblc(format$("K:15X",[M]BPCORD)+format$("K:3X",[M]DBPAADD(NOL)), 1) : Endif #--- Issue 115110 : Added LECCVAL parameter in 10th position Call STODISALL([M]DSTOFCY(NOL),[M]ITMREF(NOL),2,[M]DALLTYP(NOL),2,2,1,"",WNUM,"",WSTUDISSTU,WRET) From STKALL If WRET=0 # La qté à allouer doit être disponible If WSTUDISSTU < [M]WALLQTYSTU(NOL) GMESSAGE = mess(163,197,1)+num$(WSTUDISSTU)-[M]STU(NOL) If [M]DALLTYP(NOL) = 2 & [M]LOT(NOL) <> "" GMESSAGE -= mess(43,197,1)-":"-[M]LOT(NOL) Endif If [M]DALLTYP(NOL) = 2 & [M]LOC(NOL) <> "" GMESSAGE -= mess(426,197,1)-[M]LOC(NOL) Endif mkstat=2 : GMESSAGE += "\"+mess(44,192,1) : End Endif Endif Endif Endif If GMESSAGE <> "" GMESSAGE+="\"+mess(205,100,1) OK=1: Call OUINON(GMESSAGE,OK) From GESECRAN Raz GMESSAGE : If OK=1 mkstat=2 : End : Endif Endif If WALLQTY <=0 End : Endif # Dde d'utilisation des réservations clients If GUSERERBPC=3 [M]RERBPCFLG(NOL)=1 Local Char WVCRRER(250) WVCRRER= vireblc(format$("K:"+num$(GLONBPC)+"X",[M]BPCORD)+format$("K:"+num$(GLONBPD)+"X",[M]DBPAADD(NOL)), 1) Call CAL_RERQTY(1,[M]ITMREF(NOL),[M]DSTOFCY(NOL),WVCRRER,[M]DSHIDAT(NOL),WALLCLI) From STKALL If WALLCLI <> 0 GMESSAGE = mess(131,191,1)-num$(WALLCLI)-[M]STU(NOL) OK=2 : Call OUINON (GMESSAGE-"\"-mess(130,191,1),OK) From GESECRAN If OK = 2 [M]RERBPCFLG(NOL)=2 : Endif Endif Endif End ######################################## # ------------------------------------ DALLTYP ------------------------ ######################################## Subprog AS_DALLTYP(VALEUR) Variable Integer VALEUR Local Integer NOL : NOL=nolign-1 # Article non géré en stock et ce n'est pas un kit/sous-traité If !find([M]LINTYP(NOL),2,10) & [M]STOMGTCOD(NOL) = 1 mkstat = 2 : End : Endif # Le type d'allocation n'est plus modifiable s'il y a des allocations If sum([M]ALLQTY(NOL), [M]SHTQTY(NOL)) mkstat=2 Endif If find([M]FMI(NOL),3,5) mkstat=2 Endif End # ------------------------------------ GROPRI ------------------------ ######################################## Subprog AS_GROPRI(VALEUR) : # --- Web - Obligatoire - Synchrone Variable Decimal VALEUR If [M:SOH4]FOCFLG(nolign-1)<>3 End Endif # Article gratuit : # Non saisissable en modification de la ligne (création ou modif de cde) # Bug 49093 : On ne laisse ainsi saisissable en création de la ligne pour l'import If [M]UPDFLG(nolign-1)<>0 | [M]CREFLG(nolign-1)<>0 mkstat=2 Endif End ######################################## Subprog C_GROPRI(VALEUR) Variable Decimal VALEUR # En création d'une ligne ou si modification du prix If ([M]CREFLG(nolign-1) = 0 & [M]UPDFLG(nolign-1) = 0) | [M]GROPRI(nolign-1) <> VALEUR Then # Pas de message si import de composants kit/sous-traité ou nomenclature # important : test sur la classe [F] du buffer import If GIMPORT & find([F:SOP]LINTYP,3,4,5,7,8,9,11,12,13) Then End Endif # Si article normal non gratuit, avertissement si prix à 0 If find([M]LINTYP(nolign-1),1,2,6,10) & [M]FOCFLG(nolign-1) <> 3 & VALEUR = 0 Then Local Integer OK OK = 2 # ok=2 bug 13059 autoriser import prix nul If !([M:SOH1]BETFCY = 2 & [M:SOH1]BETCPY <> 2) or GCTLBETFCY = 2 Then # FGR 10/03/2015 : X3SUIVI23273 Si pas (Intersit & non intersoc) ou si Ctrl intersit encours&prix Call AVERTIR(mess(62,194,1),OK) From GESECRAN Endif If OK <> 2 Then mkstat = 2 Endif Endif Endif # 200515 : Progress billing / X3-217059 : Blocking control modification on price structure updates on sales order line - 2020-10-06 by LD If VALEUR <> [M:SOH4]GROPRI(nolign-1) Gosub C_DISCRGVALX If mkstat=2 End Endif Endif # 200515 : Progress billing / X3-217059 : Blocking control modification on price structure updates on sales order line - 2020-10-06 by LD Gosub UPD_PREP_MESS From SUBSOHA1 # X3-246884 By SDEM End ######################################## Subprog AM_GROPRI(VALEUR) Variable Decimal VALEUR # Le prix ne peut être à 0 pour les articles normaux non gratuits #If [M]LINTYP(nolign-1) = 1 | [M]LINTYP(nolign-1) = 2 | [M]LINTYP(nolign-1) = 6 # If [M]FOCFLG(nolign-1) <> 3 & VALEUR =0 # Local Integer OK : OK=2 : # ok=2 bug 13059 autoriser import prix nul # Call AVERTIR(mess(62,194,1),OK) From GESECRAN # If OK <> 2 mkstat=2 : Endif # Endif #Endif End ######################################## Subprog AS_DISCRGVAL1(VALEUR) Variable Decimal VALEUR If [M:SOH4]FOCFLG(nolign-1)<>3 End Endif # Article gratuit : # Non saisissable en modification de la ligne (création ou modif de cde) # Bug 49093 : On ne laisse ainsi saisissable en création de la ligne pour l'import If [M]UPDFLG(nolign-1)<>0 | [M]CREFLG(nolign-1)<>0 mkstat=2 Endif End ######################################## Subprog AS_DISCRGVAL2(VALEUR) Variable Decimal VALEUR If [M:SOH4]FOCFLG(nolign-1)<>3 End Endif # Article gratuit : # Non saisissable en modification de la ligne (création ou modif de cde) # Bug 49093 : On ne laisse ainsi saisissable en création de la ligne pour l'import If [M]UPDFLG(nolign-1)<>0 | [M]CREFLG(nolign-1)<>0 mkstat=2 Endif End ######################################## Subprog AS_DISCRGVAL3(VALEUR) Variable Decimal VALEUR If [M:SOH4]FOCFLG(nolign-1)<>3 End Endif # Article gratuit : # Non saisissable en modification de la ligne (création ou modif de cde) # Bug 49093 : On ne laisse ainsi saisissable en création de la ligne pour l'import If [M]UPDFLG(nolign-1)<>0 | [M]CREFLG(nolign-1)<>0 mkstat=2 Endif End ######################################## Subprog AS_DISCRGVAL4(VALEUR) Variable Decimal VALEUR If [M:SOH4]FOCFLG(nolign-1)<>3 End Endif # Article gratuit : # Non saisissable en modification de la ligne (création ou modif de cde) # Bug 49093 : On ne laisse ainsi saisissable en création de la ligne pour l'import If [M]UPDFLG(nolign-1)<>0 | [M]CREFLG(nolign-1)<>0 mkstat=2 Endif End ######################################## Subprog AS_DISCRGVAL5(VALEUR) Variable Decimal VALEUR If [M:SOH4]FOCFLG(nolign-1)<>3 End Endif # Article gratuit : # Non saisissable en modification de la ligne (création ou modif de cde) # Bug 49093 : On ne laisse ainsi saisissable en création de la ligne pour l'import If [M]UPDFLG(nolign-1)<>0 | [M]CREFLG(nolign-1)<>0 mkstat=2 Endif End ######################################## Subprog AS_DISCRGVAL6(VALEUR) Variable Decimal VALEUR If [M:SOH4]FOCFLG(nolign-1)<>3 End Endif # Article gratuit : # Non saisissable en modification de la ligne (création ou modif de cde) # Bug 49093 : On ne laisse ainsi saisissable en création de la ligne pour l'import If [M]UPDFLG(nolign-1)<>0 | [M]CREFLG(nolign-1)<>0 mkstat=2 Endif End ######################################## Subprog AS_DISCRGVAL7(VALEUR) Variable Decimal VALEUR If [M:SOH4]FOCFLG(nolign-1)<>3 End Endif # Article gratuit : # Non saisissable en modification de la ligne (création ou modif de cde) # Bug 49093 : On ne laisse ainsi saisissable en création de la ligne pour l'import If [M]UPDFLG(nolign-1)<>0 | [M]CREFLG(nolign-1)<>0 mkstat=2 Endif End ######################################## Subprog AS_DISCRGVAL8(VALEUR) Variable Decimal VALEUR If [M:SOH4]FOCFLG(nolign-1)<>3 End Endif # Article gratuit : # Non saisissable en modification de la ligne (création ou modif de cde) # Bug 49093 : On ne laisse ainsi saisissable en création de la ligne pour l'import If [M]UPDFLG(nolign-1)<>0 | [M]CREFLG(nolign-1)<>0 mkstat=2 Endif End ######################################## Subprog AS_DISCRGVAL9(VALEUR) Variable Decimal VALEUR If [M:SOH4]FOCFLG(nolign-1)<>3 End Endif # Article gratuit : # Non saisissable en modification de la ligne (création ou modif de cde) # Bug 49093 : On ne laisse ainsi saisissable en création de la ligne pour l'import If [M]UPDFLG(nolign-1)<>0 | [M]CREFLG(nolign-1)<>0 mkstat=2 Endif End ######################################## # 200515 : Progress billing / X3-217059 : Blocking control modification on price structure updates on sales order line - 2020-10-06 by LD Subprog C_DISCRGVAL1(VALEUR) Variable Decimal VALEUR If VALEUR <> [M:SOH4]DISCRGVAL1(nolign-1) Gosub C_DISCRGVALX If mkstat=2 End Endif Endif Gosub UPD_PREP_MESS From SUBSOHA1 # X3-246884 By SDEM End Subprog C_DISCRGVAL2(VALEUR) Variable Decimal VALEUR If VALEUR <> [M:SOH4]DISCRGVAL2(nolign-1) Gosub C_DISCRGVALX If mkstat=2 End Endif Endif Gosub UPD_PREP_MESS From SUBSOHA1 # X3-246884 By SDEM End Subprog C_DISCRGVAL3(VALEUR) Variable Decimal VALEUR If VALEUR <> [M:SOH4]DISCRGVAL3(nolign-1) Gosub C_DISCRGVALX If mkstat=2 End Endif Endif Gosub UPD_PREP_MESS From SUBSOHA1 # X3-246884 By SDEM End Subprog C_DISCRGVAL4(VALEUR) Variable Decimal VALEUR If VALEUR <> [M:SOH4]DISCRGVAL4(nolign-1) Gosub C_DISCRGVALX If mkstat=2 End Endif Endif Gosub UPD_PREP_MESS From SUBSOHA1 # X3-246884 By SDEM End Subprog C_DISCRGVAL5(VALEUR) Variable Decimal VALEUR If VALEUR <> [M:SOH4]DISCRGVAL5(nolign-1) Gosub C_DISCRGVALX If mkstat=2 End Endif Endif Gosub UPD_PREP_MESS From SUBSOHA1 # X3-246884 By SDEM End Subprog C_DISCRGVAL6(VALEUR) Variable Decimal VALEUR If VALEUR <> [M:SOH4]DISCRGVAL6(nolign-1) Gosub C_DISCRGVALX If mkstat=2 End Endif Endif End Subprog C_DISCRGVAL7(VALEUR) Variable Decimal VALEUR If VALEUR <> [M:SOH4]DISCRGVAL7(nolign-1) Gosub C_DISCRGVALX If mkstat=2 End Endif Endif Gosub UPD_PREP_MESS From SUBSOHA1 # X3-246884 By SDEM End Subprog C_DISCRGVAL8(VALEUR) Variable Decimal VALEUR If VALEUR <> [M:SOH4]DISCRGVAL8(nolign-1) Gosub C_DISCRGVALX If mkstat=2 End Endif Endif Gosub UPD_PREP_MESS From SUBSOHA1 # X3-246884 By SDEM End Subprog C_DISCRGVAL9(VALEUR) Variable Decimal VALEUR If VALEUR <> [M:SOH4]DISCRGVAL9(nolign-1) Gosub C_DISCRGVALX If mkstat=2 End Endif Endif Gosub UPD_PREP_MESS From SUBSOHA1 # X3-246884 By SDEM End ###################################################################################### $C_DISCRGVALX If dim([M:SOH4]PBILDTOINV) <=0 Return Endif # PJM is activated # This working flag indicates if, for the sales order line, there is scheduled invoices linked to a billing situation not invoiced # In this case, we can't modify the price (to avoid bad price when invoicing) If [M:SOH4]PBILDTOINV(nolign-1)=2 GMESSAGE=(mess(582,192,1)) : mkstat=2 : Return Endif Return # 200515 : Progress billing / X3-217059 : Blocking control modification on price structure updates on sales order line - 2020-10-06 by LD # --------------------------------------- VACITM1 -------------------------------- Subprog C_VACITM1(VALEUR) Variable Char VALEUR() #--CPO 71937 Lors de l'import, [M]VACITM1(nolign-1)=VALEUR, mais il faut quand même faire une recherche de taxe #--car le niveau peut venir du fichier d'import #If [M]VACITM1(nolign-1)=VALEUR If [M]VACITM1(nolign-1)=VALEUR and !GIMPORT #--/ Call CTLVAT([M]VAT1(nolign-1)) From TRTVENCTL Else Raz [M:SOH4]VAT1(nolign-1) : # Bug 78972 Call ALIVAT(VALEUR,11,1,[M:SOH0]BPCORD,[M:SOH4]ITMREF(nolign-1),"SOH4",nolign-1,[M:SOH4]VAT1(nolign-1)) From TRTX3 Endif Gosub UPD_PREP_MESS From SUBSOHA1 # X3-246884 By SDEM End # 107890 : Scheduled invoices : (LD:08/12/15) # ------------------------------------ DINVCND ------------------------ ###################################################################################### Subprog IB_DINVCND If [M:SOH4]DINVCND(nolign-1)="" Raz GBOUT2 Endif End ######################################## Subprog AS_DINVCND(VALEUR) Variable Char VALEUR() # Invoicing condition managed only for Normal order and not deliverable item # It is not accessible if the line is invoiced If [M:SOH0]SOHCAT<>1 | [M:SOH4]DLVFLG(nolign-1)<>1 | [M:SOH4]INVFLG(nolign-1)<>1 mkstat=2 Endif End ######################################## Subprog C_DINVCND(VALEUR) Variable Char VALEUR() # X3-200515 : Progress billing / X3-220424 : Blocking control on invoicing term update - 2020-11-03 by LD # If the line is associated to a billing plan, we can't modify the invoing term If dim([M:SOH4]PRGBILNUM)> 0 & [M:SOH4]PRGBILNUM(nolign-1)<>"" & VALEUR <> [M:SOH4]DINVCND(nolign-1) GMESSAGE = mess(602,192,1)-":"-func AFNC.MES1(mess(291,191,1),"")-[M:SOH4]PRGBILNUM(nolign-1) : mkstat=2 : End Endif # X3-200515 : Progress billing / X3-220424 : Blocking control on invoicing term update - 2020-11-03 by LD # Invoicing condition is mandatory for undeliverable item If [M:SOH4]DLVFLG(nolign-1)=1 & VALEUR="" mkstat=2 : Raz GMESSAGE If GIMPORT GMESSAGE=[M:SOH4]ITMREF(nolign-1)-":" Endif : GMESSAGE-=mess(864,197,1) : End Endif #--An existing invoice condition cannot be changed if at list one invoice condition line #--has a status different then "To be invoiced" Local File SVCRINVCNDD [SVICD] If find(GREP,"C","D")=0 and [M:SOH4]DINVCND(nolign-1)<>"" and [M:SOH4]DINVCND(nolign-1)<>VALEUR # X3-200515 : Progress billing / X3-222013 : Progress billing - general test - 2020-12-15 by LD # we can't modify the invoicing term on a line with scheduled invoices linked with a milestone If func TRTVENDIV.VERF_SVICD_PJTMST([M:SOH0]SOHNUM, [M:SOH4]SOPLIN(nolign-1), [M:SOH4]SOPLIN(nolign-1), GMESSAGE) = [V]CST_AERROR mkstat=2 : End Endif # X3-200515 : Progress billing / X3-222013 : Progress billing - general test - 2020-12-15 by LD Filter [SVICD] Where VCRTYP = 10 and & VCRNUMORI = [M:SOH0]SOHNUM and & VCRLINORI = [M:SOH4]SOPLIN(nolign-1) and & VCRSEQORI = [M:SOH4]SOPLIN(nolign-1) and & INVCNDSTA > 1 Read [SVICD] First If fstat=0 Filter [SVICD] #--Message... #--"Already existing entry. Creation not suitable !" mkstat =2 : GMESSAGE = mess(500,192,1) #"L'échéancier est déjà généré et il contient des lignes facturées/soldées !" Endif Filter [SVICD] Endif End # 107890 : Scheduled invoices : (LD:08/12/15) ###################################################################################### # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management Subprog AM_DINVCND(VALEUR) Variable Char VALEUR() Local Integer WTRBEGIN,WOK #--The "C_DINVCND" done above will prevent changing an invoice condition if already invoiced lines #--If an existing invoice condition is code is changed, the new one will be generated and the existing deleted #--As the invoice condition is created into the database at the same time at the order, #--the rule only apply while modifying the order lien If [M:SOH4]DINVCND(nolign-1)<>VALEUR #--New invoice condition => we start from scratch If dim(GSOHVCRINVCND_UPD)>0 and GSOHVCRINVCND_UPD(nolign-1)<>null FreeGroup GSOHVCRINVCND_UPD(nolign-1) GSOHVCRINVCND_UPD(nolign-1)=null Endif Endif # Issue 107888 - 2016-09-09 by CPO : US155 Kit & flexible kit scheduled invoices # If find(GREP,"C","D")=0 and [M:SOH4]DINVCND(nolign-1)<>"" and [M:SOH4]DINVCND(nolign-1)<>VALEUR #& and [M:SOH4]DINVCNDTODEL(nolign-1)=[V]CST_ANO If [M:SOH4]DINVCND(nolign-1)<>"" and [M:SOH4]DINVCND(nolign-1)<>VALEUR & and [M:SOH4]DINVCNDTODEL(nolign-1)=[V]CST_ANO If find(GREP,"C","D")=0 # End issue 107888 US155 GERR=0 WOK=1 Call AVERTIR(mess(490,192,1),WOK) From GESECRAN If WOK<2 : mkstat=2 : End : Endif #--Setting the "to delete" flag and filling the invoice condition code to be deleted [M:SOH4]DINVCNDTODEL(nolign-1)=[V]CST_AYES [M:SOH4]DINVCNDPREV (nolign-1)=[M:SOH4]DINVCND(nolign-1) # Issue 107888 - 2016-09-09 by CPO : US155 Kit & flexible kit scheduled invoices Else #--In this case, in LIBSAL_INVCND_SOH_BOM we need the flag to set the kit lines's invoice condition to the same value If [M:SOH4]LINTYP(nolign-1)=6 [M:SOH4]DINVCNDUPDK(nolign-1)=[V]CST_AYES Endif Endif # End issue 107888 US155 Endif #--Also, if the user re-fill the former value, we have to unset the "to delete" flag If VALEUR=[M:SOH4]DINVCNDPREV (nolign-1) and [M:SOH4]DINVCNDTODEL(nolign-1)=[V]CST_AYES [M:SOH4]DINVCNDTODEL(nolign-1)=[V]CST_ANO [M:SOH4]DINVCNDPREV (nolign-1)="" [M:SOH4]DINVCNDUPDK(nolign-1)=[V]CST_ANO # Issue 107888 - 2016-09-09 by CPO : US155 Kit & flexible kit scheduled invoices Endif [M:SOH4]DINVCNDTOUPD(nolign-1)=[V]CST_AYES #CPO 18/01/2016 Optimisation [M:SOH4]DINVCNDTODIS(nolign-1)=[V]CST_ANO #CPO 18/01/2016 Thus, we only do it once after an order line modification End # End issue 107888 # 139565 : Milestone billing / X3-185425 - 2020-03-19 by LD # ------------------------------------ DPJT------------------------ # Issue X3-200515/X3-227027 - 2020-12-22 by SR : General tour : Raz Jum to button if ther is at least one progress billing or one Milestone linked. ###################################################################################### Subprog IB_DPJT # for existing lines If [M:SOH4]CREFLG(nolign-1) <> 0 Gosub INIT_JUMP_TO_DPJT From LIBSAL_INVCND_SOH Endif End # End issue X3-227027 # 200515 : Progress billing / X3-199457 : Control on sales order lines associated to a billing plan - 2020-07-16 by LD ###################################################################################### Subprog C_DPJT(VALEUR) Variable Char VALEUR() If VALEUR = [M:SOH4]DPJT(nolign-1) : End : Endif # If the line is associated to a billing plan, we can't modify the PJT code If dim([M:SOH4]PRGBILNUM)> 0 & [M:SOH4]PRGBILNUM(nolign-1)<>"" GMESSAGE = mess(580,192,1)-":"-func AFNC.MES1(mess(291,191,1),"")-[M:SOH4]PRGBILNUM(nolign-1) : mkstat=2 : End Endif End # 200515 : Progress billing / X3-199457 : Control on sales order lines associated to a billing plan - 2020-07-16 by LD ######################################## Subprog AM_DPJT(VALEUR) Variable Char VALEUR() Local Integer NOL : NOL=nolign-1 If [M:SOH4]DINVCND(NOL)="" End Endif # Il y a un échéancier : Il faut vérifier que les jalons liés aux lignes d'échéancier sont compatibles # Ctrl ssi code activité "PJM" actif (ctrl dans l'étiquette de ctrl) # There is a schedule invoice : We have to verify the linked milestone are compatible # Control only if "PJM" code activity active (Ctrl done in the label control If VALEUR="" End Endif # Ctrl ssi l'échéancier a été généré # Control only if schedule invoices have been generated If ([M:SOH4]CREFLG(NOL)<>0 | ([M:SOH4]CREFLG(NOL)=0 & dim(GSOHVCRINVCND_UPD)>0 & GSOHVCRINVCND_UPD(NOL)<>null)) Local Integer WRET : Raz WRET Local Char WOLDPJT(GLONPJT) : WOLDPJT=[M:SOH4]DPJT(NOL) Local Char WNEWPJT(GLONPJT) : WNEWPJT=VALEUR Gosub CTL_PJT_COMPATIBILITY From SUBSOH1 If WRET = [V]CST_AERROR mkstat=2 : End Endif Endif End # 139565 : Milestone billing / X3-185425 - 2020-03-19 by LD # ------------------------------------ REP1------------------------ ######################################## Subprog AM_REP1(VALEUR) : # --- Web - Faible - Asynchrone Variable Char VALEUR() # --> Initialisation taux commission 1 If [M]CREFLG(nolign-1) <>0:End:Endif If VALEUR = "" : [M:SOH4]REPRAT1 (nolign-1) = 0:End:Endif If [F:BPC]BPCNUM <> [M:SOH0]BPCORD Read [F:BPC]BPC0 = [M:SOH0]BPCORD If fstat Raz [F:BPC] :Endif Endif Read [F:REP]REP0 = VALEUR If fstat=0 If [F:BPC]COMCAT <> 0 [M:SOH4]REPRAT1(nolign-1) = [F:REP]COMRAT1([F:BPC]COMCAT-1) Endif Endif End # ----------------------------------- REPRAT1 ------------------------ Subprog AS_REPRAT1(VALEUR) Variable Decimal VALEUR # --> Pas de saisie si rep1 non renseigne If [M]REP1(nolign-1) = "" VALEUR = 0 : mkstat=2 Endif End # ------------------------------------ REP2 ------------------------ Subprog AM_REP2(VALEUR) : # --- Web - Faible - Asynchrone Variable Char VALEUR() # --> Initialisation taux commission 2 If [M]CREFLG(nolign-1) <> 0: End: Endif If VALEUR = "" : [M:SOH4]REPRAT2 (nolign-1) = 0:End:Endif If [F:BPC]BPCNUM <> [M:SOH0]BPCORD Read [F:BPC]BPC0 = [M:SOH0]BPCORD If fstat Raz [F:BPC] :Endif Endif Read [F:REP]REP0 = VALEUR If fstat=0 If [F:BPC]COMCAT <> 0 [M:SOH4]REPRAT2(nolign-1) = [F:REP]COMRAT2([F:BPC]COMCAT-1) Endif Endif End # ------------------------------------ REPRAT2 ------------------------ Subprog AS_REPRAT2(VALEUR) Variable Decimal VALEUR # --> Pas de saisie si rep2 non renseigne If [M]REP2(nolign-1) = "" VALEUR = 0 : mkstat=2 Endif End # ------------------------------------ DDEMDLVDAT ------------------------ ########################################################################## ## Etiquette ajoutée par le superviseur 19/11/2003 08:03:00 (LD) ########################################################################## Subprog C_DDEMDLVDAT(VALEUR) Variable Date VALEUR Local Integer NOL : NOL=nolign-1 Local Date WDEMDLVDAT : WDEMDLVDAT=VALEUR # --> Vérification de la date de livraison demandée Call CTLUVYBPD(WDEMDLVDAT, [M:SOH4]DBPAADD(NOL), [M:SOH0]BPCORD, 0) From TRTVENCTL If mkstat=2 Local Integer WOK : WOK=2 Call AVERTIR(mess(496,197,1)-":"-format$(GFMDAT,WDEMDLVDAT)-":"-GMESSAGE, WOK) From GESECRAN :#--CPO 83985 GFMDAT au lieu de GFMD Raz GMESSAGE If WOK=1 : End : Endif mkstat=0 Endif VALEUR=WDEMDLVDAT End ######################################## Subprog AM_DDEMDLVDAT(VALEUR) Variable Date VALEUR Local Integer NOL : NOL=nolign-1 # Controle lié à l'inter-site Gosub CTR_BETFCY From SUBSOHB : If mkstat=2 End Endif # Controle lié à la contremarque Gosub CTR_CTM From SUBSOHB : If mkstat=2 End Endif # --> Recalcul date expedition Call CALC_SHIDAT(VALEUR, [M:SOH4]DDAYLTI(NOL), [M:SOH4]DSTOFCY(NOL), 1, 1,[M:SOH0]ORDDAT, [M:SOH4]DSHIDAT(NOL)) From TRTVENDAT #If mkstat Call MESSAGE (mess(278,192,1)-format$(GFMD,[M:SOH4]DSHIDAT(NOL))-"\"-GMESSAGE) From GESECRAN : Endif mkstat=0 # --> Recalcul date de livraison prévue Call CALC_DLVDAT([M:SOH4]DSHIDAT(NOL), [M:SOH4]DDAYLTI(NOL), [M:SOH4]DBPAADD(NOL), [M:SOH0]BPCORD, 0,0, & [M:SOH4]EXTDLVDAT(NOL)) From TRTVENDAT #If mkstat Call MESSAGE (mess(279,192,1)-format$(GFMD,[M:SOH4]EXTDLVDAT(NOL))-"\"-GMESSAGE) From GESECRAN : Endif mkstat=0 If func AFNC.ACTIV("EDIX3")>0: Gosub CTL_CHGMAXDLVDAT From TRTFLDEDI: Endif #SAM 110881 Affzo [M]DSHIDAT(NOL), EXTDLVDAT(NOL) End # ------------------------------------ DDAYLTI ------------------------ ######################################## Subprog AM_DDAYLTI(VALEUR) Variable Decimal VALEUR Local Integer NOL : NOL=nolign-1 # 105605 : CCM - Revision index (LD:18/06/15) #If find([M:SOH4]FMI(NOL),2,3,5) & [M:SOH4]FMINUM(NOL) <> "" # Local Integer OK : OK=2 # Call AVERTIR(mess(52,191,1),OK) From GESECRAN # If OK <> 2 mkstat=2 : End : Endif #Endif # Controle lié à la contremarque Gosub CTR_CTM From SUBSOHB : If mkstat=2 End Endif # 105605 : CCM - Revision index (LD:18/06/15) # --> Recalcul date expedition Call CALC_SHIDAT([M:SOH4]DDEMDLVDAT(NOL), VALEUR,[M:SOH4]DSTOFCY(NOL),1,1,[M:SOH0]ORDDAT, [M:SOH4]DSHIDAT(NOL)) From TRTVENDAT #If mkstat Call MESSAGE (mess(278,192,1)-format$(GFMD,[M:SOH4]DSHIDAT(NOL))-"\"-GMESSAGE) From GESECRAN : Endif # --> Recalcul date liv prevue Call CALC_DLVDAT([M:SOH4]DSHIDAT(NOL), VALEUR, [M:SOH4]DBPAADD(NOL), [M:SOH0]BPCORD, 0,0, & [M:SOH4]EXTDLVDAT(NOL)) From TRTVENDAT #If mkstat Call MESSAGE (mess(279,192,1)-format$(GFMD,[M:SOH4]EXTDLVDAT(NOL))-"\"-GMESSAGE) From GESECRAN : Endif Affzo [M]DSHIDAT(NOL), EXTDLVDAT(NOL) End # ------------------------------------ DSHIDAT ------------------------ ########################################################################## ## Etiquette ajoutée par le superviseur 17/02/2004 16:50:39 (LD) ########################################################################## Subprog C_DSHIDAT(VALEUR) Variable Date VALEUR Local Integer NOL : NOL=nolign-1 If VALEUR > [M:SOH4]EXTDLVDAT(NOL) Local Integer WOK : WOK=2 Call AVERTIR (mess(33,192,1), WOK) From GESECRAN : Raz GMESSAGE If WOK=1 mkstat=2 : End : Endif Endif End ######################################## Subprog AM_DSHIDAT(VALEUR) Variable Date VALEUR Local Integer NOL : NOL=nolign-1 Local Integer WOK : WOK=2 If find([M:SOH4]FMI(NOL),2,3,5) & [M:SOH4]FMINUM(NOL) <> "" Call AVERTIR(mess(52,191,1),WOK) From GESECRAN If WOK <> 2 mkstat=2 : End : Endif Endif # --> Recalcul date liv prevue Call CALC_DLVDAT(VALEUR, [M:SOH4]DDAYLTI(NOL), [M:SOH4]DBPAADD(NOL),[M:SOH0]BPCORD, 0, 0, & [M:SOH4]EXTDLVDAT(NOL)) From TRTVENDAT #If mkstat Call MESSAGE (mess(279,192,1)-format$(GFMD,[M:SOH4]EXTDLVDAT(NOL))-"\"-GMESSAGE) From GESECRAN : Endif # --> Recadrage de la date d'expédition par rapport à la date liv prevue qui vient d'être calculée Local Date WDSHIDAT Call CALC_SHIDAT([M:SOH4]EXTDLVDAT(NOL), [M:SOH4]DDAYLTI(NOL), [M:SOH4]DSTOFCY(NOL), 1, 1, [M:SOH0]ORDDAT, WDSHIDAT) From TRTVENDAT mkstat=0 : Raz GMESSAGE If VALEUR<>WDSHIDAT #--CPO 83985 GFMDAT au lieu de GFMD Call OUINON(mess(154,191,1)-format$(GFMDAT,[M]EXTDLVDAT(NOL))-":\"-mess(155,191,1)-format$(GFMDAT,[M]EXTDLVDAT(NOL))-"-"-num$([M]DDAYLTI(NOL))-mess(38,104,1), WOK) From GESECRAN If WOK=2 VALEUR=WDSHIDAT Endif Endif Affzo [M:SOH4]EXTDLVDAT(NOL) End #----------------------------------- EXTDLVDAT --------------------- ######################################## Subprog C_EXTDLVDAT(VALEUR) Variable Date VALEUR Local Integer NOL : NOL = nolign-1 Local Date WEXTDLVDAT : WEXTDLVDAT=VALEUR Local Integer WOK : WOK=2 # --> Vérification de la date de livraison prévue Call CTLUVYBPD(WEXTDLVDAT, [M:SOH4]DBPAADD(NOL), [M:SOH0]BPCORD, 0) From TRTVENCTL If mkstat=2 Call AVERTIR(mess(497,197,1)-":"-format$(GFMDAT,WEXTDLVDAT)-":"-GMESSAGE, WOK) From GESECRAN :#--CPO 83985 GFMDAT au lieu de GFMD Raz GMESSAGE If WOK=1 : End : Endif mkstat=0 Endif VALEUR=WEXTDLVDAT If VALEUR < [M:SOH4]DSHIDAT(NOL) GMESSAGE=mess(47,192,1) : mkstat=2 : Endif End ######################################## Subprog AM_EXTDLVDAT(VALEUR) Variable Date VALEUR Local Integer NOL : NOL = nolign-1 Local Integer WOK : WOK=2 # --> Controle date livraison prévue >= date expédition If VALEUR < [M:SOH4]DSHIDAT(NOL) Call AVERTIR(mess(47,192,1), WOK) From GESECRAN If WOK=1 mkstat=2 : End : Endif Endif # --> Controle lié à la contremarque Gosub CTR_CTM From SUBSOHB If mkstat End : Endif # --> Recadrage de la date d'expédition par rapport à la date liv prevue Local Date WDSHIDAT : WDSHIDAT=[M:SOH4]DSHIDAT(NOL) Call CALC_SHIDAT(VALEUR, [M:SOH4]DDAYLTI(NOL), [M:SOH4]DSTOFCY(NOL), 1, 1, [M:SOH0]ORDDAT, WDSHIDAT) From TRTVENDAT mkstat=0 : Raz GMESSAGE If [M:SOH4]DSHIDAT(NOL)<>WDSHIDAT :#--CPO 83985 GFMDAT au lieu de GFMD Call OUINON(mess(154,191,1)-format$(GFMDAT,VALEUR)-":\"-mess(155,191,1)-format$(GFMDAT,VALEUR)-"-"-num$([M]DDAYLTI(NOL))-mess(38,104,1), WOK) From GESECRAN If WOK=2 [M:SOH4]DSHIDAT(NOL)=WDSHIDAT : Affzo [M:SOH4]DSHIDAT(NOL) : Endif Endif End # -------------------------------------- TDLQTY ------------------------- ######################################## Subprog AS_TDLQTY(VALEUR) Variable Decimal VALEUR Local Integer NOL : NOL = nolign-1 ## 107890: Scheduled invoices: (LC:28/10/16) If [M:SOH4]DLVFLG(nolign-1)<>2 & [M:SOH0]SOHCAT=1 mkstat=2 End Endif ## 107890: Scheduled invoices: (LC:28/10/16) # Pas de saisie si article géré en stock If [M:SOH4]STOMGTCOD(NOL)<>1 | find([M:SOH4]LINTYP(NOL),2,3,4,5,10,11,12,13) | [M:SOH4]CONNUM(NOL)<>"" mkstat=2 : End Endif If [F:ITM]ITMREF <> [M:SOH4]ITMREF(NOL) Read [F:ITM]ITM0 = [M:SOH4]ITMREF(NOL) If fstat Raz [F:ITM] : Endif Endif # Pas de saisie si article contrat If [F:ITM]TPLCONSRV <> "" mkstat=2 : End : Endif End ######################################## Subprog C_TDLQTY(VALEUR) Variable Decimal VALEUR Local Integer NOL Local Decimal WRESTE, WQTY NOL=nolign-1 If [M:SOH4]STOMGTCOD(nolign-1)<>1 Raz VALEUR : End Endif # Calcul du reste à livrer : Préparé + déjà livré WQTY = [M:SOH4]OPRQTY(NOL)+[M:SOH4]PREQTY(NOL)+[M:SOH4]ODLQTY(NOL) # 107888 : Scheduled invoices : (LD:19/05/16) # Commande à facturation directe # Commande normale/prêt et ligne non livrable # Pour le reste à livrer, on prend compte la qté facturée validée #If [M]SOHCAT=3 If [M]SOHCAT=3 | [M]DLVFLG(NOL)=1 WRESTE = [M:SOH4]QTY(NOL)-WQTY-[M:SOH4]INVQTY(NOL) Else # Commande normale/prêt et ligne livrable # Pour le reste à livrer, on prend compte la qté livrée validée WRESTE = [M:SOH4]QTY(NOL)-WQTY-[M:SOH4]DLVQTY(NOL) Endif # 107888 : Scheduled invoices : (LD:19/05/16) # Qté à livrer > qté restant à livrer! If VALEUR > WRESTE GERR=2 : GMESSAGE=mess(89,191,1) Endif End # -------------------------------------- DBPAADD ------------------------ ######################################## Subprog AS_DBPAADD(VALEUR) : # --- Web - Obligatoire - Synchrone Variable Char VALEUR() Raz GMESSAGE If GLINBPD <> 2 mkstat=2 Endif # --> Zone non modifiable si livraison commande complète If [M:SOH2]DME = 3 mkstat = 2 : Endif End ######################################## Subprog C_DBPAADD(VALEUR) Variable Char VALEUR() Local Integer NOL : NOL=nolign-1 # X3-69134 : Performance enhancements for sales order import / X3-74049 : Restricted prices (LD:05/29/18) # This has to be done only if DBPAADD has changed If VALEUR<>[M:SOH4]DBPAADD(NOL) # X3-69134 : Performance enhancements for sales order import / X3-74049 : Restricted prices (LD:05/29/18) # 79705 : SAT in SPRICLINK : Step 2 # Recherche interdit suite modification de l'adresse Local Char WREP (GLONREP) Local Char WBPAADD (GLONBPD) If dim([M:SOH4]REP1(NOL)) > 0 WREP=[M:SOH4]REP1(NOL) If GLINREP=2 # Alimentation des représentants s'ils n'ont pas été alimentés par le client commande If [F:BPC]BPCNUM <> [M:SOH0]BPCORD Read [BPC]BPC0 = [M:SOH0]BPCORD If fstat <> 0 Raz [F:BPC] : Endif Endif # Alimentation du 1er représentant If [F:BPC]REP(0) = "" If [F:BPD]BPCNUM <> [M:SOH0]BPCORD | [F:BPD]BPAADD <> VALEUR Read [F:BPD]BPD0 = [M:SOH0]BPCORD;VALEUR If fstat Raz [F:BPD] Endif Endif WREP= [F:BPD]REP(0) Endif Endif Endif WBPAADD=[M:SOH4]DBPAADD(NOL) [M:SOH4]DBPAADD(NOL)=VALEUR : # Il faut affecter le champ pour que la recherche tarif ait la bonne valeur Call RECH_INTERDIT ([M:SOH4]ITMREF(NOL), VALEUR, WREP, 2) From TRTVENTAR If mkstat=2 & GDACLOK=2 Local Integer WOK WOK=2 : Call AVERTIR (mess(27,192,1)-":"-mess(205,100,1), WOK) From GESECRAN If WOK=2 mkstat=0 Endif Raz GMESSAGE Endif If mkstat = 2 [M:SOH4]DBPAADD(NOL)=WBPAADD : End : Endif # 79705 : SAT in SPRICLINK : Step 2 # X3-69134 : Performance enhancements for sales order import / X3-74049 : Restricted prices (LD:05/29/18) Endif # X3-69134 : Performance enhancements for sales order import / X3-74049 : Restricted prices (LD:05/29/18) # Si commande de prêt, contrôle de l'emplacement client # On autorise le passage car il se peut que l'adresse ne soit pas saisissable If [M:SOH0]SOHCAT = 2 & GMODU(7)=2 If !clalev ([F:STC]) Local File STOLOC [STC] Endif Read [STC]STC0=[M:SOH4]DSTOFCY(nolign-1);[F:BPD]BPCLOC If fstat mkstat=2 : GMESSAGE = mess(117,192,1) # <MG> 31/01/01 Elsif [F:STC]LOCCAT <> 3 mkstat=2 : GMESSAGE = mess(118,192,1) Endif Endif If mkstat=2 End Endif # BPAADD rendu non modifiable pour l'instant # Commande inter-site avec commande d'achat réciproque #If [M:SOH1]BETFCY=2 & [M:SOH0]ORIFCY<>"" # Local Char LPRHFCY # Call RECPRHFCY([M:SOH0]BPCORD, VALEUR, LPRHFCY) From TRTVENISOC # If GERR=1 mkstat=2 : End : Endif #Endif # Si cde inter-site : Ctrl existence article-site sur le site de réception # ssi article géré en stock réceptionné # (Pour la maj stock en transit à la sortie des stocks) If [M:SOH1]BETFCY=2 & [M:SOH0]SOHCAT<>3 & [F:BPD]RCPFCY<>"" If [F:ITM]ITMREF <> [M:SOH4]ITMREF(NOL) Read [F:ITM]ITM0 = [M:SOH4]ITMREF(NOL) If fstat Raz [F:ITM] : Endif Endif If [F:ITM]RCPFLG=2 Call CONTITF([M:SOH4]ITMREF(NOL), [F:BPD]RCPFCY, [F:ITM]STOMGTCOD) From TRTVENCTL If mkstat=2 GMESSAGE = mess(74,187,1)-":"-mess(293,192,1)-[F:BPD]RCPFCY : End Endif Endif Endif # Vérif.cohérence entre l'entête cde et le client livré concernant les infos douanières et le régime de taxe If VALEUR<>[M:SOH1]BPAADD # Bug 72213 : Initialisation du N°TVA depuis client livré ou client facture If dim([M:SOH0]BPIEECNUM)>0 Local Char WEECNUM(20) Call INIEECNUM ([M:SOH0]BPCORD,VALEUR,[M:SOH1]BPCINV,WEECNUM,[M:SOH0]EECNUMCRY) From TRTVENDIV Endif # Bug 72213 If [M:SOH1]VACBPR<>[F:BPD]VACBPR & [F:BPD]VACBPR<>"" # Régime de taxe client livré XXX différent du régime de taxe entête commande YYY # A la dde de CH, le ctrl n'est plus bloquant GMESSAGE=mess(620,197,1)-mess(42,191,1)-"("-[F:BPD]VACBPR-")"-mess(621,197,1)-mess(620,197,1)-mess(622,197,1)-mess(191,198,1)-"("-[M:SOH1]VACBPR-")" Local Integer OK : OK=2 : Call AVERTIR(GMESSAGE, OK) From GESECRAN : Raz GMESSAGE : If OK=1 mkstat=2 Endif Elsif dim([M:SOH0]BPIEECNUM)>0 & [M:SOH0]BPIEECNUM<>WEECNUM & WEECNUM<>"" : # Bug 72213 #FQ 55836 - Le ctrl ne doit plus être bloquant #mkstat=2 : # N°identification CEE client livré XXX différent du N°identification CEE entête devis GMESSAGE=mess(629,197,1)-mess(42,191,1)-"("-WEECNUM-")"-mess(621,197,1)-mess(629,197,1)-mess(622,197,1)-mess(191,198,1)-"("-[M:SOH0]BPIEECNUM-")" : # Bug 72213 Local Integer OK : OK=2 : Call AVERTIR(GMESSAGE, OK) From GESECRAN : Raz GMESSAGE : If OK=1 mkstat=2 Endif #fin FQ 55836 Elsif [M:SOH0]EECICT<>[F:BPD]EECICT & [F:BPD]EECICT<>"" #FQ 55836 - Le ctrl ne doit plus être bloquant #mkstat=2 : # Code incoterm client livré XXX différent du code incoterm entête devis GMESSAGE=mess(630,197,1)-mess(42,191,1)-"("-[F:BPD]EECICT-")"-mess(621,197,1)-mess(630,197,1)-mess(622,197,1)-mess(191,198,1)-"("-[M:SOH0]EECICT-")" Local Integer OK : OK=2 : Call AVERTIR(GMESSAGE, OK) From GESECRAN : Raz GMESSAGE : If OK=1 mkstat=2 Endif #fin FQ 55836 Elsif dim([M:SOH0]EECLOC)>0 & [M:SOH0]EECLOC<>[F:BPD]EECLOC & [F:BPD]EECLOC<>0 #FQ 55836 - Le ctrl ne doit plus être bloquant #mkstat=2 : # Lieu transport CEE client livré XXX différent du Lieu transport CEE entête devis GMESSAGE=mess(631,197,1)-mess(42,191,1)-"("-mess([F:BPD]EECLOC,236,1)-")"-mess(621,197,1)-mess(631,197,1)-mess(622,197,1)-mess(191,198,1)-"("-mess([M:SOH0]EECLOC,236,1)-")" Local Integer OK : OK=2 : Call AVERTIR(GMESSAGE, OK) From GESECRAN : Raz GMESSAGE : If OK=1 mkstat=2 Endif #fin FQ 55836 Endif Endif End ######################################## Subprog AM_DBPAADD(VALEUR) Variable Char VALEUR() Local Integer NOL : NOL=nolign-1 Local Integer OK : OK=2 Local Date WDEMDLVDAT # --> Vérification de la date de livraison demandée pour la nouvelle adresse de livraison WDEMDLVDAT=[M:SOH4]DDEMDLVDAT(NOL) Call CTLUVYBPD(WDEMDLVDAT, VALEUR, [M:SOH0]BPCORD, 0) From TRTVENCTL If mkstat=2 Call AVERTIR(mess(496,197,1)-":"-format$(GFMDAT,WDEMDLVDAT)-"\"-GMESSAGE, OK) From GESECRAN Endif :#--CPO 83985 GFMDAT au lieu de GFMD Raz GMESSAGE : If OK=1 : End : Endif mkstat=0 If [M:SOH4]DDAYLTI(NOL)<>[F:BPD]DAYLTI If [M:SOH4]FMINUM(NOL) <> "" Call AVERTIR(mess(20,191,1)+"\"+mess(52,191,1),OK) From GESECRAN If OK <> 2 mkstat=2 : End : Endif Else Call MESSAGE(mess(20,191,1)) From GESECRAN Endif # --> Recalcul date expedition Call CALC_SHIDAT([M:SOH4]DDEMDLVDAT(NOL), [F:BPD]DAYLTI, [M:SOH4]DSTOFCY(NOL), 1, 1, & [M:SOH0]ORDDAT, [M:SOH4]DSHIDAT(NOL)) From TRTVENDAT If mkstat Call MESSAGE (mess(278,192,1)-format$(GFMDAT,[M:SOH4]DSHIDAT(NOL))-"\"-GMESSAGE) From GESECRAN : Endif :#--CPO 83985 GFMDAT au lieu de GFMD # --> Recalcul date liv prévue Call CALC_DLVDAT([M:SOH4]DSHIDAT(NOL), [F:BPD]DAYLTI, VALEUR, [M:SOH0]BPCORD, 0,0, & [M:SOH4]EXTDLVDAT(NOL)) From TRTVENDAT If mkstat Call MESSAGE (mess(279,192,1)-format$(GFMDAT,[M:SOH4]EXTDLVDAT(NOL))-"\"-GMESSAGE) From GESECRAN : Endif :#--CPO 83985 GFMDAT au lieu de GFMD Endif # Initialisations de zone à faire dans tous les cas [M:SOH4]DDLVPIO(NOL) = [F:BPD]DLVPIO [M:SOH4]DDAYLTI(NOL) = [F:BPD]DAYLTI [M:SOH4]DMDL(NOL) = [F:BPD]MDL [M:SOH4]DDRN(NOL) = [F:BPD]DRN [M:SOH4]DBPTNUM(NOL) = [F:BPD]BPTNUM # Recherche s'il y a un contact pour l'adresse de livraison Call RECH_CNTNAM([M:SOH0]BPCORD, [F:BPD]BPAADD, [M:SOH4]CNDNAM(NOL)) From TRTVENDIV If GLINREP=2 # Alimentation des représentants s'ils n'ont pas été alimentés par le client commande If [F:BPC]BPCNUM <> [M:SOH0]BPCORD Read [BPC]BPC0 = [M:SOH0]BPCORD If fstat <> 0 Raz [F:BPC] : Endif Endif # Alimentation du 1er représentant If dim([M:SOH4]REP1) > 0 & [F:BPC]REP(0) = "" [M:SOH4]REP1(NOL)= [F:BPD]REP(0) If [F:REP]REPNUM <> [F:BPD]REP(0) Read [F:REP]REP0 = [F:BPD]REP(0) If fstat Raz [F:REP] : Endif Endif If [F:BPC]COMCAT <> 0 [M:SOH4]REPRAT1(NOL)=[F:REP]COMRAT1([F:BPC]COMCAT-1) : Endif Affzo [M:SOH4]REP1(NOL), REPRAT1(NOL) Endif # Alimentation du 2eme représentant If dim([M:SOH4]REP2) > 0 If [M:SOH4]REP1(NOL)<>"" & [F:BPC]REP(1) = "" [M:SOH4]REP2(NOL) = [F:BPD]REP(1) If [F:REP]REPNUM <> [F:BPD]REP(1) Read [F:REP]REP0 = [F:BPD]REP(1) If fstat Raz [F:REP] : Endif Endif If [F:BPC]COMCAT <> 0 [M:SOH4]REPRAT2(NOL)=[F:REP]COMRAT2([F:BPC]COMCAT-1) : Endif Affzo [M:SOH4]REP2(NOL), REPRAT2(NOL) Endif Endif Endif # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management #--Changing the adress or due to the price search, the invoice schedule has to be updated If [M:SOH4]DINVCND(NOL)<>"" and [M:SOH4]DBPAADD(NOL)<>VALEUR #CPO 18/01/2016 : and [M:SOH4]DBPAADD(NOL)<>"" [M:SOH4]DINVCNDTOUPD(NOL)=[V]CST_AYES [M:SOH4]DINVCNDTODIS(NOL)=[V]CST_AYES #CPO 18/01/2016 Thus, we only do it once after an order line modification #--Here it is to early to call the redispatch for the global invoice condition schedule associated to the line #--It will be done in "after line" action on P1_NBLIG Endif # End issue 107888 Affzo [M:SOH4]CNDNAM(NOL), DDLVPIO(NOL),DDAYLTI(NOL),DMDL(NOL) Affzo [M:SOH4]DSHIDAT(NOL),EXTDLVDAT(NOL),DBPTNUM(NOL) End # ---------------------------------- CNDNAM ------------------------ ######################################## Subprog C_CNDNAM(VALEUR) Variable Char VALEUR() If VALEUR <> "" If clalev([F:CNT]) = 0 Local File CONTACT [CNT] : Endif Read [CNT] CNT0=1;[M]BPCORD;VALEUR If fstat GMESSAGE = mess(23,100,1) : mkstat=2 : Endif Endif End # ---------------------------------- DDLVPIO ------------------------ ######################################## Subprog AS_DDLVPIO(VALEUR) Variable Integer VALEUR Raz GMESSAGE # --> Zone non modifiable si livraison commande complète If [M:SOH2]DME = 3 mkstat = 2 Endif End ######################################## Subprog AM_DDLVPIO(VALEUR) Variable Integer VALEUR If [M]WIPFLG(nolign-1) = "" [M]WIPFLG(nolign-1) = "M" : Endif End # ------------------------------------ DMDL ------------------------ ######################################## Subprog AS_DMDL(VALEUR) Variable Char VALEUR() Raz GMESSAGE # --> Zone non modifiable si livraison commande complète If [M:SOH2]DME = 3 mkstat = 2 : Endif End # ----------------------------------- DBPTNUM ------------------------ ######################################## Subprog AS_DBPTNUM(VALEUR) Variable Char VALEUR() Raz GMESSAGE # --> Zone non modifiable si livraison commande complète If [M:SOH2]DME = 3 mkstat = 2 : Endif End # ------------------------------------ PCK ------------------------ ########################################################################## ## Etiquette ajoutée par le superviseur 24/06/2004 10:16:18 (LD) ########################################################################## Subprog AM_PCK(VALEUR) Variable Char VALEUR() Local Integer NOL : NOL = nolign-1 #CPO 63410 #If VALEUR="" Raz [M:SOH4]PCKCAP(NOL) : Affzo [M:SOH4]PCKCAP(NOL) Endif If VALEUR="" Raz [M:SOH4]PCKCAP(NOL) Else Call AMPCK([M:SOH4]ITMREF(NOL),[M:SOH4]DSTOFCY(NOL),[M:SOH4]SAU(NOL),VALEUR,[M:SOH4]PCKCAP(NOL)) From TRTVENDIV Endif Affzo [M:SOH4]PCKCAP(NOL) End ########################################################################## ###################################################################################### ## Etiquette ajoutée par le superviseur (écran SOH4) 17/07/2006 16:48:46 (LD) ###################################################################################### Subprog D_CCE1(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=1 : Gosub D_CCEX End Subprog AS_CCE1(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=1 : Gosub AS_CCEX End Subprog C_CCE1(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=1 : Gosub C_CCEX End Subprog D_CCE2(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=2 : Gosub D_CCEX End Subprog AS_CCE2(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=2 : Gosub AS_CCEX End Subprog C_CCE2(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=2 : Gosub C_CCEX End Subprog D_CCE3(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=3 : Gosub D_CCEX End Subprog AS_CCE3(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=3 : Gosub AS_CCEX End Subprog C_CCE3(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=3 : Gosub C_CCEX End Subprog D_CCE4(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=4 : Gosub D_CCEX End Subprog AS_CCE4(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=4 : Gosub AS_CCEX End Subprog C_CCE4(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=4 : Gosub C_CCEX End Subprog D_CCE5(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=5 : Gosub D_CCEX End Subprog AS_CCE5(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=5 : Gosub AS_CCEX End Subprog C_CCE5(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=5 : Gosub C_CCEX End Subprog D_CCE6(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=6 : Gosub D_CCEX End Subprog AS_CCE6(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=6 : Gosub AS_CCEX End Subprog C_CCE6(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=6 : Gosub C_CCEX End Subprog D_CCE7(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=7 : Gosub D_CCEX End Subprog AS_CCE7(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=7 : Gosub AS_CCEX End Subprog C_CCE7(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=7 : Gosub C_CCEX End Subprog D_CCE8(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=8 : Gosub D_CCEX End Subprog AS_CCE8(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=8 : Gosub AS_CCEX End Subprog C_CCE8(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=8 : Gosub C_CCEX End Subprog D_CCE9(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=9 : Gosub D_CCEX End Subprog AS_CCE9(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=9 : Gosub AS_CCEX End Subprog C_CCE9(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=9 : Gosub C_CCEX End Subprog D_CCE10(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=10 : Gosub D_CCEX End Subprog AS_CCE10(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=10 : Gosub AS_CCEX End Subprog C_CCE10(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=10 : Gosub C_CCEX End Subprog D_CCE11(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=11 : Gosub D_CCEX End Subprog AS_CCE11(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=11 : Gosub AS_CCEX End Subprog C_CCE11(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=11 : Gosub C_CCEX End Subprog D_CCE12(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=12 : Gosub D_CCEX End Subprog AS_CCE12(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=12 : Gosub AS_CCEX End Subprog C_CCE12(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=12 : Gosub C_CCEX End Subprog D_CCE13(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=13 : Gosub D_CCEX End Subprog AS_CCE13(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=13 : Gosub AS_CCEX End Subprog C_CCE13(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=13 : Gosub C_CCEX End Subprog D_CCE14(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=14 : Gosub D_CCEX End Subprog AS_CCE14(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=14 : Gosub AS_CCEX End Subprog C_CCE14(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=14 : Gosub C_CCEX End Subprog D_CCE15(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=15 : Gosub D_CCEX End Subprog AS_CCE15(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=15 : Gosub AS_CCEX End Subprog C_CCE15(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=15 : Gosub C_CCEX End Subprog D_CCE16(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=16 : Gosub D_CCEX End Subprog AS_CCE16(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=16 : Gosub AS_CCEX End Subprog C_CCE16(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=16 : Gosub C_CCEX End Subprog D_CCE17(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=17 : Gosub D_CCEX End Subprog AS_CCE17(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=17 : Gosub AS_CCEX End Subprog C_CCE17(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=17 : Gosub C_CCEX End Subprog D_CCE18(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=18 : Gosub D_CCEX End Subprog AS_CCE18(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=18 : Gosub AS_CCEX End Subprog C_CCE18(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=18 : Gosub C_CCEX End Subprog D_CCE19(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=19 : Gosub D_CCEX End Subprog AS_CCE19(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=19 : Gosub AS_CCEX End Subprog C_CCE19(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=19 : Gosub C_CCEX End Subprog D_CCE20(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=20 : Gosub D_CCEX End Subprog AS_CCE20(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=20 : Gosub AS_CCEX End Subprog C_CCE20(VALEUR) Variable Char VALEUR() Local Integer AXE : AXE=20 : Gosub C_CCEX End $D_CCEX #------------------------------------# # Initialisation commune aux 20 axes # #------------------------------------# If AXE>GNBDIE Return : Endif Call INIT_CCE(VALEUR,AXE,"SOP","",0) From TRTX3CPT Return $AS_CCEX #----------------------------------# # Avant saisie commune aux 20 axes # #----------------------------------# # X3-69134 : Performance enhancements for sales order import : X3-74053 : Analytical dimensions management (LD:05/29/18) If AXE>GNBDIE Return : Endif # X3-69134 : Performance enhancements for sales order import : X3-74053 : Analytical dimensions management (LD:05/29/18) Call SAIS_CCE(VALEUR,AXE,"","") From TRTX3CPT Return $C_CCEX #-----------------------------# # Contrôle commun aux 20 axes # #-----------------------------# # X3-69134 : Performance enhancements for sales order import : X3-74053 : Analytical dimensions management (LD:05/29/18) If AXE>GNBDIE Return : Endif # X3-69134 : Performance enhancements for sales order import : X3-74053 : Analytical dimensions management (LD:05/29/18) Call CTRL_CCE(VALEUR,AXE,"",GFINRSP,[M:SOH0]ORDDAT) From TRTX3CPT #--CPO 74669 Import de commandes et contrôle sections (+modif obj SOH) If GIMPORT & mkstat GMESSAGE-="-"-mess(18,197,1)-num$(nolign)-mess(80,197,1)-[M:SOH4]ITMREF(nolign-1) Endif #--CPO Return ###################################################################################### # ------------------------------------ DEMSTA ------------------------ ######################################## Subprog AS_DEMSTA(VALEUR) : # --- Web - Obligatoire - Synchrone Variable Integer VALEUR Local Integer NOL : NOL=nolign-1 Raz GMESSAGE # --> Zone non modifiable si contremarque ou ordre de production(forcement du ferme) If find([M:SOH4]FMI(NOL),2,3,5) mkstat = 2 : Endif # --> Zone non modifiable si il y a des allocations / préparations / livraisons / factures #If [M]ALLQTY(NOL)<>0 | [M]SHTQTY(NOL)<>0 | [M]ODLQTY(NOL)<>0 | [M]DLVQTY(NOL)<>0 | [M]INVQTY(NOL)<>0 If [M]TALLQTY(NOL)<>0 | [M]SHTQTY(NOL)<>0 | [M]LPRQTY(NOL)<>0 mkstat = 2 Endif If mkstat=2 : End : Endif # --> On autorise uniquement les CF et CP For I=3 To 4:GMENLOC(I)=1:Next I End ######################################## Subprog AM_DEMSTA(VALEUR) Variable Integer VALEUR Local Integer NOL : NOL=nolign-1 # Il y a des nouvelles allocations If [M]WALLQTYSTU(NOL)-[M]ALLQTYSTU(NOL)+[M]SHTQTYSTU(NOL) > 0 Local Integer OK : OK=2 Call OUINON (mess(141,191,1)-mess(205,100,1), OK) From GESECRAN If OK=1 mkstat=2 : End : Endif Raz [M]WALLQTY(NOL), [M]WALLQTYSTU(NOL) Affzo [M]WALLQTY(NOL) Endif If [M]WIPFLG(NOL) = "" [M]WIPFLG(NOL) = "M" : Endif End # ------------------------------------ FMI ------------------------ ######################################## Subprog AS_FMI(VALEUR) : # --- Web - Obligatoire - Synchrone Variable Integer VALEUR Local Integer NOL : NOL=nolign-1 # Pas de saisie des ordres de transfert GMENLOC(4)=1 # Issue 117004 # Ctm directe interdit en intersite (intersociete et intrasociete) : Limite produit #If [M:SOH1]BETCPY=2 & [M:SOH1]BETFCY=2 GMENLOC(2)=1 Endif : # Bug 56462 : Interdire Ctm directe si inter-site inter-société If [M:SOH1]BETFCY=2 GMENLOC(2)=1 Endif : # Bug 56462 : Interdire Ctm directe si inter-site inter-société # End issue 117004 # --> Stock : Non modifiable s'il y a des allocations If VALEUR = 1 & [M]STOMGTCOD(NOL) <> 1 # If [M]ALLQTY(NOL)<>0 | [M]SHTQTY(NOL)<>0 | [M]ODLQTY(NOL)<>0 | [M]DLVQTY(NOL)<>0 | [M]INVQTY(NOL)<>0 If [M]TALLQTY(NOL)<>0 | [M]SHTQTY(NOL)<>0 | [M]LPRQTY(NOL)<>0 mkstat = 2 Endif Endif # GA 12/2010 contremarque de type EO FMI=6 # --> Contremarque : Non modifiable s'il y a une contremarque # ou des affectations existent (GH bug 85162 11/10/12) If (find(VALEUR,2,3,5,6) & [M]FMINUM(NOL) <> "") | & (VALEUR=1 & !find(GREP,"C","D") & & func MTOLINKLIB.LINK_EXISTS([M:SOH4]DSTOFCY(NOL), 2, [M:SOH0]SOHNUM, [M:SOH4]SOPLIN(NOL), [M:SOH4]SOPLIN(NOL), 1)) mkstat=2 Endif ## Ini SAM 107890/190--X3-4622 If [M]DLVFLG(NOL)=1 # Only Normal and PO direct for customer values are allowed For I=3 To 6:GMENLOC(I)=1:Next I Endif ## End SAM 107890/190--X3-4622 End ######################################## Subprog C_FMI(VALEUR) : # --- Web - Obligatoire - Synchrone Variable Integer VALEUR Local Integer NOL : NOL= nolign-1 If [F:ITM]ITMREF <> [M:SOH4]ITMREF(NOL) Read [F:ITM]ITM0 = [M:SOH4]ITMREF(NOL) If fstat Raz [F:ITM] : Endif Endif # Pas de contremarque receptionnée si on a pas le module achat If VALEUR = 3 & GMODU(6) <> 2 mkstat=2 : GMESSAGE=mess(157,192,1) : End Endif # Si article non acheté contremarque impossible #If (VALEUR = 2 | VALEUR = 3) & find([F:ITM]CLSTYP, 2,7) If (VALEUR = 2 | VALEUR = 3) & [F:ITM]PURFLG<>2 mkstat=2 : GMESSAGE=mess(50,192,1) : End Endif # Pas d'ordre de fabrication si on a pas le module production If VALEUR = 5 & GMODU(8) <> 2 mkstat=2 : GMESSAGE=mess(158,192,1) : End Endif # Si article non fabriqué ordre de fabrication impossible If VALEUR = 5 & [M]FMI(NOL)<>VALEUR Call CONTMFGITM([M]DSTOFCY(NOL), 1) From MFGLIB Endif # Aucune Contremarque ou Ordre de fabrication sur une ligne planifiée If find(VALEUR, 2,3,5) & [M]DEMSTA(NOL) <> 1 mkstat=2 : GMESSAGE = mess(156,192,1) Endif # Si FMI modifié et devient géré en stock : Ctrl article-site # Controle existance article-site si modif If find(VALEUR, 1,3,5) & VALEUR <> [M:SOH4]FMI(NOL) Call CONTITF([M]ITMREF(NOL),[M]DSTOFCY(NOL),[F:ITM]STOMGTCOD) From TRTVENCTL If mkstat=2 End Endif Endif # Bug 55476 : Kit géré en ctm : : Vérif que ts les composants st gérés en ctm If VALEUR=2 & [M]LINTYP(NOL)=2 Local Integer WFMICPE : WFMICPE=2 Local Integer ORI : ORI=NOL Gosub VERIF_KIT_CTM From TRTVENBOM If WFMICPE=1 mkstat=2 : GMESSAGE = mess(338,192,1)-":"-mess(339,192,1) : End Endif Endif End ######################################## Subprog AM_FMI(VALEUR) Variable Integer VALEUR Local Integer NOL : NOL= nolign-1 # Il y a des nouvelles allocations If [M]WALLQTYSTU(NOL)-[M]ALLQTYSTU(NOL)+[M]SHTQTYSTU(NOL) > 0 Local Integer OK : OK=2 Call OUINON (mess(141,191,1)-mess(205,100,1), OK) From GESECRAN If OK=1 mkstat=2 : End : Endif Endif If VALEUR = 2 # Si Contremarque directe : Pas de gestion des stocks [M]STOMGTCOD(NOL) = 1 [M]WIPFLG(NOL) = "A" Raz [M]WALLQTY(NOL), WALLQTYSTU(NOL) Affzo [M]WALLQTY(NOL) Else # Sinon Recharger STOMGTCOD [M]STOMGTCOD(NOL) = [F:ITM]STOMGTCOD If [F:ITM]STOMGTCOD <> 1 If [F:ITF]ITMREF<>[M]ITMREF(NOL) | [F:ITF]STOFCY<>[M]DSTOFCY(NOL) Read [ITF] ITF0=[M]ITMREF(NOL);[M]DSTOFCY(NOL) If fstat Raz [F:ITF] : Endif Endif [M]STOMGTCOD(NOL) = [F:ITF]STOMGTCOD Endif If [M]WIPFLG(NOL) = "" [M]WIPFLG(NOL) = "M" Endif Endif # --> Si contremarque : Forcage du type allocation à détaillé If !(VALEUR = 1) [M]DALLTYP(NOL) = 2 Else [M]DALLTYP(NOL) = [M:SOH2]ALLTYP Endif Affzo [M]DALLTYP(NOL) : # 94719 End # -------------------------------------------------------------------------------- # Etiquettes # -------------------------------------------------------------------------------- # -------------------------------------------------------------------------------- # Affichage des champs suite à la recherche tarif # -------------------------------------------------------------------------------- $AFF_RECH_TAR # Issue X3-126595 Gosub AFF_RECH_TAR From SUBSOH1 #If dim(GWEBSERV)=1 & GWEBSERV=1 Return Endif # #Affzo [M:SOH4]GROPRI(NOL) #If dim([M:SOH4]DISCRGVAL1(NOL))>0 Affzo [M:SOH4]DISCRGVAL1(NOL) Endif #If dim([M:SOH4]DISCRGVAL2(NOL))>0 Affzo [M:SOH4]DISCRGVAL2(NOL) Endif #If dim([M:SOH4]DISCRGVAL3(NOL))>0 Affzo [M:SOH4]DISCRGVAL3(NOL) Endif #If dim([M:SOH4]DISCRGVAL4(NOL))>0 Affzo [M:SOH4]DISCRGVAL4(NOL) Endif #If dim([M:SOH4]DISCRGVAL5(NOL))>0 Affzo [M:SOH4]DISCRGVAL5(NOL) Endif #If dim([M:SOH4]DISCRGVAL6(NOL))>0 Affzo [M:SOH4]DISCRGVAL6(NOL) Endif #If dim([M:SOH4]DISCRGVAL7(NOL))>0 Affzo [M:SOH4]DISCRGVAL7(NOL) Endif #If dim([M:SOH4]DISCRGVAL8(NOL))>0 Affzo [M:SOH4]DISCRGVAL8(NOL) Endif #If dim([M:SOH4]DISCRGVAL9(NOL))>0 Affzo [M:SOH4]DISCRGVAL9(NOL) Endif #Affzo [M:SOH4]REPCOE(NOL) #Affzo [M:SOH4]NETPRI(NOL) # End issue X3-126595 Return # ------------------------------------------------------------------------------------- # Pour kit/sous-traité, si qté livrable calculée par rapport rupture des composants < qté allouée # --> Affichage en vert des champs référence article, qté allouée et qté à allouer # ------------------------------------------------------------------------------------- $COLOR_KIT pcolor=GCOUL(0) If find([M]LINTYP(nolign-1),2,10) & [M]DLBQTYSTU(nolign-1)<([M]ALLQTYSTU(nolign-1)+[M]SHTQTYSTU(nolign-1)) pcolor=GCOUL(2) Endif Return # --------------------------------------------------------------------- # # ETIQUETTES UTILISEES PAR ACTION SAISTOALL (ALLOCATIONS MANUELLES) # # # # Appelées depuis TRTSTOALLA # # --------------------------------------------------------------------- # #---------------------------------------------------------------------- # # Action avant bouton : Vérifications au préalable # # Si GNOTALL=1 Pas d'ouverture de la fenêtre allocations manuelles # # Verrou de la commande # #---------------------------------------------------------------------- # $AB12_NBLIG Local Integer OK, NOL NOL=nolign-1 # -- Commande vérouillée Global Integer GLOCKSUP # X3-98359 Locked symbol after manual allocation (LCC-06/08/18) Gosub VERROU_SOH From SUBSOHA ### If GERR = 1 Then GNOTALL = 1 Return Endif If func MANHLDLIB.BLK_ALLOC([M:SOH1]HLDSTA,[M:SOH1]HLDCOD) Then # order holds GMESSAGE = mess(13,492,1) GNOTALL=1 Return Endif If [M:SOH1]CDTSTA = 3 Then # -- Commande avec Dépassement en-cours If !([M:SOH1]BETFCY = 2 & [M:SOH1]BETCPY <> 2) or GCTLBETFCY = 2 Then # FGR 10/03/2015 : X3SUIVI23273 - Si pas (Intersit & non intersoc) ou si Ctrl intersit encours&prix If GCDTUNL = 1 Then Call ERREUR(mess(101,197,1)) From GESECRAN GNOTALL=1 Return Else OK=1 Call AVERTIR(mess(17,191,1), OK) From GESECRAN If OK=1 Then GNOTALL=1 Return Endif Endif Endif Elsif [M:SOH1]CDTSTA = 4 Then # -- Commande avec Acomptes non versés OK=1 Call AVERTIR(mess(18,191,1), OK) From GESECRAN If OK=1 Then GNOTALL=1 Return Endif Endif # -- Ligne de contremarque If find([M:SOH4]FMI(NOL),3,5) Then If [M:SOH4]FMI(NOL)=3 Then GMESSAGE=mess(281,197,1) If [M:SOH4]FMINUM(NOL)<>"" Then GMESSAGE-=":"-mess(142,191,1) Endif Endif If [M:SOH4]FMI(NOL)=5 Then GMESSAGE=mess(280,197,1) If [M:SOH4]FMINUM(NOL)<>"" Then GMESSAGE-=":"-mess(143,191,1) Endif Endif OK=1 Call OUINON (GMESSAGE-"\"-mess(205,100,1), OK) From GESECRAN Raz GMESSAGE If OK=1 Then GNOTALL=1 Return Endif Endif # -- Ligne allouée en Global : On demande si on veut l'allouer en détaillé If [M:SOH4]DALLTYP(NOL)=1 OK=1 Call OUINON (mess(144,191,1), OK) From GESECRAN If OK=1 Then GNOTALL=1 Return Endif Endif Return #---------------------------------------------------------------------- # # Déverrou de la commande # #---------------------------------------------------------------------- # $BB12_NBLIG # Si GCONSULT=0, le verrou a été positionné par l'objet SOH : on ne fait rien # Si GCONSULT=2, le verrou a été positionné en avant bouton, il faut déverouiller # X3-98359 Locked symbol after manual allocation (LCC-06/08/18) # If GCONSULT=2 Unlock=SYMBOLE2 Endif If GLOCKSUP=0 or GCONSULT=2 Unlock=SYMBOLE2 Endif Kill GLOCKSUP # End X3-98359 Locked symbol after manual allocation (LCC-06/08/18) Gosub FORCE_RECOVERED_AUPDTICK From SUBSOHA # FGR 07/07/2015 : X3SUIVI109276 Return ###################################################################################### ## Etiquette ajoutée par le superviseur (écran SOH3) 19/05/2008 15:05:16 (ACA) ###################################################################################### Subprog IB_NBFAC If GREP = "C" IJ1=-1 For IJ0 = 0 To dim([M:SFIT]DTA)-1 If [M:SFIT]DTA(IJ0)=[M:SOH3]INVDTA(nolign-1) and [M:SFIT]ORI(IJ0)=0 IJ1=IJ0 Break Endif Next If IJ1=-1 Raz GBOUT3 Endif Else Raz GBOUT3 Endif End Subprog B3_NBFAC If GREP="C" Call DEL_NBTRF_ORI0([M:SOH3]INVDTA(nolign-1), "M", "SOH3") From SUBSFIT Endif End ###################################################################################### ## Etiquette ajoutée par le superviseur (écran SOH3) 03/12/2008 15:42:36 (ACA) ###################################################################################### Subprog APRES_NBFAC # ACA - Pour mise à jour du Format le cas échéant Affzo [M:SOH3]INVDTAAMT(nolign-1) End ###################################################################################### # pour la navigation vers le plan d'affectation $MEM_VCR # Issue X3-126595 Gosub MEM_VCR From SUBSOH1 #If find(GREP,"C","D") # If dim(GVCR)=1 : # If dim(GVCR) : # GH 24/10/12 bug 85427 # Raz GVCR, GLIN, GSEQ # Endif # Return #Endif #If dim(GVCR) < 0 # Global Char GVCR # Global Integer GLIN # Global Integer GSEQ #Endif # #GVCR = [M:SOH0]SOHNUM #GLIN = [M:SOH4]SOPLIN(nolign-1) #GSEQ = [M:SOH4]SOPLIN(nolign-1) # End issue X3-126595 Return ###################################################################################### ###################################################################################### ## Etiquette ajoutée par le superviseur (écran SOH2) 29/12/2010 14:43:56 (CPO) ###################################################################################### #CPO 70249 - Modification du mode de livraison Subprog AM_MDL(VALEUR) Variable Char VALEUR() If VALEUR="" # -- plus de mode de livraison => Raz de EECLOC, EECTRN ? Else If !clalev([F:TMD]) : Local File TABMODELIV [TMD] : Endif :# Modes de livraison # -- le mode de livraison a changé => # -- MAJ de EECICT, EECLOC, ICTCTY depuis le paramétrage des modes de livraisons If [F:TMD]MDL<>VALEUR Read [F:TMD]TMD0=VALEUR If fstat : Raz [F:TMD] : Endif Endif If dim([M:SOH0]EECICT)>0 : [M:SOH0]EECICT = [F:TMD]EECICT : Endif If dim([M:SOH2]EECICT)>0 : [M:SOH2]EECICT = [F:TMD]EECICT : Affzo [M:SOH2]EECICT : Endif :#-- CPO 65018 If dim([M:SOH0]EECLOC)>0 [M:SOH0]EECLOC = [F:TMD]EECLOC Endif #Raz [M:SOH0]ICTCTY :# Raz de la ville ? #Raz [M:SOH2]BPTNUM :# Raz du transporteur ? Endif End ###################################################################################### Subprog AM_EECICT(VALEUR) Variable Char VALEUR() #-- CPO 65018 [M:SOH0]EECICT = VALEUR End Subprog AM_ICTCTY(VALEUR) Variable Char VALEUR() #-- CPO 65018 [M:SOH0]ICTCTY = VALEUR End ###################################################################################### Subprog IB_BPCORD End ###################################################################################### Subprog IB_ORDINVATI Call IB_LTAINVATI(2) From TRTTAXUSA # Display SST button or not End ###################################################################################### Subprog AS_SFISSTCOD(VALEUR) Variable Char VALEUR() #101380 - Do not alow updating of SST code for certain cases. #See SUBSFIT for setting of override flag. If [M:SOH3]SFISSTOVRFLG(nolign-1)=1 : mkstat=2 : Endif End ###################################################################################### ## Etiquette ajoutée par le superviseur (écran SOH1) 06/03/2015 10:04:39 (FGR) ###################################################################################### Subprog CL_HLDBTN(VALEUR) Variable Char VALEUR() # FGR 06/03/2015 : X3SUIVI106789 : Pour forcer la relecture après l'exécution du Click mkstat = GSTALIT End ###################################################################################### ## Etiquette ajoutée par le superviseur (écran SOH1) 06/03/2015 10:26:52 (FGR) ###################################################################################### Subprog CL_CDTBTN(VALEUR) Variable Char VALEUR() # FGR 06/03/2015 : X3SUIVI106789 : Pour forcer la relecture après l'exécution du Click mkstat = GSTALIT End ###################################################################################### Subprog AS_ECCVALMAJ(VALEUR) Variable Char VALEUR() # FGR 01/04/2015 : X3SUIVI105605 Gosub ECCVALMAJMIN_ENABLE End ###################################################################################### Subprog AS_ECCVALMIN(VALEUR) Variable Char VALEUR() # FGR 01/04/2015 : X3SUIVI105605 Gosub ECCVALMAJMIN_ENABLE End # 105605 : CCM - Revision index (LD:18/06/15) ###################################################################################### Subprog AM_ECCVALMIN(VALEUR) Variable Char VALEUR() Local Integer NOL : NOL=nolign-1 Gosub ECCVALMAJMIN_CTM If mkstat=2 End Endif If [M]WIPFLG(NOL) = "" [M]WIPFLG(NOL) = "M" : Endif : # Issue 114112 End # 105605 : CCM - Revision index (LD:18/06/15) ###################################################################################### Subprog C_ECCVALMAJ(VALEUR) Variable Char VALEUR() Local Integer LRET Local Integer NOL Local Integer IOK # FGR 10/04/2015 : X3SUIVI105605 NOL = nolign-1 Call CTLECCVAL(VALEUR, [M:SOH4]DSTOFCY(NOL), [M:SOH4]ITMREF(NOL), 4, "", [M:SOH4]DSHIDAT(NOL), LRET) From STKSOR If LRET > 1 Then mkstat = 2 End Elsif LRET = 1 Then IOK = [V]CST_AYES Call AVERTIR (GMESSAGE, IOK) From GESECRAN Raz GMESSAGE If IOK = 1 Then mkstat = 2 End Endif Endif End ###################################################################################### Subprog AM_ECCVALMAJ(VALEUR) Variable Char VALEUR() Local Char WECCVALMAJ(GLONECS) Local Char WECCVALMIN(GLONICVVAL) Local Char PITM(GLONITM) # 105605 : CCM - Revision index (LD:18/06/15) Local Integer NOL : NOL=nolign-1 Gosub ECCVALMAJMIN_CTM If mkstat=2 End Endif # 105605 : CCM - Revision index (LD:18/06/15) If [M]WIPFLG(NOL) = "" [M]WIPFLG(NOL) = "M" : Endif : # Issue 114112 # FGR 10/04/2015 : X3SUIVI105605 Raz PITM # si version majeure trouvée et si article gere la version mineure : recherche derniere version mineure If [F:ITM]ITMREF <> [M:SOH4]ITMREF(nolign-1) Then Read [ITM]ITM0=[M:SOH4]ITMREF(nolign-1) Endif If VALEUR <> "" and [F:ITM]ECCSTO = 3 Then WECCVALMAJ = VALEUR PITM = [F:ITM]ITMREF Gosub READECCMIN From STKACT [M:SOH4]ECCVALMIN(nolign-1) = WECCVALMIN Affzo [M:SOH4]ECCVALMIN(nolign-1) Elsif VALEUR = "" and [M:SOH4]ECCVALMIN(nolign-1) <> "" Then Raz [M:SOH4]ECCVALMIN(nolign-1) Affzo [M:SOH4]ECCVALMIN(nolign-1) Endif End ###################################################################################### $ECCVALMAJMIN_ENABLE # Issue X3-126595 Gosub ECCVALMAJMIN_ENABLE From SUBSOH1 # # FGR 01/04/2015 : X3SUIVI105605 # If [M:SOH4]TALLQTYSTU(nolign-1) > 0 Then # mkstat = 2 # Endif # If find([M:SOH4]LINTYP(nolign-1),3,4,5,11,12,13) Then # mkstat = 2 # Endif # End issue X3-126595 Return # 105605 : CCM - Revision index (LD:18/06/15) # -------------------------------------------------- # # Contrôle lié à la contremarque : # # -------------------------------------------------- # $ECCVALMAJMIN_CTM # Issue X3-126595 Gosub ECCVALMAJMIN_CTM From SUBSOH1 #Local Integer WOK : WOK=2 # #If [M:SOH4]FMINUM(NOL) = "" Return Endif # #If [M:SOH4]FMI(NOL)=2 # # Cette ligne a fait l'objet d'une contremarque directe # GMESSAGE = mess(270,191,1) : mkstat = 2 #Elsif [M:SOH4]FMI(NOL)=3 # # Cette ligne a fait l'objet d'une contremarque réceptionnée # GMESSAGE = mess(271,191,1) # If GMODU(6)=2 # Local File PORDER [POH] # Read [POH]POH0=[M:SOH4]FMINUM(NOL) # If fstat Raz [F:POH] Endif # # La commande d'achat est imprimée # If [F:POH]PRNFLG=2 GMESSAGE= GMESSAGE+"."-mess(272,191,1) Endif # Endif # Call AVERTIR(GMESSAGE,WOK) From GESECRAN # Raz GMESSAGE # If WOK=1 mkstat=2 Endif #Elsif [M:SOH4]FMI(NOL)=5 # # Cette ligne a fait l'objet d'une ordre de fabrication # GMESSAGE = mess(269,191,1) : mkstat = 2 #Endif # End issue X3-126595 Return # 105605 : CCM - Revision index (LD:18/06/15) ###################################################################################### Subprog C_DSTOFCY(VALEUR) Variable Char VALEUR() Local Integer LRET Local Integer NOL # FGR 10/04/2015 : X3SUIVI105605 If dim([M:SOH4]ECCVALMAJ) >= 0 Then NOL = nolign-1 Call CTLECCVAL([M:SOH4]ECCVALMAJ(NOL), VALEUR, [M:SOH4]ITMREF(NOL), 4, "", [M:SOH4]DSHIDAT(NOL), LRET) From STKSOR If LRET > 1 Then mkstat = 2 Endif Endif End ###################################################################################### # 106776- EDI fields ###################################################################################### Subprog D_DEMDLVHOU(VALEUR) Variable Char VALEUR() Gosub CTL_D_DEMDLVHOU From TRTFLDEDI End Subprog AM_DEMDLVHOU(VALEUR) Variable Char VALEUR() # X3-187783_Update_of_Sales_order_with_no_expected_delivery_time (JUCON 2020-03-19) # Gosub CTL_DEMDLVHOU If VALEUR<>"0000": Gosub CTL_DEMDLVHOU From TRTFLDEDI: Endif End Subprog C_MAXDLVDAT(VALEUR) Variable Date VALEUR Gosub CTL_MAXDLVDAT From TRTFLDEDI End Subprog C_MAXDLVHOU(VALEUR) Variable Char VALEUR() Gosub CTL_MAXDLVHOU From TRTFLDEDI End Subprog C_USELIMDAT(VALEUR) Variable Date VALEUR Gosub CTL_USELIMDAT From TRTFLDEDI End # 106776- EDI fields ###################################################################################### Subprog AS_DDEMDLVDAT(VALEUR) Variable Date VALEUR ## 107890: Scheduled invoices: (LC:15/11/16) If [M:SOH4]DLVFLG(nolign-1)<>2 & [M:SOH0]SOHCAT=1 mkstat=2 End Endif End ###################################################################################### ## Section automatically added (screen SOH4) 12/23/2016 13:08:21 (JUCON) ###################################################################################### Subprog AM_VACITM2(VALEUR) Variable Char VALEUR() # Ini SAM 85188 Taxes avec formule sur lignes document JUCON 23/12/2016 # --> Calcul des montants de base calcul de taxe Local Decimal WUNTCLCAMT1, WUNTCLCAMT2 : Raz WUNTCLCAMT1, WUNTCLCAMT2 Local Integer NOL: NOL=nolign-1 If [M]QTY(NOL) <> 0 WUNTCLCAMT1=[M]CLCAMT1(NOL)/[M]QTY(NOL) : WUNTCLCAMT2=[M]CLCAMT2(NOL)/[M]QTY(NOL) Endif Call ALICLCAMT([M:SOH4]ITMREF(NOL),[M]QTY(NOL), NOL, "SOH4", [M:SOH4]CLCAMT1(NOL), [M:SOH4]CLCAMT2(NOL)) From TRTX3 # End SAM 85188 Taxes avec formule sur lignes document JUCON 23/12/2016 Gosub UPD_PREP_MESS From SUBSOHA1 # X3-246884 By SDEM End Subprog AM_VACITM3(VALEUR) Variable Char VALEUR() # Ini SAM 85188 Taxes avec formule sur lignes document JUCON 23/12/2016 # --> Calcul des montants de base calcul de taxe Local Decimal WUNTCLCAMT1, WUNTCLCAMT2 : Raz WUNTCLCAMT1, WUNTCLCAMT2 Local Integer NOL: NOL=nolign-1 If [M]QTY(NOL) <> 0 WUNTCLCAMT1=[M]CLCAMT1(NOL)/[M]QTY(NOL) : WUNTCLCAMT2=[M]CLCAMT2(NOL)/[M]QTY(NOL) Endif Call ALICLCAMT([M:SOH4]ITMREF(NOL), [M]QTY(NOL), NOL, "SOH4", [M:SOH4]CLCAMT1(NOL), [M:SOH4]CLCAMT2(NOL)) From TRTX3 # End SAM 85188 Taxes avec formule sur lignes document JUCON 23/12/2016 Gosub UPD_PREP_MESS From SUBSOHA1 # X3-246884 By SDEM End ###################################################################################### ###################################################################################### ## Etiquette ajoutée par le superviseur (écran SOH4) 12/01/2017 09:36:01 (LD) ###################################################################################### Subprog IB_PCK End ###################################################################################### #issue X3-132902 by VAVIL Subprog AS_ITMDES(VALEUR) Variable Char VALEUR() If func PORLEGLIB.PORLEG([M:SOH0]SALFCY, "")=1 mkstat = 2 Endif End #end issue X3-132902 ###################################################################################### # Issue X3-110981/189977 - 2020-06-10 by MUARN : strict control of PJT Subprog C_PJT(VALEUR) Variable Char VALEUR() #!!!!!!!! # BE CARFUL # same process in INIITMORI from TRTVENBOM # the check of strit control of PJT must be done here in C_PJT and not in AM_PJT # to check before the question data type to modify the line # so if no modification no control If VALEUR=[M:SOH1]PJT : End : Endif If [M:SOH4]NBLIG = 0 : End : Endif If !func ASYRFNC.ACTIV("PJM") : End : Endif Local Integer IRET Local Integer WRET : Raz WRET Local Char WOLDPJT(GLONPJT) : WOLDPJT=[M:SOH1]PJT Local Char WNEWPJT(GLONPJT) : WNEWPJT=VALEUR Local Char WNEWPROJECT(GLONPIM) Local Char WNEWBUDGET(GLONPBU) Local Char WNEWTASK(GLONTAC) IRET = func PIMPL_CSTD_PROGS.PJM_KEY_SPLIT(GACTX, WNEWPJT, WNEWPROJECT, WNEWBUDGET, WNEWTASK) Local Char WOLDPROJECT(GLONPIM) Local Char WOLDBUDGET(GLONPBU) Local Char WOLDTASK(GLONTAC) IRET = func PIMPL_CSTD_PROGS.PJM_KEY_SPLIT(GACTX, WOLDPJT, WOLDPROJECT, WOLDBUDGET, WOLDTASK) # 200515 : Progress billing / X3-199457 : Control on sales order lines associated to a billing plan - 2020-07-16 by LD #If WOLDPROJECT=WNEWPROJECT : End : Endif # 200515 : Progress billing / X3-199457 : Control on sales order lines associated to a billing plan - 2020-07-16 by LD Gosub C_PJT_PJTMST_CTRL From LIBSAL_INVCND_SOH # 200515 : Progress billing / X3-199457 : Control on sales order lines associated to a billing plan - 2020-07-16 by LD If GERR=1 mkstat=2 : Raz GERR Endif #If GERR = 1 # Local Integer WOK # If GPJTSNGDOC = G_NON Then # WOK=2 # Call AVERTIR (GMESSAGE, WOK) From GESECRAN # Else # WOK=1 # Call ERREUR(GMESSAGE) From GESECRAN # Endif # Raz GERR, GMESSAGE # If WOK = 1 # mkstat=2 # Endif #Endif # 200515 : Progress billing / X3-199457 : Control on sales order lines associated to a billing plan - 2020-07-16 by LD End ############################################################################################# # # # SUBSOH1 : TRAITEMENTS STANDARDS UTILISES DANS LES COMMANDES DE VENTE # # # ############################################################################################# ############################################################################################# # # # Etiquettes appelées par TRTSTOALLA # # # # $CHARGE_STOALL : Chargement des paramètres dans masque STOALL # # $AVANT_STOALL : Contrôle avant enregistrement # # $APRES_STOALL : Mise à jour complémentaires après enregistrement # ############################################################################################# # # # Etiquettes/sous-pro appelées par SUBSOH # # # # $TRT_CTM : Traitement d'un article géré en contremarque # # $VERIF_CPSALLQTY : Si composé nomenclature : msg avert. si pour un composant Qté cdée < Total alloué # # $INIT_WALLQTYSTU : Traitement d'un article géré en contremarque # # $INIT_DAT : Initialisation des dates entête commande : date expédition et date de livraison demandée # # # $P1_NBLIG # $P2_NBLIG # B4_NBLIG # $ECCVALMAJMIN_ENABLE # Issue X3-126595 # $ECCVALMAJMIN_CTM # Issue X3-126595 # $MEM_VCR # Issue X3-126595 # $AFF_RECH_TAR # Issue X3-126595 # $CTL_PJT_COMPATIBILITY # 139565 : Milestone billing / X3-185425 - 2020-03-19 by LD ######################################################################################################### # Issue X3-126595 - 20190213 by LD : Error in prices for the options in a kit when the sales order is created via a webservice #---------------------------------------------------------------------- # # Chargement des paramètres dans masque STOALL # # Cette étiquette est appelée depuis CHARGE_PARAM From TRTSTOALLA # #---------------------------------------------------------------------- # $CHARGE_STOALL # Chargement du masque [M:ALL] Local Decimal WTOT, WTOTSTU #Local Char LWRH(GLONWRH) #Local Integer LEXC Raz [M:ALL] [M:ALL]VCRTYP=2 [M:ALL]VCRNUM=[M:SOH0]SOHNUM [M:ALL]VCRLIN=[M:SOH4]SOPLIN (LNOL) [M:ALL]VCRSEQ=[M:SOH4]SOPLIN (LNOL) [M:ALL]PCU=[M:SOH4]SAU (LNOL) [M:ALL]STU=[M:SOH4]STU (LNOL) [M:ALL]PCUSTUCOE=[M:SOH4]SAUSTUCOE (LNOL) [M:ALL]BPCORD=[M:SOH0]BPCORD [M:ALL]BPAADD=[M:SOH4]DBPAADD(LNOL) # Quantité besoin en allocation = commandé - déjà préparé/livré/facturé # Recalcul du déjà préparé/livré/facturé WTOTLIV=[M:SOH4]TALLQTYSTU(LNOL) - [M:SOH4]ALLQTYSTU(LNOL) [M:ALL]RETQTY = [M:SOH4]QTYSTU(LNOL) - WTOTLIV If [M:ALL]RETQTY < 0 [M:ALL]RETQTY = 0 Endif [M:ALL]OLDALLQTY = [M:SOH4]ALLQTYSTU(LNOL) [M:ALL]SHTQTY = [M:SOH4]SHTQTYSTU(LNOL) # Alimentation de la qté à allouer [M:ALL]QTYTOALL = [M:SOH4]WALLQTYSTU(LNOL) # Alimentation de la qté déjà allouée en global Raz [M:ALL]GLOALLQTY : If [M:SOH4]DALLTYP(LNOL)=1 [M:ALL]GLOALLQTY=[M:SOH4]ALLQTYSTU(LNOL) Endif [M:ALL]ALLTYP = [M:SOH4]DALLTYP(LNOL) # 88827 : La date besoin doit tjs être alimentée avec la date d'expédition pour respecter l'ordre chronologique des ddes d'allocation #[M:ALL]RETDAT = max(date$, [M:SOH4]DSHIDAT(LNOL)) [M:ALL]RETDAT = [M:SOH4]DSHIDAT(LNOL) # 88827 [M:ALL]DLVDAT = max(date$, [M:SOH4]EXTDLVDAT(LNOL)) [M:ALL]PECINTLOC = 2 [M:ALL]PECPLFLOC = 2 : # Prise en cpte empl quai : Oui [M:ALL]XLOT = [M:SOH4]LOT(LNOL) [M:ALL]XLOC = [M:SOH4]LOC(LNOL) [M:ALL]XSTA = [M:SOH4]STA(LNOL) # FGR 04/05/2015 : X3SUIVI105605 (début) If dim([M:SOH4]ECCVALMAJ) >= 0 Then [M:ALL]WECCVALMAJ = [M:SOH4]ECCVALMAJ(LNOL) Endif # FGR 04/05/2015 : X3SUIVI105605 (fin) GTYPLIG=0 If find([M:SOH4]LINTYP(LNOL),3,4,5,11,12,13) GTYPLIG=1 Endif If find([M:SOH4]FMI(LNOL), 3,5) GTYPLIG=2 Endif If find([M:SOH4]LINTYP(LNOL),3,4,5,11,12,13) Diszo [M:ALL]QTYTOALL Endif # Récupération du paramêtre stock : Génération de ruptures Local Char WPARAM(10) Call PARAML([M:SOH4]DSTOFCY(LNOL),"GENSHT",WPARAM) From ADOVAL # FGR 28/07/2015 : X3SUIVI108078 : Plus Call PARAM (performances) GGENSHT=val(WPARAM) # Commande de prêt If [M:SOH0]SOHCAT=2 GPRET = 1 Else GPRET = 0 Endif Return #---------------------------------------------------------------------- # # Contrôle avant enregistrement # # Si contrôle non OK, mettre OK=0 pour ne pas enregister # # Cette étiquette est appelée depuis AVANT_ENR From TRTSTOALLA # #---------------------------------------------------------------------- # $AVANT_STOALL # Quantité totale <> quantité à allouer If [M:ALL]PECQTY < [M:ALL]QTYTOALL OK = 2 # Livraison ligne/cde complète : On doit tout allouer If find([M:SOH2]DME,2,3) Call OUINON(mess(107,191,1),OK) From GESECRAN Endif If OK <> 2 FOK=0 : Return : Endif Endif Return #---------------------------------------------------------------------- # # Mise à jour complémentaires après enregistrement # # Si problème mettre GOK=0 pour annuler l'enregistrement # # Cette étiquette est appelée depuis APRES_ENR From TRTSTOALLA # #---------------------------------------------------------------------- # $APRES_STOALL Local Integer NL, WRET Local Decimal WALLSTU Local Char WTRTLIG(1) #[M:ALL]ALLTYP=2 If WCSOQTY<>0 Local Char WVCRRER WVCRRER = format$("K:"+num$(GLONBPC)+"X", [M:ALL]BPCORD)+format$("K:"+num$(GLONBPD)+"X", [M:ALL]BPAADD) WVCRRER = vireblc(WVCRRER, 1) # Si consommation des réservations clients : Maj de l'encours correspondant Call MAJORDBPC(1,WVCRRER,[M:SOH4]ITMREF(LNOL),[M:SOH4]DSTOFCY(LNOL),WCSOQTY,WRET) From TRTVENALL If WRET <> 0 GOK=0 : Return Endif Endif # Mise à jour commande Call MAJALLORD([M:ALL]VCRNUM, [M:ALL]VCRLIN, [M:ALL]VCRSEQ, [M:ALL]ALLTYP, 1, WALLQTY, WSHTQTY, WRET) From TRTVENALL If WRET <> 0 : GOK = 0 : Return : Endif # Si Composé de kit, il faut allouer les composants WALLSTU=WALLQTY+WSHTQTY WALLSTU=WALLSTU-([M:SOH4]ALLQTYSTU(LNOL)+[M:SOH4]SHTQTYSTU(LNOL)) Raz WTRTLIG If find([M:SOH4]LINTYP(LNOL),2,10) & WALLSTU <> 0 If WALLSTU < 0 # ----- C'est une diminution/annulation de l'allocation WTRTLIG = "D" WALLSTU = abs(WALLSTU) Elsif WALLSTU > 0 # ----- C'est une augmentation de l'allocation If [M:SOH4]ALLQTYSTU(LNOL) = 0 & [M:SOH4]SHTQTYSTU(LNOL) = 0 WTRTLIG = "C" Else WTRTLIG = "M" Endif WALLSTU=WALLQTY+WSHTQTY Endif Call GENALLKIT ([M:ALL]VCRNUM, [M:ALL]VCRLIN, [M:ALL]VCRSEQ, WTRTLIG, GRERBPC, 2, 0, 1, 0, WALLSTU, & WRET) From TRTVENALL If WRET <> 0 GOK=0 : Return : Endif Endif # Réaffichage du masque [M:SOH4] If [F:SOH]SOHNUM <> [M:SOH0]SOHNUM Read [SOH]SOH0=[M:SOH0]SOHNUM If fstat : Return : Endif Endif [M:SOH1]ALLSTA = [F:SOH]ALLSTA If [F:SOQ]SOHNUM<>[M:SOH0]SOHNUM | [F:SOQ]SOPLIN<>[M:SOH4]SOPLIN(LNOL) | [F:SOQ]SOQSEQ<>[M:SOH4]SOPLIN(LNOL) Read [SOQ]SOQ0=[M:SOH0]SOHNUM;[M:SOH4]SOPLIN(LNOL);[M:SOH4]SOPLIN(LNOL) If fstat : Return : Endif Endif [M:SOH4]ALLQTY(LNOL) = [F:SOQ]ALLQTY [M:SOH4]ALLQTYSTU(LNOL) = [F:SOQ]ALLQTYSTU [M:SOH4]SHTQTY(LNOL) = [F:SOQ]SHTQTY [M:SOH4]SHTQTYSTU(LNOL) = [F:SOQ]SHTQTYSTU [M:SOH4]DALLTYP(LNOL) = [F:SOQ]ALLTYP [M:SOH4]TALLQTYSTU(LNOL) = sum([F:SOQ]ALLQTYSTU,[F:SOQ]ODLQTYSTU,[F:SOQ]OPRQTYSTU,[F:SOQ]PREQTYSTU) [M:SOH4]TALLQTY(LNOL) = sum([F:SOQ]ALLQTY,[F:SOQ]ODLQTY,[F:SOQ]OPRQTY,[F:SOQ]PREQTY) If [M:SOH0]SOHCAT = 3 [M:SOH4]TALLQTYSTU(LNOL) += [F:SOQ]INVQTYSTU [M:SOH4]TALLQTY(LNOL) += [F:SOQ]INVQTY Else [M:SOH4]TALLQTYSTU(LNOL) += [F:SOQ]DLVQTYSTU [M:SOH4]TALLQTY(LNOL) += [F:SOQ]DLVQTY Endif # --- Qté à allouer = Qté déjà allouée [M:SOH4]WALLQTY(LNOL) = [F:SOQ]ALLQTY + [F:SOQ]SHTQTY [M:SOH4]WALLQTYSTU(LNOL)= [F:SOQ]ALLQTYSTU + [F:SOQ]SHTQTYSTU [M:SOH4]YALLQTY(LNOL) = [M:SOH4]ALLQTY(LNOL) [M:SOH4]YSHTQTY(LNOL) = [M:SOH4]SHTQTY(LNOL) Raz [M:SOH4]DLBQTYSTU (LNOL) # Si kit/sous-traité, sauvegarde de l'indice du kit et de la qté cdée pour calcul qté livrable If find([M:SOH4]LINTYP(LNOL),2,10) Local Decimal WKIT_QTYSTU : Raz WKIT_QTYSTU If [M:SOH4]ALLQTYSTU(LNOL)<>0 WKIT_QTYSTU=[M:SOH4]QTYSTU(LNOL) [M:SOH4]DLBQTYSTU(LNOL)=[M:SOH4]ALLQTYSTU(LNOL) Endif Endif Affzo [M:SOH1]ALLSTA If find([M:SOH4]LINTYP(LNOL),2,10) & WTRTLIG<>"" # composé kit ou sous-traité : il faut réafficher tous les composants NL=LNOL+1 While find([M:SOH4]LINTYP(NL),3,4,5,11,12,13) & NL < [M:SOH4]NBLIG Read [SOQ]SOQ0=[M:SOH0]SOHNUM;[M:SOH4]SOPLIN(NL);[M:SOH4]SOPLIN(NL) If fstat : Break : Endif [M:SOH4]ALLQTY(NL) = [F:SOQ]ALLQTY [M:SOH4]ALLQTYSTU(NL) = [F:SOQ]ALLQTYSTU [M:SOH4]SHTQTY(NL) = [F:SOQ]SHTQTY [M:SOH4]SHTQTYSTU(NL) = [F:SOQ]SHTQTYSTU [M:SOH4]DALLTYP(NL) = [F:SOQ]ALLTYP [M:SOH4]TALLQTYSTU(NL)= sum([F:SOQ]ALLQTYSTU,[F:SOQ]ODLQTYSTU,[F:SOQ]OPRQTYSTU,[F:SOQ]PREQTYSTU) [M:SOH4]TALLQTY(NL) = sum([F:SOQ]ALLQTY,[F:SOQ]ODLQTY,[F:SOQ]OPRQTY,[F:SOQ]PREQTY) If [M:SOH0]SOHCAT = 3 [M:SOH4]TALLQTYSTU(NL) += [F:SOQ]INVQTYSTU [M:SOH4]TALLQTY(NL) += [F:SOQ]INVQTY Else [M:SOH4]TALLQTYSTU(NL) += [F:SOQ]DLVQTYSTU [M:SOH4]TALLQTY(NL) += [F:SOQ]DLVQTY Endif # --- Qté à allouer = Qté déjà allouée [M:SOH4]WALLQTY(NL) = [F:SOQ]ALLQTY + [F:SOQ]SHTQTY [M:SOH4]WALLQTYSTU(NL) = [F:SOQ]ALLQTYSTU + [F:SOQ]SHTQTYSTU [M:SOH4]YALLQTY(NL) = [M:SOH4]ALLQTY(NL) [M:SOH4]YSHTQTY(NL) = [M:SOH4]SHTQTY(NL) # Si composant de kit en rupture, calcul de la qté livrable pour le kit # --- Qté livrable = Qté allouée du kit - Qté Rupture ramenée au niveau kit If dim(WKIT_QTYSTU)>0 & WKIT_QTYSTU<>0 & [M:SOH4]SHTQTYSTU(NL)>0 Local Decimal WRAPPORT : WRAPPORT=WKIT_QTYSTU / [M:SOH4]QTYSTU(NL) Local Decimal WDLBQTYSTU : WDLBQTYSTU=[M:SOH4]WALLQTYSTU(LNOL)-arr([M:SOH4]SHTQTYSTU(NL)*WRAPPORT,0.000001) If WDLBQTYSTU<[M:SOH4]DLBQTYSTU(LNOL) [M:SOH4]DLBQTYSTU(LNOL)=WDLBQTYSTU Endif Endif Affzo [M:SOH4]ALLQTY(NL), SHTQTY(NL), WALLQTY(NL) NL+=1 Wend Endif Affzo [M:SOH4]ITMREF(LNOL), ALLQTY(LNOL), SHTQTY(LNOL), WALLQTY(LNOL), DALLTYP(LNOL) # Si kit/sous-traité, affichage de la qté livrable If !find([M:SOH4]LINTYP(LNOL),2,10) Return Endif GERR=4: GMESSAGE=" " If [M:SOH4]DLBQTYSTU(LNOL)<[M:SOH4]WALLQTYSTU(LNOL) Local Decimal WDLBQTY If [M:SOH4]SAUSTUCOE(LNOL)<>1 WDLBQTY=[M:SOH4]DLBQTYSTU(LNOL)*(1/[M:SOH4]SAUSTUCOE(LNOL)) Else WDLBQTY=[M:SOH4]DLBQTYSTU(LNOL) Endif Call QTEARR(WDLBQTY, [M:SOH4]SAU(LNOL)) From TRTDIV GMESSAGE=(mess(610,197,1)-num$(WDLBQTY)-[M:SOH4]SAU(LNOL)) Endif Return # -------------------------------------------- # # Traitement d'un article géré en contremarque # # -------------------------------------------- # $TRT_CTM If [F:ITS]CTMQTY > 0 If GMODIF = 2 & [M]FMI(NOL)=3 & [M]LINTYP(NOL)<>2 : # Bug 55476 # Création d'une ligne If [M:SOH4]SAU(NOL) <> [F:ITM]SAU Call SCAL_QUV(VALEUR, [M:SOH4]ITMREF(NOL),[M]BPCORD,[M:SOH4]SAU(NOL),[F:ITM]SAU, QTY_UV, GBIDD1) From TRTVENQTE Else QTY_UV = VALEUR Endif # --> On regarde si ctm directe If QTY_UV >= [F:ITS]CTMQTY [M]FMI(NOL) = 2 [M]STOMGTCOD(NOL) = 1 Endif Elsif GMODIF = 0 & find([M]FMI(NOL), 2,3) & [M]FMINUM(NOL)="" # Modification d'une ligne If [M:SOH4]SAU(NOL) <> [F:ITM]SAU Call SCAL_QUV([M]QTY(NOL), [M:SOH4]ITMREF(NOL),[M]BPCORD,[M:SOH4]SAU(NOL),[F:ITM]SAU, QTY_UV, GBIDD1) From TRTVENQTE Call SCAL_QUV(VALEUR, [M:SOH4]ITMREF(NOL),[M]BPCORD,[M:SOH4]SAU(NOL),[F:ITM]SAU, QTY_UV1, GBIDD1) From TRTVENQTE Else QTY_UV = [M]QTY(NOL) QTY_UV1 = VALEUR Endif # Si FMI était en concordance avec la qté cdée et la qté cdée a été modifiée : Faut-il réajuster FMI ? Local Integer WOK : WOK=1 If (QTY_UV< [F:ITS]CTMQTY & [M]FMI(NOL)=3 & QTY_UV1>=[F:ITS]CTMQTY) # Ligne gérée en contremarque réceptionnée. Voulez-vous la gérer en contremarque directe ? WOK=2 : Call OUINON(mess(220,191,1),WOK) From GESECRAN Elsif (QTY_UV>=[F:ITS]CTMQTY & [M]FMI(NOL)=2 & QTY_UV1<[F:ITS]CTMQTY) # Ligne gérée en contremarque directe. Voulez-vous la gérer en contremarque réceptionnée ? WOK=2 : Call OUINON(mess(219,191,1),WOK) From GESECRAN Endif # Bug 55476 : Kit géré en ctm : : Vérif que ts les composants st gérés en ctm If WOK=2 & [M]FMI(NOL)=3 & [M]LINTYP(NOL)=2 Local Integer WFMICPE : WFMICPE=2 Local Integer ORI : ORI=NOL Gosub VERIF_KIT_CTM From TRTVENBOM : If WFMICPE=1 WOK=1 Endif Endif If WOK=2 If QTY_UV1 >= [F:ITS]CTMQTY # La ligne passe de contremarque directe en contremarque réceptionnée [M]FMI(NOL) = 2 [M]STOMGTCOD(NOL) = 1 Else # La ligne passe de contremarque réceptionnée en contremarque directe [M]FMI(NOL) = 3 # Reinitialisation STOMGTCOD [M]STOMGTCOD(NOL) = [F:ITM]STOMGTCOD If [F:ITM]STOMGTCOD <> 1 If [F:ITF]ITMREF<>[M]ITMREF(NOL) | [F:ITF]STOFCY<>[M]DSTOFCY(NOL) Read [ITF] ITF0=[M]ITMREF(NOL);[M]DSTOFCY(NOL) If fstat Raz [F:ITF] : Endif Endif [M]STOMGTCOD(NOL) = [F:ITF]STOMGTCOD Endif [M]YSTOMGTCOD(NOL) = [M]STOMGTCOD(NOL) : # Bug 55476 Endif Endif Endif Endif Return #------------------------------------------------------------------------------------------------------ # Si composé nomenclature : message avertissement si pour un composant Qté cdée < Total alloué # si on poursuit, la nvlle qté cdée ne sera calculée que pour les composant dt Qté cdée >= Total alloué #------------------------------------------------------------------------------------------------------ $VERIF_CPSALLQTY If !find([M:SOH4]LINTYP(NOL),6) | [M:SOH4]STOMGTCOD(NOL)<>1 Return Endif If VALEUR=[M:SOH4]CQTY(NOL) Return Endif Local Decimal WRAPPORT, WCPSALLQTY, WCPSQTY Local Integer NL : NL=nolign Local Integer WOK : WOK=2 #While [M:SOH4]LINTYP(NL)<>1 & [M:SOH4]LINTYP(NL)<>2 & [M:SOH4]LINTYP(NL)<>6 & [M:SOH4]LINTYP(NL)<>10 & NL < [M:SOH4]NBLIG While !find([M:SOH4]LINTYP(NL),1,2,6,10) & NL < [M:SOH4]NBLIG # Calcul du total alloué pour le composant # WCPSALLQTY = [M:SOH4]ALLQTY(NL)+[M:SOH4]SHTQTY(NL)+[M:SOH4]ODLQTY(NL) # If [M:SOH0]SOHCAT = 3 # WCPSALLQTY += [M:SOH4]INVQTY(NL) # Else # WCPSALLQTY += [M:SOH4]DLVQTY(NL) # Endif WCPSALLQTY = [M:SOH4]TALLQTY(NL)+[M:SOH4]SHTQTY(NL) # Calcul de la nvelle qté cdée pour le composant WRAPPORT = [M:SOH4]CQTY(NL) / [M:SOH4]CQTY(NOL) WCPSQTY = WRAPPORT * VALEUR Call QTEARR(WCPSQTY,[M:SOH4]SAU(NL)) From TRTDIV If WCPSQTY < WCPSALLQTY & WCPSQTY <> [M:SOH4]YQTY(NL) If GERR=2 GMESSAGE-="\" Endif # 200515 : Progress billing / X3-223270 : check control on amount message in BOM - 2020-11-25 by LD #GMESSAGE-=mess(312,197,1)-[M:SOH4]ITMREF(NL)-":"-mess(35,192,1)-"("-format$("N:"+GFMTQTY,num$(WCPSQTY))-"<"-format$("N:"+GFMTQTY,num$(WCPSALLQTY))-[M]SAU(NL)-")" GMESSAGE-=mess(7,423,1)-[M:SOH4]ITMREF(NL)-":"-mess(35,192,1)-"("-format$("N:"+GFMTQTY,num$(WCPSQTY))-"<"-format$("N:"+GFMTQTY,num$(WCPSALLQTY))-[M]SAU(NL)-")" # 200515 : Progress billing / X3-223270 : check control on amount message in BOM - 2020-11-25 by LD Call AVERTIR (GMESSAGE, WOK) From GESECRAN : Raz GMESSAGE If WOK=1 : Break : Endif Endif NL+=1 Wend If WOK=1 mkstat=2 Endif Return # -------------------------------------------- # # Traitement d'un article géré en contremarque # # -------------------------------------------- # $INIT_WALLQTYSTU Local Decimal WCOEF If func MANHLDLIB.BLK_ALLOC([M:SOH1]HLDSTA,[M:SOH1]HLDCOD) : Return : Endif # order holds # -- Si Commande non bloquée, pas en dépassement d'en-cours avec blocage # Ligne ferme # Article géré en stock ou composé kit/sous-traité # ----> Initialisation de la qté à allouer If (find([M:SOH1]CDTSTA,1,4) | ([M]CDTSTA=3 & GCDTUNL=2)) & [M]DEMSTA(NOL)=1 & [M]FMI(NOL)=1 & ([M]STOMGTCOD(NOL)<>1 | find([M]LINTYP(NOL),2,10)) # (Il faut toujours repartir des qté en US pour effectuer les calculs) # --- Qté à allouer = Qté déjà allouée + Reste à allouer [M]WALLQTYSTU(NOL) =[M]ALLQTYSTU(NOL)+([M]QTYSTU(NOL)-[M]TALLQTYSTU(NOL)) COEF=1/WSAUSTUCOE Call CNVQTY([M]WALLQTYSTU(NOL),COEF,[M]SAU(NOL),[M]WALLQTY(NOL)) From TRTVENQTE If [M]WALLQTY(NOL)>0 & GUSERERBPC=3 # Dde d'utilisation des réservations clients [M]RERBPCFLG(NOL)=1 Local Char WVCRRER Local Decimal WALLCLI WVCRRER= vireblc(format$("K:"+num$(GLONBPC)+"X",[M]BPCORD)+format$("K:"+num$(GLONBPD)+"X",[M]DBPAADD(NOL)), 1) Call CAL_RERQTY(1,[M]ITMREF(NOL),[M]DSTOFCY(NOL),WVCRRER,[M]DSHIDAT(NOL),WALLCLI) From STKALL If WALLCLI <> 0 GMESSAGE = mess(207,191,1)-":"-num$([M]WALLQTY(NOL))-[M]SAU(NOL)-"\"-mess(131,191,1)-num$(WALLCLI)-[M]STU(NOL) OK=2 : Call OUINON (GMESSAGE-"\"-mess(130,191,1),OK) From GESECRAN If OK = 2 [M]RERBPCFLG(NOL)=2 : Endif Endif Endif Affzo [M]WALLQTY(NOL) Endif Return # -------------------------------------------------------------------------------- # Initialisation des dates entête commande : date expédition et date de livraison demandée # -------------------------------------------------------------------------------- $INIT_DAT # --> Initialisation de la date d'expédition Local Integer WSENS If date$ >= [M:SOH0]ORDDAT [M:SOH2]SHIDAT = date$ WSENS=0 : # (Si indisponibilité on ne peut décaler que vers l'avant) Else [M:SOH2]SHIDAT = [M:SOH0]ORDDAT WSENS=1 : # (Si indisponibilité on peut décaler vers l'arrière) Endif # --> Contrôle de la date d'expédition avec les périodes d'indisponibilités du site If [M:SOH2]STOFCY<>"" Call CTLUVYFCY([M:SOH2]SHIDAT, [M:SOH2]STOFCY, WSENS) From TRTVENCTL Endif # --> Calcul de la date de livraison demandée Call CALC_DLVDAT([M:SOH2]SHIDAT, WDAYLTI, WBPAADD, WBPCORD, 0, 0, [M:SOH2]DEMDLVDAT) From TRTVENDAT # Dde 19843 : Test GADJSHIDAT : Globale cachée = 1 : Pas d'ajustement date d'expédition (nvx param en V150) If dim(GADJSHIDAT)>0 & GADJSHIDAT=1 Raz GMESSAGE : Return Endif : # Bug 69110 # --> Recadrage si possible de la date d'expédition par rapport à la date de livraison demandée calculée Local Date WSHIDAT : WSHIDAT=[M:SOH2]SHIDAT Call CALC_SHIDAT([M:SOH2]DEMDLVDAT, WDAYLTI, [M:SOH2]STOFCY, 1, 1, [M:SOH0]ORDDAT, WSHIDAT) From TRTVENDAT If WSHIDAT<=[M:SOH2]DEMDLVDAT-[M:SOH2]DAYLTI [M:SOH2]SHIDAT=WSHIDAT : Endif Raz GMESSAGE : # Bug 69110 Return #----------------------------------------------------------------------------------- # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management ############################################################################# # APRES_NBLIG : Web # # # # Décomposée en 2 actions # # # # 1 - Traitement si fin sans validation # # - Traitement de validation # # - Suppression d'un gratuit lié à une ligne # # - Suppression d'une nomenclature # # - Modification d'une nomenclature si suppression du composé seul # # - Modification d'une nomenclature si modification du composé # # 2 - Création d'un gratuit # # # ############################################################################# $P1_NBLIG2 Local Integer NOL : NOL=nolign-1 Local Integer ORI : ORI=nolign-1 Local Integer NL : NL=nolign Local Integer FUNCTION : FUNCTION = 2 Local Integer SAVNOL, RET, OK # Bug 82658 : Recherche tarif si changement de référence article # Globale utilisée pour flagger les erreurs suite à la recherche tarif If dim(GERRITMREF)>0 Kill GERRITMREF Endif # User Story X3-46075 Task X3-48218 - 2017-08-17 by CPO : ANALYSIS_FDMA_Display_Quantity_Available_field_on_Sales_Order_line " If !GIMPORT and !GWEBSERV and dim([M]WSTKTXT)>0 Raz [M]WSTKTXT : Affzo [M]WSTKTXT Raz [M]WALLTXT : Affzo [M]WALLTXT Endif # /User Story X3-46075 Task X3-48218 - 2017-08-17 by CPO #---------------------------------------------------------------------------# # Fin sans validation : Réhabilitation des totaux et c'est tout # #---------------------------------------------------------------------------# #If status = 6 | status = 7 | status = 27 | status = 28 | status >= 1792 If adxgtb=1 | find(status,6,7) Call ADD_TOT(NOL) From SUBSOHB mkstat=2 Return Endif #---------------------------------------------------------------------------# # Validation d'une ligne # #---------------------------------------------------------------------------# If GMODIF = 2 | GMODIF = 0 GNETMAR = 1 Call VERIF_VATCOD(NOL) From SUBSOHB Call APRES_LIGNE (NOL,1) From SUBSOHB # --> Maj du n.avenant If GREV=2:[M:SOH4]LINREVNUM(NOL) = [M:SOH0]REVNUM:Endif Endif # Raz signatures si ajout d'une ligne If GREP="M" & [M]CREFLG(NOL)=0 GUPDAPPFLG=2 Endif # Bug 84030 #--------------------------------------------------------------------------------------# # Suppression d'une ligne de gratuit : Modification de la ligne à l'origine du gratuit # #--------------------------------------------------------------------------------------# If GMODIF = 1 & GFOCFLG = 3 Call RAZORIGRA(NOL) From TRTVENBOM Endif #--------------------------------------------------------------------------------------# # Insertion d'une ligne : Maj des lignes de gratuit qui suivent la ligne insérée # # Maj du n° de ligne à l'origine du gratuit car les lignes ont été renumérotées # #--------------------------------------------------------------------------------------# If GMODIF=2 & NOL<[M]NBLIG-2 Call MAJORIGRA(NOL,"SOPLIN") From TRTVENBOM Endif # Bug 84030 #---------------------------------------------------------------------------# # Suppression d'un gratuit lié à une ligne supprimée # #---------------------------------------------------------------------------# #If (status = 65 | status = 68 | status = 83) & GFOCFLG = 2 If (GMODIF = 1 | GMODIF = 3 | GMODIF = 4) & GFOCFLG = 2 Call SUPGRA(NOL, FUNCTION, RET) From TRTVENBOM # Pb en import en suppression de ligne : affzo remet la variable status qui valait 65 à 1 If !GIMPORT Affzo [M:SOH4]1-99 Endif Endif #---------------------------------------------------------------------------# # Suppression d'une nomenclature # #---------------------------------------------------------------------------# OK=1 If GMODIF=4 & find([M:SOH4]LINTYP(NL), 7,8,9) If !GIMPORT Call OUINON(mess(13,191,1),OK) From GESECRAN : Endif If OK<>2 # ----------------------------------------------------------------------# # Modification d'une nomenclature si suppression du composé seul # # ----------------------------------------------------------------------# Gosub MODNOM From TRTVENBOM GMODIF=1 Affzo [M:SOH4]1-99 Return Endif Endif If GMODIF=3 | OK=2 Gosub SUPNOM From TRTVENBOM GMODIF=1 Affzo [M:SOH4]1-99 Return Endif #---------------------------------# # Modification d'une nomenclature # #---------------------------------# # --> Modification OK=1 If GMODIF = 0 If !GIMPORT & ([M:SOH4]LINTYP(NOL) = 6 & find([M:SOH4]LINTYP(NL), 7,8,9)) Call OUINON(mess(14,191,1),OK) From GESECRAN # MSG=Repercussion sur les composants ? Endif If find([M:SOH4]LINTYP(NOL),2,10) | OK = 2 SAVNOL=nolign Gosub MODNOM From TRTVENBOM nolign=SAVNOL Affzo [M:SOH4]1-99 Endif Raz GTARFLG : # Bug 62571 # Sauvegarde nouvelle quantité pour calcul qté nomenclature [M]CQTY(NOL) = [M]QTY(NOL) Endif # 106776 -- EDI fields Gosub CTL_P1NBLIG From TRTFLDEDI #--The user create/modify the order => the $CREATION/$MODIF will instantiate #--Or the user wants to modify the invoice schedule => it's the TRTSAISVIC that will instantiate Case GMODIF When 0 : #--0 = Modification ligne Gosub P1_NBLIG_DINVCND_UPD From LIBSAL_INVCND_SOH If mkstat>0 or GERR>0 : mkstat=2 : Return : Endif #--Used in LIBSAL_INVCND_SOH_BOM If dim(IS_FROM_MODBOM_SET_SAME_ANSWER)>0 Kill IS_FROM_MODBOM_SET_SAME_ANSWER Endif When 1 : #--1 = Suppression ligne # Issue 107888 - 2016-09-09 by CPO : US155 Kit & flexible kit scheduled invoices #--Used in LIBSAL_INVCND_SOH_BOM If dim(IS_FROM_MODBOM_SET_SAME_ANSWER)>0 Kill IS_FROM_MODBOM_SET_SAME_ANSWER Endif #--Done in AV_NBLIG When 2 : #--2 = Nouvelle ligne Gosub P1_NBLIG_DINVCND_INS From LIBSAL_INVCND_SOH If mkstat>0 or GERR>0 : mkstat=2 : Return : Endif Endcase Return # End issue 107888 #----------------------------------------------------------------------------------- ############################################################################# # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management #--nombre d'instructions trop important ############################################################################# $P2_NBLIG2 Local Integer ORI : ORI=nolign-1 Local Integer NL : NL=nolign Local Integer FUNCTION : FUNCTION=2 Local Integer RET #---------------------------------------------------------------------------# # Création d'une ligne # # --> Génération des gratuits # #---------------------------------------------------------------------------# If GMODIF = 2 & GFOCITMREF <> "" If !GIMPORT | (GIMPORT & ((dim(G_FOCFLG)>0 & G_FOCFLG=0) | (dim(G_FOCFLG)<=0))) # Recherche de l'article origine si on est positionné sur un composant If !find([M]LINTYP(ORI),1,2,6,10) While !find([M]LINTYP(ORI),1,2,6,10) & ORI >= 0 ORI-=1 Wend Endif # Mode web service : Pb avec les insertions de ligne # --> Le gratuit sera généré juste avt la création de la cde dans l'action VERIF # Stockage de la référence du gratuit ds un tableau de globales # Utilisation du chps [M:SOH4]FOCNUMLIG pour stocker, pour l'article à l'origine du gratuit, # l'indice du gratuit ds le tableau de globales # (Utiliser SOPLIN pour faire le lien n'est pas possible car à l'insertion des gratuits, tt est renuméroté) If dim(GWEBSERV)=1 & GWEBSERV=1 GWEBNBGRA+=1 GWEBFOCITMREF(GWEBNBGRA-1)=GFOCITMREF : GWEBFOCQTY(GWEBNBGRA-1) =GFOCQTY GWEBFOCUOM(GWEBNBGRA-1) =GFOCUOM : GWEBFOCMOTIF(GWEBNBGRA-1)=GFOCMOTIF [M:SOH4]FOCNUMLIG(ORI)=GWEBNBGRA Else If !GIMPORT & ORI = [M]NBLIG [M]NBLIG +=1 : Endif Call CREGRA("G",1, ORI, [M:SOH0]ORDDAT, FUNCTION, NL, RET) From TRTVENBOM If !GIMPORT & ORI = NL-1 & ORI = [M]NBLIG - 1 :[M]NBLIG-=1:Endif If GIMPORT VALEUR=[M]NBLIG Endif GPOINT="CPLCREGRA" : Gosub ENTREE From EXEFNC # Test utilisation CPLCREGRA #Local Integer NOCPS : NOCPS=NL-1 #Raz GBIDI1, GBIDC1 #If [F:ITS]ITMREF <> [M:SOH4]ITMREF(NL-1) # Read [ITM]ITM0=[M:SOH4]ITMREF(NL-1) # If fstat Raz [F:ITS] : Endif #Endif #If [F:ITS]ITMTYP = 2 [M]LINTYP(NL-1) = 6 :ENDIF #If [F:ITS]ITMTYP = 3 [M]LINTYP(NL-1) = 2 :ENDIF #Call IMPCRENOM([M:SOH4]ITMREF(NL-1),NL-1,[M:SOH0]ORDDAT,2,GBIDI1,[M:SOH4]SOPLIN(NL),GBIDC1,NOCPS,GBIDI1) From TRTVENBOM # Test utilisation CPLCREGRA Affzo [M:SOH4]5 If GIMPORT Return Endif : # Bug 72428 Endif Endif Endif # 101874 : V9 : Taxe code control # Valuation depends on SOHVALLIG parameter #If dim(GVALTTCSOH)>0 & dim(GVALTTC)>0 : GVALTTC=GVALTTCSOH : Endif GVALTTC=GSOHVALLIG #If (!GIMPORT & !(dim(GWEBSERV)=1 & GWEBSERV=1)) : Call VALTTC ("GESSOH") From TRTVENFACR : Endif If (!GIMPORT & !(dim(GWEBSERV)=1 & GWEBSERV=1)) #---- Paramètres complementaires appel valorisation # PARAM_T(0) : Flag contrôle des taxes (1=Non/2=Oui) # PARAM_T(1) : Lecture de la trace par le sous-pro (1=Non/2=Oui) # PARAM_T(2) : Flag retour (1=KO/2=OK) Local Char PARAM_T (25) (0..10) PARAM_T(0)="1" : # Pas de contrôle des taxes PARAM_T(1)="1" : # Pas de lecture de la trace PARAM_T(2)="0" Call VALTTC ("GESSOH", PARAM_T) From TRTVENFACR Endif # 101874 # Pb en import en suppression de ligne : affzo remet la variable status qui valait 65 à 1 If !GIMPORT Affzo [M:SOH4]10,15,20 Endif Return #------------------------------------------------------------------------------------------------------ # 107890 : Scheduled invoices : (LD:21/12/15) # -------------------------------------- NBLIG ------------------------ Subprog B4_NBLIG2 Local Decimal BASPAG # Because of the limit of the number of button, we have to use one button for severals purpose If [M]DLVFLG(nolign-1)=2 # Deliverable Item : Allocation detail If !GWEBSERV ## Action VISUDETALL Local Char PARMSK(250)(1..20) , SAVACT(20) SAVACT = GACTION : GACTION = "VISUDETALL" PARMSK(1) = "SOH4" PARMSK(2) = [M:SOH4]DSTOFCY(nolign-1) PARMSK(3) = "2" PARMSK(4) = [M:SOH0]SOHNUM PARMSK(5) = num$([M:SOH4]SOPLIN(nolign-1)) PARMSK(6) = num$([M:SOH4]SOPLIN(nolign-1)) Call SAISIE_NUM(BASPAG,PARMSK,"IDETALL","TRTVENFEN","XWIDETALL") From GSAISIE GACTION = SAVACT Endif If mkstat=99 : mkstat = 0 : Elsif mkstat=0 : mkstat = 2 : Endif Else # Undeliverable Item : Timetable (Echéancier) If !GWEBSERV ## Action SAISVIC Local Char PARMSK(250)(1..20) , SAVACT(20) SAVACT = GACTION : GACTION = "SAISVIC" PARMSK(1) = "SOH4" PARMSK(2) = num$(nolign) PARMSK(3) = "10" PARMSK(4) = [M:SOH0]SOHNUM PARMSK(5) = num$([M:SOH4]SOPLIN(nolign-1)) PARMSK(6) = num$([M:SOH4]SOPLIN(nolign-1)) PARMSK(7) = "C_SVCRINVCND" PARMSK(8) = "GSOHVCRINVCND" Call TRAITE_NUM(BASPAG,PARMSK,"ISVIC","TRTSAISVIC","",1,"") From GTRAITE GACTION = SAVACT Endif If mkstat=99 : mkstat = 0 : Elsif mkstat=0 : mkstat = 2 : Endif Endif End #------------------------------------------------------------------------------------------------------ # User Story X3-46075 Task X3-48218 - 2017-08-17 by CPO : ANALYSIS_FDMA_Display_Quantity_Available_field_on_Sales_Order_line $DISPLAY_QTY_STOCKSTATUS2 If dim([M:SOH4]WSTKTXT)<=0 : Return : Endif #--We stop if item not managed into stock or if import/webservice context If [M:SOH4]STOMGTCOD(NOL)=1 or GIMPORT or GWEBSERV: If dim([M:SOH4]WSTKTXT)>0 Raz [M:SOH4]WSTKTXT Raz [M:SOH4]WALLTXT If !GIMPORT and !GWEBSERV : Affzo [M:SOH4]WSTKTXT : Affzo [M:SOH4]WALLTXT : Endif Endif Return Endif Raz [M:SOH4]WALLTXT Raz [M:SOH4]WSTKTXT #--We carry on only if the available stock block is set as displayed for the current sales order transaction If GSOHVALLIG<>2 : Return : Endif If clalev([F:SLT])=0 : Local File SALTRS [SLT] : Endif If [F:SLT]STRTYP<>2 or [F:SLT]STRNUM<>GFLAG Read [F:SLT]SLT0=2;GFLAG If fstat : Raz [F:SLT] : Endif Endif If [F:SLT]AVASTOCOD<>2 : Return : Endif If GREP="" Affzo [M:SOH4]WSTKTXT Affzo [M:SOH4]WALLTXT Return Endif Local Integer WRET Local Decimal WSTUDISSTU, WSTUDIS, WSTUDISSTU_STODISALL, WSTUDISSTU_CALFDMA Local Char WNUM Local Char WSTKTXTMESS(255)(0..1) : Raz WSTKTXTMESS Local Date WDATE_FDMA Local Integer WALL If find(GUSERERBPC, 2,3) WNUM=vireblc(format$("K:15X",[M:SOH0]BPCORD)+format$("K:3X",[M:SOH4]DBPAADD(NOL)), 1) : Endif Raz WSTKTXTMESS Call STODISALL([M:SOH4]DSTOFCY(NOL),[M:SOH4]ITMREF(NOL),2,[M:SOH4]DALLTYP(NOL),2,2,1,"",WNUM,"",WSTUDISSTU,WRET) From STKALL If WRET=1 : Raz [M:SOH4]WSTKTXT : Affzo [M:SOH4]WSTKTXT : Return : Endif WSTUDISSTU_STODISALL = WSTUDISSTU If WSTUDISSTU > 0 #--stock is available for entire quantity WSTUDIS=WSTUDISSTU*(1/[M:SOH4]SAUSTUCOE(NOL)) Call QTEARR(WSTUDIS, [M:SOH4]SAU(NOL)) From TRTDIV WSTKTXTMESS(0) = [M:SOH4]ITMREF(NOL)-mess(47,191,1)+num$(WSTUDISSTU)-[M:SOH4]STU(NOL)-"/"+mess(380,197,1)+num$(WSTUDIS)-[M:SOH4]SAU(NOL)-mess(4,2972,1) Else WSTKTXTMESS(0) = [M:SOH4]ITMREF(NOL)-":"-mess(409,197,1)-mess(4,2972,1) Endif If WSTUDISSTU < 0 or WSTUDISSTU < [M:SOH4]QTYSTU(NOL) WDAT_FDMA = [0/0/0] WALL=2 Call CAL_FDMA([M:SOH4]DSTOFCY(NOL),[M:SOH4]ITMREF(NOL),2,[M:SOH0]SOHNUM,[M:SOH4]SOPLIN(NOL),[M:SOH4]SOPLIN(NOL),WALL,[M:SOH4]QTYSTU(NOL),WSTUDISSTU,WDAT_FDMA) From STKLIB If WDAT_FDMA <> [0/0/0] If WSTUDISSTU>0 WSTUDISSTU_CALFDMA = WSTUDISSTU WSTUDIS=WSTUDISSTU*(1/[M:SOH4]SAUSTUCOE(NOL)) Call QTEARR(WSTUDIS, [M:SOH4]SAU(NOL)) From TRTDIV WSTKTXTMESS(1) = mess(102,191,1)+num$(WSTUDISSTU)-[M:SOH4]STU(NOL)-"/"+mess(380,197,1)+num$(WSTUDIS)-[M:SOH4]SAU(NOL)-mess(38,197,1)-format$(GFMDAT,WDAT_FDMA) Endif Endif Endif [M:SOH4]WSTKTXT = WSTKTXTMESS(0) If WSTKTXTMESS(1)<>"" [M:SOH4]WSTKTXT -= "-"-WSTKTXTMESS(1) Endif Affzo [M:SOH4]WSTKTXT Affzo [M:SOH4]WALLTXT Return # /User Story X3-46075 Task X3-48218 - 2017-08-17 by CPO #------------------------------------------------------------------------------------------------------ # User Story X3-46075 Task X3-48218 - 2017-08-17 by CPO : ANALYSIS_FDMA_Display_Quantity_Available_field_on_Sales_Order_line $DISPLAY_ALLQTY_STOCKSTATUS2 If dim([M:SOH4]WALLTXT)<=0 : Return : Endif #--We stop if item not managed into stock or if import/webservice context If [M:SOH4]STOMGTCOD(NOL)=1 or GIMPORT or GWEBSERV Return Endif Raz [M:SOH4]WALLTXT #--We carry on only if the available stock block is set as displayed for the current sales order transaction If GSOHVALLIG<>2 : Return : Endif If clalev([F:SLT])=0 : Local File SALTRS [SLT] : Endif If [F:SLT]STRTYP<>2 or [F:SLT]STRNUM<>GFLAG Read [F:SLT]SLT0=2;GFLAG If fstat : Raz [F:SLT] : Endif Endif If [F:SLT]AVASTOCOD<>2 : Return : Endif If GREP="" Raz [M:SOH4]WSTKTXT Affzo [M:SOH4]WSTKTXT Affzo [M:SOH4]WALLTXT Return Endif Local Integer WRET Local Decimal WSTUDISSTU, WSTUDIS, WRALQTYSTU, WXRALQTY,WXRALQTYSTU Local Char WNUM Local Char WSTKTXTMESS(255)(0..1) : Raz WSTKTXTMESS # ------------------------------------------------------------------------------- # # Affichage de la quantité restant à allouer et de la quantité disponible # # ------------------------------------------------------------------------------- # # Calcul du total alloué : à allouer + préparé + livré/facturé WTALLQTY = [M:SOH4]ALLQTY(NOL)+[M:SOH4]SHTQTY(NOL)+[M:SOH4]OPRQTY(NOL)+[M:SOH4]PREQTY(NOL)+[M:SOH4]ODLQTY(NOL) If [M:SOH0]SOHCAT = 3 WTALLQTY += [M:SOH4]INVQTY(NOL) Else WTALLQTY += [M:SOH4]DLVQTY(NOL) Endif # Calcul du reste à allouer : Commandé - total alloué WRALLQTY = [M:SOH4]QTY(NOL)-WTALLQTY #--si tout est alloué, pas la peine de continuer, on raz le champ et on sort #If WRALLQTY<=0 : Raz [M:SOH4]WSTKTXT : Affzo [M:SOH4]WSTKTXT : Return : Endif WRALLQTYSTU = WRALLQTY*[M:SOH4]SAUSTUCOE(NOL) Call QTEARR(WRALQTYSTU, [M:SOH4]STU(NOL)) From TRTDIV # Calcul stock disponible If find(GUSERERBPC, 2,3) WNUM=vireblc(format$("K:15X",[M:SOH0]BPCORD)+format$("K:3X",[M:SOH4]DBPAADD(NOL)), 1) : Endif Call STODISALL([M:SOH4]DSTOFCY(NOL),[M:SOH4]ITMREF(NOL),2,[M:SOH4]DALLTYP(NOL),2,2,1,"",WNUM,"",WSTUDISSTU,WRET) From STKALL If WRET=1 : Raz [M:SOH4]WSTKTXT : Affzo [M:SOH4]WSTKTXT : Return : Endif #• The stock is availabe for the whole quantity or the qtock is partially available. The following information is displayed: #o 'PRODUCT: Remaining quantity to be allocated in stock unit: XXXX UN / In Sales unit: YYYY SAL - Available stock XXXX UN / YYYY SAL' (UN and SAL are the unit stock and sales unit for the current # product) #• The stock is not available. The following information is displayed: #o 'PRODUCT: Remaining quantity to be allocated in stock unit: XXXX UN / In Sales unit: YYYY SAL - Not available' If WSTUDISSTU > 0 WSTUDIS=WSTUDISSTU*(1/[M:SOH4]SAUSTUCOE(NOL)) Call QTEARR(WSTUDIS, [M:SOH4]SAU(NOL)) From TRTDIV WSTKTXTMESS(0) = [M:SOH4]ITMREF(NOL)-":"-mess(46,191,1)-num$(WRALLQTYSTU)-[M:SOH4]STU(NOL)-"/"+mess(380,197,1)+num$(WRALLQTY)-[M:SOH4]SAU(NOL)-"-"-mess(163,197,1)+num$(WSTUDISSTU)-[M:SOH4]STU(NOL) & -"/"+mess(380,197,1) & + & num$(WSTUDIS)-[M:SOH4]SAU(NOL) Else WSTKTXTMESS(0) = [M:SOH4]ITMREF(NOL)-":"-mess(46,191,1)-num$(WRALLQTYSTU)-[M:SOH4]STU(NOL)-"/"+mess(380,197,1)+num$(WRALLQTY)-[M:SOH4]SAU(NOL)-"-"-mess(409,197,1) Endif [M:SOH4]WALLTXT = WSTKTXTMESS Affzo [M:SOH4]WALLTXT Return # /User Story X3-46075 Task X3-48218 - 2017-08-17 by CPO #------------------------------------------------------------------------------------------------------ # Issue X3-126595 ###################################################################################### $ECCVALMAJMIN_ENABLE2 # FGR 01/04/2015 : X3SUIVI105605 If [M:SOH4]TALLQTYSTU(nolign-1) > 0 Then mkstat = 2 Endif If find([M:SOH4]LINTYP(nolign-1),3,4,5,11,12,13) Then mkstat = 2 Endif Return # 105605 : CCM - Revision index (LD:18/06/15) # -------------------------------------------------- # # Contrôle lié à la contremarque : # # -------------------------------------------------- # $ECCVALMAJMIN_CTM2 Local Integer WOK : WOK=2 If [M:SOH4]FMINUM(NOL) = "" Return Endif If [M:SOH4]FMI(NOL)=2 # Cette ligne a fait l'objet d'une contremarque directe GMESSAGE = mess(270,191,1) : mkstat = 2 Elsif [M:SOH4]FMI(NOL)=3 # Cette ligne a fait l'objet d'une contremarque réceptionnée GMESSAGE = mess(271,191,1) If GMODU(6)=2 Local File PORDER [POH] Read [POH]POH0=[M:SOH4]FMINUM(NOL) If fstat Raz [F:POH] Endif # La commande d'achat est imprimée If [F:POH]PRNFLG=2 GMESSAGE= GMESSAGE+"."-mess(272,191,1) Endif Endif Call AVERTIR(GMESSAGE,WOK) From GESECRAN Raz GMESSAGE If WOK=1 mkstat=2 Endif Elsif [M:SOH4]FMI(NOL)=5 # Cette ligne a fait l'objet d'une ordre de fabrication GMESSAGE = mess(269,191,1) : mkstat = 2 Endif Return # 105605 : CCM - Revision index (LD:18/06/15) ###################################################################################### # pour la navigation vers le plan d'affectation $MEM_VCR2 If find(GREP,"C","D") If dim(GVCR)=1 : # If dim(GVCR) : # GH 24/10/12 bug 85427 Raz GVCR, GLIN, GSEQ Endif Return Endif If dim(GVCR) < 0 Global Char GVCR Global Integer GLIN Global Integer GSEQ Endif GVCR = [M:SOH0]SOHNUM GLIN = [M:SOH4]SOPLIN(nolign-1) GSEQ = [M:SOH4]SOPLIN(nolign-1) Return # -------------------------------------------------------------------------------- # Affichage des champs suite à la recherche tarif # -------------------------------------------------------------------------------- $AFF_RECH_TAR2 If dim(GWEBSERV)=1 & GWEBSERV=1 Return Endif Affzo [M:SOH4]GROPRI(NOL) If dim([M:SOH4]DISCRGVAL1(NOL))>0 Affzo [M:SOH4]DISCRGVAL1(NOL) Endif If dim([M:SOH4]DISCRGVAL2(NOL))>0 Affzo [M:SOH4]DISCRGVAL2(NOL) Endif If dim([M:SOH4]DISCRGVAL3(NOL))>0 Affzo [M:SOH4]DISCRGVAL3(NOL) Endif If dim([M:SOH4]DISCRGVAL4(NOL))>0 Affzo [M:SOH4]DISCRGVAL4(NOL) Endif If dim([M:SOH4]DISCRGVAL5(NOL))>0 Affzo [M:SOH4]DISCRGVAL5(NOL) Endif If dim([M:SOH4]DISCRGVAL6(NOL))>0 Affzo [M:SOH4]DISCRGVAL6(NOL) Endif If dim([M:SOH4]DISCRGVAL7(NOL))>0 Affzo [M:SOH4]DISCRGVAL7(NOL) Endif If dim([M:SOH4]DISCRGVAL8(NOL))>0 Affzo [M:SOH4]DISCRGVAL8(NOL) Endif If dim([M:SOH4]DISCRGVAL9(NOL))>0 Affzo [M:SOH4]DISCRGVAL9(NOL) Endif Affzo [M:SOH4]REPCOE(NOL) Affzo [M:SOH4]NETPRI(NOL) Return # End issue X3-126595 # 139565 : Milestone billing / X3-185425 - 2020-03-19 by LD # Pour une ligne de commande avec echeancier, controle qu'un code PJT est compatible avec les jalons liés aux lignes d'échéancier # Ctrl ssi code activité "PJM" actif # For a line with schedule invoices, control that a PJT code is compatible with the milestones linked to the schedule invoices # Control only if "PJM" code activity active $CTL_PJT_COMPATIBILITY2 Local Integer WOK : WOK=2 If !func ASYRFNC.ACTIV("PJM") Return Endif Local Integer IRET # Racine nouveau PJT # Root new PJT Local Char WNEWPROJECT(GLONPIM) Local Char WNEWBUDGET(GLONPBU) Local Char WNEWTASK(GLONTAC) IRET = func PIMPL_CSTD_PROGS.PJM_KEY_SPLIT(GACTX, WNEWPJT, WNEWPROJECT, WNEWBUDGET, WNEWTASK) # L'ancien code PJT était vide et il a été renseigné # The old PJT code was empty and it has been fed # Issue X3-110981/189977 - 2020-06-10 by MUARN : strict control of PJT #If WOLDPJT="" # Call AVERTIR (mess (289, 191,1)-WNEWPROJECT, WOK) From GESECRAN # If WOK=1 WRET = [V]CST_AERROR Endif # Return #Endif # Le code PJT a été modifié : A-t-il la même racine ? # The PJT code has been modified : Does it have the same root ? # Racine ancien PJT # Root old PJT Local Char WOLDPROJECT(GLONPIM) Local Char WOLDBUDGET(GLONPBU) Local Char WOLDTASK(GLONTAC) IRET = func PIMPL_CSTD_PROGS.PJM_KEY_SPLIT(GACTX, WOLDPJT, WOLDPROJECT, WOLDBUDGET, WOLDTASK) If WOLDPROJECT=WNEWPROJECT Return Endif # Issue X3-110981/189977 - 2020-06-10 by MUARN : strict control of PJT # Le nouveau PJT n'a pas la même racine # The new PJT does not have the same root #Call AVERTIR (mess (289, 191,1)-WNEWPROJECT, WOK) From GESECRAN #If WOK=1 WRET = [V]CST_AERROR Endif # Issue X3-110981/189977 - 2020-06-10 by MUARN : strict control of PJT Raz GERR Gosub AM_DPJT_PJTMST_CTRL From LIBSAL_INVCND_SOH If GERR=1 : WRET = [V]CST_AERROR : mkstat=2 : Endif # End issue X3-110981/189977 Return # 139565 : Milestone billing / X3-185425 - 2020-03-19 by LD # Issue X3-110981/189977 - 2020-06-10 by MUARN : strict control of PJT Subprog C_PJT3(VALEUR) Variable Char VALEUR() #!!!!!!!! # BE CARFUL # same process in INIITMORI from TRTVENBOM # the check of strit control of PJT must be done here in C_PJT and not in AM_PJT # to check before the question data type to modify the line # so if no modification no control If VALEUR=[M:SOH1]PJT : End : Endif If [M:SOH4]NBLIG = 0 : End : Endif If !func ASYRFNC.ACTIV("PJM") : End : Endif Local Integer IRET Local Integer WRET : Raz WRET Local Char WOLDPJT(GLONPJT) : WOLDPJT=[M:SOH1]PJT Local Char WNEWPJT(GLONPJT) : WNEWPJT=VALEUR Local Char WNEWPROJECT(GLONPIM) Local Char WNEWBUDGET(GLONPBU) Local Char WNEWTASK(GLONTAC) IRET = func PIMPL_CSTD_PROGS.PJM_KEY_SPLIT(GACTX, WNEWPJT, WNEWPROJECT, WNEWBUDGET, WNEWTASK) Local Char WOLDPROJECT(GLONPIM) Local Char WOLDBUDGET(GLONPBU) Local Char WOLDTASK(GLONTAC) IRET = func PIMPL_CSTD_PROGS.PJM_KEY_SPLIT(GACTX, WOLDPJT, WOLDPROJECT, WOLDBUDGET, WOLDTASK) # 200515 : Progress billing / X3-199457 : Control on sales order lines associated to a billing plan - 2020-07-16 by LD #If WOLDPROJECT=WNEWPROJECT : End : Endif # 200515 : Progress billing / X3-199457 : Control on sales order lines associated to a billing plan - 2020-07-16 by LD Gosub C_PJT_PJTMST_CTRL From LIBSAL_INVCND_SOH # 200515 : Progress billing / X3-199457 : Control on sales order lines associated to a billing plan - 2020-07-16 by LD If GERR=1 mkstat=2 : Raz GERR Endif #If GERR = 1 # Local Integer WOK # If GPJTSNGDOC = G_NON Then # WOK=2 # Call AVERTIR (GMESSAGE, WOK) From GESECRAN # Else # WOK=1 # Call ERREUR(GMESSAGE) From GESECRAN # Endif # Raz GERR, GMESSAGE # If WOK = 1 # mkstat=2 # Endif #Endif # 200515 : Progress billing / X3-199457 : Control on sales order lines associated to a billing plan - 2020-07-16 by LD End ############################################################################################# # # # SUBSOH1 : TRAITEMENTS STANDARDS UTILISES DANS LES COMMANDES DE VENTE # # # ############################################################################################# ############################################################################################# # # # Etiquettes appelées par TRTSTOALLA # # # # $CHARGE_STOALL : Chargement des paramètres dans masque STOALL # # $AVANT_STOALL : Contrôle avant enregistrement # # $APRES_STOALL : Mise à jour complémentaires après enregistrement # ############################################################################################# # # # Etiquettes/sous-pro appelées par SUBSOH # # # # $TRT_CTM : Traitement d'un article géré en contremarque # # $VERIF_CPSALLQTY : Si composé nomenclature : msg avert. si pour un composant Qté cdée < Total alloué # # $INIT_WALLQTYSTU : Traitement d'un article géré en contremarque # # $INIT_DAT : Initialisation des dates entête commande : date expédition et date de livraison demandée # # # $P1_NBLIG # $P2_NBLIG # B4_NBLIG # $ECCVALMAJMIN_ENABLE # Issue X3-126595 # $ECCVALMAJMIN_CTM # Issue X3-126595 # $MEM_VCR # Issue X3-126595 # $AFF_RECH_TAR # Issue X3-126595 # $CTL_PJT_COMPATIBILITY # 139565 : Milestone billing / X3-185425 - 2020-03-19 by LD ######################################################################################################### # Issue X3-126595 - 20190213 by LD : Error in prices for the options in a kit when the sales order is created via a webservice #---------------------------------------------------------------------- # # Chargement des paramètres dans masque STOALL # # Cette étiquette est appelée depuis CHARGE_PARAM From TRTSTOALLA # #---------------------------------------------------------------------- # $CHARGE_STOALL3 # Chargement du masque [M:ALL] Local Decimal WTOT, WTOTSTU #Local Char LWRH(GLONWRH) #Local Integer LEXC Raz [M:ALL] [M:ALL]VCRTYP=2 [M:ALL]VCRNUM=[M:SOH0]SOHNUM [M:ALL]VCRLIN=[M:SOH4]SOPLIN (LNOL) [M:ALL]VCRSEQ=[M:SOH4]SOPLIN (LNOL) [M:ALL]PCU=[M:SOH4]SAU (LNOL) [M:ALL]STU=[M:SOH4]STU (LNOL) [M:ALL]PCUSTUCOE=[M:SOH4]SAUSTUCOE (LNOL) [M:ALL]BPCORD=[M:SOH0]BPCORD [M:ALL]BPAADD=[M:SOH4]DBPAADD(LNOL) # Quantité besoin en allocation = commandé - déjà préparé/livré/facturé # Recalcul du déjà préparé/livré/facturé WTOTLIV=[M:SOH4]TALLQTYSTU(LNOL) - [M:SOH4]ALLQTYSTU(LNOL) [M:ALL]RETQTY = [M:SOH4]QTYSTU(LNOL) - WTOTLIV If [M:ALL]RETQTY < 0 [M:ALL]RETQTY = 0 Endif [M:ALL]OLDALLQTY = [M:SOH4]ALLQTYSTU(LNOL) [M:ALL]SHTQTY = [M:SOH4]SHTQTYSTU(LNOL) # Alimentation de la qté à allouer [M:ALL]QTYTOALL = [M:SOH4]WALLQTYSTU(LNOL) # Alimentation de la qté déjà allouée en global Raz [M:ALL]GLOALLQTY : If [M:SOH4]DALLTYP(LNOL)=1 [M:ALL]GLOALLQTY=[M:SOH4]ALLQTYSTU(LNOL) Endif [M:ALL]ALLTYP = [M:SOH4]DALLTYP(LNOL) # 88827 : La date besoin doit tjs être alimentée avec la date d'expédition pour respecter l'ordre chronologique des ddes d'allocation #[M:ALL]RETDAT = max(date$, [M:SOH4]DSHIDAT(LNOL)) [M:ALL]RETDAT = [M:SOH4]DSHIDAT(LNOL) # 88827 [M:ALL]DLVDAT = max(date$, [M:SOH4]EXTDLVDAT(LNOL)) [M:ALL]PECINTLOC = 2 [M:ALL]PECPLFLOC = 2 : # Prise en cpte empl quai : Oui [M:ALL]XLOT = [M:SOH4]LOT(LNOL) [M:ALL]XLOC = [M:SOH4]LOC(LNOL) [M:ALL]XSTA = [M:SOH4]STA(LNOL) # FGR 04/05/2015 : X3SUIVI105605 (début) If dim([M:SOH4]ECCVALMAJ) >= 0 Then [M:ALL]WECCVALMAJ = [M:SOH4]ECCVALMAJ(LNOL) Endif # FGR 04/05/2015 : X3SUIVI105605 (fin) GTYPLIG=0 If find([M:SOH4]LINTYP(LNOL),3,4,5,11,12,13) GTYPLIG=1 Endif If find([M:SOH4]FMI(LNOL), 3,5) GTYPLIG=2 Endif If find([M:SOH4]LINTYP(LNOL),3,4,5,11,12,13) Diszo [M:ALL]QTYTOALL Endif # Récupération du paramêtre stock : Génération de ruptures Local Char WPARAM(10) Call PARAML([M:SOH4]DSTOFCY(LNOL),"GENSHT",WPARAM) From ADOVAL # FGR 28/07/2015 : X3SUIVI108078 : Plus Call PARAM (performances) GGENSHT=val(WPARAM) # Commande de prêt If [M:SOH0]SOHCAT=2 GPRET = 1 Else GPRET = 0 Endif Return #---------------------------------------------------------------------- # # Contrôle avant enregistrement # # Si contrôle non OK, mettre OK=0 pour ne pas enregister # # Cette étiquette est appelée depuis AVANT_ENR From TRTSTOALLA # #---------------------------------------------------------------------- # $AVANT_STOALL3 # Quantité totale <> quantité à allouer If [M:ALL]PECQTY < [M:ALL]QTYTOALL OK = 2 # Livraison ligne/cde complète : On doit tout allouer If find([M:SOH2]DME,2,3) Call OUINON(mess(107,191,1),OK) From GESECRAN Endif If OK <> 2 FOK=0 : Return : Endif Endif Return #---------------------------------------------------------------------- # # Mise à jour complémentaires après enregistrement # # Si problème mettre GOK=0 pour annuler l'enregistrement # # Cette étiquette est appelée depuis APRES_ENR From TRTSTOALLA # #---------------------------------------------------------------------- # $APRES_STOALL3 Local Integer NL, WRET Local Decimal WALLSTU Local Char WTRTLIG(1) #[M:ALL]ALLTYP=2 If WCSOQTY<>0 Local Char WVCRRER WVCRRER = format$("K:"+num$(GLONBPC)+"X", [M:ALL]BPCORD)+format$("K:"+num$(GLONBPD)+"X", [M:ALL]BPAADD) WVCRRER = vireblc(WVCRRER, 1) # Si consommation des réservations clients : Maj de l'encours correspondant Call MAJORDBPC(1,WVCRRER,[M:SOH4]ITMREF(LNOL),[M:SOH4]DSTOFCY(LNOL),WCSOQTY,WRET) From TRTVENALL If WRET <> 0 GOK=0 : Return Endif Endif # Mise à jour commande Call MAJALLORD([M:ALL]VCRNUM, [M:ALL]VCRLIN, [M:ALL]VCRSEQ, [M:ALL]ALLTYP, 1, WALLQTY, WSHTQTY, WRET) From TRTVENALL If WRET <> 0 : GOK = 0 : Return : Endif # Si Composé de kit, il faut allouer les composants WALLSTU=WALLQTY+WSHTQTY WALLSTU=WALLSTU-([M:SOH4]ALLQTYSTU(LNOL)+[M:SOH4]SHTQTYSTU(LNOL)) Raz WTRTLIG If find([M:SOH4]LINTYP(LNOL),2,10) & WALLSTU <> 0 If WALLSTU < 0 # ----- C'est une diminution/annulation de l'allocation WTRTLIG = "D" WALLSTU = abs(WALLSTU) Elsif WALLSTU > 0 # ----- C'est une augmentation de l'allocation If [M:SOH4]ALLQTYSTU(LNOL) = 0 & [M:SOH4]SHTQTYSTU(LNOL) = 0 WTRTLIG = "C" Else WTRTLIG = "M" Endif WALLSTU=WALLQTY+WSHTQTY Endif Call GENALLKIT ([M:ALL]VCRNUM, [M:ALL]VCRLIN, [M:ALL]VCRSEQ, WTRTLIG, GRERBPC, 2, 0, 1, 0, WALLSTU, & WRET) From TRTVENALL If WRET <> 0 GOK=0 : Return : Endif Endif # Réaffichage du masque [M:SOH4] If [F:SOH]SOHNUM <> [M:SOH0]SOHNUM Read [SOH]SOH0=[M:SOH0]SOHNUM If fstat : Return : Endif Endif [M:SOH1]ALLSTA = [F:SOH]ALLSTA If [F:SOQ]SOHNUM<>[M:SOH0]SOHNUM | [F:SOQ]SOPLIN<>[M:SOH4]SOPLIN(LNOL) | [F:SOQ]SOQSEQ<>[M:SOH4]SOPLIN(LNOL) Read [SOQ]SOQ0=[M:SOH0]SOHNUM;[M:SOH4]SOPLIN(LNOL);[M:SOH4]SOPLIN(LNOL) If fstat : Return : Endif Endif [M:SOH4]ALLQTY(LNOL) = [F:SOQ]ALLQTY [M:SOH4]ALLQTYSTU(LNOL) = [F:SOQ]ALLQTYSTU [M:SOH4]SHTQTY(LNOL) = [F:SOQ]SHTQTY [M:SOH4]SHTQTYSTU(LNOL) = [F:SOQ]SHTQTYSTU [M:SOH4]DALLTYP(LNOL) = [F:SOQ]ALLTYP [M:SOH4]TALLQTYSTU(LNOL) = sum([F:SOQ]ALLQTYSTU,[F:SOQ]ODLQTYSTU,[F:SOQ]OPRQTYSTU,[F:SOQ]PREQTYSTU) [M:SOH4]TALLQTY(LNOL) = sum([F:SOQ]ALLQTY,[F:SOQ]ODLQTY,[F:SOQ]OPRQTY,[F:SOQ]PREQTY) If [M:SOH0]SOHCAT = 3 [M:SOH4]TALLQTYSTU(LNOL) += [F:SOQ]INVQTYSTU [M:SOH4]TALLQTY(LNOL) += [F:SOQ]INVQTY Else [M:SOH4]TALLQTYSTU(LNOL) += [F:SOQ]DLVQTYSTU [M:SOH4]TALLQTY(LNOL) += [F:SOQ]DLVQTY Endif # --- Qté à allouer = Qté déjà allouée [M:SOH4]WALLQTY(LNOL) = [F:SOQ]ALLQTY + [F:SOQ]SHTQTY [M:SOH4]WALLQTYSTU(LNOL)= [F:SOQ]ALLQTYSTU + [F:SOQ]SHTQTYSTU [M:SOH4]YALLQTY(LNOL) = [M:SOH4]ALLQTY(LNOL) [M:SOH4]YSHTQTY(LNOL) = [M:SOH4]SHTQTY(LNOL) Raz [M:SOH4]DLBQTYSTU (LNOL) # Si kit/sous-traité, sauvegarde de l'indice du kit et de la qté cdée pour calcul qté livrable If find([M:SOH4]LINTYP(LNOL),2,10) Local Decimal WKIT_QTYSTU : Raz WKIT_QTYSTU If [M:SOH4]ALLQTYSTU(LNOL)<>0 WKIT_QTYSTU=[M:SOH4]QTYSTU(LNOL) [M:SOH4]DLBQTYSTU(LNOL)=[M:SOH4]ALLQTYSTU(LNOL) Endif Endif Affzo [M:SOH1]ALLSTA If find([M:SOH4]LINTYP(LNOL),2,10) & WTRTLIG<>"" # composé kit ou sous-traité : il faut réafficher tous les composants NL=LNOL+1 While find([M:SOH4]LINTYP(NL),3,4,5,11,12,13) & NL < [M:SOH4]NBLIG Read [SOQ]SOQ0=[M:SOH0]SOHNUM;[M:SOH4]SOPLIN(NL);[M:SOH4]SOPLIN(NL) If fstat : Break : Endif [M:SOH4]ALLQTY(NL) = [F:SOQ]ALLQTY [M:SOH4]ALLQTYSTU(NL) = [F:SOQ]ALLQTYSTU [M:SOH4]SHTQTY(NL) = [F:SOQ]SHTQTY [M:SOH4]SHTQTYSTU(NL) = [F:SOQ]SHTQTYSTU [M:SOH4]DALLTYP(NL) = [F:SOQ]ALLTYP [M:SOH4]TALLQTYSTU(NL)= sum([F:SOQ]ALLQTYSTU,[F:SOQ]ODLQTYSTU,[F:SOQ]OPRQTYSTU,[F:SOQ]PREQTYSTU) [M:SOH4]TALLQTY(NL) = sum([F:SOQ]ALLQTY,[F:SOQ]ODLQTY,[F:SOQ]OPRQTY,[F:SOQ]PREQTY) If [M:SOH0]SOHCAT = 3 [M:SOH4]TALLQTYSTU(NL) += [F:SOQ]INVQTYSTU [M:SOH4]TALLQTY(NL) += [F:SOQ]INVQTY Else [M:SOH4]TALLQTYSTU(NL) += [F:SOQ]DLVQTYSTU [M:SOH4]TALLQTY(NL) += [F:SOQ]DLVQTY Endif # --- Qté à allouer = Qté déjà allouée [M:SOH4]WALLQTY(NL) = [F:SOQ]ALLQTY + [F:SOQ]SHTQTY [M:SOH4]WALLQTYSTU(NL) = [F:SOQ]ALLQTYSTU + [F:SOQ]SHTQTYSTU [M:SOH4]YALLQTY(NL) = [M:SOH4]ALLQTY(NL) [M:SOH4]YSHTQTY(NL) = [M:SOH4]SHTQTY(NL) # Si composant de kit en rupture, calcul de la qté livrable pour le kit # --- Qté livrable = Qté allouée du kit - Qté Rupture ramenée au niveau kit If dim(WKIT_QTYSTU)>0 & WKIT_QTYSTU<>0 & [M:SOH4]SHTQTYSTU(NL)>0 Local Decimal WRAPPORT : WRAPPORT=WKIT_QTYSTU / [M:SOH4]QTYSTU(NL) Local Decimal WDLBQTYSTU : WDLBQTYSTU=[M:SOH4]WALLQTYSTU(LNOL)-arr([M:SOH4]SHTQTYSTU(NL)*WRAPPORT,0.000001) If WDLBQTYSTU<[M:SOH4]DLBQTYSTU(LNOL) [M:SOH4]DLBQTYSTU(LNOL)=WDLBQTYSTU Endif Endif Affzo [M:SOH4]ALLQTY(NL), SHTQTY(NL), WALLQTY(NL) NL+=1 Wend Endif Affzo [M:SOH4]ITMREF(LNOL), ALLQTY(LNOL), SHTQTY(LNOL), WALLQTY(LNOL), DALLTYP(LNOL) # Si kit/sous-traité, affichage de la qté livrable If !find([M:SOH4]LINTYP(LNOL),2,10) Return Endif GERR=4: GMESSAGE=" " If [M:SOH4]DLBQTYSTU(LNOL)<[M:SOH4]WALLQTYSTU(LNOL) Local Decimal WDLBQTY If [M:SOH4]SAUSTUCOE(LNOL)<>1 WDLBQTY=[M:SOH4]DLBQTYSTU(LNOL)*(1/[M:SOH4]SAUSTUCOE(LNOL)) Else WDLBQTY=[M:SOH4]DLBQTYSTU(LNOL) Endif Call QTEARR(WDLBQTY, [M:SOH4]SAU(LNOL)) From TRTDIV GMESSAGE=(mess(610,197,1)-num$(WDLBQTY)-[M:SOH4]SAU(LNOL)) Endif Return # -------------------------------------------- # # Traitement d'un article géré en contremarque # # -------------------------------------------- # $TRT_CTM3 If [F:ITS]CTMQTY > 0 If GMODIF = 2 & [M]FMI(NOL)=3 & [M]LINTYP(NOL)<>2 : # Bug 55476 # Création d'une ligne If [M:SOH4]SAU(NOL) <> [F:ITM]SAU Call SCAL_QUV(VALEUR, [M:SOH4]ITMREF(NOL),[M]BPCORD,[M:SOH4]SAU(NOL),[F:ITM]SAU, QTY_UV, GBIDD1) From TRTVENQTE Else QTY_UV = VALEUR Endif # --> On regarde si ctm directe If QTY_UV >= [F:ITS]CTMQTY [M]FMI(NOL) = 2 [M]STOMGTCOD(NOL) = 1 Endif Elsif GMODIF = 0 & find([M]FMI(NOL), 2,3) & [M]FMINUM(NOL)="" # Modification d'une ligne If [M:SOH4]SAU(NOL) <> [F:ITM]SAU Call SCAL_QUV([M]QTY(NOL), [M:SOH4]ITMREF(NOL),[M]BPCORD,[M:SOH4]SAU(NOL),[F:ITM]SAU, QTY_UV, GBIDD1) From TRTVENQTE Call SCAL_QUV(VALEUR, [M:SOH4]ITMREF(NOL),[M]BPCORD,[M:SOH4]SAU(NOL),[F:ITM]SAU, QTY_UV1, GBIDD1) From TRTVENQTE Else QTY_UV = [M]QTY(NOL) QTY_UV1 = VALEUR Endif # Si FMI était en concordance avec la qté cdée et la qté cdée a été modifiée : Faut-il réajuster FMI ? Local Integer WOK : WOK=1 If (QTY_UV< [F:ITS]CTMQTY & [M]FMI(NOL)=3 & QTY_UV1>=[F:ITS]CTMQTY) # Ligne gérée en contremarque réceptionnée. Voulez-vous la gérer en contremarque directe ? WOK=2 : Call OUINON(mess(220,191,1),WOK) From GESECRAN Elsif (QTY_UV>=[F:ITS]CTMQTY & [M]FMI(NOL)=2 & QTY_UV1<[F:ITS]CTMQTY) # Ligne gérée en contremarque directe. Voulez-vous la gérer en contremarque réceptionnée ? WOK=2 : Call OUINON(mess(219,191,1),WOK) From GESECRAN Endif # Bug 55476 : Kit géré en ctm : : Vérif que ts les composants st gérés en ctm If WOK=2 & [M]FMI(NOL)=3 & [M]LINTYP(NOL)=2 Local Integer WFMICPE : WFMICPE=2 Local Integer ORI : ORI=NOL Gosub VERIF_KIT_CTM From TRTVENBOM : If WFMICPE=1 WOK=1 Endif Endif If WOK=2 If QTY_UV1 >= [F:ITS]CTMQTY # La ligne passe de contremarque directe en contremarque réceptionnée [M]FMI(NOL) = 2 [M]STOMGTCOD(NOL) = 1 Else # La ligne passe de contremarque réceptionnée en contremarque directe [M]FMI(NOL) = 3 # Reinitialisation STOMGTCOD [M]STOMGTCOD(NOL) = [F:ITM]STOMGTCOD If [F:ITM]STOMGTCOD <> 1 If [F:ITF]ITMREF<>[M]ITMREF(NOL) | [F:ITF]STOFCY<>[M]DSTOFCY(NOL) Read [ITF] ITF0=[M]ITMREF(NOL);[M]DSTOFCY(NOL) If fstat Raz [F:ITF] : Endif Endif [M]STOMGTCOD(NOL) = [F:ITF]STOMGTCOD Endif [M]YSTOMGTCOD(NOL) = [M]STOMGTCOD(NOL) : # Bug 55476 Endif Endif Endif Endif Return #------------------------------------------------------------------------------------------------------ # Si composé nomenclature : message avertissement si pour un composant Qté cdée < Total alloué # si on poursuit, la nvlle qté cdée ne sera calculée que pour les composant dt Qté cdée >= Total alloué #------------------------------------------------------------------------------------------------------ $VERIF_CPSALLQTY3 If !find([M:SOH4]LINTYP(NOL),6) | [M:SOH4]STOMGTCOD(NOL)<>1 Return Endif If VALEUR=[M:SOH4]CQTY(NOL) Return Endif Local Decimal WRAPPORT, WCPSALLQTY, WCPSQTY Local Integer NL : NL=nolign Local Integer WOK : WOK=2 #While [M:SOH4]LINTYP(NL)<>1 & [M:SOH4]LINTYP(NL)<>2 & [M:SOH4]LINTYP(NL)<>6 & [M:SOH4]LINTYP(NL)<>10 & NL < [M:SOH4]NBLIG While !find([M:SOH4]LINTYP(NL),1,2,6,10) & NL < [M:SOH4]NBLIG # Calcul du total alloué pour le composant # WCPSALLQTY = [M:SOH4]ALLQTY(NL)+[M:SOH4]SHTQTY(NL)+[M:SOH4]ODLQTY(NL) # If [M:SOH0]SOHCAT = 3 # WCPSALLQTY += [M:SOH4]INVQTY(NL) # Else # WCPSALLQTY += [M:SOH4]DLVQTY(NL) # Endif WCPSALLQTY = [M:SOH4]TALLQTY(NL)+[M:SOH4]SHTQTY(NL) # Calcul de la nvelle qté cdée pour le composant WRAPPORT = [M:SOH4]CQTY(NL) / [M:SOH4]CQTY(NOL) WCPSQTY = WRAPPORT * VALEUR Call QTEARR(WCPSQTY,[M:SOH4]SAU(NL)) From TRTDIV If WCPSQTY < WCPSALLQTY & WCPSQTY <> [M:SOH4]YQTY(NL) If GERR=2 GMESSAGE-="\" Endif # 200515 : Progress billing / X3-223270 : check control on amount message in BOM - 2020-11-25 by LD #GMESSAGE-=mess(312,197,1)-[M:SOH4]ITMREF(NL)-":"-mess(35,192,1)-"("-format$("N:"+GFMTQTY,num$(WCPSQTY))-"<"-format$("N:"+GFMTQTY,num$(WCPSALLQTY))-[M]SAU(NL)-")" GMESSAGE-=mess(7,423,1)-[M:SOH4]ITMREF(NL)-":"-mess(35,192,1)-"("-format$("N:"+GFMTQTY,num$(WCPSQTY))-"<"-format$("N:"+GFMTQTY,num$(WCPSALLQTY))-[M]SAU(NL)-")" # 200515 : Progress billing / X3-223270 : check control on amount message in BOM - 2020-11-25 by LD Call AVERTIR (GMESSAGE, WOK) From GESECRAN : Raz GMESSAGE If WOK=1 : Break : Endif Endif NL+=1 Wend If WOK=1 mkstat=2 Endif Return # -------------------------------------------- # # Traitement d'un article géré en contremarque # # -------------------------------------------- # $INIT_WALLQTYSTU3 Local Decimal WCOEF If func MANHLDLIB.BLK_ALLOC([M:SOH1]HLDSTA,[M:SOH1]HLDCOD) : Return : Endif # order holds # -- Si Commande non bloquée, pas en dépassement d'en-cours avec blocage # Ligne ferme # Article géré en stock ou composé kit/sous-traité # ----> Initialisation de la qté à allouer If (find([M:SOH1]CDTSTA,1,4) | ([M]CDTSTA=3 & GCDTUNL=2)) & [M]DEMSTA(NOL)=1 & [M]FMI(NOL)=1 & ([M]STOMGTCOD(NOL)<>1 | find([M]LINTYP(NOL),2,10)) # (Il faut toujours repartir des qté en US pour effectuer les calculs) # --- Qté à allouer = Qté déjà allouée + Reste à allouer [M]WALLQTYSTU(NOL) =[M]ALLQTYSTU(NOL)+([M]QTYSTU(NOL)-[M]TALLQTYSTU(NOL)) COEF=1/WSAUSTUCOE Call CNVQTY([M]WALLQTYSTU(NOL),COEF,[M]SAU(NOL),[M]WALLQTY(NOL)) From TRTVENQTE If [M]WALLQTY(NOL)>0 & GUSERERBPC=3 # Dde d'utilisation des réservations clients [M]RERBPCFLG(NOL)=1 Local Char WVCRRER Local Decimal WALLCLI WVCRRER= vireblc(format$("K:"+num$(GLONBPC)+"X",[M]BPCORD)+format$("K:"+num$(GLONBPD)+"X",[M]DBPAADD(NOL)), 1) Call CAL_RERQTY(1,[M]ITMREF(NOL),[M]DSTOFCY(NOL),WVCRRER,[M]DSHIDAT(NOL),WALLCLI) From STKALL If WALLCLI <> 0 GMESSAGE = mess(207,191,1)-":"-num$([M]WALLQTY(NOL))-[M]SAU(NOL)-"\"-mess(131,191,1)-num$(WALLCLI)-[M]STU(NOL) OK=2 : Call OUINON (GMESSAGE-"\"-mess(130,191,1),OK) From GESECRAN If OK = 2 [M]RERBPCFLG(NOL)=2 : Endif Endif Endif Affzo [M]WALLQTY(NOL) Endif Return # -------------------------------------------------------------------------------- # Initialisation des dates entête commande : date expédition et date de livraison demandée # -------------------------------------------------------------------------------- $INIT_DAT3 # --> Initialisation de la date d'expédition Local Integer WSENS If date$ >= [M:SOH0]ORDDAT [M:SOH2]SHIDAT = date$ WSENS=0 : # (Si indisponibilité on ne peut décaler que vers l'avant) Else [M:SOH2]SHIDAT = [M:SOH0]ORDDAT WSENS=1 : # (Si indisponibilité on peut décaler vers l'arrière) Endif # --> Contrôle de la date d'expédition avec les périodes d'indisponibilités du site If [M:SOH2]STOFCY<>"" Call CTLUVYFCY([M:SOH2]SHIDAT, [M:SOH2]STOFCY, WSENS) From TRTVENCTL Endif # --> Calcul de la date de livraison demandée Call CALC_DLVDAT([M:SOH2]SHIDAT, WDAYLTI, WBPAADD, WBPCORD, 0, 0, [M:SOH2]DEMDLVDAT) From TRTVENDAT # Dde 19843 : Test GADJSHIDAT : Globale cachée = 1 : Pas d'ajustement date d'expédition (nvx param en V150) If dim(GADJSHIDAT)>0 & GADJSHIDAT=1 Raz GMESSAGE : Return Endif : # Bug 69110 # --> Recadrage si possible de la date d'expédition par rapport à la date de livraison demandée calculée Local Date WSHIDAT : WSHIDAT=[M:SOH2]SHIDAT Call CALC_SHIDAT([M:SOH2]DEMDLVDAT, WDAYLTI, [M:SOH2]STOFCY, 1, 1, [M:SOH0]ORDDAT, WSHIDAT) From TRTVENDAT If WSHIDAT<=[M:SOH2]DEMDLVDAT-[M:SOH2]DAYLTI [M:SOH2]SHIDAT=WSHIDAT : Endif Raz GMESSAGE : # Bug 69110 Return #----------------------------------------------------------------------------------- # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management ############################################################################# # APRES_NBLIG : Web # # # # Décomposée en 2 actions # # # # 1 - Traitement si fin sans validation # # - Traitement de validation # # - Suppression d'un gratuit lié à une ligne # # - Suppression d'une nomenclature # # - Modification d'une nomenclature si suppression du composé seul # # - Modification d'une nomenclature si modification du composé # # 2 - Création d'un gratuit # # # ############################################################################# $P1_NBLIG23 Local Integer NOL : NOL=nolign-1 Local Integer ORI : ORI=nolign-1 Local Integer NL : NL=nolign Local Integer FUNCTION : FUNCTION = 2 Local Integer SAVNOL, RET, OK # Bug 82658 : Recherche tarif si changement de référence article # Globale utilisée pour flagger les erreurs suite à la recherche tarif If dim(GERRITMREF)>0 Kill GERRITMREF Endif # User Story X3-46075 Task X3-48218 - 2017-08-17 by CPO : ANALYSIS_FDMA_Display_Quantity_Available_field_on_Sales_Order_line " If !GIMPORT and !GWEBSERV and dim([M]WSTKTXT)>0 Raz [M]WSTKTXT : Affzo [M]WSTKTXT Raz [M]WALLTXT : Affzo [M]WALLTXT Endif # /User Story X3-46075 Task X3-48218 - 2017-08-17 by CPO #---------------------------------------------------------------------------# # Fin sans validation : Réhabilitation des totaux et c'est tout # #---------------------------------------------------------------------------# #If status = 6 | status = 7 | status = 27 | status = 28 | status >= 1792 If adxgtb=1 | find(status,6,7) Call ADD_TOT(NOL) From SUBSOHB mkstat=2 Return Endif #---------------------------------------------------------------------------# # Validation d'une ligne # #---------------------------------------------------------------------------# If GMODIF = 2 | GMODIF = 0 GNETMAR = 1 Call VERIF_VATCOD(NOL) From SUBSOHB Call APRES_LIGNE (NOL,1) From SUBSOHB # --> Maj du n.avenant If GREV=2:[M:SOH4]LINREVNUM(NOL) = [M:SOH0]REVNUM:Endif Endif # Raz signatures si ajout d'une ligne If GREP="M" & [M]CREFLG(NOL)=0 GUPDAPPFLG=2 Endif # Bug 84030 #--------------------------------------------------------------------------------------# # Suppression d'une ligne de gratuit : Modification de la ligne à l'origine du gratuit # #--------------------------------------------------------------------------------------# If GMODIF = 1 & GFOCFLG = 3 Call RAZORIGRA(NOL) From TRTVENBOM Endif #--------------------------------------------------------------------------------------# # Insertion d'une ligne : Maj des lignes de gratuit qui suivent la ligne insérée # # Maj du n° de ligne à l'origine du gratuit car les lignes ont été renumérotées # #--------------------------------------------------------------------------------------# If GMODIF=2 & NOL<[M]NBLIG-2 Call MAJORIGRA(NOL,"SOPLIN") From TRTVENBOM Endif # Bug 84030 #---------------------------------------------------------------------------# # Suppression d'un gratuit lié à une ligne supprimée # #---------------------------------------------------------------------------# #If (status = 65 | status = 68 | status = 83) & GFOCFLG = 2 If (GMODIF = 1 | GMODIF = 3 | GMODIF = 4) & GFOCFLG = 2 Call SUPGRA(NOL, FUNCTION, RET) From TRTVENBOM # Pb en import en suppression de ligne : affzo remet la variable status qui valait 65 à 1 If !GIMPORT Affzo [M:SOH4]1-99 Endif Endif #---------------------------------------------------------------------------# # Suppression d'une nomenclature # #---------------------------------------------------------------------------# OK=1 If GMODIF=4 & find([M:SOH4]LINTYP(NL), 7,8,9) If !GIMPORT Call OUINON(mess(13,191,1),OK) From GESECRAN : Endif If OK<>2 # ----------------------------------------------------------------------# # Modification d'une nomenclature si suppression du composé seul # # ----------------------------------------------------------------------# Gosub MODNOM From TRTVENBOM GMODIF=1 Affzo [M:SOH4]1-99 Return Endif Endif If GMODIF=3 | OK=2 Gosub SUPNOM From TRTVENBOM GMODIF=1 Affzo [M:SOH4]1-99 Return Endif #---------------------------------# # Modification d'une nomenclature # #---------------------------------# # --> Modification OK=1 If GMODIF = 0 If !GIMPORT & ([M:SOH4]LINTYP(NOL) = 6 & find([M:SOH4]LINTYP(NL), 7,8,9)) Call OUINON(mess(14,191,1),OK) From GESECRAN # MSG=Repercussion sur les composants ? Endif If find([M:SOH4]LINTYP(NOL),2,10) | OK = 2 SAVNOL=nolign Gosub MODNOM From TRTVENBOM nolign=SAVNOL Affzo [M:SOH4]1-99 Endif Raz GTARFLG : # Bug 62571 # Sauvegarde nouvelle quantité pour calcul qté nomenclature [M]CQTY(NOL) = [M]QTY(NOL) Endif # 106776 -- EDI fields Gosub CTL_P1NBLIG From TRTFLDEDI #--The user create/modify the order => the $CREATION/$MODIF will instantiate #--Or the user wants to modify the invoice schedule => it's the TRTSAISVIC that will instantiate Case GMODIF When 0 : #--0 = Modification ligne Gosub P1_NBLIG_DINVCND_UPD From LIBSAL_INVCND_SOH If mkstat>0 or GERR>0 : mkstat=2 : Return : Endif #--Used in LIBSAL_INVCND_SOH_BOM If dim(IS_FROM_MODBOM_SET_SAME_ANSWER)>0 Kill IS_FROM_MODBOM_SET_SAME_ANSWER Endif When 1 : #--1 = Suppression ligne # Issue 107888 - 2016-09-09 by CPO : US155 Kit & flexible kit scheduled invoices #--Used in LIBSAL_INVCND_SOH_BOM If dim(IS_FROM_MODBOM_SET_SAME_ANSWER)>0 Kill IS_FROM_MODBOM_SET_SAME_ANSWER Endif #--Done in AV_NBLIG When 2 : #--2 = Nouvelle ligne Gosub P1_NBLIG_DINVCND_INS From LIBSAL_INVCND_SOH If mkstat>0 or GERR>0 : mkstat=2 : Return : Endif Endcase Return # End issue 107888 #----------------------------------------------------------------------------------- ############################################################################# # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management #--nombre d'instructions trop important ############################################################################# $P2_NBLIG23 Local Integer ORI : ORI=nolign-1 Local Integer NL : NL=nolign Local Integer FUNCTION : FUNCTION=2 Local Integer RET #---------------------------------------------------------------------------# # Création d'une ligne # # --> Génération des gratuits # #---------------------------------------------------------------------------# If GMODIF = 2 & GFOCITMREF <> "" If !GIMPORT | (GIMPORT & ((dim(G_FOCFLG)>0 & G_FOCFLG=0) | (dim(G_FOCFLG)<=0))) # Recherche de l'article origine si on est positionné sur un composant If !find([M]LINTYP(ORI),1,2,6,10) While !find([M]LINTYP(ORI),1,2,6,10) & ORI >= 0 ORI-=1 Wend Endif # Mode web service : Pb avec les insertions de ligne # --> Le gratuit sera généré juste avt la création de la cde dans l'action VERIF # Stockage de la référence du gratuit ds un tableau de globales # Utilisation du chps [M:SOH4]FOCNUMLIG pour stocker, pour l'article à l'origine du gratuit, # l'indice du gratuit ds le tableau de globales # (Utiliser SOPLIN pour faire le lien n'est pas possible car à l'insertion des gratuits, tt est renuméroté) If dim(GWEBSERV)=1 & GWEBSERV=1 GWEBNBGRA+=1 GWEBFOCITMREF(GWEBNBGRA-1)=GFOCITMREF : GWEBFOCQTY(GWEBNBGRA-1) =GFOCQTY GWEBFOCUOM(GWEBNBGRA-1) =GFOCUOM : GWEBFOCMOTIF(GWEBNBGRA-1)=GFOCMOTIF [M:SOH4]FOCNUMLIG(ORI)=GWEBNBGRA Else If !GIMPORT & ORI = [M]NBLIG [M]NBLIG +=1 : Endif Call CREGRA("G",1, ORI, [M:SOH0]ORDDAT, FUNCTION, NL, RET) From TRTVENBOM If !GIMPORT & ORI = NL-1 & ORI = [M]NBLIG - 1 :[M]NBLIG-=1:Endif If GIMPORT VALEUR=[M]NBLIG Endif GPOINT="CPLCREGRA" : Gosub ENTREE From EXEFNC # Test utilisation CPLCREGRA #Local Integer NOCPS : NOCPS=NL-1 #Raz GBIDI1, GBIDC1 #If [F:ITS]ITMREF <> [M:SOH4]ITMREF(NL-1) # Read [ITM]ITM0=[M:SOH4]ITMREF(NL-1) # If fstat Raz [F:ITS] : Endif #Endif #If [F:ITS]ITMTYP = 2 [M]LINTYP(NL-1) = 6 :ENDIF #If [F:ITS]ITMTYP = 3 [M]LINTYP(NL-1) = 2 :ENDIF #Call IMPCRENOM([M:SOH4]ITMREF(NL-1),NL-1,[M:SOH0]ORDDAT,2,GBIDI1,[M:SOH4]SOPLIN(NL),GBIDC1,NOCPS,GBIDI1) From TRTVENBOM # Test utilisation CPLCREGRA Affzo [M:SOH4]5 If GIMPORT Return Endif : # Bug 72428 Endif Endif Endif # 101874 : V9 : Taxe code control # Valuation depends on SOHVALLIG parameter #If dim(GVALTTCSOH)>0 & dim(GVALTTC)>0 : GVALTTC=GVALTTCSOH : Endif GVALTTC=GSOHVALLIG #If (!GIMPORT & !(dim(GWEBSERV)=1 & GWEBSERV=1)) : Call VALTTC ("GESSOH") From TRTVENFACR : Endif If (!GIMPORT & !(dim(GWEBSERV)=1 & GWEBSERV=1)) #---- Paramètres complementaires appel valorisation # PARAM_T(0) : Flag contrôle des taxes (1=Non/2=Oui) # PARAM_T(1) : Lecture de la trace par le sous-pro (1=Non/2=Oui) # PARAM_T(2) : Flag retour (1=KO/2=OK) Local Char PARAM_T (25) (0..10) PARAM_T(0)="1" : # Pas de contrôle des taxes PARAM_T(1)="1" : # Pas de lecture de la trace PARAM_T(2)="0" Call VALTTC ("GESSOH", PARAM_T) From TRTVENFACR Endif # 101874 # Pb en import en suppression de ligne : affzo remet la variable status qui valait 65 à 1 If !GIMPORT Affzo [M:SOH4]10,15,20 Endif Return #------------------------------------------------------------------------------------------------------ # 107890 : Scheduled invoices : (LD:21/12/15) # -------------------------------------- NBLIG ------------------------ Subprog B4_NBLIG23 Local Decimal BASPAG # Because of the limit of the number of button, we have to use one button for severals purpose If [M]DLVFLG(nolign-1)=2 # Deliverable Item : Allocation detail If !GWEBSERV ## Action VISUDETALL Local Char PARMSK(250)(1..20) , SAVACT(20) SAVACT = GACTION : GACTION = "VISUDETALL" PARMSK(1) = "SOH4" PARMSK(2) = [M:SOH4]DSTOFCY(nolign-1) PARMSK(3) = "2" PARMSK(4) = [M:SOH0]SOHNUM PARMSK(5) = num$([M:SOH4]SOPLIN(nolign-1)) PARMSK(6) = num$([M:SOH4]SOPLIN(nolign-1)) Call SAISIE_NUM(BASPAG,PARMSK,"IDETALL","TRTVENFEN","XWIDETALL") From GSAISIE GACTION = SAVACT Endif If mkstat=99 : mkstat = 0 : Elsif mkstat=0 : mkstat = 2 : Endif Else # Undeliverable Item : Timetable (Echéancier) If !GWEBSERV ## Action SAISVIC Local Char PARMSK(250)(1..20) , SAVACT(20) SAVACT = GACTION : GACTION = "SAISVIC" PARMSK(1) = "SOH4" PARMSK(2) = num$(nolign) PARMSK(3) = "10" PARMSK(4) = [M:SOH0]SOHNUM PARMSK(5) = num$([M:SOH4]SOPLIN(nolign-1)) PARMSK(6) = num$([M:SOH4]SOPLIN(nolign-1)) PARMSK(7) = "C_SVCRINVCND" PARMSK(8) = "GSOHVCRINVCND" Call TRAITE_NUM(BASPAG,PARMSK,"ISVIC","TRTSAISVIC","",1,"") From GTRAITE GACTION = SAVACT Endif If mkstat=99 : mkstat = 0 : Elsif mkstat=0 : mkstat = 2 : Endif Endif End #------------------------------------------------------------------------------------------------------ # User Story X3-46075 Task X3-48218 - 2017-08-17 by CPO : ANALYSIS_FDMA_Display_Quantity_Available_field_on_Sales_Order_line $DISPLAY_QTY_STOCKSTATUS23 If dim([M:SOH4]WSTKTXT)<=0 : Return : Endif #--We stop if item not managed into stock or if import/webservice context If [M:SOH4]STOMGTCOD(NOL)=1 or GIMPORT or GWEBSERV: If dim([M:SOH4]WSTKTXT)>0 Raz [M:SOH4]WSTKTXT Raz [M:SOH4]WALLTXT If !GIMPORT and !GWEBSERV : Affzo [M:SOH4]WSTKTXT : Affzo [M:SOH4]WALLTXT : Endif Endif Return Endif Raz [M:SOH4]WALLTXT Raz [M:SOH4]WSTKTXT #--We carry on only if the available stock block is set as displayed for the current sales order transaction If GSOHVALLIG<>2 : Return : Endif If clalev([F:SLT])=0 : Local File SALTRS [SLT] : Endif If [F:SLT]STRTYP<>2 or [F:SLT]STRNUM<>GFLAG Read [F:SLT]SLT0=2;GFLAG If fstat : Raz [F:SLT] : Endif Endif If [F:SLT]AVASTOCOD<>2 : Return : Endif If GREP="" Affzo [M:SOH4]WSTKTXT Affzo [M:SOH4]WALLTXT Return Endif Local Integer WRET Local Decimal WSTUDISSTU, WSTUDIS, WSTUDISSTU_STODISALL, WSTUDISSTU_CALFDMA Local Char WNUM Local Char WSTKTXTMESS(255)(0..1) : Raz WSTKTXTMESS Local Date WDATE_FDMA Local Integer WALL If find(GUSERERBPC, 2,3) WNUM=vireblc(format$("K:15X",[M:SOH0]BPCORD)+format$("K:3X",[M:SOH4]DBPAADD(NOL)), 1) : Endif Raz WSTKTXTMESS Call STODISALL([M:SOH4]DSTOFCY(NOL),[M:SOH4]ITMREF(NOL),2,[M:SOH4]DALLTYP(NOL),2,2,1,"",WNUM,"",WSTUDISSTU,WRET) From STKALL If WRET=1 : Raz [M:SOH4]WSTKTXT : Affzo [M:SOH4]WSTKTXT : Return : Endif WSTUDISSTU_STODISALL = WSTUDISSTU If WSTUDISSTU > 0 #--stock is available for entire quantity WSTUDIS=WSTUDISSTU*(1/[M:SOH4]SAUSTUCOE(NOL)) Call QTEARR(WSTUDIS, [M:SOH4]SAU(NOL)) From TRTDIV WSTKTXTMESS(0) = [M:SOH4]ITMREF(NOL)-mess(47,191,1)+num$(WSTUDISSTU)-[M:SOH4]STU(NOL)-"/"+mess(380,197,1)+num$(WSTUDIS)-[M:SOH4]SAU(NOL)-mess(4,2972,1) Else WSTKTXTMESS(0) = [M:SOH4]ITMREF(NOL)-":"-mess(409,197,1)-mess(4,2972,1) Endif If WSTUDISSTU < 0 or WSTUDISSTU < [M:SOH4]QTYSTU(NOL) WDAT_FDMA = [0/0/0] WALL=2 Call CAL_FDMA([M:SOH4]DSTOFCY(NOL),[M:SOH4]ITMREF(NOL),2,[M:SOH0]SOHNUM,[M:SOH4]SOPLIN(NOL),[M:SOH4]SOPLIN(NOL),WALL,[M:SOH4]QTYSTU(NOL),WSTUDISSTU,WDAT_FDMA) From STKLIB If WDAT_FDMA <> [0/0/0] If WSTUDISSTU>0 WSTUDISSTU_CALFDMA = WSTUDISSTU WSTUDIS=WSTUDISSTU*(1/[M:SOH4]SAUSTUCOE(NOL)) Call QTEARR(WSTUDIS, [M:SOH4]SAU(NOL)) From TRTDIV WSTKTXTMESS(1) = mess(102,191,1)+num$(WSTUDISSTU)-[M:SOH4]STU(NOL)-"/"+mess(380,197,1)+num$(WSTUDIS)-[M:SOH4]SAU(NOL)-mess(38,197,1)-format$(GFMDAT,WDAT_FDMA) Endif Endif Endif [M:SOH4]WSTKTXT = WSTKTXTMESS(0) If WSTKTXTMESS(1)<>"" [M:SOH4]WSTKTXT -= "-"-WSTKTXTMESS(1) Endif Affzo [M:SOH4]WSTKTXT Affzo [M:SOH4]WALLTXT Return # /User Story X3-46075 Task X3-48218 - 2017-08-17 by CPO #------------------------------------------------------------------------------------------------------ # User Story X3-46075 Task X3-48218 - 2017-08-17 by CPO : ANALYSIS_FDMA_Display_Quantity_Available_field_on_Sales_Order_line $DISPLAY_ALLQTY_STOCKSTATUS23 If dim([M:SOH4]WALLTXT)<=0 : Return : Endif #--We stop if item not managed into stock or if import/webservice context If [M:SOH4]STOMGTCOD(NOL)=1 or GIMPORT or GWEBSERV Return Endif Raz [M:SOH4]WALLTXT #--We carry on only if the available stock block is set as displayed for the current sales order transaction If GSOHVALLIG<>2 : Return : Endif If clalev([F:SLT])=0 : Local File SALTRS [SLT] : Endif If [F:SLT]STRTYP<>2 or [F:SLT]STRNUM<>GFLAG Read [F:SLT]SLT0=2;GFLAG If fstat : Raz [F:SLT] : Endif Endif If [F:SLT]AVASTOCOD<>2 : Return : Endif If GREP="" Raz [M:SOH4]WSTKTXT Affzo [M:SOH4]WSTKTXT Affzo [M:SOH4]WALLTXT Return Endif Local Integer WRET Local Decimal WSTUDISSTU, WSTUDIS, WRALQTYSTU, WXRALQTY,WXRALQTYSTU Local Char WNUM Local Char WSTKTXTMESS(255)(0..1) : Raz WSTKTXTMESS # ------------------------------------------------------------------------------- # # Affichage de la quantité restant à allouer et de la quantité disponible # # ------------------------------------------------------------------------------- # # Calcul du total alloué : à allouer + préparé + livré/facturé WTALLQTY = [M:SOH4]ALLQTY(NOL)+[M:SOH4]SHTQTY(NOL)+[M:SOH4]OPRQTY(NOL)+[M:SOH4]PREQTY(NOL)+[M:SOH4]ODLQTY(NOL) If [M:SOH0]SOHCAT = 3 WTALLQTY += [M:SOH4]INVQTY(NOL) Else WTALLQTY += [M:SOH4]DLVQTY(NOL) Endif # Calcul du reste à allouer : Commandé - total alloué WRALLQTY = [M:SOH4]QTY(NOL)-WTALLQTY #--si tout est alloué, pas la peine de continuer, on raz le champ et on sort #If WRALLQTY<=0 : Raz [M:SOH4]WSTKTXT : Affzo [M:SOH4]WSTKTXT : Return : Endif WRALLQTYSTU = WRALLQTY*[M:SOH4]SAUSTUCOE(NOL) Call QTEARR(WRALQTYSTU, [M:SOH4]STU(NOL)) From TRTDIV # Calcul stock disponible If find(GUSERERBPC, 2,3) WNUM=vireblc(format$("K:15X",[M:SOH0]BPCORD)+format$("K:3X",[M:SOH4]DBPAADD(NOL)), 1) : Endif Call STODISALL([M:SOH4]DSTOFCY(NOL),[M:SOH4]ITMREF(NOL),2,[M:SOH4]DALLTYP(NOL),2,2,1,"",WNUM,"",WSTUDISSTU,WRET) From STKALL If WRET=1 : Raz [M:SOH4]WSTKTXT : Affzo [M:SOH4]WSTKTXT : Return : Endif #• The stock is availabe for the whole quantity or the qtock is partially available. The following information is displayed: #o 'PRODUCT: Remaining quantity to be allocated in stock unit: XXXX UN / In Sales unit: YYYY SAL - Available stock XXXX UN / YYYY SAL' (UN and SAL are the unit stock and sales unit for the current # product) #• The stock is not available. The following information is displayed: #o 'PRODUCT: Remaining quantity to be allocated in stock unit: XXXX UN / In Sales unit: YYYY SAL - Not available' If WSTUDISSTU > 0 WSTUDIS=WSTUDISSTU*(1/[M:SOH4]SAUSTUCOE(NOL)) Call QTEARR(WSTUDIS, [M:SOH4]SAU(NOL)) From TRTDIV WSTKTXTMESS(0) = [M:SOH4]ITMREF(NOL)-":"-mess(46,191,1)-num$(WRALLQTYSTU)-[M:SOH4]STU(NOL)-"/"+mess(380,197,1)+num$(WRALLQTY)-[M:SOH4]SAU(NOL)-"-"-mess(163,197,1)+num$(WSTUDISSTU)-[M:SOH4]STU(NOL) & -"/"+mess(380,197,1) & + & num$(WSTUDIS)-[M:SOH4]SAU(NOL) Else WSTKTXTMESS(0) = [M:SOH4]ITMREF(NOL)-":"-mess(46,191,1)-num$(WRALLQTYSTU)-[M:SOH4]STU(NOL)-"/"+mess(380,197,1)+num$(WRALLQTY)-[M:SOH4]SAU(NOL)-"-"-mess(409,197,1) Endif [M:SOH4]WALLTXT = WSTKTXTMESS Affzo [M:SOH4]WALLTXT Return # /User Story X3-46075 Task X3-48218 - 2017-08-17 by CPO #------------------------------------------------------------------------------------------------------ # Issue X3-126595 ###################################################################################### $ECCVALMAJMIN_ENABLE23 # FGR 01/04/2015 : X3SUIVI105605 If [M:SOH4]TALLQTYSTU(nolign-1) > 0 Then mkstat = 2 Endif If find([M:SOH4]LINTYP(nolign-1),3,4,5,11,12,13) Then mkstat = 2 Endif Return # 105605 : CCM - Revision index (LD:18/06/15) # -------------------------------------------------- # # Contrôle lié à la contremarque : # # -------------------------------------------------- # $ECCVALMAJMIN_CTM23 Local Integer WOK : WOK=2 If [M:SOH4]FMINUM(NOL) = "" Return Endif If [M:SOH4]FMI(NOL)=2 # Cette ligne a fait l'objet d'une contremarque directe GMESSAGE = mess(270,191,1) : mkstat = 2 Elsif [M:SOH4]FMI(NOL)=3 # Cette ligne a fait l'objet d'une contremarque réceptionnée GMESSAGE = mess(271,191,1) If GMODU(6)=2 Local File PORDER [POH] Read [POH]POH0=[M:SOH4]FMINUM(NOL) If fstat Raz [F:POH] Endif # La commande d'achat est imprimée If [F:POH]PRNFLG=2 GMESSAGE= GMESSAGE+"."-mess(272,191,1) Endif Endif Call AVERTIR(GMESSAGE,WOK) From GESECRAN Raz GMESSAGE If WOK=1 mkstat=2 Endif Elsif [M:SOH4]FMI(NOL)=5 # Cette ligne a fait l'objet d'une ordre de fabrication GMESSAGE = mess(269,191,1) : mkstat = 2 Endif Return # 105605 : CCM - Revision index (LD:18/06/15) ###################################################################################### # pour la navigation vers le plan d'affectation $MEM_VCR23 If find(GREP,"C","D") If dim(GVCR)=1 : # If dim(GVCR) : # GH 24/10/12 bug 85427 Raz GVCR, GLIN, GSEQ Endif Return Endif If dim(GVCR) < 0 Global Char GVCR Global Integer GLIN Global Integer GSEQ Endif GVCR = [M:SOH0]SOHNUM GLIN = [M:SOH4]SOPLIN(nolign-1) GSEQ = [M:SOH4]SOPLIN(nolign-1) Return # -------------------------------------------------------------------------------- # Affichage des champs suite à la recherche tarif # -------------------------------------------------------------------------------- $AFF_RECH_TAR23 If dim(GWEBSERV)=1 & GWEBSERV=1 Return Endif Affzo [M:SOH4]GROPRI(NOL) If dim([M:SOH4]DISCRGVAL1(NOL))>0 Affzo [M:SOH4]DISCRGVAL1(NOL) Endif If dim([M:SOH4]DISCRGVAL2(NOL))>0 Affzo [M:SOH4]DISCRGVAL2(NOL) Endif If dim([M:SOH4]DISCRGVAL3(NOL))>0 Affzo [M:SOH4]DISCRGVAL3(NOL) Endif If dim([M:SOH4]DISCRGVAL4(NOL))>0 Affzo [M:SOH4]DISCRGVAL4(NOL) Endif If dim([M:SOH4]DISCRGVAL5(NOL))>0 Affzo [M:SOH4]DISCRGVAL5(NOL) Endif If dim([M:SOH4]DISCRGVAL6(NOL))>0 Affzo [M:SOH4]DISCRGVAL6(NOL) Endif If dim([M:SOH4]DISCRGVAL7(NOL))>0 Affzo [M:SOH4]DISCRGVAL7(NOL) Endif If dim([M:SOH4]DISCRGVAL8(NOL))>0 Affzo [M:SOH4]DISCRGVAL8(NOL) Endif If dim([M:SOH4]DISCRGVAL9(NOL))>0 Affzo [M:SOH4]DISCRGVAL9(NOL) Endif Affzo [M:SOH4]REPCOE(NOL) Affzo [M:SOH4]NETPRI(NOL) Return # End issue X3-126595 # 139565 : Milestone billing / X3-185425 - 2020-03-19 by LD # Pour une ligne de commande avec echeancier, controle qu'un code PJT est compatible avec les jalons liés aux lignes d'échéancier # Ctrl ssi code activité "PJM" actif # For a line with schedule invoices, control that a PJT code is compatible with the milestones linked to the schedule invoices # Control only if "PJM" code activity active $CTL_PJT_COMPATIBILITY23 Local Integer WOK : WOK=2 If !func ASYRFNC.ACTIV("PJM") Return Endif Local Integer IRET # Racine nouveau PJT # Root new PJT Local Char WNEWPROJECT(GLONPIM) Local Char WNEWBUDGET(GLONPBU) Local Char WNEWTASK(GLONTAC) IRET = func PIMPL_CSTD_PROGS.PJM_KEY_SPLIT(GACTX, WNEWPJT, WNEWPROJECT, WNEWBUDGET, WNEWTASK) # L'ancien code PJT était vide et il a été renseigné # The old PJT code was empty and it has been fed # Issue X3-110981/189977 - 2020-06-10 by MUARN : strict control of PJT #If WOLDPJT="" # Call AVERTIR (mess (289, 191,1)-WNEWPROJECT, WOK) From GESECRAN # If WOK=1 WRET = [V]CST_AERROR Endif # Return #Endif # Le code PJT a été modifié : A-t-il la même racine ? # The PJT code has been modified : Does it have the same root ? # Racine ancien PJT # Root old PJT Local Char WOLDPROJECT(GLONPIM) Local Char WOLDBUDGET(GLONPBU) Local Char WOLDTASK(GLONTAC) IRET = func PIMPL_CSTD_PROGS.PJM_KEY_SPLIT(GACTX, WOLDPJT, WOLDPROJECT, WOLDBUDGET, WOLDTASK) If WOLDPROJECT=WNEWPROJECT Return Endif # Issue X3-110981/189977 - 2020-06-10 by MUARN : strict control of PJT # Le nouveau PJT n'a pas la même racine # The new PJT does not have the same root #Call AVERTIR (mess (289, 191,1)-WNEWPROJECT, WOK) From GESECRAN #If WOK=1 WRET = [V]CST_AERROR Endif # Issue X3-110981/189977 - 2020-06-10 by MUARN : strict control of PJT Raz GERR Gosub AM_DPJT_PJTMST_CTRL From LIBSAL_INVCND_SOH If GERR=1 : WRET = [V]CST_AERROR : mkstat=2 : Endif # End issue X3-110981/189977 Return ######################################################################### # # # Etiquettes appelées par SUBSOH # # # # $TEST_INS : Test d'insertion d'une ligne de commande # # $TEST_ANU : Test de suppression d'une ligne de commande # # $TEST_MOD : Test de modification d'une ligne de commande # # $CTR_BPCOST : Contrôle client bloqué # # $CTR_STOFCY : Contrôle modification site expédition entête # # $CTR_QTY : Contrôle qtée cdée avec qtée mini et maxi # # $CTR_CTM : Contrôle lié à la contremarque # # $CTR_BETFCY : Contrôle lié à l'intersociete # # $CTR_LOC : Contrôle emplacement client pour les cdes prêts # # $CTR_LNDBETFCY : Contrôle lié à l'intersociete # # $VERIF_LIGNE : Vérification des lignes (recherche interdit) # # $RECALC_LIGNE : Traitement des lignes # # $TRT_RPLITM : Traitement de l'article de remplacement # # # # Etiquettes appelées par SUBSOHA # # # # $RECALC_GROUPE : Recalcul des lignes suite à tarif groupé # # $TR_ALLOC : Bouton allocation de la commande # # $MAJSTASOH : Recalcul des états de la commande # # $MAJADRESSE : Mise à jour de l'adresse # # $CHARGE_ADRBPC : Chargement de l'adresse commande # # $CHARGE_ADRBPI : Chargement de l'adresse facture # # $CHARGE_ADRBPD : Chargement de l'adresse livraison # # $GEN_COM : Génération commande depuis les devis # # # # Traitements communs et Etiquettes communes # # # # Subprog LECT_FIC(NLIG) # # Lecture de tous les fichiers utiles à une ligne # # Subprog INIT_SOH(NLIG, AFF) # # Init. des zones détails venant de l'entête # # Subprog INIT_ITM(NLIG, ITMREF) # # Init. des zones détails venant de l'article # # Subprog AVANT_LIGNE(NLIG, AFF) # # Traitement d'avant lignes # # Subprog VERIF_VATCOD(NLIG) # # Vérification des codes taxes # # Subprog APRES_LIGNE(NLIG, AFF) # # Traitement d'apres lignes # # Subprog ADD_TOT(NLIG, AFF) # # Calcul des montants total de la commande en + # # Subprog SUB_TOT(NLIG, AFF) # # Calcul des montants total de la commande en - # # Subprog SUP_LIG(NLIG, WRET) # # Suppression d'une ligne dans le tableau # # # # $TRT_CLESOQ : Traitement de solde d'une ligne de commande # # $CALC_SOQSTA : Recalcul de l'état de la ligne de commande # # $CALC_DLR : Calcul mnts à livrer HT et TTC d'une ligne commnande# # $CALC_ORD : Calcul mnts ht et ttc d'une ligne commande # # # ######################################################################### # Issue 110640 - 20150831 by LD : CCM et article de remplacement # Issue 110706 - 20151012 by LD : Picking devis et composé nomenclature # Issue 106149 - 20160316 by LD : Entry point ADD_TOT and SUB_TOT # Issue 116275 - 20160615 by LD : Compteur commande de vente depuis saisi devis # Issue 116789 - 20170106 by LD : Entry point CALC_ORD # Issue X3-66385 - 20180221 by LD : Sales order: Default package by shipment site # Issue X3-59918 - 20180427 by LD : Grouped pricing doesn't work in an order created from a quote # Issue X3-243729 - 2021-05-31 SDEM --> deletion SO lines contracts with status create #-------------------------------# # Test d'insertion de ligne # #-------------------------------# $TEST_INS If GREP="D" # --> Ctrl particulier en dupli. pour l'euro : vérifier que ce n'est pas une devise "in" Call CONTDEV([M:SOH1]CUR,[M:SOH0]ORDDAT) From TRTDEV If mkstat=2 Return Endif Endif # Issue X3-142391 - 2020-04-08 by SR : Tests web service mode in order to not update mkstat and write the error #If [M:SOH2]STOFCY="" GMESSAGE = mess(174,192,1) : mkstat=2 : Return : Endif If [M:SOH2]STOFCY="" GMESSAGE = mess(174,192,1) If !(dim(GWEBSERV)=1 & GWEBSERV=1) mkstat=2 Else Call ERREUR(GMESSAGE) From GESECRAN Endif Return Endif # Si transformation d'un devis avec prospect il est possible que la condition de paiement soit à "" # Issue X3-142391 - 2020-04-08 by SR : Tests web service mode in order to not update mkstat and write the error #If [M:SOH3]PTE="" GMESSAGE = mess(264,192,1) : mkstat=2 : Return : Endif If [M:SOH3]PTE="" GMESSAGE = mess(264,192,1) If !(dim(GWEBSERV)=1 & GWEBSERV=1) mkstat=2 Else Call ERREUR(GMESSAGE) From GESECRAN Endif Return Endif # Issue X3-186206 - 2020-05-14 by MUARN : as picking #If dim([M:SOH4]ITMREF) < [M:SOH4]NBLIG + 2 If [M:SOH4]NBLIG+1 >= dim([M:SOH4]ITMREF)-1 # Issue X3-142391 - 2020-04-08 by SR : Tests web service mode in order to not update mkstat and write the error #GMESSAGE = mess(122,199,1): mkstat=2: Return GMESSAGE = mess(122,199,1) If !(dim(GWEBSERV)=1 & GWEBSERV=1) mkstat=2 Else Call ERREUR(GMESSAGE) From GESECRAN Endif Return Endif # --> pas d'insertion si composant kit/sous-traité If ([M:SOH4]LINTYP(NOL)>2 & [M:SOH4]LINTYP(NOL)<=5) | ([M:SOH4]LINTYP(NOL)>10 & [M:SOH4]LINTYP(NOL)<=13) If [M:SOH4]CREFLG(NOL) <> 0 GMESSAGE = mess(97,192,1) Endif If !(dim(GWEBSERV)=1 & GWEBSERV=1) mkstat=2 # Issue X3-142391 - 2020-04-08 by SR : Write the error in web service mode Else If GMESSAGE <> "" : Call ERREUR(GMESSAGE) From GESECRAN : Endif Endif Return Endif If [M:SOH4]LINTYP(NOL) > 6 & [M:SOH4]LINTYP(NOL) <=9 If [M:SOH4]CREFLG(NOL) <> 0 GMESSAGE = mess(97,192,1) Endif # Issue X3-142391 - 2020-04-08 by SR : Tests web service mode in order to not update mkstat and write the error #If !(dim(GWEBSERV)=1 & GWEBSERV=1) mkstat=2 Endif If !(dim(GWEBSERV)=1 & GWEBSERV=1) mkstat=2 Else If GMESSAGE <> "" : Call ERREUR(GMESSAGE) From GESECRAN : Endif Endif Return Endif # --> pas d'insertion si la commande a été générée sur un autre site # Issue X3-142391 - 2020-04-08 by SR : Tests web service mode in order to not update mkstat and write the error If [M:SOH0]ORIFCY<>"" & [M:SOH0]ORIFCY<>[M:SOH0]SALFCY #GMESSAGE = mess(122,199,1)-":"-mess(862,196,1) : mkstat=2 : Return GMESSAGE = mess(122,199,1)-":"-mess(862,196,1) If !(dim(GWEBSERV)=1 & GWEBSERV=1) mkstat=2 Else Call ERREUR(GMESSAGE) From GESECRAN Endif Return Endif # --> pas d'insertion si gratuit # Issue X3-142391 - 2020-04-08 by SR : Tests web service mode in order to not update mkstat and write the error If [M:SOH4]FOCFLG(NOL) = 3 #GMESSAGE = mess(98,192,1) : mkstat = 2 GMESSAGE = mess(98,192,1) If !(dim(GWEBSERV)=1 & GWEBSERV=1) mkstat=2 Else Call ERREUR(GMESSAGE) From GESECRAN Endif Endif Return #------------------------------# # Test de suppression de ligne # #------------------------------# $TEST_ANU Local Integer OK Local Integer ICANDELCON # --> pas de suppression si ligne soldee If [M:SOH4]SOQSTA(NOL) = 3 GMESSAGE = mess(18,192,1) : mkstat=2 : Return Endif # --> pour supprimer cette ligne, il faut la désélectionner de la liste 'sélection devis' If [M:SOH4]DETSQHNUM(NOL)<>"" & [M:SOH4]CREFLG(NOL)=0 GMESSAGE=mess(210,192,1) : mkstat=2 : Return Endif # --> Pas de suppression si ligne préparée ou livrée ou facturée (partiellement ou totalement) If [M:SOH4]TALLQTY(NOL)-[M:SOH4]ALLQTY(NOL)+[M:SOH4]LPRQTY(NOL) > 0 GMESSAGE = mess(313,192,1) : mkstat = 2 : Return Endif # --> Si ligne allouee, dde de confirmation : Si oui, la ligne et les allocations seront supprimées If sum([M:SOH4]ALLQTYSTU(NOL), [M:SOH4]SHTQTYSTU(NOL)) <> 0 OK=2 : Call AVERTIR(mess(119,191,1)-":"-mess(205,100,1), OK) From GESECRAN If OK=1 mkstat=2 : Return : Endif Endif # --> pas de suppression sur un composant kit/sous-traité If ([M:SOH4]LINTYP(NOL)>2 & [M:SOH4]LINTYP(NOL)<6) | ([M:SOH4]LINTYP(NOL)>10 & [M:SOH4]LINTYP(NOL)<14) GMESSAGE = mess(26,192,1) : mkstat = 2 : Return Endif # --> Pas de Suppression multiple s'il y a des composants de nomenclatures If status = 83 & find([M:SOH4]LINTYP(NOL),7,8,9) GMESSAGE = mess(172,192,1) : mkstat=2 : Return Endif # --> Pas de Suppression multiple s'il y a des gratuits If status = 83 & [M:SOH4]FOCFLG(NOL) = 3 GMESSAGE = mess(172,192,1) : mkstat=2 : Return Endif # --> pas de suppression si ligne en ctm et contremarque générée If [M:SOH4]FMINUM(NOL) <> "" Local Integer WOK : WOK=1 Call AVERTIR (mess(52,191,1), WOK) From GESECRAN If WOK=1 mkstat=2 : Return : Endif Endif # --> pas de suppression si la commande a été générée sur un autre site If [M:SOH0]ORIFCY<>"" & [M:SOH0]ORIFCY<>[M:SOH0]SALFCY GMESSAGE = mess(54,123,1)-":"-mess(862,196,1) : mkstat=2 : Return Endif # 107890 : Scheduled invoices : (LD:21/12/15) # If line tied to a schedule invoice, it is not deletable if the schedule is invoiced If [M:SOH4]DINVCND(NOL)<>"" & [M:SOH4]INVQTY(NOL)<>0 GMESSAGE = mess(54,123,1)-":"-mess(436,192,1) : mkstat=2 : Return Endif # 107890 : Scheduled invoices : (LD:21/12/15) # 200515 : Progress billing / X3-199457 : Control on sales order lines associated to a billing plan - 2020-07-16 by LD # If the line is associated to a billing plan, it is not deletable If dim([M:SOH4]PRGBILNUM)> 0 & [M:SOH4]PRGBILNUM(NOL)<>"" GMESSAGE = mess(54,123,1)-":"-func AFNC.MES1(mess(291,191,1),"")-[M:SOH4]PRGBILNUM(NOL) : mkstat=2 : Return Endif # 200515 : Progress billing / X3-199457 : Control on sales order lines associated to a billing plan - 2020-07-16 by LD # Issue X3-243729 by SDEM If dim([V]G_AC_PREPM)>0 or [V]G_AC_PREPM & [V]GPREFUN = 2 If find([M:SOH4]PREPSTA([L]NOL),3,4)<>0 GMESSAGE = mess(606,192,1) : mkstat = 2 : Return Elsif [M:SOH4]PREPSTA([L]NOL) = 2 [V]GDEL_ARR(maxtab([V]GDEL_ARR)+1) = [M:SOH4]PCNTNUM([L]NOL) Endif Endif # Issue X3-243729 End ####################################################################### # FGR 14/02/2014 : X3SUIVI96419 (début) ##Modif CRM 31/10/2000 ##Suppression du contrat de service associé à une ligne de commande. #If [M:SOH4]CONNUM(NOL) <> "" # If [M:SOH4]NBLIG > 1 # #Souhaitez-vous supprimer le ou les contrats de services associés à cette ligne de commande ? # Call OUINON(mess(337, 196, 2), ICANDELCON) From GESECRAN # If ICANDELCON = 2 # Call DELSOHCON(2, [M:SOH0]SOHNUM, [M:SOH4]SOPLIN(NOL)) From SUBCONB1 # Endif # Endif #Endif # FGR 14/02/2014 : X3SUIVI96419 (fin) Return #-------------------------------# # Test de modification de ligne # #-------------------------------# $TEST_MOD NOL=nolign-1 # --> pas de modification si ligne soldee #If [M:SOH4]SOQSTA(NOL) = 3 mkstat=2 : GMESSAGE = mess(18,192,1) Endif If zoncou="NBLIG" #--CPO 103367 Eviter affichage erreur 2x si tab sur ligne préc # FGR 04/01/2016 : X3SUIVI112575 (début) #If [M:SOH4]SOQSTA(NOL) = 3 mkstat=2 : GMESSAGE = mess(18,192,1) Endif If [M:SOH4]SOQSTA(NOL) = 3 Then If !(dim(GWEBSERV)=1 & GWEBSERV=1) Then mkstat = 2 Endif GMESSAGE = mess(18,192,1) Endif # FGR 04/01/2016 : X3SUIVI112575 (fin) Endif # --> pas de modification sur un composant kit If ([M:SOH4]LINTYP(NOL)>2 & [M:SOH4]LINTYP(NOL)<6) # --> Test pour ne pas avoir le message en creation ! If [M:SOH4]CREFLG(NOL) <> 0 GMESSAGE = mess(26,192,1) Endif If !(dim(GWEBSERV)=1 & GWEBSERV=1) mkstat=2 Endif Endif # FGR 14/02/2014 : X3SUIVI96419 (début) If [M:SOH4]SOQSTA(NOL) <> 3 and [M:SOH4]CONNUM(NOL) <> "" Then # Ligne contrat désoldée pour être supprimée uniquement #mkstat = 2 # FGR 04/01/2016 : X3SUIVI112575 If !(dim(GWEBSERV)=1 & GWEBSERV=1) Then mkstat = 2 Endif # FGR 04/01/2016 : X3SUIVI112575 GMESSAGE = mess(392,192,1) Endif # FGR 14/02/2014 : X3SUIVI96419 (fin) Gosub LOAD_GUPD_SO_LINE From SUBSOHA1 #Issue X3-243729 by SDEM Return #------------------------------------------------------# # Contrôles modification site expédition entête # #------------------------------------------------------# $CTR_STOFCY Local Char WFCY : WFCY=VALEUR Local Integer OK : OK=1 # --> Site non modifiable si il y a des allocations If sum([M]ALLQTY,[M]SHTQTY) <> 0 If [M]DME = 3 mkstat = 2 : GMESSAGE= mess(90,192,1) : Return Else Call AVERTIR(mess(119,191,1)-":\"-mess(205,100,1),OK) From GESECRAN If OK=1 mkstat=2 : Return : Endif Endif Endif # --> Site non modifiable si il y a des préparations If sum([M]LPRQTY,[M]OPRQTY,[M]PREQTY) <> 0 If [M]DME = 3 mkstat = 2 : GMESSAGE= mess(9,123,1)-":\"-mess(310,192,1) : Return Else OK=1:Call AVERTIR(mess(310,192,1)-":\"-mess(205,100,1),OK) From GESECRAN If OK=1 mkstat=2 : Return : Endif Endif Endif # 107888 : Scheduled invoices : (LD:19/05/16) #If [M]SOHCAT <> 3 & sum([M]ODLQTY,[M]DLVQTY) <> 0 # If [M]DME = 3 # mkstat = 2 : GMESSAGE= mess(9,123,1)-":\"-mess(120,191,1) : Return # Else # OK=1:Call AVERTIR(mess(120,191,1)-":\"-mess(205,100,1),OK) From GESECRAN # If OK=1 mkstat=2 : Return : Endif # Endif #Endif # --> Commande normale/prêt # --> Site non modifiable s'il y a des livraisons (pour les articles livrables) ou des factures (pour les articles non livrables) If [M]SOHCAT <> 3 & sum([M]ODLQTY,[M]DLVQTY,[M]INVQTY) <> 0 If [M]DME = 3 mkstat = 2 : GMESSAGE= mess(9,123,1)-":\"-mess(275,191,1) : Return Else OK=1:Call AVERTIR(mess(275,191,1)-":\"-mess(205,100,1),OK) From GESECRAN If OK=1 mkstat=2 : Return : Endif Endif Endif # 107888 : Scheduled invoices : (LD:19/05/16) # --> Commande à facturation directe # --> Site non modifiable si il y a des factures If [M]SOHCAT = 3 & sum([M]ODLQTY, [M]INVQTY) <> 0 If [M]DME = 3 mkstat = 2 : GMESSAGE= mess(9,123,1)-":\"-mess(58,117,1) : Return Else OK=1:Call AVERTIR(mess(58,117,1)-":\"-mess(205,100,1),OK) From GESECRAN If OK=1 mkstat=2 : Return : Endif Endif Endif # --> Site non modifiable si une contremarque a été générée If sum([M]FMINUM) <> "" mkstat = 2 : GMESSAGE= mess(9,123,1)-":\"-mess(53,191,1) : Return Endif # --> Site non modifiable si un article-site est inexistant Gosub VERIF_LIGNE_ITF From TRTVENCDE If OK=0 GMESSAGE =GMESSAGE-mess(25,192,1)-WFCY-"\"-mess(9,123,1) : mkstat=2 : Return : Endif Return #----------------------------------------# # Contrôle qte avec qte mini et qte maxi # #----------------------------------------# $CTR_QTY Local Decimal QTY_UV # --> Calcul de la qtée cdée en UV If [M:SOH4]SAU(NOL) <> [F:ITM]SAU Call SCAL_QUV(VALEUR, [M:SOH4]ITMREF(NOL),[M]BPCORD,[M:SOH4]SAU(NOL),[F:ITM]SAU, QTY_UV, GBIDD1) From TRTVENQTE Else QTY_UV = VALEUR Endif # --> Controle qte cdee >= a la qte minimale If QTY_UV < [F:ITS]MINQTY & [F:ITS]MINQTY > 0 GMESSAGE = sum(mess(12,192,1), format$("N:"+GFMTQTY, num$([F:ITS]MINQTY)), " ", [F:ITM]SAU) If GDACLOK = 1 mkstat=2 : Return Else GERR=2 : Endif Endif # --> Controle qte cdee <= a la qte maximale If QTY_UV > [F:ITS]MAXQTY & [F:ITS]MAXQTY > 0 If GERR=2 GMESSAGE += "\" Endif GMESSAGE += sum(mess(13,192,1), format$("N:"+GFMTQTY, num$([F:ITS]MAXQTY)), " ", [F:ITM]SAU) If GDACLOK = 1 mkstat=2 Else GERR=2 : Endif Endif Return $CTR_CTM Local Integer OK : OK=2 # -------------------------------------------------- # # Contrôle lié à la contremarque : # # La ligne a fait l'objet d'une contremarque # # -------------------------------------------------- # #If find([M:SOH4]FMI(NOL),2,3,5) & [M:SOH4]FMINUM(NOL) <> "" : # 88016 If find([M:SOH4]FMI(NOL),3,5) & [M:SOH4]FMINUM(NOL) <> "" : # 88016 # 88016 : # Si Ctm réceptionnée, Ctm production : Msg avertissement # 105605 : CCM - Revision index (LD:18/06/15) #Call AVERTIR(mess(52,191,1),OK) From GESECRAN If [M:SOH4]FMI(NOL)=3 # Cette ligne a fait l'objet d'une contremarque réceptionnée Call AVERTIR(mess(271,191,1),OK) From GESECRAN Else # Cette ligne a fait l'objet d'un ordre de fabrication Call AVERTIR(mess(269,191,1),OK) From GESECRAN Endif # 105605 : CCM - Revision index (LD:18/06/15) # 88016 : # Si Ctm directe : Ctrl bloquant Elsif [M:SOH4]FMI(NOL)=2 & [M:SOH4]FMINUM(NOL) <> "" GMESSAGE = mess(52,191,1): mkstat = 2 # 88016 Endif Return $CTR_BETFCY Local Integer OK : OK=2 # ----------------------------------------------------------- # # Contrôle lié à l'inter-société : # # La commande a été générée à partir d'une commande d'achat # # ----------------------------------------------------------- # If [M:SOH0]ORIFCY<>"" & [M:SOH0]ORIFCY<>[M:SOH0]SALFCY Call AVERTIR(mess(148,191,1),OK) From GESECRAN If OK=1 mkstat=2 Endif Endif Return #----------------------------------------# # Contrôles liés à l'inter-société # #----------------------------------------# $CTR_LNDBETFCY # Bug 56725 : Interdire la saisie d'une commande inter-site de prêt # (désactivation du ctrl possible par spécifique si GLNDBETFCY est déclaré et =1) If dim(GLNDBETFCY)>0 & GLNDBETFCY=1 Return Endif If WLND=2 & WBETFCY=2 GMESSAGE=mess(291,192,1) : mkstat=2 : Return : Endif Return $CTR_LOC Local Integer OK # -------------------------------------------------- # # Si commande de prêt # # --> Contrôle de l'emplacement client # # -------------------------------------------------- # If [M:SOH0]SOHCAT = 2 & GMODU(7)=2 If !clalev ([F:STC]) Local File STOLOC [STC] Endif Read [STC]STC0=WSTOFCY;[F:BPD]BPCLOC If fstat GMESSAGE = mess(117,192,1) mkstat = 2 # <MG> 31/01/01 Elsif [F:STC]LOCCAT <> 3 GMESSAGE = mess(118,192,1) mkstat = 2 Endif Close Local File [STC] Endif Return # 79705 : SAT in SPRICLINK : Step 2 #-------------------------------------------------------------------------------------# # Etiquette de recherche des interdits pour une commande # #-------------------------------------------------------------------------------------# # Déclenchée suite à modification de l'addresse de liv de l'entête # # Trigered by the invoing term modification # Avec répercussion sur les lignes détails # # # # Appelée par l'action de répercussion TRTMAJDET avant lancement de la répercussion # # TRTMAJDET est appelée en am_modif BPAADD # # (Si interdit alors Refus de la repercussion si SDACLOK=1,Avertissement si SDACLOK=2)# # # # TRTMAJDET is called in am_modif INVCND # # # # FFLGMOD = 1 : Modification de la zone détail # # FFLGMOD = 3 : Comparaison et modification de la zone détail # # FFLGMOD = "",2 : Sur BPAADD, Répercution forcée car GLINREP=1 # #-------------------------------------------------------------------------------------# $VERIF_LIGNES Local Char NOMD, NOME Local Integer NLIG Local Char WREP(GLONREP), WBPAADD (GLONBPD) Local Integer WOK Local Integer SAVNOLIGN : SAVNOLIGN=nolign If [M]ORDSTA = 2 Return : Endif Raz NLIG While NLIG < [M:SOH4]NBLIG If [M:SOH4]SOQSTA(NLIG) <> 3 # Traitement uniquement si la ligne n'est pas soldée If FFLGMOD <> "" NOME = WZONCOU If NOME <> "REP" NOMD = sum ("D", NOME) Else WIND = indice NOMD = sum(NOME, num$(WIND+1)) NOME = sum(NOME, "(", num$(WIND), ")") Endif Gosub VERIF_ZON Endif Endif NLIG+=1 Wend # X3-200515 : Progress billing / X3-220424 : Blocking control on invoicing term update - 2020-11-03 by LD #If GERR=1 mkstat=2 Endif # X3-200515 : Progress billing / X3-220424 : Blocking control on invoicing term update - 2020-11-03 by LD nolign=SAVNOLIGN Return #-------------------------------------# # Vérification de la zone détail # #-------------------------------------# $VERIF_ZON #--- Comparaison zone entête/zone détail If FFLGMOD="3" If evalue("dim([M:SOH4]"+NOMD+"(NLIG))") >0 & evalue("dim([M]"+NOME+")") >0 If evalue("[M:SOH4]"+NOMD+"(NLIG)") <> evalue("[M]"+NOME) : Return : Endif Endif Endif # --- Modification de l'adresse de livraison If NOME = "BPAADD" # Recherche interdit suite modification de l'adresse If dim([M:SOH4]REP1(NLIG)) > 0 WREP=[M:SOH4]REP1(NLIG) If GLINREP=2 # Alimentation des représentants s'ils n'ont pas été alimentés par le client commande If [F:BPC]BPCNUM <> [M:SOH0]BPCORD Read [BPC]BPC0 = [M:SOH0]BPCORD If fstat <> 0 Raz [F:BPC] : Endif Endif # Alimentation du 1er représentant If [F:BPC]REP(0) = "" WREP= [F:BPD]REP(0) Endif Endif Endif WBPAADD=[M:SOH4]DBPAADD(NLIG) [M:SOH4]DBPAADD(NLIG)=VALEUR : # Il faut affecter le champ pour que la recherche interdit ait la bonne valeur nolign=NLIG+1 : # La recherche interdit utilise nolign Call RECH_INTERDIT ([M:SOH4]ITMREF(NLIG), VALEUR, WREP, 2) From TRTVENTAR If mkstat=2 GERR=1 : GMESSAGE=[M:SOH4]ITMREF(NLIG)-":"-GMESSAGE If GTRACE <> "" Call ECR_TRACE(GMESSAGE, 0) From GESECRAN Endif mkstat=0 : Raz GMESSAGE Endif [M:SOH4]DBPAADD(NLIG)=WBPAADD : # Recherche terminée : Réaffectation de la valeur # X3-200515 : Progress billing / X3-220424 : Blocking control on invoicing term update - 2020-11-03 by LD # Invoicing term Elsif NOME = "INVCND" # X3-200515 : Progress billing / X3-222013 : Progress billing - general test - 2020-12-15 by LD # we can't modify the invoicing term on a line with scheduled invoices linked with a milestone If find(GREP,"C","D")=0 & func TRTVENDIV.VERF_SVICD_PJTMST([M:SOH0]SOHNUM, [M:SOH4]SOPLIN(NLIG), [M:SOH4]SOPLIN(NLIG), GMESSAGE) = [V]CST_AERROR GMESSAGE = func AFNC.MES1(mess(255,100,1),num$(NLIG+1))-GMESSAGE GERR=1 : NLIG=[M:SOH4]NBLIG Return Endif #If [M:SOH4]PRGBILNUM(NLIG)<>"" If dim([M:SOH4]PRGBILNUM)> 0 & [M:SOH4]PRGBILNUM(NLIG)<>"" # X3-200515 : Progress billing / X3-222013 : Progress billing - general test - 2020-12-15 by LD GMESSAGE = func AFNC.MES1(mess(291,191,1),num$([M:SOH4]SOPLIN(NLIG)))-[M:SOH4]PRGBILNUM(NLIG) GERR=1 : NLIG=[M:SOH4]NBLIG Endif # X3-200515 : Progress billing / X3-220424 : Blocking control on invoicing term update - 2020-11-03 by LD Endif Return # 79705 : SAT IN SPRICLINK : Step 2 #------------------------------------------------------------------------------# # Appelé en am_modif : Date cde, Devise, Régime, Type prix, # # Représ., Demdlvdat, Daylti, # # Shidat, Dlvpîo, Mdl, Bptnum # # Adr livraison si GLINBPD = 1 # # Site expédition # # --> Si dde Recherche tarif : GTARFLG= "1" # # --> Si modif.régime : Recalc. prix, marge, totaux # # --> Si modif.type prix : Bascule prix # # --> Si modif.devise : Conversion des montants # # --> Si modif.des zones entêtes reportées dans les zones détails # # FFLGMOD = 1 : Modification de la zone détail # # FFLGMOD = 3 : Comparaison et modification de la zone détail # # FFLGMOD = "",2 : Sur BPAADD, Répercution forcée car GLINREP=1 # #------------------------------------------------------------------------------# $RECALC_LIGNE Local Char NOMD, NOME, ACT(1) Local Integer NLIG, I, J, WIND, SPSTAT, ORI Local Decimal MNTORI, MNTDES Local Char VAT(GLONVAT)(3), WREP Local Char WFLGTOT : WFLGTOT="N" Local Integer INICPRPRI : INICPRPRI=1 Local Char WVACITM(GLONTVI)(3) Local Integer WMSG_SHIDAT, WMSG_EXTDLVDAT : # Bug 71079 Raz WMSG_SHIDAT, WMSG_EXTDLVDAT : # Bug 71079 Raz ACT If [M]ORDSTA = 2 Return : Endif If GTARFLG= "1" | [M:SOH1]CUR <> WANCCUR | [M:SOH1]VACBPR <> WANCVACBPR | find(WZONCOU,"BPCORD","STOFCY") Raz [M]ORDNOT, ORDATI, DLRNOT, DLRATI, PFMTOT Raz [M:SOH0]DSPTOTQTY,DSPTOTVOL,DSPTOTWEI :#--CPO 80622 Il faut refaire les totaux # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) Raz [M]INRNOT, INRATI, INRSCHNOT, INRSCHATI # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) Endif #----------------------------------------------------------------# # Modification des lignes détails en fonction des modifs entetes # #----------------------------------------------------------------# Local Integer WMODZON_RESPONSE : WMODZON_RESPONSE = 0 # Issue 107888 - 2016-09-09 by CPO : US155 Kit & flexible kit scheduled invoices Raz NLIG While NLIG < [M:SOH4]NBLIG # 107890 : Scheduled invoices : (LC:28/10/16) If ([M:SOH4]DLVFLG(NLIG)=2 or !find(WZONCOU,"DLVPIO","DEMDLVDAT","DAYLTI","SHIDAT","DEMDLVHOU","DRN","MDL","BPTNUM") & or (WZONCOU="DEMDLVDAT" & [M:SOH0]SOHCAT=3)) # The modification of these header fields only affects to the deliverable lines # 107890 : Scheduled invoices : (LC:28/10/16) (End) If [M:SOH4]SOQSTA(NLIG) <> 3 # Traitement uniquement si la ligne n'est pas soldée If FFLGMOD <> "" NOME = WZONCOU If NOME <> "REP" NOMD = sum ("D", NOME) Else WIND = indice NOMD = sum(NOME, num$(WIND+1)) NOME = sum(NOME, "(", num$(WIND), ")") Endif If FFLGMOD = "3" Gosub COMP_ZON Endif If FFLGMOD <> "3" Gosub MOD_ZON Endif Endif If WZONCOU = "BPCORD" Gosub REINIT_LIGNE : If mkstat=2 Break : Endif Endif If GTARFLG="1" | [M:SOH1]CUR <> WANCCUR | [M:SOH1]VACBPR <> WANCVACBPR | & [M:SOH1]PRITYP <> WANCPRITYP Call LECT_FIC(NLIG) If [M:SOH1]VACBPR <> WANCVACBPR WVACITM(0) = [M:SOH4]VACITM1(NLIG) WVACITM(1) = [M:SOH4]VACITM2(NLIG) WVACITM(2) = [M:SOH4]VACITM3(NLIG) #Call ALITAXEV([M:SOH1]VACBPR,WVACITM,VAT) From TRTX3 Call RECHVATCOD(1,1,[M:SOH0]BPCORD,[M:SOH4]ITMREF(NLIG),"SOH4",NLIG,VAT) From TRTX3 # Bug 75162 : Contrôle que le code taxe1 est bien renseigné Call CTLVAT(VAT(0)) From TRTVENCTL If mkstat=2 GMESSAGE = [M:SOH4]ITMREF(NLIG)-" : "-GMESSAGE : Break Endif # Bug 75162 [M:SOH4]VAT1(NLIG) = VAT(0) [M:SOH4]VAT2(NLIG) = VAT(1) [M:SOH4]VAT3(NLIG) = VAT(2) Endif # --> Recherche tarif If GTARFLG = "1" Gosub RECALC_TARIF Else # --> modif. devise en dupplication : Conversion des montants + recalcul totaux If [M:SOH1]CUR <> WANCCUR Gosub CONV_LIGNE WFLGTOT="O" Endif # --> Modif. regime de taxe : Recalcul des prix, de la marge et des totaux If [M:SOH1]VACBPR <> WANCVACBPR WFLGTOT="O" Endif # --> Modif. Type de prix : Bascule des prix HT et TTC If [M:SOH1]PRITYP <> WANCPRITYP Gosub RECALC_PRI Endif Endif [M]UPDFLG(NLIG) = 1 Endif # --> Nécessité de refaire les totaux If WFLGTOT="O" Gosub RECALC_TOT Endif If [M]UPDFLG(NLIG) = 1 & GREV=2 [M]LINREVNUM(NLIG) = [M:SOH0]REVNUM : Endif # Bug 83665 Else # Si la ligne est soldée, il faut recalculer les totaux si nécessaire If GTARFLG="1" | [M:SOH1]CUR <> WANCCUR | [M:SOH1]VACBPR <> WANCVACBPR | find(WZONCOU,"BPCORD","STOFCY") Call ADD_TOT(NLIG) Endif # Bug 83665 Endif # 107890 : Scheduled invoices : (LC:28/10/16) Endif #---------------------------------------------------------------------# # Point d'entree pour intervenir en spécifique sur une ligne # #---------------------------------------------------------------------# GPOINT="RECALCLIG" : Gosub ENTREE From EXEFNC # Issue X3-200515/X3-208171 - 2020-09-23 by SR : Control price and/or amount If GDACLOK = 1 | (dim([M:SOH4]PRGBILNUM) > 1 & [M:SOH4]PRGBILNUM(NLIG) <> "") Call CTLNETPRI([M:SOH0]BPCORD,[M:SOH0]CHGTYP,[M:SOH0]ORDDAT,[M:SOH0]CUR,NLIG) From TRTVENPRI If mkstat = 2 : GMESSAGE = mess(18,197,1) - num$(NLIG+1) - GMESSAGE Break Endif Endif # End issue X3-200515/X3-208171 NLIG+=1 Wend Kill WMODZON_RESPONSE # Issue 107888 - 2016-09-09 by CPO : US155 Kit & flexible kit scheduled invoices If mkstat=2 Return Endif # 101874 : V9 : Taxe code control #If dim(GVALTTCSOH)>0 & dim(GVALTTC)>0 : GVALTTC=GVALTTCSOH : Endif #If !GIMPORT : Call VALTTC ("GESSOH") From TRTVENFACR : Endif If !GIMPORT # Valuation is always done in this case GVALTTC=2 #---- Paramètres complementaires appel valorisation # PARAM_T(0) : Flag contrôle des taxes (1=Non/2=Oui) # PARAM_T(1) : Lecture de la trace par le sous-pro (1=Non/2=Oui) # PARAM_T(2) : Flag retour (1=KO/2=OK) Local Char PARAM_T (25) (0..10) PARAM_T(0)="1" : # Pas de contrôle des taxes PARAM_T(1)="1" : # Pas de lecture de la trace PARAM_T(2)="0" Call VALTTC ("GESSOH", PARAM_T) From TRTVENFACR If PARAM_T(2)="1" mkstat=2 : Return Endif Endif # 101874 If GREV=2 Affzo [M:SOH0]REVNUM Endif Affzo [M:SOH4]5,10,15,20 Return #------------------------------------------------------# # Reinitialisation d'une ligne lors d'une dupplication # #------------------------------------------------------# $REINIT_LIGNE Local Integer I Local Char SECTION Local Char WREP, WSTOFCY Local Integer WRETOUR Local Char WNUMTEX (12) WSTOFCY=[M:SOH4]DSTOFCY(NLIG) nolign=NLIG+1 Call INIT_SOH (NLIG, 0) # On vérifie au moins que l'article n'est pas interdit If dim([M]REP1(NLIG)) > 0 WREP = [M]REP1(NLIG) : Endif [M:SOH0]BPCORD=VALEUR Call RECH_INTERDIT ([M]ITMREF(NLIG), [M]DBPAADD(NLIG), WREP, 2) From TRTVENTAR If mkstat = 2 GMESSAGE = [M]ITMREF(NLIG)-" : "-GMESSAGE GMESSAGE += "\" + mess(206,192,1) Return Endif # 102681 : Duplication commande avec changement de client # --> Réinitialisation ligne commande à partir de la fiche article-client Gosub REINIT_ITU # 102681 # Changement de site If WSTOFCY <> [M:SOH4]DSTOFCY(NLIG) Gosub MOD_DSTOFCY : Endif # On recharge les sections analytiques # A cause de l'INISEC "SOP" qui peut être paramétré avec [F:POP] If GMODU(6)=2 & GNBDIE>0 Raz [F:POP] : Endif For I = 1 To GNBDIE If evalue("dim([M]CCE"+num$(I)+"(NLIG))") >0 Call INISEC(SECTION, "SOP", I) From TRTX3CPT Assign "[M]CCE"+num$(I)+"(NLIG)" With SECTION Endif Next Raz [M]USEPLC(NLIG) # On recherche la désignation traduite si le client a changé de langue If WANCLAN<>[M:SOH0]LAN Call CHARGE_ITMDES("DES1AXX", [M:SOH0]LAN,[F:ITM]ITMREF,[M:SOH4]ITMDES(NLIG)) From TRTX3 # FGR 29/06/2009 : X3SUIVI56129 : celui-là reste comme ça If [M:SOH4]ITMDES(NLIG) = "" [M:SOH4]ITMDES(NLIG) = [M:SOH4]ITMDES1(NLIG) Endif Endif # Le client a changé : On recharge les textes du nouveau client #If find(GSALTEXLIN,1,5) & find(left$([M:SOH4]SOQTEX(NLIG),3),"ITS","ITU") If find(GSALTEXLIN,1,5) If [F:ITU]ITMREF<>[M:SOH4]ITMREF (NLIG) | [F:ITU]BPCNUM<>[M:SOH0]BPCORD Read [F:ITU]ITU0 = [M:SOH4]ITMREF (NLIG);[M:SOH0]BPCORD If fstat Raz [F:ITU] : Endif Endif If [F:ITU]ITSTEX <> "" # Récup du texte article du nouveau client s'il existe [M:SOH4]SOQTEX(NLIG) = [F:ITU]ITSTEX Elsif left$([M:SOH4]SOQTEX(NLIG),3)="ITU" # Ecrasement texte article ancien client [M:SOH4]SOQTEX(NLIG) = [F:ITS]ITSTEX Endif Endif # 89275 : Duplication cde et ctrl des prix # Faire un ctrl prix si pas de recherche tarif et si nécessaire Raz GNETMAR If GREP= "D" & WZONCOU= "BPCORD" & GTARFLG<>"1" & GDACLOK=1 GNETMAR=1 # --> Ctrl prix net Call CTLNETPRI([M:SOH0]BPCORD, [M]CHGTYP, [M]ORDDAT, [M:SOH0]CUR,NLIG) From TRTVENPRI Raz GNETMAR : Raz GMESSAGE Endif # 89275 [M]UPDFLG(NLIG)=1 If GTARFLG <> "1" WFLGTOT="O" Endif Return # 102681 : Duplication commande avec changement de client # -------------------------------------------------------------------- # # Réinitialisation ligne commande à partir de la fiche article-client # # --------------------------------------------------------------------- # $REINIT_ITU If [F:ITM]ITMREF <> [M:SOH4]ITMREF(NLIG) Read [ITM] ITM0=[M:SOH4]ITMREF(NLIG) If fstat Raz [F:ITM] Endif Endif If [F:ITU]ITMREF <> [M:SOH4]ITMREF(NLIG) | [F:ITU]BPCNUM <> [M:SOH0]BPCORD Read [ITU] ITU0=[M:SOH4]ITMREF(NLIG);[M:SOH0]BPCORD If fstat Raz [F:ITU] Endif Endif # Réinitialisation de l'unité de vente si nécessaire Gosub REINIT_SAU # Réinitialisation de la référence client [M:SOH4]ITMREFBPC(NLIG) = [F:ITU]ITMREFBPC Return # ------------------------------------------------------------------- # # Réinitialisation de l'unité de vente # # -------------------------------------------------------------------- # $REINIT_SAU Local Char WSAUORI(GLONUOM) : WSAUORI = [M:SOH4]SAU(NLIG) Local Decimal WSAUSTUCOEORI : WSAUSTUCOEORI = [M:SOH4]SAUSTUCOE(NLIG) Local Decimal WDACSAUCOEORI : WDACSAUCOEORI = [M:SOH4]DACSAUCOE(NLIG) Local Decimal WQTYORI : WQTYORI = [M:SOH4]QTY(NLIG) Local Char WSAU Local Decimal WSAUSTUCOE, WQTYSAU, WQTY, WQTYSTU, WCOEINVERSE Local Integer WDACSAUCOE # On vérifie tout d'abord que l'UV est bien une unité de l'article # (Dans le cas où elle était l'UV définie pour le client de la cde dupliquée) WSAU=WSAUORI WSAUSTUCOE=WSAUSTUCOEORI WDACSAUCOE=WDACSAUCOEORI WQTYSAU=[M:SOH4]QTY(NLIG) Call CTLUOM([M:SOH4]ITMREF(NLIG), 2, [M:SOH0]BPCORD, WSAU, WSAUSTUCOE, GBIDC1, GBIDC2, WDACSAUCOE) From STKACT If mkstat=2 # L'UV de la ligne de cde d'origine n'est pas une unité de l'article # On réinitialise l'UV avec l'UV de l'article client si elle existe ou avec l'UV de l'article mkstat=0 : Raz GMESSAGE WSAU = [F:ITM]SAU WSAUSTUCOE = [F:ITM]SAUSTUCOE WDACSAUCOE = [F:ITM]DACSAUCOE If [F:ITU]SAU <> "" & find([M:SOH4]LINTYP(NLIG),1,2,6,10) & [M:SOH4]FOCFLG(NLIG) <> 3 WSAU = [F:ITU]SAU WSAUSTUCOE = [F:ITU]SAUSTUCOE WDACSAUCOE = 1 Endif Endif # L'UV est une unité de l'article # L'UV n'est pas une unité de l'article et elle a été réinitialisée While WSAUSTUCOEORI<>WSAUSTUCOE # Le coefficient de conversion a changé # --> Il faut recalculer la qté cdée en UV # On recalcule la nouvelle la qté cdée UV en repartant de la qté US et du nouveau coefficient de conversion WQTYSAU=[M:SOH4]QTYSTU(NLIG) / WSAUSTUCOE Call QTEARR(WQTYSAU,WSAU) From TRTDIV # Conversion de la nvelle qté cdée UV en US pour voir si on obtient le même résultat WQTYSTU=WQTYSAU * WSAUSTUCOE Call QTEARR(WQTYSTU,[M:SOH4]STU(NLIG)) From TRTDIV If WQTYSTU=[M:SOH4]QTYSTU(NLIG) # On obtient la même qté US : On conserve l'unité Break Else # On obtient pas la même qté US : On change l'unité If WSAU=[F:ITU]SAU # Si l'UV était l'UV de l'article client, on prend l'UV de l'article WSAU=[F:ITM]SAU WSAUSTUCOE = [F:ITM]SAUSTUCOE WDACSAUCOE = [F:ITM]DACSAUCOE Elsif WSAU=[F:ITM]SAU # Si l'UV était l'UV de l'article, on prend l'US de l'article WSAU=[F:ITM]STU WSAUSTUCOE = 1 WDACSAUCOE = 1 WQTYSAU=[M:SOH4]QTYSTU(NLIG) Break Else # Si l'UV était une unité de conditionnement, on prend l'UV de l'article client WSAU=[F:ITU]SAU WSAUSTUCOE = [F:ITU]SAUSTUCOE WDACSAUCOE = 1 Endif Endif Wend # On a gardé l'unité de vente et le coefficient d'origine If WSAUORI=WSAU & WSAUSTUCOEORI=WSAUSTUCOE Return Endif # On a modifié l'unité de vente ou le coefficient de conversion # --> Réinitialisation de la ligne avec les nouvelles valeurs [M:SOH4]SAU(NLIG)=WSAU [M:SOH4]SAUSTUCOE(NLIG)=WSAUSTUCOE [M:SOH4]DACSAUCOE(NLIG)=WDACSAUCOE [M:SOH4]QTY(NLIG)=WQTYSAU # --> Réinitialisation de l'emballage et de la capacité # Si l'unité est une unité article client et si l'emballage est différent de celui de la ligne If find([M:SOH4]SAU(NLIG), [F:ITU]SAU,[F:ITU]PCU1,[F:ITU]PCU2) & [F:ITU]PCK<>"" & [F:ITU]PCK<>[M:SOH4]PCK(NLIG) [M:SOH4]PCK(NLIG) = [F:ITU]PCK [M:SOH4]PCKCAP(NLIG) = [F:ITU]PCKCAP Endif # --> Réinitialisation des qtés # Recalcul de la qté à allouer WCOEINVERSE=1/[M:SOH4]SAUSTUCOE(NLIG) If [M:SOH4]WALLQTYSTU(NLIG)<>0 Call CNVQTY([M:SOH4]WALLQTYSTU(NLIG),WCOEINVERSE,[M:SOH4]SAU(NLIG),[M:SOH4]WALLQTY(NLIG)) From TRTVENQTE Endif WFLGTOT="O" # On a gardé le coefficient d'origine If WSAUSTUCOEORI=WSAUSTUCOE Return Endif # On a modifié le coefficient de conversion If [M:SOH4]FOCFLG(NLIG)=3 Return Endif # --> Réinitialisation des prix Gosub REINIT_PRI Return # ------------------------------------------------------------------- # # Réinitialisation des prix # # ------------------------------------------------------------------- # $REINIT_PRI Local Decimal WGROPRIORI : WGROPRIORI = [M:SOH4]GROPRI(NLIG) Local Decimal WNETPRIORI : WNETPRIORI = [M:SOH4]NETPRI(NLIG) Local Decimal WNETPRINOTORI : WNETPRINOTORI = [M:SOH4]NETPRINOT(NLIG) Local Decimal WNETPRIATIORI : WNETPRIATIORI = [M:SOH4]NETPRIATI(NLIG) # --> Recalcul des montants de base calcul de taxe If WQTYORI<>[M:SOH4]QTY(NLIG) Local Decimal WUNTCLCAMT1, WUNTCLCAMT2 : Raz WUNTCLCAMT1, WUNTCLCAMT2 If WQTYORI <> 0 WUNTCLCAMT1=[M:SOH4]CLCAMT1(NLIG): WQTYORI : WUNTCLCAMT2=[M:SOH4]CLCAMT2(NLIG)/WQTYORI Endif Call ALICLCAMT([M:SOH4]ITMREF(NLIG), [M:SOH4]QTY(NLIG), NLIG, "SOH4", [M:SOH4]CLCAMT1(NLIG), [M:SOH4]CLCAMT2(NLIG)) From TRTX3 Endif # --> Recalcul du prix brut If WGROPRIORI<>0 [M:SOH4]GROPRI(NLIG)=WGROPRIORI*(1/WSAUSTUCOEORI)*[M:SOH4]SAUSTUCOE(NLIG) Endif # --> Recalcul du prix net If WGROPRIORI<>[M:SOH4]GROPRI(NLIG) # Bug 70861 : Recalcul prix net si recherche tarif ou si ligne directe (car impact des frais/remise par ligne sur le prix net) WNETPRIORI =[M:SOH4]NETPRI(NLIG) WNETPRINOTORI=[M:SOH4]NETPRINOT(NLIG) : WNETPRIATIORI=[M:SOH4]NETPRIATI(NLIG) Call CLCNETPRI([M:SOH4]QTY(NLIG), [M:SOH0]CUR, NLIG) From TRTVENPRI Endif Return # 102681 #-------------------------------------# # Comparaison zone entête/zone détail # #-------------------------------------# $COMP_ZON #If evalue("[M:SOH4]"+NOMD+"(NLIG)") <> evalue("[M]"+NOME) : Return : ENDIF #If evalue("dim([M:SOH4]"+NOMD+"(NLIG))") >0 & evalue("dim([M:SOH2]"+NOME+")") >0 If evalue("dim([M:SOH4]"+NOMD+"(NLIG))") >0 & evalue("dim([M]"+NOME+")") >0 If evalue("[M:SOH4]"+NOMD+"(NLIG)") <> evalue("[M]"+NOME) : Return : Endif Else Return Endif #-------------------------------------# # Modification de la zone détail # #-------------------------------------# $MOD_ZON #Gbn-86074-Ajout PE pour inhiber le report de modif sur les lignes Local Integer WGPE : WGPE=0 GPOINT="NOUPDLIN" : Gosub ENTREE From EXEFNC If WGPE=1 & (NOME="STOFCY" | (NOME="BPAADD" & GLINBPD=1)) : WGPE=0 : Endif # Pas de modif de comportement pour STOFCY et BPAADD If WGPE=1 : WGPE=0 : Return : Endif # si WGPE=1, pas de report sur les lignes pour les autres infos If NOME = "STOFCY" If GTARFLG <> "1" WFLGTOT="O" Endif # On ne fait rien si la ligne est partiellement allouée, préparée ou livrée ou facturée If sum([M]ALLQTY(NLIG),[M]SHTQTY(NLIG),[M]LPRQTY(NLIG),[M]OPRQTY(NLIG),[M]PREQTY(NLIG),[M]ODLQTY(NLIG),[M]DLVQTY(NLIG),[M]INVQTY(NLIG)) <> 0 Return Endif Endif # Priorité de livraison : Forcer la mise des encours If NOME = "DLVPIO" If [M:SOH4]WIPFLG(NLIG) = "" [M:SOH4]WIPFLG(NLIG) = "M" : Endif Endif # Particularité sur BPAADD : Bien que FFLGMOD="" ou "2" (non) on passe ici : # car GLINREP=1 et il faut de toute façon répercuter les représentants #If find(FFLGMOD,"1","3") Assign "[M:SOH4]"+NOMD+"(NLIG)" With VALEUR : Endif If find(FFLGMOD,"1","3") If evalue("dim([M:SOH4]"+NOMD+"(NLIG))") >0 # 107890 : Scheduled invoices : (LD:08/12/15) # Invoicing condition is managed only for undeliverable item # Invoicing condition is modified only if the line is not invoiced #Assign "[M:SOH4]"+NOMD+"(NLIG)" With VALEUR If NOME = "INVCND" # X3-200515 : Progress billing / X3-220424 : Blocking control on invoicing term update - 2020-11-03 by LD # we can't modify the invoicing term on a line linked to a progress billing If dim([M:SOH4]PRGBILNUM)> 0 & [M:SOH4]PRGBILNUM(NLIG)<>"" Return : Endif # X3-200515 : Progress billing / X3-220424 : Blocking control on invoicing term update - 2020-11-03 by LD # X3-200515 : Progress billing / X3-222013 : Progress billing - general test - 2020-12-15 by LD # we can't modify the invoicing term on a line with scheduled invoices linked with a milestone # this line is not processed If find(GREP,"C","D")=0 and [M:SOH4]DINVCND(NLIG)<>"" and [M:SOH4]DINVCND(NLIG)<>VALEUR If func TRTVENDIV.VERF_SVICD_PJTMST([M:SOH0]SOHNUM, [M:SOH4]SOPLIN(NLIG), [M:SOH4]SOPLIN(NLIG), GBIDC1) = [V]CST_AERROR Return Endif Endif # X3-200515 : Progress billing / X3-222013 : Progress billing - general test - 2020-12-15 by LD If [M:SOH4]DLVFLG(NLIG)=1 & [M:SOH4]INVFLG(NLIG)=1 # Issue 107888 - 2016-09-09 by CPO : US155 Kit & flexible kit scheduled invoices #--An existing invoice condition cannot be changed if at list one invoice condition line #--has a status different then "To be invoiced" If clalev([F:SVICD])=0 : Local File SVCRINVCNDD [SVICD] : Endif If find(GREP,"C","D")=0 and [M:SOH4]DINVCND(NLIG)<>"" and [M:SOH4]DINVCND(NLIG)<>VALEUR Filter [SVICD] Where VCRTYP = 10 and & VCRNUMORI = [M:SOH0]SOHNUM and & VCRLINORI = [M:SOH4]SOPLIN(NLIG) and & VCRSEQORI = [M:SOH4]SOPLIN(NLIG) and & INVCNDSTA > 1 Read [SVICD] First If fstat=0 Filter [SVICD] #--Message... #--"Already existing entry. Creation not suitable !" mkstat =2 # Issue X3-200515/X3-223633 - 2020-11-25 by SR : change message "Import" #GMESSAGE = mess(3,61,1)-num$(NLIG+1)-mess(162,154,1)-[M:SOH4]ITMREF(NLIG)+":"+mess(500,192,1) #"L'échéancier est déjà généré et il contient des lignes facturées/soldées !" GMESSAGE = func AFNC.MES1(mess(255,100,1),num$(NLIG+1))-mess(162,154,1)-[M:SOH4]ITMREF(NLIG)+":"+mess(500,192,1) # 107888 : Scheduled invoices : X3-4962 (LD:12/10/16) # We should ended ? #Return # 107888 : Scheduled invoices : X3-4962 (LD:12/10/16) Endif Filter [SVICD] Endif #--CPO This trigger the warning about deletion of the previous scheduling invoice #--If you don't wont this, then copy here the entire AM_DINVCND code without the wanrning... #Below, code taken from Call AM_DINVCND(VALEUR) From SUBSOH in order to avoid the Call AVERTIR everytime #----------------------------------------------------------- #--The "C_DINVCND" done above will prevent changing an invoice condition if already invoiced lines #--If an existing invoice condition is code is changed, the new one will be generated and the existing deleted #--As the invoice condition is created into the database at the same time at the order, #--the rule only apply while modifying the order lien If [M:SOH4]DINVCND(NLIG)<>VALEUR #--New invoice condition => we start from scratch If dim(GSOHVCRINVCND_UPD)>0 and GSOHVCRINVCND_UPD(NLIG)<>null FreeGroup GSOHVCRINVCND_UPD(NLIG) GSOHVCRINVCND_UPD(NLIG)=null Endif Endif If [M:SOH4]DINVCND(NLIG)<>"" and [M:SOH4]DINVCND(NLIG)<>VALEUR & and [M:SOH4]DINVCNDTODEL(NLIG)=[V]CST_ANO If find(GREP,"C","D")=0 If WMODZON_RESPONSE=0 #--in order to trigger the message only once for all elements GERR=0 WMODZON_RESPONSE=1 # X3-200515 : Progress billing / X3-220424 : Blocking control on invoicing term update - 2020-11-03 by LD #Call AVERTIR(mess(3,61,1)-num$(NLIG+1)-mess(162,154,1)-[M:SOH4]ITMREF(NLIG)+":"+mess(490,192,1),WMODZON_RESPONSE) From GESECRAN Call AVERTIR(func AFNC.MES1(mess(255,100,1),num$(NLIG+1))-mess(162,154,1)-[M:SOH4]ITMREF(NLIG)+":"+mess(490,192,1),WMODZON_RESPONSE) From GESECRAN # X3-200515 : Progress billing / X3-220424 : Blocking control on invoicing term update - 2020-11-03 by LD If WMODZON_RESPONSE<2 : mkstat=2 : Endif # 107888 : Scheduled invoices : X3-4962 (LD:12/10/16) # We should ended ? # If mkstat=2 Return endif # 107888 : Scheduled invoices : X3-4962 (LD:12/10/16) Endif #--Setting the "to delete" flag and filling the invoice condition code to be deleted If mkstat=0 [M:SOH4]DINVCNDTODEL(NLIG)=[V]CST_AYES [M:SOH4]DINVCNDPREV (NLIG)=[M:SOH4]DINVCND(NLIG) Endif Else #--In this case, in LIBSAL_INVCND_SOH_BOM we need the flag to set the kit lines's invoice condition to the same value If [M:SOH4]LINTYP(NLIG)=6 and mkstat = 0 [M:SOH4]DINVCNDUPDK(NLIG)=[V]CST_AYES Endif Endif Endif #--Also, if the user re-fill the former value, we have to unset the "to delete" flag If mkstat = 0 If VALEUR=[M:SOH4]DINVCNDPREV(NLIG) and [M:SOH4]DINVCNDTODEL(NLIG)=[V]CST_AYES [M:SOH4]DINVCNDTODEL(NLIG)=[V]CST_ANO [M:SOH4]DINVCNDPREV (NLIG)="" [M:SOH4]DINVCNDUPDK(NLIG)=[V]CST_ANO Endif [M:SOH4]DINVCNDTOUPD(NLIG)=[V]CST_AYES [M:SOH4]DINVCNDTODIS(NLIG)=[V]CST_ANO #----------------------------------------------------------- # End issue 107888 Assign "[M:SOH4]"+NOMD+"(NLIG)" With VALEUR Else Raz mkstat : Return #--Avoid setting UPDFLG further below Endif Endif Else Assign "[M:SOH4]"+NOMD+"(NLIG)" With VALEUR Endif # 107890 : Scheduled invoices : (LD:08/12/15) Endif Endif #SAM 110881 If NOMD="DDEMDLVDAT" and func AFNC.ACTIV("EDIX3")>0 If [M:SOH4]DDEMDLVDAT(NLIG)> [M:SOH4]MAXDLVDAT(NLIG): [M:SOH4]MAXDLVDAT(NLIG)=[M:SOH4]DDEMDLVDAT(NLIG): Endif Endif #End SAM 110881 [M:SOH4]UPDFLG(NLIG) = 1 # --- Modification de l'adresse de livraison If NOME = "BPAADD" If W_ALICDE=2 # Réalimentation des zones issues du client Gosub MOD_BPAADD Elsif find(FFLGMOD,"1","3") # Pas de réalimentation des zones issues du client on récupère uniquement le contact If dim([M:ADB2]CNTNAM)>0 [M:SOH4]CNDNAM(NLIG) = [M:ADB2]CNTNAM : Endif Endif Endif # --- Modification du site expédition et livraison commande complète If NOME = "STOFCY" Gosub MOD_DSTOFCY : Endif # --- Modification de la Date de livraison demandée et du délai # ==> Recalcul de la date d'expédition et de la date de livraison prévue If NOME = "DEMDLVDAT" | NOME = "DAYLTI" Gosub CALC_SHIDAT # Bug 71079 If mkstat & WMSG_SHIDAT=0 #Call MESSAGE([M:SOH4]ITMREF(NLIG)-":"-mess(278,192,1)-format$(GFMD,[M:SOH4]DSHIDAT(NLIG))-"\"-GMESSAGE) From GESECRAN Call MESSAGE(mess(278,192,1)-"\"-GMESSAGE) From GESECRAN WMSG_SHIDAT=1 Endif mkstat=0 : Raz GMESSAGE # Bug 71079 Gosub CALC_EXTDLVDAT # Bug 71079 If mkstat & WMSG_EXTDLVDAT=0 #Call MESSAGE([M:SOH4]ITMREF(NLIG)-":"-mess(279,192,1)-format$(GFMD,[M:SOH4]EXTDLVDAT(NLIG))-"\"-GMESSAGE) From GESECRAN Call MESSAGE(mess(279,192,1)-"\"-GMESSAGE) From GESECRAN WMSG_EXTDLVDAT=1 Endif mkstat=0 : Raz GMESSAGE # Bug 71079 Endif # --- Modification de la Date d'expédition # ==> Recalcul de la date de livraison prévue If NOME = "SHIDAT" Gosub CALC_EXTDLVDAT # Bug 71079 If mkstat & WMSG_EXTDLVDAT=0 #Call MESSAGE([M:SOH4]ITMREF(NLIG)-":"-mess(279,192,1)-format$(GFMD,[M:SOH4]EXTDLVDAT(NLIG))-"\"-GMESSAGE) From GESECRAN Call MESSAGE(mess(279,192,1)-"\"-GMESSAGE) From GESECRAN WMSG_EXTDLVDAT=1 Endif mkstat=0 : Raz GMESSAGE # Bug 71079 Endif # --- Modification des représentants : Recherche des taux de commissions If find(NOME,"REP(0)","REP(1)") Assign ("[M:SOH4]REPRAT"+num$(WIND+1)+"(NLIG)") With 0 WREP=VALEUR Gosub MOD_REP Endif Return #--------------------------------------------------------# # Modification de l'adresse de livraison # #--------------------------------------------------------# $MOD_BPAADD # If find(FFLGMOD,"1","3") :# 107890 : Scheduled invoices : (LC:28/11/16) If find(FFLGMOD,"1","3") and [M:SOH4]DLVFLG(NLIG)<>1 :# 107890 : Scheduled invoices : (LC:28/11/16) [M:SOH4]DDRN(NLIG) = [M:SOH2]DRN [M:SOH4]DDLVPIO(NLIG) = [M:SOH2]DLVPIO [M:SOH4]DDAYLTI(NLIG) = [M:SOH2]DAYLTI Gosub CALC_SHIDAT : # Recalcul de la date d'expédition # Bug 71079 If mkstat & WMSG_SHIDAT=0 #Call MESSAGE([M:SOH4]ITMREF(NLIG)-":"-mess(278,192,1)-format$(GFMD,[M:SOH4]DSHIDAT(NLIG))-"\"-GMESSAGE) From GESECRAN Call MESSAGE(mess(278,192,1)-"\"-GMESSAGE) From GESECRAN WMSG_SHIDAT=1 Endif mkstat=0 : Raz GMESSAGE # Bug 71079 Gosub CALC_EXTDLVDAT : # Recalcul de la date de livraison prévue # Bug 71079 If mkstat & WMSG_EXTDLVDAT=0 #Call MESSAGE([M:SOH4]ITMREF(NLIG)-":"-mess(279,192,1)-format$(GFMD,[M:SOH4]EXTDLVDAT(NLIG))-"\"-GMESSAGE) From GESECRAN Call MESSAGE(mess(279,192,1)-"\"-GMESSAGE) From GESECRAN WMSG_EXTDLVDAT=1 Endif mkstat=0 : Raz GMESSAGE # Bug 71079 [M:SOH4]DMDL(NLIG) = [M:SOH2]MDL [M:SOH4]DBPTNUM(NLIG) = [M:SOH2]BPTNUM If dim([M:ADB2]CNTNAM)>0 [M:SOH4]CNDNAM(NLIG) = [M:ADB2]CNTNAM Endif Endif # Particularité si GLINREP=1 il faut de toute façon répercuter les représentants # --> Alimentation des commissions représentants For WIND=0 To dim([M:SOH1]REP)-1 WREP = evalue("[M:SOH1]REP("+num$(WIND)+")") Assign ("[M:SOH4]REP"+num$(WIND+1)+"(NLIG)") With WREP Assign ("[M:SOH4]REPRAT"+num$(WIND+1)+"(NLIG)") With 0 Gosub MOD_REP Next Return #--------------------------------------------------------# # Modification du site expédition de la zone détail # #--------------------------------------------------------# $MOD_DSTOFCY Local Integer WFMI Local Integer WSTOMGTCOD, WI Local Char WTSCCOD(GLONADI) (0..5) Local Char WTSICOD(GLONADI) (0..5) # Changement de site : il faudra reinitialiser le prix de revient INICPRPRI=2 WSTOMGTCOD=[M:SOH4]STOMGTCOD(NLIG) # Si modification du site, il faut recharger STOMGTCOD If [F:ITM]ITMREF <> [M]ITMREF(NLIG) Read [ITM]ITM0=[M]ITMREF(NLIG) If fstat Raz [F:ITM] Endif Endif [M:SOH4]STOMGTCOD(NLIG) = [F:ITM]STOMGTCOD [M:SOH4]YSTOMGTCOD(NLIG) = [F:ITM]STOMGTCOD : # Bug 55476 If [F:ITM]STOMGTCOD>1 If [F:ITF]ITMREF<>[M]ITMREF(NLIG) | [F:ITF]STOFCY<>[M]DSTOFCY(NLIG) Read [ITF] ITF0=[M]ITMREF(NLIG);[M]DSTOFCY(NLIG) If fstat Raz [F:ITF] : Endif Endif [M:SOH4]STOMGTCOD(NLIG) = [F:ITF]STOMGTCOD [M:SOH4]YSTOMGTCOD(NLIG) = [F:ITF]STOMGTCOD : # Bug 55476 Endif # Réalimenter le code FMI qui vient de l'article site Call ALIFMI([M]ITMREF(NLIG), [M]DSTOFCY(NLIG), WFMI) From TRTVENCDE [M]FMI(NLIG)=WFMI If find([M]FMI(NLIG),3,5) [M]DALLTYP(NLIG)=2 Endif # L'article devient non géré en stock, il faudra supprimer l'encours If WSTOMGTCOD<>[M:SOH4]STOMGTCOD(NLIG) & [M:SOH4]STOMGTCOD(NLIG)=1 [M]WIPFLG(NLIG) = "A" Elsif [M]WIPFLG(NLIG) = "" [M]WIPFLG(NLIG) = "M" Endif # Si modification du site, réinitialisation du code prépa If dim([M:SOH0]TSCCOD) <> -1 For WI = 1 To dim([M:SOH0]TSCCOD) WTSCCOD(WI-1) = [M:SOH0]TSCCOD(WI-1) #--CPO 90371 Lors de la correction de cette fiche - ici on fait For WI et Next I #Next I Next WI #--/ Endif If dim([M:SOH4]TSICOD1)>0: WTSICOD(0) = [M:SOH4]TSICOD1(NLIG): Endif If dim([M:SOH4]TSICOD2)>0: WTSICOD(1) = [M:SOH4]TSICOD2(NLIG): Endif If dim([M:SOH4]TSICOD3)>0: WTSICOD(2) = [M:SOH4]TSICOD3(NLIG): Endif If dim([M:SOH4]TSICOD4)>0: WTSICOD(3) = [M:SOH4]TSICOD4(NLIG): Endif If dim([M:SOH4]TSICOD5)>0: WTSICOD(4) = [M:SOH4]TSICOD5(NLIG): Endif If [F:BPC]BPCNUM<>[M:SOH0]BPCORD Read [BPC]BPC0=[M:SOH0]BPCORD : If fstat Raz [F:BPC] Endif Endif Call REC_PRECOD([M]DSTOFCY(NLIG),[M:SOH4]ITMREF(NLIG),[F:ITM]TCLCOD,WTSICOD(0), & WTSICOD(1),WTSICOD(2),WTSICOD(3),WTSICOD(4),[M:SOH0]BPCORD, & [F:BPC]BCGCOD,WTSCCOD(0),WTSCCOD(1),WTSCCOD(2),WTSCCOD(3), & WTSCCOD(4),[M:SOH4]PRECOD(NLIG)) From STKLIB WFLGTOT="O" # V6 Règle affectation : # GH 19/11/13 bug 94472 If dim([M:SOH4]PTOCOD)>0 [M:SOH4]PTOCOD(NLIG) = func ITMLIB.GET_PTOCOD([M:SOH4]ITMREF(NLIG),[M]DSTOFCY(NLIG)) Endif Return #--------------------------------------------------------# # Modification du site expédition de la zone détail # #--------------------------------------------------------# $SVGMOD_DSTOFCY Local Integer WFMI Local Integer WSTOMGTCOD # Changement de site : il faudra reinitialiser le prix de revient INICPRPRI=2 # Réalimenter le code FMI qui vient de l'article site Call ALIFMI([M]ITMREF(NLIG), [M]DSTOFCY(NLIG), WFMI) From TRTVENCDE If WFMI <> [M]FMI(NLIG) If [F:ITM]ITMREF <> [M]ITMREF(NLIG) Read [ITM]ITM0=[M]ITMREF(NLIG) If fstat Raz [F:ITM] Endif Endif WSTOMGTCOD=[F:ITM]STOMGTCOD Else WSTOMGTCOD=[M]STOMGTCOD(NLIG) Endif [M]STOMGTCOD(NLIG) = WSTOMGTCOD [M]FMI(NLIG)=WFMI If find([M]FMI(NLIG),3,5) [M]DALLTYP(NLIG)=2 Endif If [M]WIPFLG(NLIG) = "" [M]WIPFLG(NLIG) = "M" Endif WFLGTOT="O" Return #-------------------------------------# # Recalcul date expedition # #-------------------------------------# $CALC_SHIDAT Call CALC_SHIDAT([M:SOH4]DDEMDLVDAT(NLIG), [M:SOH4]DDAYLTI(NLIG), [M:SOH4]DSTOFCY(NLIG), 1, 1,[M:SOH0]ORDDAT, [M:SOH4]DSHIDAT(NLIG)) From TRTVENDAT #mkstat=0 : Raz GMESSAGE : # Bug 71079 Return #-------------------------------------# # Recalcul date livraison prévue # #-------------------------------------# $CALC_EXTDLVDAT Call CALC_DLVDAT([M:SOH4]DSHIDAT(NLIG), [M:SOH4]DDAYLTI(NLIG), [M:SOH4]DBPAADD(NLIG), [M:SOH0]BPCORD, 0,0, & [M:SOH4]EXTDLVDAT(NLIG)) From TRTVENDAT #mkstat=0 : Raz GMESSAGE : # Bug 71079 Return #---------------------------------------------------------------------------------# # Suite à la modification d'un représentant : Recherche des taux de commissions # #---------------------------------------------------------------------------------# $MOD_REP If WREP <> "" If [F:REP]REPNUM <> WREP Read [F:REP]REP0 = WREP If fstat Raz [F:REP] : Endif Endif If [F:BPC]BPCNUM <> [M:SOH0]BPCORD Read [F:BPC]BPC0 = [M:SOH0]BPCORD If fstat Raz [F:BPC] :Endif Endif If [F:BPC]COMCAT <> 0 Assign ("[M:SOH4]REPRAT"+num$(WIND+1)+"(NLIG)") With evalue("[F:REP]COMRAT"+num$(WIND+1)+"([F:BPC]COMCAT-1)") Endif Endif Return #-------------------------------------# # Convertion des montants lignes # #-------------------------------------# $CONV_LIGNE Call CONVERT2(WANCCUR, [M:SOH1]CUR, GLOCALDEV, [M]CHGTYP, date$, [M]GROPRI(NLIG), MNTDES, SPSTAT) From TRTDEV [M]GROPRI(NLIG) = arr(MNTDES, 10^-GDECPRI) For I = 1 To 9 If evalue ("dim([m:soh4]discrgval"+num$(I)+"(nlig))")>0 If GFMTREM(I-1)="M" MNTORI = evalue("[m:soh4]discrgval"+num$(I)+"(NLIG)") Call CONVERT(WANCCUR, [M:SOH1]CUR, GLOCALDEV, [M]CHGTYP, date$, MNTORI, MNTDES, SPSTAT) From TRTDEV Assign "[m:soh4]discrgval"+num$(I)+"(NLIG)" With MNTDES Endif Endif Next Call CONVERT2(WANCCUR, [M:SOH1]CUR, GLOCALDEV, [M]CHGTYP, date$, [M]NETPRI(NLIG), MNTDES, SPSTAT) From TRTDEV [M]NETPRI(NLIG) = arr(MNTDES, 10^-GDECPRI) Call CONVERT2(WANCCUR, [M:SOH1]CUR, GLOCALDEV, [M]CHGTYP, date$, [M]CPRPRI(NLIG), MNTDES, SPSTAT) From TRTDEV [M]CPRPRI(NLIG) = arr(MNTDES, 10^-GDECPRI) # Traitement des montants de base de calcul If [M]CLCAMT1(NLIG) <> 0 | [M]CLCAMT2(NLIG) <> 0 # Ces montants dépendent d'une formule donc d'opérandes divers # Pas de conversion mais Recalcul Call ALICLCAMT([M]ITMREF(NLIG), [M]QTY(NLIG), NLIG, "SOH4", [M]CLCAMT1(NLIG), [M]CLCAMT2(NLIG)) From TRTX3 Endif Return #-------------------------------------# # Rebascul des prix HT et TTC # #-------------------------------------# $RECALC_PRI If [M]PRITYP=1 [M]NETPRI(NLIG) = [M]NETPRINOT(NLIG) Else [M]NETPRI(NLIG) = [M]NETPRIATI(NLIG) Endif Return #-------------------------------------# # Recalcul des totaux # #-------------------------------------# $RECALC_TOT If WFLGTOT="O" : # 89275 : Duplication cde et ctrl des prix Call CLCPFM([M]DSTOFCY(NLIG), [M:SOH1]PRITYP, [M]CHGTYP, [M:SOH0]ORDDAT, [M:SOH0]CUR, & NLIG,INICPRPRI) From TRTVENPRI Endif : # 89275 If GREP= "D" & WZONCOU= "BPCORD" & GDACLOK=1 GNETMAR=1 Endif : # 89275 Call CTLPFM([M:SOH0]CUR,[M:SOH4]CPRPRI(NLIG), NLIG) From TRTVENPRI # 89275 If GREP= "D" & WZONCOU= "BPCORD" & GDACLOK=1 Raz GNETMAR : Raz GMESSAGE Endif # 89275 mkstat=0 Gosub CALC_ORD Gosub CALC_DSP From TRTVENDIV If [M]DEMSTA(NLIG) = 1 Gosub CALC_DLR : Endif Call ADD_TOT(NLIG) Return #-------------------------------------# # Recalcul des tarifs # #-------------------------------------# $RECALC_TARIF Local Integer TYPRECH Local Decimal GROPRI If find([M]LINTYP(NLIG),1,2,6,10) TYPRECH = 1 Else Local Integer ORI : ORI=NLIG While !find([M]LINTYP(ORI),2,6,10) & ORI >= 0 ORI-=1 Wend If find([M]LINTYP(ORI),2,6,10) GPNTITMREF=[M]ITMREF(ORI) Endif TYPRECH = 4 Endif If [M]FOCFLG(NLIG) = 3 Return : Endif Call ALICLCAMT([M:SOH4]ITMREF(NLIG), [M:SOH4]QTY(NLIG), NLIG, "SOH4", [M:SOH4]CLCAMT1(NLIG), [M:SOH4]CLCAMT2(NLIG)) From TRTX3 Call RECH_TARIF(TYPRECH,[M]ITMREF(NLIG),NLIG,[M]QTY(NLIG),"SOH",GROPRI) From TRTVENTAR # Action sur les gratuits # La ligne était à l'origine d'un gratuit et la nvelle recherche ne ramène aucun gratuit # -- > Suppression du gratuit If GFOCITMREF = "" & [M]FOCFLG(NLIG) = 2 ACT = "S":[M]FOCFLG(NLIG)=1: Endif # La ligne était à l'origine d'un gratuit et la nvelle recherche ramène un gratuit # -- > Remplacement du gratuit If GFOCITMREF <> "" & [M]FOCFLG(NLIG) = 2 ACT = "C": Endif # La ligne n'était pas à l'origine d'un gratuit et la nvelle recherche ramène un gratuit # -- > Insertion du gratuit If GFOCITMREF <> "" & [M]FOCFLG(NLIG) = 1 ACT = "I": Endif [M]GROPRI(NLIG)= GROPRI Call CLCNETPRI([M]QTY(NLIG), [M]CUR, NLIG) From TRTVENPRI Call CLCPFM([M]DSTOFCY(NLIG), [M]PRITYP, [M]CHGTYP, [M]ORDDAT, [M]CUR, NLIG, INICPRPRI) From TRTVENPRI # 89275 : Duplication cde et ctrl des prix # Avec chgmnt de client # --> Ctrl prix net Raz GNETMAR If GREP= "D" & WZONCOU= "BPCORD" & GDACLOK=1 GNETMAR=1 Call CTLNETPRI([M:SOH0]BPCORD, [M]CHGTYP, [M]ORDDAT, [M:SOH0]CUR,NLIG) From TRTVENPRI Raz GNETMAR : Raz GMESSAGE Endif # --> Recalcul des totaux avec ctrl de la marge Gosub RECALC_TOT #Call APRES_LIGNE(NLIG, 0) # 89275 # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management If [M:SOH4]DINVCND(NLIG)<>"" and [M:SOH4]DINVCNDTOUPD(NLIG)=[V]CST_AYES NOL=NLIG Gosub P1_NBLIG_DINVCND_UPD From LIBSAL_INVCND_SOH If mkstat=2 : Return : Endif Endif # End issue 107888 ORI = NLIG # Traitement des gratuits Gosub TRTGRA Return #--------------------------------------------------------------------------------------# # Traitement des gratuits # #--------------------------------------------------------------------------------------# # ACT = "S" : Suppression gratuit précédente recherche # # ACT = "C" : Remplacement gratuit précédente recherche par gratuit nouvelle recherche # # ACT = "I" : Insertion gratuit nouvelle recherche # #--------------------------------------------------------------------------------------# $TRTGRA Local Integer LIGGRA Local Integer RET # Suppression ou remplacement If ACT = "S" | ACT = "C" LIGGRA = find(3, [M]FOCFLG(NLIG+1..[M]NBLIG-1)) If LIGGRA <> 0 LIGGRA = LIGGRA + NLIG # Suppression du gratuit If ACT = "S" Call SUPGRA(ORI, 2, RET) From TRTVENBOM If RET = 0 [M]FOCFLG(ORI)=1 : Endif Endif # Remplacement du gratuit # --> L'article est différent : Suppression et création If ACT = "C" & [M]ITMREF(LIGGRA) <> GFOCITMREF Call SUPGRA(LIGGRA-1, 2, RET) From TRTVENBOM If RET = 0 Call CREGRA("G",0, ORI, [M:SOH0]ORDDAT, 2, LIGGRA, RET) From TRTVENBOM If RET = 0 [M]UPDFLG(LIGGRA-1) = 1:Endif Endif # Remplacement du gratuit # --> L'article est identique : Modification de la qté Elsif ACT = "C" & [M]QTY(LIGGRA) <> GFOCQTY [M]QTY(LIGGRA) = GFOCQTY [M]UPDFLG(LIGGRA) = 1 If GREV=2 [M]LINREVNUM(LIGGRA) = [M:SOH0]REVNUM:Endif Endif Endif Endif # Insertion If ACT = "I" LIGGRA = NLIG + 1 While LIGGRA < [M:SOH4]NBLIG & !find([M:SOH4]LINTYP(LIGGRA),1,2,6,10) LIGGRA += 1 Wend Call CREGRA("G", 0, ORI, [M:SOH0]ORDDAT, 2, LIGGRA, RET) From TRTVENBOM # Issue 107888 - 2016-09-09 by CPO : US150 Free products not deliverable invoicing #TODO 107888 US150 içi, création échéancier Endif Raz ACT Return #-----------------------------------------------------------------------# # Traitement de l'article de remplacement # #-----------------------------------------------------------------------# #---------------------------------------------------# # Utilisée avec Action de modélisée SPRLITM # #---------------------------------------------------# $TRT_RPLITM Local Char WSAU(GLONUOM), UNIVEN Local Char REP, SECTION Local Integer RET Local Integer I # --------------------------------------------------- # # Penser à mettre en phase avec C_ITMREF et AM_ITMREF # # --------------------------------------------------- # If [F:ITS]ITMREF <> WITM Read [ITS]ITS0=WITM If fstat mkstat=2 : GERR=1 : Return : Endif Endif Raz [M]PCK(NOL) Raz [M]LOT(NOL) Raz [M]LOC(NOL) WSAU = [M]SAU(NOL) [M]LINTYP(NOL) = 1 If [F:ITS]ITMTYP = 2 [M]LINTYP(NOL) = 6 :Endif If [F:ITS]ITMTYP = 3 [M]LINTYP(NOL) = 2 :Endif # --> Etape n°1 : Remplacement par article de substitution Call CTLSBSITM(WITM, [M:SOH0]ORDDAT, RET) From TRTVENCTL If RET = 1 GMESSAGE = mess(40,192,1) : GERR=1 : mkstat=2: Return Elsif RET = 2 GMESSAGE = mess(10,191,1) : GERR=2 WITM = [F:ITS]ITMREF Endif # --> Etape n°2 : Lecture article If [F:ITM]ITMREF <> WITM Read [ITM]ITM0=WITM If fstat GMESSAGE = mess(8,192,1) : mkstat=2 : GERR=1 : Return : Endif Endif # --> Etape n°3 : Ctrl du statut de l'article : Ctrl statut non utilisable # Les autres statuts dépendent du code FMI If [F:ITM]ITMSTA = 6 GMESSAGE = mess(3,196,1)+" ("+mess([F:ITM]ITMSTA,246,1)+")" mkstat=2 : GERR=1 : Return Endif # On vérifie que la date de commande est bien >= la date de début de vie de l'article If [F:ITM]LIFSTRDAT<>[0/0/0] & [M:SOH0]ORDDAT<[F:ITM]LIFSTRDAT mkstat=2 : GERR=1 : GMESSAGE=mess(331,199,1)-":"-format$(GFMDAT,[F:ITM]LIFSTRDAT) : Return Endif # On vérifie que l'article est toujours vendu If clalev([F:ITG])= 0 Local File ITMCATEG [ITG] : Endif If [F:ITG]TCLCOD <> [F:ITM]TCLCOD Read [ITG]ITG1=[F:ITM]TCLCOD;"" If fstat GMESSAGE = [F:ITM]TCLCOD-":"-mess(338,199,1) : mkstat=2 : End : Endif Endif If [F:ITG]SALFLG<>2 GMESSAGE = mess(221,199,1)-"("-[F:ITM]TCLCOD-")" : mkstat=2 : End : Endif # --> Etape n°4 : Controle de l'unite Call CONTSAUIMP(WSAU, WITM,[M]BPCORD,UNIVEN) From TRTVENCTL If UNIVEN = "" GMESSAGE = mess(9,192,1) : mkstat=2 : GERR=1 : Return : Endif # --> Etape n°5 : Recherche interdit If dim([M]REP1(NOL)) > 0 REP = [M]REP1(NOL):Endif Call RECH_INTERDIT (WITM, [M]DBPAADD(NOL), REP, 2) From TRTVENTAR If mkstat = 2 : GERR=1 : Return : Endif # --> Etape n°6 : Si cde de prêt, l'article doit etre géré en pret If [M:SOH0]SOHCAT = 2 & [F:ITS]LNDFLG = 1 GMESSAGE=mess(34,192,1) : GERR=1 : mkstat=2 : Return Endif # --> Etape n°6 : Si cde de prêt et article géré en stock, il doit être géré en emplacement If [M:SOH0]SOHCAT = 2 & [F:ITM]STOMGTCOD <> 1 If [F:ITF]ITMREF <> WITM | [F:ITF]STOFCY <> [M]DSTOFCY(NOL) Read [ITF] ITF0=WITM;[M]DSTOFCY(NOL) If fstat Raz [F:ITF] : Endif Endif If [F:ITF]LOCMGTCOD <> 2 GMESSAGE = mess(119,192,1) : GERR=1 : mkstat=2 : Return Endif Endif # --> Etape n°7 : Si cde à facturation directe inter-site, l'article ne doit pas être réceptionné # Issue 113089/130 - 2016-10-14 by SR : Message 269,194 remplacé par 578,194 If [M:SOH0]SOHCAT=3 & [M:SOH1]BETFCY=2 If [F:ITM]RCPFLG=2 GMESSAGE=mess(578,194,1) : GERR=1 : mkstat=2 : Return : Endif Endif # --> Etape n°8 : Réinitialiser les zones venant de l'article Call INIT_ITM (NOL, WITM) # --> Etape n°9 : Gestion du FMI Local Integer WFMI, WOK : WOK=1 Call ALIFMI(WITM, [M:SOH4]DSTOFCY(NOL), WFMI) From TRTVENCDE Case WFMI When 1 : # Stock If [F:ITM]ITMSTA>1 Call AVERTIR (WITM-mess(3,196,1)+" ("+mess([F:ITM]ITMSTA,246,1)+")", WOK) From GESECRAN If WOK=1 GERR=1 : mkstat=2 : Return Endif Endif When 3 : # Contremarque achat If [F:ITM]ITMSTA=3 Call AVERTIR (WITM-mess(281,197,1)-":\"-mess(3,196,1)+" ("+mess([F:ITM]ITMSTA,246,1)+")", WOK) From GESECRAN If WOK=1 GERR=1 : mkstat=2 : Return Endif Elsif [F:ITM]ITMSTA>1 GMESSAGE=WITM-mess(281,197,1)-":\"-mess(3,196,1)+" ("+mess([F:ITM]ITMSTA,246,1)+")" : GERR=1 : mkstat=2 : Return Endif When 5 : # Contremarque production Call CONTMFGITM([M]DSTOFCY(NOL), 1) From MFGLIB : If mkstat=2 GERR=1 : Return Endif Endcase [M]ITMREF(NOL) = WITM # On conserve l'unite de l'article d'origine If [M]SAU(NOL) <> WSAU # Call ALISAUCOE(WITM, [M]BPCORD, WSAU, [M]STU(NOL), [M]SAUSTUCOE(NOL)) From TRTVENQTE Call CTLUOM([M]ITMREF(NOL), 2, [M]BPCORD, WSAU, [M]SAUSTUCOE(NOL), GBIDC1, GBIDC2, [M]DACSAUCOE(NOL)) From STKACT If mkstat=2 GERR=1 : Return : Endif [M]SAU(NOL) = WSAU Endif # --- Réinitialisation # A cause de l'INISEC "SOP" qui peut être paramétré avec [F:POP] If GMODU(6)=2 & GNBDIE>0 Raz [F:POP] : Endif For I = 1 To GNBDIE If evalue("dim([M]CCE"+num$(I)+"(NOL))") >0 Call INISEC(SECTION, "SOP", I) From TRTX3CPT Assign "[M]CCE"+num$(I)+"(NOL)" With SECTION Endif Next [M:SOH4]FMI(NOL)=WFMI If find([M]FMI(NOL),3,5) [M]DALLTYP(NOL)=2 Endif # 105605 : CCM - Revision index (LD:29/07/15) # Init versions for the alternate product If dim([M:SOH4]ECCVALMAJ) > 0 Raz [M:SOH4]ECCVALMAJ(NOL) Raz [M:SOH4]ECCVALMIN(NOL) If WFLDNAM = "QTY" Call STKINIECC([M:SOH4]ITMREF(NOL),"","SOH4",1,2,NOL,2,[M:SOH4]ECCVALMAJ(NOL),"ECCVALMAJ","ECCVALMIN","","",2,[M:SOH0]BPCORD) From STKACT # 110640 # Issue 110640 Call INIECCSTA([M:SOH4]ITMREF(NOL), "SOH4",NOL) From STKECR # End issue 110640 Endif Endif # 105605 : CCM - Revision index (LD:29/07/15) If WFLDNAM = "ITMREF" & [M:SOH4]QTY(NOL) <> 0 | WFLDNAM = "QTY" If WFLDNAM = "ITMREF" # ------------------------------------------ # # Traitement propre sur la référence article # # ------------------------------------------ # # Si la quantité a déjà été saisie on refait le traitement apres_modif qté # Sinon tout sera fait à la saisie de la quantité # --- Controle article-site Call CONTITF([M:SOH4]ITMREF(NOL),[M:SOH4]DSTOFCY(NOL),[M:SOH4]STOMGTCOD(nolign-1)) From TRTVENCTL If mkstat = 2 GERR=1 : Return : Endif # --- Ctrls qté et nouvelle recherche tarif Call CNVQTY([M]QTY(NOL),[M]SAUSTUCOE(NOL),[M]STU(NOL),[M]QTYSTU(NOL)) From TRTVENQTE Endif # --- Calcul des montants de base de calcul de la taxe Call ALICLCAMT([M:SOH4]ITMREF(NOL), [M:SOH4]QTY(NOL), NOL, "SOH4", [M:SOH4]CLCAMT1(NOL), [M:SOH4]CLCAMT2(NOL)) From TRTX3 If WFLDNAM = "ITMREF" # --- Nouvelle recherche tarif Call RECH_TARIF(1,[M]ITMREF(NOL),NOL,[M]QTY(NOL),"SOH",[M]GROPRI(NOL)) From TRTVENTAR Endif # Sauvegarde de gmessage car raz Local Char SAVMSG(255) : SAVMSG=GMESSAGE : # ACA - 48862 # --- Calcul du prix net Call CLCNETPRI([M]QTY(NOL),[M:SOH0]CUR, NOL) From TRTVENPRI If GDACLOK=1 Call CTLNETPRI([M:SOH0]BPCORD, [M]CHGTYP, [M]ORDDAT, [M:SOH0]CUR,NOL) From TRTVENPRI If mkstat=2 Return Endif Endif # --- Calcul de la marge Call CLCPFM([M]DSTOFCY(NOL), [M:SOH1]PRITYP, [M]CHGTYP, [M:SOH0]ORDDAT, [M:SOH0]CUR, NOL,2) From TRTVENPRI If GDACLOK=1 Call CTLPFM([M:SOH0]CUR,[M:SOH4]CPRPRI(NOL), NOL) From TRTVENPRI If mkstat=2 Return Endif Endif GMESSAGE=SAVMSG : # ACA - 48862 If WFLDNAM = "ITMREF" & find([M]LINTYP(NOL),1,2,6,10) If [M]FOCFLG(NOL) <> 3 & [M]GROPRI(NOL) =0 If !([M:SOH1]BETFCY = 2 & [M:SOH1]BETCPY <> 2) or GCTLBETFCY = 2 Then # FGR 10/03/2015 : X3SUIVI23273 - Si pas (Intersit & non intersoc) ou si Ctrl intersit encours&prix GERR = 3 GMESSAGE = mess(62,194,1) Endif Endif Endif Endif Local Integer WRETOUR Local Char WNUMTEX (12) # récupération du texte de l'article If find(GSALTEXLIN, 1,5) If ([F:ITU]ITMREF<>[M:SOH4]ITMREF (NOL)) | ([F:ITU]BPCNUM<>[M:SOH0]BPCORD) Read [F:ITU]ITU0 = [M:SOH4]ITMREF (NOL);[M:SOH0]BPCORD If fstat Raz [F:ITU] : Endif Endif If [F:ITU]ITSTEX = "" If [F:ITS]ITMREF <> [M:SOH4]ITMREF (NOL) Read [F:ITS]ITS0 = [M:SOH4]ITMREF (NOL) If fstat Raz [F:ITS] : Endif Endif # WNUMTEX = [F:ITS]ITSTEX [M:SOH4]SOQTEX(NOL) = [F:ITS]ITSTEX Else # WNUMTEX = [F:ITU]ITSTEX [M:SOH4]SOQTEX(NOL) = [F:ITU]ITSTEX Endif # If WNUMTEX <> "" # WRETOUR = 0 # Call TEX(5,"SOQ1","","","",WNUMTEX,"X",WRETOUR) From TRTX3TEX # If WRETOUR <> 99 # [M:SOH4]SOQTEX (NOL) = WNUMTEX # Endif # Endif Endif Return ########################################################################### # Traitements appelés par SUBSOHA # ########################################################################### #------------------------------------------# # Recalcul des lignes suite à tarif groupé # #------------------------------------------# $RECALC_GROUPE Local Integer I # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management Local Integer WSAVE_NOL,IS_RECALC_GROUP IS_RECALC_GROUP = [V]CST_AYES WSAVE_NOL=-1 If dim(NOL)<0 Local Integer NOL Else WSAVE_NOL = NOL Endif # End issue 107888 # --> Recalcul prix net, marge des lignes modifiées et recalcul totaux If sum([M:SOH4]GRPFLG) <> 0 For I=0 To [M]NBLIG-1 If [M:SOH4]GRPFLG(I) = 1 # X3-85542 : Apply a grouping price list equal to zero on an invoicing element - Sales orders/Sales quotes : (LD:04/27/18) # (Bug story for Issue X3-59918) # Simulation Netpri calcul to see if it is necessary to trigger all the calculs for the line # (Calculs trigger calculs of invoicing elts with transfer rules) Local Decimal WNETPRI # 200515 : Progress billing / X3-217465 : Control on sales order line price search - 2020-10-12 by LD Local Decimal WQTY : WQTY=[M:SOH4]QTY(I) # 200515 : Progress billing / X3-217465 : Control on sales order line price search - 2020-10-12 by LD Gosub SIMUL_NETPRI # Issue X3-38233 - 2019-03-19 by SR : If GERR = 2 If GERR = 2 : Gosub NETPRI_AFF_MESS : Endif If [M:SOH4]NETPRI(I)<>WNETPRI # Netpri has been changed by the group price search : recalculs for the line # X3-85542 : Apply a grouping price list equal to zero on an invoicing element - Sales orders/Sales quotes : (LD:04/27/18) Call SUB_TOT(I) GNETMAR = 0 Call CLCNETPRI([M]QTY(I), [M:SOH0]CUR, I) From TRTVENPRI # Issue X3-38233 - 2019-03-19 by SR : If GERR = 2 If GERR = 2 : Gosub NETPRI_AFF_MESS : Endif Call CLCPFM([M]DSTOFCY(I), [M:SOH1]PRITYP, [M]CHGTYP, [M:SOH0]ORDDAT, [M:SOH0]CUR, I, 0) From TRTVENPRI Call APRES_LIGNE(I,0) # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management If [M:SOH4]DINVCND(I)<>"" and [M:SOH4]DINVCNDTOUPD(I)=[V]CST_AYES NOL=I Gosub P1_NBLIG_DINVCND_UPD From LIBSAL_INVCND_SOH If mkstat=2 GERR=1 : OK=0 : Break Endif Endif # End issue 107888 GNETMAR = 1 [M:SOH4]UPDFLG(I) = 1 If GREV=2 [M]LINREVNUM(NOL)=[M:SOH0]REVNUM Endif # X3-85542 : Apply a grouping price list equal to zero on an invoicing element - Sales orders/Sales quotes : (LD:04/27/18) Endif # X3-85542 : Apply a grouping price list equal to zero on an invoicing element - Sales orders/Sales quotes : (LD:04/27/18) Endif Next Raz [M:SOH4]GRPFLG Endif # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management IS_RECALC_GROUP = [V]CST_ANO If WSAVE_NOL>-1 : NOL = WSAVE_NOL : Endif # End issue 107888 Return #-------------------------------------------------------------------------# # Issue X3-38233 - 2019-03-19 by SR : GERR may be broken by lines below # so the error is sent at this time and GERR/GEMSSAGE razed $NETPRI_AFF_MESS If GMESSAGE <> "" GMESSAGE -= mess(18,197,1)-":"- num$(I+1) Call MESSAGE(GMESSAGE) From GESECRAN Raz GMESSAGE Endif Raz GERR Return # End issue X3-38233 # Issue X3-59918 #------------------------------------------# # Simulation netpri calcul # #------------------------------------------# $SIMUL_NETPRI Local Decimal WMAJREM(0..8) Local Shortint WJ For WJ=1 To 9 If evalue("dim([M:SOH4]DISCRGVAL"+num$(WJ)+"(I))")>0 WMAJREM(WJ-1)=evalue("[M:SOH4]DISCRGVAL"+num$(WJ)+"(I)") Endif Next WJ If [M:SOH4]FOCFLG(I) = 3 Return Endif # --> Calcul du prix net If dim(GCALNETLIN)>0 : GCALNETLIN=I+1 : Endif If dim(GCALNETABR)>0 : GCALNETABR="[M:SOH4]" : Endif # 200515 : Progress billing / X3-217465 : Control on sales order line price search - 2020-10-12 by LD #Call CALNET (1, [M:SOH0]PLISTC, [M:SOH4]GROPRI(I), WMAJREM, [M:SOH4]QTY(I), WNETPRI, [M:SOH1]CUR) From TRTPRICE Call CALNET (1, [M:SOH0]PLISTC, [M:SOH4]GROPRI(I), WMAJREM, WQTY, WNETPRI, [M:SOH1]CUR) From TRTPRICE # 200515 : Progress billing / X3-217465 : Control on sales order line price search - 2020-10-12 by LD Return # End issue X3-59918 #--------------------------------------------------------------------# # Bouton allocation # #--------------------------------------------------------------------# #---------------------------------------------------# # Utilisée avec Action de modélisée TRTORDALL # #---------------------------------------------------# $TR_ALLOC Local Char WTRTLIG(1), WMESS(80), WMESS1(80) : Raz WMESS1 Local Integer OK Local Integer WKIT : # Bug 56680 # Bug 84932 : Allocation ruptures à tord si alloc ligne normale après un kit Local Integer WWGENSHT : WWGENSHT=WGENSHT If GMODU(6)=2 & clalev([F:POQ])=0 : Local File PORDERQ [POQ] : Endif GOK=1 Trbegin ADOVAL For I=0 To [M:SOH4]NBLIG-1 nolign=I+1 OK=2 WMESS = mess(80,197,1)+" "+[M:SOH4]ITMREF(I) # Trt si statut ferme If [M:SOH4]DEMSTA(I) <> 1 WMESS1=mess(279,197,1):OK = 1: Endif # Pas d'allocation des articles gérés en contremarque # Pas d'allocation des articles géré avec un ordre de production If WTRTALL = 1 & [M:SOH4]FMI(I) = 3 WMESS1=mess(281,197,1) : OK = 1 : Endif If WTRTALL = 1 & [M:SOH4]FMI(I) = 5 WMESS1=mess(280,197,1) : OK = 1 : Endif # Désallocation des articles gérés en contremarque If WTRTALL = 2 & WALLCTM = 1 & [M:SOH4]FMI(I) = 3 WMESS1=mess(281,197,1) : OK = 1 : Endif If WTRTALL = 2 & WALLCTM = 1 & [M:SOH4]FMI(I) = 5 WMESS1=mess(280,197,1) : OK = 1 : Endif # Trt si article non soldé If [M:SOH4]SOQSTA(I) = 3 WMESS1=mess(282,197,1) : OK = 1 : Endif # Trt si article géré en stock (sf pour les composés de kit/sous-traité et ses composants) If [M:SOH4]STOMGTCOD(I)=1 & find([M:SOH4]LINTYP(I),1,6,7,8,9) If [M:SOH4]FMI(I) = 2 WMESS1=mess(281,197,1) Else WMESS1=mess(283,197,1) : Endif OK = 1 Endif # Bug 72631 : Pb failure to allocate kit component lines when kit header is allocated ## Bug 56680 : Pb kit géré en ctm ## Si un kit n'est pas à allouer, les composants ne sont pas à allouer #If !find([M]LINTYP(I),3,4,5) # Raz WKIT #Elsif [M]LINTYP(I)=2 # WKIT=I #Elsif find([M]FMI(WKIT),3,5) # OK=1 #Endif If [M]LINTYP(I)=2 WKIT=I Elsif !find([M]LINTYP(I),3,4,5) Raz WKIT Elsif find([M]FMI(WKIT),3,5) OK=1 Endif # Bug 72631 #---------------------------------------------------------------------# # Point d'entree contrôle autorisation lignes à allouer # #---------------------------------------------------------------------# GPOINT="SOHALLSEL" : Gosub ENTREE From EXEFNC If OK = 1 Call ECR_TRACE(WMESS,0) From GESECRAN If WTRTALL=1 Call ECR_TRACE(WMESS1+":"+mess(278,197,1),0) From GESECRAN : Endif If WTRTALL=2 Call ECR_TRACE(WMESS1+":"+mess(526,197,1),0) From GESECRAN : Endif Goto NXTLIG Endif # Allocation si tout n'est pas alloué If WTRTALL = 1 & WSHTFLG = 1 If [M:SOH4]TALLQTYSTU(I) >= [M:SOH4]QTYSTU(I) & [M:SOH4]SHTQTYSTU(I) = 0 Goto NXTLIG : Endif Endif # Allocation des ruptures s'il y a des ruptures If WTRTALL = 1 & WSHTFLG = 2 & [M:SOH4]SHTQTYSTU(I) = 0 Goto NXTLIG : Endif If WTRTALL = 1 # ------ Allocation ------------------------------------------------- WALLSTU = 0 WSHTSTU = [M:SOH4]SHTQTYSTU(I) # Calcul de la qté à allouer If WSHTFLG = 1 | (find([M:SOH2]DME, 2,3) & WALLPAR = 1) If [M:SOH4]TALLQTYSTU(I) + WSHTSTU < [M:SOH4]QTYSTU(I) WALLSTU = [M:SOH4]QTYSTU(I) - ([M:SOH4]TALLQTYSTU(I) + WSHTSTU) Endif Endif #---------------------------------------------------------------------# # Point d'entree modification de la quantité à allouer # #---------------------------------------------------------------------# GPOINT="MODQTEALL" : Gosub ENTREE From EXEFNC If GOK=0 Goto AB_ALLOC : Return Endif Else # ------ Desallocation ------------------------------------------------- WALLSTU = [M:SOH4]ALLQTYSTU(I) WSHTSTU = [M:SOH4]SHTQTYSTU(I) Endif If WALLSTU + WSHTSTU <> 0 Readlock [SOQ] SOQ0 = [M:SOH0]SOHNUM;[M:SOH4]SOPLIN(I);[M:SOH4]SOPLIN(I) If fstat=1 GOK=-1 GLOCK="$SORDERQ"-[M]SOHNUM-num$([M:SOH4]SOPLIN(I))-num$([M:SOH4]SOPLIN(I)) Goto ROLL_ALLOC Elsif fstat GOK=0 Call RSTA("SOQ",[M]SOHNUM+num$([M]SOPLIN(I))+num$([M]SOPLIN(I))) From GLOCK Goto AB_ALLOC Endif Read [SOP] SOP0 = [M:SOH0]SOHNUM;[M:SOH4]SOPLIN(I);[M:SOH4]SOPLIN(I) If fstat GOK=0 : Call RSTA("SOP",[M]SOHNUM+num$([M]SOPLIN(I))+num$([M]SOPLIN(I))) From GLOCK Goto AB_ALLOC Endif If WTRTALL = 2 WTRTLIG = "A" Elsif [F:SOQ]ALLQTYSTU = 0 & [F:SOQ]SHTQTYSTU = 0 WTRTLIG = "C" Else WTRTLIG="M" : Endif If [M:SOH4]STOMGTCOD(I) <> 1 # Génération des ruptures # On génère toujours les ruptures sur un kit/sous-traité et ses composants (sinon déphasage possible) WGENSHT=WWGENSHT : # Bug 84932 : Allocation ruptures à tord si alloc ligne normale après un kit If find([M:SOH4]LINTYP(I),2,3,4,5,10,11,12,13) WGENSHT=2 Endif # Allocations partielles sf si livraison ligne/cde complète # Un kit/sous-traité et ses composants ne peuvent être alloués partiellement (sinon déphasage possible) If WALLPAR=1 & find([M:SOH2]DME,2,3) & !find([M:SOH4]LINTYP(I),2,3,4,5,10,11,12,13) WALLPAR=1 Else WALLPAR=0 : Endif Call GENALLORD("","",WTRTLIG, WIMPCLI, WGENSHT, WALLPAR, WALLSTU, WSHTSTU, WRET) From TRTVENALL If WRET <> 0 Call ECR_TRACE(WMESS,0) From GESECRAN If WRET=2 & GOK=1 Call ECR_TRACE(mess(504,197,1)-"\"-mess(44,192,1),0) From GESECRAN #--- Bug 55688 puis Bug 55688 suite # Une suppression des ruptures a été faite avant la tentative d'allocations # --> il faut raz la quantité rupture de la ligne de commande #If WTRTLIG<>"A" & WSHTSTU<>0 # [F:SOQ]SHTQTY = 0 # [F:SOQ]SHTQTYSTU = 0 # Rewrite [SOQ] # If fstat GOK=0 : Call FSTA("SOQ") From GLOCK : Goto AB_ALLOC : endif # [M:SOH4]SHTQTY(I) = [F:SOQ]SHTQTY # [M:SOH4]SHTQTYSTU(I) = [F:SOQ]SHTQTYSTU # # --- Qté à allouer = Qté déjà allouée # [M]WALLQTY(I) = [F:SOQ]ALLQTY + [F:SOQ]SHTQTY # [M]WALLQTYSTU(I) = [F:SOQ]ALLQTYSTU + [F:SOQ]SHTQTYSTU # [M]YSHTQTY(I) = [M]SHTQTY(I) #Endif #--- Fin bug 55688 If WTRTLIG<>"A" & WSHTSTU<>0 Local Integer WRUPTYP If [M:SOH4]DALLTYP(I)=1 WRUPTYP=5 Else WRUPTYP=4 Endif # FGR 29/04/2015 : X3SUIVI105605 (début) # Recréation de l'allocation de rupture qui a été supprimée # Call CREALL(WRUPTYP,[F:SOQ]STOFCY,[F:SOQ]ITMREF,0,[31/12/2999], #& 0,WSHTSTU,2,[F:SOQ]SOHNUM,[F:SOQ]SOPLIN,[F:SOQ]SOQSEQ, #& "",max(date$,[F:SOQ]SHIDAT),[F:SOQ]LOT,"","", #& [F:SOQ]LOC,"","",0,0,"","","","",1,WRET) From STKALL #--- TS 106217 ajout paramètre LECC (avant dernier) # Recréation de l'allocation de rupture qui a été supprimée # Call CREALL(WRUPTYP,[F:SOQ]STOFCY,[F:SOQ]ITMREF,0,[31/12/2999], #& 0,WSHTSTU,2,[F:SOQ]SOHNUM,[F:SOQ]SOPLIN,[F:SOQ]SOQSEQ, #& "",max(date$,[F:SOQ]SHIDAT),[F:SOQ]LOT,"","", #& [F:SOQ]LOC,"","",0,0,"","","","",1,"",WRET) From STKALL Call CREALL(WRUPTYP,[F:SOQ]STOFCY,[F:SOQ]ITMREF,0,[31/12/2999], & 0,WSHTSTU,2,[F:SOQ]SOHNUM,[F:SOQ]SOPLIN,[F:SOQ]SOQSEQ, & "",max(date$,[F:SOQ]SHIDAT),[F:SOQ]LOT,"","", & [F:SOQ]LOC,"","",0,0,"","","","",1,[F:SOQ]ECCVALMAJ,WRET) From STKALL # FGR 29/04/2015 : X3SUIVI105605 (début) Endif #--- Fin bug 55688 suite Goto NXTLIG Else Call ECR_TRACE(mess(96,197,1), 0) From GESECRAN Goto AB_ALLOC Endif Endif Endif WALL=WALLSTU*(1/[F:SOP]SAUSTUCOE) Call QTEARR(WALL, [F:SOP]SAU) From TRTDIV WSHT=WSHTSTU*(1/[F:SOP]SAUSTUCOE) Call QTEARR(WSHT, [F:SOP]SAU) From TRTDIV # -------- Réalimentation de la classe [F] --- If WTRTLIG = "A" [F:SOQ]ALLQTYSTU -= WALLSTU [F:SOQ]ALLQTY -= WALL # Annulation alloc.: Diminution de la qté rupture [F:SOQ]SHTQTYSTU -= WSHTSTU [F:SOQ]SHTQTY -= WSHT WALL *=-1 WSHT *=-1 Else [F:SOQ]ALLQTY += WALL [F:SOQ]ALLQTYSTU += WALLSTU # Nouvelle alloc. : Ecrasement avec la nouvelle qte rupture [F:SOQ]SHTQTY = WSHT [F:SOQ]SHTQTYSTU = WSHTSTU Endif # -------- Si desallocation d'une contremarque : il faut raz le n°contremarque ## GH 02/07/2014 bug 93888 #If WRAZCTM=2 & ([M:SOH4]FMI(I) = 3 | [M:SOH4]FMI(I) = 5) # Raz [F:SOQ]FMINUM, [F:SOQ]FMILIN, [F:SOQ]FMISEQ #Endif If WRAZCTM=2 & [F:SOQ]FMINUM<>"" Gosub RAZFMIMFG From SUBSOHA Gosub RAZFMIPOH From SUBSOHA Raz [F:SOQ]FMINUM, [F:SOQ]FMILIN, [F:SOQ]FMISEQ Endif ## Rewrite [SOQ] If fstat GOK=0 : Call FSTA("SOQ") From GLOCK : Goto AB_ALLOC : Endif # Point d'entrée mise à jour de la ligne de commande GPOINT="MAJSOQALL" : Gosub ENTREE From EXEFNC If GOK=0 Goto AB_ALLOC : Return Endif Call ECR_TRACE(WMESS,0) From GESECRAN WMESS1 = mess(106,197,1)+":"+format$("N:15F", WALL)-[F:SOP]SAU WMESS2 = mess(107,197,1)+":"+format$("N:15F", WSHT)-[F:SOP]SAU Call ECR_TRACE(sum(WMESS1, " ",WMESS2),0) From GESECRAN # -------- Mise à jour de l'encours If [M:SOH4]STOMGTCOD(I) <> 1 If [F:SOH]SOHCAT = 3 WCPLQTY = [F:SOQ]INVQTYSTU Else WCPLQTY = [F:SOQ]DLVQTYSTU Endif WTRTORD = "M" : Gosub APPELWIP From TRTVENMAJ If GOK < 1 Goto AB_ALLOC Endif # v6 affectations #Gosub MAJ_MTO_SOQ From SALMTOLIB : # GH 02/07/14 bug 93888 If WRAZCTM=2 Gosub SUP_MTO_AV_SOQ From SALMTOLIB Else Gosub MAJ_MTO_SOQ From SALMTOLIB Endif Endif # -------- Réalimentation de la classe [M] --- [M:SOH4]ALLQTY(I) = [F:SOQ]ALLQTY [M:SOH4]ALLQTYSTU (I) = [F:SOQ]ALLQTYSTU [M:SOH4]TALLQTYSTU(I) = [F:SOQ]ALLQTYSTU+[F:SOQ]OPRQTYSTU+[F:SOQ]PREQTYSTU+[F:SOQ]ODLQTYSTU [M:SOH4]TALLQTY(I) = [F:SOQ]ALLQTY+[F:SOQ]OPRQTY+[F:SOQ]PREQTY+[F:SOQ]ODLQTY # 107888 : Scheduled invoices : (LD:19/05/16) #If [M:SOH0]SOHCAT = 3 If [M:SOH0]SOHCAT = 3 | ([M:SOH0]SOHCAT = 1 & [M:SOH4]DLVFLG(I)=1) # --> Commande à facturation directe # --> Commande normale et ligne non livrable # 107888 : Scheduled invoices : (LD:19/05/16) [M:SOH4]TALLQTYSTU(I) += [F:SOQ]INVQTYSTU [M:SOH4]TALLQTY(I) += [F:SOQ]INVQTY Else # --> Commande normale/prêt et ligne livrable : # 107888 : Scheduled invoices : (LD:19/05/16) [M:SOH4]TALLQTYSTU(I) += [F:SOQ]DLVQTYSTU [M:SOH4]TALLQTY(I) += [F:SOQ]DLVQTY Endif # 107888 : Scheduled invoices : (LD:19/05/16) [M:SOH4]SHTQTY(I) = [F:SOQ]SHTQTY [M:SOH4]SHTQTYSTU(I) = [F:SOQ]SHTQTYSTU # --- Qté à allouer = Qté déjà allouée [M:SOH4]WALLQTY(I) = [F:SOQ]ALLQTY + [F:SOQ]SHTQTY [M:SOH4]WALLQTYSTU(I) = [F:SOQ]ALLQTYSTU + [F:SOQ]SHTQTYSTU [M:SOH4]YALLQTY(I) = [M:SOH4]ALLQTY(I) [M:SOH4]YSHTQTY(I) = [M:SOH4]SHTQTY(I) Endif $NXTLIG Next Gosub MAJSTASOH #---------------------------------------------------------------------# # Point d'entree mise à jour de la commande # #---------------------------------------------------------------------# GPOINT="MAJCDEALL" : Gosub ENTREE From EXEFNC If GOK=0 Goto AB_ALLOC : Return Endif Commit Return $ROLL_ALLOC Rollback : Call ROLL From GLOCK If GROLL Call ECR_TRACE(mess(17,107,1),1) From GESECRAN # Gosub RELIT From GOBJSUB Else Goto TR_ALLOC : Endif FIN=1 Return $AB_ALLOC Rollback Call ECR_TRACE(mess(17,107,1),1) From GESECRAN #Gosub RELIT From GOBJSUB FIN=1 Return #-----------------------------------------------------------------------# # Recalcul des statuts de la commande # # ----------------------------------- # # Attention : # # Utilisation de la classe F car tout n'est pas ds l'écran # # # # Appelé depuis LIENS,CREATION,MODIF # #-----------------------------------------------------------------------# $MAJSTASOH Local Integer I, WAALLLINNBR, WALLLINNBR, WLINNBR, WDLVLINNBR, WINVLINNBR Local Integer WALLSTA, WDLVSTA, WINVSTA Local Decimal WTOTQTY Local Integer WADLVLINNBR : # Nombre de lignes livrables : # 107888 : Scheduled invoices : (LD:20/05/16) WALLSTA = 1 WDLVSTA = 1 WINVSTA = 1 For I=0 To [M:SOH4]NBLIG-1 If [M:SOH4]STOMGTCOD(I) <> 1 & sum([M:SOH4]ALLQTY(I), [M:SOH4]OPRQTY(I), [M:SOH4]PREQTY(I)) <> 0 WALLSTA = 2 : Endif # 107888 : Scheduled invoices : (LD:19/05/16) # If [M:SOH0]SOHCAT = 3 # If [M:SOH4]DLVQTY(I) > 0 WDLVSTA = 2 : Endif # Else # If [M:SOH4]DLVQTY(I) > 0 | [M:SOH4]ODLQTY(I) > 0 WDLVSTA = 2 : Endif # Endif # If [M:SOH0]SOHCAT = 3 # If [M:SOH4]INVQTY(I) > 0 | [M:SOH4]ODLQTY(I) > 0 WINVSTA = 2 Endif # Else # If [M:SOH4]INVQTY(I) > 0 WINVSTA = 2 Endif # Endif If [M:SOH0]SOHCAT=3 | ([M:SOH0]SOHCAT=1 & [M:SOH4]DLVFLG(I)=1) # --> Commande à facturation directe # --> Commande normale et ligne non livrable # Calcul du statut livré # Ce cas là ne devrait jamais arriver ... If [M:SOH4]DLVQTY(I) > 0 WDLVSTA = 2 : Endif # Calcul du statut facturé If [M:SOH4]INVQTY(I) > 0 | [M:SOH4]ODLQTY(I) > 0 WINVSTA = 2 Endif Else # --> Commande normale/prêt et ligne livrable # Calcul du statut livré If [M:SOH4]DLVQTY(I) > 0 | [M:SOH4]ODLQTY(I) > 0 WDLVSTA = 2 : Endif # Calcul du statut facturé If [M:SOH4]INVQTY(I) > 0 WINVSTA = 2 Endif Endif # 107888 : Scheduled invoices : (LD:19/05/16) # --- Recalcul du nbre de lignes à allouer # Pour les lignes gérées en stock (donc livrables) et non soldées If [M:SOH4]STOMGTCOD(I) <> 1 & [M:SOH4]SOQSTA(I) <> 3 WLINNBR+=1 WTOTQTY = sum([M:SOH4]ALLQTY(I),[M:SOH4]OPRQTY(I),[M:SOH4]PREQTY(I),[M:SOH4]ODLQTY(I)) If [M:SOH0]SOHCAT = 3 WTOTQTY += sum([M:SOH4]INVQTY(I)) Else WTOTQTY += sum([M:SOH4]DLVQTY(I)) Endif # --- Tout n'est pas alloué : Incrémentation du nbre de lignes restant a allouer If WTOTQTY < [M:SOH4]QTY(I) | [M:SOH4]SHTQTY(I) <> 0 WAALLLINNBR += 1 Elsif WTOTQTY >= [M:SOH4]QTY(I) & [M:SOH4]SHTQTY(I) = 0 # --- Tout est alloué : Incrémentation du nbre de lignes allouées WALLLINNBR += 1 Endif Endif # --- Recalcul du nbre de lignes livrées # 107888 : Scheduled invoices : (LD:19/05/16) # If [M:SOH0]SOHCAT <> 3 # If [M:SOH4]DLVQTY(I) + [M:SOH4]ODLQTY(I) >= [M:SOH4]QTY(I) # WDLVLINNBR += 1 # Endif # Endif If [M:SOH0]SOHCAT <> 3 & [M:SOH4]DLVFLG(I)=2 # --> Commande normale/prêt et ligne livrable # Calcul du nombre de lignes livrables WADLVLINNBR+=1 # Calcul du nombre de lignes livrées If [M:SOH4]DLVQTY(I) + [M:SOH4]ODLQTY(I) >= [M:SOH4]QTY(I) WDLVLINNBR += 1 Endif Endif # 107888 : Scheduled invoices : (LD:19/05/16) # --- Recalcul du nbre de lignes facturées If [M:SOH4]INVFLG(I) = 2 WINVLINNBR += 1 Endif Next # Cde allouée ssi il y a des lignes gérées en stock et # le nbre lignes à allouer = 0 et la cde n'est pas soldée #If [M]ORDSTA <> 2 & sum([M:SOH4]STOMGTCOD) <> [M:SOH4]NBLIG # If WAALLLINNBR = 0 # WALLSTA = 3 # Endif #Endif # Cde allouée ssi cde non soldée et les lignes gérées en stock et non soldées sont totalement allouées If [M:SOH1]ORDSTA <> 2 & WLINNBR<>0 & WALLLINNBR = WLINNBR WALLSTA = 3 : Endif # 107888 : Scheduled invoices : (LD:19/05/16) #If WDLVLINNBR >= [F:SOH]LINNBR WDLVSTA = 3 : Endif #If WINVLINNBR >= [F:SOH]LINNBR WINVSTA = 3 : Endif # Cde livrée ssi toutes les lignes livrables sont livrées If WADLVLINNBR>0 & WDLVLINNBR >= WADLVLINNBR WDLVSTA = 3 : Endif # Cde facturée ssi toutes les lignes sont facturées If WINVLINNBR >= [F:SOH]LINNBR WINVSTA = 3 : Endif # 107888 : Scheduled invoices : (LD:19/05/16) If WALLSTA <> [F:SOH]ALLSTA | WAALLLINNBR <> [F:SOH]ALLLINNBR | & WDLVSTA <> [F:SOH]DLVSTA | WDLVLINNBR <> [F:SOH]DLVLINNBR | & WINVSTA <> [F:SOH]INVSTA | WINVLINNBR <> [F:SOH]INVLINNBR Readlock [SOH]SOH0=[M:SOH0]SOHNUM If !fstat Update [SOH] Where SOHNUM=[M:SOH0]SOHNUM With ALLSTA=WALLSTA, ALLLINNBR=WAALLLINNBR, & INVSTA=WINVSTA, DLVLINNBR=WDLVLINNBR, & DLVSTA=WDLVSTA, INVLINNBR=WINVLINNBR # -------------------------------------- # FGR 25/06/2015 : X3SUIVI109125 (début) #If fstat GOK=0 : Call FSTA("SOH") From GLOCK : Endif If fstat GOK=0 Call FSTA("SOH") From GLOCK Else [M:SOH0]ALLLINNBR = WAALLLINNBR [M:SOH1]ALLSTA = WALLSTA [M:SOH1]DLVSTA = WDLVSTA [M:SOH1]INVSTA = WINVSTA Endif # FGR 25/06/2015 : X3SUIVI109125 (fin) # -------------------------------------- Endif #[M:SOH0]ALLLINNBR = WAALLLINNBR # FGR 25/06/2015 : X3SUIVI109125 #[M:SOH1]ALLSTA = WALLSTA # FGR 25/06/2015 : X3SUIVI109125 #[M:SOH1]DLVSTA = WDLVSTA # FGR 25/06/2015 : X3SUIVI109125 #[M:SOH1]INVSTA = WINVSTA # FGR 25/06/2015 : X3SUIVI109125 Endif If sum([M:SOH4]STOMGTCOD) = [M:SOH4]NBLIG Grizo [M:SOH1]ALLSTA Else Actzo [M:SOH1]ALLSTA Endif Return #--------------------------------------------------------------------# # Mise à jour de l'adresse # #--------------------------------------------------------------------# $MAJADRESSE Call DEBTRANS From GLOCK $TR_ADR GOK=1 Trbegin [SOH] Readlock [SOH] SOH0=[M]SOHNUM If fstat=1 GOK=-1 : GLOCK="$SORDER"-[M]SOHNUM : Goto ROLL_ADR Elsif fstat GOK=0 : Call RSTA("SOH",[M]SOHNUM) From GLOCK : Goto AB_ADR : Endif If BOUT="H" [F:SOH]CNTNAM = [M:ADB1]CNTNAM If [M:ADB1]ADBFLG = 2 Gosub CHARGE_ADRBPC Endif Elsif BOUT = "J" [F:SOH]CNINAM = [M:ADB3]CNTNAM # If dim([M:ADB3]EECNUM)>0 [F:SOH]BPIEECNUM = [M:ADB3]EECNUM Endif If dim([M:SOH0]BPIEECNUM)>0 : [F:SOH]BPIEECNUM = [M:SOH0]BPIEECNUM : Endif #RMA #82772 If [M:ADB3]ADBFLG = 2 Gosub CHARGE_ADRBPI Endif Else [F:SOH]CNDNAM = [M:ADB2]CNTNAM If [M:ADB2]ADBFLG = 2 Gosub CHARGE_ADRBPD Endif Endif Rewrite [SOH] If fstat GOK=0 : Call FSTA("SOH") From GLOCK : Goto AB_ADR : Endif Commit Gosub RELIT From GOBJSUB # FGR 24/07/2014 : X3SUIVI100377 Return $ROLL_ADR Rollback : Call ROLL From GLOCK #if GROLL Gosub RELIT From GOBJSUB #else Goto TR_ADR : ENDIF If !GROLL Goto TR_ADR : Endif Return $AB_ADR Rollback #osub RELIT From GOBJSUB Return # -------------------------------------- # # Alimentation de l'adresse commande # # -------------------------------------- # $CHARGE_ADRBPC [F:SOH]BPAORD = [M:ADB1]BPAADD #If GACTSAD=2 : # Bug 67868 [F:SOH]BPCNAM(0) = [M:ADB1]BPRNAM(0) [F:SOH]BPCNAM(1) = [M:ADB1]BPRNAM(1) [F:SOH]BPCADDLIG(0) = [M:ADB1]BPAADDLIG(0) [F:SOH]BPCADDLIG(1) = [M:ADB1]BPAADDLIG(1) [F:SOH]BPCADDLIG(2) = [M:ADB1]BPAADDLIG(2) [F:SOH]BPCPOSCOD = [M:ADB1]POSCOD [F:SOH]BPCCTY = [M:ADB1]CTY [F:SOH]BPCSAT = [M:ADB1]SAT [F:SOH]BPCCRY = [M:ADB1]CRY [F:SOH]BPCCRYNAM = [M:ADB1]CRYNAM #Endif : # Bug 67868 Return # -------------------------------------- # # Alimentation de l'adresse facturation # # -------------------------------------- # $CHARGE_ADRBPI [F:SOH]BPAINV = [M:ADB3]BPAADD #If GACTSAD=2 : # Bug 67868 [F:SOH]BPINAM(0) = [M:ADB3]BPRNAM(0) [F:SOH]BPINAM(1) = [M:ADB3]BPRNAM(1) [F:SOH]BPIADDLIG(0) = [M:ADB3]BPAADDLIG(0) [F:SOH]BPIADDLIG(1) = [M:ADB3]BPAADDLIG(1) [F:SOH]BPIADDLIG(2) = [M:ADB3]BPAADDLIG(2) [F:SOH]BPIPOSCOD = [M:ADB3]POSCOD [F:SOH]BPICTY = [M:ADB3]CTY [F:SOH]BPISAT = [M:ADB3]SAT [F:SOH]BPICRY = [M:ADB3]CRY [F:SOH]BPICRYNAM = [M:ADB3]CRYNAM # Issue X3-159652 by VAVIL: Webservices: ECMSOH don't update the field EECNUMX If func AFNC.ACTIV("KPO")>0 If [M:ADB3]EECNUMX <> "" : [F:SOH]BPIEECNUM = [M:ADB3]EECNUMX : Endif Endif # Issue X3-159652 end #Endif : # Bug 67868 Return # -------------------------------------- # # Alimentation de l'adresse livraison # # -------------------------------------- # $CHARGE_ADRBPD #If GACTSAD=2 : # Bug 67868 [F:SOH]BPDNAM(0) = [M:ADB2]BPRNAM(0) [F:SOH]BPDNAM(1) = [M:ADB2]BPRNAM(1) [F:SOH]BPDADDLIG(0) = [M:ADB2]BPAADDLIG(0) [F:SOH]BPDADDLIG(1) = [M:ADB2]BPAADDLIG(1) [F:SOH]BPDADDLIG(2) = [M:ADB2]BPAADDLIG(2) [F:SOH]BPDPOSCOD = [M:ADB2]POSCOD [F:SOH]BPDCTY = [M:ADB2]CTY [F:SOH]BPDSAT = [M:ADB2]SAT [F:SOH]BPDCRY = [M:ADB2]CRY [F:SOH]BPDCRYNAM = [M:ADB2]CRYNAM If dim([M:ADB2]ADRVAL) > 0 : [F:SOH]ADRVAL = [M:ADB2]ADRVAL : Endif #LTA.n #Endif Return ######################################################################### # Traitements communs # ######################################################################### #--------------------------------------------------------------------# # Lecture de ts les fichiers utiles à une ligne # #--------------------------------------------------------------------# Subprog LECT_FIC(NLIG) Value Integer NLIG If [F:ITS]ITMREF <> [M:SOH4]ITMREF(NLIG) Read [F:ITS]ITS0 = [M:SOH4]ITMREF(NLIG) If fstat Raz [F:ITS] : Endif Endif If [F:ITM]ITMREF <> [M:SOH4]ITMREF(NLIG) Read [F:ITM]ITM0 = [M:SOH4]ITMREF(NLIG) If fstat Raz [F:ITM] : Endif Endif End #--------------------------------------------------------------------# # Initialisation des zones venant de l'entete commande # #--------------------------------------------------------------------# Subprog INIT_SOH(NLIG, AFF) Value Integer NLIG Value Integer AFF Local Integer I Local Char WREP(GLONREP) # hcb v6 [M:SOH4]DBPAADD(NLIG) = [M:SOH1]BPAADD If dim([M:ADB2]CNTNAM)>0 [M:SOH4]CNDNAM(NLIG) = [M:ADB2]CNTNAM Endif [M:SOH4]DSTOFCY(NLIG) = [M:SOH2]STOFCY [M:SOH4]DDLVPIO(NLIG) = [M:SOH2]DLVPIO [M:SOH4]DDRN(NLIG) = [M:SOH2]DRN [M:SOH4]DDAYLTI(NLIG) = [M:SOH2]DAYLTI If GREP <> "C" & GREP <> "D" & date$ > [M:SOH2]SHIDAT [M:SOH4]DSHIDAT(NLIG) = date$ # --> Initialisation de la date de livraison demandée Call CALC_DLVDAT([M:SOH4]DSHIDAT(NLIG), [M:SOH4]DDAYLTI(NLIG), [M:SOH4]DBPAADD(NLIG), [M:SOH0]BPCORD, 0,0, & [M:SOH4]DDEMDLVDAT(NLIG)) From TRTVENDAT If func AFNC.ACTIV("EDIX3")>0 [M:SOH4]MAXDLVDAT(NLIG) = [M:SOH4]DDEMDLVDAT(NLIG): Endif #SAM 110881 Else [M:SOH4]DDEMDLVDAT(NLIG) = [M:SOH2]DEMDLVDAT [M:SOH4]DSHIDAT(NLIG) = [M:SOH2]SHIDAT If func AFNC.ACTIV("EDIX3")>0 [M:SOH4]MAXDLVDAT(NLIG) = [M:SOH2]DEMDLVDAT: Endif #SAM 110881 Endif # --> Calcul de la date de livraison prevue Call CALC_DLVDAT([M:SOH4]DSHIDAT(NLIG), [M:SOH4]DDAYLTI(NLIG), [M:SOH4]DBPAADD(NLIG), [M:SOH0]BPCORD, 0,0, & [M:SOH4]EXTDLVDAT(NLIG)) From TRTVENDAT Raz GMESSAGE # --> Alimentation des commissions représentants For I=0 To dim([M:SOH1]REP)-1 WREP = evalue("[M:SOH1]REP("+num$(I)+")") Assign ("[M:SOH4]REP"+num$(I+1)+"(NLIG)") With WREP If WREP <> "" If [F:REP]REPNUM <> WREP Read [F:REP]REP0 = WREP If fstat Raz [F:REP] : Endif Endif If [F:BPC]BPCNUM <> [M:SOH0]BPCORD Read [F:BPC]BPC0 = [M:SOH0]BPCORD If fstat Raz [F:BPC] :Endif Endif If [F:BPC]COMCAT <> 0 Assign ("[M:SOH4]REPRAT"+num$(I+1)+"(NLIG)") With evalue("[F:REP]COMRAT"+num$(I+1)+"([F:BPC]COMCAT-1)") Endif Endif Next [M:SOH4]DMDL(NLIG) = [M:SOH2]MDL [M:SOH4]DBPTNUM(NLIG) = [M:SOH2]BPTNUM #[M:SOH4]DEMSTA(NLIG) = 1 [M:SOH4]DALLTYP(NLIG) = [M:SOH2]ALLTYP # Ini X3-175968_Expected_Max_delivery_times_on_lines_arent_defaulted (JUCON 2020-02-13) If dim([M:SOH4]DEMDLVHOU)>0 If [M:SOH4]DEMDLVHOU(NLIG)="": [M:SOH4]DEMDLVHOU(NLIG)=[M:SOH2]DEMDLVHOU: Endif If [M:SOH4]MAXDLVHOU(NLIG)="": [M:SOH4]MAXDLVHOU(NLIG)=[M:SOH2]DEMDLVHOU: Endif Endif # End X3-175968_Expected_Max_delivery_times_on_lines_arent_defaulted (JUCON 2020-02-13) End #--------------------------------------------------------------------# # Initialisation des zones venant de l'article dans une ligne # #--------------------------------------------------------------------# Subprog INIT_ITM(NLIG, ITM) Value Integer NLIG Value Char ITM Local Char VAT(GLONVAT)(3) Local Char WTSCCOD(GLONADI) (0..5) Local Char WTSICOD(GLONADI) (0..5) Local Integer WI [M]FMI(NLIG) = 1 [M]DEMSTA(NLIG) = 1 [M]INVFLG(NLIG) = 1 : # 107890 : Scheduled invoices : (LD:08/12/15) # --> Recherche taxe (même en transformation devis) [M:SOH4]VACITM1(NLIG) = [F:ITM]VACITM(0) [M:SOH4]VACITM2(NLIG) = [F:ITM]VACITM(1) [M:SOH4]VACITM3(NLIG) = [F:ITM]VACITM(2) #Call ALITAXEV([M:SOH1]VACBPR,[F:ITM]VACITM,VAT) From TRTX3 Call RECHVATCOD(1,1,[M:SOH0]BPCORD,ITM,"SOH4",NLIG,VAT) From TRTX3 [M:SOH4]VAT1(NLIG) = VAT(0) [M:SOH4]VAT2(NLIG) = VAT(1) [M:SOH4]VAT3(NLIG) = VAT(2) If dim([M:SOH4]SSTCOD) >0 : [M:SOH4]SSTCOD(NLIG) = [F:ITM]SSTCOD :Endif #101380.n If dim([M:SOH4]TSICOD1(NLIG))>0: [M:SOH4]TSICOD1(NLIG) = [F:ITM]TSICOD(0):Endif If dim([M:SOH4]TSICOD2(NLIG))>0: [M:SOH4]TSICOD2(NLIG) = [F:ITM]TSICOD(1):Endif If dim([M:SOH4]TSICOD3(NLIG))>0: [M:SOH4]TSICOD3(NLIG) = [F:ITM]TSICOD(2):Endif If dim([M:SOH4]TSICOD4(NLIG))>0: [M:SOH4]TSICOD4(NLIG) = [F:ITM]TSICOD(3):Endif If dim([M:SOH4]TSICOD5(NLIG))>0: [M:SOH4]TSICOD5(NLIG) = [F:ITM]TSICOD(4):Endif [M:SOH4]SAU(NLIG) = [F:ITM]SAU [M:SOH4]STU(NLIG) = [F:ITM]STU [M:SOH4]SAUSTUCOE(NLIG) = [F:ITM]SAUSTUCOE [M:SOH4]DACSAUCOE(NLIG) = [F:ITM]DACSAUCOE [M:SOH4]STOMGTCOD(NLIG) = [F:ITM]STOMGTCOD If [F:ITM]STOMGTCOD>1 If [F:ITF]ITMREF<>ITM | [F:ITF]STOFCY<>[M:SOH4]DSTOFCY(NLIG) Read [ITF] ITF0=ITM;[M:SOH4]DSTOFCY(NLIG) If fstat Raz [F:ITF] : Endif Endif # 111481 To init new EDI field USELIMDAT If func AFNC.ACTIV("EDIX3")>0 If [F:ITM]EXYMGTCOD >1 and [M:SOH4]FOCFLG(NLIG)=1 Local Shortint EXYDAYS If [F:ITM]SHLUOM =1: EXYDAYS=[F:ITM]SHL Else EXYDAYS=[F:ITM]SHL*30: Endif [M:SOH4]USELIMDAT(NLIG)=[M:SOH4]MAXDLVDAT(NLIG)+EXYDAYS Endif Endif # End 111481 If [F:ITF]STOMGTCOD>0 [M:SOH4]STOMGTCOD(NLIG) = [F:ITF]STOMGTCOD Endif Endif # Désignation standard #[M:SOH4]ITMDES1(NLIG) = [F:ITS]ITMDES1 Call CHARGE_DEFITMDES("DES1AXX", GLANGUE,[F:ITM]ITMREF,[M:SOH4]ITMDES1(NLIG), "[F:ITM]") From TRTX3 # FGR 29/06/2009 : X3SUIVI56129 # Désignation traduite #Call CHARGE_ITMDES("DES1AXX", [M:SOH0]LAN,[F:ITM]ITMREF,[M:SOH4]ITMDES(NLIG)) From TRTX3 #If [M:SOH4]ITMDES(NLIG) = "" [M:SOH4]ITMDES(NLIG) = [M:SOH4]ITMDES1(NLIG) Endif Call CHARGE_DEFITMDES("DES1AXX", [M:SOH0]LAN,[F:ITM]ITMREF,[M:SOH4]ITMDES(NLIG), "[F:ITM]") From TRTX3 # FGR 29/06/2009 : X3SUIVI56129 # Si contrat de service --> article non géré en stock If [F:ITM]TPLCONSRV <> "" [M:SOH4]STOMGTCOD(NLIG) = 1 Endif #[M:SOH4]PCK(NLIG) = [F:ITS]PCK #[M:SOH4]PCKCAP(NLIG) = [F:ITS]PCKCAP # Issue X3-66385 ##CPO 63410 - pb découvert lors de la correction de cette fiche ## -- l'unité de vente de la ligne doit être égale à l'UV de l'article #If [M:SOH4]SAU(NLIG) = [F:ITM]SAU # Call ALIPCK (ITM, [M:SOH4]DSTOFCY(NLIG), [M:SOH4]PCK(NLIG), [M:SOH4]PCKCAP(NLIG)) From TRTVENDIV #Endif # End issue X3-66385 # 107890 : Scheduled invoices : (LD:08/12/15) [M:SOH4]DLVFLG(NLIG) = [F:ITM]DLVFLG # Invoicing condition managed only for Normal order and # For Service/Generic category and type of flow sales and not deliverable If [M:SOH0]SOHCAT=1 & [F:ITM]DLVFLG=1 [M:SOH4]DINVCND(NLIG)=[M:SOH3]INVCND If [M:SOH4]DINVCND(NLIG)="" [M:SOH4]DINVCND(NLIG)=[F:ITS]INVCND Endif Endif # 107890 : Scheduled invoices : (LD:08/12/15) If [F:ITU]ITMREF <> ITM | [F:ITU]BPCNUM <> [M:SOH0]BPCORD Read [ITU] ITU0=ITM;[M:SOH0]BPCORD If fstat Raz [F:ITU] Endif Endif [M:SOH4]ITMREFBPC(NLIG) = [F:ITU]ITMREFBPC If [F:ITU]SAU <> "" & find([M:SOH4]LINTYP(NLIG),1,2,6,10) & [M:SOH4]FOCFLG(NLIG) <> 3 [M:SOH4]SAU(NLIG) = [F:ITU]SAU [M:SOH4]SAUSTUCOE(NLIG) = [F:ITU]SAUSTUCOE [M:SOH4]DACSAUCOE(NLIG) = 1 # Si on récupère l'unité de vente de l'article-client, on récupère aussi l'emballage et la capacité [M:SOH4]PCK(NLIG) = [F:ITU]PCK [M:SOH4]PCKCAP(NLIG) = [F:ITU]PCKCAP Endif #Call ALISAUCOE(ITM, [M:SOH0]BPCORD, [M:SOH4]SAU(NLIG), [M:SOH4]STU(NLIG), [M:SOH4]SAUSTUCOE(NLIG)) From TRTVENQTE # Issue X3-66385 # L'emballage est initialisé en priorité avec l'article client # Il est initialisé avec l'article (article site ou catégorie article) uniquement si l'UV de l'article = l'UV de la ligne # et si l'UV de l'article client = l'UV de la ligne mais il n'y a pas d'emballage pour l'article client # ou si l'UV de l'article client est différente de l'UV de la ligne # Package is initialized in priority with product customer # It is initialized with product (product site or product category) only if UV product= UV line # and if UV product customer = UV line but there is no package for product customer # or if UV product customer <> UV line If [M:SOH4]PCK(NLIG) = "" If [M:SOH4]SAU(NLIG) = [F:ITM]SAU Call ALIPCK (ITM, [M:SOH4]DSTOFCY(NLIG), [M:SOH4]PCK(NLIG), [M:SOH4]PCKCAP(NLIG)) From TRTVENDIV Endif Endif # End issue X3-66385 Raz [M:SOH4]SOQTEX(NLIG) If find(GSALTEXLIN,1,5) [M:SOH4]SOQTEX(NLIG) = [F:ITU]ITSTEX If [M:SOH4]SOQTEX(NLIG)="" [M:SOH4]SOQTEX(NLIG) = [F:ITS]ITSTEX Endif Endif [M:SOH4]CTMFLG(NLIG) = [F:ITS]CTMFLG : # Bug 55476 [M:SOH4]YSTOMGTCOD(NLIG) = [M:SOH4]STOMGTCOD(NLIG) : # Bug 55476 # Initialisation du code prépa If dim([M:SOH0]TSCCOD) <> -1 For WI = 1 To dim([M:SOH0]TSCCOD) WTSCCOD(WI-1) = [M:SOH0]TSCCOD(WI-1) #--CPO 90371 Lors de la correction de cette fiche - ici on fait For WI et Next I #Next I Next WI #--/ Endif If dim([M:SOH4]TSICOD1)>0: WTSICOD(0) = [M:SOH4]TSICOD1(NLIG): Endif If dim([M:SOH4]TSICOD2)>0: WTSICOD(1) = [M:SOH4]TSICOD2(NLIG): Endif If dim([M:SOH4]TSICOD3)>0: WTSICOD(2) = [M:SOH4]TSICOD3(NLIG): Endif If dim([M:SOH4]TSICOD4)>0: WTSICOD(3) = [M:SOH4]TSICOD4(NLIG): Endif If dim([M:SOH4]TSICOD5)>0: WTSICOD(4) = [M:SOH4]TSICOD5(NLIG): Endif If [F:BPC]BPCNUM<>[M:SOH0]BPCORD Read [BPC]BPC0=[M:SOH0]BPCORD : If fstat Raz [F:BPC] Endif Endif Call REC_PRECOD([M:SOH4]DSTOFCY(NLIG),ITM,[F:ITM]TCLCOD,WTSICOD(0), & WTSICOD(1),WTSICOD(2),WTSICOD(3),WTSICOD(4),[M:SOH0]BPCORD, & [F:BPC]BCGCOD,WTSCCOD(0),WTSCCOD(1),WTSCCOD(2),WTSCCOD(3), & WTSCCOD(4),[M:SOH4]PRECOD(NLIG)) From STKLIB # 107890 : Scheduled invoices : (LC:28/10/16) If [M:SOH4]DLVFLG(NLIG)<>2 If [M:SOH0]SOHCAT=1 Raz [M:SOH4]TDLQTY(NLIG) Raz [M:SOH4]DDEMDLVDAT(NLIG) Endif Raz [M:SOH4]DDAYLTI(NLIG) Raz [M:SOH4]DSHIDAT(NLIG) Raz [M:SOH4]EXTDLVDAT(NLIG) Raz [M:SOH4]CNDNAM(NLIG) Raz [M:SOH4]USEPLC(NLIG) Raz [M:SOH4]DDLVPIO(NLIG) Raz [M:SOH4]DDRN(NLIG) Raz [M:SOH4]DMDL(NLIG) Raz [M:SOH4]DBPTNUM(NLIG) Raz [M:SOH4]PRECOD(NLIG) Raz [M:SOH4]PCK(NLIG) Raz [M:SOH4]PCKCAP(NLIG) Raz [M:SOH4]DEMSTA(NLIG) If func AFNC.ACTIV("EDIX3")>0 #SAM 121329 (JUCON 03/02/2017) Raz [M:SOH4]DEMDLVHOU(NLIG) Raz [M:SOH4]MAXDLVHOU(NLIG) Raz [M:SOH4]MAXDLVDAT(NLIG) Raz [M:SOH4]BPCSALPRI(NLIG) Raz [M:SOH4]USELIMDAT(NLIG) Endif #SAM 121329 (JUCON 03/02/2017) Endif # 107890 : Scheduled invoices : (LC:28/10/16) End #---------------------------------------# # Traitement avant ligne # #---------------------------------------# Subprog AVANT_LIGNE(NOL) Value Integer NOL Local Integer WRETOUR Local Char WNUMTEX(12) If GMODIF = 1 # --> Suppression If find([M]LINTYP(NOL),2,10) GMODIF=3 Endif If find([M]LINTYP(NOL),6) GMODIF=4 Endif # Issue X3-38242 - 2019-03-20 by MUARN : Suppression d'une ligne à l'origine d'un gratuit ou suppression d'un gratuit # Si la ligne à l'origine d'un gratuit est issue d'un devis, le gratuit lié n'est pas forcément sur cette commande # --> Ne pas gérer la suppression du gratuit # Si la ligne de gratuit est issue d'une cde, la ligne à l'origine du gratuit lié n'est pas forcément sur cette commande # --> Ne pas gérer la modification de la ligne à l'origine du gratuit # deletion of a line at the source of a free product, if the line is from a quote, the free product is not delete # deletion of a free product line, if the line is from a quote, do not modify the line at the source of a free produc #GFOCFLG = [M]FOCFLG(NOL) GFOCFLG = 1 If [M:SOH4]DETSQHNUM(NOL)="" GFOCFLG = [M]FOCFLG(NOL) Endif # -----------------------------------------------------# # Suppression du texte si la ligne vient d'être créée # # -----------------------------------------------------# # If [M]CREFLG(NOL) = 0 # WRETOUR = 0 # WNUMTEX = [M:SOH4]SOQTEX (NOL) # Call TEX(5,"SOQ1","","","",WNUMTEX,"A",WRETOUR) From TRTX3TEX # Endif Endif Call SUB_TOT(NOL) End #-------------------------------------------# # Recherche tarif si modif qte ou creation # #-------------------------------------------# If GMODIF = 0 WRECH_TAR = 1 If [M:SOH4]FOCFLG(NOL) = 2 GMESSAGE = mess(7,191,1)+"\"+mess(21,191,1) Else GMESSAGE = mess(21,191,1) Endif Call OUINON(GMESSAGE,WRECH_TAR) From GESECRAN Raz GMESSAGE Else WRECH_TAR= 2 Endif If WRECH_TAR = 2 # --------------- Recherche tarif ----------------- # Article normal ou composé TYP=1 # Composant If find([M:SOH4]LINTYP(NOL),3,4,5,7,8,9,11,12) Local Integer ORI : ORI=NOL While !find([M]LINTYP(ORI),2,6,10) & ORI >= 0 ORI-=1 Wend If find([M]LINTYP(ORI),2,6,10) GPNTITMREF=[M]ITMREF(ORI) Endif TYP=4 Endif # --> Recherche tarif Call RECH_TARIF(TYP,[M]ITMREF(NOL),NOL,VALEUR,"SOH",[M]GROPRI(NOL)) From TRTVENTAR # --> Calcul du prix net Call CLCNETPRI(VALEUR, [M:SOH0]CUR, NOL) From TRTVENPRI # Issue X3-200515/X3-208171 - 2020-09-08 by SR : Progress billing #If GDACLOK = 1 If GDACLOK = 1 | (dim([M:SOH4]PRGBILNUM) > 1 & [M:SOH4]PRGBILNUM(NOL) <> "") Call CTLNETPRI([M:SOH0]BPCORD,[M:SOH0]CHGTYP,[M:SOH0]ORDDAT,[M:SOH0]CUR,NOL) From TRTVENPRI If mkstat=2 End Endif Endif Endif #----------------------------------------------------------------------------------# # Vérification des codes taxes : # # Appelé en fin de saisie de ligne pour vérifier si les codes taxes ont changé # # suite à modification d'un champs entrant dans la détermination de la taxe # # --> Si changement : Chargement des codes taxes # # Recalcul des montants de base calcul taxe (CLCAMT1 et 2) # # Dde recherche tarif si TTC # # Recalcul de la marge # #----------------------------------------------------------------------------------# Subprog VERIF_VATCOD (NLIG) Value Integer NLIG Local Char WVAT(GLONVAT)(3) Local Integer INICPRPRI : INICPRPRI=1 Call RECHVATCOD(1,1,[M:SOH0]BPCORD,[M:SOH4]ITMREF(NLIG),"SOH4",NLIG,WVAT) From TRTX3 If [M:SOH4]VAT1(NLIG)<>WVAT(0) | [M:SOH4]VAT2(NLIG)<>WVAT(1) | [M:SOH4]VAT3(NLIG)<>WVAT(2) [M:SOH4]VAT1(NLIG) = WVAT(0) [M:SOH4]VAT2(NLIG) = WVAT(1) [M:SOH4]VAT3(NLIG) = WVAT(2) # 101874 : V9 : Taxe code control #Call TRTRECTARD("SOH", [M:SOH1]CUR, NLIG) From TRTVENTAR Local Integer WOK : WOK=1 # 200515 : Progress billing / X3-217465 : Control on sales order line price search - 2020-10-12 by LD # If the sales order line is linked to a progress billing # If there is scheduled invoices linked to a billing situation not invoiced we can't modify the price (to avoid bad price when invoicing) # So price calculation has to be inhibited # This working flag indicates if, for the sales order line, there is scheduled invoices linked to a billing situation not invoiced If dim([M:SOH4]PBILDTOINV) <= 0 | [M:SOH4]PBILDTOINV(NOL)=1 # Price calculation can be done only if progress billing is not activated or if there is no scheduled invoices linked to a billing situation not invoiced # 200515 : Progress billing / X3-217465 : Control on sales order line price search - 2020-10-12 by LD If !GIMPORT Call OUINON (mess(247,191,1)-":"-mess(21,191,1),WOK) From GESECRAN : Endif # 200515 : Progress billing / X3-217465 : Control on sales order line price search - 2020-10-12 by LD Endif # 200515 : Progress billing / X3-217465 : Control on sales order line price search - 2020-10-12 by LD If WOK=2 Call TRTRECTARD("SOH", [M:SOH1]CUR, NLIG) From TRTVENTAR Endif # 101874 Call CLCPFM([M:SOH4]DSTOFCY(NLIG), [M:SOH1]PRITYP, [M]CHGTYP, [M:SOH0]ORDDAT, [M:SOH0]CUR, & NLIG,INICPRPRI) From TRTVENPRI Endif End #-------------------------------------# # Traitement apres ligne # #-------------------------------------# Subprog APRES_LIGNE(NLIG, AFF) Value Integer NLIG Value Integer AFF # --> Contrôle du prix net Call CTLNETPRI([M:SOH0]BPCORD, [M]CHGTYP, [M]ORDDAT, [M:SOH0]CUR,NLIG) From TRTVENPRI #If mkstat=2 End Endif # --> Contrôle de la marge Call CTLPFM([M:SOH0]CUR,[M:SOH4]CPRPRI(NLIG), NLIG) From TRTVENPRI #If mkstat=2 End Endif # --> Recalcul de l'état de la ligne de commande Gosub CALC_SOQSTA # --> Calcul du montant cde ht et ttc de la ligne Gosub CALC_ORD Gosub CALC_DSP From TRTVENDIV # --> Calcul des mnts à livrer ht et ttc de la ligne If [M:SOH4]DEMSTA(NLIG) <> 1 Raz [M:SOH4]LINDLRNOT(NLIG) Raz [M:SOH4]LINDLRATI(NLIG) # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) Raz [M:SOH4]LININRSCHNOT(NLIG) Raz [M:SOH4]LININRSCHATI(NLIG) # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) Else Gosub CALC_DLR : Endif Call ADD_TOT(NLIG) If AFF=1 Affzo [M:SOH4]LINORDNOT(NLIG),LINORDATI(NLIG),LINPFM(NLIG), SOQSTA(NLIG) Affzo [M:SOH4]10,15,20 Endif If func AFNC.ACTIV("EDIX3")>0 # SAM 120075 If [M:SOH4]MAXDLVDAT(NLIG)=[00/00/00]: [M:SOH4]MAXDLVDAT(NLIG)=[M:SOH4]DDEMDLVDAT(NLIG) : Endif Endif # SAM 120075 End #-------------------------------------------------------------# # Calcul des montants total de la commande # #-------------------------------------------------------------# Subprog ADD_TOT(NLIG) Value Integer NLIG Local Decimal MNTPFM [M:SOH4]ORDNOT += [M:SOH4]LINORDNOT(NLIG) [M:SOH4]ORDATI += [M:SOH4]LINORDATI(NLIG) [M:SOH4]DLRNOT += [M:SOH4]LINDLRNOT(NLIG) [M:SOH4]DLRATI += [M:SOH4]LINDLRATI(NLIG) # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) [M:SOH4]INRSCHNOT += [M:SOH4]LININRSCHNOT(NLIG) [M:SOH4]INRSCHATI += [M:SOH4]LININRSCHATI(NLIG) If [M:SOH0]SOHCAT<>2 & !([M:SOH1]BETFCY=2 & [M:SOH1]BETCPY<=1) # To invoice amount not managed for loan order and intracompany order [M:SOH4]INRNOT += ([M:SOH4]LINDLRNOT(NLIG)+[M:SOH4]LININRSCHNOT(NLIG)) [M:SOH4]INRATI += ([M:SOH4]LINDLRATI(NLIG)+[M:SOH4]LININRSCHATI(NLIG)) Endif # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) [M:SOH4]PFMTOT += [M:SOH4]LINPFM(NLIG) [M:SOH0]DSPTOTQTY += [M:SOH4]QTYSTU(NLIG) # Issue 107888 - 2016-06-20 by CPO : US120 Normal order -> Invoices (by using a scheduling invoice) #[M:SOH0]DSPTOTWEI += [M:SOH4]DSPLINWEI(NLIG) #[M:SOH0]DSPTOTVOL += [M:SOH4]DSPLINVOL(NLIG) If [M:SOH4]DLVFLG=2 [M:SOH0]DSPTOTWEI += [M:SOH4]DSPLINWEI(NLIG) [M:SOH0]DSPTOTVOL += [M:SOH4]DSPLINVOL(NLIG) Else Raz [M:SOH4]DSPLINWEI(NLIG), [M:SOH4]DSPLINVOL(NLIG) Endif # End issue 107888 US120 # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) #Call MAJ_SFIT_QTY("M", "SOH3", [M:SOH4]DETSQHNUM(NLIG), [M:SOH4]QTYSTU(NLIG), [M:SOH4]LINDLRNOT(NLIG), [M:SOH4]DSPLINWEI(NLIG), [M:SOH4]DSPLINVOL(NLIG)) From SUBSFIT If [M:SOH0]SOHCAT=1 & [M:SOH4]DLVFLG(NLIG)=1 # Normal order and Undeliverable product Call MAJ_SFIT_QTY("M", "SOH3", [M:SOH4]DETSQHNUM(NLIG), [M:SOH4]QTYSTU(NLIG), [M:SOH4]LININRSCHNOT(NLIG), [M:SOH4]DSPLINWEI(NLIG), [M:SOH4]DSPLINVOL(NLIG)) From SUBSFIT Else # Normal order, loan order and Deliverable product # Direct invoice order and all products Call MAJ_SFIT_QTY("M", "SOH3", [M:SOH4]DETSQHNUM(NLIG), [M:SOH4]QTYSTU(NLIG), [M:SOH4]LINDLRNOT(NLIG), [M:SOH4]DSPLINWEI(NLIG), [M:SOH4]DSPLINVOL(NLIG)) From SUBSFIT Endif # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) # Issue 106149 #---------------------------------------------------------------------# # Point d'entree pour le calcul de montants spécifiques # #---------------------------------------------------------------------# GPOINT="ADD_TOT" : Gosub ENTREE From EXEFNC # End issue 106149 End Subprog SUB_TOT(NLIG) Value Integer NLIG Local Decimal MNTPFM [M:SOH4]ORDNOT -= [M:SOH4]LINORDNOT(NLIG) [M:SOH4]ORDATI -= [M:SOH4]LINORDATI(NLIG) [M:SOH4]DLRNOT -= [M:SOH4]LINDLRNOT(NLIG) [M:SOH4]DLRATI -= [M:SOH4]LINDLRATI(NLIG) # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) [M:SOH4]INRSCHNOT -= [M:SOH4]LININRSCHNOT(NLIG) [M:SOH4]INRSCHATI -= [M:SOH4]LININRSCHATI(NLIG) If [M:SOH0]SOHCAT<>2 & !([M:SOH1]BETFCY=2 & [M:SOH1]BETCPY<=1) # To invoice amount not managed for loan order and intracompany order [M:SOH4]INRNOT -= ([M:SOH4]LINDLRNOT(NLIG)+[M:SOH4]LININRSCHNOT(NLIG)) [M:SOH4]INRATI -= ([M:SOH4]LINDLRATI(NLIG)+[M:SOH4]LININRSCHATI(NLIG)) Endif # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) [M:SOH4]PFMTOT -= [M:SOH4]LINPFM(NLIG) [M:SOH0]DSPTOTQTY -= [M:SOH4]QTYSTU(NLIG) # Issue 107888 - 2016-06-20 by CPO : US120 Normal order -> Invoices (by using a scheduling invoice) #[M:SOH0]DSPTOTWEI -= [M:SOH4]DSPLINWEI(NLIG) #[M:SOH0]DSPTOTVOL -= [M:SOH4]DSPLINVOL(NLIG) If [M:SOH4]DLVFLG=2 [M:SOH0]DSPTOTWEI -= [M:SOH4]DSPLINWEI(NLIG) [M:SOH0]DSPTOTVOL -= [M:SOH4]DSPLINVOL(NLIG) Else Raz [M:SOH4]DSPLINWEI(NLIG), [M:SOH4]DSPLINVOL(NLIG) Endif # End issue 107888 US120 # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) #Call MAJ_SFIT_QTY("M", "SOH3", [M:SOH4]DETSQHNUM(NLIG), -1*[M:SOH4]QTYSTU(NLIG), -1*[M:SOH4]LINDLRNOT(NLIG), -1*[M:SOH4]DSPLINWEI(NLIG), -1*[M:SOH4]DSPLINVOL(NLIG)) From SUBSFIT If [M:SOH4]DLVFLG(NLIG)=1 # Normal order and Undeliverable product Call MAJ_SFIT_QTY("M", "SOH3", [M:SOH4]DETSQHNUM(NLIG), -1*[M:SOH4]QTYSTU(NLIG), -1*[M:SOH4]LININRSCHNOT(NLIG), -1*[M:SOH4]DSPLINWEI(NLIG), -1*[M:SOH4]DSPLINVOL(NLIG)) From SUBSFIT Else # Normal order, loan order and Deliverable product # Direct invoice order and all products Call MAJ_SFIT_QTY("M", "SOH3", [M:SOH4]DETSQHNUM(NLIG), -1*[M:SOH4]QTYSTU(NLIG), -1*[M:SOH4]LINDLRNOT(NLIG), -1*[M:SOH4]DSPLINWEI(NLIG), -1*[M:SOH4]DSPLINVOL(NLIG)) From SUBSFIT Endif # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) # Issue 106149 #---------------------------------------------------------------------# # Point d'entree pour le calcul de montants spécifiques # #---------------------------------------------------------------------# GPOINT="SUB_TOT" : Gosub ENTREE From EXEFNC # End issue 106149 End #-----------------------------------------# # Suppression d'une ligne dans le tableau # #-----------------------------------------# Subprog SUP_LIG(NLIG, WRET) Value Integer NLIG Variable Integer WRET : WRET = 0 # --> pas de suppression si ligne préparée/livrée/facturée If ([M]TALLQTY(NLIG)-[M]ALLQTY(NLIG)+[M]LPRQTY(NLIG)) <> 0 WRET = 1 : End : Endif Call SUB_TOT(NLIG) From SUBSOHB If dim([M]ITMREF) = [M]NBLIG Dela NLIG,1 [M:SOH4]NBLIG Else Dela NLIG,1,[M:SOH4]NBLIG-1 [M:SOH4]NBLIG : Endif [M:SOH4]NBLIG -=1 End #---------------------------------------------------------------------------------# # Traitement de solde d'une ligne de commande # #---------------------------------------------------------------------------------# # Appelé depuis le bouton solde d'une ligne de commande # # Appelé depuis le composant GENSOH (Génération d'une commande de vente) # #---------------------------------------------------------------------------------# $TRT_CLESOQ # --> Solde de la ligne, les mnts à livrer passent à 0 If [M]SOQSTA(NLIG) <> 3 [M]SOQSTA(NLIG) = 3 # -- Raz de la quantité à allouer Raz [M:SOH4]WALLQTY(NLIG), WALLQTYSTU(NLIG) [M:SOH4]DLRNOT -= [M:SOH4]LINDLRNOT(NLIG) [M:SOH4]DLRATI -= [M:SOH4]LINDLRATI(NLIG) # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) [M:SOH4]INRSCHNOT -= [M:SOH4]LININRSCHNOT(NLIG) [M:SOH4]INRSCHATI -= [M:SOH4]LININRSCHATI(NLIG) # To invoice amount not managed for loan order and intracompany order If [M:SOH0]SOHCAT<>2 & !([M:SOH1]BETFCY=2 & [M:SOH1]BETCPY<=1) [M:SOH4]INRNOT -= ([M:SOH4]LINDLRNOT(NLIG)+[M:SOH4]LININRSCHNOT(NLIG)) [M:SOH4]INRATI -= ([M:SOH4]LINDLRATI(NLIG)+[M:SOH4]LININRSCHATI(NLIG)) Endif Raz [M:SOH4]LININRSCHNOT (NLIG), [M:SOH4]LININRSCHATI(NLIG) # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) Raz [M:SOH4]LINDLRNOT (NLIG), [M:SOH4]LINDLRATI(NLIG) # 107888 : Scheduled invoices : (LD:20/05/16) #If [M:SOH0]SOHCAT <> 3 If [M:SOH0]SOHCAT <> 3 & [M]DLVFLG(NLIG)=2 # Commande normale/prêt et ligne livrable # 107888 : Scheduled invoices : (LD:20/05/16) # -- La ligne est facturée si tout ce qui est livré est facturé If [M]INVQTY(NLIG) <> 0 & [M]INVQTY(NLIG) >= [M]DLVQTY(NLIG) + [M]ODLQTY(NLIG) [M]INVFLG(NLIG) = 2 Endif Else # Commande à facturation directe : # 107888 : Scheduled invoices : (LD:20/05/16) # Commande normale et ligne non livrable : # 107888 : Scheduled invoices : (LD:20/05/16) # -- La ligne est facturée si tout ce qui est commandé est facturé If ([M]INVQTY(NLIG) <> 0 | [M]ODLQTY(NLIG) <> 0) & & [M]INVQTY(NLIG) + [M]ODLQTY(NLIG) >= [M]QTY(NLIG) [M]INVFLG(NLIG) = 2 Endif Endif If [M:SOH4]DCCLREN(NLIG) <> "" [M:SOH4]DCCLDAT(NLIG)=date$ Endif # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management #--All invoice schedule line that have a status other than "invoiced"/"credit memo" are set to "closed" If [M:SOH4]DINVCND(NLIG)<>"" Gosub TRT_CLESOQ_CLOSED From LIBSAL_INVCND_SOH If GERR=1 : Return : Endif Endif # End issue 107888 Else # --> Réactivation de la ligne, les mnts à livrer sont recalculés [M]SOQSTA(NLIG) = 1 Gosub CALC_DLR From SUBSOHB [M:SOH4]DLRNOT += [M:SOH4]LINDLRNOT(NLIG) [M:SOH4]DLRATI += [M:SOH4]LINDLRATI(NLIG) # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) [M:SOH4]INRSCHNOT += [M:SOH4]LININRSCHNOT(NLIG) [M:SOH4]INRSCHATI += [M:SOH4]LININRSCHATI(NLIG) # To invoice amount not managed for loan order and intracompany order If [M:SOH0]SOHCAT<>2 & !([M:SOH1]BETFCY=2 & [M:SOH1]BETCPY<=1) [M:SOH4]INRNOT += ([M:SOH4]LINDLRNOT(NLIG)+[M:SOH4]LININRSCHNOT(NLIG)) [M:SOH4]INRATI += ([M:SOH4]LINDLRATI(NLIG)+[M:SOH4]LININRSCHATI(NLIG)) Endif # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) [M]INVFLG(NLIG) = 1 Raz [M:SOH4]DCCLREN(NLIG),[M:SOH4]DCCLDAT(NLIG) # Issue 107888 - 2015-10-28 by CPO : Scheduled invoices object management #--All invoice schedule line that have a status other than "invoiced"/"credit memo" are set to "not invoiced" If [M:SOH4]DINVCND(NLIG)<>"" Gosub TRT_CLESOQ_NOTCLOSED From LIBSAL_INVCND_SOH If GERR=1 : Return : Endif Endif # End issue 107888 Endif [M]UPDFLG(NLIG) = 1 [M]WUPDAPPFLG(NLIG) = 2 If GREV=2 [M]LINREVNUM(NLIG) = [M:SOH0]REVNUM:Endif Return #---------------------------------------------------------------------------------# # Recalcul de l'état solde de la ligne commande # #---------------------------------------------------------------------------------# # Solde automatique si aucune allocation en cours et si tout est livré/facturé # # (Pas de désolde automatique puisqu'on ne peut plus modifier une ligne soldée) # #---------------------------------------------------------------------------------# $CALC_SOQSTA #If [M]SOQSTA(NLIG) <> 3 & [M]ALLQTY(NLIG) = 0 & [M]WALLQTY(NLIG) = 0 & [M]QTY(NLIG) <> 0 If [M]SOQSTA(NLIG) <> 3 & ([M]WALLQTY(NLIG)-[M]SHTQTY(NLIG)) = 0 & [M]QTY(NLIG) <> 0 # 107888 : Scheduled invoices : (LD:20/05/16) #If [M:SOH0]SOHCAT <> 3 If [M:SOH0]SOHCAT <> 3 & [M]DLVFLG(NLIG) = 2 # -- Commande normale /prêt et ligne livrable # 107888 : Scheduled invoices : (LD:20/05/16) If [M]DLVQTY(NLIG) + [M]ODLQTY(NLIG) >= [M]QTY(NLIG) [M]SOQSTA(NLIG)=3 # -- La ligne est facturée si tout ce qui est livré est facturé If [M]INVQTY(NLIG) <> 0 & [M]INVQTY(NLIG) >= [M]DLVQTY(NLIG) + [M]ODLQTY(NLIG) [M]INVFLG(NLIG) = 2 Endif Endif Else # 107888 : Scheduled invoices : (LD:20/05/16) # -- Commande à facturation directe # -- Commande normale et ligne non livrable # 107888 : Scheduled invoices : (LD:20/05/16) If [M]INVQTY(NLIG) + [M]ODLQTY(NLIG) >= [M]QTY(NLIG) [M]SOQSTA(NLIG)=3 # -- La ligne est facturée si tout ce qui est commandé est facturé If ([M]INVQTY(NLIG) <> 0 | [M]ODLQTY(NLIG) <> 0) & & [M]INVQTY(NLIG) + [M]ODLQTY(NLIG) >= [M]QTY(NLIG) [M]INVFLG(NLIG) = 2 Endif Endif Endif Endif Return #--------------------------------------------------------------# # Calcul des montants à livrer HT et TTC d'une ligne commnande # # Calcul To invoice amount - tax and + tax for an order line # : # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) #--------------------------------------------------------------# $CALC_DLR Local Decimal WMNTCALCNOT, WMNTCALCATI : # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) Local Decimal QTY # 107888 : Scheduled invoices : (LD:20/05/16) #If [M:SOH0]SOHCAT = 3 If [M:SOH0]SOHCAT = 3 | ([M:SOH0]SOHCAT = 1 & [M]DLVFLG(NLIG) = 1) # -- Commande à facturation directe # -- Commande normale et ligne non livrable # 107888 : Scheduled invoices : (LD:20/05/16) QTY = [M:SOH4]QTY(NLIG) - [M:SOH4]INVQTY(NLIG) - [M:SOH4]ODLQTY(NLIG) Else # 107888 : Scheduled invoices : (LD:20/05/16) # -- Commande normale /prêt et ligne livrable # 107888 : Scheduled invoices : (LD:20/05/16) QTY = [M:SOH4]QTY(NLIG) - [M:SOH4]DLVQTY(NLIG) - [M:SOH4]ODLQTY(NLIG) Endif If QTY < 0 QTY = 0 Endif # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) ## Montant net HT à livrer de la ligne #MNTCALC = QTY*[M:SOH4]NETPRINOT(NLIG) #Call ARRDEV (MNTCALC, [M:SOH0]CUR) From TRTDIV #[M:SOH4]LINDLRNOT(NLIG) = MNTCALC ## Montant net TTC à livrer de la ligne #MNTCALC = QTY*[M:SOH4]NETPRIATI(NLIG) #Call ARRDEV (MNTCALC, [M:SOH0]CUR) From TRTDIV #[M:SOH4]LINDLRATI(NLIG) = MNTCALC #If [M:SOH4]SOQSTA(NLIG) = 3 # Raz [M:SOH4]LINDLRNOT(NLIG) # Raz [M:SOH4]LINDLRATI(NLIG) #Endif WMNTCALCNOT = QTY*[M:SOH4]NETPRINOT(NLIG) Call ARRDEV (WMNTCALCNOT, [M:SOH0]CUR) From TRTDIV WMNTCALCATI = QTY*[M:SOH4]NETPRIATI(NLIG) Call ARRDEV (WMNTCALCATI, [M:SOH0]CUR) From TRTDIV # Alimentation To deliver - tax and + tax amount # -- Loan order # -- Direct invoice order # -- Normal order and deliverable product If find([M:SOH0]SOHCAT,2,3) | [M]DLVFLG(NLIG) = 2 # To deliver - tax for the line [M:SOH4]LINDLRNOT(NLIG) = WMNTCALCNOT # To deliver + tax for the line [M:SOH4]LINDLRATI(NLIG) = WMNTCALCATI If [M:SOH4]SOQSTA(NLIG) = 3 Raz [M:SOH4]LINDLRNOT(NLIG) Raz [M:SOH4]LINDLRATI(NLIG) Endif Endif # Alimentation To scheduled invoice - tax and + tax amount # -- Normal order and undeliverable product If [M:SOH0]SOHCAT = 1 & [M]DLVFLG(NLIG) = 1 # To scheduled invoice - tax for the line [M:SOH4]LININRSCHNOT(NLIG) = WMNTCALCNOT # To scheduled invoice + tax for the line [M:SOH4]LININRSCHATI(NLIG) = WMNTCALCATI If [M:SOH4]SOQSTA(NLIG) = 3 Raz [M:SOH4]LININRSCHNOT(NLIG) Raz [M:SOH4]LININRSCHATI(NLIG) Endif Endif # 107888 : Scheduled invoices : New fields 'To invoice' - X3-15763 (LD:12/12/16) Return #-------------------------------------------------------------# # Calcul des montants commande ht et ttc d'une ligne commande # #-------------------------------------------------------------# $CALC_ORD Local Decimal MNTCALC # Bug 65534 Local Char VAT(GLONVAT)(3) VAT (0) = [M]VAT1(NLIG) VAT (1) = [M]VAT2(NLIG) VAT (2) = [M]VAT3(NLIG) If [M:SOH1]PRITYP=1 # Montant net HT commandé de la ligne MNTCALC = [M]QTY(NLIG) * [M]NETPRINOT(NLIG) Call ARRDEV (MNTCALC, [M:SOH0]CUR) From TRTDIV [M]LINORDNOT(NLIG) = MNTCALC # Montant net TTC commandé de la ligne #MNTCALC = [M]QTY(NLIG) * [M]NETPRIATI(NLIG) # Bug 45662 : Calcul Montant TTC en repartant du Montant HT pr éviter les pbs d'arrondis # Call CLCTAXEMNT([M]LINORDNOT(NLIG),VAT,[M:SOH1]PRITYP,GSOCIETE,[M:SOH0]ORDDAT,[M]CLCAMT1(NLIG),[M]CLCAMT2(NLIG), : # Bug 71296 #& MNTCALC) From TRTX3 : # Bug 71296 Call CLCTAXEMNTV([M]LINORDNOT(NLIG),VAT,[M:SOH1]PRITYP,GSOCIETE,[M:SOH0]ORDDAT,[M:SOH1]VACBPR,[M]CLCAMT1(NLIG),[M]CLCAMT2(NLIG), & MNTCALC) From TRTX3 #X3-122517 If func AFNC.ACTIV("LTA") & [F:CPY]SSTTAXACT = 2 MNTCALC = [M]QTY(NLIG) * [M]NETPRIATI(NLIG) Endif #X3-122517 : # Bug 71296 Call ARRDEV (MNTCALC, [M:SOH0]CUR) From TRTDIV [M]LINORDATI(NLIG) = MNTCALC Else # Bug 65534 # Montant net TTC commandé de la ligne MNTCALC = [M]QTY(NLIG) * [M]NETPRIATI(NLIG) Call ARRDEV (MNTCALC, [M:SOH0]CUR) From TRTDIV [M]LINORDATI(NLIG) = MNTCALC # Montant net HT commandé de la ligne # Calcul Montant HT en repartant du Montant TTC pr éviter les pbs d'arrondis # Call CLCTAXEMNT([M]LINORDATI(NLIG),VAT,[M:SOH1]PRITYP,GSOCIETE,[M:SOH0]ORDDAT,[M]CLCAMT1(NLIG),[M]CLCAMT2(NLIG), : # Bug 71296 #& MNTCALC) From TRTX3 : # Bug 71296 Call CLCTAXEMNTV([M]LINORDATI(NLIG),VAT,[M:SOH1]PRITYP,GSOCIETE,[M:SOH0]ORDDAT,[M:SOH1]VACBPR,[M]CLCAMT1(NLIG),[M]CLCAMT2(NLIG), & MNTCALC) From TRTX3 : # Bug 71296 Call ARRDEV (MNTCALC, [M:SOH0]CUR) From TRTDIV [M]LINORDNOT(NLIG) = MNTCALC Endif # Marge de la ligne MNTCALC = [M]QTY(NLIG) * [M]PFM(NLIG) Call ARRDEV (MNTCALC, [M:SOH0]CUR) From TRTDIV [M]LINPFM(NLIG) = MNTCALC If [F:ITM]ITMREF <> [M]ITMREF(NLIG) Read [ITM]ITM0=[M]ITMREF(NLIG) If fstat Raz [F:ITM] Endif Endif # Issue 116789 #---------------------------------------------------------------------# # Point d'entree pour le calcul de montants spécifiques # #---------------------------------------------------------------------# GPOINT="CALC_ORD" : Gosub ENTREE From EXEFNC # End issue 116789 Return ######################################################################### # GENERATION d'une COMMANDE à partir du bouton COMMANDE # # de la gestion des devis # ######################################################################### #- X3Suivi 69847 Génération commande depuis devis --# $GEN_COM Local Integer I Local Char WSOHTYP(GLONTSO) Local Integer WSOHCAT Local Char WSDHTYP(GLONTSD) Default Mask [SOH1] Gosub RAZCRE From SUBSOHA1 # SAM 120556 GREP="C" GOK = 1 Read [SQH]SQH0=[M:SQH0]SQHNUM If fstat Call RSTA ("SQH",[M:SQH0]SQHNUM) From GLOCK Raz GOK Return Endif Call TEMPON("V") From GESECRAN Raz WSOHTYP # FGR 26/02/2015 : X3SUIVI104383 #If GFCY<>[F:SQH]SALFCY # FGR 26/02/2015 : X3SUIVI104383 : je ne vois pas pourquoi ce test ? GFCY = [F:SQH]SALFCY # Ctrl site par défaut par rapport au critère, si aucun site par défaut, charge le 1er site correspondant au critere Call GETFCYDEF(GFCY,"[F:FCY]SALFLG=2") From TRTX3 Call GLOBVAR(GFCY,"VEN") From TRTX3 : #--- Récup param vente site / société Gosub CHARG_PARAM From SUBSOHA : #-- Chargement globales référenciels, comptes et sections de la société ## Alimentation du type de commande avec le premier existant # -------------------------------------- # FGR 23/02/2015 : X3SUIVI104383 (début) #Gosub SOHTYP From TRTVENCDE WSOHTYP = [F:SQH]SOHTYP # 1°) on prend celui qui est sur le devis If WSOHTYP = "" Then If GQUOORDCAT = 2 Then WSOHTYP = GSOHTYPINV # 2°) s'il est vide on prend celui du paramètre SOHTYPINV Else WSOHTYP = GSOHTYPNOR # 2°) s'il est vide on prend celui du paramètre SOHTYPNOR Endif Endif # Issue X3-218177/245890 - 2021-05-11 by MUARN : Check leg before #If WSOHTYP = "" Then # Gosub SOHTYP From TRTVENCDE # 3°) S'il est vide on prend le premier par ordre alpha. # Issue 116275 #Else # Local Integer IRET # Call LEC_TSO_LEG(GCURLEG, WSOHTYP, IRET) From TRTLECLEG # WSOHCAT = [F:TSO]SOHCAT # WSDHTYP = [F:TSO]SDHTYP # GCPT = [F:TSO]CODNUM # GMANCOU = [F:TSO]MANCOU # End issue 116275 #Endif # Issue X3-218177/245890 - 2021-05-11 by MUARN : Check leg If WSOHTYP<>"" Call CONTTSO(WSOHTYP,GCURLEG,"SOH0","SOHTYP",GFCY,"",GSOCIETE) From SUBTSO If mkstat Raz WSOHTYP Endif Endif If WSOHTYP = "" Raz GMESSAGE Raz mkstat # Search for first type available Gosub SOHTYP From TRTVENCDE Endif If WSOHTYP<>"" [M:SOH0]SOHTYP = WSOHTYP [M:SOH0]SOHCAT = [F:TSO]SOHCAT [M:SOH2]SDHTYP = [F:TSO]SDHTYP WRECTYP = [F:TSO]RECTYP WSOHCAT = [F:TSO]SOHCAT WSDHTYP = [F:TSO]SDHTYP GCPT = [F:TSO]CODNUM GMANCOU = [F:TSO]MANCOU Call AP_SOHTYP([M:SOH0]SOHTYP) From SUBSOH If GERR=1 Return Endif Call AM_SOHTYP([M:SOH0]SOHTYP) From SUBSOH Endif # End issue X3-218177/245890 # FGR 23/02/2015 : X3SUIVI104383 (fin) # -------------------------------------- [M:SOH0]SOHTYP=WSOHTYP # FGR 15/11/2012 : X3SUIVI71937 (début) Call C_SOHTYP([M:SOH0]SOHTYP) From W1SOH0 If mkstat Then Goto NO_ORDRE_CREATE Endif # FGR 15/11/2012 : X3SUIVI71937 (fin) # [M:SOH0]SOHCAT=WSOHCAT # Issue X3-218177/245890 - 2021-05-11 by MUARN : not necessayr, done before # 75115 : V7 : Extension of Digital Signature : New field delivery type #[M:SOH2]SDHTYP=WSDHTYP # Issue X3-218177/245890 - 2021-05-11 by MUARN : not necessayr, done before #Endif If clalev([F:SQD2])=0 : Local File SQUOTED [SQD2] : Endif # Devis Filter [SQD2] Where SQHNUM=[M:SQH0]SQHNUM For [SQD2] # Issue 110013 - 20150807 by LD # Issue 110706 # # Components for Fixed Kit/Flexible Kit/Subcontract are generated with parent item so they are not considered there # If find([F:SQD2]LINTYP,1,2,6,10) # Components for Fixed Kit/Subcontract are generated with parent item so they are not considered there If !find([F:SQD2]LINTYP,3,4,5,11,12,13) # End issue 110706 # Issue 110013 [F:SQD]SQDLIN = [F:SQD2]SQDLIN #-- Lecture du détail lignes devis et génération commandes --# Gosub SEL From SUBSOHC # 101841 : Recherche interdit si adresse de livraison vide sur le devis # Si l'article est interdit, on ne génère pas la ligne If GERR=1 Call ERREUR(GMESSAGE) From GESECRAN Endif # 101841 # 108767 (LD:15/06/15) : Il faut dépositionner mkstat pour traiter correctement les lignes suivantes Raz mkstat # 108767 (LD:15/06/15) Raz GERR # FGR 02/12/2011 : X3SUIVI71065 # Issue 110013 Endif # Issue 110013 Next Filter [SQD2] Call PJT_INFO_MSG() From TRTPJT # FGR 15/12/2011 : X3SUIVI71065 GREP="" : # On gère le mode création #Raz currbox $NO_ORDRE_CREATE # FGR 15/11/2012 : X3SUIVI71937 If [M:SOH4]NBLIG=0 GERR=1 GMESSAGE=mess(322,192,1) Raz GOK # Commande non créee Endif If GOK=0 Goto GEN_COM_FIN Endif # Création de la commande Gosub CREATION From GOBJET1 $GEN_COM_FIN Call TEMPOFF From GESECRAN Return #--CPO 82311 Acomptes sur commande et modification du client facturé ou du tiers payeur #--Mise à jour du client facture/tiers payeur sur les échéances d'acomptes d'une commandes #-------------GMODBPCINV = 1 si modif du client facture #-------------GMODBPCPYR = 1 si modif du tiers payeur $UPDATE_DUD_SOH_MODBPC #--Pas de maj si nous ne sommes pas sur la gestion des cdes ou si on ne vient pas des cdes d'achat (inter-site) If GFONC1<>"GESSOH" & GFONC1<>"GESPOH" Return Endif #-- If dim(MODBPCINV)<0 | dim(MODBPCPYR)<0 : Return : Endif #--Pas de maj si nous sommes en création ou duplication If GREP="C" or GREP="D" Return Endif Local Integer WOUVDUD : WOUVDUD=0 If clalev([F:DUD])=0 : WOUVDUD=1 : Local File GACCDUDATE [DUD] : Endif #--On reporte la modification sur les échéances (qu'elles soient réglées ou non) If MODBPCINV=1 and [F:SOH]BPCINV<>"" Update [F:DUD] Where TYP="*SO" and NUM=[F:SOH]SOHNUM With BPR=[F:SOH]BPCINV If fstat GOK=0 : Call FSTA("DUD") From GLOCK : Goto FIN_RETURN : Endif Endif #--On reporte la modification sur les échéances (non réglées ou partiellement réglées ???) If MODBPCPYR=1 and [F:SOH]BPCPYR<>"" and [F:SOH]BPAPYR<>"" #--Attente réponse CH (par rapport aux commentaires de CP sur fiche SAM) Update [F:DUD] Where TYP="*SO" and NUM=[F:SOH]SOHNUM and (PAYCUR=0 and TMPCUR=0 and FLGCLE<2) & With BPRPAY=[F:SOH]BPCPYR,BPAPAY=[F:SOH]BPAPYR If fstat GOK=0 : Call FSTA("DUD") From GLOCK : Goto FIN_RETURN : Endif Endif #--Appel du traitement d'historisation des modifs des échéances If (MODBPCINV=1 and [F:SOH]BPCINV<>"") | (MODBPCPYR=1 and [F:SOH]BPCPYR<>"" and [F:SOH]BPAPYR<>"") For [F:DUD]DUD0 Where TYP="*SO" and NUM=[F:SOH]SOHNUM If MODBPCINV=1 | (MODBPCPYR=1 and ([F:DUD]PAYCUR=0 and [F:DUD]TMPCUR=0 and [F:DUD]FLGCLE<2)) #--Si modif client facture => on historise sans condition (on a mis à jour les échéances) Call HISTOECH("DUD",1,[F:SOH]ORDDAT)From MODECHE Endif Next Endif #-- $FIN_RETURN Raz MODBPCINV,MODBPCPYR If WOUVDUD=1 Close Local File [DUD] Default File [SOH] Endif Return #--/CPO ######################################################################### # TRAITEMENTS LIES AU PICKING DES DEVIS # ######################################################################### # Issue 110706 - 20150904 by LD : Picking devis et composé nomenclature # Issue 120966 - 20170126 by LD : Sales quotes: Issue on free product with BOM # Issue X3-160406 - 2019-10-11 by SR : Active/Inactive customer control ######################################################################### # Actions de l'objet # ######################################################################### ######################################################################### $HINT_KEY Case currbox When GBOXSQ1 : HINTLIS(val(right$(GBOXSQ1,8)))="SQD1" When Default : Return Endcase Return ######################################################################### $TIROIR ILIS=val(right$(currbox,8)) Gosub REMP_LISGAU From GOBJSUB WPICK=2 Gosub RAFFRAICHI Return ######################################################################### $REMP_DERLU #MAE, pour raz dernier lu si navigation autre que depuis client ou demande service If GFONC1<>"GESSOH" If GPILNAV>1 If !find(GNAVIG(GPILNAV-1),"GESBPC","GESSRE","FUNCMG3") adxmxl=0 Endif Else adxmxl=0 Endif Endif Return ######################################################################### $FILGAUCHE Local Date WSHIDAT #MAE, pour raz liste gauche si navigation autre que depuis client ou demande service If GFONC1<>"GESSOH" If GPILNAV>1 If !find(GNAVIG(GPILNAV-1),"GESBPC","GESSRE","FUNCMG3") If ILIS=0 adxmxl=0 Endif Endif Elsif ILIS=0 adxmxl=0 Endif Endif Case currbox When GBOXSQ1 : Gosub FILGAUCHE1 When Default : Return Endcase Return ######################################################################### $FILGAUCHE1 # Si pas de clé courante(sauf si création) ou commande soldée, ou commande de pret # --> Rien dans la liste de picking # FGR 16/01/2015 : X3SUIVI88435 (début) #If (GREP="" & !CLECUR) | [M]ORDSTA=2 | [M]SOHCAT=2 # FILGAUSUP(0)='[F:SQD]ORDFLG=99' # Return #Endif Local Integer IPE_QUOTE_LOAN # PE pour permettre de sélectionner des devis sur commandes de prêt. # Par défaut IPE_QUOTE_LOAN = 0 : pas de devis pour les commandes de prêt # Pour tout autre valeur, la liste des devis sera proposée (à condition que les autres conditions # soient respectées ((GREP="" & !CLECUR) | [M]ORDSTA=2). Elles sont incontournables. # IPE_QUOTE_LOAN n'est testé que pour les commandes de prêt ([M]SOHCAT=2). Son contenu est ignoré sinon IPE_QUOTE_LOAN = 0 GPOINT = "SQUOTELOAN" : Gosub ENTREE From EXEFNC If (GREP="" & !CLECUR) | [M]ORDSTA=2 | ([M]SOHCAT=2 and IPE_QUOTE_LOAN = 0) Then FILGAUSUP(0)='[F:SQD]ORDFLG=99' Return Endif # FGR 16/01/2015 : X3SUIVI88435 (fin) # Les lignes ne doivent pas être transformées FILGAUSUP(0) = '[F:SQD]ORDFLG=1' ##VPO 05/05/09 51742 pb listes gauches et CZ (modif FILGAUCHE et APRES_MODIF) ##If COUZON="SALFCY" ## If CZ<>"" FILGAUSUP(0)+='&[F:SQD]SALFCY=CZ' Endif ##Else ## If [M]SALFCY<>"" FILGAUSUP(0)+='&[F:SQD]SALFCY=[M]SALFCY' Endif ##Endif If [M]SALFCY<>"" FILGAUSUP(0)+='&[F:SQD]SALFCY=[M]SALFCY' Endif If find(REPONSE,GSTARAF,GSTATIR,GSTAPRG,GSTASVG) ##VPO 05/05/09 51742 pb listes gauches et CZ (modif FILGAUCHE et APRES_MODIF) ##If COUZON="BPCORD" ## If CZ<>"" FILGAUSUP(0)+='&[F:SQD]BPCORD=CZ' Endif ##Else ## If [M]BPCORD<>"" FILGAUSUP(0)+='&[F:SQD]BPCORD=[M]BPCORD' Endif ##Endif If [M]BPCORD<>"" FILGAUSUP(0)+='&[F:SQD]BPCORD=[M]BPCORD' Endif Else ##VPO 05/05/09 51742 pb listes gauches et CZ (modif FILGAUCHE et APRES_MODIF) ##If COUZON="BPCORD" ## FILGAUSUP(0)+='&[F:SQD]BPCORD=CZ' ##Else ## FILGAUSUP(0)+='&[F:SQD]BPCORD=[M]BPCORD' ##Endif FILGAUSUP(0)+='&[F:SQD]BPCORD=[M]BPCORD' Endif # Si on ne gère pas les adresses de liv à la ligne, on filtre l'adresse de liv If GLINBPD=1 ##VPO 05/05/09 51742 pb listes gauches et CZ (modif FILGAUCHE et APRES_MODIF) ##If COUZON="BPAADD" ## If CZ <>"" FILGAUSUP(0)+='&([F:SQD]BPAADD="" | [F:SQD]BPAADD=CZ)' Endif ##Else ## If [M]BPAADD<>"" FILGAUSUP(0)+='&([F:SQD]BPAADD="" | [F:SQD]BPAADD=[M]BPAADD)' Endif ##Endif If [M]BPAADD<>"" FILGAUSUP(0)+='&([F:SQD]BPAADD="" | [F:SQD]BPAADD=[M]BPAADD)' Endif Endif # Ne pas filtrer sur le site expédition If [M]NBLIG <> 0 ##VPO 05/05/09 51742 pb listes gauches et CZ (modif FILGAUCHE et APRES_MODIF) ##If COUZON="PTE" ## If CZ<>"" FILGAUSUP(0)+='&([F:SQH]PTE="" | [F:SQH]PTE=CZ)' Endif ##Else ## If [M]PTE<>"" FILGAUSUP(0)+='&([F:SQH]PTE="" | [F:SQH]PTE=[M]PTE)' Endif ##Endif If [M]PTE<>"" FILGAUSUP(0)+='&([F:SQH]PTE="" | [F:SQH]PTE=[M]PTE)' Endif If func AFNC.ACTIV("LTA") & [F:CPY]SSTTAXACT = 2 : FILGAUSUP(0)+='&[F:SQH]SSTENTCOD=[M]SSTENTCOD' : Endif # LTA.n 79065 # 106867.n # If func AFNC.ACTIV("LTA") & GLOCUSATAX : FILGAUSUP(0)+='&[F:SQH]SSTENTCOD=[M]SSTENTCOD' : Endif # LTA.n 79065 # 106867.o Endif # Le devis doit être valide FILGAUSUP(1) = '&([F:SQH]VLYDAT=[0/0/0] | [F:SQH]VLYDAT >= date$)' # Le devis ne doit pas être transformées FILGAUSUP(1) += '& [F:SQH]QUOSTA <> 3' # Le devis doit être signé FILGAUSUP(1) += '& [F:SQH]APPFLG > 2' # Issue 110706 ## Les Lignes ne doivent pas être des composants #FILGAUSUP(1) += '&(find([F:SQD]LINTYP,1,2,6,10))' # Les Lignes ne doivent pas être des composants kit/sous-traité FILGAUSUP(1) += '& !find([F:SQD]LINTYP,3,4,5,11,12,13)' # End issue 110706 # Issue 120966 # Free product have to be con,siderated ## Les Lignes ne doivent pas être des gratuits liés à une ligne (on prend les gratuits de groupé) ##FILGAUSUP(1) += '& [F:SQD]FOCFLG<>3' #FILGAUSUP(1) += '& [F:SQD]ORILIN=0' # End issue 120966 If [M]NBLIG <> 0 ##VPO 05/05/09 51742 pb listes gauches et CZ (modif FILGAUCHE et APRES_MODIF) ##If COUZON="PRITYP" # If CZ<>"" FILGAUSUP(1)+='&[F:SQH]PRITYP=val(CZ)' Endif ## If val(CZ)<>0 FILGAUSUP(1)+='&[F:SQH]PRITYP=val(CZ)' Endif ##Else ## If [M]PRITYP<>0 FILGAUSUP(1)+='&[F:SQH]PRITYP=[M]PRITYP' Endif ##Endif If [M]PRITYP<>0 FILGAUSUP(1)+='&[F:SQH]PRITYP=[M]PRITYP' Endif ##VPO 05/05/09 51742 pb listes gauches et CZ (modif FILGAUCHE et APRES_MODIF) ##If COUZON="VACBPR" ## If CZ<>"" FILGAUSUP(1)+='&[F:SQH]VACBPR=CZ' Endif ##Else ## If [M]VACBPR<>"" FILGAUSUP(1)+='&[F:SQH]VACBPR=[M]VACBPR' Endif ##Endif If [M]VACBPR<>"" FILGAUSUP(1)+='&[F:SQH]VACBPR=[M]VACBPR' Endif Endif If [M]NBLIG > 0 | ([M]NBLIG = 0 & [M]PJT <> "") # FGR 01/12/2011 : X3SUIVI71065 (début) If GPJTSNGDOC = G_OUI Then FILGAUSUP(1)+='&[F:SQH]PJT=[M]PJT' Endif # FGR 01/12/2011 : X3SUIVI71065 (fin) Endif # FGR 23/02/2015 : X3SUIVI104383 (début) FILGAUSUP(2) = "& ([F:SQH]SOHTYP = '' or [F:SQH]SOHTYP = [M:SOH0]SOHTYP)" # FGR 23/02/2015 : X3SUIVI104383 (fin) # X3-65724 (LC-14/02/18) Filter in left picking list and row permission #GBIDC3="" : Call FILROLE("SQH",GBIDC3) From SUBARL #If GBIDC3<>"" FILGAUSUP(3)= "& " + GBIDC3 : Endif # Raz FILSUITE,IFILSUITE # X3-88182 (LCC-06/08/18) Pagination on invoice picking list Call AJOUTE_CONDITION_ROLE(FILSUITE,IFILSUITE,"SQH") From CRMUTIL150 # END X3-65724 (LC-14/02/18) Filter in left picking list and row permission Return ########################################################################## $AP_FILGAUCHE If currbox = GBOXSQ1 WPICK=2 : Gosub RAFFRAICHI Endif Return ########################################################################## $DEB_PICK Local Integer I, J, WOK, SVGSTODIS, FUNCTION, NOL Local Decimal WQTY, WQTYSTU, WSTUDIS, WQTYPCE, WALLQTYPCE Local Char SYMBOLE2(50) FUNCTION = 2 : # Identifiant commande pour TRTVENBOM Return ######################################################################### $PICKE If REP="" If !CLECUR | !VERROU | !ACTMOD | GCONSULT OK=0 Return Endif Endif Case currbox When GBOXSQ1 : Gosub SEL # If [M]NBLIG=0 # Actzo [M:SOH0]SOHTYP # Actzo [M:SOH0]SALFCY # Actzo [M:SOH0]BPCORD # Actzo [M:SOH2]STOFCY # If GUPDCUR=2 Actzo [M:SOH1]CUR Endif # If GNOTATI=2 Actzo [M:SOH1]PRITYP Endif # Else # Diszo [M:SOH0]SOHTYP # Diszo [M:SOH0]SALFCY # Diszo [M:SOH0]BPCORD # If [M:SOH2]DME = 3 # Diszo [M:SOH2]STOFCY # Else # Actzo [M:SOH2]STOFCY # Endif # Diszo [M:SOH1]CUR, PRITYP # Endif When Default Endcase Return ######################################################################### $DEPICK Case currbox When GBOXSQ1 : Gosub DESEL Gosub SQH_MOINS From SUBSFIT #If GERR <> 0 Then # FGR 19/08/2014 : X3SUIVI100811 If GERR = 1 Then # FGR 22/06/2015 : X3SUIVI109023 Return Endif # If [M]NBLIG=0 # Actzo [M:SOH0]SOHTYP # Actzo [M:SOH0]SALFCY # Actzo [M:SOH0]BPCORD # Actzo [M:SOH2]STOFCY # If GUPDCUR=2 Actzo [M:SOH1]CUR Endif # If GNOTATI=2 Actzo [M:SOH1]PRITYP Endif # Else # Diszo [M:SOH0]SOHTYP # Diszo [M:SOH0]SALFCY # Diszo [M:SOH0]BPCORD # If [M:SOH2]DME = 3 # Diszo [M:SOH2]STOFCY # Else # Actzo [M:SOH2]STOFCY # Endif # Diszo [M:SOH1]CUR, PRITYP # Endif When Default Endcase Return ######################################################################### $FIN_PICK Call PJT_INFO_MSG() From TRTPJT # FGR 15/12/2011 : X3SUIVI71065 Call SQH_SOH_CALCUL From SUBSFIT # 101874 : V9 : Taxe code control # Valuation depends on SOHVALLIG parameter #If dim(GVALTTCSOH)>0 & dim(GVALTTC)>0 : GVALTTC=GVALTTCSOH : Endif #Call VALTTC ("GESSOH") From TRTVENFACR GVALTTC=GSOHVALLIG #If !GIMPORT : Call VALTTC ("GESSOH") From TRTVENFACR : Endif #---- Paramètres complementaires appel valorisation # PARAM_T(0) : Flag contrôle des taxes (1=Non/2=Oui) # PARAM_T(1) : Lecture de la trace par le sous-pro (1=Non/2=Oui) # PARAM_T(2) : Flag retour (1=KO/2=OK) Local Char PARAM_T (25) (0..10) PARAM_T(0)="1" : # Pas de contrôle des taxes PARAM_T(1)="1" : # Pas de lecture de la trace PARAM_T(2)="0" Call VALTTC ("GESSOH", PARAM_T) From TRTVENFACR If PARAM_T(2)="1" GERR=1 : OK=0 : Endif # 101874 If REP="" If !VERROU GMESSAGE=mess(10,100,1) : GERR=1 : OK=0 : Return Elsif !CLECUR | !ACTMOD | GCONSULT GMESSAGE=mess(9,123,1) : GERR=1 : OK=0 : Return Endif Endif # ACA (2009-09-22) Lot S03 : chargement des sections des elts de fac des documents origine # 81878 : Ajout borne pour ne pas trier le tableau complet #Sorta [M:SFIT]NBTRF Order By [M:SFIT]DAC([S]indice) Sorta [M:SFIT]NBTRF [M:SFIT]NBTRF Order By [M:SFIT]DAC([S]indice) # 81878 Call CHARG_CCE_MULTI(1,"[M:SFIT]VCRENT","[M:SFIT]DTA","[M:SIHV]XFNUM","[M:SIHV]SFICCE","[M:SIHV]DSP") From TRTX3CPT Case currbox When GBOXSQ1 : # Recherche du no devis origine de la commande For I=0 To [M:SOH4]NBLIG-1 If [M:SOH4]DETSQHNUM(I)<>"" If [M:SOH3]SQHNUM="" [M:SOH3]SQHNUM=[M:SOH4]DETSQHNUM(I) Elsif [M:SOH3]SQHNUM<>[M:SOH4]DETSQHNUM(I) Raz [M:SOH3]SQHNUM Break Endif Endif Next I Affzo [M:SOH0]1-99 Affzo [M:SOH1]1-99 Affzo [M:SOH2]1-99 Affzo [M:SOH3]1-99 Affzo [M:SOH4]1-99 If [M]NBLIG=0 Actzo [M:SOH0]SOHTYP Actzo [M:SOH0]SALFCY Actzo [M:SOH0]BPCORD Actzo [M:SOH2]STOFCY If GUPDCUR=2 Actzo [M:SOH1]CUR Endif If GNOTATI=2 Actzo [M:SOH1]PRITYP Endif Else Diszo [M:SOH0]SOHTYP Diszo [M:SOH0]SALFCY Diszo [M:SOH0]BPCORD If [M:SOH2]DME = 3 Diszo [M:SOH2]STOFCY Else Actzo [M:SOH2]STOFCY Endif Diszo [M:SOH1]CUR, PRITYP Endif zonsui = "[M:SOH4]NBLIG("+num$(NOL)+")" When Default Endcase Return ######################################################################### # Etiquettes de traitement # ######################################################################### $REMPBOX #-----------------------------------------------------------------------# # Remplissage des boites de picking # #-----------------------------------------------------------------------# ILIS=val(right$(currbox,8)) Gosub REMP_LISGAU From GOBJSUB #Case currbox # When GBOXSQ1 : Gosub FILGAUCHE # IBOX=val(right$(GBOXSQ1,8)) # Gosub REMPLIT # When Default #Endcase Return ######################################################################### #$REMPLIT #Case IBOX # When 1 : Gosub REMPLIT_1 From GESSOH # When 2 : Gosub REMPLIT_2 From GESSOH # When 3 : Gosub REMPLIT_3 From GESSOH # When 4 : Gosub REMPLIT_4 From GESSOH # When 5 : Gosub REMPLIT_5 From GESSOH # When 6 : Gosub REMPLIT_6 From GESSOH # When 7 : Gosub REMPLIT_7 From GESSOH # When 8 : Gosub REMPLIT_8 From GESSOH # When Default #Endcase #Return ######################################################################### $SEL #-----------------------------------------------------------------------# # Sélection d'une ligne de devis # #-----------------------------------------------------------------------# Local Integer WORI, WORILIN Local Char SWMESS(80) # FGR 14/12/2011 : X3SUIVI71065 # Issue X3-225092 - 2020-12-10 by SR : No picking if order generated on another site If [M:SOH0]ORIFCY<>"" & [M:SOH0]ORIFCY<>[M:SOH0]SALFCY GMESSAGE = mess(122,199,1)-":"-mess(862,196,1) : OK = 0 : Return Endif # End issue X3-225092 #--- Lecture des tables [SOQ],[SOH] # Est-ce vraiement utile Read [SQD]SQD0=[F:SQD]SQHNUM;[F:SQD]SQDLIN If fstat Call RSTA ("SQD",[F:SQD]SQHNUM-num$([F:SQD]SQDLIN)) From GLOCK : OK=0 : Return Endif # Vérif. si la ligne n'a pas été transformée depuis le dernier raffraichissement de la liste de picking If [F:SQD]ORDQTY >= [F:SQD]QTY GMESSAGE = [F:SQD]SQHNUM-":"-mess(27,159,1)-[F:SQD]ITMREF-":"-mess(246,192,1) : OK=0 : Return Endif Read [SQH]SQH0=[F:SQD]SQHNUM If fstat Call RSTA ("SQH",[F:SQH]SQHNUM) From GLOCK : OK=0 : Return Endif # Issue X3-140596 - 2019-07-01 by ANKUL -> Block the conversion of unsigned documents - GESSQH If func AFNC.ACTIV("KPO")> 0 and func PORLEGLIB.PORLEG([F:SQH]SALFCY,"") =1 and func PORLEGLIB.DIGSIGN([F:SQH]SALFCY, "") If [F:SQH]SQHCFMFLG <> 2 GMESSAGE = func AFNC.MES1(mess(297,7711,1), [F:SQH]SQHNUM) OK=0 : Return Endif Endif # Issue X3-140596 end #--- Alimentation flag inter-site et inter-société Call ALIBETCPY(2,[F:SQH]SALFCY,[F:SQH]BPCORD,[F:SQH]BPAADD,[M:SOH0]POHFCY,[M:SOH0]BPSNUM,[M:SOH1]BETFCY,[M:SOH1]BETCPY) From TRTVENISOC # --> Refuser les commandes à facturation directe si commande intra-société If [M:SOH0]SOHCAT=3 & [M:SOH1]BETFCY=2 & [M:SOH1]BETCPY<=1 OK=0: GERR=1 : GMESSAGE=mess(256,192,1): Return : Endif # --> Commande inter-site : # Le client commande est aussi le fsseur (correspond au site de vente) If [M:SOH1]BETFCY=2 & [F:SQH]BPCORD=[M:SOH0]BPSNUM Local Integer WOK : WOK=1 Call AVERTIR (mess(151,191,1), WOK)From GESECRAN If WOK=1 GERR=1 : OK=0 : Return : Endif Endif # --- Controler que le client n'est pas prospect If [F:BPC]BPCNUM <> [F:SQH]BPCORD Read [BPC]BPC0=[F:SQH]BPCORD If fstat Raz [F:BPC] Endif Endif If [F:BPC]BPCTYP = 4 GMESSAGE=[F:SQH]SQHNUM-"-"-[F:SQH]BPCORD-mess(113,191,1)-"\"-mess(115,191,1) GORITRFBPP=[F:SQH]SQHNUM OK=0 : GERR=1 SUIZON="BPCORD" Return Endif #-- Jde 2011-06-23 X3Suivi 74109 : Contrôler que le client n'est inactif ou bloqué # If [F:BPC]BPCSTA<>2 OK=0 : GERR=1 GMESSAGE=[F:SQH]SQHNUM-[F:SQH]BPCORD+"\"+mess(4,119,1) : # Client inactif SUIZON="BPCORD" Return Endif # ------------------------------------- # FGR 16/01/2015 : X3SUIVI88435 (début) If [M:SOH0]SOHCAT = 2 Then Call C_BPCORD([F:SQH]BPCORD) From TRTVENCDE If mkstat = 2 Then OK = 0 GERR = 1 GMESSAGE -= "(" + mess(12,159,1) - ":" - [F:SQH]BPCORD + ")" SUIZON = "BPCORD" Return Endif # --------------------------------- Local Integer WLND Local Integer WBETFCY WLND = [F:TSO]SOHCAT WBETFCY = [M:SOH1]BETFCY Gosub CTR_LNDBETFCY From SUBSOHB If mkstat = 2 Then OK = 0 GERR = 1 GMESSAGE -= "(" + mess(12,159,1) - ":" - [F:SQH]BPCORD + ")" SUIZON = "BPCORD" Return Endif # --------------------------------- Local Char WSTOFCY(GLONFCY) If [F:BPD]BPCNUM <> [F:SQH]BPCORD or [F:BPD]BPAADD <> [F:SQD]BPAADD Then Read [BPD]BPD0=[F:SQH]BPCORD;[F:SQD]BPAADD If fstat Then Raz [F:BPD] : Endif Endif If [F:BPD]STOFCY <> "" Then WSTOFCY = [F:BPD]STOFCY Else WSTOFCY = GFCYDEF(7) Endif # Gosub CTR_LOC From SUBSOHB If mkstat = 2 Then OK = 0 GERR = 1 GMESSAGE -= "(" + mess(12,159,1) - ":" - [F:SQH]BPCORD - "-" - [F:SQD]BPAADD + ")" SUIZON = "BPCORD" Return Endif Endif # FGR 16/01/2015 : X3SUIVI88435 (fin) # ------------------------------------- #-- Jde X3Suivi 81719 --# #If [F:BPC]OSTCTL=3 # OK=0 : GERR=1 # GMESSAGE=[F:SQH]SQHNUM-[F:SQH]BPCORD+"\"+mess(2,178,1) : # Client bloqué # SUIZON="BPCORD" # Return # Endif # --- Contrôle que l'adresse de livraison est bien référencée chez le client : Cas où prospect transformé en client # --- Si on ne vient pas du picking devis, on créé uniquement l'adresse de livraison liée à l'adresse par défaut If [F:SQD]BPAADD <> "" Read [BPD]BPD0 = [F:SQD]BPCORD;[F:SQD]BPAADD If fstat GMESSAGE=mess(42,191,1)-":"-[F:SQD]BPCORD-[F:SQD]BPAADD-":"-mess(300,192,1)-"\"-mess(301,192,1) : OK=0 : GERR=1 : Return Elsif [F:BPD]ENAFLG<>2 GMESSAGE=mess(42,191,1)-":"-[F:SQD]BPCORD-[F:SQD]BPAADD-":"-mess(2,126,1) : OK=0 : GERR=1 : Return Endif # Issue X3-113087 - 2019-03-18 by SR : no Ship to customer address in the Quote line : Is a ship to customer address exist ? Else Raz GERR OK = 1 Filter [F:BPD] Where BPCNUM = [F:SQD]BPCORD & ENAFLG = 2 Read [F:BPD]BPD0 First If fstat # No Ship To Customer address : Error message and no creation of Sales Order document GMESSAGE = mess(42,191,1)-":"-[F:SQD]BPCORD -":"- mess(154,192,1) OK = 0 GERR=1 Endif Filter [F:BPD] If OK = 0 : Return : Endif # End issue X3-113087 Endif Raz GORITRFBPP #--- Contrôle de la devise OK=1 Local Char WNEWCUR : WNEWCUR=[F:SQH]CUR If [F:SQH]CUR <> GEURO & ([M:SOH0]CUR = GEURO | [M]NBLIG = 0) If !find([F:SQH]SQHNUM, [M]DETSQHNUM(0..[M]NBLIG-1)) Local Char WDEVISE : Local Date WDAT : Local Integer WOK WDEVISE=[F:SQH]CUR:WDAT=[M:SOH0]ORDDAT Gosub CTLDEVISEIN From CONTX3 If WOK <> 0 Case WOK When 1 : GMESSAGE=mess(95,107,1) : # Attention saisie en devise "in" OK=2: Call OUINON(GMESSAGE-"\"-mess(458,196,1),OK) From GESECRAN When 2 : GMESSAGE=mess(94,107,1) : # La devise est "in" interdite OK=2: Call AVERTIR(GMESSAGE-"\"-mess(458,196,1),OK) From GESECRAN When 3 : # La devise est "in" et disparue GMESSAGE=[F:SQH]CUR-":"-mess(457,196,1)-format$("D:"+GFMDAT4,[F:TCU]CURENDDAT) OK=2: Call AVERTIR(GMESSAGE-"\"-mess(458,196,1),OK) From GESECRAN Endcase If OK=2 WNEWCUR=GEURO Endif If OK=1 & WOK > 1 OK=0 : Return : Endif OK=2 Endif Default File [SOH] Else # On a déjà pické des lignes sur ce devis WNEWCUR=[M:SOH0]CUR Endif Endif # Devises différentes attention If OK <> 2 & [M]NBLIG=0 & [M:SOH0]CUR <> "" & WNEWCUR <> [M:SOH0]CUR OK=2:GMESSAGE=[F:SQH]SQHNUM-mess(27,159,1)-[F:SQD]ITMREF+"\"+mess(228,192,1)+"\"+mess(205,100,1) Call AVERTIR(GMESSAGE, OK) From GESECRAN If OK=1 OK=0 : Return : Endif Endif #--- Alimentation des paramètres If [M:SOH0]SALFCY = "" ## alim. GSOCIETE,GFINRSP,GLOCALDEV #Call GETDEV([F:SQH]SALFCY) From DEVSUB If GFCY<>[F:SQH]SALFCY # Chargement globales référenciels, comptes et sections de la société GFCY=[F:SQH]SALFCY : Gosub CHARG_PARAM From SUBSOHA Endif # alim. gest avance(GEARMGT), acompte non versé(GLOKORD), ctl en-cours(GOSTCTL) Call GLOBVAR([F:SQH]SALFCY,"VEN") From TRTX3 Endif #--- Lecture des tables articles Gosub LEC_TABART Local Integer RET #--- Controler que l'article-site existe If [F:ITM]STOMGTCOD <> 1 Call CONTITF([F:SQD]ITMREF, [F:SQD]STOFCY, [F:ITM]STOMGTCOD) From TRTVENCTL If mkstat=2 GERR=1:GMESSAGE=[F:SQH]SQHNUM-mess(27,159,1)-[F:SQD]ITMREF-mess(25,192,1)-[F:SQD]STOFCY OK=0: Return Endif # Si commande inter-site, vérifier que l'article-site de réception existe If [M:SOH1]BETFCY=2 & [M:SOH0]SOHCAT<>3 & [F:ITM]RCPFLG=2 If [F:BPD]BPCNUM<>[F:SQH]BPCORD | [F:BPD]BPAADD<>[F:SQD]BPAADD Read [BPD]BPD0=[F:SQH]BPCORD;[F:SQD]BPAADD If fstat Raz [F:BPD] Endif Endif If [F:BPD]RCPFCY<>"" Call CONTITF([F:SQD]ITMREF, [F:BPD]RCPFCY, [F:ITM]STOMGTCOD) From TRTVENCTL If mkstat=2 GERR=1:GMESSAGE=mess(74,187,1)-":"-[F:SQD]ITMREF-mess(293,192,1)-[F:BPD]RCPFCY OK=0: Return Endif Endif Endif # Si commande à facturation directe inter-site, l'article ne doit pas être réceptionné # Issue 113089/130 - 2016-10-14 by SR : Message 269,194 remplacé par 578,194 If [M:SOH0]SOHCAT=3 & [M:SOH1]BETFCY=2 If [F:ITM]RCPFLG=2 GERR=1: GMESSAGE=[F:SQD]ITMREF-":"-mess(98,197,1)-mess(3,446,1)-mess(578,194,1) : OK=0 : Return Endif Endif Endif # ------------------------------------- # FGR 16/01/2015 : X3SUIVI88435 (début) # --> Etape n°5 : Si cde de prêt, l'article doit etre géré en pret If [M:SOH0]SOHCAT = 2 Then If [F:ITF]ITMREF <> [F:SQD]ITMREF Then # FGR 10/02/2015 : X3SUIVI106129 slt si nécessaire Read [ITS]ITS0=[F:SQD]ITMREF If fstat Then Raz [F:ITS] : Endif Endif If [F:ITS]LNDFLG = 1 GMESSAGE=mess(34,192,1) - "(" + mess(28,159,1) - ":" - [F:SQD]ITMREF + ")" OK=0 Return Endif # --> Etape n°5 : Si cde de prêt et article géré en stock, il doit être géré en emplacement If [F:ITM]STOMGTCOD <> 1 #If [F:ITF]ITMREF <> [F:SQD]ITMREF | [F:ITF]STOFCY <> [M:SOH4]DSTOFCY(NOL) # FGR 10/02/2015 : X3SUIVI106129 # Read [ITF]ITF0=[F:ITM]ITMREF;[M:SOH4]DSTOFCY(NOL) # FGR 10/02/2015 : X3SUIVI106129 If [F:ITF]ITMREF <> [F:SQD]ITMREF | [F:ITF]STOFCY <> [F:SQD]STOFCY # FGR 10/02/2015 : X3SUIVI106129 Read [ITF]ITF0=[F:ITM]ITMREF;[F:SQD]STOFCY # FGR 10/02/2015 : X3SUIVI106129 If fstat Raz [F:ITF] : Endif Endif If [F:ITF]STOMGTCOD>1 & [F:ITF]LOCMGTCOD <> 2 GMESSAGE = mess(119,192,1) - "(" + mess(27,159,1) - ":" - [F:SQD]ITMREF + ")" OK=0 Return Endif Endif Endif # FGR 16/01/2015 : X3SUIVI88435 (fin) # ------------------------------------- # Qté commandée = qté restant à commandée Local Decimal WCOEF WQTY = [F:SQD]QTY - [F:SQD]ORDQTY #---------------------------------------------------------------------# # Point d'entree modification de la quantité commandée # #---------------------------------------------------------------------# Local Integer WPE_OK : WPE_OK=1 GPOINT="MODSOQQTY" : Gosub ENTREE From EXEFNC If WPE_OK=0 : OK=0 : Return Endif #--- Appel au traitement de contrôle de la sélection # C'est le 1ér devis de la commande If [M:SOH4]NBLIG <> 0 #CPO 62810 - pb découvert lors du ttt de cette fiche (en fait correction comme le 68235) #If sum([M:SOH4]DETSQHNUM(0..[M:SOH4]NBLIG-1)) = "" If sigma(0,[M:SOH4]NBLIG-1,[M:SOH4]DETSQHNUM(indcum)) = "" YSQHNUM = [F:SQH]SQHNUM Endif Endif # C'est la première ligne de la commande If [M]NBLIG = 0 & find(GREP, "C", "D") # Issue X3-160406 - 2019-10-11 by SR : If BPCORD not already loaded If [M:SOH0]BPCORD = "" Local Shortint RES : Raz RES Call CTLBPCSTA([F:SQH]BPCORD,1,RES) From TRTVENCTL If RES = 1 : GERR=1 : OK=0 : Return : Endif Endif # End issue X3-160406 # Alimentation des masques (entête) Call ALISQHSOH(WNEWCUR) From TRTVENCDE YSQHNUM = [F:SQH]SQHNUM # X3-66571 (LCC 19-02-18) Message of warning missing If [M:SOH0]CUSORDREF<>"" & GFONC1<>"GESSQH" If !clalev([SOH]): Local File SORDER: Endif Look [SOH]SOH1=[M:SOH0]BPCORD;[M:SOH0]CUSORDREF If !fstat Local Integer WOK : WOK=2 Call AVERTIR (mess(80,191,1), WOK) From GESECRAN If WOK=1 : GERR=1 : OK = 0: Return : Endif Endif Endif # End X3-66571 (LCC 19-02-18) Message of warning missing Else # Contrôle des conditions des regroupement Gosub CTL_DEVIS If OK=0 Return Endif Endif # Contrôle de l'insertion If [M:SOH4]NBLIG+1 >= dim([M:SOH4]ITMREF)-1 GERR=1 : GMESSAGE=mess(122,199,1) OK=0 : Return Endif SYMBOLE2 = "SQH"+[F:SQH]SQHNUM Lock = SYMBOLE2 If fstat # modification en cours sur un autre poste GERR=1 : GMESSAGE=[F:SQH]SQHNUM-":"-mess(10,100,1) OK=0 : Return Endif # FGR 24/11/2011 : X3SUIVI71065 : (début) If func TRTPJT.IS_PJT_AVAILABLE([F:SQD]PJT, "[M:SOH4]DPJT", SWMESS) = G_NON Then Call PJT_ADD_MSG([F:SQD]PJT, SWMESS) From TRTPJT GERR = 1 OK = 0 Return Endif # FGR 24/11/2011 : X3SUIVI71065 : (fin) #--- La sélection est correcte # Ouverture de la ligne nolign = [M:SOH4]NBLIG Insa nolign,1,[M:SOH4]NBLIG [M:SOH4]NBLIG [M:SOH4]NBLIG += 1 nolign = [M:SOH4]NBLIG NOL = nolign-1 status = 0 # Alimentation de la classe [M:SOH4] de la ligne Call ALISQDSOH(NOL,WQTY) From TRTVENCDE If GERR=1 OK=0 : Return Endif Call LINNUM("SOPLIN") From TABLEAUX Gosub SQH_SOH_PLUS From SUBSFIT #If GERR <> 0 Then # FGR 19/08/2014 : X3SUIVI100811 If GERR = 1 Then # FGR 22/06/2015 : X3SUIVI109023 OK = 0 Return Endif # --- Si Initialisation de la qté à allouer, Dde d'utilisation des réservations clients If [M]WALLQTY(NOL)>0 & GUSERERBPC=3 [M]RERBPCFLG(NOL)=1 Local Char WVCRRER Local Decimal WALLCLI WVCRRER= vireblc(format$("K:"+num$(GLONBPC)+"X",[M]BPCORD)+format$("K:"+num$(GLONBPD)+"X",[M]DBPAADD(NOL)), 1) #--- Bug 65986 #Call CAL_RERQTY(1,[M]ITMREF(NOL),[M]DSTOFCY(NOL),WVCRRER,WALLCLI) From STKALL Call CAL_RERQTY(1,[M]ITMREF(NOL),[M]DSTOFCY(NOL),WVCRRER,[M]DSHIDAT(NOL),WALLCLI) From STKALL #--- If WALLCLI <> 0 GMESSAGE = mess(207,191,1)-":"-num$([M]WALLQTY(NOL))-[M]SAU(NOL)-"\"-mess(131,191,1)-num$(WALLCLI)-[M]STU(NOL) OK=2 : Call OUINON (GMESSAGE-"\"-mess(130,191,1),OK) From GESECRAN If OK = 2 [M]RERBPCFLG(NOL)=2 : Endif Endif Endif # Conversion des montants si nécessaire If [F:SQH]CUR <> [M:SOH1]CUR Local Char WANCCUR : WANCCUR=[F:SQH]CUR Local Decimal MNTORI, MNTDES Local Integer I, SPSTAT Call CONVERT2(WANCCUR, [M:SOH1]CUR, GLOCALDEV, [M]CHGTYP, date$, [M]GROPRI(NOL), MNTDES, SPSTAT) From TRTDEV [M]GROPRI(NOL) = arr(MNTDES, 10^-GDECPRI) For I = 1 To 9 If evalue ("dim([m:soh4]discrgval"+num$(I)+"(nol))")>0 If GFMTREM(I-1)="M" MNTORI = evalue("[m:soh4]discrgval"+num$(I)+"(NOL)") Call CONVERT(WANCCUR, [M:SOH1]CUR, GLOCALDEV, [M]CHGTYP, date$, MNTORI, MNTDES, SPSTAT) From TRTDEV Assign "[m:soh4]discrgval"+num$(I)+"(NOL)" With MNTDES Endif Endif Next Call CONVERT2(WANCCUR, [M:SOH1]CUR, GLOCALDEV, [M]CHGTYP, date$, [M]CPRPRI(NOL), MNTDES, SPSTAT) From TRTDEV [M]CPRPRI(NOL) = arr(MNTDES, 10^-GDECPRI) Endif # Calculs prix net, marge et maj montants livrés et poids GNETMAR=0 Call ALICLCAMT([M:SOH4]ITMREF(NOL), [M:SOH4]QTY(NOL), NOL, "SOH4", [M:SOH4]CLCAMT1(NOL), [M:SOH4]CLCAMT2(NOL)) From TRTX3 Call CLCNETPRI([M:SOH4]QTY(NOL),[M:SOH1]CUR, NOL)From TRTVENPRI Call CLCPFM([M:SOH4]DSTOFCY(NOL),[M:SOH1]PRITYP,[M:SOH0]CHGTYP,[M:SOH0]ORDDAT,[M:SOH1]CUR,NOL,1) From TRTVENPRI #--CPO 83036 suite à la correction 79343 j'ai dupliqué l'appel à APRES_LIGNE ! #Call APRES_LIGNE(NOL,0) From SUBSOHB #--/CPO #--CPO 79343 Pb identifié lors du ttt de cette fiche #--Avant appel APRES_LIGNE il faut positionner le GMODIF sinon on se retrouve avec des #--valeurs qui viennent des actions faites avant le pick #--(exp si suppr ligne GMODIF=1, si création GMODIF=2 et si modif ligne GMODIF=0) GMODIF=2 :#--CPO 79343 Ne pas oublier de le RAZ en fin de $SEL ! Call APRES_LIGNE(NOL,0) From SUBSOHB #--CPO 79343 If GREP<>"C" and GSOHSUPPLIGDSP<>999999 Local Integer WTEMPDSP : Raz WTEMPDSP Call CTLSUPP_EXISTDSP("SOH",NOL,WTEMPDSP) From TRTVENDIV If WTEMPDSP=1 GSOHSUPPLIGDSP +=1 Endif Endif #--/CPO GNETMAR=1 nolign = NOL+1 # A vérifier # Sauvegarde qté devis et qté à commandée du composé WDEVQTYCPE = [F:SQD]QTY # qté commandée WORDQTY = WQTY # Si composé de kit WORI=NOL WORILIN = [F:SQD]SQDLIN # Issue 110706 #If find([M:SOH4]LINTYP(NOL),2,6,10) If find([M:SOH4]LINTYP(NOL),2,10) # End issue 110706 If !clalev([F:SQD1]) Local File SQUOTED [SQD1] Endif Filter [SQD1] Where SQHNUM = [F:SQD]SQHNUM & SQDLIN > [F:SQD]SQDLIN For [SQD1] If ([M:SOH4]LINTYP(WORI)=2 & find([F:SQD1]LINTYP,3,4,5)) | & ([M:SOH4]LINTYP(WORI)=10 & find([F:SQD1]LINTYP,11,12,13)) # Issue 110706 #& ([M:SOH4]LINTYP(WORI)=6 & find([F:SQD1]LINTYP,7,8,9)) | # End issue 110706 [F:SQD] = [F:SQD1] # Lecture des tables articles Gosub LEC_TABART # Contrôle de l'insertion If [M:SOH4]NBLIG+1 >= dim([M:SOH4]ITMREF)-1 GERR=1 : GMESSAGE=mess(122,199,1) # FGR 22/06/2015 : X3SUIVI109023 pas GERR=2 Break Endif Gosub SQH_SOH_PLUS From SUBSFIT #If GERR <> 0 Then # FGR 19/08/2014 : X3SUIVI100811 If GERR = 1 Then # FGR 22/06/2015 : X3SUIVI109023 OK = 0 Break Endif # Ouverture de la ligne Insa nolign,1,[M:SOH4]NBLIG [M:SOH4]NBLIG [M:SOH4]NBLIG += 1 nolign = [M:SOH4]NBLIG NOL = nolign-1 status = 0 # Calcul de la quantité commandée du composant WQTY = (WORDQTY * [F:SQD]QTY) / WDEVQTYCPE # Alimentation de la classe [M:SOH4] de la ligne Call ALISQDSOH(NOL,WQTY) From TRTVENCDE Call LINNUM("SOPLIN") From TABLEAUX # Conversion des montants si nécessaire If [F:SQH]CUR <> [M:SOH1]CUR Local Char WANCCUR : WANCCUR=[F:SQH]CUR Local Decimal MNTORI, MNTDES Local Integer I, SPSTAT Call CONVERT2(WANCCUR, [M:SOH1]CUR, GLOCALDEV, [M]CHGTYP, date$, [M]GROPRI(NOL), MNTDES, SPSTAT) From TRTDEV [M]GROPRI(NOL) = arr(MNTDES, 10^-GDECPRI) For I = 1 To 9 If evalue ("dim([m:soh4]discrgval"+num$(I)+"(nol))")>0 If GFMTREM(I-1)="M" MNTORI = evalue("[m:soh4]discrgval"+num$(I)+"(NOL)") Call CONVERT(WANCCUR, [M:SOH1]CUR, GLOCALDEV, [M]CHGTYP, date$, MNTORI, MNTDES, SPSTAT) From TRTDEV Assign "[m:soh4]discrgval"+num$(I)+"(NOL)" With MNTDES Endif Endif Next Call CONVERT2(WANCCUR, [M:SOH1]CUR, GLOCALDEV, [M]CHGTYP, date$, [M]CPRPRI(NOL), MNTDES, SPSTAT) From TRTDEV [M]CPRPRI(NOL) = arr(MNTDES, 10^-GDECPRI) Endif # Calculs prix net, marge et maj montants livrés et poids GNETMAR=0 Call ALICLCAMT([M:SOH4]ITMREF(NOL), [M:SOH4]QTY(NOL), NOL, "SOH4", [M:SOH4]CLCAMT1(NOL), [M:SOH4]CLCAMT2(NOL)) From TRTX3 Call CLCNETPRI([M:SOH4]QTY(NOL),[M:SOH1]CUR, NOL)From TRTVENPRI Call CLCPFM([M:SOH4]DSTOFCY(NOL),[M:SOH1]PRITYP,[M:SOH0]CHGTYP,[M:SOH0]ORDDAT,[M:SOH1]CUR,NOL,1) From TRTVENPRI Call APRES_LIGNE(NOL,0) From SUBSOHB GNETMAR=1 nolign = NOL+1 Else Break Endif Next Filter [SQD1] Close Local File [SQD1] Default File [SOH] # Bug 62932 : Si kit géré en ctm directe, ts les composants doivent être gérés en ctm directe If [M:SOH4]LINTYP(WORI)=2 & [M:SOH4]FMI(WORI)=2 Local Integer WFMICPE : WFMICPE = [M]FMI(WORI) # Vérif que ts les composants sont gérés en ctm (FMI=2 ou 3) Local Integer ORI : ORI=WORI Gosub VERIF_KIT_CTM From TRTVENBOM If WFMICPE=2 # Ts les composants sont gérés en ctm (FMI=2 ou 3), on force la ctm directe FMI=2 pour ts les composants : # Kit et composants sont gérés en ctm directe Gosub MOD_KIT_CTM From TRTVENBOM Else # Ts les composants ne sont pas gérés en ctm (FMI=2 ou 3), on force la ctm receptionnée FMI=3 pour le composé : # Le Kit est géré en ctm receptionnée, les composants sont gérés sur stock [M]FMI(WORI)=3 [M:SOH4]STOMGTCOD(WORI)=[M:SOH4]YSTOMGTCOD(WORI) Endif Endif # Bug 62932 Endif # Issue 120966 ## Free product are not automatically generated with the parent product ## Si origine gratuit #If [M:SOH4]FOCFLG(WORI)=2 # WORI=NOL # If !clalev([F:SQD1]) Local File SQUOTED [SQD1] Endif # Filter [SQD1] Where SQHNUM=[F:SQD]SQHNUM & SQDLIN>[F:SQD]SQDLIN & ORDFLG<>2 & FOCFLG=3 & ORILIN=WORILIN # For [SQD1] # [F:SQD] = [F:SQD1] # # Lecture des tables articles # Gosub LEC_TABART # # Contrôle de l'insertion # If [M:SOH4]NBLIG+1 >= dim([M:SOH4]ITMREF)-1 # GERR=1 : GMESSAGE=mess(122,199,1) # FGR 22/06/2015 : X3SUIVI109023 pas GERR=2 # Break # Endif # # Gosub SQH_SOH_PLUS From SUBSFIT # #If GERR <> 0 Then # FGR 19/08/2014 : X3SUIVI100811 # If GERR = 1 Then # FGR 22/06/2015 : X3SUIVI109023 # Break # Endif # # Ouverture de la ligne # Insa nolign,1,[M:SOH4]NBLIG [M:SOH4]NBLIG # [M:SOH4]NBLIG += 1 # nolign = [M:SOH4]NBLIG # NOL = nolign-1 # status = 0 # WQTY = [F:SQD1]QTY # # Alimentation de la classe [M:SOH4] de la ligne # Call ALISQDSOH(NOL,WQTY) From TRTVENCDE # [M]ORILIN(NOL) = [M]SOPLIN(WORI) # Call LINNUM("SOPLIN") From TABLEAUX # # Conversion des montants si nécessaire # If [F:SQH]CUR <> [M:SOH1]CUR # Local Char WANCCUR : WANCCUR=[F:SQH]CUR # Local Decimal MNTORI, MNTDES # Local Integer I, SPSTAT # Call CONVERT2(WANCCUR, [M:SOH1]CUR, GLOCALDEV, [M]CHGTYP, date$, [M]GROPRI(NOL), MNTDES, SPSTAT) From TRTDEV # [M]GROPRI(NOL) = arr(MNTDES, 10^-GDECPRI) # For I = 1 To 9 # If evalue ("dim([m:soh4]discrgval"+num$(I)+"(nol))")>0 # If GFMTREM(I-1)="M" # MNTORI = evalue("[m:soh4]discrgval"+num$(I)+"(NOL)") # Call CONVERT(WANCCUR, [M:SOH1]CUR, GLOCALDEV, [M]CHGTYP, date$, MNTORI, MNTDES, SPSTAT) From TRTDEV # Assign "[m:soh4]discrgval"+num$(I)+"(NOL)" With MNTDES # Endif # Endif # Next # Call CONVERT2(WANCCUR, [M:SOH1]CUR, GLOCALDEV, [M]CHGTYP, date$, [M]CPRPRI(NOL), MNTDES, SPSTAT) From TRTDEV # [M]CPRPRI(NOL) = arr(MNTDES, 10^-GDECPRI) # Endif # # Calculs prix net, marge et maj montants livrés et poids # GNETMAR=0 # Call ALICLCAMT([M:SOH4]ITMREF(NOL), [M:SOH4]QTY(NOL), NOL, "SOH4", [M:SOH4]CLCAMT1(NOL), [M:SOH4]CLCAMT2(NOL)) From TRTX3 # Call CLCNETPRI([M:SOH4]QTY(NOL),[M:SOH1]CUR, NOL)From TRTVENPRI # Call CLCPFM([M:SOH4]DSTOFCY(NOL),[M:SOH1]PRITYP,[M:SOH0]CHGTYP,[M:SOH0]ORDDAT,[M:SOH1]CUR,NOL,1) From TRTVENPRI # Call APRES_LIGNE(NOL,0) From SUBSOHB # GNETMAR=1 # nolign = NOL+1 # Next # Filter [SQD1] # Close Local File [SQD1] # Default File [SOH] #Endif # End issue 120966 If COUZON="STOFCY" & CZ="" CZ=[M:SOH2]STOFCY Endif If COUZON="SALFCY" & CZ="" CZ=[M:SOH0]SALFCY Endif If COUZON="BPCORD" & CZ="" CZ=[M:SOH0]BPCORD Endif # Recherche du no devis origine de la commande #For I=0 To [M:SOH4]NBLIG-1 # If [M:SOH4]DETSQHNUM(I)<>"" # If [M:SOH3]SQHNUM="" # [M:SOH3]SQHNUM=[M:SOH4]DETSQHNUM(I) # Elsif [M:SOH3]SQHNUM<>[M:SOH4]DETSQHNUM(I) # Raz [M:SOH3]SQHNUM # Break # Endif # Endif #Next I #Affzo [M:SOH0]1-99 #Affzo [M:SOH1]1-99 #Affzo [M:SOH2]1-99 #Affzo [M:SOH3]1-99 #Affzo [M:SOH4]1-99 #--CPO 79343 Pb identifié lors du ttt de cette fiche #--Avant appel APRES_LIGNE j'ai positionné le GMODIF=2, il faut le RAZ Raz GMODIF Raz GMESSAGE Return ######################################################################### $DESEL #-----------------------------------------------------------------------# # Désélection d'une ligne de devis # #-----------------------------------------------------------------------# Raz I,J OK = 0 If [M:SOH4]NBLIG <> 0 While OK <> 1 I = find([F:SQD]SQHNUM,[M:SOH4]DETSQHNUM(J..[M:SOH4]NBLIG-1)) If !I Break Endif If [M:SOH4]CREFLG(J+I-1)=0 & [F:SQD]SQDLIN=[M:SOH4]SQDLIN(J+I-1) # Maj montants livrés ,poids et suppression des textes GMODIF = 1 NOL = J+I-1 Call AVANT_LIGNE(NOL) From SUBSOHB #--CPO 79343 If GMODIF=1 and GREP<>"C" and GSOHSUPPLIGDSP>0 and GSOHSUPPLIGDSP<>999999 Local Integer WTEMPDSP : Raz WTEMPDSP Call CTLSUPP_EXISTDSP("SOH",NOL,WTEMPDSP) From TRTVENDIV If WTEMPDSP=1 GSOHSUPPLIGDSP -=1 Endif Endif #--/CPO # Si annulation origine gratuit alors suppression du gratuit If (GMODIF = 1 | GMODIF = 3 | GMODIF = 4) & GFOCFLG = 2 Local Integer RET Call SUPGRA(NOL, FUNCTION, RET) From TRTVENBOM Endif # Si annulation composé kit ou nomenclature alors suppression des composants If GMODIF = 3 | GMODIF = 4 NL = NOL+1 Gosub SUPNOM From TRTVENBOM Endif Dela NOL,1,[M:SOH4]NBLIG-1 [M:SOH4]NBLIG [M:SOH4]NBLIG -= 1 # Affzo [M:SOH4] Raz GMESSAGE OK = 1 Else J = J+I Endif Wend Endif Raz GMODIF #--CPO 76678 S'il n'y a plus de lignes d'un devis duquel on a repris la référence, il faut raz cette réference If [M:SOH4]NBLIG>0 and [M:SOH0]CUSORDREF=[F:SQH]CUSQUOREF If !find([F:SQD]SQHNUM,[M:SOH4]DETSQHNUM(0..[M:SOH4]NBLIG-1)) Raz [M:SOH0]CUSORDREF : Affzo [M:SOH0]CUSORDREF Endif Endif #--CPO # Si suite à désélection de la ligne, il n'y a plus de ligne sélectionnée # sur ce devis, il faut le débloquer Raz I,J OK = 2 If [M:SOH4]NBLIG <> 0 While OK <> 1 I = find([F:SQD]SQHNUM,[M:SOH4]DETSQHNUM(J..[M:SOH4]NBLIG-1)) If !I Break Endif If [M:SOH4]CREFLG(J+I-1)=0 OK = 1 Else J = J+I Endif Wend Endif If OK = 2 # Unlock entête devis SYMBOLE2 = "SQH"+[F:SQD]SQHNUM Unlock = SYMBOLE2 Endif Return ######################################################################### $LEC_TABART #-----------------------------------------------------------------------# # Lecture des tables articles # #-----------------------------------------------------------------------# If [F:ITM]ITMREF <> [F:SQD]ITMREF Read [ITM]ITM0=[F:SQD]ITMREF If fstat Raz [F:ITM] Endif Endif If [F:ITS]ITMREF <> [F:SQD]ITMREF Read [ITS]ITS0 = [F:SQD]ITMREF If fstat Raz [F:ITS] Endif Endif If ([F:ITU]ITMREF <> [F:SQD]ITMREF) | ([F:ITU]BPCNUM <> [F:SQH]BPCORD) Read [F:ITU]ITU0 = [F:SQD]ITMREF;[F:SQH]BPCORD If fstat Raz [F:ITU] Endif Endif Return ######################################################################### $CTL_DEVIS #---------------------------------------------------------------------------------------# # Contrôle de la ligne devis sélectionnée # # Elle doit être transformable et cohérente par rapport aux autres lignes sélectionnées # #---------------------------------------------------------------------------------------# Local Integer I For I=0 To [M]NBLIG-1 If [F:SQD]SQHNUM=[M]DETSQHNUM(I) & [F:SQD]SQDLIN=[M]SQDLIN(I) & [M]CREFLG(I)=0 OK=0 : GERR=1 GMESSAGE=[F:SQH]SQHNUM-mess(27,159,1)-[F:SQD]ITMREF+"\"+mess(200,192,1) Break Endif Next I If OK=0 Return Endif #---------------------------------------------# # Contrôler que le client n'est pas prospect # #---------------------------------------------# If [F:BPC]BPCNUM <> [F:SQH]BPCORD Read [BPC]BPC0=[F:SQH]BPCORD If fstat Raz [F:BPC] Endif Endif If [F:BPC]BPCTYP = 4 OK=0 : GERR=1 GMESSAGE=[F:SQH]SQHNUM-[F:SQH]BPCORD+"\"+mess(383,197,1) Return Endif #-----------------------------------------# # Contrôle des critéres de regroupement # #-----------------------------------------# If [F:SQH]BPCORD<>[M]BPCORD | (GLINBPD=1 & [F:SQD]BPAADD <> "" & [F:SQD]BPAADD<>[M]BPAADD) OK=0 : GERR=1 GMESSAGE=[F:SQH]SQHNUM-mess(27,159,1)-[F:SQD]ITMREF+"\"+mess(196,192,1)+"\"+mess(102,192,1) Return Endif # Vérif.cohérence entre l'adr de liv entête cde et l'adr de liv ligne concernant les infos douanières et le régime de taxe If [F:SQD]BPAADD<>"" & [F:SQD]BPAADD<>[M]BPAADD If [M:SOH1]VACBPR<>[F:BPD]VACBPR & [F:BPD]VACBPR<>"" # Régime de taxe devis XXX différent du régime de taxe entête commande YYY GMESSAGE=[F:SQH]SQHNUM-":"-mess(620,197,1)-mess(18,197,1)-mess(121,198,1)-"("-[F:BPD]VACBPR-")"-mess(621,197,1)-mess(620,197,1)-mess(622,197,1)-mess(191,198,1)-"("-[M:SOH1]VACBPR-")" OK=0 : GERR=1 : Return #--- CPO 72237 Le champ BPIEECNUM est soumis à code activité #Elsif [M:SOH0]BPIEECNUM<>[F:BPD]EECNUM & [F:BPD]EECNUM<>"" Elsif dim([M:SOH0]BPIEECNUM)>0 & [M:SOH0]BPIEECNUM<>[F:BPD]EECNUM & [F:BPD]EECNUM<>"" # N°identification CEE devis XXX différent du N°identification CEE entête devis GMESSAGE=[F:SQH]SQHNUM-":"-mess(629,197,1)-mess(18,197,1)-mess(121,198,1)-"("-[F:BPD]EECNUM-")"-mess(621,197,1)-mess(629,197,1)-mess(622,197,1)-mess(191,198,1)-"("-[M:SOH0]BPIEECNUM-")" OK=0 : GERR=1: Return Elsif [M:SOH0]EECICT<>[F:BPD]EECICT & [F:BPD]EECICT<>"" # Code incoterm devis XXX différent du code incoterm entête devis GMESSAGE=[F:SQH]SQHNUM-":"-mess(630,197,1)-mess(18,197,1)-mess(121,198,1)-"("-[F:BPD]EECICT-")"-mess(621,197,1)-mess(630,197,1)-mess(622,197,1)-mess(191,198,1)-"("-[M:SOH0]EECICT-")" OK=0 : GERR=1: Return Elsif dim([M:SOH0]EECLOC)>0 & [M:SOH0]EECLOC<>[F:BPD]EECLOC & [F:BPD]EECLOC<>0 # Lieu transport CEE devis différent du Lieu transport CEE entête devis GMESSAGE=[F:SQH]SQHNUM-":"-mess(631,197,1)-mess(18,197,1)-mess(121,198,1)-"("-mess([F:BPD]EECLOC,236,1)-")"-mess(621,197,1)-mess(631,197,1)-mess(622,197,1)-mess(191,198,1)-"("-mess([M:SOH0] & EECLOC,236,1)-")" OK=0 : GERR=1: Return Endif Endif If [F:SQH]SALFCY<>[M]SALFCY OK=0 : GERR=1 GMESSAGE=[F:SQH]SQHNUM-mess(27,159,1)-[F:SQD]ITMREF+"\"+mess(196,192,1)+"\"+mess(103,192,1) Return Endif If [F:SQH]PLISTC<>[M]PLISTC OK=0 : GERR=1 GMESSAGE=[F:SQH]SQHNUM-mess(27,159,1)-[F:SQD]ITMREF+"\"+mess(196,192,1)+"\"+mess(305,192,1) Return Endif If [F:SQH]CUR<>[M]CUR & ([F:TCU]EURFLG<>2 | [M]CUR <> WNEWCUR) OK=0 : GERR=1 GMESSAGE=[F:SQH]SQHNUM-mess(27,159,1)-[F:SQD]ITMREF+"\"+mess(196,192,1)+"\"+mess(228,192,1) Return Endif If ([F:SQH]PTE<>"" & [F:SQH]PTE<>[M]PTE) | ([M]DEP<>"" & [F:SQH]DEP<>[M]DEP) OK=0 : GERR=1 GMESSAGE=[F:SQH]SQHNUM-mess(27,159,1)-[F:SQD]ITMREF+"\"+mess(196,192,1)+"\"+mess(104,192,1) Return Endif If [F:SQH]PRITYP<>[M]PRITYP | [F:SQH]VACBPR<>[M]VACBPR OK=0 : GERR=1 GMESSAGE=[F:SQH]SQHNUM-mess(27,159,1)-[F:SQD]ITMREF+"\"+mess(196,192,1)+"\"+mess(105,192,1) Return Endif # 71065 : PJT ##Gbn-Fq77304-New entry point to avoid the control on the project field #GPE=0 : GPOINT="SOHCTLPJT" : Gosub ENTREE From EXEFNC #If !GPE # If [F:SQH]PJT<>[M]PJT # OK=0 : GERR=1 # GMESSAGE=[F:SQH]SQHNUM-mess(27,159,1)-[F:SQD]ITMREF+"\"+mess(196,192,1)+"\"+mess(107,192,1) # Return # Endif #Endif # 71065 : PJT # FGR 24/11/2011 : X3SUIVI71065 : (début) complète le test par le paramètre PJTSNGDOC If func TRTPJT.GET_PARAM_PJTSNGDOC([F:SQH]SALFCY) = G_OUI Then # Il est interdit d'avoir des affaires différentes sur la même pièce # On peut tester uniquement l'entête puisque, par conséquent, les lignes auront toutes la même valeur If [F:SQD]PJT<>[M]PJT OK=0 : GERR=1 GMESSAGE=[F:SQH]SQHNUM-mess(27,159,1)-[F:SQD]ITMREF+"\"+mess(196,192,1)+"\"+mess(107,192,1) Return Endif Endif # FGR 24/11/2011 : X3SUIVI71065 : (fin) complète le test par le paramètre PJTSNGDOC # Livraison commande complète : Le site de la ligne doit être celui de l'entête If [M:SOH2]DME=3 & [M:SOH2]STOFCY <> "" & [F:SQD]STOFCY <> [M:SOH2]STOFCY OK=0 : GERR=1 GMESSAGE=[F:SQH]SQHNUM-mess(27,159,1)-[F:SQD]ITMREF-mess(81,197,1)-[F:SQD]STOFCY+"\"+mess(214,192,1) Return Endif # Controle du champ GRUFLG : # Si Oui (1), pas de restriction # Sinon (2), vérifier que les éléments en % ont la meme valeur Local Integer I2 Local Decimal DTAAMTCMP Local Char TSTRUL For I=0 To dim([F:SQH]INVDTA) - 1 If [F:SQH]INVDTA(I) = 0 : Break : Endif If [F:SQH]INVDTATYP(I) = 3 : # % # Recherche Param concernant Doc Ori et Dest TSTRUL = num$([F:SQH]INVDTA(I)) + "~1~10" I2=find(TSTRUL, [M:SFIT]T_TST_RUL)-1 If I2>0 and [M:SFIT]T_GRUFLG(I2) = 2 : # non si diff # FGR 22/01/2015 : X3SUIVI105274 manque I2>0 # Valeur de l'element dans le devis pické : [F:SQH]INVDTAAMT(I) # Valeur de l'élément dans la livraison If [M:SFIT]T_BRDRUL(I2)=1 and [F:SQH]QUOSTA<>1 : # eclaté sur 1er devis et deja partiellement ou totalement commandé DTAAMTCMP=0 Else DTAAMTCMP=[F:SQH]INVDTAAMT(I) Endif I2 = find ( [F:SQH]INVDTA(I) , [M:SOH3]INVDTA ) If I2>0 and [M:SOH3]INVDTAAMT(I2-1) <> DTAAMTCMP OK=0 : GERR=1 # Pour cet élément de facturation, le regroupement avec des valeurs différentes est interdit (xxx)" Local Char SHOAXX Call LECTEXTRA([L]SHOAXX,"SFOOTINV","SHOAXX",num$([F:SQH]INVDTA(I)),"") From ATEXTRA GMESSAGE = mess(327,192,1) + " (" + SHOAXX+ ")" Break Endif Endif Endif Next I # ACA - Controle des codes adresses client commande If ([F:SQH]BPAORD<>[M:ADB1]BPAADD) OK=0 : GERR=1 GMESSAGE=[F:SQH]SQHNUM-mess(27,159,1)-[F:SQD]ITMREF- & format$(GFMDAT,[F:SQD]QUODAT)+"\"+mess(196,192,1)+"\"+mess(330,192,1) :#--CPO 83985 GFMDAT au lieu de GFMD Return Endif # LTA.en 79065 # If func AFNC.ACTIV("LTA") & GLOCUSATAX & [M:SOH4]NBLIG>0 & [F:SQH]SSTENTCOD<>[M:SOH1]SSTENTCOD # 106867.o If func AFNC.ACTIV("LTA") & [F:CPY]SSTTAXACT = 2 & [M:SOH4]NBLIG>0 & [F:SQH]SSTENTCOD<>[M:SOH1]SSTENTCOD # 106867.n OK=0 : GERR=1 GMESSAGE=func AFNC.MES2(mess(374,192,1), [F:SQH]SQHNUM, [F:SQH]SSTENTCOD) Return Endif # LTA.en 79065 Return ######################################################################### $RAFFRAICHI #-----------------------------------------------------------------------# # Raffraichissement des listes de picking pour les lignes déjà saisies # #-----------------------------------------------------------------------# If sum([M:SOH4]SQDLIN) <> 0 For I=0 To [M:SOH4]NBLIG-1 # La ligne est issue d'un picking devis réalisé au cours de cette transaction If [M:SOH4]DETSQHNUM(I)<>"" & [M:SOH4]CREFLG(I)=0 & !find([M:SOH4]LINTYP(I),3,4,5,11,12,13) Case currbox When GBOXSQ1 : Read [SQD]SQD0=[M:SOH4]DETSQHNUM(I);[M:SOH4]SQDLIN(I) When Default Endcase If WPICK=1 Gosub DEPICK From GOBJSUB Elsif WPICK=2 Gosub REPICK From GOBJSUB Endif Endif Next I Endif Return ######################################## Subprog IB_NBLIG4 Raz GBOUT1, GBOUT2, GBOUT3, GBOUT4 If GFONC1 <> "GESSDH" & [M]SDHNUM(nolign-1) <> "" GBOUT1 = mess(54,198,1) Endif If GFONC1 <> "GESSIH" & [M]NUM(nolign-1) <> "" GBOUT2 = mess(55,198,1) Endif If [M]FMINUM(nolign-1) <> "" If GFONC1 <> "GESMFG" & [M]FMI(nolign-1) = 5 GBOUT3 = mess(166,198,1) Elsif GFONC1 <> "GESPOH" GBOUT4 = mess(260,198,1) Raz GBOUT5 Endif Else Raz GBOUT5 Endif If GFONC1="GESPRH" | [M]PRHNUM(nolign-1)="" Raz GBOUT6 Endif Call IB_NOTECHECK([M]ITMREF(nolign-1),"ITMREF",7) From TRTNTSCTL # product notes EWI 86290 Call IB_PRDINF([M]ITMREF(nolign-1),8) From PRDINFLIB # DF 79831 EWI 86290 End ######################################## Subprog VOH_RESYNCHRONIZATION() Local Integer IERR Local Integer ICOUNT Local Integer ICOUNTTOT Local Integer IADXLOG Local Integer ISALREV # ---------------------- Local File FACILITY [FCY] Local File VSORDER [VOH] Local File SORDER [SOH] # ---------------------- IERR = 0 IADXLOG = (adxlog = 1) # ---------------------- Call OUVRE_TRACE(mess(556,192,1)) From LECFIC # ---------------------- ICOUNTTOT = 0 Filter [FCY] Where [F:FCY]SALFLG = [V]CST_AYES For [FCY] ISALREV = fmet GACTX.APARAM.AGETVALNUM([V]CST_ALEVFCY, [F:FCY]FCY, "SALREV") If ISALREV = 2 or ISALREV = 3 Then If IADXLOG = [V]CST_AFALSE Then Trbegin [VOH] Endif # ---------------------- ICOUNT = 0 Delete [VOH] Where [F:VOH]SALFCY = [F:FCY]FCY and [F:VOH]CURREVFLG = [V]CST_AYES For [SOH] Where [F:SOH]SALFCY = [F:FCY]FCY Raz [F:VOH] [F:VOH]SOHNUM = [F:SOH]SOHNUM [F:VOH]REVNUM = [F:SOH]REVNUM [F:VOH]SALFCY = [F:SOH]SALFCY [F:VOH]CURREVFLG = [V]CST_AYES Write [VOH] If fstat <> [V]CST_AOK Then Call ECR_TRACE([F:FCY]FCY - ":" - mess(552,192,1), 1) From GESECRAN IERR = 1 Break Endif ICOUNT += 1 Next # ---------------------- If IERR = 0 Then If ICOUNT > 0 Call ECR_TRACE(func AFNC.MES2(mess(558,192,1), num$(ICOUNT), [F:FCY]FCY), 0) From GESECRAN Endif If IADXLOG = [V]CST_AFALSE Then Commit Endif Else If IADXLOG = [V]CST_AFALSE Then Rollback Endif Endif ICOUNTTOT += ICOUNT Endif Next Filter [FCY] # ---------------------- If IERR = 0 Then Call ECR_TRACE(func AFNC.MES1(mess(557,192,1), num$(ICOUNTTOT)), 0) From GESECRAN Endif # ---------------------- Call FERME_TRACE From LECFIC Call LEC_TRACE From LECFIC End ######################################################################### #** #* Create first VSORDER record for a new order #* @param SSALFCY : Sales site on the order #* @param SSOHNUM : Order number #* @param IREVNUM : Revision number #*! Funprog INIT_VSORDER_RECORD(SSALFCY, SSOHNUM, IREVNUM) Value Char SSALFCY Value Char SSOHNUM Value Integer IREVNUM Local Integer IARENDRE Local Integer IADXLOG Local Integer ISALREV IARENDRE = [V]CST_AOK # ---------------------- ISALREV = fmet GACTX.APARAM.AGETVALNUM([V]CST_ALEVFCY, SSALFCY, "SALREV") If ISALREV = 2 or ISALREV = 3 Then # ---------------------- Local File VSORDER [VOH] # ---------------------- Look [VOH]VOH0=SSOHNUM;IREVNUM If fstat <> [V]CST_AOK Then IADXLOG = (adxlog = 1) If IADXLOG = [V]CST_AFALSE Then Trbegin [F:VOH] Endif # ---------------------- Raz [F:VOH] [F:VOH]SOHNUM = SSOHNUM [F:VOH]REVNUM = IREVNUM [F:VOH]SALFCY = SSALFCY [F:VOH]CURREVFLG = [V]CST_AYES Write [VOH] If fstat Then GERR = 1 GMESSAGE = mess(552,192,1) IARENDRE = [V]CST_AERROR Endif # ---------------------- If IADXLOG = [V]CST_AFALSE Then If IARENDRE < [V]CST_AERROR Then Commit Else Rollback Endif Endif Else GERR = 1 GMESSAGE = mess(552,192,1) IARENDRE = [V]CST_AERROR Endif Endif End IARENDRE ######################################################################### #** #* Increase [F:VOH]REVNUM on record [F:VOH]CURREVFLG = [V]CST_AYES for the current order #* @param SSALFCY : Sales site on the order #* @param SSOHNUM : Order number #* @param IOLDREVNUM : OLD current revision number #* @param INEWREVNUM : NEW current revision number #*! Funprog INCREASE_VSORDER_RECORD(SSALFCY, SSOHNUM, IOLDREVNUM, INEWREVNUM) Value Char SSALFCY Value Char SSOHNUM Value Integer IOLDREVNUM Value Integer INEWREVNUM Local Integer IARENDRE Local Integer IADXLOG Local Integer ISALREV IARENDRE = [V]CST_AOK # ---------------------- ISALREV = fmet GACTX.APARAM.AGETVALNUM([V]CST_ALEVFCY, SSALFCY, "SALREV") If ISALREV = 2 or ISALREV = 3 Then # ---------------------- Local File VSORDER [VOH] # ---------------------- Read [VOH]VOH0=SSOHNUM;IOLDREVNUM If fstat = [V]CST_AOK Then IADXLOG = (adxlog = 1) If IADXLOG = [V]CST_AFALSE Then Trbegin [F:VOH] Endif If [F:VOH]CURREVFLG = [V]CST_AYES Then [F:VOH]REVNUM = INEWREVNUM # Increate the revision number Rewrite [VOH] If fstat Then GERR = 1 GMESSAGE = mess(552,192,1) Endif Else # Revision line given doesn't "[F:VOH]CURREVFLG = [V]CST_AYES". # Wrong : we are going to try to fix that to avoid an error Filter [VOH] Where [F:VOH]SOHNUM = SSOHNUM and [F:VOH]CURREVFLG = [V]CST_AYES For [VOH] Delete [VOH]Curr Next Filter [VOH] IARENDRE = func INIT_VSORDER_RECORD(SSALFCY, SSOHNUM, INEWREVNUM) Endif If IADXLOG = [V]CST_AFALSE Then If IARENDRE < [V]CST_AERROR Then Commit Else Rollback Endif Endif Else # Line is not existing : we are going to create it IARENDRE = func INIT_VSORDER_RECORD(SSALFCY, SSOHNUM, INEWREVNUM) Endif Endif End IARENDRE ######################################################################### #** #* get order creation timestamp for selected revison #* @param REVNUM : revision number #* @return(Datatime) : Return OTIME #*! Funprog GET_ORDER_DATE(REVNUM) Value Integer REVNUM Local Datetime OTIME Local File VSORDER[VOH] Read [VOH]VOH0 = [M:SOHREV0]SOHNUM;[L]REVNUM OTIME = [F:VOH]CREDATTIM End OTIME ###################################################################################### #** #* display order lines for current revision #* @param REVNUM : revision number #*! Subprog CUR_LINE Local Integer NI Local File SORDERP [SOP] Local File SORDERQ [SOQ] Raz [M:SOHREV4] nolign = 0 Filter [SOP] Where [F:SOP]SOHNUM = [M:SOH0]SOHNUM Order By [F:SOP]SOPLIN For [SOP] nolign + = 1 [M:SOHREV4] = [F:SOP] [M:SOHREV4]VACITM1(nolign-1) = [F:SOP]VACITM(0) [M:SOHREV4]VACITM2(nolign-1) = [F:SOP]VACITM(1) [M:SOHREV4]VACITM3(nolign-1) = [F:SOP]VACITM(2) Next nolign = 0 Filter [SOQ] Where [F:SOQ]SOHNUM = [M:SOH0]SOHNUM Order By [F:SOQ]SOPLIN For [SOQ] nolign + = 1 [M:SOHREV4] = [F:SOQ] [M:SOHREV4]DSTOFCY(nolign-1) = [F:SOQ]STOFCY [M:SOHREV4]DPJT(nolign-1) = [F:SOQ]PJT [M:SOHREV4]DDLVPIO(nolign-1) = [F:SOQ]DLVPIO [M:SOHREV4]DBPTNUM(nolign-1) = [F:SOQ]BPTNUM [M:SOHREV4]DMDL(nolign-1) = [F:SOQ]MDL [M:SOHREV4]DDRN(nolign-1) = [F:SOQ]DRN [M:SOHREV4]DDAYLTI(nolign-1) = [F:SOQ]DAYLTI [M:SOHREV4]DDEMDLVDAT(nolign-1)= [F:SOQ]DEMDLVDAT [M:SOHREV4]DSHIDAT(nolign-1) = [F:SOQ]SHIDAT [M:SOHREV4]DALLTYP(nolign-1) = [F:SOQ]ALLTYP [M:SOHREV4]DCCLREN(nolign-1) = [F:SOQ]CCLREN [M:SOHREV4]DCCLDAT(nolign-1) = [F:SOQ]CCLDAT [M:SOHREV4]DBPAADD(nolign-1) = [F:SOQ]BPAADD Next Filter [SOP] Filter [SOQ] [M:SOHREV4]NBLIG = nolign Affzo [M:SOHREV4]1-99 End ############################################################## #** #* display sales order lines for historical revision #* @param REVNUM : revision number #*! Subprog REV_LINE(REVNUM) Value Integer REVNUM Local Integer NI Local Integer SKPLIN Local Integer DELLIN Local Datetime OTIME Local File VSORDERP [VOP] Local File VSORDERQ [VOQ] Local File SORDERP [SOP] Local File SORDERQ [SOQ] OTIME = func GET_ORDER_DATE(REVNUM) Raz [M:SOHREV4] nolign = 0 Filter [SOP] Where [F:SOP]SOHNUM = [M:SOH0]SOHNUM and ([F:SOP]LINREVNUM <= REVNUM or [F:SOP]LINREVNUM = 0) Order By SOPLIN; LINREVNUM Desc For [SOP] Filter [SOQ] Where ([F:SOQ]SOHNUM = [M:SOH0]SOHNUM) and ([F:SOQ]SOQSEQ = [F:SOP]SOPSEQ) and ([F:SOQ]ITMREF = [F:SOP]ITMREF) Read [SOQ] First nolign + = 1 [M:SOHREV4] = [F:SOP] [M:SOHREV4]VACITM1(nolign-1) = [F:SOP]VACITM(0) [M:SOHREV4]VACITM2(nolign-1) = [F:SOP]VACITM(1) [M:SOHREV4]VACITM3(nolign-1) = [F:SOP]VACITM(2) [M:SOHREV4] = [F:SOQ] [M:SOHREV4]DSTOFCY(nolign-1) = [F:SOQ]STOFCY [M:SOHREV4]DPJT(nolign-1) = [F:SOQ]PJT [M:SOHREV4]DDLVPIO(nolign-1) = [F:SOQ]DLVPIO [M:SOHREV4]DBPTNUM(nolign-1) = [F:SOQ]BPTNUM [M:SOHREV4]DMDL(nolign-1) = [F:SOQ]MDL [M:SOHREV4]DDRN(nolign-1) = [F:SOQ]DRN [M:SOHREV4]DDAYLTI(nolign-1) = [F:SOQ]DAYLTI [M:SOHREV4]DDEMDLVDAT(nolign-1)= [F:SOQ]DEMDLVDAT [M:SOHREV4]DSHIDAT(nolign-1) = [F:SOQ]SHIDAT [M:SOHREV4]DALLTYP(nolign-1) = [F:SOQ]ALLTYP [M:SOHREV4]DCCLREN(nolign-1) = [F:SOQ]CCLREN [M:SOHREV4]DCCLDAT(nolign-1) = [F:SOQ]CCLDAT [M:SOHREV4]DBPAADD(nolign-1) = [F:SOQ]BPAADD Next Filter [SOP] Filter [SOQ] [M:SOHREV4]NBLIG = nolign DELLIN = 0 Filter [VOP] Where [F:VOP]SOHNUM = [M:SOHREV0]SOHNUM and [F:VOP]LINREVNUM <= [L]REVNUM Order By [F:VOP]SOPLIN; [F:VOP]LINREVNUM Desc For [VOP] SKPLIN = [V]CST_AFALSE If [F:VOP]SOPLIN = DELLIN SKPLIN = [V]CST_ATRUE Endif If [F:VOP]REVCOD = 'A' and [F:VOP]CREDATTIM < [L]OTIME DELLIN = [F:VOP]SOPLIN SKPLIN = [V]CST_ATRUE Endif For NI = 0 To [M:SOHREV4]NBLIG If ([M:SOHREV4]SOPLIN(NI) = [F:VOP]SOPLIN) and ([M:SOHREV4]ITMREF(NI) = [F:VOP]ITMREF) SKPLIN = [V]CST_ATRUE Endif Next NI If SKPLIN = [V]CST_AFALSE Filter [VOQ] Where ([F:VOQ]SOHNUM = [M:SOHREV0]SOHNUM) and ([F:VOQ]LINREVNUM = [F:VOP]LINREVNUM) and ([F:VOQ]SOQSEQ = [F:VOP]SOPSEQ) and ([F:VOQ]ITMREF = [F:VOP]ITMREF) Read [VOQ] First nolign + = 1 [M:SOHREV4] = [F:VOP] [M:SOHREV4]VACITM1(nolign-1) = [F:VOP]VACITM(0) [M:SOHREV4]VACITM2(nolign-1) = [F:VOP]VACITM(1) [M:SOHREV4]VACITM3(nolign-1) = [F:VOP]VACITM(2) [M:SOHREV4] = [F:VOQ] [M:SOHREV4]DSTOFCY(nolign-1) = [F:VOQ]STOFCY [M:SOHREV4]DPJT(nolign-1) = [F:VOQ]PJT [M:SOHREV4]DDLVPIO(nolign-1) = [F:VOQ]DLVPIO [M:SOHREV4]DBPTNUM(nolign-1) = [F:VOQ]BPTNUM [M:SOHREV4]DMDL(nolign-1) = [F:VOQ]MDL [M:SOHREV4]DDRN(nolign-1) = [F:VOQ]DRN [M:SOHREV4]DDAYLTI(nolign-1) = [F:VOQ]DAYLTI [M:SOHREV4]DDEMDLVDAT(nolign-1) = [F:VOQ]DEMDLVDAT [M:SOHREV4]DSHIDAT(nolign-1) = [F:VOQ]SHIDAT [M:SOHREV4]DALLTYP(nolign-1) = [F:VOQ]ALLTYP [M:SOHREV4]DCCLREN(nolign-1) = [F:VOQ]CCLREN [M:SOHREV4]DCCLDAT(nolign-1) = [F:VOQ]CCLDAT [M:SOHREV4]DBPAADD(nolign-1) = [F:VOQ]BPAADD [M:SOHREV4]NBLIG = nolign Endif Next Filter [VOP] Filter [VOQ] Sorta [M:SOHREV4]NBLIG [M:SOHREV4]NBLIG Order By [M:SOHREV4]SOPLIN([S]indice) Affzo [M:SOHREV4]1-99 End ###################################################################################### #** #* display order lines for previous historical revision #* @param REVNUM : revision number Subprog REV_LINE_HIST(REVNUM) Value Integer REVNUM Local Integer NI Local Integer SKPLIN Local Integer DELLIN Local Datetime OTIME If [L]REVNUM >= 0 Local File VSORDERP [VOP] Local File VSORDERQ [VOQ] Local File SORDERP [SOP] Local File SORDERQ [SOQ] OTIME = func GET_ORDER_DATE(REVNUM) Raz [M:SOHREV4H] nolign = 0 Filter [SOP] Where [F:SOP]SOHNUM = [M:SOH0]SOHNUM and ([F:SOP]LINREVNUM <= REVNUM or [F:SOP]LINREVNUM = 0) Order By SOPLIN; LINREVNUM Desc For [SOP] Filter [SOQ] Where [F:SOQ]SOHNUM = [M:SOH0]SOHNUM and ([F:SOQ]SOQSEQ = [F:SOP]SOPSEQ) and ([F:SOQ]ITMREF = [F:SOP]ITMREF) Read [SOQ] First nolign + = 1 [M:SOHREV4H] = [F:SOP] [M:SOHREV4H]VACITM1(nolign-1) = [F:SOP]VACITM(0) [M:SOHREV4H]VACITM2(nolign-1) = [F:SOP]VACITM(1) [M:SOHREV4H]VACITM3(nolign-1) = [F:SOP]VACITM(2) [M:SOHREV4H] = [F:SOQ] [M:SOHREV4H]DSTOFCY(nolign-1) = [F:SOQ]STOFCY [M:SOHREV4H]DPJT(nolign-1) = [F:SOQ]PJT [M:SOHREV4H]DDLVPIO(nolign-1) = [F:SOQ]DLVPIO [M:SOHREV4H]DBPTNUM(nolign-1) = [F:SOQ]BPTNUM [M:SOHREV4H]DMDL(nolign-1) = [F:SOQ]MDL [M:SOHREV4H]DDRN(nolign-1) = [F:SOQ]DRN [M:SOHREV4H]DDAYLTI(nolign-1) = [F:SOQ]DAYLTI [M:SOHREV4H]DDEMDLVDAT(nolign-1) = [F:SOQ]DEMDLVDAT [M:SOHREV4H]DSHIDAT(nolign-1) = [F:SOQ]SHIDAT [M:SOHREV4H]DALLTYP(nolign-1) = [F:SOQ]ALLTYP [M:SOHREV4H]DCCLREN(nolign-1) = [F:SOQ]CCLREN [M:SOHREV4H]DCCLDAT(nolign-1) = [F:SOQ]CCLDAT [M:SOHREV4H]DBPAADD(nolign-1) = [F:SOQ]BPAADD Next Filter [SOP] Filter [SOQ] [M:SOHREV4H]NBLIG = nolign DELLIN = 0 Filter [VOP] Where [F:VOP]SOHNUM = [M:SOHREV0]SOHNUM and [F:VOP]LINREVNUM <= [L]REVNUM Order By [F:VOP]SOPLIN; [F:VOP]LINREVNUM Desc For [VOP] SKPLIN = [V]CST_AFALSE If [F:VOP]SOPLIN = DELLIN SKPLIN = [V]CST_ATRUE Endif If [F:VOP]REVCOD = 'A' and [F:VOP]CREDATTIM < [L]OTIME DELLIN = [F:VOP]SOPLIN SKPLIN = [V]CST_ATRUE Endif For NI = 0 To [M:SOHREV4H]NBLIG If ([M:SOHREV4H]SOPLIN(NI) = [F:VOP]SOPLIN) and ([M:SOHREV4H]ITMREF(NI) = [F:VOP]ITMREF) SKPLIN = [V]CST_ATRUE Endif Next NI If SKPLIN = [V]CST_AFALSE Filter [VOQ] Where [F:VOQ]SOHNUM = [M:SOHREV0]SOHNUM and ([F:VOQ]LINREVNUM = [F:VOP]LINREVNUM) and ([F:VOQ]SOQSEQ = [F:VOP]SOPSEQ) and ([F:VOQ]ITMREF = [F:VOP]ITMREF) Read [VOQ] First nolign + = 1 [M:SOHREV4H] = [F:VOP] [M:SOHREV4H]VACITM1(nolign-1) = [F:VOP]VACITM(0) [M:SOHREV4H]VACITM2(nolign-1) = [F:VOP]VACITM(1) [M:SOHREV4H]VACITM3(nolign-1) = [F:VOP]VACITM(2) [M:SOHREV4H] = [F:VOQ] [M:SOHREV4H]DSTOFCY(nolign-1) = [F:VOQ]STOFCY [M:SOHREV4H]DPJT(nolign-1) = [F:VOQ]PJT [M:SOHREV4H]DDLVPIO(nolign-1) = [F:VOQ]DLVPIO [M:SOHREV4H]DBPTNUM(nolign-1) = [F:VOQ]BPTNUM [M:SOHREV4H]DMDL(nolign-1) = [F:VOQ]MDL [M:SOHREV4H]DDRN(nolign-1) = [F:VOQ]DRN [M:SOHREV4H]DDAYLTI(nolign-1) = [F:VOQ]DAYLTI [M:SOHREV4H]DDEMDLVDAT(nolign-1)= [F:VOQ]DEMDLVDAT [M:SOHREV4H]DSHIDAT(nolign-1) = [F:VOQ]SHIDAT [M:SOHREV4H]DALLTYP(nolign-1) = [F:VOQ]ALLTYP [M:SOHREV4H]DCCLREN(nolign-1) = [F:VOQ]CCLREN [M:SOHREV4H]DCCLDAT(nolign-1) = [F:VOQ]CCLDAT [M:SOHREV4H]DBPAADD(nolign-1) = [F:VOQ]BPAADD [M:SOHREV4H]NBLIG = nolign Endif Next Filter [VOP] Filter [VOQ] Sorta [M:SOHREV4H]NBLIG [M:SOHREV4H]NBLIG Order By [M:SOHREV4H]SOPLIN([S]indice) Affzo [M:SOHREV4H]1-99 Endif End ###################################################################################### #** #* display header data for revision #* @param REVNUM : revision number #*! Subprog REV_HDR(REVNUM) Value Integer REVNUM Local Integer NI If [L]REVNUM = [M:SOH0]REVNUM Local File SORDER[SOH] Read [SOH]SOH0 = [M:SOHREV0]SOHNUM [M:SOHREV3]NBAXE = [M:SOH3]NBAXE For NI = 0 To [M:SOHREV3]NBAXE [M:SOHREV3]NAMDIE(NI) = [M:SOH3]NAMDIE(NI) [M:SOHREV3]CCE(NI) = [F:SOH]CCE(NI) [M:SOHREV3]DIE(NI) = [F:SOH]DIE(NI) Next NI [M:SOHREV3]NBFAC = [M:SOH3]NBFAC For NI = 0 To [M:SOHREV3]NBFAC-1 [M:SOHREV3]SHO(NI) = [M:SOH3]SHO(NI) [M:SOHREV3]INVDTAAMTSTR(NI) = num$([F:SOH]INVDTAAMT(NI)) Next NI Else If REVNUM >= 0 Local File VSORDER[VOH] Read [VOH]VOH0 = [M:SOHREV0]SOHNUM;[L]REVNUM [M:SOHREV3]NBAXE = [M:SOH3]NBAXE For NI = 0 To [M:SOHREV3]NBAXE [M:SOHREV3]NAMDIE(NI) = [M:SOH3]NAMDIE(NI) [M:SOHREV3]CCE(NI) = [F:VOH]CCE(NI) [M:SOHREV3]DIE(NI) = [F:VOH]DIE(NI) Next NI [M:SOHREV3]NBFAC = [M:SOH3]NBFAC For NI = 0 To [M:SOHREV3]NBFAC-1 [M:SOHREV3]SHO(NI) = [M:SOH3]SHO(NI) [M:SOHREV3]INVDTAAMTSTR(NI) = num$([F:VOH]INVDTAAMT(NI)) Next NI Endif Endif # Issue X3-169498 - 2019-23-12 by MDZ : Begin If func AFNC.ACTIV("EDIX3")>0 [M:SOHREV2]DEMDLVHOU = [M:SOH2]DEMDLVHOU #not in historical table Endif # Issue X3-169498 - 2019-23-12 by MDZ : End [M:SOHREV2]SDHTYP = [M:SOH2]SDHTYP #not in historical table End #################################################################################### #** #* display header data for previous revision #* @param REVNUM : revision number #*! Subprog REV_HDR_HIST (REVNUM) Value Integer REVNUM Raz [M:SOHREV0H] Raz [M:SOHREV1H] Raz [M:SOHREV2H] Raz [M:SOHREV3H] If [L]REVNUM >= 0 Local File VSORDER[VOH] Read [VOH]VOH0 = [M:SOH0]SOHNUM;[L]REVNUM [M:SOHREV0H] = [F:VOH] [M:SOHREV1H] = [F:VOH] [M:SOHREV1H]HLDSTA = [M:SOH1]HLDSTA #not in historical table [M:SOHREV2H] = [F:VOH] # Issue X3-169498 - 2019-23-12 by MDZ : Begin If func AFNC.ACTIV("EDIX3")>0 [M:SOHREV2]DEMDLVHOU = [M:SOH2]DEMDLVHOU #not in historical table Endif # Issue X3-169498 - 2019-23-12 by MDZ : End [M:SOHREV2H]SDHTYP = [M:SOH2]SDHTYP #not in historical table [M:SOHREV3H] = [F:VOH] [M:SOHREV3H]NBAXE = [M:SOH3]NBAXE For NI = 0 To [M:SOH3]NBAXE-1 [M:SOHREV3H]NAMDIE(NI) = [M:SOH3]NAMDIE(NI) [M:SOHREV3H]CCE(NI) = [F:VOH]CCE(NI) [M:SOHREV3H]DIE(NI) = [F:VOH]DIE(NI) Next NI [M:SOHREV3H]NBFAC = [M:SOH3]NBFAC For NI = 0 To [M:SOH3]NBFAC-1 [M:SOHREV3H]INVDTA(NI) = [F:VOH]INVDTA(NI) [M:SOHREV3H]SHO(NI)= [M:SOH3]SHO(NI) [M:SOHREV3H]INVDTAAMTSTR(NI) = num$([F:VOH]INVDTAAMT(NI)) [M:SOHREV3H]INVDTATYP(NI) = [F:VOH]INVDTATYP(NI) # DIS-X3-141376-Bug-SUBSOHREVError - SDZ 10/06/2019 START If func AFNC.ACTIV("LTA")>0 [M:SOHREV3H]SFISSTCOD(NI) = [F:VOH]SFISSTCOD(NI) Endif # DIS-X3-141376-Bug-SUBSOHREVError - SDZ 10/06/2019 END Next NI Endif End ################################################################################### #** #* change style for selected fileds in mask #* @param ABREV : screen with current revision #* @param ABFIC : screen with previous revision #* @param REVNUM : revision number #* @param BLKNUM : block number #* @param STYLE : new style #*! Subprog CHNG_REV_HDR_STYLE(ABREV,ABFIC,REVNUM,BLKNUM,STYLE) Value Char ABREV Value Char ABFIC Value Integer REVNUM Value Integer BLKNUM Value Char STYLE Local Char NOMZON(GLONAVA) Local Char FULFIELD(250) Local Char FULFIELD1(250) Local Char FULFIELD2(250) Local Integer MA Gosub DEFVAR From WGOSOHREV For MA = 0 To NBMASK If ABMSK(MA) = [L]ABREV Then Gosub SETMASK From WGOSOHREV Break Endif Next MA Local File AMSKZON[AMZ] If BLKNUM <> 0 Filter [AMZ] Where [AMZ]CODMSK = [L]ABREV and [F:AMZ]SAIAFF < 3 and [F:AMZ]NUMBLOC = BLKNUM # specific block Else Filter [AMZ] Where [AMZ]CODMSK = [L]ABREV and [F:AMZ]SAIAFF < 3 # all blocks in screen Endif For [AMZ] NOMZON = [F:AMZ]CODZON FULFIELD = "[M]" + [L]NOMZON For NI = 0 To evalue("dim(" + FULFIELD + ")") - 1 FULFIELD1 = "[M]" + [L]NOMZON + "(" + num$(NI) + ")" FULFIELD2 = "[M:" + [L]ABFIC + "]" + [L]NOMZON + "(" + num$(NI) + ")" If (evalue("dim(" + FULFIELD1 + ")") >= 0) and (evalue("dim(" + FULFIELD2 + ")") >= 0) If evalue(FULFIELD1) <> evalue(FULFIELD2) and [L]REVNUM > 0 Then Chgstl =FULFIELD1 With STYLE Else Chgstl =FULFIELD1 With "" Endif Endif Next NI Next Filter [AMZ] End ###################################################################################### #** #* change style for selected fileds in mask #* @param ABREV : screen with current revision #* @param ABFIC : screen with previous revision #* @param REVNUM : revision number #* @param BLKNUM : block number #* @param STYLE : new style #*! Subprog CHNG_REV_LIN_STYLE(ABREV,ABFIC,REVNUM,BLKNUM, STYLE) Value Char ABREV Value Char ABFIC Value Integer REVNUM Value Integer BLKNUM Value Char STYLE Local Char NOMZON(GLONAVA) Local Char FULFIELD(250) Local Integer MA Local Char ABFICSOPLIN(250) Local Char ABREVSOPLIN(250) Local Char SFORMULA(250) Local Integer ABFICNOLIG Local Integer ABREVNOLIG Local Integer BLKTYP Local Char SNBLIG(GLONAVA) Local File AMSKZON[AMZ] Gosub DEFVAR From WGOSOHREV For MA = 0 To NBMASK If ABMSK(MA) = [L]ABREV Then Gosub SETMASK From WGOSOHREV Break Endif Next MA Filter [AMZ] Where [AMZ]CODMSK = [L]ABREV and [F:AMZ]CODTYP = "ABS" and [F:AMZ]SAIAFF < 3 and [F:AMZ]NUMBLOC = BLKNUM Order By [F:AMZ]NUMLIG For [AMZ] SNBLIG = [F:AMZ]CODZON Next Filter [AMZ] Where [AMZ]CODMSK = [L]ABREV and [F:AMZ]CODTYP <> "ABS" and [F:AMZ]SAIAFF < 3 and [F:AMZ]NUMBLOC = BLKNUM Order By [F:AMZ]NUMLIG For [AMZ] For ABREVNOLIG = 0 To evalue("[M:" + [L]ABREV + "]" + SNBLIG + "-1") NOMZON = [F:AMZ]CODZON FULFIELD = "[M]" + [L]NOMZON ABREVSOPLIN = "[M:" + [L]ABREV + "]SOPLIN(" + num$([L]ABREVNOLIG) + ")" ABFICSOPLIN = "[M:" + [L]ABFIC + "]SOPLIN(0..[M:" + [L]ABFIC + "]" + SNBLIG + "-1)" SFORMULA = "find(" + [L]ABREVSOPLIN + "," + [L]ABFICSOPLIN + ")" ABFICNOLIG = evalue([L]SFORMULA)-1 If (evalue("[M:" + [L]ABFIC + "]" + SNBLIG) > 0) and ([L]ABFICNOLIG >= 0) If (evalue("dim(FULFIELD(" + num$([L]ABREVNOLIG) + "))") >= 0) and (evalue("dim([M:" + [L]ABFIC + "]" + [L]NOMZON + "(ABFICNOLIG))") >= 0) If evalue(FULFIELD + "(" + num$([L]ABREVNOLIG) + ")") <> evalue("[M:" + [L]ABFIC + "]" + [L]NOMZON + "(ABFICNOLIG)") Chgstl =FULFIELD + "(" + num$([L]ABREVNOLIG) + ")" With STYLE Else Chgstl =FULFIELD + "(" + num$([L]ABREVNOLIG) + ")" With "" Endif Endif Else If (evalue("dim(FULFIELD(" + num$([L]ABREVNOLIG) + "))") >=0) and (evalue("dim([M:" + [L]ABFIC + "]" + [L]NOMZON + "(ABFICNOLIG))") >= 0) # Issue X3-153741 - 2019-10-12 by MDZ Chgstl =FULFIELD + "(" + num$([L]ABREVNOLIG) + ")" With "" Endif # Issue X3-153741 - 2019-12-12 by MDZ Endif Next ABREVNOLIG Next Filter [AMZ] End ###################################################################################### #** #* change style for selected grid in mask #* @param ABREV : screen with current revision #* @param ABFIC : screen with previous revision #* @param REVNUM : revision number #* @param STYLE : new style #*! Subprog CHNG_REV_GRID_STYLE(ABREV,ABFIC,REVNUM,BLKNUM, STYLE) Value Char ABREV Value Char ABFIC Value Integer REVNUM Value Integer BLKNUM Value Char STYLE Local Char NOMZON(GLONAVA) Local Char FULFIELD(250) Local Integer MA Local Integer NI Local Char SNBLIG(GLONAVA) Local File AMSKZON[AMZ] Gosub DEFVAR From WGOSOHREV For MA = 0 To NBMASK If ABMSK(MA) = [L]ABREV Then Gosub SETMASK From WGOSOHREV Break Endif Next MA Filter [AMZ] Where [AMZ]CODMSK = [L]ABREV and [F:AMZ]CODTYP = "ABS" and [F:AMZ]SAIAFF < 3 and [F:AMZ]NUMBLOC = BLKNUM Order By [F:AMZ]NUMLIG For [AMZ] SNBLIG = [F:AMZ]CODZON Next If SNBLIG <> "" Filter [AMZ] Where [AMZ]CODMSK = [L]ABREV and [F:AMZ]CODTYP <> "ABS" and [F:AMZ]SAIAFF < 3 and [F:AMZ]NUMBLOC = BLKNUM Order By [F:AMZ]NUMLIG For [AMZ] For NI = 0 To evalue("[M:" + [L]ABREV + "]" + SNBLIG + "-1") NOMZON = [F:AMZ]CODZON FULFIELD = "[M]" + [L]NOMZON If (evalue("[M:" + [L]ABFIC + "]" + SNBLIG) > 0) If (evalue("dim(FULFIELD(" + num$([L]NI) + "))") >= 0) and (evalue("dim([M:" + [L]ABFIC + "]" + [L]NOMZON + "(NI))") >= 0) If evalue(FULFIELD + "(" + num$([L]NI) + ")") <> evalue("[M:" + [L]ABFIC + "]" + [L]NOMZON + "(NI)") Chgstl =FULFIELD + "(" + num$([L]NI) + ")" With STYLE Else Chgstl =FULFIELD + "(" + num$([L]NI) + ")" With "" Endif Endif Else Chgstl =FULFIELD + "(" + num$([L]NI) + ")" With "" Endif Next NI Next Endif Filter [AMZ] End Funprog TEST20000(PARAM) Value Char PARAM Local Char RETOUR(255) [L]RETOUR = "Retour du param = " + [L]PARAM End [L]RETOUR # Fin du traitement
Même en enlevant les sauts de lignes et commentaires ce traitement fait encore 9000 lignes de code.
Cordialement,
Laurent
voici l'erreur que j'obtiens à la compilation en 140.
Par contre en version 12 avec le nouveau moteur aucun message , vous aviez raison.
merci pour votre réponse.
*Community Hub is the new name for Sage City