API RF SCE_GP_005

  Version ACE : 1.3

Package : Standard

gnc_up_colisdec_rechercher

Fonctionnalité : Préparation
Schémas d’entrée et de sortie : voir en fin de document.

Cette API permet de rechercher le produit scanné dans l’OP en cours.

API imbriquées : gnc_up_colisdec_gerer (voir en fin de document) -

Contraintes et limites de fonctionnement (hors périmètre)

RAS.

Paramétrage (PPE)

MULEAN -

Processus, contrôles et règles de gestion

ETAPE DESCRIPTION DU PROCESSUS
Traitement
  • Retrouver le code produit à partir du scanpro :
  • Lire la table PRO avec le code produit (16 car)
  • Si n’existe pas et longueur du champ <= 13 :
  • Lire la table PRO avec le gencod
  • Sinon (ou si n’existe pas)
  • Lire la table PRL avec dun14 (14 car)
  • Si paramètre MULEAN positionné avec A1 = ‘O’ et prl.codva1 = ‘MG’
  • Lire la table PRL avec :
  • Dépôt
  • Codpro = w_prl.codpro
  • codva1 = ‘00’
  • codva2 = w_prl.codva2_l
  • cntcod = w_prl.cntcod_l

si ok prendre le code produit

  • sinon si même dépôt, prendre le code produit

Si pas de code produit correspondant : erreur (message ‘L_PROINC’, paramètre champ scan)

  • T3 : rechercher le mvt correspondant au code produit, dans l’OP :
    • Rechercher un enregistrement dans la table LMVTSTK :
      • critères sur LMVTSTK
        • typtie
        • sigtie
        • idord = idop
        • codpro
        • typmvt = ‘S’
        • sensmvt = ‘S’
  • si pas trouvé et p_qteunt > 0 : insérer ou modifier enregistrement dans la table LUPCTL, statut ‘3’ (voir ci-dessus). Ce qui change :
    • flgtrt = 2 (colisage déclaratif)
    • idobjcol = ‘ ‘
    • idmvt = idop
  • si pas trouvé et qteunt = 0, retourner le code produit et message ‘ce produit n’appartient pas à l’UP
  • si trouvé
    • vérifier que le mouvement et l’UP en cours corresponde au même OL ou client :
      • si lmvtstk.idol = lcol.idol : ok
      • sinon
        • lire la table LOLE avec lmvtstk.idol
        • lire le mode de préparation de l’OL (lole.modprp)
        • si lmodprp.multiol <> ‘1’ , erreur ‘colisage multi OL interdit’, fin API
        • sinon si lole.sigdest <> lcol.sigliv ou lole.typdest <> lcol.typdest ou lole.numadr <> lcol.numadr : erreur ‘tiers différent’, fin API
  • vérifier que le mouvement n’ait pas déjà été recolisé (uniquement si le mouvement est validé : lmvtstk.statut = ‘9’)
    • lire le mouvement d’entrée associé
    • lire l’objet associé au mvt d’entrée
    • lire lcol avec lobjstk.idobjpere
    • si lcol.flgtemp <> ‘1’
      • retourner en T3
      • si plus de mvt : erreur : ‘le mouvement a déjà été recolisé’, fin API
  • si p_qteunt = 0
    • si lmvtstk.qteunt > 1, retourner le code produit et la quantité (lmvtstk.qteunt)
    • si lmvtstk.qteunt = 1, appeler gnc_up_colisdec_gerer pour le mvt et quantité 1, fin API.
  • si p_qteunt > 0
    • si p_qteunt <= lmvtstk.qteunt : appeler gnc_up_colisdec_gerer pour le mvt et la quantité passée en paramètre, fin API
    • si p_qteunt > lmvtstk.qteunt :
      • appeler gnc_up_colisdec_gerer pour le mvt et p_qteunt
      • enlever la quantité traitée à la quantité passée en paramètre, retourner en T3.

Paramètres en entrée

NOM DESCRIPTION FORMAT OBLIGATOIRE/FACULTATIF
Typdep Type dépôt Char (3) O
Sigdep Sigle dépôt Char (12) O
Idop OP Long O
scanpro Code produit ou GENCOD ou DUN14 Char (30) O
Idobjcol Id UP en cours Char (18) O
Qteunt Quantité en unités Long O

Paramètres en sortie

NOM DESCRIPTION FORMAT
codpro Code produit Char (16)
Qteunt Quantité en unités long

Détail de l’API « gnc_up_colisdec_gerer »

Cette API n’est pas appelée directement par egx

Paramètres entrée :

Nom Description Format

Obligatoire/

Facultatif

Typdep Type dépôt Char (3) O
Sigdep Sigle dépôt Char (12) O
Idmvt N° mouvement Long O
Idobjcol N° d’UP en cours Char (18) O
Qteunt Quantité à valider en unités Long O

Paramètres sortie :

Nom Description Format
     

Traitement :

Attention : La quantité doit correspondre à un nombre entier de contenant de l’objet

w_ret = gnc_poids_vol_stk (p_mvt, NULL, &w_objst);

w_obj.poids-= w_objst.poids;

w_obj.volume-= w_objst.volume;

w_obj.poidsreel-= p_mvt->poidsreel;

(R1)

Eclatement d’objet et mouvement :

Si l’objet et les mouvements doivent être éclatés, l’objet du mouvement SS ne change pas, par contre on aura un nouveau n° d’objet pour le reliquat et le mouvement ES créé portera ce n° d’objet

Exemple :

1) si objet initial de 10 unités, quantité scannée = 8 unités :

a. modifier la quantité de l’objet : qteunt = l_nbrnct = 8

b. modifier la quantité des mouvements SS et SE initiaux

c. créer un nouvel objet avec : qteunt = l_nbrcnt = 2 (avec idobjcol initial)

d. créer 2 nouveaux mouvements SS et SE pour la quantité restante

  Idobj Cnttyp Cntcod Qteunt L_nbrcnt codlnst idmvt
Objet contenu Idobj1 UV C 10 10 ‘1’  
Mvt SS Idobjpic UV C 10 10 ‘1’ 1
Mvt ES Idobj1 UV C 10 10 ‘1’ 1

Après éclatement on aura

  Idobj Cnttyp Cntcod Qteunt L_nbrcnt Codlnst idmvt
Objet contenu Idobj1 UV C 8 8 ‘1’  
Mvt SS Idobjpic UV C 8 8 ‘1’ 1
Mvt ES Idobj1 UV C 8 8 ‘1’ 1

Objet contenu

Idobj2 UV C 2 2 ‘1’  
Mvt SS Idobjpic UV C 2 2 ‘1’ 2
Mvt ES Idobj2 UV C 2 2 ‘1’ 2

2) si objet initial de 3 Cartons : 1 carton = 5 unités, quantité contrôlée = 10 unités

a. vérifier que la quantité contrôlée soit bien un multiple de 5 unités

b. modifier la quantité de l’objet : qteunt = 10, l_nrbcnt = 2

c. modifier la quantité des mouvements SS et SE initiaux

d. créer un nouvel objet avec : qteunt = 5, l_nbrcnt = 1

e. créer 2 nouveaux mouvements SS et SE pour la quantité restante

  Idobj Cnttyp Cntcod Qteunt L_nbrcnt codlnst idmvt
Objet contenu Idobj1 CA 01 15 2 3  
Mvt SS Idobjpic CA 01 15 2 3 1
Mvt ES Idobj1 CA 01 15 2 3 1

Après éclatement on aura

  Idobj Cnttyp Cntcod Qteunt L_nbrcnt Codlnst idmvt
Objet contenu Idobj1 CA 01 10 2 3  
Mvt SS Idobjpic CA 01 10 2 3 1
Mvt ES Idobj1 CA 01 10 2 3 1

Objet contenu

Idobj2 CA 01 5 1 3  
Mvt SS Idobjpic CA 01 5 1 3 2
Mvt ES Idobj2 CA 01 5 1 3 2