Réception automatique de stock
Le scrutateur automatique de stock nécessite deux programmes pour fonctionner.
Il se base sur des fichiers xml de stock, envoyé par GPAO sur des FTP, récupérés par le programme d'upload des fichiers de stock, puis lu et intégré par le scrutateur d'intégration de stock
Upload des fichiers de stock
Le premier programme est une interface se connectant à un FTP, qui récupère les fichiers que l'on souhaite, dessus.
Il nécessite peu de paramétrage, le dépôt, ainsi qu'un Code FTP :
A savoir aussi que le logiciel est capable de gérer le FTP anonyme :
Il suffit de mettre en login "anonymous" qui correspond en général au login paramétré sur les FPT pour l'accès anonyme.
Dans ce paramétrage FTP, il faut renseigner bien évidemment les infos du serveur ainsi que de connexion, puis, un fichier distant, ainsi que le chemin local.
Le programme, prendra tout ce qui correspond au fichier distant, sur le serveur FTP, et les enverra vers le dossier paramétré (Chemin local).
Scrutateur d'intégration de stock
Principe de fonctionnement
Une fois le fichier xml récupéré par le premier programme, il est ensuite déposé dans un dossier d'interface.
Ce dossier est paramétré au niveau du dossier WMS, onglet interfaces:
Ici, il s'agit de RECEP, qui correspond donc à un paramètre FTP.
Le programme ira récupérer les fichier dans le chemin local paramétré.
En général, il s'agit du même paramètre FTP pour les deux programmes.
Lecture du fichier
Structure du fichier
<?xml version="1.0" encoding="UTF-8" ?> <stockwms> <ipar trait="C" dos="30" depo="WMS" ticod="I" picod="2" prefpino="" pino="" picodf="3" prefpinof="" pinof="0" piref = "" pinotiers="TESTINTfefGGEfG" lieu="PUPR000001"/> <gs1-128s> <gs1-128 ssccunique="O" nstdst = "N" >0003434556000000202902034345504517343710|10TESTINTEG</gs1-128> </gs1-128s> </stockwms>
Titre : wms_stock_30_wms_098_20191024_10000000.xml
wms_stock → Préfixe du fichier. Impératif.
30_wms → Dossier 30, dépôt WMS, impératif, le scrutateur va venir lire le dossier et le dépôt, puis rejeter les fichiers ne correspondant pas.
98 → Code machine de production
Restant → Horodatage
Composition du fichier :
La ligne commençant par <ipar .../> est la ligne d'entête, il n'y en a qu'une par fichier. On va retrouver les différents éléments qui permettent l'intégration du stock, tel que le numéro de commande, le lieu de prod, le dépôt, le dossier etc.
<ipar trait="C" dos="30" depo="WMS" ticod="I" picod="2" prefpino="" pino="" picodf="3" prefpinof="" pinof="0" piref = "" pinotiers="TESTINTfefGGEfG" lieu="PUPR000001"/>
Trait → C : Création / V : Validation...
Dos → Dossier
Depo → Dépôt
TiCod → Type de tiers
PiCod → Type de pièce
PrefPino → Le prefixe de la pièce de départ
Pino → Numéro de pièce de départ
PiCodF → Type de pièce de destination
PrefPinoF → Préfixe de destination
PinoF → Numéro de pièce de destination
PiRef → Référence pièce "Votre référence"
PinoTiers → N° Pièce FOU, "Votre pièce"
Lieu → Lieu où intégrer dans le stock
Ensuite, viennent les lignes de GS1.
Il peut y en avoir autant que l'on souhaite.
<gs1-128 ssccunique="O" nstdst = "N" >0003434556000000202902034345504517343710|10TESTINTEG</gs1-128>
SSCCunique → Autoriser plusieurs fois le même SSCC.
ntsdst → Nature de stock de destination.
GS1 → Ensuite vient le GS1 à intégrer.
Décodage du fichier
Le programme va ensuite décoder le fichier, puis, enregistrer l'entête du fichier, ainsi que ses détails dans deux tables Divalto :
Intégration de stock - Entête
Intégration de stock - Détails
Les deux zooms sont le reflet du fichier, une entête, avec un ou plusieurs détails.
Si des Erreurs sont rencontrés, comme par exemple un doublon de SSCC, une erreur d'intégration, ou bien une erreur de décodage, le champ "Motif de rejet" sera rempli avec l'erreur rencontrée.
La ligne sera également en état "En erreur".
Il sera alors possible de changer la valeur bloquante, puis, de repasser le champ "Etat" en "A traiter", ce qui permettra l'intégration.
Intégration du stock
Une fois le fichier décodé, une routine récupère toutes les lignes des zoom au dessus, qui sont en état "A traiter", et va commencer l'intégration, ligne par ligne.
Suivant les différent cas, un BL interne sera créé, une commande sera modifiée, un BL sera modifié.
Notification
Il existe plusieurs moyen de notifier en cas d'erreur d'intégration.
Widget
Explication
Il permet de savoir combien de palette ont été produise dans l'interval de temps fournis en paramètre.
Techniquement, il s'agit de savoir combien de création de contenant avec un USERCRDH supérieur au délais passé en paramètre on a reçu dans le stock.
Les paramètres sont :
<MAX> → Le nombre maximum que l'on attend (par exemple, le nombre de palette produite en une heure), il faut être cohérent à ce niveau.
<LIEU> → Le lieu à analyser. Par exemple, une sortie de production. Le test SQL est fait sur un LIKE.
<HOURS> → L'heure du délais
<MINUTES> → Les minutes du délais
<SECONDS> → Les secondes du délais
Paramétrage
Exemple de chaîne :
<MAX>50<LIEU>PUPR%<HOURS>10<MINUTES>0<SECONDS>0
Des Emails peuvent être envoyés en cas d'erreur d'intégration.
Ils sont générés par des actions envoyant des flashs.
Exemple de paramétrage d'action
Libellé action
Action
Flash
Ainsi, il sera possible d'envoyer à un destinataire ou à un groupe, un mail en cas de problème d'intégration.
Notification
Une autre possibilité est d'utiliser les notifications.
En cas d'erreur d'intégration, une notification est générée. Elle apparaîtra en haut à droite de l'accueil de Divalto.
Un clic sur le carré avec la flèche permet d'ouvrir le zoom des entêtes d'intégration, avec les fichiers en erreur.
Paramétrage des notifications
Le paramétrage s'effectue dans le code directement, il faut donc surcharger le programme standard. Le code y est commenté.
Exemple :
;Génération de la notification Notification.Init() Notification.CE1 = 'G' NotificationCod = 'WMS_INTEG' & left(right(IntegStockEnt.WmIntegNo)) Notification.NotificationCod = NotificationCod Notification.ActifFlg = 2 Notification.PlageDebutDH = Today() Notification.PlageFinDH = DtAdd(Today(),2) txt = "Erreur d'intégration de stock N°" & left(right(IntegStockEnt.WmIntegNo)) Notification.libl1 = Translate(txt) Notification.ModeAffichage = 2 Notification.Importance = 3 Notification.ActionFlg = 2 Notification.MasquableFlg = 2 Notification.Ap = 'DAV' Notification.Reg = 'WMSRINT' Notification.Ordre = 99 Insert_Notification(Notification) ;Génération de l'association. Elle permet d'envoyer la notification qu'au groupe d'utilisateur NOTIF_ERR_INTEG NotifAsso.Init() NotifAsso.CE1 = 'I' NotifAsso.NotificationCod = NotificationCod NotifAsso.TypeAsso = 2 NotifAsso.IdAssoCible = 'NOTIF_ERR_INTEG' Insert_NotifAsso(NotifAsso)
Par rapport à NOTIF_ERR_INTEG dans l'exemple ci-dessus, il faut ajouter ce groupe dans le paramétrage du groupe d'utilisateur (Administration>Utilisateurs>Groupe d'utilisateurs)
puis ajouter les utilisateurs qui doivent recevoir les notifications, en cliquant sur détails (cible)