Au chargement des tableaux (mémoire) des demandes et des ressources, il est possible d'ignorer l'ordre en cours (dans la classe [F:ORDB]) en positionnant GPE à 1, ou de valoriser jusqu'à 3 champs utilisateurs (chaines de 50 max) en testant MTOLINK_PE_MODE :
- MTOLINK_PE_MODE = "D" pour les demandes :
TDEM_USRFLD1(NDEM)
TDEM_USRFLD2(NDEM)
TDEM_USRFLD3(NDEM)
- MTOLINK_PE_MODE = "R" pour les ressources :
TRESS_USRFLD2(NRESS)
TRESS_USRFLD2(NRESS)
TRESS_USRFLD3(NRESS)
L'ensemble des ordres concernés par le calcul est chargé en mémoire et pour des raisons de performance il est judicieux de stocker ici tout élément à prendre en compte.
A ce propos, il est conseiller d'ajouter les champs utilisateurs directement dans la table ORDERS pour de meilleures performances.
Dans l'exemple de code donné plus bas, le champ utilisateur XUSRFLD est copié dans la variable mémoire
Ce point d’entrée permet, en conjonction avec le point d'entrée MTOLINK_PRP, d'activer des contraintes supplémentaires (règles) dans l'algorithme de calcul des affectations.
Au début du calcul des affectations, les règles de priorisation des ressources (cf règles d’affectation) sont chargées en mémoire avec WUSRFLT(I_RULE)=1.
Juste avant, un premier appel au point d'entrée MTOLINK_RULES est effectué en mode "activation" avec MTOLINK_PE_MODE = 'ACT'. Il permet d'indiquer au calcul :
- 1 ou 3 règles spécifiques supplémentaires et prioritaires à considérer, en affectant WUSRFLT(WNBRULE)=2 et en incrémentant le compteur de règle (WNBRULE)
- ou de gérer des conditions spécifiques ajoutées au paramétrage des règles standards.
Un second appel au point d'entrée MTOLINK_RULES est ensuite effectué en mode "application" avec :
- MTOLINK_PE_MODE = 'APP' pour une règle spécifique (si WUSRFLT(I_RULE)=2)
- MTOLINK_PE_MODE = 'BPP' pour toute règle spécifique ou standard (quelque soit WUSRFLT(I_RULE))
Positionner alors GPE à 1 pour indiquer l'incompatibilité entre la demande en cours (variables TDEM_...(I)) et la ressource en cours (variables TRESS_...(K)) pour la règle en cours (W...(I_RULE)).
Remarque : R_USRFLD1..3 = TDEM_USRFLD1..3 (I)
#----------------------------------------------------------------------------------
$ACTION
When "MTOLINK_PRP" : Gosub MTOLINK_PRP
When "MTOLINK_RULES" : Gosub MTOLINK_RULES
Endcase
Return
#----------------------------------------------------------------------------------
# Entry point triggered when loading demand(s) and resource(s) lists
# Can be use either to store user data (for later use when applying rules)
# Or to skip an order (return GPE = 1)
$MTOLINK_PRP
# in this example, we store XUSRFLD in user fields
GPE = 0
Case MTOLINK_PE_MODE
When "D": TDEM_USRFLD1(NDEM) = [F:ORDB]XUSRFLD
When "R": TRESS_USRFLD1(NRESS) = [F:ORDB]XUSRFLD
Endcase
Return
#----------------------------------------------------------------------------------
# Here we use the user fields stored using MTOLINK_PRP entry point
# Assignments will only be generated for compatible user fields
$MTOLINK_RULES
Case MTOLINK_PE_MODE
When "ACT": # rule activation
WUSRFLT(WNBRULE) = 2
WNBRULE += 1
When "APP": # rule application
# matching user fields
GPE = 0
If TRESS_USRFLD1(K) <> TDEM_USRFLD1(I) : GPE = 1 : Endif
Endcase
Return
Ce point d’entrée permet de prendre la main avant la création d'un nouvel enregistrement d'affectation dans la table MTOLINK.
Il y a une transaction en cours.
Pour annuler la transaction s’il y a un problème, il faut positionner la variable GOK à 0.
Le buffer [F:MLK1] est chargé au moment de l’appel du point d’entrée.
La classe écran [M:MLIK] est chargée avec les paramètres d'appel au traitement MTOLINKLIB :
- [M:MLIK]STOFCY et [M:MLIK]ITMREF indique l'article-site concerné
- [M:MLIK]DEMTYP, DEMNUM, DEMLIN, DEMSEQ, DWIPTYP indique l'encours de demande concerné
- [M:MLIK]RESSTYP, RESSNUM, RESSLIN, RESSSEQ, RWIPTYP indique l'encours de ressource concerné
- [M:MLIK]MAJCOD indique le type de traitement
C | Création d'une nouvelle affectation |
M | Modification d'une affectation |
A | Suppression d'une affectation |
P | Proposition de nouvelles affectations générées selon la règle d'affectation de l'article-site |
Z | Raz des affectations associées à une ressource ou une demande |
E | Entrée d'une ressource |
Dans le tableau ci-dessous, le flag contenu significatif signifie que le contenu est en phase avec le contexte (…).
Table | Abréviation | Contenu significatif | Intitulé Table |
MTOLINK | MLK1 | Oui | Affectations |
ORDERS | ORDB | Non | Encours |
PARMTO | PTO | Oui ssi [M:MLIK]MAJCOD="P" ou "E" | Règles d'affectation |
Ce point d’entrée permet de prendre la main avant la modification d'un enregistrement d'affectation dans la table MTOLINK.
Il y a une transaction en cours.
Pour annuler la transaction s’il y a un problème, il faut positionner la variable GOK à 0.
Le buffer [F:MLK1] est chargé au moment de l’appel du point d’entrée. L'appel est fait au sein d'une boucle For [MLK1].
La classe écran [M:MLIK] est chargée avec les paramètres d'appel au traitement MTOLINKLIB :
- [M:MLIK]STOFCY et [M:MLIK]ITMREF indique l'article-site concerné
- [M:MLIK]DEMTYP, DEMNUM, DEMLIN, DEMSEQ, DWIPTYP indique l'encours de demande concerné
- [M:MLIK]RESSTYP, RESSNUM, RESSLIN, RESSSEQ, RWIPTYP indique l'encours de ressource concerné
- [M:MLIK]MAJCOD indique le type de traitement
C | Création d'une nouvelle affectation |
M | Modification d'une affectation |
A | Suppression d'une affectation |
P | Proposition de nouvelles affectations générées selon la règle d'affectation de l'article-site |
Z | Raz des affectations associées à une ressource ou une demande |
E | Entrée d'une ressource |
Dans le tableau ci-dessous, le flag contenu significatif signifie que le contenu est en phase avec le contexte (…).
Table | Abréviation | Contenu significatif | Intitulé Table |
MTOLINK | MLK1 | Oui | Affectations |
ORDERS | ORDB | Non | Encours |
PARMTO | PTO | Oui ssi [M:MLIK]MAJCOD="P" ou "E" | Règles d'affectation |
Ce point d’entrée permet de prendre la main avant la suppression d'un enregistrement d'affectation de la table MTOLINK.
Il y a une transaction en cours.
Pour annuler la transaction s’il y a un problème, il faut positionner la variable GOK à 0.
Le buffer [F:MLK1] est chargé au moment de l’appel du point d’entrée. L'appel est fait au sein d'une boucle For [MLK1].
La classe écran [M:MLIK] est chargée avec les paramètres d'appel au traitement MTOLINKLIB :
- [M:MLIK]STOFCY et [M:MLIK]ITMREF indique l'article-site concerné
- [M:MLIK]DEMTYP, DEMNUM, DEMLIN, DEMSEQ, DWIPTYP indique l'encours de demande concerné
- [M:MLIK]RESSTYP, RESSNUM, RESSLIN, RESSSEQ, RWIPTYP indique l'encours de ressource concerné
- [M:MLIK]MAJCOD indique le type de traitement
C | Création d'une nouvelle affectation |
M | Modification d'une affectation |
A | Suppression d'une affectation |
P | Proposition de nouvelles affectations générées selon la règle d'affectation de l'article-site |
Z | Raz des affectations associées à une ressource ou une demande |
E | Entrée d'une ressource |
Dans le tableau ci-dessous, le flag contenu significatif signifie que le contenu est en phase avec le contexte (…).
Table | Abréviation | Contenu significatif | Intitulé Table |
MTOLINK | MLK1 | Oui | Affectations |
ORDERS | ORDB | Non | Encours |
PARMTO | PTO | Oui ssi [M:MLIK]MAJCOD="P" ou "E" | Règles d'affectation |
Ce point d’entrée permet de prendre la main à l'entrée d'une ressource (réception ou déclaration de production) pour gérer de façon spécifique l'allocation des demandes affectées à la ressource.
Il y a une transaction en cours.
Pour annuler la transaction s’il y a un problème, il faut positionner la variable GOK à 0.
La classe écran [M:MLIK] est chargée avec les paramètres d'appel du traitement MTOLINKLIB :
- [M:MLIK]STOFCY et [M:MLIK]ITMREF indique l'article-site concerné
- [M:MLIK]RESSTYP, RESSNUM, RESSLIN, RESSSEQ, RWIPTYP indique l'encours de ressource concerné
- [M:MLIK]LIKQTY indique en unité de stock la quantité de ressource entrée
- [M:MLIK]MAJCOD indique le type de traitement et vaut "E" pour Entrée de ressource
- [M:MLIK]TRTNAM vaut "MTKMTOLIB" pour une décalration de production, "PURMTOLIB" pour un réception
Un tableau des NDEM demandes (TDEM_OFF, TDEM_TYP, TDEM_NUM, TDEM_MTO, TDEM_DAT) affectées à la ressource entrée est constitué et trié selon TDEM_OFF :
TDEM_TYP,TDEM_NUM,TDEM_DAT : type no et date de fin de l'encours de la demande
TDEM_MTO : qté affectée entre la demande et la ressource
TDEM_OFF : ordre de tri pour la demande, calculé selon les paramètres de priorisation des demandes de la règle d'affectation
En standard, le traitement est le suivant :
WREQQTY = [M:MLIK]LIKQTY : WCOVQTY = 0
For I=0 to NDEM-1
Lecture de l'encours de la demande(I)
Gosub FILL_LINKD : # Affectation de [M:MLIK]DEMTYP, DEMNUM, DEMLIN, DEMSEQ, DWIPSTA, DWIPTYP selon l'encours
[M:MLIK]LIKQTY = min(TDEM_MTO(I), WREQQTY-WCOVQTY)
Gosub MAJ_MTO_ALLOCATION From =[M:MLIK]TRTNAM : # Allocation basée sur l'affectation
WCOVQTY += [M:MLIK]LIKQTY
Maj de l'encours de la demande(I) avec qté affectée -= [M:MLIK]LIKQTY
If [M:MLIK]LIKQTY = TDEM_MTO(I)
Gosub MTOLINK_DEL : # Suppression de l'affectation entre la ressource et la demande(I)
Else
[M:MLIK]LIKQTY = TDEM_MTO(I) - [M:MLIK]LIKQTY
Gosub MTOLINK_MOD : # Modification de l'affectation entre la ressource et la demande(I)
Endif
If WCOVQTY >= WREQQTY : break : Endif
Next I
Maj de l'encours de la ressource avec qté affectée -= WREQQTY
Positionner la variable globale GPE à la valeur 1 pour inihiber ce traitement standard
Dans le tableau ci-dessous, le flag contenu significatif signifie que le contenu est en phase avec le contexte (…).
Table | Abréviation | Contenu significatif | Intitulé Table |
MTOLINK | MLK1 | Non | Affectations |
ORDERS | ORDB | Non | Encours |
ITMFACILIT | ITF | Oui | Articles-Sites |
PARMTO | PTO | Oui | Règles d'affectation |