Probleme fichier primaire

15-12-2006 à 09:27:28
Bonjour a tous
Voila petit soucis je viens de tomber sur un source ou plusieurs fichier sont declarer dont 1 en primaire (jusque la je suis) puis j'ai un code de ce type c'est different niveau de rupture

Itoto r
I zone42 l4
I zone41 l4
I zone40 l4
I zone3 l3
I zone2 l2
I zone1 l1

puis en carte c (les L1 sont en N01)
c l1 setoff 91
c l1 eval prx1 = 0
c l1 eval prx2 = 0
puis
c seton 91

c eval prix1 = prix2 + zonefic1

cl1 91 exsr write

Voila j'aimerai comprendre les differents etats de L1 (selon la rupture L2, L3, L4 ne sont pas utilisé dans le reste du programme) et l'utilité de 91 tout le reste j'ai compris.....
  • Liens sponsorisés



14-12-2006 à 15:17:53
merci d'avance
14-12-2006 à 16:03:51
Bonjour,

Tu utilise le cycle GAP pour fair eton traitement
Les différents niveaux L1, L2, etc. sont tes niveaux de ruptures sur les zone1, Zone2, etc. (maxi L9)

I Zone4 L4
I Zone3 L3
I Zone2 L2
I Zone1 L1

Après dans ton corps de programme (en carte C) tu vas faire tes traitements selon tes ruptures :

C L1 EXSR TRAIL1 => Ruptur Détail : Changement de Zone1, (tu initialises ta zone de travail pour un nouveau traitement. par ex. i=0).
C EXSR TRAI01 => Pour chaque lecture (i=i+1)
CL1 EXSR TRAIT1 => Traitement TOTAL sur ta Zone1 (c'est là que tu fais des totaux et les édites, par ex. 'Nb Total animaux = ' i)

J'espère m'être fait comprendre.
14-12-2006 à 16:19:31
Bonjour,

petite précision (si ma mémoire ne me fait pas défaut) :
lorsque tu as une rupture sur L4
cela déclenche automatiquement une rupture sur L3
qui déclenche automatiquement une rupture sur L2
qui déclenche automatiquement une rupture sur L1

Voilà.

Wilfrid.
14-12-2006 à 16:29:30
Tu as entièrement raison ! Et quand tu commences tu es en ruptur détail L1, si ma mémoire est bonne aussi.
14-12-2006 à 18:29:39
Merci de vous pencher sur mon soucis....
Alors question 91 ne sert a rien dans le traitement que j'ai montré ??
Lorsque que l'on est en rupture sur L1 on declenche bien les traitement de mise a zero
le calcul mais avec les zone reinit
puis le exsr
Et c'est la que je comprend pas car si on reinitialise pourquoi on va ecrire apres.... ou alors l'exsr se fait tant qu'il n'y pas de rupture ???
15-12-2006 à 08:23:43
Ton indicateur 91 sert peut-être dans la sous-routine WRITE (d'ailleurs c'est un nom bizarre, je crois que tu n'a pas le droit il est réservé ?). Le programme marche comme ça.

Zone1 L1 (déclaration niveau de rupture)

1° lecture => *INL1 est *ON
donc le programme va faire :
SetOff *In91
Prix1=0
Prix2=0
SetOn *In91

Puis ton traitement Détail pour chaque enregistrement :
Prix1=Prix2+(qqchose)

Quand tu change de zone1
Traitement TOTAL L1 : Tu fais ton EXSR WRITE


--Message édité par Saavik le 15-12-06 à 08:30:58--
15-12-2006 à 08:57:53
Bonjour,
il y a plusieurs facons de travailler avec un fichier en primaire.
soit vous travaillez en cycle gap, ruptures detail et total et sortie d,t,o
soit vous travaillez en cycle gap, ruptures detail et total et sortie except.
dans l'exemple, à chaque lecture, on traite les lignes sans indicateur de rupture (seton 91 puis eval prix1=...)
le exsr write se fait en rupture TOTAL alors que les init se font en rupture DETAIL.
Un cas simple pour comprendre :
tu fais des stats, on te demande un ca par pays et par vendeur.
Tu fais un LF par pays, par vendeur, par article, le pf contenant les zones Pays, Vendeur, Article, Montant.
Dans ton programme, tu déclares les ruptures (carte I) : Pays L3, Vendeur L2 et Article L1.
tu dois calculer un montant total par article (il peut y avoir +ieurs fois le même article pour un même vendeur), par vendeur et par pays.
en carte C, sans indicateur, c'est à dire à chaque lecture du fichier primaire, tu fais tes cumuls :
TotalArticle += montant article
TotalVendeur+= montant article
TotalPays += montant article
pour imprimer les totaux correspondants à chaque rupture, tu dois être en rupture TOTAL, c'est à dire que tu attends d'avoir lu le dernier enregistrement correspondant à la rupture pour effectuer un traitement particulier, ici, éditer le montant total.
en carte C, tu écris : CL1 Excpt FinArticle (édition), éventuellement sur la ligne suivante tu écris CL1 TotalArticle = 0 pour remettre à 0 avant de lire l'article suivant etc...etc...
de la même facon, tu écris CL2 Excpt FinVendeur, CL3 Excpt FinPays, éventuellement CLR Excpt FinTotal (FinVendeur, FinPays et FinTotal sont déclarées en carte O).
en L1 DETAIL (en N01 comme tu l'écris), tu peux par exemple éditer les lignes de séparation avec les noms des pays et des vendeurs.

Pays : 00 FRANCE L3 detail
Vendeur : 001 Mr untel L2 detail
article AAAAA 1000,00 detail
article AAAAA 2000,00
Total article AAAA 3000,00 L1 total
article BBBBB 500,000 detail
Total article BBBBB 500,00 L1 total
Total Vendeur 001 3500,00 L2 total
Total Pays 01 3500,00 L3 total
Pays 02 SENEGAL L3 detail
Vendeur : 020 Mr truc L2 detail
article AAAA 1000,00 detail
Total article AAA 1000,00 L1 total
Total vendeur 020 1000,00 L2 total
Total pays 02 1000,00 L3 total
Total 4500,00 LR total

c'est plus clair ?
15-12-2006 à 09:18:50
Merci pour toutes ses infos.....
L'indicateur *in91 n'est pas utilisé ailleurs......
En fait je recupere un existant ......
Je redessine les chaines de traitement afin de reecrire tout le bouzin (plus de 180 programmes) j'avais deja bosser sur du cycle mais j'avoue que la je me suis trouvé con ..... LOL
Merci en tout cas
15-12-2006 à 09:27:28
La ou je trouve que l'existant est tordu c'est que malgre la déclaration de plusieurs rupture seul la L1 est utilisé.....
  • Liens sponsorisés