Page précédente Table des matières Page suivante


6. LISTING DES PROGRAMMES. (suite.)

EX (pédition)_2_MEN (suelle) COMMAND FILE

***********************************************************************************************
Ce programme calcule, par mois, les expéditions hors fivondronana par moyen de conservation. Les données ont été transférées sur disque dur pour raison de sécurité. Le programme ne traite que les données d'expédition et non celles des exportations.

Les résultats sont présentés mensuellement par fivondronana ou annuellement par faritany (tous les fivondronana du faritany).
***********************************************************************************************

* création de deux fichiers suplémentaires pour traitement plus rapide.
USE C:ZIPZIP
COPY STRUCTURE TO C:ZIP_2.DBF
COPY STRUCTURE TO C:Zip_3.DBF
USE

* impression de l'entête.
Mdate = DATE()
STORE SPACE (1) TO Part
DO SETUP
SET PRINT OFF
DO LINE

* préparation des paramètres.
SET TALK OFF
Part ="1'
Process = .T.
USE C:Zip_3
APPEND FROM C:Zipzip FOR (DESTIN < "700")
USE &&closeZip_3

* préparation des paramètres pour choix "tous les fivondronana du faritany.
IF Fiv ="000'
   STORE 0 TO T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17
   STORE 0 TO T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32
   STORE 0 TO T33,T34,T35,T36,T37,T38,T39,T40,TTQ1,TTQ2
   STORE 1 TO Count
   STORE 0 TO Z1,Z2,Z3,Z4,Z5,Z6,Z7,Z8,Z9,Z10,Z11,Z12,Z13,Z14,Z15,Z16,Z17,Z18
   STORE 0 TO Z19,Z20,Z21,Z22,Z23,Z24,Z25,Z26,Z27,Z28,Z29,Z30,Z31,Z32,Z33,Z34
   STORE 0 TO Z35,Z36,Z37,Z38,Z39,Z40,ZZV1,ZZV2
   DO CASE
      CASE Far ="1'
           STORE '103' TO Y
      CASE Far ="2'
           STORE '202' TO Y
      CASE Far ="3'
           STORE '302' TO Y
      CASE Far ="4'
           STORE '402' TO Y
      CASE Far ="5'
           STORE '502' TO Y
      CASE Far ="6'
           STORE '602' TO Y
   ENDCASE
ENDIF

* Boucle principale.
DO WHILE Process

* Si le choix porte sur un fivondronana d'un faritany, résultats mensuels.
   IF Fiv <> '000'
      STORE 1 TO Tel
      STORE 0 TO T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17
      STORE 0 TO T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32
      STORE 0 TO T33,T34,T35,T36,T37,T38,T39,T40
      STORE 0 TO Z1,Z2,Z3,Z4,Z5,Z6,Z7,Z8,Z9,Z10,Z11,Z12,Z13,Z14,Z15,Z16,Z17
      STORE 0 TO Z18,Z19,Z20,Z21,Z22,Z23,Z24,Z25,Z26,Z27,Z28,Z29,Z30,Z31,Z32
      SUM QUANTITE,VALEUR TO Q2,V2 FOR(NAT-PROD = "02")
      SUM QUANTITE,VALEUR TO Q3,V3 FOR(NAT-PROD = "03")
      SUM QUANTITE,VALEUR TO Q4,V4 FOR(NAT-PROD = "04")
      SUM QUANTITE,VALEUR TO Q5,V5 FOR(NAT-PROD = "05")
      SUM QUANTITE,VALEUR TO Q6,V6 FOR(NAT-PROD = "06")
      SUM QUANTITE,VALEUR TO Q7,V7 FOR(NAT-PROD = "07")
      SUM QUANTITE,VALEUR TO Q8,V8 FOR(NAT-PROD = "08")
      SUM QUANTITE,VALEUR TO Q9,V9 FOR(NAT-PROD = "09")
      SUM QUANTITE,VALEUR TO Q10,V10 FOR(NAT-PROD = "10")
      SUM QUANTITE,VALEUR TO Q11,V11 FOR(NAT-PROD = "11")
      SUM QUANTITE,VALEUR TO Q12,V12 FOR(NAT-PROD = "12")
      SUM QUANTITE,VALEUR TO Q13,V13 FOR(NAT-PROD = "13")
      SUM QUANTITE,VALEUR TO Q14,V14 FOR(NAT-PROD = "14")
      SUM QUANTITE,VALEUR TO Q15,V15 FOR(NAT-PROD = "15")
      SUM QUANTITE,VALEUR TO Q16,V16 FOR(NAT-PROD = "16")
      SUM QUANTITE,VALEUR TO Q17,V17 FOR(NAT-PROD = "17")
      SUM QUANTITE,VALEUR TO Q18,V18 FOR(NAT-PROD = "18")
      SUM QUANTITE,VALEUR TO Q19,V19 FOR(NAT-PROD = "19")
      SUM QUANTITE,VALEUR TO Q20,V20
      USE &&close
      SET PRINT ON
      ?? CHR(15)
      ? "| TOTAUX"+SPACE(216)+" |"
? "| QUANTITE"+SPACE(11)+STR(Q1,8)+STR(Q2,8)+STR(Q3,8)+" | "+STR(Q4,8);
+STR(Q5,8)+STR(Q6,8)+" | "+STR(Q7,8)+STR(Q8,8)+STR(Q9,8)+" | "+STR(Q10,8);
+STR(Q11,8)+" | "+STR(Q12,8)+" | "+STR(Q13,8)+" | "+STR(Q14,8)+" | "
?? +STR(Q15,8)+" | "+STR(Q16,8)+" | "+STR(Q17,8)+" | "+STR(Q18,8)+" | ";
+STR(Q19,8)+" | "+STR(Q20,14)+" | "
? "| VALEUR"+SPACE(13)+STR(V1/1000,8)+STR(V2/1000,8)+STR(V3/1000,8)+" | ";
+STR(V4/1000,8)+STR(V5/1000,8)+STR(V6/1000,8)+" | "+STR(V7/1000,8);
+STR(V8/1000,8)+STR(V9/1000,8)+" | "+STR(V10/1000,8)+STR(V11/1000,8)
?? " | "+STR(V12/1000,8)+" | "+STR(V13/1000,8)+" | "+STR(V14/1000,8)+" | ";
+STR(V15/1000,8)+" | "+STR(V16/1000,8)+" | "+STR(V17/1000,8)+" | ";
+STR(V18/1000,8)+" | "+STR(V19/1000,8)+" | "+STR(V20/1000,8)+" | "
      SET PRINT OFF
      DO LINE
      SET PRINT ON
      EJECT
      SET PRINT OFF
   ENDIF

* remise en état et retour au menu.
  USE
  DELETE FILE C:Zip_2.DBF
  DELETE FILE C:Zip_3.DBF
  DELETE FILE C:Zipzip.DBF
  RELEASE ALL
  RETURN
* retour au menu principal.
  STORE 0 TO Z33,Z34,Z35,Z36,Z37,Z40

* boucle des mois, calcul et impression des résultats; première partie.

   DO WHILE Tel < 13
      STORE ' ' TO X
      IF Tel < 10
         STORE 'O'+STR(Tel,1) TO X
      ELSE
         STORE STR (Tel,2) TO X
      ENDIF
      USE C:Zip_2.DBF &&open
   APPEND FROM C:Zip_3 FOR (CONSERV < "27" .AND. SUBSTR(DTOC(DATE),4,2) = X)
      SUM QUANTITE,VALEUR TO Q1,V1 FOR (CONSERV ="01')
      SUM QUANTITE,VALEUR TO Q2,V2 FOR (CONSERV ="02')
      SUM QUANTITE,VALEUR TO Q3,V3 FOR (CONSERV ="03')
      SUM QUANTITE,VALEUR TO Q4,V4 FOR (CONSERV ="04')
      SUM QUANTITE,VALEUR TO Q5,V5 FOR (CONSERV ="05')
      SUM QUANTITE,VALEUR TO Q6,V6 FOR (CONSERV ="06')
      SUM QUANTITE,VALEUR TO Q7,V7 FOR (CONSERV ="07')
      SUM QUANTITE,VALEUR TO Q8,V8 FOR (CONSERV ="08')
      SUM QUANTITE,VALEUR TO Q9,V9 FOR (CONSERV ="09')
      SUM QUANTITE,VALEUR TO Q10,V10 FOR (CONSERV ="10')
      SUM QUANTITE,VALEUR TO Q11,V11 FOR (CONSERV ="11')
      SUM QUANTITE,VALEUR TO Q12,V12 FOR (CONSERV ="12')
      SUM QUANTITE,VALEUR TO Q13,V13 FOR (CONSERV ="13')
      SUM QUANTITE,VALEUR TO Q14,V14 FOR (CONSERV ="14')
      SUM QUANTITE,VALEUR TO Q15,V15 FOR (CONSERV ="15')
      SUM QUANTITE,VALEUR TO Q16,V16 FOR (CONSERV ="16')
      SUM QUANTITE,VALEUR TO Q17,V17 FOR (CONSERV ="17')
      SUM QUANTITE,VALEUR TO Q18,V18 FOR (CONSERV ="18')
      SUM QUANTITE,VALEUR TO Q19,V19 FOR (CONSERV ="19')
      SUM QUANTITE,VALEUR TO Q20,V20 FOR (CONSERV ="20')
      SUM QUANTITE,VALEUR TO Q21,V21 FOR (CONSERV ="21')
      SUM QUANTITE,VALEUR TO Q22,V22 FOR (CONSERV ="22')
      SUM QUANTITE,VALEUR TO Q23,V23 FOR (CONSERV ="23')
      SUM QUANTITE,VALEUR TO Q24,V24 FOR (CONSERV ="24')
      SUM QUANTITE,VALEUR TO Q25,V25 FOR (CONSERV ="25')
      SUM QUANTITE,VALEUR TO Q26,V26 FOR (CONSERV ="26')
      DELETE ALL
      PACK
      USE &&close

* usage de variables mémoires pour la quantité et la valeur en vue d'une
* sommation totale finale plus rapide.
      STORE Q1 + T1 TO T1
      STORE Q2 + T2 TO T2
      STORE Q3 + T3 TO T3
      STORE Q4 + T4 TO T4
      STORE Q5 + T5 TO T5
      STORE Q6 + T6 TO T6
      STORE Q7 + T7 TO T7
      STORE Q8 + T8 TO T8
      STORE Q9 + T9 TO T9
      STORE Q10 + T10 TO T10
      STORE Q11 + T11 TO T11
      STORE Q12 + T12 TO T12
      STORE Q13 + T13 TO T13
      STORE Q14 + T14 TO T14
      STORE Q15 + T15 TO T15
      STORE Q16 + T16 TO T16
      STORE Q17 + T17 TO T17
      STORE Q18 + T18 TO T18
      STORE Q19 + T19 TO T19
      STORE Q20 + T20 TO T20
      STORE Q21 + T21 TO T21
      STORE Q22 + T22 TO T22
      STORE Q23 + T23 TO T23
      STORE Q24 + T24 TO T24
      STORE Q25 + T25 TO T25
      STORE Q26 + T26 TO T26

      STORE (V1/1000) + Z1 TO Z1
      STORE (V2/1000) + Z2 TO Z2
      STORE (V3/1000) + Z3 TO Z3
      STORE (V4/1000) + Z4 TO Z4
      STORE (V5/1000) + Z5 TO Z5
      STORE (V6/1000) + Z6 TO Z6
      STORE (V7/1000) + Z7 TO Z7
      STORE (V8/1000) + Z8 TO Z8
      STORE (V9/1000) + Z9 TO Z9
      STORE (V10/1000) + Z10 TO Z10
      STORE (V11/1000) + Z11 TO Z11
      STORE (V12/1000) + Z12 TO Z12
      STORE (V13/1000) + Z13 TO Z13
      STORE (V14/1000) + Z14 TO Z14
      STORE (V15/1000) + Z15 TO Z15
      STORE (V16/1000) + Z16 TO Z16
      STORE (V17/1000) + Z17 TO Z17
      STORE (V18/1000) + Z18 TO Z18
      STORE (V19/1000) + Z19 TO Z19
      STORE (V20/1000) + Z20 TO Z20
      STORE (V21/1000) + Z21 TO Z21
      STORE (V22/1000) + Z22 TO Z22
      STORE (V23/1000) + Z23 TO Z23
      STORE (V24/1000) + Z24 TO Z24
      STORE (V25/1000) + Z25 TO Z25
      STORE (V26/1000) + Z26 TO Z26

* impression des résultats, première partie, résultats mensuels.
      SET CONSOLE OFF
      SET PRINT ON
      ?? CHR(15) &&condensed print
? "|"+STR(Tel,2)+"Q"+STR(Q1,9)+STR(Q2,8)+STR(Q3,8)+STR(Q4,8)+STR(Q5,8);
+STR(Q6,8)+STR(Q7,8)+STR(Q8,8)+STR(Q9,8)+STR(Q10,8)+" | "+STR(Q11,8)+STR(Q12,8);
+STR(Q13,8)+STR(Q14,8)+STR(Q15,8)+STR(Q16,8)+STR(Q17,8)+STR(Q18,8)
?? " | "+STR(Q19,8)+STR(Q20,8)+STR(Q21,8)+STR(Q22,8)+" | "+STR(Q23,8);
+STR(Q24,8)+STR(Q25,8)+STR(Q26,8)+" | "
? "| V"+STR(V1/1000,9)+STR(V2/1000,8)+STR(V3/1000,8)+STR(V4/1000,8);
+STR(V5/1000,8)+STR(V6/1000,8)+STR(V7/1000,8)+STR(V8/1000,8)+STR(V9/1000,8);
+STR(V10/1000,8)+" | "+STR(V11/1000,8)+STR(V12/1000,8)+STR(V13/1000,8)
?? STR(V14/1000,8)+STR(V15/1000,8)+STR(V16/1000,8)+STR(V17/1000,8);
+STR(V18/1000,8)+" | "+STR(V19/1000,8)+STR(V20/1000,8)+STR(V21/1000,8);
+STR(V22/1000,8)+" | "+STR(V23/1000,8)+STR(V24/1000,8)
?? STR(V25/1000,8)+STR(V26/1000,8)+" | "
      DO Line
      SET PRINT OFF

* saut au mois suivant.
      STORE Tel + 1 TO Tel
   ENDDO Tel

* calcul et impression des totaux (sommation des douzes mois), première
* partie.
      IF Tel > 12
         DO LINE
         SET CONSOLE OFF
         SET PRINT ON
         ?? CHR (15) &&condensed print
         ? "| TOTAL"+SPACE (215)+" | "
         ? "| QUANT"
?? STR(T1,8)+STR(T2,8)+STR(T3,8)+STR(T4,8)+STR(T5,8)+STR(T6,8)+STR(T7,8);
+STR(T8,8)+STR(T9,8)+STR(T10,8)+" |"+STR(T11,8)+STR(T12,8)+STR(T13,8);
+STR(T14,8)+STR(T15,8)
?? STR(T16,8)+STR(T17,8)+STR(T18,8)+" | "+STR(T19,8)+STR(T20,8)+STR(T21,8);
+STR(T22,8)+" | "+STR(T23,8)+STR(T24,8)+STR(T25,8)+STR(T26,8)+" |"
         ? "|VALEU"
?? STR(Z1,8)+STR(Z2,8)+STR(Z3,8)+STR(Z4,8)+STR(Z5,8)+STR(Z6,8)+STR(Z7,8);
+STR(Z8,8)+STR(Z9,8)+STR(Z10,8)+" | "+STR(Z11,8)+STR(Z12,8)+STR(Z13,8);
+STR(Z14,8)+STR(Z15,8)
?? STR(Z16,8)+STR(Z17,8)+STR(Z18,8)+" | "+STR(Z19,8)+STR(Z20,8)+STR(Z21,8);
+STR(Z22,8)+" | "+STR(Z23,8)+STR(Z24,8)+STR(Z25,8)+STR(Z26,8)+" | "
         SET PRINT OFF
         DO LINE
         SET CONSOLE OFF
      ENDIF &&>12part 1

* Seconde partie, résultats mensuels par fivondronana.
     STORE '2' TO Part
     SET PRINT ON
     EJECT

* impression de l'entête, seconde partie.
     ?? CHR(18)
     ? SPACE (15)+"Seconde partie"
     ?? SPACE (7)
     ?? CHR(14)
     ?? "EXPEDITION hors FIVONDRONANA"
     ?? CHR(20)
     ?? CHR(15)
     ? SPACE(25)+"Date : "+DTOC(Mdate)
     SET CONSOLE OFF
     SET PRINT ON
     ?
     ?? CHR(18)
     DO SETUP
     SET PRINT OFF
     DO LINE
     STORE 1 TO Tel

* boucle des mois, seconde partie.
     DO WHILE Tel < 13
        SET CONSOLE OFF
        STORE SPACE (2) TO X
        IF Tel < 10
           STORE 'O' +STR(Tel,1) TO X
        ELSE
           STORE STR(Tel,2) TO X
        ENDIF
        USE C:ZIP_8.DBF

* sommation des quantités et valeurs, seconde partie.
     APPEND FROM C:ZIP 3 FOR(CONSERV > "26" .AND. SUBSTR (DTOC(DATE),4,2) = X)
        SUM QUANTITE,VALEUR TO 027,V27 FOR (CONSERV ="27')
        SUM QUANTITE,VALEUR TO 028,V28 FOR (CONSERV ="28')
        SUM QUANTITE,VALEUR TO 029,V29 FOR (CONSERV ="29')
        SUM QUANTITE,VALEUR TO 030,V30 FOR (CONSERV ="30')
        SUM QUANTITE,VALEUR TO 031,V31 FOR (CONSERV ="31')
        SUM QUANTITE,VALEUR TO 032,V32 FOR (CONSERV ="32')
        SUM QUANTITE,VALEUR TO 033,V33 FOR (CONSERV ="33')
        SUM QUANTITE,VALEUR TO 034,V34 FOR (CONSERV ="34')
        SUM QUANTITE,VALEUR TO 035,V35 FOR (CONSERV ="35')
        SUM QUANTITE,VALEUR TO 036,V36 FOR (CONSERV ="36')
        SUM QUANTITE,VALEUR TO 037,V37 FOR (CONSERV ="37')
        DELETE ALL
        PACK
        USE &&close

* usage de variables mémoires pour sommation plus rapide des résultats des
* douze mois.
        STORE 027 + T27 TO T27
        STORE 028 + T28 TO T28
        STORE 029 + T29 TO T29
        STORE 030 + T30 TO T30
        STORE Q31 + T31 TO T31
        STORE Q32 + T32 TO T32
        STORE Q33 + T33 TO T33
        STORE Q34 + T34 TO T34
        STORE Q35 + T35 TO T35
        STORE Q36 + T36 TO T36
        STORE Q37 + T37 TO T37
        STORE (V27/1000) + Z27 TO Z27
        STORE (V28/1000) + Z28 TO Z28
        STORE (V29/1000) + Z29 TO Z29
        STORE (V30/1000) + Z30 TO Z30
        STORE (V31/1000) + Z31 TO Z31
        STORE (V32/1000) + Z32 TO Z32
        STORE (V33/1000) + Z33 TO Z33
        STORE (V34/1000) + Z34 TO Z34
        STORE (V35/1000) + Z35 TO Z35
        STORE (V36/1000) + Z36 TO Z36
        STORE (V37/1000) + Z37 TO Z37
        USE C:ZIP 3
        SUM QUANTITE, VALEUR TO QTOT, VTOT FOR (SUBSTR(DTOC(DATE),4,2) =X)
        USE &&close

* impression des résultats mensuels.
        SET PRINT ON
        ?? CHR (15)
? SPACE(25)+" | "+STR(Tel,4)+"Quantité"+STR(Q27,8)+STR(Q28,8)+STR(Q29,8);
+" | "+STR(Q30,8)+" | "+STR(Q31,8)+STR(Q32,8)+" | "+STR(Q33,8);
+STR(Q34,8)+" | "+STR(Q35,8)+" | "+STR(Q36,8)+" | "
?? STR(Q37,8)+"||"+STR(QTOT,14)+" |"
? SPACE(25)+"| Valeur  "+STR(V27/1000,8)+STR(V28/1000,8)+" | ";
+STR(V29/1000,8)+" | "+STR(V30/1000,8)+" | "+STR(V31/1000,8)+" | ";
+STR(V32/1000,8)+" | "+STR(V33/1000,8)+STR(V34/1000,8)+" | "
?? STR(V35/1000,8)+" | "+STR(V36/1000,8)+" | "+STR(V37/1000,8)+"|| ";
+STR(VTOT/1000,14)+" | "
        DO Line
        ?? CHR (18)
        SET PRINT OFF
        STORE QTOT + T40 TO T40
        STORE VTOT + Z40 TO Z40
        STORE Tel + 1 TO Tel
     ENDDO && tel part2

* sommation et impression des totaux des douze mois.
     IF Tel > 12
        DO LINE
        SET PRINT ON
        ?? CHR (15)
        ? SPACE (25)+"| TOTAL"+SPACE(137)+"|"
? SPACE (25)+"| QUANTITE"+STR(T27,10)+STR(T28,8)+STR(T29,8)+" | ";
+STR(T30,8)+" | "+STR(T31,8)+" | "+STR(T32,8)+" | "+STR(T33,8)+STR(T34,8);
+" | "+STR(T35,8)+" | "+STR(T36,8)+" | "+STR(T37,8)+"||"
?? STR(T40,14)+" |"
? SPACE(25)+"| VALEUR"+STR(Z27,10)+STR(Z28,8)+STR(Z29,8)+" | ";
+STR(Z30,8)+" | "+STR(Z31,8)+" | "+STR(Z32,8)+" | "+STR(Z33,8)+STR(Z34,8)+" | ";
+STR(Z35,8)+" | "+STR(Z36,8)+" | "+STR(Z37,8)+"||"+STR(Z40/1000,14)+" | "
        DO LINE
        SET CONSOLE ON
     ENDIF &&>12 part 2
     STORE .F. TO Process
* fin de la seconde partie si des résultats mensuels par fivondronana ont été
* sélectionés.

     ELSE

* si des résultats annuels pour tous les fivondronana d'un faritany sont
* désirés.
* première partie, résultats annuels par faritany.
     IF Part ="1'
        USE C:ZIP 2.DBF
        APPEND FROM C:ZIP 3 FOR(FIVONDRON = Y .AND. CONSERV < "27")
        SUM QUANTITE,VALEUR TO Q1,V1 FOR (CONSERV ="01')
        SUM QUANTITE,VALEUR TO Q2,V2 FOR (CONSERV ="02')
        SUM QUANTITE,VALEUR TO Q3,V3 FOR (CONSERV ="03')
        SUM QUANTITE,VALEUR TO Q4,V4 FOR (CONSERV ="04')
        SUM QUANTITE,VALEUR TO Q5,V5 FOR (CONSERV ="05')
        SUM QUANTITE,VALEUR TO Q6,V6 FOR (CONSERV ="06')
        SUM QUANTITE,VALEUR TO Q7,V7 FOR (CONSERV ="07')
        SUM QUANTITE,VALEUR TO Q8,V8 FOR (CONSERV ="08')
        SUM QUANTITE,VALEUR TO Q9,V9 FOR (CONSERV ="09')
        SUM QUANTITE,VALEUR TO Q10,V10 FOR (CONSERV ="10')
        SUM QUANTITE,VALEUR TO Q11,V11 FOR (CONSERV ="11')
        SUM QUANTITE,VALEUR TO Q12,V12 FOR (CONSERV ="12')
        SUM QUANTITE,VALEUR TO Q13,V13 FOR (CONSERV ="13')
        SUM QUANTITE,VALEUR TO Q14,V14 FOR (CONSERV ="14')
        SUM QUANTITE,VALEUR TO Q15,V15 FOR (CONSERV ="15')
        SUM QUANTITE,VALEUR TO Q16,V16 FOR (CONSERV ="16')
        SUM QUANTITE,VALEUR TO Q17,V17 FOR (CONSERV ="17')
        SUM QUANTITE,VALEUR TO Q18,V18 FOR (CONSERV ="18')
        SUM QUANTITE,VALEUR TO Q19,V19 FOR (CONSERV ="19')
        SUM QUANTITE,VALEUR TO Q20,V20 FOR (CONSERV ="20')
        SUM QUANTITE,VALEUR TO Q21,V21 FOR (CONSERV ="21')
        SUM QUANTITE,VALEUR TO Q22,V22 FOR (CONSERV ="22')
        SUM QUANTITE,VALEUR TO Q23,V23 FOR (CONSERV ="23')
        SUM QUANTITE,VALEUR TO Q24,V24 FOR (CONSERV ="24')
        SUM QUANTITE,VALEUR TO Q25,V25 FOR (CONSERV ="25')
        SUM QUANTITE,VALEUR TO Q26,V26 FOR (CONSERV ="26')
        DELETE ALL
        PACK
        USE &&close
STORE (Q1+Q2+Q3+Q4+Q5+Q6+Q7+Q8+Q9+Q10+Q11+Q12+Q13+Q14+Q15+Q16+Q17+Q18;
+Q19+Q20+Q21+Q22+Q23+Q24+Q25+Q26) +TTQ1 TO TTQ1
STORE ((V1+V2+V3+V4+V5+V6+V7+V8+V9+V10+V11+V12+V13+V14+V15+V16+V17+V18;
+V19+V20+V21+V22+V23+V24+V25+V26)/1000) + ZZV1 TO ZZV1

* usage de variables mémories pour sommation plus rapide.
        STORE Q1 + T1 TO T1
        STORE Q2 + T2 TO T2
        STORE Q3 + T3 TO T3
        STORE Q4 + T4 TO T4
        STORE Q5 + T5 TO T5
        STORE Q6 + T6 TO T6
        STORE Q7 + T7 TO T7
        STORE Q8 + T8 TO T8
        STORE Q9 + T9 TO T9
        STORE Q10 + T10 TO T10
        STORE Q11 + T11 TO T11
        STORE Q12 + T12 TO T12
        STORE Q13 + T13 TO T13
        STORE Q14 + T14 TO T14
        STORE Q15 + T15 TO T15
        STORE Q16 + T16 TO T16
        STORE Q17 + T17 TO T17
        STORE Q18 + T18 TO T18
        STORE Q19 + T19 TO T19
        STORE Q20 + T20 TO T20
        STORE Q21 + T21 TO T21
        STORE Q22 + T22 TO T22
        STORE Q23 + T23 TO T23
        STORE Q24 + T24 TO T24
        STORE Q25 + T25 TO T25
        STORE Q26 + T26 TO T26
        STORE TTQ1 + T38 TO T38

        STORE (V1/1000) + Z1 TO Z1
        STORE (V2/1000) + Z2 TO Z2
        STORE (V3/1000) + Z3 TO Z3
        STORE (V4/1000) + Z4 TO Z4
        STORE (V5/1000) + Z5 TO Z5
        STORE (V6/1000) + Z6 TO Z6
        STORE (V7/1000) + Z7 TO Z7
        STORE (V8/1000) + Z8 TO Z8
        STORE (V9/1000) + Z9 TO Z9
        STORE (V10/1000) + Z10 TO Z10
        STORE (V11/1000) + Z11 TO Z11
        STORE (V12/1000) + Z12 TO Z12
        STORE (V13/1000) + Z13 TO Z13
        STORE (V14/1000) + Z14 TO Z14
        STORE (V15/1000) + Z15 TO Z15
        STORE (V16/1000) + Z16 TO Z16
        STORE (V17/1000) + Z17 TO Z17
        STORE (V18/1000) + Z18 TO Z18
        STORE (V19/1000) + Z19 TO Z19
        STORE (V20/1000) + Z20 TO Z20
        STORE (V21/1000) + Z21 TO Z21
        STORE (V22/1000) + Z22 TO Z22
        STORE (V23/1000) + Z23 TO Z23
        STORE (V24/1000) + Z24 TO Z24
        STORE (V25/1000) + Z25 TO Z25
        STORE (V26/1000) + Z26 TO Z26
        STORE ZZV1 + Z38 TO Z38

* impression des résultats annuels par fivondronana / faritany.
        SET PRINT ON
        ?? CHR(15)
        DO CHOIX FIV
        SET PRINT ON
        SET CONSOLE OFF
?? STR(Q1,8)+STR(Q2,8)+STR(Q3,8)+STR(Q4,8)+STR(Q5,8)+STR(Q6,8)+STR(Q7,8);
+STR (Q8,8)+STR(Q9,8)+STR(Q10,8)+" | "+STR(Q11,8)+STR(Q12,8)+STR(Q13,8);
+STR(Q14,8)+STR(Q15,8)+STR(Q16,8)+STR(Q17,8)
?? STR(Q18,8)+" | "+STR(Q19,8)+STR(Q20,8)+STR(Q21,8)+STR(Q22,8)+" | ";
+STR(Q23,8)+STR(Q24,8)+STR(Q25,8)+STR(Q26,8)+" | "
? " | "+SPACE(10)+"V"+STR(V1/1000,8)+STR(V2/1000,8)+STR(V3/1000,8);
+STR(V4/1000,8)+STR(V5/1000,8)+STR(V6/1000,8)+STR(V7/1000,8)+STR(V8/1000,8);
+STR(V9/1000,8)+STR(V10/1000,8)+" | "+STR(V11/1000,8)
?? STR(V12/1000,8)+STR(V13/1000,8)+STR(V14/1000,8)+STR(V15/1000,8);
+STR(V16/1000,8)+STR(V17/1000,8)+STR(V18/1000,8)+" | "+STR(V19/1000,8);
+STR(V20/1000,8)+STR(V21/1000,8)+STR(V22/1000,8)+" | "
?? STR(V23/1000,8)+STR(V24/1000,8)+STR(V25/1000,8)+STR(V26/1000,8)+" | "
        SET PRINT OFF
        STORE O TO TTQ1,ZZV1
        STORE STR ((VAL (Y)),3) TO Y

* impression des totaux annuels pour tous les fivondronana d'un faritany.
IF (Y="119" .OR. Y="209" .OR.  Y="322" .OR. Y="421" .OR. Y="518" .OR. Y="621")
        DO LINE
        SET CONSOLE OFF
        SET PRINT ON
        ?? CHR(15)
        ? "| TOTAUX"+SPACE (222)+"|"
? "|QUANTITE    "+STR(T1,8)+STR(T2,8)+STR(T3,8)+STR(T4,8)+STR(T5,8)+STR(T6,8);
+STR(T7,8)+STR(T8,8)+STR(T9,8)+STR(T10,8)+" | "+STR(T11,8)+STR(T12,8)+STR(T13,8);
+STR(T14,8)+STR(T15,8)+STR(T16,8)+STR(T17,8)+STR(T18,8)
?? " | "+STR(T19,8)+STR(T20,8)+STR(T21,8)+STR(T22,8)+" | "+STR(T23,8)+STR(T24,8);
+STR(T25,8)+STR(T26,8)+" |"
? "| VALEUR"+STR(Z1,8)+STR(Z2,8)+STR(Z3,8)+STR(Z4,8)+STR(Z5,8)+STR(Z6,8);
+STR(Z7,8)+STR(Z8,8)+STR(Z9,8)+STR(Z10,8)+" | "+STR(Z11,8)+STR(Z12,8)+STR(Z13,8);
+STR(Z14,8)+STR(Z15,8)+STR(Z16,8)+STR(Z17,8)+STR(Z18,8)
?? " | "+STR(Z19,8)+STR(Z20,8)+STR(Z21,8)+STR(Z22,8)+" | "+STR(Z23,8)+STR(Z24,8);
+STR(Z25,8)+STR(Z26,8)+" |"
        ?? CHR(18)
        SET PRINT OFF
        DO LINE
        STORE '3' TO Part
     ENDIF
* fin de la première partie du tableau des résultats annuels pour tous les
* fivondronana d'un faritany.

  ELSE

* seconde partie du tableau des résultats annuels pour tous les fivondronana
* d'un faritany.
        IF Part = "3"
           DO CASE
              CASE Far ="1'
                   STORE '103' TO Y
              CASE Far ="2'
                   STORE '202' TO Y
              CASE Far ="3'
                   STORE '302' TO Y
              CASE Far ="4'
                   STORE '402' TO Y
              CASE Far ="5'
                   STORE '502' TO Y
              CASE Far ="6'
                   STORE '602' TO Y
           ENDCASE
        ENDIF
        STORE '2' TO Part

* impression de l'entête.
        IF Count = 1
           SET PRINT ON
           EJECT
           ? SPACE(16)+"Seconde partie"
           ?? SPACE(10)
           ?? CHR(14)
           ?? "EXPEDITIONS hors FIVONDRONANA"
           ?? CHR(20)
           ?? CHR(15)
           ? SPACE(24)+"Date : "+DTOC(Mdate)
           ?? CHR(18)
           ?
           DO SETUP
           SET PRINT OFF
           DO LINE
        ENDIF
        STORE Count + 1 TO Count

* calcul des résultats, seconde partie, résultats annuels par fivondronana.
        USE C:ZIP 2.DBF &&open
        APPEND FROM C:ZIP 3 FOR (FIVONDRON = Y .AND. CONSERV> "26")
        SUM QUANTITE,VALEUR TO Q27,V27 FOR (CONSERV ="27')
        SUM QUANTITE,VALEUR TO Q28,V28 FOR (CONSERV ="28')
        SUM QUANTITE,VALEUR TO Q29,V29 FOR (CONSERV ="29')
        SUM QUANTITE,VALEUR TO Q30,V30 FOR (CONSERV ="30')
        SUM QUANTITE,VALEUR TO Q31,V31 FOR (CONSERV ="31')
        SUM QUANTITE,VALEUR TO Q32,V32 FOR (CONSERV ="32')
        SUM QUANTITE,VALEUR TO Q33,V33 FOR (CONSERV ="33')
        SUM QUANTITE,VALEUR TO Q34,V34 FOR (CONSERV ="34')
        SUM QUANTITE,VALEUR TO Q35,V35 FOR (CONSERV ="35')
        SUM QUANTITE,VALEUR TO Q36,V36 FOR (CONSERV ="36')
        SUM QUANTITE,VALEUR TO Q37,V37 FOR (CONSERV ="37')
        DELETE ALL
        PACK
        USE &&close

* usage de variables mémorires pour sommation plus rapide des
* quantités et valeurs, seconde partie.
        STORE (V27/1000) + Z27 TO Z27
        STORE (V28/1000) + Z28 TO Z28
        STORE (V29/1000) + Z29 TO Z29
        STORE (V30/1000) + Z30 TO Z30
        STORE (V31/1000) + Z31 TO Z31
        STORE (V32/1000) + Z32 TO Z32
        STORE (V33/1000) + Z33 TO Z33
        STORE (V34/1000) + Z34 TO Z34
        STORE (V35/1000) + Z35 TO Z35
        STORE (V36/1000) + Z36 TO Z36
        STORE (V37/1000) + Z37 TO Z37

        STORE Q27 + T27 TO T27
        STORE Q28 + T28 TO T28
        STORE Q29 + T29 TO T29
        STORE Q30 + T30 TO T30
        STORE Q31 + T31 TO T31
        STORE Q32 + T32 TO T32
        STORE Q33 + T33 TO T33
        STORE Q34 + T34 TO T34
        STORE Q35 + T35 TO T35
        STORE Q36 + T36 TO T36
        STORE Q37 + T37 TO T37
        USE C:ZIP 3
        SUM QUANTITE,VALEUR TO QTOT,VTOT FOR (FIVONDRON = Y)
        USE && close
        STORE QTOT + T40 TO T40
        STORE (VTOT/1000) + Z40 TO Z40

* impression des résultats annuels / fivondronana, seconde partie.
        SET PRINT ON
        ?? CHR(15)
        DO CHOIX FIV
        SET PRINT ON
        SET CONSOLE OFF
?? STR(Q27,8)+STR(Q28,8)+STR(Q29,8)+" | "+STR(Q30,8)+" | "+STR(Q31,8)+" | ";
+STR(Q32,8)+" | "+STR(Q33,8)+STR(Q34,8)+" | "+STR(Q35,8)+" | "+STR(Q36,8)+" | ";
+STR(Q37,8)+"||"+STR(QTOT,14)+" | "
        ? SPACE(25)+" | "+SPACE(14)
?? STR(V27/1000,8)+STR(V28/1000,8)+STR(V29/1000,8)+" | "+STR(V30/1000,8);
+" | "+STR(V31/1000,8)+" | "+STR(V32/1000,8)+" | "+STR(V33/1000,8);
+STR(V34/1000,8)+" | "+STR(V35/1000,8)+" | "+STR(V36/1000,8)
?? " | "+STR(V37/1000,8)+"||"+STR(VTOT/1000),14)+" | "
        SET PRINT OFF
        STORE O TO TTQ2,ZZV2
        STORE STR ((VAL(Y)),3) TO Y

* impression des totaux / faritany, seconde partie.
IF (Y="119" .OR.  Y="209" .OR. Y="322" .OR. Y="421".OR. Y="518" .OR. Y="621")
        DO LINE
        SET CONSOLE OFF
        SET PRINT ON
        ?? CHR(15)
        ? SPACE(25)+"| TOTAUX"+SPACE(135)+" | "
? SPACE(25)+"| QUANTITE"+STR(T27,8)+STR(T28,8)+STR(T29,8)+" | "+STR(T30,8);
+" | "+STR(T31,8)+" | "+STR(T32,8)+" | "+STR(T33,8)+STR(T34,8)+" | "+STR(T35,8);
+" | "+STR(T36,8)+" | "+STR(T37,8)+"||"+STR(T40,8)+" | "
? SPACE(25)+"| VALEUR"+STR(Z27,8)+STR(Z28,8)+STR(Z29,8)+" | "+STR(Z30,8);
+" | "+STR(Z31,8)+" | "+STR(Z32,8)+" | "+STR(Z33,8)+STR(Z34,8)+" | "+STR(Z35,8);
+" | "+STR(Z36,8)+" | "+STR(Z37,8)+"||"+STR(Z40,14)+" | "
        DO LINE
        ?? CHR(18)
     ENDIF
  ENDIF &&part 2
ENDIF &&<>'000'
* arrangements pour terminer la boucle principale.
   IF Fiv ="000'
      STORE STR((VAL (Y)+1),3) TO Y
   IF Far ="1'
      IF Y ="110'
         STORE STR((VAL(Y)+2),3) TO Y
      ENDIF
      IF Y ="120'
         IF Part = "2"
            STORE .F. TO Process
         ENDIF
      ENDIF
   ELSE
      IF Far ="2'
         IF Y ="210'
            IF Part = "2"
               STORE .F. TO Process
            ENDIF
         ENDIF
      ELSE
         IF Far ="3'
            IF Y ="323'
               IF Part = "2"
                  STORE .F. TO Process
               ENDIF
            ENDIF
         ELSE
            IF Far ="4'
               IF Y ="422'
                  IF Part = "2"
                     STORE .F. TO Process
                  ENDIF
               ENDIF
            ELSE
               IF Far ="5'
                  IF Y = "519"
                     IF Part = "2"
                        STORE .F. TO Process
                     ENDIF
                  ENDIF
               ELSE
                  IF Far ="6'
                     IF Y ="622'
                        IF Part = "2"
                           STORE .F. TO Process
                        ENDIF
                     ENDIF
                  ENDIF
               ENDIF
            ENDIF
         ENDIF
      ENDIF
   ENDIF
ENDIF
ENDDO Process
* fin de boucle principale.

* arrangements pour la remise à l'état d'origine.
USE
SET PRINT ON
EJECT
SET PRINT OFF
DELETE FILE C:Zip_3.DBF
DELETE FILE C:Zip_2.DBF
DELETE FILE C:Zipzip.DBF
RELEASE ALL
RETURN
* retour au menu principal.

EX(pédition)_3_M(ensuelle) COMMAND FILE

*********************************************************************************************
Ce programme calcule, par mois ou par année, les expéditions hors fivondronana par nature des produits et par destination.

Les informations traitées ne concernent que les expéditions et non les exportations.

Les données ont été transférées sur disque dur pour raison de sécurité.
Les résultats sont présentés mensuellement par destination ou annuellement pour toutes les destinations d'un faritany.

Le mois 13 donne les résultats annuels par fivondronana.
*********************************************************************************************

* Création de deux fichiers pour traitement plus rapide.
USE C:Zipzip
COPY STRUCTURE TO C:Zip_3.DBF
COPY STRUCTURE TO C:Zip_2.DBF
USE

* choix du mois désiré.
SET TALK OFF
SET CONSOLE OFF
IF VAL (Mois) < 10
   STORE STR (VAL (Mois),2) TO Mois
ELSE
   STORE STR(VAL(Mois),2) TO Mois
ENDIF
   IF Des ="1'
      STORE VAL (Mois) TO Tel
ELSE
      STORE 1 TO Tel
ENDIF
STORE Fiv TO Twee
STORE .T. TO Process
STORE 1 TO Count
STORE '1' TO Part, Boucle

* Zip_3 ne contient que les informations des expéditions (pas
* celles des exportations).
USE C:Zip_3
APPEND FROM C:Zipzip FOR(DESTIN < "700")
USE &&closeZip_3

* Boucle principale.
DO WHILE Process

* si des résultants mensuels sont demandés.  (mois 13 donne les résultats
* annuels par fivondronana.

      IF Des = "1"
         USE C:Zip_3.DBF
         INDEX ON Destin TO C:Dein-dx.ndx
         USE

* boucle des mois.
         DO WHILE Tel < 14
            STORE SPACE(2) TO X
            IF Tel < 10
               STORE 'O'+STR(Tel,1) TO X
            ELSE
               STORE STR(Tel,2) TO X
            ENDIF

* initialisation du paramètre YY.
            DO CASE
               CASE Count = 1
                    STORE 103 TO YY
              CASE Count = 2
                   STORE 202 TO YY
              CASE Count = 3
                   STORE 302 TO YY
              CASE Count = 4
                   STORE 402 TO YY
              CASE Count = 5
                   STORE 502 TO YY
              CASE Count = 6
                   STORE 602 TO YY
            ENDCASE
            STORE STR(YY,3) TO Y

* boucle des destinations (fivondronana).
            DO WHILE YY < 622
               IF (Part ="1' .AND. Boucle ="1')
                   STORE Twee TO Fiv

* impression de l'entête.
                   DO Setup
                   DO Line
                ENDIF
                STORE '2' TO Boucle

* recherche de la destination dans un fichier indexé.
                STORE STR(YY,3) TO Y,Key
                USE C:Zip_3 INDEX C:Dein-dx
                FIND &Key

* si recherche fructueuse, calcul des résultats désirés.
                IF FOUND ()
                    USE C:Zip_2.DBF
                    IF X <> '13'
          APPEND FROM C:Zip_3 FOR (DESTIN = Y .AND. SUBSTR(DTOC(DATE),4,2) = X)
                ELSE
                    APPEND FROM C:Zip_3 FOR(DESTIN = Y)
                ENDIF
                SUM QUANTITE,VALEUR TO Q1,V1 FOR(NAT-PROD = "01")
                SUM QUANTITE,VALEUR TO Q2,V2 FOR(NAT-PROD = "02")
                SUM QUANTITE,VALEUR TO Q3,V3 FOR(NAT-PROD = "03")
                SUM QUANTITE,VALEUR TO Q4,V4 FOR(NAT-PROD = "04")
                SUM QUANTITE,VALEUR TO Q5,V5 FOR(NAT-PROD = "05")
                SUM QUANTITE,VALEUR TO Q6,V6 FOR(NAT-PROD = "06")
                SUM QUANTITE,VALEUR TO Q7,V7 FOR(NAT-PROD = "07")
                SUM QUANTITE,VALEUR TO Q8,V8 FOR(NAT-PROD = "08")
                SUM QUANTITE,VALEUR TO Q9,V9 FOR(NAT-PROD = "09")
                SUM QUANTITE,VALEUR TO Q10,V10 FOR(NAT-PROD = "10")
                SUM QUANTITE,VALEUR TO Q11,V11 FOR(NAT-PROD = "11")
                SUM QUANTITE,VALEUR TO Q12,V12 FOR(NAT-PROD = "12")
                SUM QUANTITE,VALEUR TO Q13,V13 FOR(NAT-PROD = "13")
                SUM QUANTITE,VALEUR TO Q14,V14 FOR(NAT-PROD = "14")
                SUM QUANTITE,VALEUR TO Q15,V15 FOR(NAT-PROD = "15")
                SUM QUANTITE,VALEUR TO Q16,V16 FOR(NAT-PROD = "16")
                SUM QUANTITE,VALEUR TO Q17,V17 FOR(NAT-PROD = "17")
                SUM QUANTITE,VALEUR TO Q18,V18 FOR(NAT-PROD = "18")
                SUM QUANTITE,VALEUR TO Q19,V19 FOR(NAT-PROD = "19")
                SUM QUANTITE,VALEUR TO Q20,V20
                DELETE ALL
                PACK
                USE &&closeZip_2
             ENDIF &&Found
             USE &&close c:zip_3

* impression du fivondronana.

             STORE Y TO Fiv
             SET PRINT ON
             ?? CHR(15)
             DO CHX FIV
             SET PRINT ON
             SET CONSOLE OFF

* impression des résultats si valeur est positive.
             IF (Q20 > 0 .OR. V20 > 0)
?? " Q1"+STR(Q1,8)+STR(Q2,8)+STR(Q3,8)+" | "+STR(Q4,8)+STR(Q5,8)+STR(Q6,8);
+" | "+STR(Q7,8)+STR(Q8,8)+STR(Q9,8)+" | "+STR(Q10,8)+STR(Q11,8)+" | ";
+STR(Q12,8)+" | "+STR(Q13,8)+" | "+STR(Q14,8)+" | "+STR(Q15,8)+" | "
?? STR(Q16,8)+" | "+STR(Q17,8)+" | "+STR(Q18,8)+" | "+STR(Q19,8)+" | ";
+STR(Q20,14)+" | "
? "|"+SPACE(15)+"V|"+STR(V1/1000,8)+STR(V2/1000,8)+STR(V3/1000,8)+" | ";
+STR(V4/1000,8)+STR(V5/1000,8)+STR(V6/1000,8)+" | "+STR(V7/1000,8);
+STR(V8/1000,8)+STR(V9/1000,8)+" | "+STR(V10/1000,8)
?? STR(V11/1000,8)+" | "+STR(V12/1000,8)+" | "+STR(V13/1000,8)+" | ";
+STR(V14/1000,8)+" |"+STR(V15/1000,8)+" | "+STR(V16/1000,8)+" | ";
+STR(V17/1000,8)+" | "+STR(V18/1000,8)+" | "+STR(V19/1000,8)+" | "
?? STR(V20/1000,14)+" | "
             ELSE
                ?? CHR(15)
   ?? " | pas de données d'expédition |_| ou données manquantes |_| …"
                ?? SPACE(140)+"|"
             ENDIF &&Q,V20>0
             SET PRINT OFF

* remise à zéro des variables mémoires.
     STORE 0 TO Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10,Q11,Q12,Q13,Q14,Q15,Q16,Q17
     STORE 0 TO Q18,Q19,Q20,V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12,V13,V14
     STORE 0 TO V15,V16,V17,V18,V19,V20
             STORE (YY+1) TO YY

* saut pour le code d'Antsirabe.
             IF YY = 111
                STORE (YY+1) TO YY
             ENDIF

* impression et calcul des résultats totaux après transfert des données
* sur fichier limité.
     IF (YY=120 .OR.  YY=210 .OR.  YY=323 .OR.  YY=422 .OR.  YY=519 .OR. YY=622)
             DO CASE
                CASE YY = 120
                     STORE STR (120,3) TO ZZ
                     STORE STR (102,3) TO Z
                CASE YY = 210
                     STORE STR (210,3) TO ZZ
                     STORE STR (201,3) TO Z
                CASE YY = 323
                     STORE STR (323,3) TO ZZ
                     STORE STR (301,3) TO Z
                CASE YY = 422
                     STORE STR(422,3) TO ZZ
                     STORE STR(401,3) TO Z
                CASE YY = 519
                     STORE STR(519,3) TO ZZ
                     STORE STR(501,3) TO Z
                CASE YY = 622
                     STORE STR (622,3) TO ZZ
                     STORE STR (601,3) TO Z
             ENDCASE
             DO LINE
             SET CONSOLE OFF
             USE C:Zip 2.DBF
             IF X <> '13'
APPEND FROM C:Zip_3 FOR ((DESTIN>Z .AND. DESTIN<ZZ) .AND. SUBSTR(DTOC(DATE),4,2)=X)
             ELSE
                APPEND FROM C:Zip_3 FOR (DESTIN > Z .AND. DESTIN < ZZ)
             ENDIF
             SUM QUANTITE,VALEUR TO Q1,V1 FOR(NAT-PROD = "01")
             SUM QUANTITE,VALEUR TO Q2,V2 FOR(NAT-PROD = "02")
             SUM QUANTITE,VALEUR TO Q3,V3 FOR(NAT-PROD = "03")
             SUM QUANTITE,VALEUR TO Q4,V4 FOR(NAT-PROD = "04")
             SUM QUANTITE,VALEUR TO Q5,V5 FOR(NAT-PROD = "05")
             SUM QUANTITE,VALEUR TO Q6,V6 FOR(NAT-PROD = "06")
             SUM QUANTITE,VALEUR TO Q7,V7 FOR(NAT-PROD = "07")
             SUM QUANTITE,VALEUR TO Q8,V8 FOR(NAT-PROD = "08")
             SUM QUANTITE,VALEUR TO Q9,V9 FOR(NAT-PROD = "09")
             SUM QUANTITE,VALEUR TO Q10,V10 FOR(NAT-PROD = "10")
             SUM QUANTITE,VALEUR TO Q11,V11 FOR(NAT-PROD = "11")
             SUM QUANTITE,VALEUR TO Q12,V12 FOR(NAT-PROD = "12")
             SUM QUANTITE,VALEUR TO Q13,V13 FOR(NAT-PROD = "13")
             SUM QUANTITE,VALEUR TO Q14,V14 FOR(NAT-PROD = "14")
             SUM QUANTITE,VALEUR TO Q15,V15 FOR(NAT-PROD = "15")
             SUM QUANTITE,VALEUR TO Q16,V16 FOR(NAT-PROD = "16")
             SUM QUANTITE,VALEUR TO Q17,V17 FOR(NAT-PROD = "17")
             SUM QUANTITE,VALEUR TO Q18,V18 FOR(NAT-PROD = "18")
             SUM QUANTITE,VALEUR TO Q19,V19 FOR(NAT-PROD = "19")
             SUM QUANTITE,VALEUR TO Q20,V20
             DELETE ALL
             PACK
             USE &&closeZip_2

* impression des résulats totaux.
             SET PRINT ON
             ?? CHR(15)
             ? "| TOTAUX"
?? " QUANTITE |"+STR(Q1,8)+STR(Q2,8)+STR(03,8)+" | "+STR(Q4,8)+STR(Q5,8);
+STR(Q6,8)+" | "+STR(Q7,8)+STR(Q8,8)+STR(Q9,8)+" | "+STR(Q10,8)+STR(Q11,8);
+" | "+STR(Q12,8)+" | "+STR(Q13,8)+" | "+STR(Q14,8)+" | "+STR(Q15,8)+" | "
?? STR(Q16,8)+" | "+STR(Q17,8)+" | "+STR(Q18,8)+" | "+STR(Q19,8)+" | ";
+STR(Q20,14)+" | "
? "|"+SPACE(8)+"VALEUR |"+STR(V1/1000,8)+STR(V2/1000,8)+STR(V3/1000,8)+" | ";
+STR(V4/1000,8)+STR(V5/1000,8)+STR(V6/1000,8)+" | "+STR(V7/1000,8);
+STR(V8/1000,8)+STR(V9/1000,8)+" | "+STR(V10/1000,8)+STR(V11/1000,8)
?? " | "+STR(V12/1000,8)+" | "+STR(V13/1000,8)+" | "+STR(V14/1000,8);
+" | "+STR(V15/1000,8)+" | "+STR(V16/1000,8)+" | "+STR(V17/1000,8)+" | ";
+STR(V18/1000,8)+" | "+STR(V19/1000,8)+" | "+STR(V20/1000,14)+" | ";
             SET PRINT OFF
             DO LINE

* remise à zèro des variables mémoires.
             STORE 0 TO Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10,Q11,Q12,Q13,Q14,Q15,Q16,Q17
             STORE 0 TO Q18,Q19,Q20,V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12,V13,V14
             STORE 0 TO V15,V16,V17,V18,V19,V20
             STORE Count + 1 TO Count
                 SET PRINT ON
                 EJECT
                 SET PRINT OFF
             ENDIF &&YY…=622<

* saut pour les codes des fivondronana, passage au faritany suivant.
             IF YY = 120
                STORE (YY+82) TO YY
                STORE "1" TO Part, Boucle
             ELSE
                IF YY = 210
                   STORE (YY+92) TO YY
                   STORE "1" TO Part, Boucle
                ELSE
                    IF YY = 323
                       STORE (YY+79) TO YY
                       STORE "1" TO Part, Boucle
                    ELSE
                        IF YY = 422
                           STORE (YY+80) TO YY
                           STORE "1" TO Part, Boucle
                        ELSE
                           IF YY = 519
                              STORE (YY+83) TO YY
                              STORE "1" TO Part, Boucle
                           ELSE
                              IF YY = 622
                                 STORE (YY+80) TO YY
                                 STORE "2" TO Boucle
                              ENDIF &&YY=622
                           ENDIF &&YY=519
                        ENDIF &&YY=422
                     ENDIF &&YY=323
                  ENDIF &&YY=210
               ENDIF &&YY=120

* fin de boucle fivondronana.
             ENDDO &&YY<622
             SET PRINT ON
             EJECT
             SET PRINT OFF
             IF (Tel > 13 .AND. Boucle ="2")
                 STORE .F. TO Process
             ELSE
                IF (Tel < 14 .AND. Boucle ="2")
                    STORE '1' TO Part, Boucle
                    STORE Tel+1 TO Tel
                    STORE 1 TO Count
                    STORE 103 TO YY
                    STORE .T. TO Process
                 ENDIF
              ENDIF

* fin de boucle des mois.

         ENDDO &&Tel<14

* fin de calcul des résultats mensuels/annuels par fivondronana.

  ELSE

* si des résultats annuels pour tous les fivondronana d'un faritany sont
* demandés.

  IF Des = "2"
     STORE "1" TO Part, Boucle
     SET TALK OFF
     SET CONSOLE OFF
     STORE 103 TO YY
     STORE STR(YY,3) TO Y
     USE C:Zip 3
     INDEX ON DESTIN TO C:Dein-dx.NDX
     USE

* boucle des fivondronana.

     DO WHILE YY < 622

* impression de l'entête.

        IF (Part ="1' .AND. Boucle ="1')
            STORE Twee TO Fiv
            DO Setup
            DO Line
        ENDIF
        STORE '2' TO Boucle
        STORE STR(YY,3) TO Y, Key
        STORE 0 TO Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10,Q11,Q12,Q13,Q14,Q15,Q16
        STORE 0 TO Q17,Q18,Q19,Q20,V17,V18,V19,V20
        STORE 0 TO V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12,V13,V14,V15,V16
        USE C:Zip_3 INDEX C:Dein-dx

* recherche sur fichier indexé.

        FIND &Key

* Si recherche fructueuse, calcul des résultats.

        IF FOUND()
           USE C:Zip 2.DBF
           APPEND FROM C:Zip 3 FOR(DESTIN = Y)
           SUM QUANTITE,VALEUR TO Q1,V1 FOR(NAT-PROD = "01")
           SUM QUANTITE,VALEUR TO Q2,V2 FOR(NAT-PROD = "02")
           SUM QUANTITE,VALEUR TO Q3,V3 FOR(NAT-PROD = "03")
           SUM QUANTITE,VALEUR TO Q4,V4 FOR(NAT-PROD = "04")
           SUM QUANTITE,VALEUR TO Q5,V5 FOR(NAT-PROD = "05")
           SUM QUANTITE,VALEUR TO Q6,V6 FOR(NAT-PROD = "06")
           SUM QUANTITE,VALEUR TO Q7,V7 FOR(NAT-PROD = "07")
           SUM QUANTITE,VALEUR TO Q8,V8 FOR(NAT-PROD = "08")
           SUM QUANTITE,VALEUR TO Q9,V9 FOR(NAT-PROD = "09")
           SUM QUANTITE,VALEUR TO Q10,V10 FOR(NAT-PROD = "10")
           SUM QUANTITE,VALEUR TO Q11,V11 FOR(NAT-PROD = "11")
           SUM QUANTITE,VALEUR TO Q12,V12 FOR(NAT-PROD = "12")
           SUM QUANTITE,VALEUR TO Q13,V13 FOR(NAT-PROD = "13")
           SUM QUANTITE,VALEUR TO Q14,V14 FOR(NAT-PROD = "14")
           SUM QUANTITE,VALEUR TO Q15,V15 FOR(NAT-PROD = "15")
           SUM QUANTITE,VALEUR TO Q16,V16 FOR(NAT-PROD = "16")
           SUM QUANTITE,VALEUR TO Q17,V17 FOR(NAT-PROD = "17")
           SUM QUANTITE,VALEUR TO Q18,V18 FOR(NAT-PROD = "18")
           SUM QUANTITE,VALEUR TO Q19,V19 FOR(NAT-PROD = "19")
           SUM QUANTITE,VALEUR TO Q20,V20
           DELETE ALL
           PACK
           USE &&closeZip_2
        ENDIF &&Found
        USE &&closeZip_3

* impression du nom du fivondronana.

        STORE Y TO Fiv
        SET PRINT ON
        ?? CHR(15)
        DO CHX FIV
        SET PRINT ON
        SET CONSOLE OFF

* impression des résultats si valeurs sont positives.
        IF (Q20 > 0 .OR. V20 > 0)
?? " Q1"+STR(Q1,8)+STR(Q2,8)+STR(Q3,8)+" | "+STR(Q4,8)+STR(Q5,8)+STR(Q6,8);
+" | "+STR(Q7,8)+STR(Q8,8)+STR(Q9,8)+" | "+STR(Q10,8)+STR(Q11,8)+" | ";
+STR(Q12,8)+" | "+STR(Q13,8)+" | "+STR(Q14,8)+" | "+STR(Q15,8)+" | ";
?? STR(Q16,8)+" | "+STR(Q17,8)+" | "+STR(Q18,8)+" | "+STR(Q19,8)+" | ";
+STR(Q20,14)+" | "
? " | "+SPACE(15)+"VI"+STR(V1/1000,8)+STR(V2/1000,8)+STR(V3/1000,8)+" | ";
+STR(V4/1000,8)+STR(V5/1000,8)+STR(V6/1000,8)+" | "+STR(V7/1000,8);
+STR(V8/1000,8)+STR(V9/1000,8)+" | "+STR(V10/1000,8)
?? STR(V11/1000,8)+" | "+STR(V12/1000,8)+" | "+STR(V13/1000,8)+" | ";
+STR(V14/1000,8)+" | "+STR(V15/1000,8)+" | "+STR(V16/1000,8)+" | ";
+STR(V17/1000,8)+" | "+STR(V18/1000,8)+" | "+STR(V19/1000,8)+" | ";
?? STR(V20/1000,14)+" | "
        ELSE
           ?? CHR(15)
   ?? " | pas de données d'expédition |_| ou données manquantes |_| ....."
           ?? SPACE (129)+"|"
        ENDIF &&Q,V20>0
        SET PRINT OFF
        STORE (YY + 1) TO YY
        IF YY = 111
           STORE (YY+1) TO YY
        ENDIF

* impression et calcul des totaux.

   IF (YY=120 .OR. YY=210 .OR.  YY=323 .OR.  YY=422 .OR. YY=519 .OR. YY=622)
           DO CASE
              CASE YY = 120
                   STORE STR(120,3) TO ZZ
                   STORE STR (102,3) TO Z
              CASE YY = 210
                   STORE STR (210,3) TO ZZ
                   STORE STR (201,3) TO Z
              CASE YY = 323
                   STORE STR (323,3) TO ZZ
                   STORE STR (301,3) TO Z
              CASE YY = 422
                   STORE STR (422,3) TO ZZ
                   STORE STR (401,3) TO Z
              CASE YY = 519
                   STORE STR (519,3) TO ZZ
                   STORE STR (501,3) TO Z
              CASE YY = 622
                   STORE STR (622,3) TO ZZ
                   STORE STR (601,3) TO Z
           ENDCASE
           DO LINE

* remise à zéro des variables mémoires.
           STORE 0 TO Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10,Q11,Q12,Q13,Q14,Q15,Q16
           STORE 0 TO Q17,Q18,Q19,Q20,V17,V18,V19,V20
           STORE 0 TO V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12,V13,V14,V15,V16

* calcul des résultats totaux.
           USE C:Zip 2.DBF
           DELETE ALL
           PACK
           APPEND FROM C:Zip 3 FOR(DESTIN> Z.AND. DESTIN <ZZ)
           SUM QUANTITE,VALEUR TO Q1,V1 FOR(NAT-PROD = "01")
           SUM QUANTITE,VALEUR TO Q2,V2 FOR(NAT-PROD = "02")
           SUM QUANTITE,VALEUR TO Q3,V3 FOR(NAT-PROD = "03")
           SUM QUANTITE,VALEUR TO Q4,V4 FOR(NAT-PROD = "04")
           SUM QUANTITE,VALEUR TO Q5,V5 FOR(NAT-PROD = "05")
           SUM QUANTITE,VALEUR TO Q6,V6 FOR(NAT-PROD = "06")
           SUM QUANTITE,VALEUR TO Q7,V7 FOR(NAT-PROD = "07")
           SUM QUANTITE,VALEUR TO Q8,V8 FOR(NAT-PROD = "08")
           SUM QUANTITE,VALEUR TO Q9,V9 FOR(NAT-PROD = "09")
           SUM QUANTITE,VALEUR TO Q10,V10 FOR(NAT-PROD = "10")
           SUM QUANTITE,VALEUR TO Q11,V11 FOR(NAT-PROD = "11")
           SUM QUANTITE,VALEUR TO Q12,V12 FOR(NAT-PROD = "12")
           SUM QUANTITE,VALEUR TO Q13,V13 FOR(NAT-PROD = "13")
           SUM QUANTITE,VALEUR TO Q14,V14 FOR(NAT-PROD = "14")
           SUM QUANTITE,VALEUR TO Q15,V15 FOR(NAT-PROD = "15")
           SUM QUANTITE,VALEUR TO Q16,V16 FOR(NAT-PROD = "16")
           SUM QUANTITE,VALEUR TO Q17,V17 FOR(NAT-PROD = "17")
           SUM QUANTITE,VALEUR TO Q18,V18 FOR(NAT-PROD = "18")
           SUM QUANTITE,VALEUR TO Q19,V19 FOR(NAT-PROD = "19")
           SUM QUANTITE,VALEUR TO Q20,V20
           USE &&closeZip_3

* impression des résultats totaux.
           SET PRINT ON
           ?? CHR(15)
           ? "| TOTAUX"
?? "QUANTITE |"+STR(Q1,8)+STR(Q2,8)+STR(Q3,8)+" | "+STR(Q4,8)+STR(Q5,8);
+STR(Q6,8)+" | "+STR(Q7,8)+STR(Q8,8)+STR(Q9,8)+" | "+STR(Q10,8)+STR(Q11,8);
+" | "+STR(Q12,8)+" | "+STR(Q13,8)+" | "+STR(Q14,8)+" | "+STR(Q15,8)+" | "
?? +STR(Q16,8)+" | "+STR(Q17,8)+" | "+STR(Q18,8)+" | "+STR(Q19,8)+" | ";
+STR(Q20,8)+" | "
? " | "+SPACE(8)+"VALEUR |"+STR(V1/1000,8)+STR(V2/1000,8)+STR(V3/1000,8)+" | ";
+STR(V4/1000,8)+STR(V5/1000,8)+STR(V6/1000,8)+" | "+STR(V7/1000,8);
+STR(V8/1000,8)+STR(V9/1000,8)+" | "+STR(V10/1000,8)+STR(V11/1000,8)
?? " | "+STR(V12/1000,8)+" | "+STR(V13/1000,8)+" | "+STR(V14/1000,8)
+" | "+STR(V15/1000,8)+" | "+STR(V16/1000,8)+" | "+STR(V17/1000,8)+" | ";
+STR(V18/1000,8)+" | "+STR(V19/1000,8)+" | "+STR(V20/1000,14)+" | "
           SET PRINT OFF
           DO LINE
           SET PRINT ON
           EJECT
           SET PRINT OFF
           SET CONSOLE OFF
        ENDIF &&YY=…622

* saut pour codes fivondronana, passage au faritany suivant.

        IF YY = 120
           STORE (YY+82) TO YY
           STORE '1' TO Part, Boucle
        ELSE
           IF YY = 210
              STORE (YY+92) TO YY
              STORE '1' TO Part, Boucle
           ELSE
              IF YY = 323
                 STORE (YY+79) TO YY
                 STORE '1' TO Part, Boucle
              ELSE
                 IF YY = 422
                    STORE (YY+80) TO YY
                    STORE '1' TO Part, Boucle
                 ELSE
                    IF YY = 519
                       STORE (YY+83) TO YY
                       STORE '1' TO Part, Boucle
                    ELSE
                       IF YY = 622
                          STORE (YY+80) TO YY
                          STORE .F. TO Process
                       ENDIF &&YY=622
                    ENDIF &&YY=519
                 ENDIF &&YY=422
              ENDIF &&YY=323
           ENDIF &&YY=210
        ENDIF &&YY=120

* arrangement pour terminer la boucle fivondronana.

        IF YY > 622
           STORE .F. TO Process
        ELSE
           STORE .T. TO Process
        ENDIF

* fin de boucle fivondronana.
     ENDDO &&YY
  ELSE
     RELEASE ALL
     RETURN
  ENDIF
ENDIF
STORE .F. TO Process

* fin de boucle principale.
ENDDO Process

* remise en état de l'environnement de travail.
USE
DELETE FILE C:Dein de.NDX
DELETE FILE C:Zip_2.DBF
DELETE FILE C:Zip_3.DBF
DELETE FILE C:Zipzip.DBF
SET TALK ON
RELEASE ALL
RETURN
* retour au menu des expéditions/exportations.

EX(pédition)_4_M(ensuelle) COMMAND FILE

************************************************************************************************
Ce programme calcule, par mois ou par année, les expéditions hors fivondronana par MOYEN DE CONSERVATION et par DESTINATION.
Les données ont été transférées sur disque dur pour raison de sécurité.
Le programme ne traite que les expéditions et non les exportations hors fivondronana.
Les résultats sont présentés mensuellement par destination ou annuellement pour tous les fivondronana de destination.
Le programme comporte deux parties, chacunne ayant deux unités; ceci en raison de la largeur des tableaux.
************************************************************************************************

* création de deux fichiers additionnels pour traitement plus rapide.
USE C:Zipzip
COPY STRUCTURE TO C:Zip_2.DBF
COPY STRUCTURE TO C:Zip_3.DBF
USE
SET TALK OFF
SET CONSOLE OFF
Mdate = Date ()
STORE Fiv TO Twee, Y
STORE SPACE (1) TO Far_1

* démarrage du programme à partir d'un certain mois sélectioné.
IF Val(Mois) <10
   Mois = STR (VAL(Mois),2)
ELSE
   Mois = STR(VAL(Mois),2)
ENDIF
IF Des ="1'
   Tel = VAL(Mois)
ELSE
   Tel = 1
ENDIF
STORE "1" TO Part, Boucle
STORE 1 TO Count
STORE .T. TO Process
DO WHILE Process

* première partie : calcul et présentation des résultats mensuels par
* fivondronana d'origine , par mois et par fivondronana de destination.
  IF Des ="1'
* première partie - calcul et résultats jusqu'au "crabes".

     USE C:Zipzip.DBF
     INDEX ON DESTIN TO C:Dein-dx.NDX
     USE
     DO WHILE Tel <13
        STORE "" TO X
        IF Tel < 10
           STORE '0'+STR(Tel,1) TO X
        ELSE
           STORE STR(Tel,2) TO X
        ENDIF

* sélection des enrégistrements par mois et copiage dans fichier zip_3.
        USE C:Zip_3.DBF
      APPEND FROM C:Zipzip FOR(DESTIN < "700" .AND. SUBSTR(DTOC(DATE),4,2,)=X)
        USE &&closeZip_3

* initialisations de la variable YY.
        DO CASE
            CASE count = 1
                 STORE 103 TO YY
            CASE count = 2
                 STORE 202 TO YY
            CASE count = 3
                 STORE 302 TO YY
            CASE count = 4
                 STORE 402 TO YY
            CASE count = 5
                 STORE 502 TO YY
            CASE count = 6
                 STORE 602 TO YY
         ENDCASE

* calcul pour tous les fivondronana de destination et par mois.

         DO WHILE YY < 622
            IF (Part ="1' .AND. Boucle ="1')
               STORE Twee TO Fiv
               DO SETUP
               DO LINE
               STORE "3" TO Boucle
            ENDIF
            STORE STR(YY,3) TO Y

* première partie du tableau.
            IF Part ="1'
               STORE STR(YY,3) TO Y.Key
STORE 0 TO Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10,Q11,Q12,Q13,Q14,Q15,Q16,Q17,Q18,Q19
STORE 0 TO V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12,V13,V14,V15,V16,V17,V18,V19
               STORE 0 TO Q20,Q21,Q22,V20,V21,V22
               USE C:Zipzip INDEX C:Dein-dx

* recherche sur fichier indexé.
               FIND &Key
               IF FOUND ()

* si recherche fructueuse, calcul des résultats.

                  USE C:ZIP 2.DBF &&open
                  APPEND FROM C:ZIP 3 FOR(DESTIN = Y .AND. CONSERV <23")
                  SUM QUANTITE,VALEUR TO Q1,V1 FOR(CONSERV = "01")
                  SUM QUANTITE,VALEUR TO Q2,V2 FOR(CONSERV = "02")
                  SUM QUANTITE,VALEUR TO Q3,V3 FOR(CONSERV = "03")
                  SUM QUANTITE,VALEUR TO Q4,V4 FOR(CONSERV = "04")
                  SUM QUANTITE,VALEUR TO Q5,V5 FOR(CONSERV = "05")
                  SUM QUANTITE,VALEUR TO Q6,V6 FOR(CONSERV = "06")
                  SUM QUANTITE,VALEUR TO Q7,V7 FOR(CONSERV = "07")
                  SUM QUANTITE,VALEUR TO Q8,V8 FOR(CONSERV = "08")
                  SUM QUANTITE,VALEUR TO Q9,V9 FOR(CONSERV = "09")
                  SUM QUANTITE,VALEUR TO Q10,V10 FOR(CONSERV = "10")
                  SUM QUANTITE,VALEUR TO Q11,V11 FOR(CONSERV = "11")
                  SUM QUANTITE,VALEUR TO Q12,V12 FOR(CONSERV = "12")
                  SUM QUANTITE,VALEUR TO Q13,V13 FOR(CONSERV = "13")
                  SUM QUANTITE,VALEUR TO Q14,V14 FOR(CONSERV = "14")
                  SUM QUANTITE,VALEUR TO Q15,V15 FOR(CONSERV = "15")
                  SUM QUANTITE,VALEUR TO Q16,V16 FOR(CONSERV = "16")
                  SUM QUANTITE,VALEUR TO Q17,V17 FOR(CONSERV = "17")
                  SUM QUANTITE,VALEUR TO Q18,V18 FOR(CONSERV = "18")
                  SUM QUANTITE,VALEUR TO Q19,V19 FOR(CONSERV = "19")
                  SUM QUANTITE,VALEUR TO Q20,V20 FOR(CONSERV = "20")
                  SUM QUANTITE,VALEUR TO Q21,V21 FOR(CONSERV = "21")
                  SUM QUANTITE,VALEUR TO Q22,V22 FOR(CONSERV = "22")
                  DELETE ALL
                  PACK
                  USE &&closeZip_2
               ENDIF &&Found
               USE &&closeZip_3

* impression du nom du fivondronana.

               STORE Y TO Fiv
               SET PRINT ON
               ?? CHR(15)
               DO CHX-FIV
               SET PRINT ON
               SET CONSOLE OFF

* impression des résultats uniquement si il y a une valeur positive.
IF(Q1>0 .OR. Q2>0 .OR. Q3>0 .OR. Q4>0 .OR. Q5>0 .OR. Q6>0 .OR. Q7>0 .OR. Q8>0;
 .OR. Q9>0 .OR. Q10>0 .OR. Q11>0 .OR. Q12>0 .OR. Q13>0 .OR. Q14>0 .OR. Q15>0;
 .OR. Q16>0 .OR. Q17>0 .OR. Q18>0 .OR. Q19>0 .OR. Q20>0 .OR. Q21>0 .OR. Q22>0)
?? " Quant|"+STR(Q1,8)+STR(Q2,8)+STR(Q3,8)+STR(Q4,8)+STR(Q5,8)+STR(Q6,8);
+STR(Q7,8)+STR(Q8,8)+STR(Q9,8)+STR(Q10,8)+" | "+STR(Q11,8)+STR(Q12,8);
+STR(Q13,8)+STR(Q14,8)+STR(Q15,8)+STR(Q16,8)+STR(Q17,8)+STR(Q18,8)+" | "
?? +STR(Q19,8)+STR(Q20,8)+STR(Q21,8)+STR(Q22,8)+" | "
? "|"+SPACE(14)+" Val. |"+STR(V1/1000,8)+STR(V2/1000,8)+STR(V3/1000,8);
+STR(V4/1000,8)+STR(V5/1000,8)+STR(V6/1000,8)+STR(V7/1000,8)+STR(V8/1000,8);
+STR(V9/1000,8)+STR(V10/1000,8)+" | "+STR(V11/1000,8)+STR(V12/1000,8)
?? STR(V13/1000,8)+STR(V14/1000,8)+STR(V15/1000,8)+STR(V16/1000,8);
+STR(V17/1000,8)+STR(V18/1000,8)+" | "+STR(V19/1000,8)+STR(V20/1000,8);
+STR(V21/1000,8)+STR(V22/1000,8)+" | "
               ELSE
                  ?? CHR(15)
?? "  |  pas de données d'expédition |_| ou données manquantes |_| …"
                  ?? Space(117)+"|"
               ENDIF &&Q1…Q22>0
               SET PRINT OFF
* remise à zéro des variables.
           STORE 0 TO Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10,Q11,Q12,Q13,Q14,Q15,Q16
           STORE 0 TO Q17,Q18,Q19,Q20,Q21,Q22
           STORE 0 TO V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12,V13,V14,V15,V16
           STORE 0 TO V17,V18,V19,V20,V21,V22
               STORE (YY+1) TO YY

* saut de programme pour le code d'ANTSIRABE.
               IF YY = 111
                  STORE (YY+1) TO YY
               ENDIF

* initialisation des calculs de la première partie du tableau.
    IF (YY=120 .OR.  YY=210 .OR.  YY=323 .OR. YY=422 .OR. YY=519 .OR.  YY=622)
               STORE "1" TO Part
               DO LINE
               SET CONSOLE OFF
        STORE 0 TO Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10,Q11,Q12,Q13,Q14,Q15,Q16
        STORE 0 TO Q17,Q18,Q19,Q20,Q21,Q22
        STORE 0 TO V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12,V13,V14,V15,V16
        STORE 0 TO V17,V18,V19,V20,V21,V22
               DO CASE
                  CASE YY =120
                       STORE STR (102,3) TO Z
                       STORE STR (120,3) TO ZZ
                  CASE YY = 210
                       STORE STR (201,3) TO Z
                       STORE STR (210,3) TO ZZ
                  CASE YY =323
                       STORE STR (301,3) TO Z
                       STORE STR (323,3) TO ZZ
                  CASE YY =422
                       STORE STR (401,3) TO Z
                       STORE STR (422,3) TO ZZ
                  CASE YY = 519
                       STORE STR (501,3) TO Z
                       STORE STR (519,3) TO ZZ
                  CASE YY = 622
                       STORE STR (601,3) TO Z
                       STORE STR (622,3) TO ZZ
               ENDCASE

* calcul des totaux de la premiére partie du tableau.

               USE C:ZIP 2.DBF &&open
APPEND FROM C:ZIP 3 FOR (DESTIN > Z .AND.  DESTIN < ZZ) .AND.  CONSERV > "23")
               SUM QUANTITE,VALEUR TO Q1,V1 FOR(CONSERV = "01")
               SUM QUANTITE,VALEUR TO Q2,V2 FOR(CONSERV = "02")
               SUM QUANTITE,VALEUR TO Q3,V3 FOR(CONSERV = "03")
               SUM QUANTITE,VALEUR TO Q4,V4 FOR(CONSERV = "04")
               SUM QUANTITE,VALEUR TO Q5,V5 FOR(CONSERV = "05")
               SUM QUANTITE,VALEUR TO Q6,V6 FOR(CONSERV = "06")
               SUM QUANTITE,VALEUR TO Q7,V7 FOR(CONSERV = "07")
               SUM QUANTITE,VALEUR TO Q8,V8 FOR(CONSERV = "08")
               SUM QUANTITE,VALEUR TO Q9,V9 FOR(CONSERV = "09")
               SUM QUANTITE,VALEUR TO Q10,V10 FOR(CONSERV = "10")
               SUM QUANTITE,VALEUR TO Q11,V11 FOR(CONSERV = "11")
               SUM QUANTITE,VALEUR TO Q12,V12 FOR(CONSERV = "12")
               SUM QUANTITE,VALEUR TO Q13,V13 FOR(CONSERV = "13")
               SUM QUANTITE,VALEUR TO Q14,V14 FOR(CONSERV = "14")
               SUM QUANTITE,VALEUR TO Q15,V15 FOR(CONSERV = "15")
               SUM QUANTITE,VALEUR TO Q16,V16 FOR(CONSERV = "16")
               SUM QUANTITE,VALEUR TO Q17,V17 FOR(CONSERV = "17")
               SUM QUANTITE,VALEUR TO Q18,V18 FOR(CONSERV = "18")
               SUM QUANTITE,VALEUR TO Q19,V19 FOR(CONSERV = "19")
               SUM QUANTITE,VALEUR TO Q20,V20 FOR(CONSERV = "20")
               SUM QUANTITE,VALEUR TO Q21,V21 FOR(CONSERV = "21")
               SUM QUANTITE,VALEUR TO Q22,V22 FOR(CONSERV = "22")
               DELETE ALL
               PACK
               USE &&close

* impression des totaux de la premiére partie du tableau.
               SET PRINT ON
               SET CONSOLE OFF
               ?? CHR(15)
               ? "|"+SPACE(1)+"TOTAUX"
?? SPACE(5)+"QUANTITE|"+STR(Q1,8)+STR(Q2,8)+STR(Q3,8)+STR(Q4,8)+STR(Q5,8);
+STR(Q6,8)+STR(Q7,8)+STR(Q8,8)+STR(Q9,8)+STR(Q10,8)+" | "+STR(Q11,8);
+STR(Q12,8)+STR(Q13,8)+STR(Q14,8)+STR(Q15,8)+STR(Q16,8)+STR(Q17,8);
?? STR(Q18,8)+" | "+STR(Q19,8)+STR(Q20,8)+STR(Q21,8)+STR(Q22,8)+" | "
? " | "+SPACE(12)+"VALEUR |"+STR(V1/1000,8)+STR(V2/1000,8)+STR(V3/1000,8);
+STR(V4/1000,8)+STR(V5/1000,8)+STR(V6/1000,8)+STR(V7/1000,8)+STR(V8/1000,8);
+STR(V9/1000,8)+STR(V10/1000,8)+" | "+STR(V11/1000,8)+STR(V12/1000,8)
?? STR(V13/1000,8)+STR(V14/1000,8)+STR(V15/1000,8)+STR(V16/1000,8);
+STR(V17/1000,8)+STR(V18/1000,8)+" | "+STR(V19/1000,8)+STR(V20/1000,8);
+STR(V21/1000,8)+STR(V22/1000,8)+" | "
               SET PRINT OFF
               DO LINE

* initialisation au passage vers la deuxième partie du tableau.
               STORE "2" TO Part, Boucle
               IF YY = 622
                  STORE 602 TO YY
               ENDIF
            ENDIF &&YY…=622
* fin de la première partie du tableau.

         ELSE

* seconde unité de la première partie, calculs et résultats par fivondronana
* d'origine, par mois et par fivondronana de destination + totaux.
            IF Part ="2'
* impression de l'entête.
               IF (Part= "8" .AND. Boucle = "2")
                   STORE Twee TO Fiv
                   SET PRINT ON
                   EJECT
                   ?? CHR (27) + CHR(69)
                   ? "Seconde pertie"
                   ?? CHR(27) + CHR(70)
                   ?? CHR(14)
                   ?? SPACE(6)+"EXPEDITIONS hors FIVONDRONANA -1987-"
                   ?? CHR(20)
                   ?? SPACE(4)+" Date : "+DTOC(Mdate)
                   DO SETUP
                   DO LINE
                ENDIF
                STORE "3" TO Boucle

* initialisation de la variable YY.
                DO CASE
                   CASE YY = 120
                        STORE 103 TO YY
                   CASE YY = 210
                        STORE 202 TO YY
                   CASE YY = 323
                        STORE 302 TO YY
                   CASE YY = 422
                        STORE 402 TO YY
                   CASE YY = 519
                        STORE 502 TO YY
                   CASE YY = 602
                        STORE 602 TO YY
                ENDCASE

* calculs pour tous les fivondronana de destination, par mois et moyen de
* conservation.
STORE 0 TO Q23,Q24,Q25,Q26,Q27,Q28,Q29,Q30,Q31,Q32,Q33,Q34,Q35,Q36,Q37,Q38
STORE 0 TO V23,V24,V25,V26,V27,V28,V29,V30,V31,V32,V33,V34,V35,V36,V37,V38

* recherche sur fichier indexé.
                   STORE STR (YY,3) TO Y,Key
                   USE C:Zipzip INDEX C:Dein-dx
                   FIND &Key

* si recherche fructuese, calcul des résultats.
                   IF FOUND()
                      USE C:ZIP 2.DBF.
                      APPEND FROM C:ZIP 3 FOR(DESTINE = Y .AND. CONSERVE> "22")
                      SUM QUANTITE,VALEUR TO Q23,V23 FOR(CONSERV = "23")
                      SUM QUANTITE,VALEUR TO Q24,V24 FOR(CONSERV = "24")
                      SUM QUANTITE,VALEUR TO Q25,V25 FOR(CONSERV = "25")
                      SUM QUANTITE,VALEUR TO Q26,V26 FOR(CONSERV = "26")
                      SUM QUANTITE,VALEUR TO Q27,V27 FOR(CONSERV = "27")
                      SUM QUANTITE,VALEUR TO Q28,V28 FOR(CONSERV = "28")
                      SUM QUANTITE,VALEUR TO Q29,V29 FOR(CONSERV = "29")
                      SUM QUANTITE,VALEUR TO Q30,V30 FOR(CONSERV = "30")
                      SUM QUANTITE,VALEUR TO Q31,V31 FOR(CONSERV = "31")
                      SUM QUANTITE,VALEUR TO Q32,V32 FOR(CONSERV = "32")
                      SUM QUANTITE,VALEUR TO Q33,V33 FOR(CONSERV = "33")
                      SUM QUANTITE,VALEUR TO Q34,V34 FOR(CONSERV = "34")
                      SUM QUANTITE,VALEUR TO Q35,V35 FOR(CONSERV = "35")
                      SUM QUANTITE,VALEUR TO Q36,V36 FOR(CONSERV = "36")
                      SUM QUANTITE,VALEUR TO Q37,V37 FOR(CONSERV = "37")
                      DELETE ALL
                      PACK
                      USE &&closeZip_2
                      USE C:ZIP 3.DBF
                      SUM QUANTITE, VALEUR TO Q38,V38 FOR(DESTIN = Y)
                      USE &&closeZip_3
                   ENDIF &&Found
                   USE &&closeZipzip

* impression du nom du fivondronana.
                   STORE Y TO Fiv
                   SET PRINT ON
                   ?? CHR(15)
                   ?? SPACE(10)
                   DO CHX FIV
                   SET PRINT ON
                   SET CONSOLE OFF

* impression des rèsultats si le total est positif.

                   IF (Q38 >0 .OR. V38>0)
?? "Quantité |"+STR(Q23,8)+STR(Q24,8)+STR(Q25,8)+STR(Q26,8)+" | "+STR(Q27,8);
+STR(Q28,8)+STR(Q29,8)+" | "+STR(Q30,8)+" | "+STR(Q31,8)+" | "+STR(Q32,8);
+" | "+STR(Q33,8)+STR(Q34,8)+" | "+STR(Q35,8)+" | "+STR(Q36,8);
?? +" | "+STR(Q37,8)+"||"+STR(Q38,14)+" | "
? " | "+SPACE(15)+"Valeur |"+STR(V23/1000,8)+STR(V24/1000,8)+STR(V25/1000,8);
+STR(V26/1000,8)+" | "+STR(V27/1000,8)+STR(V28/1000,8)+STR(V29/1000,8);
+" | "+STR(V30/1000,8)+" | "+STR(V31/1000,8)+" | "+STR(V32/1000,8)+" | ";
?? STR(V33/1000,8)+" | "+STR(V34/1000,8)+" | "+STR(V35/1000,8)+" | "+STR(V36/1000,8);
+" | "+STR(V37/1000,8)+"||"+STR(V38/1000,8)+" | "
                   ELSE
                      ?? CHR(15)
?? "|   pas de données d'expédition |_|… données manquantes |_|"
                      ?? SPACE (103)+" | "
                   ENDIF &&0,V>38
                   SET PRINT OFF

* remise des variables à zéro.
              STORE 0 TO Q23,Q24,Q25,Q26,Q27,Q28,Q29,Q30,Q31,Q32,Q33,Q34,Q35
              STORE 0 TO Q36,Q37,Q38
              STORE 0 TO V23,V24,V25,V26,V27,V28,V29,V30,V31,V32,V33,V34,V35
              STORE 0 TO V36,V37,V38
                 STORE (YY+1) TO YY

* saut pour le code d'Antsirabe.

                 IF YY = 111
                    STORE (YY+1) TO YY
                 ENDIF

* impression et calcul des totaux de la seconde partie du tableau.
       IF (YY = 120 .OR.  YY=210 .OR.  YY=323 .OR. YY=422 .OR.  YY=519 .OR.  YY=622)
                    DO LINE
                    SET CONSOLE OFF
                    DO CASE
                       CASE YY = 120
                            STORE STR(120,3) TO ZZ
                            STORE STR(102,3) TO Z
                       CASE YY = 210
                            STORE STR(210,3) TO ZZ
                            STORE STR(201,3) TO Z
                       CASE YY = 323
                            STORE STR(323,3) TO ZZ
                            STORE STR(301,3) TO Z
                       CASE YY = 422
                            STORE STR(422,3) TO ZZ
                            STORE STR(401,3) TO Z
                       CASE YY = 519
                            STORE STR(519,3) TO ZZ
                            STORE STR(501,3) TO Z
                       CASE YY = 622
                            STORE STR(622,3) TO ZZ
                            STORE STR(601,3) TO Z
                    ENDCASE

* remise à zéro des variables.
STORE 0 TO Q23,Q24,Q25,Q26,Q27,Q28,Q29,Q30,Q31,Q32,Q33,Q34,Q35,Q36,Q37,Q38
STORE 0 TO V23,V24,V25,V26,V27,V28,V29,V30,V31,V32,V33,V34,V35,V36,V37,V38

* calcul des rèsultats.
                       USE C:ZIP 2.DBF
APPEND FROM C:ZIP_3 FOR ((DESTINE > Z .AND.  DESTIN < ZZ) .AND.  CONSERV> "22")
                       SUM QUANTITE, VALEUR TO Q23,V23 FOR (CONSERV = "23")
                       SUM QUANTITE,VALEUR TO Q24,V24 FOR(CONSERV = "24")
                       SUM QUANTITE,VALEUR TO Q25,V25 FOR(CONSERV = "25")
                       SUM QUANTITE,VALEUR TO Q26,V26 FOR(CONSERV = "26")
                       SUM QUANTITE,VALEUR TO Q27,V27 FOR(CONSERV = "27")
                       SUM QUANTITE,VALEUR TO Q28,V28 FOR(CONSERV = "28")
                       SUM QUANTITE,VALEUR TO Q29,V29 FOR(CONSERV = "29")
                       SUM QUANTITE,VALEUR TO Q30,V30 FOR(CONSERV = "30")
                       SUM QUANTITE,VALEUR TO Q31,V31 FOR(CONSERV = "31")
                       SUM QUANTITE,VALEUR TO Q32,V32 FOR(CONSERV = "32")
                       SUM QUANTITE,VALEUR TO Q33,V33 FOR(CONSERV = "33")
                       SUM QUANTITE,VALEUR TO Q34,V34 FOR(CONSERV = "34")
                       SUM QUANTITE,VALEUR TO Q35,V35 FOR(CONSERV = "35")
                       SUM QUANTITE,VALEUR TO Q36,V36 FOR(CONSERV = "36")
                       SUM QUANTITE,VALEUR TO Q37,V37 FOR(CONSERV = "37")
                       DELETE ALL
                       PACK
                       USE &&closeZip_2
                       USE C:ZIP_3.DBF
             SUM QUANTITE,VALEUR TO Q38,V38 FOR (DESTIN> Z .AND. DESTIN> ZZ)
                       USE &&closeZip_3
                       SET PRINT ON

* impression des totaux.
                       SET CONSOLE OFF
                       ?? CHR(15)
                       ? "| TOTAUX"
?? SPACE(8)+"QUANTITE |"+STR(Q23,8)+STR(Q24,8)+STR(Q25,8)+STR(Q26,8)+" | ";
+STR(Q27,8)+STR(Q28,8)+STR(Q29,8)+" | "+STR(Q30,8)+" | "+STR(Q31,8)+" | ";
+STR(Q32,8)+" | "+STR(Q33,8)+STR(Q34,8)+" | "+STR(Q35,8)+" | ";
?? STR(Q36,8)+" | "+STR(Q37,8)+"||"+STR(Q38,14)+" | "
? " | "+SPACE(16)+"VALEUR |"+STR(V23/1000,8)+STR(V24/1000,8)+STR(V25/1000,8);
+STR(V26/1000,8)+" | "+STR(V27/1000,8)+STR(V28/1000,8)+STR(V29/1000,8)+" | "
+STR(V30/1000,8)+" | "+STR(V31/1000,8)+" | "+STR(V32/1000,8)+" | ";
?? STR(V33/1000,8)+STR(V34/1000,8)" | "+STR(V35/1000,8)+" | ";
+STR(V36/1000,8)+" | "+STR(V37/1000,8)+"||"+STR(V38/1000,8)+" | "
                       DO LINE
STORE 0 TO Q23,Q24,Q25,Q26,Q27,Q28,Q29,Q30,Q31,Q32,Q33,Q34,Q35,Q36,Q37,Q38
STORE 0 TO V23,V24,V25,V26,V27,V28,V29,V30,V31,V32,V33,V34,V35,V36,V37,V38
                       SET PRINT ON
                       EJECT
                       SET PRINT OFF
                    ENDIF &&YY…=622

* retour vers le début de la boucle du programme et initialisation de la
* sortie de la boucle.
                    IF YY = 120
                       STORE "1" TO Boucle, Part
                       STORE (YY+82) TO YY
                    ELSE
                       IF YY = 210
                           STORE "1" TO Boucle, Part
                           STORE (YY+92) TO YY
                       ELSE
                          IF YY = 323
                             STORE "1" TO Boucle, Part
                             STORE (YY+79) TO YY
                          ELSE
                             IF YY = 422
                                STORE "1" TO Boucle, Part
                                STORE (YY+80) TO YY
                             ELSE
                                IF YY = 519
                                   STORE "1" TO Boucle, Part
                                   STORE (YY+83) TO YY
                                ELSE
                                    IF YY = 622
                                       STORE (YY+80) TO YY
                                       IF Tel > 11
                                          STORE '2' TO Part, Boucle
                                       ELSE
                                          STORE '1' TO Part, Boucle
                                       ENDIF
                                    ENDIF &&YY=622
                                 ENDIF &&YY=519
                              ENDIF &&YY=422
                           ENDIF &&YY=323
                        ENDIF &&YY=210
                     ENDIF &&YY=120
                  ENDIF &&part=2

* reprise des résultats par fivondronana d'origine et pour le mois suivant.
               ENDIF &&Part=1
               STORE Count + 1 TO Count
            ENDDO &&YY<622
            Count = 1
            STORE 103 TO YY

* fin de la boucle.
            IF (Tel > 11 .AND. PART ="2')
                STORE .F. TO Process
            ELSE
            STORE .T. TO Process
            ENDIF
            STORE Tel + 1 TO Tel
            USE C:Zip 3
            DELETE ALL
            PACK
            USE &&close Zip_3
         ENDDO &&Tel<13

      ELSE

* résultats par fivondronana d'origine et par année

         IF Des ="2'
            DO EX4Mbis
         ENDIF &&Des=2
      ENDIF &&Des=1

* fin de la boucle principale.
ENDDO &&Process
SET PRINT ON
EJECT
SET PRINT OFF

* retour au menu principal et remise à l'état d'origine.
USE
DELETE FILE C:ZIP_2.DBF
DELETE FILE C:ZIP_3.DBF
DELETE FILE C:Dein_dx.MDX
DELETE FILE C:Zipzip.DBF
SET SAFETY ON
SET TALK ON
SET CONSOLE ON
RELEASE ALL
RETURN
* fin du programme.

EX(pédition)_4_M(ensuelle)BIS COMMAND FILE

***************************************************************************************
Ce programme calcule par année, les expéditions hors fivondronana par MOYEN DE CONSERVATION et par DESTINATION.
Les données ont été transférées sur disque dur pour raison de sécurité.
Le programme ne traite que les informations des expéditions et non des exportations.
Les résultats sont présentés annuellement pour tous les fivondronana de destination.
***************************************************************************************

* première partie des estimations annuelles - préparation de l'environment
* de travail.
SET SAFETY OFF
SET TALK OFF
SET CONSOLE OFF
STORE "1" TO Boucle
STORE 103 TO YY
USE C:Zipzip
INDEX ON DESTIN TO C:Dein-dx.NDX
USE &&closezipzip
USE C:Zip 3
APPEND FROM C:Zipzip FOR(DESTIN < "700")
USE &&close Zip_3

* boucle principale.
DO WHILE YY < 622

* première partie, impression de l'entête.
  IF Part ="1'
     STORE Fiv_1 TO Fiv
     STORE Fiv TO Y
     IF (Part ="1' .AND. Boucle = "1")
         DO SETUP
         DO LINE
     ENDIF
     STORE "2" TO Boucle

* initialisation des variables.
     STORE STR(YY,3) TO Y,Key
     STORE 0 TO Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10,Q11,Q12,Q13,Q14,Q15,Q16,Q17
     STORE 0 TO Q18,Q19,Q20,Q21,Q22,V20,V21,V22,V18,V19
     STORE 0 TO V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12,V13,V14,V15,V16,V17

* recherche sur fichier indexé.
     USE C:Zipzip INDEX Dein-dx
     FIND &Key

* si recherche fructueuse, calcul et impression des résultats.
     IF FOUND()
        USE C:ZIP 2.DBF
        APPEND FROM C:ZIP 3 FOR (DESTIN = Y .AND. CONSERV < "23")
        SUM QUANTITE,VALEUR TO Q1,V1 FOR(CONSERV = "01")
        SUM QUANTITE,VALEUR TO Q2,V2 FOR(CONSERV = "02")
        SUM QUANTITE,VALEUR TO Q3,V3 FOR(CONSERV = "03")
        SUM QUANTITE,VALEUR TO Q4,V4 FOR(CONSERV = "04")
        SUM QUANTITE,VALEUR TO Q5,V5 FOR(CONSERV = "05")
        SUM QUANTITE,VALEUR TO Q6,V6 FOR(CONSERV = "06")
        SUM QUANTITE,VALEUR TO Q7,V7 FOR(CONSERV = "07")
        SUM QUANTITE,VALEUR TO Q8,V8 FOR(CONSERV = "08")
        SUM QUANTITE,VALEUR TO Q9,V9 FOR(CONSERV = "09")
        SUM QUANTITE,VALEUR TO Q10,V10 FOR(CONSERV = "010")
        SUM QUANTITE,VALEUR TO Q11,V11 FOR(CONSERV = "011")
        SUM QUANTITE,VALEUR TO Q12,V12 FOR(CONSERV = "012")
        SUM QUANTITE,VALEUR TO Q13,V13 FOR(CONSERV = "013")
        SUM QUANTITE,VALEUR TO Q14,V14 FOR(CONSERV = "014")
        SUM QUANTITE,VALEUR TO Q15,V15 FOR(CONSERV = "015")
        SUM QUANTITE,VALEUR TO Q16,V16 FOR(CONSERV = "16")
        SUM QUANTITE,VALEUR TO Q17,V17 FOR(CONSERV = "17")
        SUM QUANTITE,VALEUR TO Q18,V18 FOR(CONSERV = "18")
        SUM QUANTITE,VALEUR TO Q19,V19 FOR(CONSERV = "19")
        SUM QUANTITE,VALEUR TO Q20,V20 FOR(CONSERV = "20")
        SUM QUANTITE,VALEUR TO Q21,V21 FOR(CONSERV = "21")
        SUM QUANTITE,VALEUR TO Q22,V22 FOR(CONSERV = "22")
        DELETE ALL
        PACK
        USE &&closeZip_2
        ENDIF &&Found()
        USE &&closeZipzip

* impression du nom du fivondronana.

        STORE Y TO Fiv
        SET PRINT ON
        ?? CHR (15)
        DO CHX FIV
        SET PRINT ON

* impression des résultats si les valeurs sont positives.

        SET CONSOLE OFF
IF (Q1>0 .OR. Q2>0 .OR. Q3>0 .OR. Q4>0 .OR. Q5>0 .OR. Q6>0 .OR. Q7>0 .OR. Q8>0;
  .OR. Q9>0.OR. Q10>0 .OR. Q11>0 .OR. Q12>0 .OR. Q13>0 .OR. Q14>0 .OR. Q15>0;
  .OR. Q16>0 .OR. Q17>0 .OR. Q18>0 .OR. Q19>0 .OR. Q20> .OR. Q21> .OR. Q22>0)

?? " Quant|"+STR(Q1,8)+STR(Q2,8)+STR(Q3,8)+STR(Q4,8)+STR(Q5,8)+STR(Q6,8);
+STR(Q7,8)+STR(Q8,8)+STR(Q9,8)+STR(Q10,8)+" | "+STR(Q11,8)+STR(Q12,8);
+STR(Q13,8)+STR(Q14,8)+STR(Q15,8)+STR(Q16,8)+STR(Q17,8)+STR(Q18,8)
?? " | "+STR(Q19,8)+STR(Q20,8)+STR(Q21,8)+STR(Q22,8)+" | "
? "|"+SPACE(13)+" Val. |"+STR(V1/1000,8)+STR(V2/1000,8)+STR(V3/1000,8);
+STR(V4/1000,8)+STR(V5/1000,8)+STR(V6/1000,8)+STR(V7/1000,8)+STR(V8/1000,8);
+STR(V9/1000,8)+STR(V10/1000,8)+" | "+STR(V11/1000,8)+STR(V12/1000,8)
?? STR(V13/1000,8)+STR(V14/1000,8)+STR(V15/1000,8)+STR(V16/1000,8);
+STR(V17/1000,8)+STR(V18/1000,8)+" | "+STR(V19/1000,8)+STR(V20/1000,8);
+STR(V21/1000,8)+STR(V22/1000,8)+" | "
        ELSE
          ?? CHR(15)
?? "|   pas de données d'expédition |_| ou données manquantes |_|"
       ?? SPACE(121)+"|"
    ENDIF &&D1..Q22>0
    SET PRINT OFF

* remise à zéro des variables.
    STORE 0 TO Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10,Q11,Q12,Q13,Q14,Q15,Q16
    STORE 0 TO Q17,Q18,Q19,Q20,Q21,Q22
    STORE 0 TO V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12,V13,V14,V15,V16
    STORE 0 TO V17,V18,V19,V20,V21,V22

* passage au fivondronana suivant et saut pour le fivondronana d'Antsirabe.
    STORE (YY+1) TO YY
    IF YY = 111
       STORE (YY+1) TO YY
    ENDIF

* impression des totaux de la première partie du tableau.
    IF (YY=120 .OR. YY=210 .OR. YY=223 .OR. YY=422 .OR. YY=519 .OR. YY=622)
        STORE '1' TO Part
        DO LINE
        SET CONSOLE OFF

* initialisation des variables à zéro.
        STORE 0 TO Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10,Q11,Q12,Q13,Q14,Q15,Q16,Q17
        STORE 0 TO Q18,Q19,Q20,Q21,Q22
        STORE 0 TO V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12,V13,V14,V15,V16
        STORE 0 TO V17,V18,V19,V20,V21,V22

* initialisation des variables Z et ZZ.
        DO CASE
           CASE YY = 120
                STORE STR(102,3) TO Z
                STORE STR(120,3) TO ZZ
           CASE YY = 210
                STORE STR(201,3) TO Z
                STORE STR(210,3) TO ZZ
           CASE YY = 323
                STORE STR(301,3) TO Z
                STORE STR(323,3) TO ZZ
           CASE YY = 422
                STORE STR (401,3) TO Z
                STORE STR (422,3) TO ZZ
           CASE YY = 519
                STORE STR(501,3) TO Z
                STORE STR(519,3) TO ZZ
           CASE YY = 622
                STORE STR(622,3) TO ZZ
                STORE STR(601,3) TO Z
        ENDCASE

* calcul des résultats totaux de la première partie du tableau.
        USE C:ZIP_2.DBF
APPEND FROM C:ZIP 3 FOR ((DESTIN > Z .AND. DESTIN < ZZ) .AND. CONSERV < "23")
        SUM QUANTITE,VALEUR TO Q1,V1 FOR (CONSERV = "01")
        SUM QUANTITE,VALEUR TO Q2,V2 FOR (CONSERV = "02")
        SUM QUANTITE,VALEUR TO Q3,V3 FOR (CONSERV = "03")
        SUM QUANTITE,VALEUR TO Q4,V4 FOR (CONSERV = "04")
        SUM QUANTITE,VALEUR TO Q5,V5 FOR (CONSERV = "05")
        SUM QUANTITE,VALEUR TO Q6,V6 FOR (CONSERV = "06")
        SUM QUANTITE,VALEUR TO Q7,V7 FOR (CONSERV = "07")
        SUM QUANTITE,VALEUR TO Q8,V8 FOR (CONSERV = "08")
        SUM QUANTITE,VALEUR TO Q9,V9 FOR (CONSERV = "09")
        SUM QUANTITE,VALEUR TO Q10,V10 FOR (CONSERV = "10")
        SUM QUANTITE,VALEUR TO Q11,V11 FOR (CONSERV = "11")
        SUM QUANTITE,VALEUR TO Q12,V12 FOR (CONSERV = "12")
        SUM QUANTITE,VALEUR TO Q13,V13 FOR (CONSERV = "13")
        SUM QUANTITE,VALEUR TO Q14,V14 FOR (CONSERV = "14")
        SUM QUANTITE,VALEUR TO Q15,V15 FOR (CONSERV = "15")
        SUM QUANTITE,VALEUR TO Q16,V16 FOR (CONSERV = "16")
        SUM QUANTITE,VALEUR TO Q17,V17 FOR (CONSERV = "17")
        SUM QUANTITE,VALEUR TO Q18,V18 FOR (CONSERV = "18")
        SUM QUANTITE,VALEUR TO Q19,V19 FOR (CONSERV = "19")
        SUM QUANTITE,VALEUR TO Q20,V20 FOR (CONSERV = "20")
        SUM QUANTITE,VALEUR TO Q21,V21 FOR (CONSERV = "21")
        SUM QUANTITE,VALEUR TO Q22,V22 FOR (CONSERV = "22")
        DELETE ALL
        PACK
        USE &&closeZip_2

* imperssion des résultats totaux de la première partie du tableau.
        SET PRINT ON
        ?? CHR(15)
        ? "|"+SPACE(1)+"TOTAUX"
?? SPACE(5)+"QUANTITE|"+STR(Q1,8)+STR(Q2,8)+STR(Q3,8)+STR(Q4,8)+STR(Q5,8);
+STR(Q6,8)+STR(Q7,8)+STR(Q8,8)+STR(Q9,8)+STR(Q10,8)+" | "+STR(Q11,8);
+STR(Q12,8)+STR(Q13,8)+STR(Q14,8)+STR(Q15,8)+STR(Q16,8)+STR(Q17,8)
?? STR(Q18,8)+" | "+STR(Q19,8)+STR(Q20,8)+STR(Q21,8)+STR(Q22,8)+" | "
? "|"+SPACE(12)+"VALEUR |"+STR(V1/1000,8)+STR(V2/1000,8)+STR(V3/1000,8);
+STR(V4/1000,8)+STR(V5/1000,8)+STR(V6/1000,8)+STR(V7/1000,8)+STR(V8/1000,8);
+STR(V9/1000,8)+STR(V10/1000,8)+" | "+STR(V11/1000,8)+STR(V12/1000,8)
?? STR(V13/1000,8)+STR(V14/1000,8)+STR(V15/1000,8)+STR(V16/1000,8);
+STR(V17/1000,8)+STR(V18/1000,8)+" | "+STR(V19/1000,8)+STR(V20/1000,8);
+STR(V21/1000,8)+STR(V22/1000,8)+" | "
        DO LINE

* initialisation au passage à la seconde partie du tableau.
        STORE "2" TO Part, Boucle
        IF YY = 622
           YY = 602
        ENDIF
     ENDIF &&YY=…622

* fin de le première partie du tableau.

  ELSE

* seconde partie du tableau.
     IF part = "2"
* impression de l'entête.
        IF (Boucle = "2" .AND. Part = "2")
            SET PRINT ON
            EJECT
            ?? CHR(27) + CHR(69)
            ? "Seconde partie"
            ?? CHR(87) + CHR(70)
            ?? CHR(14)
            ?? SPACE(6)+"EXPEDITION hors FIVONDRONANA"
            ?? CHR(20)
            ?? SPACE(7)+"Date : "+DTOC(MDATE)
            ?
            SET PRINT OFF
            STORE Fiv 1 to fiv
            DO SETUP
            DO LINE
         ENDIF
         STORE "3" TO Boucle
         SET TALK OFF

* initialisation des variables.
         DO CASE
            CASE YY = 120
                 STORE 103 TO YY
            CASE YY = 210
                 STORE 202 TO YY
            CASE YY = 323
                 STORE 302 TO YY
            CASE YY = 422
                 STORE 402 TO YY
            CASE YY = 519
                 STORE 502 TO YY
            CASE YY = 602
                 STORE 602 TO YY
         ENDCASE
         STORE STR(YY.3) TO Y,Key
         SET CONSOLE OFF
         STORE 0 TO Q23,Q24,Q25,Q26,Q27,Q28,Q29,Q30,Q31,Q32,Q33
         STORE 0 TO Q34,Q35,Q36,Q37,Q38,V23,V24,V25,V26,V27,V28
         STORE 0 TO V29,V30,V31,V32,V33,V34,V35,V36,V37,V38

* recherche sur fichier indexé.
         USE C:Zipzip INDEX Dein_dx
         FIND & Key

* si recherche fructueuse, calcul et impression des résultats de la seconde
* partie du tableau.
         IF FOUND()
            USE C:ZIP 2 DBF
            APPEND FROM C:ZIP 3 FOR (DESTIN = Y .AND. CONSERV > "22")
            SUM QUANTITE,VALEUR TO Q23,V23 FOR (CONSERV = "23")
            SUM QUANTITE,VALEUR TO Q24,V24 FOR (CONSERV = "24")
            SUM QUANTITE,VALEUR TO Q25,V25 FOR (CONSERV = "25")
            SUM QUANTITE,VALEUR TO Q26,V26 FOR (CONSERV = "26")
            SUM QUANTITE,VALEUR TO Q27,V27 FOR(CONSERV = "27")
            SUM QUANTITE,VALEUR TO Q28,V28 FOR(CONSERV = "28")
            SUM QUANTITE,VALEUR TO Q29,V29 FOR(CONSERV = "29")
            SUM QUANTITE,VALEUR TO Q30,V30 FOR(CONSERV = "30")
            SUM QUANTITE,VALEUR TO Q31,V31 FOR(CONSERV = "31")
            SUM QUANTITE,VALEUR TO Q32,V32 FOR(CONSERV = "32")
            SUM QUANTITE,VALEUR TO Q33,V33 FOR(CONSERV = "33")
            SUM QUANTITE,VALEUR TO Q34,V34 FOR(CONSERV = "34")
            SUM QUANTITE,VALEUR TO Q35,V35 FOR(CONSERV = "35")
            SUM QUANTITE,VALEUR TO Q36,V36 FOR(CONSERV = "36")
            SUM QUANTITE,VALEUR TO Q37,V37 FOR(CONSERV = "37")
            DELETE ALL
            PACK
            USE &&closeZip_2
            USE C: ZIP 3.DBF
            SUM QUANTITE, VALEUR TO Q38,V38 FOR (DESTIN = Y)
            USE &&closeZip_3
         ENDIF &&Found ()
         USE &&closeZipzip

* impression du nom du fivondronana.
         STORE Y TO Fiv
         SET PRINT ON
         ?? CHR (15)
         DO CHX_FIV

* impression si les résultats des calculs sont positifs.
         SET PRINT ON
         SET CONSOLE OFF
         IF Q38 > 0

?? " Quantité |"+STR(Q23,8)+STR(Q24,8)+STR(Q25,8)+STR(Q26,8)+" | "+STR(Q27,8);
+STR(Q28,8)+STR(Q29,8)+" | "+STR(Q30,8)+" | "+STR(Q31,8)+" | "+STR(Q32,8);
+" | "+STR(Q33,8)+STR(Q34,8)+" | "+STR(Q35,8)+" | "+STR(Q36,8)
?? " | "+STR(Q37,8)+"||"+STR(Q38,14)+" | "
? "|"+SPACE(15)+"Valeur |"+STR(V23/1000,8)+STR(V24/1000,8)+STR(V25/1000,8);
+STR(V26/1000,8)+" | "+STR(V27/1000,8)+STR(V28/1000,8)+STR(V29/1000,8);
+" | "+STR(V30/1000,8)+" | "+STR(V31/1000,8)+" | "+STR(V32/1000,8)+" | "
?? STR(V33/1000,8)+STR(V34/1000,8)+" | "+STR(V35/1000,8)+" | "+STR(V36/1000,8);
+" | "+STR(V37/1000,8)+"||"+STR(V38/1000,14)+" | "
         ELSE
            ?? CHR (15)
?? SPACE (10)+"| pas de données d'expédition |_| ou données manquantes |_|"
            ?? SPACE (101)+" | "
         ENDIF &&Q38>0
         SET PRINT OFF
         STORE (YY+1) TO YY

* saut pour le fivondronana d'Antsirabe.
         IF YY = 111
            STORE (YY+1) TO YY
         ENDIF

* impression et calcul des résultats totaux de la seconde partie du tableau.
         IF (YY=120 .OR. YY=210 .OR. YY=323 .OR. YY=422 .OR. YY=519 .OR. YY=622)
             DO LINE
             SET CONSOLE OFF
             STORE 0 TO Q23,Q24,Q25,Q26,Q27,Q28,Q29,Q30,Q31,Q32,Q33
             STORE 0 TO Q34,Q35,Q36,Q37,Q38,V23,V24,V25,V26,V27,V28
             STORE 0 TO V29,V30,V31,V32,V33,V34,V35,V36,V37,V38

* initialisation des variables Z et ZZ.
         DO CASE
            CASE YY = 120
                 STORE STR (102,3) TO Z
                 STORE STR (120,3) TO ZZ
            CASE YY = 210
                 STORE STR (201,3) TO Z
                 STORE STR (210,3) TO ZZ
            CASE YY = 323
                 STORE STR (301,3) TO Z
                 STORE STR (323,3) TO ZZ
            CASE YY = 422
                 STORE STR (401,3) TO Z
                 STORE STR (422,3) TO ZZ
            CASE YY = 519
                 STORE STR (501,3) TO Z
                 STORE STR (519,3) TO ZZ
            CASE YY = 622
                 STORE STR (622,3) TO ZZ
                 STORE STR (601,3) TO Z
         ENDCASE

* calcul des résultats.
         USE C:ZIP 2.DBF
APPEND FROM C:ZIP 3 FOR ((DESTIN > Z .AND. DESTIN < ZZ) .AND. CONSERV > "22")
         SUM QUANTITE,VALEUR TO Q23,V23 FOR(CONSERV = "23")
         SUM QUANTITE,VALEUR TO Q24,V24 FOR(CONSERV = "24")
         SUM QUANTITE,VALEUR TO Q25,V25 FOR(CONSERV = "25")
         SUM QUANTITE,VALEUR TO Q26,V26 FOR(CONSERV = "26")
         SUM QUANTITE,VALEUR TO Q27,V27 FOR(CONSERV = "27")
         SUM QUANTITE,VALEUR TO Q28,V28 FOR(CONSERV = "28")
         SUM QUANTITE,VALEUR TO Q29,V29 FOR(CONSERV = "29")
         SUM QUANTITE,VALEUR TO Q30,V30 FOR(CONSERV = "30")
         SUM QUANTITE,VALEUR TO Q31,V31 FOR(CONSERV = "31")
         SUM QUANTITE,VALEUR TO Q32,V32 FOR(CONSERV = "32")
         SUM QUANTITE,VALEUR TO Q33,V33 FOR(CONSERV = "33")
         SUM QUANTITE,VALEUR TO Q34,V34 FOR(CONSERV = "34")
         SUM QUANTITE,VALEUR TO Q35,V35 FOR(CONSERV = "35")
         SUM QUANTITE,VALEUR TO Q36,V36 FOR(CONSERV = "36")
         SUM QUANTITE,VALEUR TO Q37,V37 FOR(CONSERV = "37")
         DELETE ALL
         PACK
         USE &&closeZip_2
         USE C:ZIP 3.DBF
         SUM QUANTITE,VALEUR TO Q38,V38 FOR (DESTIN > Z .AND. DESTIN < ZZ)
         USE &&closeZip_3

* impression des résultats totaux de la seconde partie du tableau.
         SET PRINT ON
         ?? CHR(15)
         ? "|"+SPACE(3)+"TOTAUX  "
?? SPACE (1)+"QUANTITE|"+STR(Q23,8)+STR(Q24,8)+STR(Q25,8)+STR(Q26,8)+" | ";
+STR(Q27,8)+STR(Q28,8)+STR(Q29,8)+" | "+STR(Q30,8)+" | "+STR(Q31,8)+" | ";
+STR(Q32,8)+" | "+STR(Q33,8)+STR(Q34,8)+" | "+STR(Q35,8)+" | "
?? STR(Q36,8)+" | "+STR(Q37,8)+"||"+STR(Q38,14)+" | "
? "|"+SPACE(16)+"VALEUR |"+STR(V23/1000,8)+STR(V24/1000,8)+STR(V25/1000,8);
+STR(V26/1000,8)+" | "+STR(V27/1000,8)+STR(V28/1000,8)+STR(V29/1000,8)+" | ";
+STR(V30/1000,8)+" | "+STR(V31/1000,8)+" | "+STR(V32/1000,8)+" | "
?? STR(V33/1000,8)+STR(V34/1000,8)+" | "+STR(V35/1000,8)+" | ";
+STR(V36/1000,8)+" | "+STR(V37/1000,8)+"||"+STR(V38/1000,14)+" | "
         DO LINE
         SET PRINT ON
         EJECT
         SET PRINT OFF
      ENDIF &&YY=…622

* saut pour les codes des autres faritany et retour au premier tableau.
      IF YY = 120
         STORE (YY+82) TO YY
         STORE '1' TO Boucle, Part
      ELSE
         IF YY = 210
            STORE '1' TO Boucle, Part
            STORE (YY+92) TO YY
         ELSE
            IF YY = 323
               STORE '1' TO Boucle, Part
               STORE (YY+79) TO YY
            ELSE
               IF YY = 422
                  STORE '1' TO Boucle, Part
                  STORE (YY+80) TO YY
               ELSE
                  IF YY = 519
                     STORE '1' TO Boucle, Part
                     STORE (YY+83) TO YY
                  ELSE
                     IF YY = 622
                        STORE '2' TO Part
                        STORE (YY+80) TO YY
                     ENDIF &&YY=622
                  ENDIF &&YY=519
               ENDIF &&YY=422
            ENDIF &&YY=323
         ENDIF &&YY=210
      ENDIF &&YY=120
      SET TALK OFF

* si la boucle est terminée, retour au point de départ ou retour pour les
* calculs des fivondronana d'origine suivants ou finalisation de la boucle
* principale.
      IF (YY > 622 .AND. Part = "2")
         STORE .F. TO Process
      ELSE
         STORE .T. TO Process
      ENDIF
   ELSE
      RELEASE ALL
      RETURN
   ENDIF &&Part=2
ENDIF &&Part=1
ENDDO &&YY<622
RETURN

* retour vers le programme EX_4_M. Command file.

Page précédente Début de page Page suivante