A l'occasion d'une migration Linux, le projet a recompilé l'application avec une nouvelle version de Microfocus Cobol et de nouvelles options.
A l'occasion de tests batch, le programme de calcul de paie s'interrompt parfois avec l'erreur :
Execution error : file
'JFCALDBI'
error code: 162, pc=0,
call=1, seg=0
162 Arithmetic overflow or underflow
Il se trouve qu'un traitement de paie effectue une division par zéro.
En effet les options utilisées avec le nouveau compilateur Visual Cobol sont moins permissives que celles de l'ancien Server Express.
- NOCHECK
- (NO)CHECKDIV qui contrôle les divisions par zéro
- (NO)CHECKNUM qui contrôle la numéricité des rubriques
- BOUND contrôle les débordements de tableau occursés.
Pour débloquer la situation et laisser passer les divisions par zéro et les débordements de tableaux, retirer -C NOCHECK et -C BOUND puis placer les options suivantes dans le fichier adm/cfg/config :
COBFLAGS=-C ASSIGN=EXTERNAL -C SEQUENTIAL=LINE -C NOANIM -C NOCSI -C CHECKDIV -C NOCHECKNUM -C NOSERIAL -C IBMCOMP -C SIGN=EBCDIC -C WRITELOCK -C NOTRUNC -C NOBOUND -C PERFORM-TYPE=MF -C COPYLIST -C NORESEQ -C TRACE -U
On remplace BOUND par NOBOUND.
Attention toutefois : si le programme semble se dérouler normalement, une division par zéro donne "an undefined result" ... Quand au débordement de tableau, il écrase les variables définies au delà.