/** $VER: TableauxFC 1.2 (05.09.97)
 ** Auteur: Fabrice SABATIER
 **
 ** Commande ARexx sous GestaLivre V2.0.
 **
 ** Composition des pages d'écriture sous FinalCopy®.
 **
 **/

/*****************  Définit les variables d'environnement   ***********************/

ADDRESS COMMAND "SYS:Rexxc/rx ENV:GestaCompte.ARexxPréfs" /* exécute le script de définitions des préférences */
NOM_PORT_LIVRE   =GETCLIP('Port_Livre')
NOM_ECRAN_PUB    =GETCLIP('Ecran_Livre')
NOM_PORT_FINAL   =GETCLIP('Port_TraitementTexte')
REPERTOIRE       =GETCLIP('Chemin')

IF NOM_PORT_FINAL='FINALC.1' THEN NOM_FICHIER="Gesta:FeuillesdeStyle/Récapitulation.final"  /* nom du document sous FinalCopy® */
IF NOM_PORT_FINAL='FINALW.1' THEN NOM_FICHIER="Gesta:FeuillesdeStyle/Récapitulation.fw"     /* nom du document sous FinalWriter® */

/***********************************************************************/

OPTIONS RESULTS

NL  = '0a'x      /* caractère de fin de ligne */
Tab = '09'x      /* caractère de tabulation */

LettreMois.1='JANVIER'  /* définitions des mois à écrire en entête */
LettreMois.2='FEVRIER'
LettreMois.3='MARS'
LettreMois.4='AVRIL'
LettreMois.5='MAI'
LettreMois.6='JUIN'
LettreMois.7='JUILLET'
LettreMois.8='AOUT'
LettreMois.9='SEPTEMBRE'
LettreMois.10='OCTOBRE'
LettreMois.11='NOVEMBRE'
LettreMois.12='DECEMBRE'
Colonne.1 ="420   "     /* repère des colonnes */
Colonne.2 ="761   "
Colonne.3 ="700   "
Colonne.4 ="790   "
Colonne.5 ="590   "
Colonne.12="590S  "
Colonne.13="730   "
Colonne.14="600   "
Colonne.15="610   "
Colonne.16="611   "
Colonne.17="620   "
Colonne.18="620(1)"
Colonne.19="630   "
Colonne.20="635   "
Colonne.21="631   "
Colonne.22="633   "
Colonne.23="634   "
Colonne.24="637   "
Colonne.25="638   "
Colonne.26="641   "
Colonne.27="640   "
Colonne.28="650   "
Colonne.29="661   "
Colonne.30="662   "
Colonne.31="664   "
Colonne.32="665   "
Colonne.33="666   "
Colonne.34="669   "
Colonne.35="670   "
Colonne.36="467   "
Colonne.37="421   "
Colonne.38="200   "
Colonne.39="629   "

IF NOM_PORT_FINAL='FINALC.1' THEN Ecran='ScrToFront'
IF NOM_PORT_FINAL='FINALW.1' THEN Ecran='ScreenToFront'

SIGNAL ON SYNTAX  /* détourne les messages d'erreurs */

IF~SHOW(L,"rexxsupport.library")THEN DO   /* teste si la library est présente */
 IF~ADDLIB("rexxsupport.library",0,-30,0) THEN DO
     SAY "rexxsupport.library est introuvable !"
     EXIT
 END
END
FinalCopy_II=1
IF~SHOW(p,NOM_PORT_FINAL) THEN DO
  FinalCopy_II=0
  ADDRESS COMMAND "RUN >NIL: "||REPERTOIRE||" >NIL:"
  DO 10
     IF SHOW(p,NOM_PORT_FINAL) THEN DO
         FinalCopy_II=1
         LEAVE
         END
     CALL DELAY(100)
  END
END

IF FinalCopy_II THEN DO

/* ouvre la library rexxreqtools.library pour les messages d'erreurs */
 CALL addlib("rexxreqtools.library",0,-30,0)

 ADDRESS VALUE NOM_PORT_LIVRE /* adresse du port Arexx */

 DO I=1 TO 40           /* initialise le tableau 'Somme' à zéro */
  Somme.i=0
 END

 showyear               /* demande l'année actuelle */
 AnneeActuelle=result   /* et la mémorise dans la variable 'AnneeActuelle'*/
 showmonth              /* demande le mois actuel */
 MoisActuel=result      /* et le mémorise dans la variable 'MoisActuel' */
 numboperations         /* cherche le nombre d'opérations dans le mois */
 nbre=result            /* et le mémorise dans la variable 'nbre' */
 PremiereLigne=1
 NbreLigne=nbre
 NbredePages=TRUNC(nbre/29) /* calcule le nombre de pages */
 IF (NbredePages*29)<NbreLigne THEN NbredePages=NbredePages+1

 ADDRESS VALUE NOM_PORT_FINAL /* adresse du port ARexx de FinalCopy® */

 DO Page=1 TO NbredePages
  PremiereLigne=((Page-1)*29)+1/* reprend l'examem en ligne 30,59,88... */
  open NOM_FICHIER             /* ouvre la mise en page sous FinalCopy® */
  IF NOM_PORT_FINAL='FINALC.' THEN NOM_PORT_FINAL='FINALC.'||Page
  IF NOM_PORT_FINAL='FINALW.' THEN NOM_PORT_FINAL='FINALW.'||Page
  ADDRESS VALUE NOM_PORT_FINAL /* adresse du port ARexx de FinalCopy® */
  CALL DELAY(100)              /* attend la fin du chargement */
  CALL ComposePageG            /* rempli la page de gauche */
  CALL ComposePageD            /* rempli la page de droite */


FICHIER="GESTA:Tableaux/Tableau_" || LettreMois.MoisActuel || AnneeActuelle  /* chemin et nom du fichier sauvegardé */
Save FICHIER  

 END
END

EXIT                       /* sort */

/**********************************************/
/* Rempli chaque colonne de la page de gauche */
/**********************************************/
ComposePageG:

fontsize 6                      /* règle la taille de la fonte à 6 */
Ecran                           /* passe l'écran de FinalCopy® au premier plan */
altdown                         /* position le curseur en début de page */
ctrldown
cursor up
altup
ctrlup

type Tab||AnneeActuelle         /* saisie l'année */
DO i=1 TO 5                     /* position le curseur à droite de la page */
 type Tab
END
type "Page "||Page              /* saisie le n° de la page */
cursor down                     /* va à la ligne */
type Tab||LettreMois.MoisActuel /* saisie le mois en toutes lettres */

DO i=1 TO 8  /* positionne le curseur sur la première ligne du tableau */
 cursor down                    /* va à la ligne */
END

CALL ReportPageG                /* rempli la ligne de 'Report' */

/* examine toutes les opérations une à une */
DO i=PremiereLigne TO PremiereLigne+28
 IF i>nbre THEN LEAVE           /* dernière ligne donc sort de la boucle */
 ADDRESS VALUE NOM_PORT_LIVRE         /* adresse du port Arexx */
 operation i
 PARSE VAR result jour '/' . '/' Nature '/' Somme '/' Libelle '/' NomPoste '/' .

 ADDRESS VALUE NOM_PORT_FINAL   /* Adresse du port ARexx de FinalCopy® */
 CALL CreerLignePageG           /* appel la routine de saisie des lignes */
 cursor down                    /* va deux fois à la ligne */
 cursor down
END

CALL ToTauxPageG                /* appel la routine de saisie des totaux */

RETURN
/*--------------------------------------------*/
/* Rempli chaque ligne de la page de gauche   */
/*--------------------------------------------*/
CreerLignePageG:
 DO C=1 TO 5      /* saisie les colonnes des 'ENTREES' */
   IF NomPoste=Colonne.C THEN DO
                            type Tab||Somme
                            Somme.C=Somme.C+Somme
                           END
   ELSE type Tab
 END              /* saisie les colonnes 'Caisse banque2 banque1 */
 IF Nature="CashInflow"  THEN DO
                                 type Tab||Somme
                                 Somme.6=Somme.6+Somme
                                END
 ELSE type Tab
 IF Nature="Bank2Entry" THEN DO
                                 type Tab||Somme
                                 Somme.7=Somme.7+Somme
                                END
 ELSE type Tab
 IF Nature="Bank1Entry" THEN DO
                                 type Tab||Somme
                                 Somme.8=Somme.8+Somme
                                END
 ELSE type Tab
 type Tab||Jour||Tab||Libelle  /* saisie la date et le libellé */
 IF LEFT(Nature,6)="Entree" THEN RETURN /* passe à la ligne suivante si déjà inscrit */
 IF Nature="Bank1Outflow" THEN DO
                                 type Tab||Somme
                                 Somme.9=Somme.9+Somme
                                END
 ELSE type Tab
 IF Nature="Bank2Outflow" THEN DO
                                 type Tab||Somme
                                 Somme.10=Somme.10+Somme
                                END
 ELSE type Tab
 IF Nature="CashPayment" THEN  DO
                                 type Tab||Somme
                                 Somme.11=Somme.11+Somme
                                END
 ELSE type Tab
 DO C=12 TO 18     /* saisie les colonnes des 'SORTIES' */
   IF NomPoste=Colonne.C THEN DO
                            type Tab||Somme
                            Somme.C=Somme.C+Somme
                            RETURN
                           END
   ELSE type Tab
 END
RETURN
/*--------------------------------------------------*/
/* Rempli la ligne de 'Report' de la page de gauche */
/*--------------------------------------------------*/
ReportPageG:
DO C=1 TO 8             /* saisie les colonnes des 'ENTREES' */
   type Tab || Somme.C
END
type Tab || Tab
DO C=9 TO 18            /* saisie les colonnes des 'SORTIES' */
  type Tab || Somme.C
END
cursor down
cursor down
RETURN
/*-----------------------------------------------*/
/* Rempli la dernière ligne de la page de gauche */
/*-----------------------------------------------*/
ToTauxPageG:
altdown                          /* position le curseur en début de page */
ctrldown
cursor up
altup
ctrlup
DO L=1 TO 69                     /* position le curseur sur la dernière ligne */
 cursor down
END
DO C=1 TO 8                      /* saisie les colonnes des 'ENTREES' */
   type Tab || Somme.C
END
type Tab || Tab
DO C=9 TO 18                     /* saisie les colonnes des 'SORTIES' */
  type Tab || Somme.C
END
RETURN
/**********************************************/
/* Rempli chaque colonne de la page de droite */
/**********************************************/
ComposePageD:
 cursor down
 cursor down
 cursor down
 type "Suite page "||Page
DO i=1 TO 8                      /* positionne le curseur dans le tableau */
 cursor down
END

CALL ReportPageD                 /* rempli la ligne de 'Report' */

DO i=PremiereLigne TO PremiereLigne+28  /* passe toutes les opérations une à une */
 IF i>nbre THEN LEAVE            /* dernière ligne donc sort de la boucle */
 ADDRESS VALUE NOM_PORT_LIVRE /* adresse du port Arexx */
 operation i
 PARSE VAR result jour '/' . '/' Nature '/' Somme '/' Libelle '/' NomPoste '/' .

 ADDRESS VALUE NOM_PORT_FINAL    /* adresse du port ARexx de FinalCopy® */
 CALL CreerLignePageD            /* saisie une ligne */
 cursor down                     /* va deux fois à la ligne */
 cursor down

END
CALL TotauxPageD                 /* appel la routine de saisie des totaux */

RETURN
/*--------------------------------------------*/
/* Rempli chaque ligne de la page de droite   */
/*--------------------------------------------*/
CreerLignePageD:
DO C=19 TO 39                    /* saisie une ligne */
   IF NomPoste=Colonne.C THEN DO
                            type Tab||Somme
                            Somme.C=Somme.C+Somme   /* calcule la somme des colonnes */
                           END
   ELSE type Tab
END

IF LEFT(NomPoste,3)="DIV" THEN DO /* saisie la colonne 'DIVERS' */
                             ADDRESS VALUE NOM_PORT_LIVRE /* adresse du port Arexx */
                             numbaccounts                 /* demande le nombre de comptes */
                             NombrePos=result             /* et le mémorise */
                             DO p=1 TO NombrePos          /* passe en revue tous */
                               account p                  /* les comptes connus */
                               LibellePoste=result
                               IF NomPoste=LEFT(LibellePoste,6) THEN LEAVE
                             END
                             ADDRESS VALUE NOM_PORT_FINAL /* adresse du port ARexx de FinalCopy® */
                             PARSE VAR LibellePoste . LibellePoste /* enlève 'DIVERx ' */
                             type Tab||LEFT(LibellePoste,20) /* saisie la désignation */
                             type Tab||Somme                 /* puis le montant */
                             Somme.40=Somme.40+Somme         /* somme de la colonne */
                           END

RETURN
/*--------------------------------------------------*/
/* Rempli la ligne de 'Report' de la page de droite */
/*--------------------------------------------------*/
ReportPageD:
DO C=19 TO 39
   type Tab || Somme.C       /* renseigne les colonnes */
END
type Tab || Tab || Somme.40  /* renseigne la colonne 'DIVERS montants' */
cursor down
cursor down
RETURN
/*-----------------------------------------------*/
/* Rempli la dernière ligne de la page de droite */
/*-----------------------------------------------*/
TotauxPageD:
altdown                      /* position le curseur sur la dernière ligne */
ctrldown
cursor down
altup
ctrlup
DO C=19 TO 39
  type Tab || Somme.C        /* renseigne les colonnes */
END
type Tab || Tab || Somme.40  /* renseigne la colonne 'DIVERS montants' */
RETURN
/*********************************/
/* Traite les messages d'erreurs */
/*********************************/
SYNTAX:
IF RC=13 THEN call rtezrequest( "      Environnement serveur non trouvé !!!" || NL || NL ||,
                                "Le nom du port ARexx utilisé dans le script est : "|| NL || NL ||,
                                "-----------------------------------------------"|| NL ||,
                                "                  " || NOM_PORT_LIVRE || NL ||,
                                "-----------------------------------------------"|| NL || NL ||,
                                "Note : Pour réparer ceci, veuillez fermer le module"|| NL ||,
				"       'Livre' et modifier le type d'outil 'REXX' de"|| NL ||,
				"       l'icône, puis le relancer."|| NL || NL ||,
				"       ATTENTION aux minuscules/majuscules      ",,
				"OK", "Informations","rt_pubscrname="||NOM_ECRAN_PUB "rt_font=Gestacompte.font/8")
ELSE call rtezrequest(errortext(RC),"Vu",,"rt_pubscrname="||NOM_PORT_LIVRE "rt_font=Gestacompte.font/8")


ADDRESS VALUE NOM_PORT_FINAL
QUIT (force)

EXIT
