Salut les gens

A peine le premier programme bouclé, je me lance dans un deuxième ... trop pressé le gars
Donc, un petit historique, dans un premier temps.
Je reçois quotidiennement des fichiers de commandes fournisseurs de ma maison mère, de la forme comme ci dessous (c'est un fichier réel que j'ai réimporté aujourd'hui, suite correction) :
► Afficher le texte
<ENTETE>EXP 002.00016/03/200916:07:50ORLI FRTOR
IMPCF 000165391 1 False False False STD F 3607180358821 6 0000016.04 16/03/09 EU 1 1 001 0001 PAE
IMPCF 000165391 2 False False False STD F 3607180358852 1 0000016.04 16/03/09 EU 1 1 001 0001 PAE
IMPCF 000165391 3 False False False STD F 3607180358845 2 0000016.04 16/03/09 EU 1 1 001 0001 PAE
IMPCF 000165391 4 False False False STD F 3607180358838 3 0000016.04 16/03/09 EU 1 1 001 0001 PAE
Pour vous expliquer rapidement le topo, IMPCF est l'indicatif nous disant qu'il s'agit d'une commande, 000165391 est le n° de la commande, et les valeurs qui nous intéressent pour la suite sont le nombre de 12 chiffres (le code à barre de la référence) et le 0001 (le stock de destination).
Le problème que je rencontre est simple : une partie des codes à barre ne sont pas les bons. Je les remplace donc par leur bonne valeur (que je connais), à l'aide d'un batch MS DOS (via la commande 'sed'). Voilà à quoi commence un morceau de ce batch :
► Afficher le texte
path "C:\Program Files\GnuWin32\bin"
cd h:\timeless\orli\recu\
sed -i s/3607180339400/3660755816546/g h:\timeless\orli\recu\*.paq
sed -i s/3607180339394/3660755816539/g h:\timeless\orli\recu\*.paq
sed -i s/3607180339417/3660755816553/g h:\timeless\orli\recu\*.paq
sed -i s/3607180339431/3660755816577/g h:\timeless\orli\recu\*.paq
sed -i s/3607180339424/3660755816560/g h:\timeless\orli\recu\*.paq
sed -i s/3607180339424/3660755816560/g h:\timeless\orli\recu\*.paq
sed -i s/3607180339103/3660755816096/g h:\timeless\orli\recu\*.paq
sed -i s/3607180339110/3660755816102/g h:\timeless\orli\recu\*.paq
sed -i s/3607180339127/3660755816119/g h:\timeless\orli\recu\*.paq
sed -i s/3607180339134/3660755816126/g h:\timeless\orli\recu\*.paq
sed -i s/3607180339097/3660755816089/g h:\timeless\orli\recu\*.paq
sed -i s/3607180339141/3660755816133/g h:\timeless\orli\recu\*.paq
Autant dire que c'est ... rustique

Normalement, après ça, je n'ai plus d'erreurs connues. Le fichier s'intègre, et génère ... de erreurs (ARG). En effet, de nouvelles erreurs apparaissent chaque jour (je rajoute des lignes 'sed'), en plus de certaines qui ne peuvent être solutionnées (des codes particuliers qui correspondent à des lots, ce que n'accepte pas notre logiciel).
Suite à ce traitement, un log est généré. J'utilise un autre enchainement de batchs (j'aime bien ça

) pour sortir les informations dont j'ai besoin de ce log. Ce serait un peu long de détailler la marche que je suis : voici donc dans un premier temps un tronçon de log :
► Afficher le texte
20/03/09 14:15:09 YBCHRUN.P
********** DEBUT DU BATCH **********
20/03/09 14:15:09 YMEWATCH.P
Propath = H:\TIMELESS\RUN\SE.PL,H:\TIMELESS\RUN\Y.PL,H:\TIMELESS\RUN\Z.PL,H:\TIMELESS\RUN\YIO.PL,H:\TIMELESS\RUN\X.PL,H:\TIMELESS\RUN,C:\TIMELESS\TRAVAIL,H:\TIMELESS\IMAGES,H:\TIMELESS\ICONES,C:\WINDOWS,H:\TIMELESS\INI,C:\WINNT\SYSTEM32,H:\DLCCLT\gui,H:\DLCCLT\gui\adecomm.pl,H:\DLCCLT\gui\adecomp.pl,H:\DLCCLT\gui\adedesk.pl,H:\DLCCLT\gui\adedict.pl,H:\DLCCLT\gui\adeedit.pl,H:\DLCCLT\gui\adeicon.pl,H:\DLCCLT\gui\adeshar.pl,H:\DLCCLT\gui\prodict.pl,H:\DLCCLT\gui\protools.pl,H:\DLCCLT,H:\DLCCLT\bin
20/03/09 14:15:09 YMEWATCH.P
g-c-LstBddVersPrin = 1
20/03/09 14:15:09 YBCHRUN.P
>>>>>> (1) LANCEMENT DE EXÉCUTION D'UN SCRIPT SYSTÈME <<<<<<
* ERREUR * 20/03/09 14:21:19 LIT_PAQUET MERECPAQ.P
Mise à jour de la fonction (DECF) clef (?|?), code erreur (3).
Dans le paquet :CF1329984AAA_.PAQ
* ERREUR * 20/03/09 14:21:19 YMEWATCH.P
Impossible de modifier la commande fournisseur IMPCF/000165312 car elle est cochée réception sur magasin.
* ERREUR * 20/03/09 14:21:20 YMEWATCH.P
La commande fournisseur (IMPCF/000165312) est rejetée
* ERREUR * 20/03/09 14:21:29 LIT_PAQUET MERECPAQ.P
Mise à jour de la fonction (DECF) clef (?|?), code erreur (3).
Dans le paquet :CF1331422AAA_.PAQ
20/03/09 14:21:29 LIT_PAQUET MERECPAQ.P
- Traitement du paquet prioritaire :CF1331976AAA_.PAQ
20/03/09 14:21:34 LIT_PAQUET MERECPAQ.P
- Traitement du paquet prioritaire :CF1332661AAA_.PAQ
* ATTENTION * 20/03/09 14:21:34 YMEWATCH.P
Code code à barre (3607180536694) inconnu pour la commande fournisseur (IMPCF/000165583) à la ligne 11.
* ATTENTION * 20/03/09 14:21:34 YMEWATCH.P
Code code à barre (3607180536687) inconnu pour la commande fournisseur (IMPCF/000165583) à la ligne 12.
Et ce que mes batchs me sortent :
► Afficher le texte
************************************************
* Informations fichier : *
************************************************
Nom du log traité : 09032000J.bch
Fichiers concernés :
CF1325054AAa.PAQ
************************************************
* Liste des codes à barre en erreur *
************************************************
PACK
3607180536656
3607180536663
3607180536670
3607180536687
3607180536694
3607180537851
3607180537868
3607180537875
3607180537882
3607180537899
************************************************
* Liste des coms rejetées *
************************************************
000164754
000164756
000164760
************************************************
* Liste des coms déjà reçues *
************************************************
000164754
000164756
Dans ce dernier tableau, on peut voir une mention PACK à la place d'un code à barre : c'est une addition que j'ai faite dernièrement (un de ces codes que l'on ne peut corriger). J'utilise de nouveau un batch avec 'sed' pour remplacement les codes dont je sais qu'ils sont des packs par la mention PACK (c'est plus lisible).
----------------------------------------------------------------------------------------------------------
J'ai donc monté ce système de vérification tout seul avec mes petits doigts. Mon problème est principalement la décentralisation (j'utilise le serveur qui traite les importations [logique], un serveur sur lequel je fais tourner les batchs en tâches planifiées [pour des raisons de sécurité], et ma machine sur laquelle j'exécute la génération du rapport) ... et j'ai sauvagement envie de rendre tout ceci plus "clean". De plus, je souhaite récupérer d'autres informations, histoire de faciliter le traitement des urgences grâce à ce fichier de log.
Voilà comment j'envisage le truc :
- 1 programme qui fait la correction avant le traitement du fichier, qui va chercher les codes à remplacer dans un fichier texte à part (que j'héberge sur le serveur)
- 1 programme sur ma machine, pour générer le rapport. Ce dernier nécessite une saisie au lancement du nom du fichier de log (nommage arbitraire par le logiciel de traitement, pas de bol ...). Il doit faire :
1 - récupérer les erreurs et informations dans le fichier comme je le fais actuellement
2 - récupérer les n° de commande en erreur
et les mettre en face des codes en erreurs en plus de les lister "à part"
3 - recouper les n° de commande avec le fichier source afin de récupérer le stock de destination et de le rajouter en face de la commande en erreur
Donc wala

je voulais présenter mon projet, et vous faire profiter de mes évolutions par rapport à ce dernier ... et profiter de vos suggestions aussi. Comme je l'ai dit dans l'autre topic, je ne suis pas développeur au départ et il est probable que j'ai besoin de pas mal de suggestions :p
Merci d'avance
