MAJ PLEINE PAGE DE SOUS-FICHIER Il est possible de modifier un sous-fichier pleine page. Regardons un programme qui ferait la mise à jour du prix unitaire d'un article. |
##################################################################### ## Le programme demande un type article ## ## ## ## ## ##################################################################### ##################################################################### ## le X/XX/XX mise à jour prix unitaire ## ## ## ## ## ## ## ## ## ## Entrer le type des articles 1 ## ## ## ## ## ## ## ## ## ## F3 = fin de travail ## ## ## ##################################################################### |
##################################################################### ## Et affiche tous les articles ayant ## ## ce type article. ## ## ## ##################################################################### ##################################################################### ## le X/XX/XX mise à jour prix unitaire ## ## ## ## Type article 1 ## ## ## ## numéro libellé quantité prix ## ## article unitaire ## ## ## ## 0001 CLOU 10MM 100 3,50 ## ## 0002 CLOU 20MM 100 4,00 ## ## 0003 CLOU 30MM 120 4,50 ## ## ## ## ## ##################################################################### |
##################################################################### ## L'utilisateur modifie les PU des articles, notre ## ## programme lit tous les enregistrements modifies ## ## et applique les modifications dans la base de données ## ##################################################################### ##################################################################### ## le X/XX/XX mise à jour prix unitaire ## ## ## ## Type article 1 ## ## ## ## numéro libellé quantité prix ## ## article unitaire ## ## ## ## 0001 CLOU 10MM 100 3,75 ## ## 0002 CLOU 20MM 100 4,00 ## ## 0003 CLOU 30MM 120 6,19 ## ## ## ## ## ##################################################################### |
######################################################################## ## Etudions ce programme ## ## ## ## ## ######################################################################## |
######################################################################## ## ## ## ## ## ## ######################################################################## ## ## ## ## ## ## ## FARTICL UF E K DISK ## ## FARTMAJ CF E WORKSTN ## ## F LIGNE KSFILE SFE ## ## C CLEART KLIST ## ## C KFLD TYPART ## ## C KFLD NOART ## ## C WRITEENTETE ## ## C EXFMTINTERO ## ## C *IN03 DOWEQ*OFF ## ## C EXSR STRUC2 ## ## C EXFMTINTERO ## ## C ENDDO ## ## C MOVE *ON *INLR ## ######################################################################## |
######################################################################## ## 1ere partie classique. Affichage ## ## du format interro, boucle tant que l'utilisateur ## ## ne fait pas F3. ## ######################################################################## ## ## ## ## ## ## ## FARTICL UF E K DISK ## ## FARTMAJ CF E WORKSTN ## ## F LIGNE KSFILE SFE ## ## C CLEART KLIST ## ## C KFLD TYPART ## ## C KFLD NOART ## ## C WRITEENTETE ## ## C EXFMTINTERO ## ## C *IN03 DOWEQ*OFF ## ## C EXSR STRUC2 ## ## C EXFMTINTERO ## ## C ENDDO ## ## C MOVE *ON *INLR ## ######################################################################## |
######################################################################## ## ## ## ## ## ## ######################################################################## ## ## ## ## ## ## ## C STRUC2 BEGSR ## ## C TYPART CHAINARTICL 10 ## ## C *IN10 IFEQ *OFF ## ## C MOVE *ON *IN41 ## ## C WRITESFC ## ## C MOVE *OFF *IN41 ## ## C DO *HIVAL LIGNE 40 ## ## C WRITESFE ## ## C TYPART READEARTICL 10 ## ## C N10 ENDDO ## ## ## ## ## ## ## ######################################################################## |
######################################################################## ## 2eme partie tout aussi classique, remplissage ## ## statique d'un sous-fichier. Module de RAB, remplissage. ## ## ## ######################################################################## ## ## ## ## ## ## ## C STRUC2 BEGSR ## ## C TYPART CHAINARTICL 10 ## ## C *IN10 IFEQ *OFF ## ## C MOVE *ON *IN41 ## ## C WRITESFC ## ## C MOVE *OFF *IN41 ## ## C DO *HIVAL LIGNE 40 ## ## C WRITESFE ## ## C TYPART READEARTICL 10 ## ## C N10 ENDDO ## ## ## ## ## ## ## ######################################################################## |
######################################################################## ## Il a été choisi ici un chargement statique pour simplifier le ## ## programme mais il est bien évident que l'on peut faire ## ## de la maj pleine page dans un sous-fichier dynamique. ## ######################################################################## ## ## ## ## ## ## ## C STRUC2 BEGSR ## ## C TYPART CHAINARTICL 10 ## ## C *IN10 IFEQ *OFF ## ## C MOVE *ON *IN41 ## ## C WRITESFC ## ## C MOVE *OFF *IN41 ## ## C DO *HIVAL LIGNE 40 ## ## C WRITESFE ## ## C TYPART READEARTICL 10 ## ## C N10 ENDDO ## ## ## ## ## ## ## ######################################################################## |
######################################################################## ## ## ## ## ## ## ######################################################################## ## C *IN11 DOUEQ*OFF ## ## C MOVE *ON *IN40 ## ## C EXFMTSFC ## ## C MOVE *OFF *IN40 ## ## C MOVE *OFF *IN11 ## ## C READCSFE 20 ## ## C *IN20 DOWEQ*OFF ## ## C MOVE *ON *IN11 ## ## C CLEART CHAINARTICL 10 ## ## C LIGNE CHAINSFE 10 ## ## C UPDATARTICLF1 ## ## C READCSFE 20 ## ## C ENDDO ## ## C ENDDO ## ## C ENDIF ## ## C ENDSR ## ######################################################################## |
######################################################################## ## 3eme partie affichage et lecture du sous-fichier, on retrouve ## ## ici la boucle qui permet d'afficher le sous-fichier jusqu'à ## ## ce que l'utilisateur ne fasse plus de modification dans le S/F ## ######################################################################## ## C *IN11 DOUEQ*OFF ## ## C MOVE *ON *IN40 ## ## C EXFMTSFC ## ## C MOVE *OFF *IN40 ## ## C MOVE *OFF *IN11 ## ## C READCSFE 20 ## ## C *IN20 DOWEQ*OFF ## ## C MOVE *ON *IN11 ## ## C CLEART CHAINARTICL 10 ## ## C LIGNE CHAINSFE 10 ## ## C UPDATARTICLF1 ## ## C READCSFE 20 ## ## C ENDDO ## ## C ENDDO ## ## C ENDIF ## ## C ENDSR ## ######################################################################## |
######################################################################## ## Intéressons-nous maintenant à la boucle qui effectue ## ## la lecture du sous-fichier et la mise à jour du fichier ## ## ARTICL ## ######################################################################## ## C *IN11 DOUEQ*OFF ## ## C MOVE *ON *IN40 ## ## C EXFMTSFC ## ## C MOVE *OFF *IN40 ## ## C MOVE *OFF *IN11 ## ## C READCSFE 20 ## ## C *IN20 DOWEQ*OFF ## ## C MOVE *ON *IN11 ## ## C CLEART CHAINARTICL 10 ## ## C LIGNE CHAINSFE 10 ## ## C UPDATARTICLF1 ## ## C READCSFE 20 ## ## C ENDDO ## ## C ENDDO ## ## C ENDIF ## ## C ENDSR ## ######################################################################## |
######################################################################## ## Si la lecture des enregistrements modifiés a abouti ## ## on met en fonction l'indicateur 11, ce qui permettra ## ## de boucler sur l'affichage tant qu'un enreg. a été modifié. ## ######################################################################## ## C *IN11 DOUEQ*OFF ## ## C MOVE *ON *IN40 ## ## C EXFMTSFC ## ## C MOVE *OFF *IN40 ## ## C MOVE *OFF *IN11 ## ## C READCSFE 20 ## ## C *IN20 DOWEQ*OFF ## ## C MOVE *ON *IN11 ## ## C CLEART CHAINARTICL 10 ## ## C LIGNE CHAINSFE 10 ## ## C UPDATARTICLF1 ## ## C READCSFE 20 ## ## C ENDDO ## ## C ENDDO ## ## C ENDIF ## ## C ENDSR ## ######################################################################## |
######################################################################## ## Je me repositionne sur l'article à mettre à jour ## ## Rappel. L'instruction UPDAT met à jour le dernier enreg. lu ## ## ## ######################################################################## ## C *IN11 DOUEQ*OFF ## ## C MOVE *ON *IN40 ## ## C EXFMTSFC ## ## C MOVE *OFF *IN40 ## ## C MOVE *OFF *IN11 ## ## C READCSFE 20 ## ## C *IN20 DOWEQ*OFF ## ## C MOVE *ON *IN11 ## ## C CLEART CHAINARTICL 10 ## ## C LIGNE CHAINSFE 10 ## ## C UPDATARTICLF1 ## ## C READCSFE 20 ## ## C ENDDO ## ## C ENDDO ## ## C ENDIF ## ## C ENDSR ## ######################################################################## |
######################################################################## ## La lecture de l'enregistrement du fichier ARTICL à entrainer ## ## le remplacement des zones modifiés (provenant du sous-fic.) ## ## par celles du fichier (donc avant la modif). ## ######################################################################## ## C *IN11 DOUEQ*OFF ## ## C MOVE *ON *IN40 ## ## C EXFMTSFC ## ## C MOVE *OFF *IN40 ## ## C MOVE *OFF *IN11 ## ## C READCSFE 20 ## ## C *IN20 DOWEQ*OFF ## ## C MOVE *ON *IN11 ## ## C CLEART CHAINARTICL 10 ## ## C LIGNE CHAINSFE 10 ## ## C UPDATARTICLF1 ## ## C READCSFE 20 ## ## C ENDDO ## ## C ENDDO ## ## C ENDIF ## ## C ENDSR ## ######################################################################## |
######################################################################## ## ==> la relecture de l'enregistrement du sous-fichier. ## ## Pourquoi LIGNE CHAINSFE 10 ? ## ## ## ######################################################################## ## C *IN11 DOUEQ*OFF ## ## C MOVE *ON *IN40 ## ## C EXFMTSFC ## ## C MOVE *OFF *IN40 ## ## C MOVE *OFF *IN11 ## ## C READCSFE 20 ## ## C *IN20 DOWEQ*OFF ## ## C MOVE *ON *IN11 ## ## C CLEART CHAINARTICL 10 ## ## C LIGNE CHAINSFE 10 ## ## C UPDATARTICLF1 ## ## C READCSFE 20 ## ## C ENDDO ## ## C ENDDO ## ## C ENDIF ## ## C ENDSR ## ######################################################################## |
######################################################################## ## Rappel. L'instruct. READC entraine la lecture d'un enreg. modifié ## ## d'un sous-fic. ET la récupération du num. de l'enreg. lu ## ## dans la zone associée au sous-fic (ici LIGNE). ## ######################################################################## ## C *IN11 DOUEQ*OFF ## ## C MOVE *ON *IN40 ## ## C EXFMTSFC ## ## C MOVE *OFF *IN40 ## ## C MOVE *OFF *IN11 ## ## C READCSFE 20 ## ## C *IN20 DOWEQ*OFF ## ## C MOVE *ON *IN11 ## ## C CLEART CHAINARTICL 10 ## ## C LIGNE CHAINSFE 10 ## ## C UPDATARTICLF1 ## ## C READCSFE 20 ## ## C ENDDO ## ## C ENDDO ## ## C ENDIF ## ## C ENDSR ## ######################################################################## |
######################################################################## ## Ligne contient le numéro d'enreg. du sous-fic.que nous voulons ## ## relire ==> lecture accès direct sur le rang. ## ## ## ######################################################################## ## C *IN11 DOUEQ*OFF ## ## C MOVE *ON *IN40 ## ## C EXFMTSFC ## ## C MOVE *OFF *IN40 ## ## C MOVE *OFF *IN11 ## ## C READCSFE 20 ## ## C *IN20 DOWEQ*OFF ## ## C MOVE *ON *IN11 ## ## C CLEART CHAINARTICL 10 ## ## C LIGNE CHAINSFE 10 ## ## C UPDATARTICLF1 ## ## C READCSFE 20 ## ## C ENDDO ## ## C ENDDO ## ## C ENDIF ## ## C ENDSR ## ######################################################################## |
######################################################################## ## Nous avons récupéré les modifs nous mettons a jour l'enreg. ## ## ## ## ## ######################################################################## ## C *IN11 DOUEQ*OFF ## ## C MOVE *ON *IN40 ## ## C EXFMTSFC ## ## C MOVE *OFF *IN40 ## ## C MOVE *OFF *IN11 ## ## C READCSFE 20 ## ## C *IN20 DOWEQ*OFF ## ## C MOVE *ON *IN11 ## ## C CLEART CHAINARTICL 10 ## ## C LIGNE CHAINSFE 10 ## ## C UPDATARTICLF1 ## ## C READCSFE 20 ## ## C ENDDO ## ## C ENDDO ## ## C ENDIF ## ## C ENDSR ## ######################################################################## |
######################################################################## ## Puis nous lisons l'enregistrement modifié suivant etc... ## ## ## ## ## ######################################################################## ## C *IN11 DOUEQ*OFF ## ## C MOVE *ON *IN40 ## ## C EXFMTSFC ## ## C MOVE *OFF *IN40 ## ## C MOVE *OFF *IN11 ## ## C READCSFE 20 ## ## C *IN20 DOWEQ*OFF ## ## C MOVE *ON *IN11 ## ## C CLEART CHAINARTICL 10 ## ## C LIGNE CHAINSFE 10 ## ## C UPDATARTICLF1 ## ## C READCSFE 20 ## ## C ENDDO ## ## C ENDDO ## ## C ENDIF ## ## C ENDSR ## ######################################################################## |
Ecrire un programme simple de mise à jour en utilisant la mise à jour de sous-fichier pleine page ce n'est compliqué. |
Ecrire un programme simple de mise à jour en utilisant la mise à jour de sous-fichier pleine page ce n'est compliqué. Par contre les choses se compliquent un peu lorsque l'on doit effectuer des contrôles sur la zone mise à jour. Regardons avec un exemple ce qui se passe. |
Ecrire un programme simple de mise à jour en utilisant la mise à jour de sous-fichier pleine page ce n'est compliqué. Par contre les choses se compliquent un peu lorsque l'on doit effectuer des contrôles sur la zone mise à jour. Regardons avec un exemple ce qui se passe. Nous allons reprendre notre programme de mise à jour des prix unitaires du fichier article en controlant que le nouveau prix n'est pas supérieur de plus de 10 % à l'ancien prix. |
##################################################################### ## Regardons le déroulement du prog. ## ## ## ## ## ##################################################################### ##################################################################### ## le X/XX/XX mise à jour prix unitaire ## ## ## ## ## ## ## ## ## ## Entrer le type des articles ## ## ## ## ## ## ## ## ## ## F3 = fin de travail ## ## ## ##################################################################### |
##################################################################### ## L'utilisateur entre un type article ## ## ## ## ## ##################################################################### ##################################################################### ## le X/XX/XX mise à jour prix unitaire ## ## ## ## ## ## ## ## ## ## Entrer le type des articles 1 ## ## ## ## ## ## ## ## ## ## F3 = fin de travail ## ## ## ##################################################################### |
##################################################################### ## Le programme affiche tous les articles ayant ce type. ## ## ############################################################### ## ## ## ##################################################################### ##################################################################### ## le X/XX/XX mise à jour prix unitaire ## ## ## ## Type article 1 ## ## ## ## numéro libellé quantité prix ## ## article unitaire ## ## ## ## 0001 CLOU 10MM 100 3,50 ## ## 0002 CLOU 20MM 100 4,00 ## ## 0003 CLOU 30MM 120 4,50 ## ## ## ## ## ##################################################################### |
##################################################################### ## L'utilisateur modifie les PU des articles, notre ## ## programme lit tous les enregistrements modifies ## ## et contrôle le p.u. Si OK maj, sinon affichage d'erreur ## ##################################################################### ##################################################################### ## le X/XX/XX mise à jour prix unitaire ## ## ## ## Type article 1 ## ## ## ## numéro libellé quantité prix ## ## article unitaire ## ## ## ## 0001 CLOU 10MM 100 3,75 ## ## 0002 CLOU 20MM 100 4,00 ## ## 0003 CLOU 30MM 120 6,19 ## ## ## ## ## ##################################################################### |
##################################################################### ## L'utilisateur a modifié 2 PU. 3,75 au lieu de 3,50 ## ## pour celui-là OK, et 6,19 au lieu de 4,50 ici erreur. ## ## Regardons ce qui se passe. ## ##################################################################### ##################################################################### ## le X/XX/XX mise à jour prix unitaire ## ## ## ## Type article 1 ## ## ## ## numéro libellé quantité prix ## ## article unitaire ## ## ## ## 0001 CLOU 10MM 100 3,75 ## ## 0002 CLOU 20MM 100 4,00 ## ## 0003 CLOU 30MM 120 6,19 ## ## ## ## ## ##################################################################### |
##################################################################### ## L'utilisateur a modifié 2 PU 3,75 au lieu de 3,50 ## ## pour celui-là OK et 6,19 au lieu de 4,50 ici erreur. ## ## Regardons ce qui se passe. ## ##################################################################### ##################################################################### ## le X/XX/XX mise à jour prix unitaire ## ## ## ## Type article 1 ## ## ## ## numéro libellé quantité prix ## ## article unitaire ## ## ## ## 0001 CLOU 10MM 100 3,75 ## ## 0002 CLOU 20MM 100 4,00 ## ## 0003 CLOU 30MM 120 6,19 ## ## ## ## PRIX UNITAIRE INVALIDE ## ##################################################################### |
Regardons la mise en oeuvre et tout d'abord le fichier écran. |
##################################################################### ## Tout d'abord les formats ENTETE et INTERO ## ## ## ## ## ##################################################################### ## REF(ARTICL) ## ## PRINT ## ## R ENTETE ## ## 2 2'le' ## ## 2 5DATE ## ## EDTCDE(Y) ## ## 2 24'mise à jour prix unitaire' ## ## DSPATR(HI) ## ## DSPATR(UL) ## ## R INTERO ## ## CA03(03 'fin de travail') ## ## OVERLAY ## ## 08 16'Entrer le type des articles' ## ## TYPART R Y I 08 45REFFLD(TYPART ARTICL) ## ## 10 ERRMSG('type art. inconnu' 10) ## ## 19 7'F3 = fin de travail' ## ##################################################################### |
##################################################################### ## Puis les formats du sous-fichier SFE (format d'enregistrement) ## ## SFC (format de contrôle) ## ## ## ##################################################################### ## R SFE SFL ## ## NOART R O 13 7REFFLD(NOART ARTICL) ## ## LIBEL R O 13 18REFFLD(LIBEL ARTICL) ## ## QTE R O 13 34REFFLD(QTE ARTICL) ## ## PU R B 13 46REFFLD(PU ARTICL) ## ## 60 DSPATR(RI PC) ## ## R SFC SFLCTL(SFE) OVERLAY ## ## 40 SFLDSP SFLDSPCTL ## ## 41 SFLCLR ## ## SFLSIZ(0006) ## ## SFLPAG(0005) ## ## 61 SFLMSG('ERREUR PU' 61) ## ## 10 6'numéro' ## ## 10 18'libellé' ## ## 10 31'quantité' ## ## 10 46'prix' ## ##################################################################### |
##################################################################### ## Dans le format SFE nous avons les zones ## ## NOART LIBEL QTE en sortie. ## ## ## ##################################################################### ## R SFE SFL ## ## NOART R O 13 7REFFLD(NOART ARTICL) ## ## LIBEL R O 13 18REFFLD(LIBEL ARTICL) ## ## QTE R O 13 34REFFLD(QTE ARTICL) ## ## PU R B 13 46REFFLD(PU ARTICL) ## ## 60 DSPATR(RI PC) ## ## R SFC SFLCTL(SFE) OVERLAY ## ## 40 SFLDSP SFLDSPCTL ## ## 41 SFLCLR ## ## SFLSIZ(0006) ## ## SFLPAG(0005) ## ## 61 SFLMSG('ERREUR PU' 61) ## ## 10 6'numéro' ## ## 10 18'libellé' ## ## 10 31'quantité' ## ## 10 46'prix' ## ##################################################################### |
##################################################################### ## Dans le format SFE nous avons les zones ## ## NOART LIBEL QTE en sortie. ## ## PU en sortie/entrée ## ##################################################################### ## R SFE SFL ## ## NOART R O 13 7REFFLD(NOART ARTICL) ## ## LIBEL R O 13 18REFFLD(LIBEL ARTICL) ## ## QTE R O 13 34REFFLD(QTE ARTICL) ## ## PU R B 13 46REFFLD(PU ARTICL) ## ## 60 DSPATR(RI PC) ## ## R SFC SFLCTL(SFE) OVERLAY ## ## 40 SFLDSP SFLDSPCTL ## ## 41 SFLCLR ## ## SFLSIZ(0006) ## ## SFLPAG(0005) ## ## 61 SFLMSG('ERREUR PU' 61) ## ## 10 6'numéro' ## ## 10 18'libellé' ## ## 10 31'quantité' ## ## 10 46'prix' ## ##################################################################### |
##################################################################### ## 60 DSPATR(RI PC) cette fonction permettra lorsqu'il y aura ## ## une erreur d'avoir la zone de l'enregistrement en inversion ## ## et le curseur positionné sur cet enregistrement. ## ##################################################################### ## R SFE SFL ## ## NOART R O 13 7REFFLD(NOART ARTICL) ## ## LIBEL R O 13 18REFFLD(LIBEL ARTICL) ## ## QTE R O 13 34REFFLD(QTE ARTICL) ## ## PU R B 13 46REFFLD(PU ARTICL) ## ## 60 DSPATR(RI PC) ## ## R SFC SFLCTL(SFE) OVERLAY ## ## 40 SFLDSP SFLDSPCTL ## ## 41 SFLCLR ## ## SFLSIZ(0006) ## ## SFLPAG(0005) ## ## 61 SFLMSG('ERREUR PU' 61) ## ## 10 6'numéro' ## ## 10 18'libellé' ## ## 10 31'quantité' ## ## 10 46'prix' ## ##################################################################### |
##################################################################### ## Dans notre pgm lorsqu'il y aura une erreur nous mettrons en ## ## fonction l'indic. 60 et mettrons à jour l'enreg. du sous-fic. ## ## la fonction DSPATR ne prendra effet que sur l'enreg. modifié. ## ##################################################################### ## R SFE SFL ## ## NOART R O 13 7REFFLD(NOART ARTICL) ## ## LIBEL R O 13 18REFFLD(LIBEL ARTICL) ## ## QTE R O 13 34REFFLD(QTE ARTICL) ## ## PU R B 13 46REFFLD(PU ARTICL) ## ## 60 DSPATR(RI PC) ## ## R SFC SFLCTL(SFE) OVERLAY ## ## 40 SFLDSP SFLDSPCTL ## ## 41 SFLCLR ## ## SFLSIZ(0006) ## ## SFLPAG(0005) ## ## 61 SFLMSG('ERREUR PU' 61) ## ## 10 6'numéro' ## ## 10 18'libellé' ## ## 10 31'quantité' ## ## 10 46'prix' ## ##################################################################### |
##################################################################### ## Passons à SFC. ## ## Défilons les différentes fonctions. ## ## ICI GESTION DE SOUS-FICHIER CLASSIQUE.(40 = affich,41 m.à.bl) ## ##################################################################### ## R SFE SFL ## ## NOART R O 13 7REFFLD(NOART ARTICL) ## ## LIBEL R O 13 18REFFLD(LIBEL ARTICL) ## ## QTE R O 13 34REFFLD(QTE ARTICL) ## ## PU R B 13 46REFFLD(PU ARTICL) ## ## 60 DSPATR(RI PC) ## ## R SFC SFLCTL(SFE) OVERLAY ## ## 40 SFLDSP SFLDSPCTL ## ## 41 SFLCLR ## ## SFLSIZ(0006) ## ## SFLPAG(0005) ## ## 61 SFLMSG('ERREUR PU' 61) ## ## 10 6'numéro' ## ## 10 18'libellé' ## ## 10 31'quantité' ## ## 10 46'prix' ## ##################################################################### |
##################################################################### ## Lorsqu'il y aura une erreur nous mettrons en fonction ## ## l'indic. 61 en plus de 60. 61 sera ON lorsqu'il y ## ## aura au moins une erreur dans un groupe d'enreg. modifiés ## ##################################################################### ## R SFE SFL ## ## NOART R O 13 7REFFLD(NOART ARTICL) ## ## LIBEL R O 13 18REFFLD(LIBEL ARTICL) ## ## QTE R O 13 34REFFLD(QTE ARTICL) ## ## PU R B 13 46REFFLD(PU ARTICL) ## ## 60 DSPATR(RI PC) ## ## R SFC SFLCTL(SFE) OVERLAY ## ## 40 SFLDSP SFLDSPCTL ## ## 41 SFLCLR ## ## SFLSIZ(0006) ## ## SFLPAG(0005) ## ## 61 SFLMSG('ERREUR PU' 61) ## ## 10 6'numéro' ## ## 10 18'libellé' ## ## 10 31'quantité' ## ## 10 46'prix' ## ##################################################################### |
##################################################################### ## et mis OFF avant de rentrer dans la boucle des enregs ## ## modifiés.Par contre 60 sera mis OFF aprés le traitement ## ## d'UN enreg. modifié. (nous verrons cela dans le pgm) ## ##################################################################### ## R SFE SFL ## ## NOART R O 13 7REFFLD(NOART ARTICL) ## ## LIBEL R O 13 18REFFLD(LIBEL ARTICL) ## ## QTE R O 13 34REFFLD(QTE ARTICL) ## ## PU R B 13 46REFFLD(PU ARTICL) ## ## 60 DSPATR(RI PC) ## ## R SFC SFLCTL(SFE) OVERLAY ## ## 40 SFLDSP SFLDSPCTL ## ## 41 SFLCLR ## ## SFLSIZ(0006) ## ## SFLPAG(0005) ## ## 61 SFLMSG('ERREUR PU' 61) ## ## 10 6'numéro' ## ## 10 18'libellé' ## ## 10 31'quantité' ## ## 10 46'prix' ## ##################################################################### |
##################################################################### ## Ensuite nous avons les différentes constantes du format ## ## de contrôle formant l'entete. ## ## ## ##################################################################### ## R SFE SFL ## ## NOART R O 13 7REFFLD(NOART ARTICL) ## ## LIBEL R O 13 18REFFLD(LIBEL ARTICL) ## ## QTE R O 13 34REFFLD(QTE ARTICL) ## ## PU R B 13 46REFFLD(PU ARTICL) ## ## 60 DSPATR(RI PC) ## ## R SFC SFLCTL(SFE) OVERLAY ## ## 40 SFLDSP SFLDSPCTL ## ## 41 SFLCLR ## ## SFLSIZ(0006) ## ## SFLPAG(0005) ## ## 61 SFLMSG('ERREUR PU' 61) ## ## 10 6'numéro' ## ## 10 18'libellé' ## ## 10 31'quantité' ## ## 10 46'prix' ## ##################################################################### |
######################################################################## ## Etudions le programme qui ferait cette maj. ## ## ## ## ## ######################################################################## |
######################################################################## ## 1ere partie toujours la même ## ## ## ## ## ######################################################################## ## ## ## ## ## ## ## FARTICL UF E K DISK ## ## FARTMAJ CF E WORKSTN ## ## F LIGNE KSFILE SFE ## ## C CLEART KLIST ## ## C KFLD TYPART ## ## C KFLD NOART ## ## C WRITEENTETE ## ## C EXFMTINTERO ## ## C *IN03 DOWEQ*OFF ## ## C EXSR STRUC2 ## ## C EXFMTINTERO ## ## C ENDDO ## ## C MOVE *ON *INLR ## ######################################################################## |
######################################################################## ## 2eme partie toujours la même (remplissage) ## ## ## ## ## ######################################################################## ## ## ## ## ## ## ## C STRUC2 BEGSR ## ## C TYPART CHAINARTICL 10 ## ## C *IN10 IFEQ *OFF ## ## C MOVE *ON *IN41 ## ## C WRITESFC ## ## C MOVE *OFF *IN41 ## ## C DO *HIVAL LIGNE 40 ## ## C WRITESFE ## ## C TYPART READEARTICL 10 ## ## C N10 ENDDO ## ## ## ## ## ## ## ######################################################################## |
######################################################################## ## 3eme partie décomposée. Ici début de la boucle ## ## jusqu'à ce qu'il n'y ait plus de modif ## ## commencant par l'affichage du sous-fichier. ## ######################################################################## ## C *IN11 DOUEQ*OFF ## ## C MOVE *ON *IN40 ## ## C EXFMTSFC ## ## C MOVE *OFF *IN40 ## ## C MOVE *OFF *IN11 ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ######################################################################## |
######################################################################## ## 4eme partie elle un peu changé regardons les modifs ## ## apportées. ## ######################################################################## ## C READCSFE 20 ## ## C *IN20 DOWEQ*OFF ## ## C MOVE *ON *IN11 ## ## C CLEART CHAINARTICL 10 ## ## C PU MULT 1.10 PU2 72 ## ## C LIGNE CHAINSFE 10 ## ## C EXSR CONTRO ## ## C *IN60 IFEQ *OFF ## ## C UPDATSFE ## ## C UPDATARTICLF1 ## ## C ELSE ## ## C MOVE *OFF *IN60 ## ## C ENDIF ## ## C READCSFE 20 ## ## C ENDDO ## ## C ENDDO ## ## C ENDIF ## ## C ENDSR ## |
######################################################################## ## Calcul du Prix unitaire maxi. ## ## ## ######################################################################## ## C READCSFE 20 ## ## C *IN20 DOWEQ*OFF ## ## C MOVE *ON *IN11 ## ## C CLEART CHAINARTICL 10 ## ## C PU MULT 1.10 PU2 72 ## ## C LIGNE CHAINSFE 10 ## ## C EXSR CONTRO ## ## C *IN60 IFEQ *OFF ## ## C UPDATSFE ## ## C UPDATARTICLF1 ## ## C ELSE ## ## C MOVE *OFF *IN60 ## ## C ENDIF ## ## C READCSFE 20 ## ## C ENDDO ## ## C ENDDO ## ## C ENDIF ## ## C ENDSR ## |
######################################################################## ## Appel du sous-prog. CONTRO qui effectue le contrôle ## ## du nouveau prix. ## ######################################################################## ## C READCSFE 20 ## ## C *IN20 DOWEQ*OFF ## ## C MOVE *ON *IN11 ## ## C CLEART CHAINARTICL 10 ## ## C PU MULT 1.10 PU2 72 ## ## C LIGNE CHAINSFE 10 ## ## C EXSR CONTRO ## ## C *IN60 IFEQ *OFF ## ## C UPDATSFE ## ## C UPDATARTICLF1 ## ## C ELSE ## ## C MOVE *OFF *IN60 ## ## C ENDIF ## ## C READCSFE 20 ## ## C ENDDO ## ## C ENDDO ## ## C ENDIF ## ## C ENDSR ## |
######################################################################## ## Etudions ce sous-prog. ## ## ## ######################################################################## ## C CONTRO BEGSR ## ## C PU IFGT PU2 ## ## C SETON 6061 ## ## C UPDATSFE ## ## C ENDIF ## ## C ENDSR ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ######################################################################## |
######################################################################## ## Si PU saisie est > pu maxi ## ## ## ######################################################################## ## C CONTRO BEGSR ## ## C PU IFGT PU2 ## ## C SETON 6061 ## ## C UPDATSFE ## ## C ENDIF ## ## C ENDSR ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ######################################################################## |
######################################################################## ## il met en fonction 60 61,60 = DSPATR(RI PC),61 = SFLMSG ## ## ## ######################################################################## ## C CONTRO BEGSR ## ## C PU IFGT PU2 ## ## C SETON 6061 ## ## C UPDATSFE ## ## C ENDIF ## ## C ENDSR ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ######################################################################## |
######################################################################## ## puis mise à jour de l'enreg. du sous-fic. ## ## pour que le DSPATR(RI PC) devienne éffectif. ## ######################################################################## ## C CONTRO BEGSR ## ## C PU IFGT PU2 ## ## C SETON 6061 ## ## C UPDATSFE ## ## C ENDIF ## ## C ENDSR ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ######################################################################## |
######################################################################## ## Fin du IF,puis du sous programme. ## ## ## ######################################################################## ## C CONTRO BEGSR ## ## C PU IFGT PU2 ## ## C SETON 6061 ## ## C UPDATSFE ## ## C ENDIF ## ## C ENDSR ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ######################################################################## |
######################################################################## ## Revenons à notre programme et continuons ## ## à regarder les modifs. ## ######################################################################## ## C READCSFE 20 ## ## C *IN20 DOWEQ*OFF ## ## C MOVE *ON *IN11 ## ## C CLEART CHAINARTICL 10 ## ## C PU MULT 1.10 PU2 72 ## ## C LIGNE CHAINSFE 10 ## ## C EXSR CONTRO ## ## C *IN60 IFEQ *OFF ## ## C UPDATSFE ## ## C UPDATARTICLF1 ## ## C ELSE ## ## C MOVE *OFF *IN60 ## ## C ENDIF ## ## C READCSFE 20 ## ## C ENDDO ## ## C ENDDO ## ## C ENDIF ## ## C ENDSR |
######################################################################## ## On teste s'il n'y a pas eu une erreur ## ## ## ######################################################################## ## C READCSFE 20 ## ## C *IN20 DOWEQ*OFF ## ## C MOVE *ON *IN11 ## ## C CLEART CHAINARTICL 10 ## ## C PU MULT 1.10 PU2 72 ## ## C LIGNE CHAINSFE 10 ## ## C EXSR CONTRO ## ## C *IN60 IFEQ *OFF ## ## C UPDATSFE ## ## C UPDATARTICLF1 ## ## C ELSE ## ## C MOVE *OFF *IN60 ## ## C ENDIF ## ## C READCSFE 20 ## ## C ENDDO ## ## C ENDDO ## ## C ENDIF ## ## C ENDSR |
######################################################################## ## Si oui on met a jour le SFE POURQUOI? ## ## ## ######################################################################## ## C READCSFE 20 ## ## C *IN20 DOWEQ*OFF ## ## C MOVE *ON *IN11 ## ## C CLEART CHAINARTICL 10 ## ## C PU MULT 1.10 PU2 72 ## ## C LIGNE CHAINSFE 10 ## ## C EXSR CONTRO ## ## C *IN60 IFEQ *OFF ## ## C UPDATSFE ## ## C UPDATARTICLF1 ## ## C ELSE ## ## C MOVE *OFF *IN60 ## ## C ENDIF ## ## C READCSFE 20 ## ## C ENDDO ## ## C ENDDO ## ## C ENDIF ## ## C ENDSR |
######################################################################## ## Si cet enregistrement était en erreur précedement il faut annuler ## ## le DSPATR(RI PC) (60 OFF) et le rendre éffectif à l'écran (UPDAT). ## ######################################################################## ## C READCSFE 20 ## ## C *IN20 DOWEQ*OFF ## ## C MOVE *ON *IN11 ## ## C CLEART CHAINARTICL 10 ## ## C PU MULT 1.10 PU2 72 ## ## C LIGNE CHAINSFE 10 ## ## C EXSR CONTRO ## ## C *IN60 IFEQ *OFF ## ## C UPDATSFE ## ## C UPDATARTICLF1 ## ## C ELSE ## ## C MOVE *OFF *IN60 ## ## C ENDIF ## ## C READCSFE 20 ## ## C ENDDO ## ## C ENDDO ## ## C ENDIF ## ## C ENDSR |
######################################################################## ## puis mise à jour de l'enreg. dans le fichier ARTICL ## ## ## ######################################################################## ## C READCSFE 20 ## ## C *IN20 DOWEQ*OFF ## ## C MOVE *ON *IN11 ## ## C CLEART CHAINARTICL 10 ## ## C PU MULT 1.10 PU2 72 ## ## C LIGNE CHAINSFE 10 ## ## C EXSR CONTRO ## ## C *IN60 IFEQ *OFF ## ## C UPDATSFE ## ## C UPDATARTICLF1 ## ## C ELSE ## ## C MOVE *OFF *IN60 ## ## C ENDIF ## ## C READCSFE 20 ## ## C ENDDO ## ## C ENDDO ## ## C ENDIF ## ## C ENDSR |
######################################################################## ## SINON (60 ON = erreur détectée ET signalée par CONTRO). ## ## ## ######################################################################## ## C READCSFE 20 ## ## C *IN20 DOWEQ*OFF ## ## C MOVE *ON *IN11 ## ## C CLEART CHAINARTICL 10 ## ## C PU MULT 1.10 PU2 72 ## ## C LIGNE CHAINSFE 10 ## ## C EXSR CONTRO ## ## C *IN60 IFEQ *OFF ## ## C UPDATSFE ## ## C UPDATARTICLF1 ## ## C ELSE ## ## C MOVE *OFF *IN60 ## ## C ENDIF ## ## C READCSFE 20 ## ## C ENDDO ## ## C ENDDO ## ## C ENDIF ## ## C ENDSR |
######################################################################## ## On met OFF 60 pour le prochain enreg. modifié ## ## (le sous-fichier à déja été modifié). ## ######################################################################## ## C READCSFE 20 ## ## C *IN20 DOWEQ*OFF ## ## C MOVE *ON *IN11 ## ## C CLEART CHAINARTICL 10 ## ## C PU MULT 1.10 PU2 72 ## ## C LIGNE CHAINSFE 10 ## ## C EXSR CONTRO ## ## C *IN60 IFEQ *OFF ## ## C UPDATSFE ## ## C UPDATARTICLF1 ## ## C ELSE ## ## C MOVE *OFF *IN60 ## ## C ENDIF ## ## C READCSFE 20 ## ## C ENDDO ## ## C ENDDO ## ## C ENDIF ## ## C ENDSR |
######################################################################## ## FIN ## ## ## ######################################################################## ## C READCSFE 20 ## ## C *IN20 DOWEQ*OFF ## ## C MOVE *ON *IN11 ## ## C CLEART CHAINARTICL 10 ## ## C PU MULT 1.10 PU2 72 ## ## C LIGNE CHAINSFE 10 ## ## C EXSR CONTRO ## ## C *IN60 IFEQ *OFF ## ## C UPDATSFE ## ## C UPDATARTICLF1 ## ## C ELSE ## ## C MOVE *OFF *IN60 ## ## C ENDIF ## ## C READCSFE 20 ## ## C ENDDO ## ## C ENDDO ## ## C ENDIF ## ## C ENDSR |
Vous venez donc de voir le programme. Mais il reste un petit détail à régler. Lorsqu'il y a une erreur, notre programme visualise à nouveau le sous-fichier et indique l'erreur grâce au SFLMSG et à la zone en inversion d'image. |
Vous venez donc de voir le programme. Mais il reste un petit détail à régler. Lorsqu'il y a une erreur, notre programme visualise à nouveau le sous-fichier et indique l'erreur grâce au SFLMSG et à la zone en inversion d'image. Si l'utilisateur corrige ou refait un erreur de prix PAS DE PROBLEME. Ayant modifié l'enregistrement le programme va le relire et donc le traiter. |
Vous venez donc de voir le programme. Mais il reste un petit détail à régler. Lorsqu'il y a une erreur, notre programme visualise à nouveau le sous-fichier et indique l'erreur grâce au SFLMSG et à la zone en inversion d'image. Si l'utilisateur corrige ou refait un erreur de prix PAS DE PROBLEME. Ayant modifié l'enregistrement le programme va le relire et donc le traiter. Mais s'il ne fait rien, le programme va sortir de la boucle sans signaler d'erreur. L'utilisateur pourrait alors croire sa modification effectuée, ce qui n'est pas le cas. COMMENT FAIRE ? |
Vous allez voir c'est tout simple. Il faut forcer la lecture d'un enreg. qu'il soit modifié ou non par l'utilisateur, à chaque enregistrement détecté en erreur. |
Vous allez voir c'est tout simple. Il faut forcer la lecture d'un enreg. qu'il soit modifié ou non par l'utilisateur, à chaque enregistrement détecté en erreur. Pour cela on utilise la fonction SFLNXTCHG au niveau format d'ENREGISTREMENT du sous-fichier. |
Vous allez voir c'est tout simple. Il faut forcer la lecture d'un enreg. qu'il soit modifié ou non par l'utilisateur, à chaque enregistrement détecté en erreur. Pour cela on utilise la fonction SFLNXTCHG au niveau format d'ENREGISTREMENT du sous-fichier. Cette fonction si elle active pour un enregistrement, force sa lecture par READC. Généralement on conditionne cette fonction, sinon elle serait active pour TOUS les enregistrements. |
Mise en oeuvre Dans SFE nous allons définir la fonction SFLNXTCHG (NEXT CHANGE) conditionné par 60.Lorsqu'il y aura une erreur je mettrais en fonction l'indicateur 60 et mettrais à jour l'enregistrement du sous-fichier. ##################################################################### ## R SFE SFL ## ## 60 SFLNXTCHG ## ## NOART R O 13 7REFFLD(NOART ARTICL) ## ## LIBEL R O 13 18REFFLD(LIBEL ARTICL) ## ## QTE R O 13 34REFFLD(QTE ARTICL) ## ## PU R B 13 46REFFLD(PU ARTICL) ## ## 60 DSPATR(RI PC) ## ## ## ## ## ## ## ## ## ## ## ##################################################################### |
Mise en oeuvre Ce qui était déja fait par le programme pour DSPATR(RI PC) le programme sera donc identique. ##################################################################### ## R SFE SFL ## ## 60 SFLNXTCHG ## ## NOART R O 13 7REFFLD(NOART ARTICL) ## ## LIBEL R O 13 18REFFLD(LIBEL ARTICL) ## ## QTE R O 13 34REFFLD(QTE ARTICL) ## ## PU R B 13 46REFFLD(PU ARTICL) ## ## 60 DSPATR(RI PC) ## ## ## ## ## ## ## ## ## ## ## ##################################################################### |