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

wms_stock_30_wms_098_20191024_10000000.xml
<?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

Email

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 : 

Generer_Notification
	;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)