Aller directement à la fin des métadonnées
Aller au début des métadonnées

Vous regardez une version antérieure (v. /wiki/spaces/PAI/pages/11443044392/Gestion+de+stock+et+r+servations) de cette page.

afficher les différences afficher l'historique de la page

« Afficher la version précédente Vous regardez la version actuelle de cette page. (v. 3) afficher la version suivante »

Cette documentation n’a pas fait l’objet d’un actualisation récente, et nécessite donc une adaptation aux évolutions, mais reste utile en l'état

1    Manipulation des listes

1.1  Définitions

1.1.1               Les listes

 

Une liste est une suite d’informations stockée en mémoire. Le nombre d’élément d’une liste n’est, en théorie, pas limité.

 

Deux types de liste peuvent être distingués :

  • Depuis chaque élément d’une liste, il est possible d’atteindre l’élément suivant : La liste est alors dite en chaînage simple.

  • Depuis chaque élément d’une liste, il est possible d’atteindre l’élément suivant ou l’élément précédent : La liste est alors dite en chaînage double.

 

Diva intègre un ensemble de fonctions permettant de gérer des listes à double chaînage. Diva autorise également une gestion de liste dont les éléments sont implicitement triés.

 

Une liste est identifiée par un ticket.

 

Le dernier élément lu dans la liste est appelé l'élément courant. Par défaut, les insertions se font par rapport à cet élément courant.

 

image-20240903-092327.png

1.1.2               Accès aux éléments

 

Les fonctions de gestion des listes de Diva permettent de lire, d’insérer, de modifier, de supprimer les éléments d’une liste. Ces opérations s’effectuent comme illustrées ci-dessous :

 

image-20240903-092356.png

1.1.3               Adresse et rang d’un élément

 

Chaque élément d’une liste est stockée en mémoire. L’accès direct à l’élément peut être effectué grâce à l’adresse en mémoire de celui-ci, ou bien grâce à son rang.

 

 Lorsqu’une liste est gérée en tri automatique (implicite), alors les rangs et les adresses d’un élément peuvent varier à l’insertion ou à la modification d’un élément. Il conviendra d’utiliser les fonctions de recherche par rapport aux critères de tri pour trouver un élément précis.

 

image-20240903-092431.png

1.2  Instructions DIVA

1.2.1               Déclarations

 

Les données gérant les listes sont de type L : ticket, adresse, rang.

 

       1          idlist                 L   ; ticket de liste

 

1.2.2               Instructions

Les principales instructions de gestion de liste sont classées dans les tableaux ci-dessous :

 

Manipulations globales

Rôle

Syntaxe

Description

Création

Ticket = ListCreate

Créé une nouvelle liste

Destruction

ListDestroy(ticket)

Supprime une liste.

Les listes sont détruites automatiquement en fin de programme.

Effacement

ListErase(ticket)

Efface tous les éléments de la liste.

Comptage

Nbr = ListCount(ticket)

Retourne le nombre d’éléments dans la liste.

Tri

ListMode(ticket, mode, adr)

Activation/Désactivation d’un tri automatique. Adr correspond à l’adresse de la fonction de tri.

 

ListSort(ticket, adr)

Tri d’une liste.

 

 

Lecture et recherche dans la liste

Rôle

Syntaxe

Description

Positionnements

ListBegin(ticket)

Se positionne en début de liste. Aucun élément n’est pointé.

 

ListEnd(ticket)

Se positionne en fin de liste.

 

ListGetAdressCurrent(ticket)

Retourne l’adresse de l’élément courant.

 

ListSetAdressCurrent(ticket, adr)

Positionne l’adresse de l’élément courant.

 

ListNumber(ticket)

Délivre le rang de l’élément courant.

 

ListIndex(ticket, elem, rang)

Positionne l’élément courant au rang spécifié.

Lectures et recherches

ListCurrent(ticket, elem)

Délivre l’élément courant

 

ListFind(ticket,...)

Recherche un élément dans une liste non triée.

 

ListSearch(ticket,…)

Recherche approximative d’un élément dans une liste triée.

 

ListSeek(ticket, …)

Recherche dans une liste triée.

 

ListFirst(ticket, elem)

Lecture du premier élément d’une liste.

 

ListNext(ticket, elem)

Lecture de l’élément suivant

 

ListLast(ticket, elem)

Lecture du dernier élément d’une liste

 

ListPrevious(ticket, elem)

Lecture de l’élément précédent

 

 

Modifications dans la liste

Rôle

Syntaxe

Description

Création

ListAdd…(ticket, elem)

Ajout d’un élément en début/fin de liste ou avant/après l’élément courant

 

ListInsert(ticket, elem)

Ajout d’un élément. A utiliser lorsque le tri est automatique.

Modification

ListModify(ticket, elem)

Modification de l’élément courant par le contenu de “elem”.

Suppression

ListDelete(ticket, ...)

Permet de supprimer un ou n éléments dans la liste.

 

 

  Lecture d’un fichier avec insertion dans une liste. Tri de la liste puis lecture de la liste triée :

 exemple1.hdsp

public hfile  gtfdd.hsd gtfent gtfent ; Fichier des entêtes

public record gtfdd.hsd ent                                              ; Entête de pièce

 

1                      tic                     L                      ; Ticket

1                      adrtri   16                      ; Adresse de la fonction de tri

1                      dos                   >gtfdd.hsd  dos ; Code dossier

 

1                      clemin   256

1                      clemax   256

 

;*

function long TriPieces(&a, &b)

; Fonction de tri de deux en-têtes

record gtfdd.hsd ent a

record gtfdd.hsd ent b

 

beginf

            freturn(Sortcompare(a.salcod, b.salcod))

endf

 

main

            tic = ListCreate

            GetAdressFunction(" ", "TriPieces", adrtri)

            ListMode(tic, 1, adrtri)                ; Tri automatique

 

            dos = 998                                  ; Dossier démo Papyrus

            clemin = [ "G" dos "C2" ]             ; Commandes actives

            clemax = [ "G" dos "C2" $FF ]

            gtfent.key = clemin

            do while hread(gtfent, ent) = 0 and gtfent.key < clemax

                        ListInsert(tic, ent)

            wend

 

            ListBegin(tic)

            do while ListNext(tic, ENT) not in (0, -1)

                        ; ... Traitement d'une en-tête

            wend

 

 

1.3  L’objet tableau

1.3.1               Généralités

 

L’objet graphique tableau d’Harmony s’appuie sur une liste pour gérer les lignes du tableau. La manipulation de la liste d’un objet tableau s’effectue comme une liste normale, mais avec un jeu d’instruction spécifique.

 

 XmeListAddEnd(ticket, elem) remplace ListAddEnd(ticket, elem).

 

1.3.2               Eléments complémentaires

 

En plus de la gestion de l’élément courant et du nombre d’éléments, une liste d’un objet tableau gère :

 

  • l’offset qui représente le rang du premier élément affiché dans le tableau à l’affichage,

  • le nombre d’éléments affichés à l’écran,

  • l’ascenseur vertical,

  • la gestion en consultation, saisie,... de l’objet tableau.

 

1.3.3               Manipulation d’un objet tableau

 

La liste d’un objet tableau est créée automatiquement par l’objet lui-même. Un tableau est identifié par les caractéristiques suivantes :

 

  • Le masque écran qui contient l’objet,

  • Le numéro de la page du masque,

  • Le nom du tableau (voir les caractéristiques d’un objet tableau).

 

La fonction XmeListGetId retourne le ticket qui permet la manipulation de l’objet tableau.

 Le ticket retourné est de type Long (L).

 

1.4  Atelier

1.4.1               Mise en place du projet de surcharge

 

Créer une nouvelle arborescence dans le répertoire \har :

 

\har\expert \src

                   \prj

                   \obj

                   \fic

 

Dupliquer les fichiers de Divalto dans le sous-répertoire fic.

 

Créer un profil de surcharge dans le projet standard Divalto Achat-Vente.

Créer un utilisateur ayant tous les droits et accès à toutes les applications.

Dupliquer les fichiers menus et zooms.

 

1.4.2               Sous-projet « Liste article »

 

Créer un nouveau sous-projet : Liste article

 

Créer un masque écran (exlstart.hse) comprenant :

 

  • Un objet tableau (lstart),

  • Dans le tableau, afficher les colonnes de l’enregistrement article : ref, des, infos des compteurs de stock,

  • Une barre d’outil contenant les boutons Zoom généralisé, Abandon, un bouton tri par code, un bouton tri par stock.

 

Créer un programme (exlstart.hsp) :

 

  • Mettre en place le programme dans le menu Fichier de Divalto Achat-Vente.

  • Récupérer les données du menu (pingreceive de MZ).

  • Lire les articles du dossier courant et alimenter la liste de l’objet tableau.

  • Afficher la page et programmer une boucle de consultation de la liste (xmelistconsult).

  • Inhiber les actions de création, suppression, modification dans la liste.

  • Programmer le fonctionnement des boutons :

a)    Zoom généralisé

b)    Tri par code

c)    Tri par stock

 

2    Les listes de la saisie de pièce

2.1  Généralités

 

Dans Divalto, lorsqu’un programme gère des listes comme une saisie de pièce ou encore un programme d’interrogation article ou tiers, il utilise une donnée de l’enregistrement XT pour stocker le ou les tickets des listes.

 

Dans Divalto Achat-Vente, XT est manipulé par la variable d’instance G3XT. L’enregistrement XT contient une donnée IDTABLEAU de type L qui est un tableau de 50 tickets. Chaque programme utilise librement ces tickets.

 

En saisie de pièce, plusieurs listes sont gérées. Les trois listes les plus importantes sont :

 

No

Contenu

1

Liste des lignes de la pièce

2

Liste de toutes les ventilations de la pièce

3

Liste des ventilations de la ligne courante

 

La colonne No donne l’indice du ticket dans le tableau G3XT.IDTABLEAU(indice).

 

2.2  Description des listes

2.2.1               Liste des lignes

 

Ticket : G3XT.IDTABLEAU(1)

 

Ce ticket manipule l’objet tableau des lignes de la pièce. Les instructions qui manipulent cette liste sont donc de type XmeList...

 

L’enregistrement manipulé par la liste est G1T1. Il intègre toutes les données d’une ligne :

 

  • MOUV

  • Informations de gestion de l’arbre (TREEINFO)

  • Données de travail pour la ligne (non sauvegardées dans la table MOUV).

 

2.2.2               Liste des ventilations des lignes

 

Ticket : G3XT.IDTABLEAU(2)

 

Ce ticket gère la liste de toutes les ventilations des lignes de la pièce. Les instructions manipulant cette liste sont de type List...

 

L’enregistrement manipulé par la liste est G1T2. Il intègre toutes les données d’une ventilation :

 

  • MVTL

  • Données de travail pour la ventilation (non sauvegardées dans la table MVTL).

 

 

La liste est triée par : numéro chrono de la ligne (ENRNOV) + numéro chrono de la ventilation (VTLNO2). Ces deux données seront détaillées plus loin.

2.2.3               Liste des ventilations de la ligne courante

 

Ticket : G3XT.IDTABLEAU(3)

 

Ce ticket manipule l’objet tableau des ventilations de la ligne courante de la pièce. Les instructions qui manipulent cette liste sont donc de type XmeList...

 

L’enregistrement manipulé par la liste est G1T2. Il intègre toutes les données d’une ventilation :

 

  • MVTL

  • Données de travail pour la ventilation (non sauvegardées dans la table MVTL).

 

Lorsqu’une ligne devient la ligne courante, la liste de l’objet tableau (no 3) est chargée à partir de la liste des ventilations des lignes (no 2).

Lorsque les modifications de la ligne sont validées, les ventilations de l’objet tableau (no 3) sont transférées dans la liste des ventilations de la ligne (no 2).

 

2.2.4               En-tête de pièce

 

Les données de l’en-tête et du pied de la pièce sont directement gérées par l’enregistrement ENT.

La table est complétée par un enregistrement de travail G1 qui contient les données nécessaires pendant la phase de saisie.

 

Numérotations en phase de saisie

 

En phase de saisie de pièce, les lignes et les ventilations des lignes sont numérotées par des chronos temporaires.

 

G1.ENRNOV contient le dernier numéro chrono affecté à une ligne. Chaque ligne contient sont chrono dans la donnée G1T1.ENRNOV.

 

Chaque ligne contient dans la donnée G1T1.VTLNO2 le dernier numéro chrono affecté aux ventilations de cette même ligne.

 

Chaque ventilation est liée à sa ligne par le numéro chrono de la ligne G1T2.ENRNOV. Elle contient dans la donnée G1T2.VTLNO2 son propre numéro de chrono.

 

La liste des ventilations de toutes les lignes de la pièce est triée sur les champs G1T2.ENRNOV et G1T2.VTLNO2. Ce tri permet un accès direct aux ventilations.

 

 

2.3  Fonctions de gestion de liste standard.

 

Pendant la saisie de pièce, le moteur standard balaye les listes à divers moments. Dans la plupart de ces traitements des points d’accès sont fournis en début, pendant et en fin de traitement.

 

2.3.1               Fonctions de récapitulation

 

Elles sont appelées lorsque l’utilisateur accède au pied de la pièce ou demande un récapitulatif. Elles sont décrites dans le module de gestion de pièces surchargeable gttmpce.hop.

 

 

Piece_Recap_Init(mode,ticod,picod,chgttaux)

 

Cette procédure est appelée en début de récapitulatif. Elle permet l’initialisation des données de cumul.

 

Mode               Permet de tester l’état de la pièce (création, modification)

Ticod               Type de tiers

Picod               Type de pièce

Chgttaux          Permet de demander le chargement des taux de TVA (si true)

 

 

Piece_Recap_Cumul(&MOUV,EnregArt,ticod,picod)

 

Cette procédure est appelée pour chaque ligne de la pièce.

 

MOUV               Contient les données de la ligne courante.

EnregArt          Si true, la procédure standard utilise les données de ART (poids, volume...) sinon celles de G1T1.

Ticod                Type de tiers.

Picod                Type de pièce.

 

 

Piece_Recap_Fin(mode,ticod,picod)

 

Cette procédure est appelée à la fin de la boucle de lecture

 

Mode               Permet de tester l’état de la pièce (création, modification)

Ticod               Type de tiers

Picod               Type de pièce

 

 

2.3.2               Atelier

 

En saisie de commande client, compter en pied de pièce les différents numéros de colis saisis dans les ventilations.

 

Principe :

 

Insérer dans une liste triée par numéro de colis, tous les numéros trouvés. Attention, les fonctions de récap travaillent sur les lignes, il faut donc dans la procédure de cumul lire les ventilations de la ligne en cours (G1T1). En fin de récapitulatif, affecter le nombre de colis à la donnée ENT.COLINB.

 

 

2.3.3               Procédures de mise à jour

 

Lorsque la pièce est enregistrée dans les fichiers, les listes des lignes et leurs ventilations sont lues.

 

Deux procédures sont appelées au moment de ce balayage :

 

G1T1_LecturePourMaj_Ap

 

Appelée lorsqu’une ligne est mise à jour dans GTFAM.

 

G1T2_LecturePourMaj_Ap

 

Appelée lorsque la ventilation est mise à jour dans GTFVTL.

 

 

2.3.4               Cumuls dans les Chapitres, les postes et les décompositions

 

 

Le principe de gestion des données dans les procédures de cumul dans les chapitres, postes et décompositions est le suivant :

 

  • Dans la procédure d’initialisation, G1T1 contient les informations du chapitre, poste ou composé.

  • Dans la procédure de cumul, G1T1 contient les informations des articles liés.

  • Dans la procédure de mise à jour, G1T1 contient à nouveau les informations du chapitre, poste ou composé.

 

Pour réaliser un cumul spécifique, il faut donc obligatoirement travailler avec des variables intermédiaires puisqu’en phase de cumul, un seul G1T1 est accessible.

 

 

Pour les chapitres et les postes, trois procédures sont disponibles :

 

Chapitre_Poste_Init

 

Chapitre_Poste_Cumul

 

Chapitre_Poste_Maj

 

 

Pour les décompositions, le principe est le même, trois procédures sont disponibles pour réaliser des cumuls complémentaires.

 

Composant_Init

 

Composant_Cumul

 

Composant_Maj

 

2.3.5               Modifications globales

 

Lorsque l’utilisateur utilise la fonction de modification globale qui permet de répercuter des données dans les lignes sélectionnées, le programme de saisie de pièce lit la liste des lignes et celle des ventilations des lignes.

 

 

G1T1_Modification_Globale

 

Cette procédure permet de modifier les informations des lignes.

 

G1T2_Modification_Globale

 

Cette procédure permet de répercuter les informations dans les ventilations des lignes sélectionnées.

 

 

2.3.6               Cumuls des ventilations vers la ligne

 

Lorsque l’utilisateur valide une ligne, les ventilations de la ligne sont relues (pour la mise à jour de la liste G3XT.IDTABLEAU(2)). Dans cette phase du programme de saisie de pièce, il est possible d’intervenir pour réaliser des cumuls d’informations des ventilations vers la ligne.

 

Ventilation_PourMaj_Ligne_Init

 

Cette procédure permet l’initialisation de données dans G1T1.

 

Ventilation_PourMaj_Ligne_Cumul

 

Cette procédure permet de réaliser des cumuls de G1T2 vers G1T1.

 

 

2.3.7               Fonctions de contrôle

 

Lorsque l’utilisateur souhaite valider la création ou la modification d’une pièce, un contrôle préalable est réalisé à tous les niveaux de la pièce :

 

  • L’en-tête,

  • Les lignes

  • Les ventilations des lignes.

 

A chaque niveau, il est possible de bloquer la validation ou non selon certains critères.

En effet, les fonctions d’ouvertures doivent retourner soit O pour autoriser la validation, soit N pour l’interdire.

 

Ent_Controle_Fin

 

Permet d’interdire la validation de la pièce lors du contrôle des données de l’en-tête.

 

G1T1_Controle_Fin_Sortie

 

Est une fonction appelée pour contrôler une ligne dont le sens est la sortie (2).

 

G1T1_Controle_Fin_Entree

 

Est une fonction appelée pour contrôler une ligne dont le sens est l’entrée (1).

 

G1T2_Controle_Fin_Sortie

 

Est une fonction appelée pour contrôler une ventilation dont le sens est la sortie (2).

 

G1T2_Controle_Fin_Entree

 

Est une fonction appelée pour contrôler une ventilation dont le sens est l’entrée (1).

 

 

2.3.8               Atelier

 

Réaliser une surcharge qui met à jour le pied de pièce en temps réel, après la validation d’une ligne.

 

2.4  Création de lignes et ventilations de lignes

 

2.4.1               Pendant la saisie d’une ligne

 

Pendant la phase de saisie des lignes, il est possible d’insérer des ventilations automatiquement par un traitement spécifique.

 

Par exemple, dans la fonction G1T1_Ligne_Validation_Av il est possible de modifier le tableau des ventilations de la ligne courante. L’identifiant de cette liste est G3XT.IDTABLEAU(3).

 

Lorsque l’on travaille avec cette liste, il faut respecter les éléments suivants :

 

  1. Partir d’un G1T2 déjà présent dans la liste pour obtenir les valeurs par défaut de la plupart des champs (grref, depo,...).

  1. Il est inutile de s’occuper du numéro chrono vtlno2, enrnov..., ces données sont attribuées au moment du transfert de la liste dans la liste de toutes les ventilations.

  1. Il faut réinitialiser certaines données : CLE, VTLNO, VTLNA, ENRNO qui ne sont renseignées que lorsque la ventilation a été créée par le chargement d’une pièce en mémoire.

  1. Il faut veiller à aligner QTE et REFQTE. Utiliser les fonctions de conversion pour calculer l’une par rapport à l’autre.

  1. Il faut recalculer les quantités de la ligne, et recalculer le montant de la ligne (calculer_ht) et le prix unitaire statistique (calculer_pustat).

 

2.4.2               Pendant la saisie de pièce, hors saisie de ligne

 

Lorsque le programme de saisie de pièce n’est pas en phase de saisie de ligne, il est possible d’insérer des lignes automatiquement, ainsi que des ventilations.

 

Les listes manipulées sont la liste des lignes (1) et celle de toutes les ventilations (2).

 

Insertion de ligne

 

Lorsque l’on insère un G1T1 dans la liste, il faut gérer les chronos techniques.

 

S’attribuer un nouveau numéro par G1.ENRNOV ++ et affecter ce numéro à G1T1.ENRNOV

Mettre à zéro le chrono des ventilations de la ligne (G1T1.VTLNO2 = 0). Celui-ci sera incrémenté pour chaque ventilation à insérer.

 

Mettre à zéro les informations à ne pas reprendre de la ligne (G1T1) qui a servi de modèle :

CLE, ENRNO, informations des notes, des textes...

Les quantités et coût totaux devraient aussi être initialisés à 0, ils seront recalculés par la somme des quantités des ventilations.

 

Calculer les prix, les remises, les montants et les coûts de la ligne :

 

  • Recherche_famille_tarif_vente_G1T1...

  • Recherche_re....

  • Calculer_HT

  • Calculer_PUSTAT

  • Cout_Saisie_Sortie_G1T1 (Cout_Saisie_Entree_G1T1)

 

Le coût de revient et le cmp qui sert de base pour les ventilations est stocké dans G1T1.CR et G1T1.CMP. Ces deux champs ne sont pas stockés dans MOUV.

 

Insérer la liste par une instruction XmeListAddAfter (ou insert).

 

Insertion des ventilations de la nouvelle ligne

 

Générer les ventilations une à une pour chaque ligne à insérer. La ventilation est liée à sa ligne en reprenant G1T1.ENRNOV :

 

G1T2.ENRNOV = G1T1.ENRNOV

G1T1.VTLNO2 ++

G1T2.VTLNO2 = G1T1.VTLNO2

 

Initialiser ou réinitialiser les données de la ventilation modèle :

Cle, vtlno, enrno

 

Calculer QTE depuis refqte ou inversement.

Affecter le CR unitaire par :

 

            G1T2.CR = G1T1.CR, idem pour le CMP

 

Incrémenter les quantités dans les lignes ainsi que les totaux CR et CMP :

 

            G1T1.CDQTE += G1T2.QTE

            G1T1.REFQTE += G1T2.REFQTE

            G1T1.CRTOTMT += G1T2.REFQTE * G1T2.CR

            G1T1.CMPTOTMT += G1T2.REFQTE * G1T2.CMP

 

Insérer la ventilation dans la liste par une instruction ListInsert (obligatoirement).

Lorsque les réservations sont gérées, il faut générer celles-ci (voir plus bas) et remodifier la ventilation (ListModify).

 

Calculer ou recalculer les tarifs, montants de la ligne, puis modifier la ligne (XmeListModify) dans sa liste.

 

           

 

2.4.3               Atelier

 

Dans la fiche de référencement client, une quantité multiple et une cadence en jours sont ajoutées.

Lorsque l’utilisateur saisit une commande, il faut générer une cadence automatiquement selon la quantité donnée dans la ligne.

 

Exemple :

 

            Article cadencé sur 20 jours, avec une quantité multiple de 100.

 

En saisie de commande client, pour une quantité de 450, il faut générer 5 ventilations automatiquement :

 

            Délai    Qté

            J           100

            J+20    100

            J+40    100

            J+60    100

            J+80    50

 

 

 

 

3    La gestion du stock

 

 

3.1  Principe

 

Le stock de Divalto est géré par les ventilations d’entrée en stock.

Lorsqu’une pièce correspond à une entrée, les données relatives au stock sont gérées :

 

            STDT, la date du stock

 

Cette date correspond à la date du bl (bldt) en FIFO, à 99999999 – la date de bl en LIFO et est saisie par l’utilisateur en FEFO.

 

La date du stock est toujours incluse dans les champs des index sur le stock.

 

            STQTE, la quantité du stock

 

Cette quantité correspond initialement à REFQTE (qté livrée en unité de référence).

Lorsque des sorties vont déstocker une ventilation, sa quantité STQTE va petit à petit être décrémentée. Lorsqu’elle devient nulle, la ventilation ne fait plus partie du stock.

 

            CEA, indicateur de ventilation en stock ou pas.

 

Tant que STQTE n’est pas nulle, CEA contient 1. Les index sur le stock ont comme condition de validité CEA = « 1 ».

 

L’indicateur passe à espace lorsque STQTE devient nulle.

 

Le stock d’un article s’obtient en programmant une boucle de lecture du fichier des ventilations en exploitant les index sur le stock (clés O,P ou Q de GTFVTL). Dans cette boucle, STQTE doit être cumulé.

 

            VTLNO, numéro d’identification d’une ventilation

 

Une ventilation est identifiée de manière unique dans la base par son numéro VTLNO.

 

            VTLNA, numéro de ventilation associée

 

Lorsqu’une ventilation correspond à un flux de sortie BL, alors la donnée VTLNA contient le numéro de ventilation de l’entrée vers laquelle elle pointe.

 

3.2  Le module GTPMSTOC.HOP

 

Ce module centralise les différentes fonctions de gestion du stock. Ces fonctions utilisent des TDF déclarées en extern de même que des enregistrements externes. Ceci signifie que l’appel à ces fonctions entraîne la modification des positions courantes dans les fichiers gtfvtl et gtfres.

Le contenu des enregistrements MVTL et MRES est lui aussi modifié.

   Il faudra faire attention à sauvegarder ces données selon les cas.

 

  

Stock_Calculer_Quantite_EnStock(ref,sref1,sref2,depo,serie,nst,lieu,ToutStatus)

 

Cette fonction retourne la quantité en stock d’un article. Elle ne tient pas compte des entrées forcées, ni des réservations.

 

Les paramètres sont :

 

Ref       Référence

Sref1    Sous-référence 1

Sref2    Sous-référence 2

Depo    Code dépôt

Serie    Numéro de série ou de lot

Nst       Nature de stock

Lieu     Code emplacement

 

ToutStatus par défaut vaut false.

            Si true, alors toutes les ventilations du stock sont cumulées.

            Si false, seules les ventilations ayant un Status à 2 sont cumulées (contrôle qualité).

 

La fonction retourne la quantité en stock en unité de référence.

 

Stock_Calculer_Quantite_PourDestockage(ref,sref1,sref2,depo,nst,mode)

 

Cette fonction calcule la quantité qui peut être déstockée pour un article (au plus). Cette fonction déduit les réservations du stock.

 

La gestion des réservations doit être active pour que cette fonction puisse être exploitée. Dans le cas contraire, la fonction retourne « High-Value ».

 

Le paramètre mode permet de spécifier le type de réservation à prendre en compte :

 

0 (défaut),     affectés sur stock et non affectés

1,                  tous

2,                  non affectés uniquement

3,                  affectés sur stock uniquement

 

Stock_Entree_Forcee_Regulariser(ref,sref1,sref2,depo,serie,nst,lieu,ReserverStock,MaxiBldt)

 

La procédure Stock_Entree_Forcee_Regulariser permet d’appeler la fonction de régularisation pour un article, nature, no de série, dépôt, emplacement précis.

 

ReserverStock permet de spécifier s’il faut demander la réservation du stock de l’article (hshare) (si true) ou non (si false, défaut)

 

MaxiBlDt permet de spécifier une date limite de régularisation. Si elle n’est pas passée en paramètre, la date limite utilisée est G1T2.BLDT.

 

 

3.2.1               Atelier

 

Dans le programme de liste des articles, calculer la quantité en stock et l’ajouter dans les colonnes du tableau.

 

 

4    La gestion des réservations

 

4.1  Principe

 

Lorsque la gestion des réservations est activée, alors les programmes de saisie (et l’intégrateur) génère des enregistrements MRES dans le fichier GTFRES.

 

Une réservation est liée à sa ventilation par le numéro de ticket (ticketres) stocké dans la ventilation.

 

La réservation n’est générée que si l’indicateur STRES est à Oui lorsque l’utilisateur valide la ligne en saisie.

 

Dans MRES, le numéro de ticket est enregistré dans la donnée ticketress (numéro de ticket de sortie).

 

Le code enregistrement CE2 spécifie le type réservation :

1             affectée sur stock

2             non affectée

3             affectée sur commande

 

 

4.2  Réservations non affectées

 

Lorsque la réservation est non affectée, alors seules les ventilations de commande en sortie pointe sur des MRES.

 

Ceci signifie que pour calculer le stock net d’un article, il faut :

 

  • Calculer le stock sur GTFVTL,

  • Déduire les éventuelles entrées forcées

  • Déduire les réservations sur l’article.

 

Cette dernière déduction est à faire en lisant GTFRES.

 

4.3  Réservations affectées

           

Lorsque l’utilisateur affecte sa réservation, alors l’enregistrement MRES est lié par la donnée ticketress à la ventilation de sortie (commande client) et par la donnée ticketrese à la ventilation d’entrée.

 

Dans ces deux ventilations, c’est la même donnée ticketres qui contient le numéro.

 

Plusieurs enregistrements MRES peuvent avoir un même ticket sortie ou un même ticket entrée.

 

Ticket de sortie multiple

 

Cette situation se rencontre lorsqu’une seule ventilation de sortie pointe sur plusieurs entrées différentes.

 

Ticket d’entrée multiple

 

Une même entrée en stock peut être affectée par plusieurs ventilations de sortie différentes.

 

 

Calcul de la quantité réservée

 

Pour calculer la quantité réservée, il faut donc programmer une boucle qui cumule la quantité réservée RESQTE des MRES pour un même numéro de ticket.

 

La quantité RESQTE des ventilations n’est pas toujours synchronisée avec les réservations. Elle n’est qu’indicative et n’est jamais exploitée dans Divalto.

Les programmes d’actualisation des réservations ne maintiennent pas la donnée quantité réservée dans les ventilations lorsque la pièce est réservée.

 

4.4  Fonctions de gestion des réservations

 

Le module GTPMSTOC.HOP contient des fonctions et des procédures qui permettent la gestion des réservations par programme spécifique. Les fonctions utilisent les TDF et les enregistrements des réservations et des ventilations.

Il faut veiller à sauvegarder les clés courantes et le contenu des enregistrements (en particulier MVTL) avant l’appel aux fonctions et restaurer ces paramètres après.

 

4.4.1               Calculer la quantité en commande

 

Stock_Reservation_Calculer_Quantite_EnCde(ref,sref1,sref2,nst,depo,deldt,AvecReserver,enrno,etat)

 

Cette fonction retourne la quantité en portefeuille de commande pour un article, une nature de stock et un dépôt donnés.

 

Le délai permet de calculer la quantité pour une date précise.

 

Ref                   Référence

Sref1                Sous-référence 1

Sref2                Sous-référence 2

Nst                   Nature de stock

Depo                Code dépôt

Deldt                Délai (date)

AvecReserver   Si true on tient compte des quantités réservées, à false on ignore ces quantités

Enrno               Si renseigné, permet d’ignorer les ventilations ayant ce numéro ENRNO (numéro de rattachement au MOUV).

Etat                  Si renseigné, permet de filtrer sur l’état (CE4 de MVTL). 0 par défaut signifie tout état confondu.

 

4.4.2               Calculer les réservations d’un article

 

Stock_Reservation_Calculer_Quantite_Reserve(depo, ref,sref1,sref2,nst,mode)

 

Cette fonction retourne la quantité réservée pour un article. Elle lit directement GTFRES et des enregistrements MRES.

 

Depo                Code dépôt

Ref                   Référence

Sref1                Sous-référence 1

Sref2                Sous-référence 2

Nst                   Nature de stock

Mode               0 = Non affectés et affectés sur stock

                        1 = Tous

                        2 = Non affectés uniquement

                        3 = Affectés sur stock uniquement

 

4.4.3               Calculer les réservations pour un ticket

 

Stock_Reservation_Calculer_Existant(ticketres,sens,mode)

 

Cette fonction retourne la quantité réservée pour un ticket.

 

  • Si le ticket passé et le sens correspondent à une ventilation de sortie, la fonction retourne les réservations de cette sortie.

  • Si le ticket passé et le sens correspondent à une ventilation en entrée, alors la fonction retourne la quantité affectée sur ce stock ou commande en entrée.

 

Ticketres     Numéro de ticket

Sens           Sens de la ventilation (1=Entrée, 2=Sortie)

Mode           Utilisé si le sens est une sortie (2)

                   0 = toutes les réservations

                   1 = Réservations affectées sur stock

                   2 = Réservations affectées sur stock et non affectées

 

 

4.4.4               Réduire une quantité réservée affectée

 

Stock_Annuler_Qte_Reservation_Affecte(ticketres , qte)

 

Cette fonction diminue la quantité réservée par rapport au ticket passé. Elle retourne la quantité pour la mise à jour du compteur article.

 

Ticketres     Numéro de ticket

Qte              Quantité à libérer

 

4.4.5               Réduire une quantité réservée

 

Stock_Annuler_Qte_Reservation (ticketres , qte)

 

Cette fonction diminue la quantité réservée par rapport au ticket passé. Elle retourne la quantité pour la mise à jour du compteur article.

Elle commence par libérer les éventuelles réservations non affectées puis les affectées.

La libération entraîne une régularisation automatique des entrées forcées.

 

Ticketres     Numéro de ticket

Qte              Quantité à libérer

 

4.4.6               Annuler une réservation

 

Stock_Reservation_Annuler(ticketres,sens,ReserverStock,ReserverArt,ref,sref1,sref2,nst)

 

Cette fonction annule les réservations pour un ticket donné et un sens.

Pour un sens sortie, la fonction annule les réservations.

Pour un sens entrée, la fonction annule l’affectation. Ceci signifie qu’une affectation sur stock devient une réservation non affectée.

 

Ticketres          Ticket en entrée ou en sortie

Sens                1=Entrée, 2=Sortie

ReserverStock Si true, l’entité stock est réservée

ReserverArt     0 = Pas de réservation, 1=Réservation article, 2=Shift, 9 = pas de mise à jour des compteurs

Ref, sref1, sref2 et nst doivent être données en cas de réservation (stock, art) et mise à jour de compteur article.

 

4.4.7               Calcul du disponible

 

Stock_Reservation_Calculer_Disponible (Depo, Ref, Sref1 ,Sref2, Nst)

 

Cette fonction retourne la quantité disponible pour un article. Le traitement est une lecture du stock puis une déduction de la quantité réservée (Stock_Reservation_Calculer_Quantite_Reserve).

 

Depo                Code dépôt

Ref                   Référence

Sref1                Sous-référence 1

Sref2                Sous-référence 2

Nst                   Nature de stock

 

 

4.4.8               Générer une réservation non affectée

 

Stock_Reservation_Traiter_NonAffecte (&MVTL,ReserverStock,ReserverArt,refqteold)

 

Cette procédure génère une réservation non affectée attachée à MVTL passé en paramètre. La génération ne se fait que si MVTL.STRES vaut 2 (Oui).

 

MVTL                Ventilation qui demande une création de réservation

ReserverStock Si true, l’entité stock est réservée

ReserverArt     0 = Pas de réservation, 1=Réservation article, 2=Shift, 9 = pas de mise à jour des compteurs

Refqteold         Quantité déjà déstockée (pour ne pas réserver cette part).

 

MVTL est modifiée par la procédure. En retour, le numéro de ticket et la quantité réservée sont mis à jour dans l’enregistrement. Il faudra donc penser à réécrire l’enregistrement ou à modifier l’élément dans une liste.

 

Refqteold permet de limiter la quantité réservée. Elle doit contenir la part à ne pas réserver.

 

Cette fonction assure également la suppression des réservations si MVTL.STRES est à non (1).

 

4.4.9               Générer une réservation affectée

 

Stock_Reservation_Traiter_Affecte (&MVTL,ReservationType,Vtlno,ReserverStock,ReserverArt,refqte,refqteold)

 

Cette procédure permet de générer une réservation affectée entre la ventilation MVTL passée en paramètre et la ventilation d’entrée pointée par le numéro de ventilation vtlno.

 

La procédure est capable de générer des affectations sur stock (type = 1) et sur commande (type = 3).

 

MVTL                    Ventilation qui demande une création de réservation

ReservationType   1=sur stock, 3=Sur commande

Vtlno                    Numéro de ventilation de l’entrée à affecter

ReserverStock      Si true, l’entité stock est réservée

ReserverArt          0 = Pas de réservation, 1=Réservation article, 2=Shift, 9 = pas de mise à jour des compteurs

Refqte                  Quantité à réserver. Si nul, REFQTE de MVTL est pris en compte

Refqteold             Quantité déjà déstockée (pour ne pas réserver cette part).

 

 

4.4.10           Atelier

 

En saisie de commande client, pour un article géré en numéro de lot/série, générer une réservation affectée automatiquement à la validation d’une ligne (G1T1_Ligne_Validation_Ap).

 

Pour chaque ventilation de la ligne, cette génération ne se fait que si STRES est à 2 et qu’une réservation (non affectée) a pu être effectuée.

L’attribution du numéro doit se faire automatiquement selon la méthode de déstockage (FIFO).

 

Ces affectations sont réalisées après la validation de la ligne.

 

 

5    Le calcul des besoins

Le Calcul des besoins se déroule en deux phases :

 

La sélection et la génération d’un fichier de proposition (gtfcbn) qui contient des en-têtes et des lignes de détail.

 

BNProp pour les propositions, BNOri pour les origines des besoins et BNCal pour les besoins calculés.

Enfin, un enreg BNPar gère les paramètres de lancement d’un CBN.

 

Les enregs bnori et bncal sont liés à la proposition par des chronos :

  • CBnNo + BnCalNo pour retrouver les éléments BNCal d’une proposition.

  • CBnNo + BnOriNo pour retrouver les éléments BnOri d’une proposition.

 

Les propositions sont ensuite traitées par la validation des propositions (GTPP765.HOP)

 

Lorsque le CBN doit générer les OF, ceux-ci sont directement écrits dans un fichier de type GTFPLAN et intégrés par l’intégrateur (GGPP100.HOP).

 

Les propositions d’achat sont écrites dans un fichier GTFI.

 

 

  • Aucune étiquette