Documente Academic
Documente Profesional
Documente Cultură
TEMENOS PARIS
AVANT PROPOS
Ce dernier livret complète les trois autres en énonçant les sujets de travaux dirigés
sur T24 proposés aux stagiaires de différents clients. Nous avons fait un découpage
en deux parties :
Nous avons fournis le plus de commentaires possibles, mais cela ne remplace pas
les explications de l’animateur.
TCL et jQL
Programmation jBC
Les Enquiries
Les Versions
7 – Créer dans TEMPO une image du fichier CUSTOMER en faisant figurer les
descripteurs suivants :
SHORT.NAME
STREET
TOWN.COUNTRY
SECTOR
Visualiser le contenu du fichier TEMPO.
8 – Faire une édition triée des fichiers définis dans la partie data d’une base T24.
Avec le même type de consultation, sortir des étiquettes pour les fichiers.
9 – Lister les clients dont le numéro est compris entre 100100 et 200200.
Lister les comptes internes.
En consultant le fichier ACCOUNT, trier par Client et par devise et sortir le numéro
de compte, le nom du chargé de compte, la devise et le total du solde.
Le fichier des clients est FBNK.CUSTOMER
Le fichier des comptes est FBNK.ACCOUNT
1 – Créer un algorithme, qui effectu la lecture d’un fichier, sous ses 3 formes, ceci
pour mettre en évidence le tableau dynamique, le vecteur.
2 – Créer un algorithme qui donne, pour un fichier T24, le nom des champs qui sont
liés avec d’autres fichiers. Dans un deuxième temps, faire une bonne mise en page.
3 – Transformer un format séquentiel, un fichier T24.la clé sera inclus dans la ligne et
le séparateur sera le code ‘ ; ‘. Faire une vérification du format sous Excel.
8 – Réaliser une fonction utilisateur qui donne le nom jBASE d’un fichier à partir de
son nom T24.
4 - Toujours avec le même fichier, faire apparaître dans l’en-tête, en plus le nom du
client et celui de son charger de compte. On utilise une rupture sur le client
Dans un deuxième temps, on demande de faire un total sur la WORKING.BALANCE
(avec un calcul si la devise n’est pas locale)
Dans la troisième enquiry, on demande de faire une rupture par client et de sortir le
total des soldes.
Faire un en-tête donnant un titre, le numéro et le nom du client, la date du jour, et le
nom du département.
Faites apparaître le texte Total avec la devise et son total (ex: total USD)
Faites en fin d’état une ventilation sur le total des soldes en USD et des autres
devises.
– Le numéro du Compte
– Le mnémonique du compte
– Le numéro de Client
– Le mnémonique client
– Le nom du Client
–
Donner la possibilité de lancer la consultation ACCT.BAL.TODAY
Donner la possibilite de voir la fiche ACCOUNT et La fiche CUSTOMER.
1 – Créer une version qui assure la saisie du fichier CUSTOMER. Faire une mise ne
page avec un titre. Utiliser Desktop et Browser pour voir l’impacte de la saisie.
Faites apparaître les champs obligatoires en erreur.
2 – Créer une version qui effectue la saisie du fichier USER. Les valeurs par défaut
seront prévues pour faire une saisie la plus simple possible.
Exercice de Synthèse
1 - Prévoir un menu pour un nouvel utilisateur donnant accès au menu principal
standard et a un choix d’enquiry et de versions du stage.
2 - Définir les versions pour le design des enquiries et des versions dans les
abréviations de l’utilisateur.
3 - En consultant le fichier STMT.ENTRY, sortir les champs suivants:
Le numéro du compte, Le numéro du client et son mnémonique, La description
système du produit, Les montants LCY et FCY et le cumuls de ceux-ci par client et
par devise, La booking.date sous la forme JJ/MM/AAAA
On donnera à cette enquiry la possibilité de voir la fiche client, la fiche compte et la
possibilité de faire une modification du client ou du compte.
Comme il se doit, on mettra dans l’en-tête un titre, ‘fait a’ ‘le’ et le nom du Client;
Dans le cas de la saisie du client, permettre le lancement d’une enquiry BMCE avec
ventilation par LCY ou FCY
1 – Pour une Enquiry donnant le nom du client, utiliser un cryptage du nom avec une
capitalisation des mots.
2- Créer une routine qui visualisera le nombre total des comptes associés au client
dans le champ TOTAL.ACCOUNTS.
Si un nouveau CUSTOMER est saisie le calcul ne pouvant se
faire on visualisera la valeur 0 pour le champTOTAL.ACCOUNTS.
Pour chaque exercice, il faut créer, compiler générer et sortir sur écran ou dans le
fichier &HOLD&.
2 – Ajoutter une restriction pour les compte dont le numéro est en dessous de 20000.
5 – Ajoutter une en-tête avec des titres sous lignés en jouant sur les Hdr1 et Hdr2.
8 – Visualiser le nom du client et son numéro dans l’en-tête. Le rapport doit être trié
par client.
9 – Sortir la balance avec un total par client avec un libéllé ‘Total pour ‘ avec la
devise.Le total doit être définie deux fois, la première fois en visualisation de ligne et
une autre fois pour le total, même chose pour la devise, une fois sur la ligne et une
deuxième fois sur l’en-pied.
1 ls –la F.*
ls –la ????C*
ls –la ../bnk.jnl
FILE
# exercice 1
if [ $# -ne 1 ]
then
echo ‘Usage :FILE directory\n’
exit 1
fi
for i in $1/*
do
if [ -f $i ]
then file $i
else
if [ -d $i ]
then echo ‘Catalog $i’
FILE $i
fi
fi
done
SAVE
# sauvegarde
for i in *
do
if [ -f $i ]
then
if [ -f ../SAVE/$i ]
then echo ‘deja souvegarde’
else echo ‘sauvegarde en cours’
cp $i ../SAVE/$i
fi
fi
done
1 – Pointeur synonyme
3 – Liste de fichiers
T24> LIST . (le point ici indique le répertoire courant soit xxx.run)
T24> LIST . LIKE ‘’TD…’’
T24> LIST . MATCHES ‘’TD2N’’
T24> sh
$ > bidon
$ chmod 777 bidon
$ LIST . >bidon
$ pg bidon
T24> CT FBNK.SECTOR
5- Utilisation de OS.TOKEN
6– Fichiers distribués.
Pour un gros fichier, vous avez la solution du type JPF (TYPE=JPF) pour un fichier
de plus de 2 Giga octets;
La solution du distribué est un compromis.
Mais attention T24 ne connaît que ACCOUNT.
T24> CT TEMPO
Automatiquement, la clé est prise et un attribut vide est créé à chaque fin
d’enregistrement.
T24> SORT ONLY VOC WITH F1 LIKE ˝ F…˝AND WITH F2 LIKE ˝…bnk.data…˝
T24> SORT ONLY VOC WITH F1 LIKE ˝ F…˝AND WITH F2 LIKE ˝…bnk.data…˝
F1 F2 F3<cr>
Cols,Rows,Skip,Indent,Size,Spaces{,C}: 3,4,4,4,20,5,C
Label:ID
Label:F1
Label:F2
Label:F3
9- Manipulations Jql.
EXERCICE DE SYNTHESE
Il faut créer une définition dans le dictionnaire qui va concaténer le numéro du client
et la devise.
/2 ) 7 )/ . ; 5+/9 4262/ )
- 8 3 <4 94: <%
- 8 3 <4 94: <=&! %( !!
- 8 3 <4 94: "(( ! (=
<<<<<<<<<<<<<<<<<<<
<( %&& =(
1- Algorithme simple :
DIM V(400)
EQU EFE TO @(-1) ;* fonction en equivalence
CLE= ‘’
OPEN "FBNK.CUSTOMER" TO FIC ELSE ABORT
LOOP WHILE CLE NE "FIN" DO
PRINT EFE:"Introduire la cle du fichier ":
INPUT CLE
READ TD FROM FIC,CLE THEN
CRT TD ;* visualisation brutte d’un tableau dynamique
MATREAD V FROM FIC,CLE ELSE ABORT
NB=INMAT(); * on obtient le nombre de postes du Vecteur lus
FOR I=1 TO NB
CRT "V(":I:")=":V(I) ;* boucle d’édition de résultat
NEXT I
CRT "Introduire le numéro Attribut ":
INPUT ATT
READV ATTRIBUT FROM FIC,CLE,ATT ELSE ABORT
CRT ATTRIBUT
END
REPEAT
On remarque que la logique est toujours la même quelque soit le type de lecture.
L’ouverture du fichier est indispensable.
END
RETURN
*---------------------------------------------
PROCESS : *
CRT EFE
CRT MARG:STR("=",64)
CRT MARG:"|":"NOM DU DESCRIPTEUR" "L#30":"|":"NOM DU FICHIER
LIE " "R#30" :"|"
CRT MARG:STR("=",64)
READ TD FROM FSS,FIC ELSE PRINT "Erreur de lecture de ":FSS ; STOP
NBV=DCOUNT(TD<14>,VM)
FOR I=1 TO NBV
IF TD<14,I> NE "" THEN
PRINT MARG::"|":TD<1,I> "L#30"::TD<14,I> "R#30":"|"
END
NEXT I
NBV=DCOUNT(TD<27>,VM)
FOR I=1 TO NBV
IF TD<27,I> NE "" THEN
PRINT MARG::"|":TD<15,I> "L#30"::"|":TD<27,I> "R#30"::"|"
END
NEXT I
CRT MARG:STR("=",64)
*-------------------------------------
CLOSING: *
CLOSE FSS
RETURN
***************************************************
* TRANSFORMATION EN SEQUENETIEL *
***************************************************
CRT "Introduire le nom du fichier ":
INPUT NOM.FIC
OPEN NOM.FIC TO FIC ELSE STOP
OPENSEQ NOM.FIC:".TXT" TO FIC.SEQ ELSE
CREATE FIC.SEQ ELSE ABORT
END
CMD=\SELECT \:NOM.FIC:\ TO 1\
EXECUTE CMD CAPTURING LOG
READLIST LI.ITEMS FROM 1 SETTING NBE ELSE STOP
FOR I=1 TO NBE
CLE=LI.ITEMS<I>
READ TD FROM FIC,CLE ELSE CONTINUE
CHANGE FM TO \";"\ IN TD ;* modiffier 1 car par une chaine
TD=CLE:\";"\:TD:\"\ ;* positionnement de clé
WRITESEQ TD ON FIC.SEQ ELSE ABORT
NEXT I
*******************************************
* Utilisation de commandes *
*------------------------------------------------*
* TRAINING CENTER VESENAZ *
*******************************************
SUBROUTINE JB
EQU EFE TO @(-1)
START.LINE=0 ;* on de place en début d’écran
START.COL=0
*-------------------------------
PROMPT ">"
CRT EFE
LOOP
CMD=""
CRT @(START.LINE,START.COL):
INPUT CMD:
WHILE CMD NE "" DO
CRT EFE
EXECUTE CMD
REPEAT
RETURN
1 - D ou I :
2 - EXP or LOC :
3 - ICONV :
4 - LABEL :
5 - FORMAT :
6 - S or M :
TD<I>=REP
IF I=1 THEN CONTINUE
NEXT I
END
* fin de saisie
FLAG3=1
LOOP
WHILE FLAG3 DO
CRT @(60,19):EFL:
INPUT REP:
BEGIN CASE
CASE REP="FIN"
FLAG3=0
CASE REP = "F"
WRITE TD ON DICO,DESCRIPTOR
FLAG3=0
CASE REP = "A"
DELETE DICO,DESCRIPTOR
FLAG3=0
CASE REP EQ "S"
FLAG3=0
CASE REP >0 AND REP <7
PRINT @(30,REP+5):EFL:
INPUT MODIF:
TD<REP>=MODIF
CASE REP > 7
PRINT CHAR(9):
CASE OTHERWISE
FLAG3=0
END CASE
REPEAT
END ELSE
FLAG2=0
END
REPEAT
END ELSE
CRT @(4,23):EFL:FILENAME:" n'
est pas defini.... ":
INPUT WAIT,1:
END
END ELSE
FLAG1=0
END
REPEAT
!-------------------------------------!
! COMMANDE DE LISTE DES USERS SUR T24 !
!-------------------------------------!
! TRAINING T24 !
!-------------------------------------!
declarations: *
INCLUDE GLOBUS.BP I_F.ACTIVITY
DIM T(70,6),W(70,11)
EQU EFE TO @(-1)
*---------------------
MAIN: *
GOSUB INIT
GOSUB OPEN.FILE
GOSUB PROCESS
GOSUB CLOSING
STOP
*---------------------
INIT: *
MAT T=""
MAT W=""
TD=""
EXECUTE "WHERE" CAPTURING LOG
CRT EFE:LOG<1>
DEL LOG<1>
RETURN
*-------------------------
OPEN.FILE:*
OPEN "F.ACTIVITY" TO F.ACTIVITY ELSE STOP
EXECUTE "BSELECT F.ACTIVITY @ID USER.NO TO 1" CAPTURING FLOG
READLIST L.ACTIVITY FROM 1 SETTING NBACT THEN FACTIV=1 ELSE
FACTIV=0
RETURN
*-------------------------
PROCESS: *
NBL=DCOUNT(LOG,@FM)
* Remplissage du tableau image
FOR I=1 TO NBL
T(I,1)=LOG<I>[1,5]
T(I,2)=LOG<I>[9,10]
T(I,3)=LOG<I>[20,12]
T(I,4)=LOG<I>[33,7]
T(I,5)=LOG<I>[42,40]
NEXT I
* Recomposition du tableau image
K=0
FOR I=1 TO NBL
IF T(I,1) EQ SPACE(5) THEN
W(K,5)=T(I,5)
STAT=W(K,5)
IF STAT EQ "EX" THEN W(K,6)=" T24 classique" ELSE W(K,6)=" jBASE"
END ELSE
K++
W(K,1)=T(I,1)
W(K,2)=T(I,2)
W(K,3)=T(I,3)
W(K,4)=T(I,4)
W(K,5)=T(I,5)
IF W(K,2)[1,5] EQ "ntcon" THEN
W(K,6)=" Desktop"
END
IF W(K,2)[1,5] EQ "xterm" THEN
W(K,6)=" Browser"
W(K,5)=""
END
W(K,3)=T(I,3)
W(K,4)=T(I,4)
END
IF FACTIV EQ 1 THEN
FOR Z=1 TO NBACT STEP 2
PROFILE=L.ACTIVITY<1>
POSTE=L.ACTIVITY<2>
IF POSTE EQ W(K,1) THEN
Z=NBACT
READ TD FROM F.ACTIVITY,PROFILE ELSE CONTINUE
W(K,7)=PROFILE "L#8"
W(K,8)=TD<EB.ACT.COMPANY> "L#10"
W(K,9)=TD<EB.ACT.APPLICATION> "L#13"
W(K,10)=TD<EB.ACT.FUNCTION> "L#2"
W(K,11)=TD<EB.ACT.RECORD.ID> "L#12"
END
NEXT Z
END
NEXT I
FOR I=1 TO K
CRT W(I,1) "L#3":W(I,2)
"L#6":W(I,3),W(I,4),W(I,5),W(I,6),W(I,7):W(I,8):W(I,9):W(I,10):W(I,11)
NEXT I
RETURN
*-------------------------
CLOSING: *
CLOSE F.ACTIVITY
RETURN
8- Fonction donnant le nom du fichier sous jBASE à partir du nom sous T24.
9 – Compléments
Sur le résultat obtenu on voit que le solde est totalisé ligne à ligne
0 + 12000 donne 12000.00
12000 - 2458.55 donne 9541.45
La partie section est mise à HEADER pour avoir une compatibilité Desktop, Browser.
TAUX permet d’aller chercher la valeur de taux en première valeur. Les 2 oconv
permettent une expression avec deux décimal et un taux a zero vide .
Le END permet de définir une édition en fin de consultation deux ligne sous le total.
Pour que la totalisation se fasse correctement, on utilise le mécanisme des ruptures.
On fait apparaître ici le texte total par devise « Total USD» par exemple.
Suivant le code CURRNCY on va cumuler dans MT1 et MT3 les montants des soldes.
Quand la currency est USD on est en devise locale, le taux est donc égal à 1( et non vide,
comme dans le fichier FBNK.CURRENCY)
Les lignes END permettent la sortie des intitulés des sommes et les sommes ventillées.
&Domiciation permet d’obtenir sur la version princupale le titre de l’onglet avec le premier
caractère surligné ici D. Les autres onglets sont définis dans
CUSTOMER,BMCE61 et
CUSTOMER,BMCE62.
4- A partir d’une enquiry on demande l’activation d’une version en donnant des valeurs
par défaut.
SUBROUTINE NAME.KRYPT
$INSERT I_COMMON
$INSERT I_EQUATE
$INSERT I_ENQUIRY.COMMON
VALEUR=O.DATA
O.DATA=ENCRYPT(VALEUR,"",1)
RETURN
2- Utilisation d’une nouvelle ‘local ref’ et d’une routine dans une version.
Il faut faire la création de la référence locale en faisant une saisie des fichiers :
LOCAL.TABLE et LOCAL.REF.TABLE
Pour LOCAL.TABLE
Pour LOCAL.REF.TABLE
SUBROUTINE TOTCPT
$INSERT I_COMMON
$INSERT I_EQUATE
$INSERT I_F.CUSTOMER
$INSERT I_F.CUSTOMER.ACCOUNT
EQU NB.COMPTE TO 12
MAIN: *
GOSUB INIT
GOSUB OPENFILES
GOSUB PROCESS
RETURN
INIT:
FN.CUS.ACC = ' F.CUSTOMER.ACCOUNT'
F.CUS.ACC = ' '
Y.CUS.ID = ID.NEW
R.CUS.ACC = ' '
Y.CUS.ACC.ERR = ' '
RETURN
OPENFILES:
CALL OPF(FN.CUS.ACC,F.CUS.ACC)
RETURN
PROCESS:
IF ID.OLD = "" THEN ;* If it is a new customer record
R.NEW(EB.CUS.LOCAL.REF)<1,NB.COMPTE> * = 0 ;* No calculation is require
END
ELSE
CALL F.READ(FN.CUS.ACC,Y.CUS.ID,R.CUS.ACC,F.CUS.ACC,Y.CUS.ACC.ERR)
IF Y.CUS.ACC.ERR NE "" THEN
R.NEW(EB.CUS.LOCAL.REF)<1,NB.COMPTE> = 0
END
ELSE
R.NEW(EB.CUS.LOCAL.REF)<1,NB.COMPTE> = DCOUNT(R.CUS.ACC,FM)
END
END
RETURN
Créer une routine quis’exécute dès que le nom de l’enquiry est saisie et prefixer la clé par
le préfixe ‘TEM.TRG’. Ne pas appliquer cela aux enquiries débutant par ‘%’ ou se
terminant par ‘-LIST’
SUBROUTINE V.TRG.CHECK.ID.RTN
*----------------------------------------
$INSERT I_COMMON
$INSERT I_EQUATE
$INSERT I_F.ENQUIRY
*---------------------------------------
IF APPLICATION NE ' ENQUIRY'THEN RETURN
IF COMI THEN ;* analyse de la cle
IF COMI[1,1] NE ' %'AND FIELD(COMI,'-'
,2)[1,4] NE '
LIST'THEN
COMI = ' TEM.TRG.' :COMI
IF LEN(COMI) GT 30 THEN
E = "RESTRICTION DE LONGEUR DE CLE A 30 CARACTERES"
CALL ERR
MESSAGE = ' REPEAT'
V$ERROR = 1
END
END
END
RETURN
Il faut mettre a jour dans la version ENQUIRY, le champ ID.RTN avec
@V.TRG.CHECK.ID.RTN.
La saisie se fait par ENQUIRY,
SUBROUTINE V.TRG.CHECK.REC.RTN
*----------------------------------------------------------
$INSERT I_COMMON
$INSERT I_EQUATE
$INSERT I_F.CUSTOMER
IF NOT(R.NEW(EB.CUS.INPUTTER)) THEN RETURN
IF R.NEW(EB.CUS.RECORD.STATUS) THEN RETURN
THIS.OPERATOR.OK = 0
INPUTTERS = R.NEW(EB.CUS.INPUTTER)
NO.OF.INPUTTERS = DCOUNT(INPUTTERS,@VM)
IF NO.OF.INPUTTERS = 1 THEN
IF FIELD(INPUTTERS,' _' ,2) = OPERATOR THEN THIS.OPERATOR.OK = 1
END ELSE
LOOP
REMOVE INPUTTER FROM INPUTTERS SETTING MORE.INPUTTERS
WHILE INPUTTER : MORE.INPUTTERS DO
INPUT.OPERATOR = FIELD(INPUTTER,' _'
,2)
IF INPUT.OPERATOR EQ OPERATOR THEN
THIS.OPERATOR.OK = 1
INPUTTERS = ' '
END
REPEAT
END
IF NOT(THIS.OPERATOR.OK) THEN
AUTHORISER = R.NEW(EB.CUS.AUTHORISER)
IF FIELD(AUTHORISER,' _'
,2) NE OPERATOR THEN
E=' Acces Restrint'
CALL ERR
MESSAGE = ' REPEAT'
V$ERROR = 1
END
END
RETURN
SUBROUTINE V.TRG.BEFORE.AUTH.RTN
*--------------------------------------------------------
$INSERT I_COMMON
$INSERT I_EQUATE
$INSERT I_F.CUSTOMER
*--------------------------------------------------------
Y.COLUMN = 8 ;* Not of any significance in Desktop
Y.ROW = 22 ;* Not of any significance in Desktop
N1 = ' 35.1'
T1 = 'A'
INP.MSG = ' Entrer le texte du Client'
CALL INP(INP.MSG,Y.COLUMN,Y.ROW,N1,T1)
IF COMI = ''THEN
CRT "Pas de texte saisi. Utiliser un autre logiciel"
END ELSE
R.NEW(EB.CUS.TEXT)<1,-1> = COMI
END
RETURN
Exercice 1 - Dessin
Exercice 1 - Sortie
Exercice 2 - Dessin
Exercice 2 – Sortie
Exercice 3 - Dessin
'
# $ %&
Exercice 3 – Sortie
! "
Exercice 4 - Dessin
# $ %&
Exercice 4 – Sortie
!
# $ %&
Exercice 5 - Dessin
( ) '
! ") '
Exercice 5 – Sortie
% * +
Exercice 6 – Dessin
'
,
- -
Exercice 6 – Sortie
"
%" . *!
/
'
Exercice 7 – Sortie
%" 1 *!
/
2 * +
Exercice 8 – Sortie
0
* +
Exercice 9 – Dessin
(
"
2 *
2 *
Exercice 9 – Sortie
Exercice 10 – Dessin
Exercice 10 – Sortie
Exercice 11 – Dessin
Exercice 11 – Sortie
3! - 4
/
'
Exercice 12 – Dessin
% $&
!
6 7
!
!
'
# 5 '
6 78
6
'
6 8
6
'
Exercice 12 – Sortie