19 septembre 2013

Fichier de rejet NRB standard en mode colonné

Il est possible depuis HRv7.1 de demander aux chaînes de mise à jour batch NRB la création de fichiers des rejets en remplacement des listings "kilométriques" $LIS/NRB362I* :


Dans l'écran "Import/export de données" des outils d'administration, cochez :


Ce témoin ERRMNG va être repris dans la carte paramètre PA24.

Sur présence de ce témoin,
  1. Le programme BMI produit un fichier colonné $FILE/PSBBEB0.C** contenant les erreurs suite aux contrôles intrinsèques,
  2. Le programme BMF produit un fichier $FILE/PSBBBME1.C** contenant les erreurs issues :
  • Des rejets suite aux contrôles fonctionnels des programmes BMA et BMK,
  • Des rejets suite à une erreur d'accès aux tables relationnelles par BML.

Il crée aussi un fichier $FILE/PSBBBMF0.C** concaténant les deux premiers.

Attention si vous souhaitez utiliser ces fichiers en exploitation. Pour avoir un bilan complet il faut aussi :
  • Disposer du code retour de la chaîne (certaines erreurs pouvant perturber l'alimentation desdits fichiers),
  • Contrôler l'absence de "dossiers à recycler" (listing $LIS/NRB212IZ, ou table M91 code RECY).


Exemples de sorties

En cas de filtrage par BMI (contrôles intrinsèques) vous aurez par exemple :
                 AS0FT                    ZD00      COMDLA01                                                                                            000000000000000000                     2013-09-17-14.41.305A120                                                                                                                  Erreur sur dossier            Bordereau inconnu

En cas de rejet par BMA/K (erreurs fonctionnelles) vous aurez par exemple :
        001230000AS0FT                    ZY0X      001701000                                                                                           0000002550000000003                    2013-09-17-16.00.505C102                                                                                                                  Erreur sur mouvement          Création à tort

Et en cas d'erreur SQL par BML (accès aux tables) vous aurez par exemple :
        001230000AS0FT                    ZY0X      001718010                                                                                           000000593538976288                     2013-09-17-16.00.505C999                                                                                                                  Erreur sur dossier            Dossier incohérent


Format des fichiers

Ces fichiers sont colonnés. Leur format est décrit dans le guide technique (mais faux) :

0001 à 0008 Code de l'utilisateur ayant déclenché la mise à jour (si disponible)
0009 à 0017 Code partition du dossier concerné par le mouvement (numérique)
0018 à 0022 Code processus
0023 à 0042 Zone utilisateur 2 du mouvement
0043 à 0044 Nom de la structure de données concernée par le mouvement
0045 à 0046 Nom de l'information concernée par le mouvement en erreur
0047 à 0052 Nom de la rubrique en erreur pour une erreur de type D Dictionnaire (blanc pour les autres types d'erreur).
0053 à 0152 Identifiant logique du dossier concerné par le mouvement en erreur
0153 à 0161 Identifiant interne (NUDOSS) du dossier concerné par le mouvement en erreur
0162 à 0170 Identifiant interne (NULIGN) de l'occurrence d'information concernée par le mouvement en erreur (0 si création ou information unique fixe).
0171 à 0171 Code mouvement
0172 à 0191 Zone utilisateur 1 du mouvement
0192 à 0210 Horodatage de détection de l'erreur
0211 à 0211 Poids de l'erreur
0212 à 0212 Type d'erreur (C:Compatibilité D:Dictionnaire U:traitement Utilisateur)
0213 à 0218 Code erreur
0219 à 0220 Nom du groupe du traitements spécifique ayant déclenché l'erreur (si erreur Utilisateur)
0221 à 0226 Nom du traitement ayant déclenché l'erreur (si erreur Utilisateur)
0227 à 0229 Nom du répertoire cible (si erreur sur contrôle de correspondance)
0230 à 0329 Description de l'erreur
0330 à 0629 Libellé de l'erreur

Conversion en CSV

Du fichier standard vous pouvez obtenir un CSV grâce a un script awk comme celui ci :

awk 'BEGIN {
OFS=";"
print "CdUtil", "CdPart", "CdPros", "ZonUt2", "CdStDo", "CdInfo", "CdRubr", "IdDoss", "NuDoss", "NuLign", "CdMvt", "ZonUt1", "TimErr", "PdsErr", "TypErr", "CodErr", "GpTrai", "CdTrai", "VaCdSt", "DesErr", "LibErr"
}
{
CdUtil=substr($0,1,8)
CdPart=substr($0,9,9)
CdPros=substr($0,18,5)
ZonUt2=substr($0,23,20)
CdStDo=substr($0,43,2)
CdInfo=substr($0,45,2)
CdRubr=substr($0,47,6)
IdDoss=substr($0,53,100)
NuDoss=substr($0,153,9)
NuLign=substr($0,162,9)
CdMvt=substr($0,171,1)
ZonUt1=substr($0,172,20)
TimErr=substr($0,192,19)
PdsErr=substr($0,211,1)
TypErr=substr($0,212,1)
CodErr=substr($0,213,6)
GpTrai=substr($0,219,2)
CdTrai=substr($0,221,6)
VaCdSt=substr($0,227,3)
DesErr=substr($0,230,100)
LibErr=substr($0,330,300)
print CdUtil, CdPart, CdPros, ZonUt2, CdStDo, CdInfo, CdRubr, IdDoss, NuDoss, NuLign, CdMvt, ZonUt1, TimErr, PdsErr, TypErr, CodErr, GpTrai, CdTrai, VaCdSt, DesErr, LibErr
}' PSBBBMF0.C**


Ce qui donnera :

        ;001230000;AS0FT;       ;ZD;0X; ;       ;000000277;000000000; ; ;2013-09-17-16.00.49;5;A;120    ;       ;       ;       ;       ;Erreur sur dossier     Bordereau inconnu
        ;001230000;AS0FT;       ;ZY;0X; ;001701000      ;000000255;000000000;3; ;2013-09-17-16.00.50;5;C;102    ;       ;       ;       ;       ;Erreur sur mouvement   Création à tort
        ;001230000;AS0FT;       ;ZY;0X; ;001718010      ;000000593;538976288; ; ;2013-09-17-16.00.50;5;C;999    ;       ;       ;       ;       ;Erreur sur dossier     Dossier incohérent


8 commentaires:

  1. Comment fait-on pour faire le lien entre la ligne en erreur dans $FILE/PSBBBME1.C** et la ligne dans le bordereau si nous avons plusieurs lignes avec le même matricule. J'ai pensé au NULIGN interne mais je ne vois pas où on le trouve.

    RépondreSupprimer
    Réponses
    1. Bonne remarque - il faudrait les identifiants fonctionnels. Utiliser la ZONUT2 pour y placer un n° unique ? Mais si l'erreur est liée à un mouvement induit par un traitement, il n'est pas possible de faire de lien ...

      Supprimer
  2. Y a t'il un moyen simple d'avoir le fichier sous $LIS (le NRB362I1) en ligne?

    RépondreSupprimer
  3. APRES LA REMONTÉE D'UNE PAIE NOUS OBSERVONS UN REJET SUIVANT:

    Type d'erreur : Compatibilité Nature : Dossier Gravité : Erreur I
    I Structure de données : ZY Code information : Zone libre : I
    I Code erreur : 999 Libellé : Erreur sur dossier Dossier incohérent I
    I I
    I -- DOSSIER REJETE --

    RépondreSupprimer
  4. Pour information TBPF01 - Appartient au type de traitement Contextes BMF
    Il permet de sélectionner les mouvements à intégrer dans le fichier des erreurs, sous réserve que l'option d'écriture du fichier soit activée.
    Exemple d'utilisation : Si vous avez activé l'écriture du fichier des erreurs, vous pouvez choisir d'intégrer tous les mouvements dans le fichier des erreurs, y compris les mouvements ne comportant pas d'erreurs

    RépondreSupprimer
  5. Bonjour. Auriez vous la possibilité de montrer comment utiliser la chaine RJ2 dans le cadre d'une NRB? En effet, contrairement aux autres chaines (NJ6, K25...), on ne peut pas se permettre d'analyser uniquement les codes erreur technique, il faut aussi analyser les "rejets fonctionnels". Comment savoir si tout s'est bien passé? Cdt.

    RépondreSupprimer
    Réponses
    1. merci, en effet, il y a pas mal de cas à tester dans ce que vous donnez comme exemple.
      Merci :)

      Supprimer