14 juin 2012

BOP-BBAO0003-DOSSIER INCONNU 538976288 - Corriger par update SQL les ZO2B.NUDODE déphasés

Sous HRv7
Les dossiers ZO des chaînes d'enchaînement NRC font référence aux demandes à enchaîner dans l'information ZO2B.
Ils stockent en ZO2B.NUDODE le NUDOSS de ces demandes.

Si vous livrez des dossiers ZO NRC par NOZ, les NUDODE des demandes appelées sont re-numérotées.
Si la demande n'est pas trouvée, le NUDODE sera passé à zéro.

Lors de l'exécution de la NRC, si des NUDODE sont nuls, le programme BOP va de nouveau rechercher les demandes pour corriger le dossier de travail.
S'il ne le trouve pas vous aurez une erreur BOP-BBAD0015-ERREUR D'ACCES ... : ZO00/8K/DD/SELECT/000000000000100

Il peut toutefois arriver que les NUDODE de la ZO2B ne soient plus en phase avec les NUDOSS des dossiers ZO concernés :
  • Du fait d'un bug, il est parfois alimenté à 538976288, ce qui correspond à la valeur associée à un SPACE mis dans une variable numérique ...
  • En cas de suppression et de recréation SQL d'un dossier de demande ZO référencé par une NRC (en TP un traitement empêche la suppression d'une demande référencée).

Dans le "meilleur" des cas, le NUDODE pointe sur un dossier inexistant.
Vous aurez alors l'erreur BOP-BBAO0003-DOSSIER INCONNU

En revanche si le NUDODE pointe sur un NUDOSS attribué à une autre demande que celle prévue ...
Vous aurez des surprises (ex : imaginez si une NRB s'exécute à la place d'une NBX) !

Pour faire un constat, exécutez :
select ZO2B.NUDOSS, ZO2B.NUDODE, ZO2B.CDPH01, ZO2B.IDREQU, ZO2B.CDELMT, ZO2B.LIBEDE,
 '<->', ZO00.CDPHAS, ZO00.CDPHAS, ZO00.IDREQU, ZO00.CDELMT, ZO00.LISOUM
 from ZO2B LEFT OUTER JOIN ZO00 on ZO2B.NUDODE=ZO00.NUDOSS
 where ((ZO2B.CDPH01<>ZO00.CDPHAS or ZO00.CDPHAS is null)
   or (ZO2B.IDREQU<>ZO00.IDREQU or ZO00.IDREQU is null)
   or (ZO2B.CDELMT<>ZO00.CDELMT or ZO00.CDELMT is null));

Ci joint un exemple d'update pour corriger ZO2B.NUDODE (pour Oracle) :
update ZO2B set ZO2B.NUDODE = (select coalesce(
         (select ZO00.NUDOSS from ZO00
            where ZO00.CDPHAS=ZO2B.CDPH01 and ZO00.CDELMT=ZO2B.CDELMT and ZO00.IDREQU=ZO2B.IDREQU
              and ZO00.FLGJOB='0' and ZO00.TISOUM='0001-01-01-00.00.00'),0)
         from DUAL);

(Pour DB2 remplacez DUAL par SYSIBM.SYSDUMMY1)

Aucun commentaire:

Enregistrer un commentaire