Вы находитесь на странице: 1из 95

INDICE

Report 6
Data . 7
Include stucture . 9
include type .. 9
Types .. 9
Constants . . 10
Clear ... 10
Refresh 11
Free . 11
Tables .. 11
o!e 1"
#o!e $ correspondin% .. 1"
&rite 1'
&rite to ... 1'
For#at . 16
Incluye . 17
(u#ary 1)
Detail 1)
*dd .. 1)
Co#pute . 19
(ubstract . "0
substract correspondin% .. "0
#ultiply correspondin% . "1
ultiply "1
di!ide correspondin% . "1
di!ide . ""
+ac, . ""
-npac, ""
Concatenate ... ""
(plit .. "'
(hift .. "'
(earch . ".
Replace ... "/
Translate . "/
0!erlay "/
Condense "6
Chec, .. "6
Detail "7
+ut "7
Re1ect .. "/
Recei!e results fro# function .. ")
Call function .. "9
essa%e . '0
Co##it 2or, . '1
Roll bac, 2or, .. '1
1
Call dialo% .. '1
(et para#eter '"
3et para#eter ... '"
Call transaction . ''
Call screen . '.
Call subscreen .. '.
4ea!e to transaction . '.
Call custo#er function . '.
Call ... '/
(elect options '/
+ara#eters . '6
(election screen ... '7
Initiali5ation . '9
*t selection6screen '9
(tar6of6selection . .0
7nd 6of6 selection .. .0
(ub#it . .0
odify screen ."
4oop at screen .. 7nd loop .. .'
4oop .. 7nd loop .'
*ppend ..
(ort .. ./
Insert .6
odify screen .)
Collect . .)
Read table . .9
Delect .. .9
(elect .. 7nd select .. /1
-pdate . /.
Fetch //
0pen cursor .. //
Close cursor . /6
3et cursor ... /6
(et cursor .. /7
Ran%es /7
Continuo .. /7
78it ... /)
(top . /)
+erfor# /)
For# .. 7nd for# ... 60
If .. 7ndif .. 6.
Case .. 7nd case ... 6.
Do .. 7nd do .. 6/
&hile .. 7nd 2hile . 6/
Describe table .. 66
I#port fro# database .. 66
2
78port to database ... 66
*t line selection . 6)
*t user co##and . 69
(croll list . 70
Read line 70
Read current line .. 71
#odify current line 71
odify 4ine 71
&indo2 7"
*t first .. 7nd at . 7"
*t last .. 7nd at . 7'
*t ne2 .. 7nd at . 7'
*t end of .. 7nd at . 7.
(u# . 7.
*t 9f%::.. 7nd at .. 7/
78tract . 7/
Field %roups .. 76
Top of pa%e ... 76
7nd of pa%e .. 76
4ea!e to screen 7)
(et screen . 7)
4ea!e screen . 79
I#port fro# #e#ory . 79
78port #e#ory . 79
78port . 79
0pen dataset . 79
Close dataset )0
Read dataset . )0
Transfer ... )1
*ppend )1
Describe field )/
Field sy#bols )6
*uthority chec, . )7
;rea, ... )7
;rea, $ point . )7
Define end of definition ))
Function end function .. ))
78ect s<l end e8ect .. ))
Insert report ... )9
Delete report . )9
Read report )9
3enerate dynpro .. 90
I#port dynpro 90
78port dynpro 90
Delete dynpro 91
(ynta8 6 chec, for dynpro ... 91
3
(ynta8 chec, . 91
3enerate report 9'
Parte I
-tili5are#os los listados =report> cuando desee#os crear un pro%ra#a e1ecutable? con o sin inter!enci@n del usuario? con o
sin salida de datos? con o sin proceso por lotes.
Declaracin de Variables
-na !ariables no es #As <ue una 5ona de #e#oria donde se !a a al#acenar la infor#aci@n de una for#a te#poral. +ara
ello (*+ utili5a la sentencia D*T*. Ta#biBn nos podre#os crear nuestro propios TC+7 de datos. 7 incluso definir
constantes cuyo !alor serA ina#o!ibles a lo lar%o del pro%ra#a. +ara borrar las !ariables pode#os utili5a la sentencia clear?
refresh y free.
C0D(T*DT(E 7F-IG=1> H*4-7 IGI.
D*T*E (IJD0=1> H*4-7 7F-IG?
IJH*R TC+7 I?
0D7D* 4IK7 ;(736&*7R(?
;73ID 0F C0+I*J;(73 0CC-R( 0 TI7( &ITL L7*D7R 4ID7.
IDC4-D7 (TR-CT-R7 ;(73.
D*T*E 7DD 0F C0+I*J;(73.
C47*RE IJH*R.
R7FR7(LE C0+I*J;(73.
Declaracin de Tablas
(*+ es un pa<uete orientado a la entrada y salida de infor#aci@n y por lo tanto es necesario disponer de unos centros de
al#acenado de dicha infor#aci@n? <ue son conocidos co#o tablas. +ara poder acceder a una de estas tablas? bastarA con
declararlas con un T*;47(? #As adelante? !ere#os co#o sacarle pro!echo.
T*;47(E ;(73? ;K+F.
Asignacin de valores
78isten !arias for#as de asi%nar los !alores? el #As sencillo es in!ocandolo con el sM#bolo INI o ta#biBn pode#os utili5ar la
sentencia 0H7 o para estructuras de datos la sentencia 0H76C0RR7(+0DDID3. 0tra for#a #o!er !alores es con la
sentencia &RIT7 ... T0 ... ? esta se utili5a cuando se tienen <ue #o!er nO#ericos tipo + o cuando se <uiere traba1ar con
iconos.
D*T*E IJH*R=1"> D7F*-4T IP0LDI?
IJH*R"=1"> D7F*-4T ID07I?
IJH*R' 4IK7 IJH*R".
&RIT7 (+*C7( T0 IJH*R'.
0H7 IJH*R T0 IJH*R'.
0H7 IJH*R" T0 IJH*R.
IJH*R" N IJH*R'.
Escritura por pantalla
*hora es el #o#enento de escribir los datos por la pantalla? para ello utili5are#os la sentencia &RIT7. +ara hacer <ue
nuestra escritura sea #As bonita? pode#os utili5ar los F0R*T o instrucciones predeter#inadas del estiloE (-*RC y
D7T*I4
D*T* C*D7D*='0>.
C*D7D* N ILola undoI.
&RIT7 C*D7D* F0R*T C040R . L0T(+0T.
&RIT7 (C6D*T- DDQQCC.
&RIT7 ;(736&R;TR C-RR7DCC 0D7D*
Operaciones
ate#Aticas
Resulta #uy co#On <ue nuestro pro%ra#a realice operaciones #ate#Aticas? para ello conta#os con las ya habituales
directi!asE
R? *DD? *DD6C0RR7(+0DDID3
D*T*E H*R01 TC+7 I?
H*R0" TC+7 I.
H*R01 N 1".
*DD H*R01 T0 H*R0". SH*R0" N 1".
o
H*R0" N H*R0" R H*R01.
4
6? (-;TR*CT? (-;TR*CT6C0RR7(+0DDID3
(-;TR*CT 10 FR0 H*R0". SH*R0" N ".
o
H*R0" N H*R0" 6 10.
T? -4TI+4C? -4TI+4C6C0RR7(+0DDID3
-4TI+4C H*R0" ;C 6. SH*R0" N 1".
o
H*R0" N H*R0" T 6.
Q? DIHID7? DIHID76C0RR7(+0DDID3
DIHID7 H*R0" ;C ". SH*R0" N 6.
o
H*R0" N H*R0" Q ".
C0+-T7
C0+-T7 H*R0" N H*R0" R = H*R0" T "> 6 6.
o
H*R0" N H*R0" R = H*R0" T "> 6 6.
+*CK y -D+*CK
D*T*E C*DTID*D TC+7 + H*4-7 1"/00?
C*D7D*=1">.
-D+*CK C*DTID* T0 C*D7D*. SC*D7D* N 00000001"/00
Cadenas
Ta#biBn dispone#os de otras directi!as para poder traba1ar con las cadenas de caracteres? de esta for#a pode#osE
C0DC*T7D*T7
D*T*E C*D7D*01="0> H*4-7 IPhonI?
C*D7D*0"="0> H*4-7 IDoeI.
C0D*T7D*T7 C*D7D*0" I?I C*D7D*01 IDT0 C*D7D*0" (7+*R*T7D ;C I I.
SC*D7D*0" N IDoe ? Phon I.
C0DD7D(7
C0DD7D(7 C*D7D*0". SSC*D7D*0" N IDoe ? PhonI.
(+4IT
(+4IT C*D7D*0" ;C I?I IDT0 C*D7D*0"? C*D7D*01. SFueda i%ual <ue al principio
(LIFT
C0DC*T7D*T7 I66:I C*D7D*01 C*D7D*0" IDT0 C*D7D*0" (7+*R*T7D ;C I I.
(LIFT C*D7D*0" 47FT D747TID3 47*DID3 I6I. SC*D7D*0" N I:Phon DoeI
(LIFT C*D7D*0" 47FT. SC*D7D*0" N IPhon DoeI
R7+4*C7
R7+4*C7 IPhonI ;C IPaneI IDT0 C*D7D*0". SC*D7D*0" N IPane DoeI
TR*D(4*T7
TR*D(4*T7 C*D7D*0" T0 -++7R C*(7. SC*D7D*0" N IP*D7 D07I.
TR*D(4*T7 C*D7D*0" -(ID3 I UI. SC*D7D*0" N IP*D7UD07I.
0H7R4*C
(7*RCL
(7*RCL IUI F0R C*D7D*0".
CL7CK (C6(-;RC N 0. S(C6FD+0( N ..
5
Ta#biBn dispone#os de herra#ientas de despla5a#inetos para situarnos dentro de nuestras cadenas. *sM pues si tene#os
una !ariable declarada pode#os acceder a la tercera posici@n #ediante la instrucci@n
!ariableR<segmento>=<desplazamiento>> donde el se%#ento serA el pri#er caracter a situarnos y despla5a#iento el
nO#ero de caracteres <ue !a#os a seleccionear.
Interactividad con el usuario
uchas !eces es necesario reco%er infor#aci@n <ue nos da el usuario y cuando de un report se trata? la Onica for#a de
hacerlo es #ediante una pantalla pre!ia a la e1ecuci@n del pro%ra#a. (i#ple#ente poniendo tres directi!as podre#os
construir pantallas lo suficiente#ente co#ple1as? pero de diseVo sencillos. +ara ello utili5are#osE
o +*R*7T7R(? para cuando s@lo necesit#os un !alor
o (747CT 60+TI0D(? para cuando necesita#os !arias selecciones? incluso ran%os.
C para ponerles adornos =#arcos? titulos? co#entarios? saltos de lMnea> utili5are#osE
o (747CTI0D 6(CR77D
ediante la se%unda opci@n? select options? pode#os hacer selecciones #Oltiples? y en la pantalla al lado de nuestro ca#po
de entrada nos saldrA un icono donde se nos abrirA otra pantalla =co#o la <ue se #uestra ba1o estas lineas> dandonos la
posibilidad para entrar dichos datos.
REPORT
Definicin: Define ciertas caracterMsticas de un pro%ra#a
Sintaxis:
R7+0RT 9no#bre: W D0 (T*DD*RD +*37 L7*DID3 X
W 4ID76(IY7 9ancho: X
W 4ID76C0-DT 9lMneas: X
W 7((*376ID 9##: X.
+or defecto el siste#a ofrece una cabecera estAndar co#puesta de una pri#era lMnea con el tMtulo del pro%ra#a =sacado de
los atributos del pro%ra#a> y un nO#ero? y una se%unda lMnea co#puesta de una lMnea hori5ontal. 7l si%nificado de las
clAusulas es la si%uienteE
D0 (T*DD*RD +*37 L7*DID3 6: 78cluye la cabecera estAndar.
4ID76(IY7 indica#os el nO#ero de colu#nas del infor#e? 9ancho: es un literal nu#Brico <ue indica ese !alor.
4ID76C0-DT 6: Indica#os el nO#ero de lMnea por pA%ina. 7l nO#ero de lMneas estA indicado por 9lMneas:. (i
utili5a#os el e!ento 7DD60F6+*37 habrA <ue indicar entre parBntesis el nO#ero de lMneas en ese e!ento a
continuaci@n de las lMneas por pA%ina.
6
7((*376ID 6: Indica la clase de #ensa1e <ue utili5are#os en el pro%ra#a. 7sta clAusula no tiene nin%On efecto
en el for#ato de la pA%ina.
R7+0RT 9pro%ra#a: W D0 (T*DD*RD +*37 L7*DID3 X
W 4ID76(IY7 9ancho: X
W 4ID76C0-DT 9lMneas: X
W 7((*376ID 9##: X
W D7FIDID3 D*T*;*(7 9base6de6datos: X.
9pro%ra#a: puede ser cual<uier co#binaci@n de hasta ) caracteres de lon%itud. 7l si%nificado de las clAusulas puede ser el
si%uienteE
D0 (T*DD*RD +*37 L7*DID3 6: (upri#i#os la cabecera estAndar del siste#a.
4ID76(IY7 6: Defini#os el nO#ero de colu#nas por pA%ina. 7l #A8i#o de colu#nas es de "// caracteres. (i no
especifica#os la clAusula? el pro%ra#a tendrA el nO#ero de colu#nas correspondiente a la pantalla actual. 7ste
!alor se %uarda en la !ariable del siste#a (C64ID(Y. 7l ca#po 9colu#na: no deber ser escrito entre co#illas. (i
la salida !a a ser por i#presora? hay <ue tener en cuenta <ue ciertas i#presoras no ad#iten #As de 1'"
caracteres.
4ID76C0-DT 6: Indica el nO#ero de filas por pA%inas? 9filas: indica el nO#ero de lMneas y 9n: el nO#ero de
lMneas para el pie de pA%ina =e!ento 7DD60F6+*37>. (i o#iti#os 9n: el e!ento 7DD60F6+*37 no tendrA efecto.
4a !ariable del siste#a (C64IDCT contiene el nO#ero actual de lMneas por pA%ina en un listado. (i la clAusula no
se especifica? el nO#ero de lMneas por pA%ina se obtiene a partir de la !ariable del siste#a (C64IDCT. 7l ca#po
9fila: no debe ser escrito entre co#illas.
7((*376ID 6: Defini#os la clase de #ensa1e <ue utili5arA el pro%ra#a. 9clase: define la clase de #ensa1e y
debe e8istir en la tabla de #ensa1es T100. 9clase: no debe ir encerrada entre co#illas.
D7FIDID3 D*T*;*(7 se utili5a e8clusi!a#ente en los pro%ra#as de definici@n de bases de datos l@%icas. 7stas
clAusula se incluye auto#Atica#ente si utili5a#os las herra#ientas estAndar de creaci@n de bases de datos
l@%ica.
7s aconse1able se%uir las re%las de no#enclatura de (*+ para ob1etos de cliente? sobretodo para los no#bres de los
pro%ra#as. -n pro%ra#a <ue no si%a la nor#a puede ser borrado accidental#ente con un up%rade del siste#a. 4os
pro%ra#as de usuario deben co#en5ar por SYS o por SCS. 7l resto de caracteres es de libre uso
DATA
Definicin : Declaraci@n de ob1etos de datos.
Sintaxis:
D*T* 9ca#po: W =9lon%itud:>X 9tipo: W 9!alor: X W 9deci#ales: X
Hariante utili5ada para declarar !ariables. 7l no#bre de la !ariable 9ca#po: no debe tener #As de '0 caracteres. (e puede
utili5ar cual<uier carActer a e8cepci@n deE SRS? S.S? S?S? SES? S=S y S>S. *de#As el no#bre no puede estar s@lo co#puesto de
dM%itos nu#Bricos? ni coincidir con los ob1etos de datos predefinidos? ni con las palabras reser!adas. Hea#os al%unas
reco#endacionesE
-tili5ar no#bres si%nificati!os? <ue no re<uieran el uso de co#entarios.
Do utili5ar el S%ui@nS ya <ue podrMa#os confundir la !ariable con un field6strin%.
-tili5ar el S%ui@ ba1oS para no#bres especiales.
Do utili5ar los caracteres especiales. -tili5ar sie#pre una letra co#o pri#er carActer del no#bre.
Con la opci@n 9tipo: se especifica el tipo de !ariable. Tene#os dos opcionesE
1. TC+7 9tipo:
". 4IK7 9ob1eto6dato:
Con la clAusula TC+7 se puede utili5ar cual<uier tipo de datos? predefinido o definido por el usuario. +ara al%unos
tipos de datos =C? +? D? y G> se puede definir la lon%itud con la clAusula 9lon%itud:. (i no se especifica lon%itud?
7
estos tipos tienen una lon%itud por defecto. (i no se especifica la clAusula 9tipo: el siste#a utili5a el tipo
alfanu#Brico C.
Con la clAusula 4IK7 asi%na#os el tipo de dato de for#a indirecta? con el tipo de dato del ob1eto de dato
especificado. 7l ob1eto de dato debe estar ya declarado? y puede ser de cual<uier tipo. * #enudo se utili5a esta
clAusula para crear !ariables <ue al#acenarAn datos de tablas e8ternas. (i se #odifican las caracterMsticas del
ca#pos de la tabla e8terna? de for#a auto#Atica? se ca#bian los atributos de la !ariable.
-na !ariante para las clAusulas TC+7 y 4IK7 es la si%uienteE TC+7 4ID7 0F 9tabla6intera: y 4IK7 4ID7 0F
9tabla6interna:. Con esta !ariante crea#os un ob1eto de dato con la estructura de lMnea de la tabla interna.
Con la opci@n 9calor: se asi%na un !alor a la !ariable? distinto al !alor inicial. 7l for#ato es el si%uienteE H*4-7 9!alor:.
9!alor: puede ser un literal? una constante o I( IDITI*4.
Con la opci@n 9deci#ales: se puede especificar el nO#ero de deci#ales para los ca#pos de tipo +. 7l for#ato es el
si%uienteE D7CI*4( 9nu#:? siendo 9nu#: el nO#ero de dM%itos despuBs del punto deci#al. 7l nO#ero #A8i#o de
deci#ales es de 1..
D*T*E ;73ID 0F 9re%istro:?
....
7DD 0F 9re%istro:.
Hariante utili5ada para declarar re%istros o field-strings. +ara declarar un field-strings se utili5a la sentencia D*T* y ser
#arca el principio y el final de la a%rupaci@n con las clAusulas ;73ID 0F y 7DD 0F. 4a opci@n 9re%istro: da no#bre al
field-string.
D*T* 9tabla: 9tipo: W &ITL L7*D7R 4ID7 X.
Hariante utili5a para declarar tablas internas.
7n la opci@n 9tipo: se puede referenciar un tipo de dato de tabla interna con la clAusula TC+7 o una tabla interna
con la clAusula 4IK7. 7l ob1eto de dato 9tabla: serA creado con la #is#a estructura <ue la referenciada en
9tipo:.
(i utili5a#os la clAusula &ITL L7*D7R 4ID7 la tabla interna se crea con el Area de traba1o 9tabla:. 7l Area de
traba1o y la tabla interna tienen el #is#o no#bre. 7n funci@n de la sentencia <ue este#os utili5ando? el siste#a
sabe si <uere#os e#plear el Area de traba1o o la tabla.
D*T* 9tabla: 9tipo: 0CC-R( 9n: W &ITL L7*D7R 4ID7 X.
7sta sentencia crea la tabla interna 9tabla: por el uso de la clAusula 0CC-R(. en la opci@n 9tipo: se especifica una
estructura. 4as lMneas de la tabla interna tendrAn la estructura referenciada en 9tipo:. 9n: tiene el #is#o si%nificado <ue
para los tipos de datos de tablas internas? !isto en la sentencia types.
(i utili5a#os la clAusula &ITL L7*D7R 4ID7 la tabla se crea con el Area de traba1o 9tabla:.
D*T*E ;73ID 0F 9tabla: 0CC-R( 9n:?
....
7DD 0F 9tabla:.
Con esta sentencia defini#os la tabla interna 9tabla:. 4os co#ponentes de la lMnea de la tabla interna se definen
entre las clAusula ;73ID 0F y 7DD 0F.
* e8cepci@n de la clAusula 0CC-R(? el resto de la sinta8is es i%ual a la definici@n de un field6strin%? !isto
anterior#ente. 7sta sentencia sie#pre crea un Area de traba1o. 9n: tiene el #is#o si%nificado <ue el !isto
anterior#ente.
Ee!plo:
D*T*E ;73ID 0F +7R(0DJTC+7?
D*7="0>?
*37 TC+7 I?
7DD 0F +7R(0DJTC+7?
+7R(0D( 4IK7 +7R(0DJTC+7 0CC-R( "0 &ITL L7*D7R 4ID7.
+7R(0D( TC+7 4ID7JTC+7 0CC-R( "0?
+7R(0D(J&* TC+7 4ID7JTC+7.
D*T* T*; TC+ TC+7 I 0CC-R( 10.
D*T* T*;J&* TC+7 4ID7 0F T*;.
D*T* D-;7R TC+7 I H*4-7 1"'?
F4*3 H*4-7 IGI?
T*;47JIDD7G 4IK7 (C6T*;IG H*4-7 ./.
Tipo de datos predefinido:
8
Tipo Descripcin "o Valor inicial
C Te8to =carActer> 91 ;lanco
D Te8to nu#Brico 91 9I00...0I
D Fecha =CCCCDD> 9) 9I00000000I
T Lora =LL((> 96 9I000000I
G Le8adeci#al 1 GI00I:Qtd:
I 7ntero 9. 90
+ Du#ero e#pa<uetado ) 0
F DO#ero punto flotante:Qtd: ) I0.0I
I#$"%DE STR%$T%RE
Definicin : 4a sentencia IDC4-D7 (TR-CT-R7 se utili5a para incluir estructuras del diccionario de datos en nuestros
pro%ra#as.
Sintaxis:
IDC4-D7 (TR-CT-R7 9estructura:.
7sta sentencia se utili5a en co#binaci@n de las sentencias D*T* o TC+7( para la definici@n de ob1etos de datos o tipos de
datos respecti!a#ente. (*+ no reco#ienda su uso? en su lu%ar? se puede utili5ar las clAusula TC+7 en las sentencia D*T*
o TC+7.
Ee!plo:
D*T*E ;73ID 0F rec.
IDC4-D7 (TR-CT-R7 subRec.
D*T*E 7DD 0F rec.
7s e<ui!alenteE
D*T* rec 4IK7 subRec
I#$"%DE T&PE
Definicin : (e utili5a para incluir en una definici@n un tipo ya definido.
Sintaxis:
IDC4-D7 TC+7 9estructura:.
Cuando defini#os una estructura esta sentencia copia en dicha estructura los ca#pos de la estructura 9estructura:
T&PES
Definicin : Declaraci@n de tipos de datos.
Sintaxis:
TC+7( 9tipo: W 9lon%itud: X 9tipo: W 9deci#ales: X.
4os parA#etros de estas sentencias son los #is#os <ue los utili5ados en la sentencia D*T*. 7l Onico parA#etro no se
utili5a es 9!alor: ya <ue la sentencia TC+7( no tiene #e#oria asociada? y por lo tanto no se le puede asi%nar nin%On !alor.
TC+7(E ;73ID 0F 9re%istro:? ... 7DD 0F 9re%istro:.
Declaraci@n de un tipo de datos con estructura de re%istro.
TC+7( 9tabla: 9tipo: 0CC-R( 9n:.
+ara crear un tipo de dato de tabla interna es necesario especificar la clAusula 0CC-R( en la sentencia TC+7(. 4as lMneas
de la tabla interna tendrAn el tipo de dato especificado en 9tipo:. 7n 9tipo: se puede especificar las clAusulas TC+7 o 4IK7.
Con la clAusula 4IK7 se puede referenciar una estructura de la base de datos. De esta for#a se puede crear tablas internas
con la #is#a estructura de tablas del diccionario de datos. 9n: especifica el nO#ero inicial de lMneas de la tabla interna. 7l
siste#a reser!a #e#oria para el nO#ero de lMneas especificado en el #o#ento en <ue escriba#os la pri#era lMnea sobre la
tabla interna. (i aVadi#os #As lMneas a la tabla interna <ue las especificadas en 9n:? el siste#a e8pande el espacio
reser!ado en #e#oria auto#Atica#ente. (i no hay suficiente espacio en #e#oria para la tabla interna? la a#pliaci@n se
reali5arA en disco =Area de pa%inaci@n>.
9
Ee!plo:
D*T*E ;73ID 0F +7R(0D?
D*7="0>?
*37 TC+7 I?
7DD 0F +7R(0D.
TC+7( TC+7J+7R(0D( 4IK7 +7R(0D 0CC-R( "0.
D*T* +7R(0D( TC+7 TC+7J+7R(0D(.
+7R(0D6D*7 N IichaelI.
+7R(0D6*37 N "/.
*++7DD +7R(0D T0 +7R(0D(.
+7R(0D6D*7 N I3abrielaI.
+7R(0D6*37 N "".
*++7DD +7R(0D T0 +7R(0D(
$O#STA#TS
Definicin : Declaraci@n de constantes? es decir? !ariables o re%istros cuyos !alores no pueden ser #odificados durante la
e1ecuci@n del pro%ra#a.
Sintaxis:
C0D(T*DT( 9constante: W =9lon%itud:> X W 9tipo: X 9!alor: W 9deci#ales: X.
9lon%itud:? 9tipo:? 9!alor: y 9deci#ales: son las #is#as opciones de la sentencia D*T*. Debe#os darnos cuenta de <ue
en esta sentencia? la opci@n 9!alor: es obli%atoria. 7l !alor inicial indicado con 9!alor: no puede ser ca#biado durante la
e1ecuci@n del pro%ra#a.
C0D(T*DT(E ;73ID 0F 9re%istro:?
....
7DD 0F 9re%istro:.
4a sinta8is de un re%istro de constantes es i%ual a la sinta8is de la sentencia D*T*? con la diferencia de <ue la clAusula
H*4-7 es obli%atoria.
Ee!plo:
C0D(T*DT( CL*R1 H*4-7 IGI.
C0D(T*DT( IDT TC+7 I H*4-7 99.
C0D(T*DT(E ;73ID 0F C0D(TJR7C?
C="> TC+7 I H*4-7 IGGI?
D="> TC+7 D H*4-7 I1"I?
G TC+7 G H*4-7 IFFI?
I TC+7 I H*4-7 99?
+ TC+7 + H*4-7 99?
F TC+7 F H*4-7 I9.9979I?
D TC+7 D H*4-7 I199/0101I?
T TC+7 T H*4-7 I"'/9/9I?
7DD 0F C0D(TJR7C
$"EAR
Definicin : Con la sentencia C47*R se puede iniciali5ar? o la lMnea de cabecera de la tabla? o el contenido de la tabla.
Sintaxis:
C47*R 9ca#po:.
7sta sentencia inicia el contenido del ob1eto de datos 9ca#po: a sus !alores iniciales por defecto. (e puede distin%uir entre
los si%uientes casosE
Tipos de datos ele#entales. 7l siste#a inicia el !alor del ca#po 9ca#po: a su !alor por defecto? no el !alor inicial asi%nado
con la sentencia D*T*? con la clAusula H*4-7. las constantes no se pueden iniciar.
Field6strin%. *plicando la sentencia C47*R sobre un field6strin%? el contenido de cada co#ponente se inicia a su !alor por
defecto.
Tablas internas. 7n una tabla interna se inicia el Area de traba1o de la tabla interna? y no su contenido.
C47*R 9tabla: Z 9tabla: WX.
10
Con la 9tabla: iniciali5a#os la lMnea de cabecera de la tabla. Con 9tabla: W X !acia#os el contenido de la tabla interna.
Ee!plo:
D*T*E T7GT=10> H*4-7 ILelloI?
D-;7R TC+7 I H*4-7 1"'./?
R0&=10> TC+7 D H*4-7 I1"'./67)90I?
;73ID 0F +4*C7R?
D*7=10> H*4-7 IPohnI?
T74=)> TC+7 D H*4-7 I0)1/.711I?
0D7C TC+7 + H*4-7 '0000?
7DD 0F +4*C7R.
...
C47*RE T7GT? D-;7R? +4*C7R.
7l contenido de los ca#pos serMan los si%uientesE
R0& N I1"'./67)90I
T7GT N I I
D-;7R N 0
+4*C7R6D*7 N I I
+4*C7R6T74 N I00000000I
+4*C7R60D7C N 0
RE'RES(
Definicin : (e utili5a para iniciali5ar una tabla? con o sin lMnea de cabecera.
Sintaxis:
R7FR7(L 9tabla:.
DespuBs de procesar el siste#a esta sentencia? la tabla interna no contiene nin%una lMnea
'REE
Definicin : (e utili5a para liberar el espacio de #e#oria <ue se reser!a despuBs de utili5ar las sentencias R7FR7(L o
C47*R.
Sintaxis:
FR77 9tabla:.
TA)"ES
Definicin : Lace <ue una tabla de la base de datos? una !ista o una estructura del diccionario de datos sea reconocida por
un pro%ra#a.
Sintaxis:
T*;47( 9ob1eto6bd:.
9ob1eto6bd: es el no#bre del ob1eto del diccionario de datos. *de#As el siste#a %enera un re%istro con la #is#a estructura
<ue la definida en el diccionario de datos <ue podrA ser utili5ada en el pro%ra#a.? por e1e#plo? para reali5ar operaciones de
lecturaQescritura sobre la base de datos. 4a secuencia y los no#bre de los co#ponentes del re%istro =co#On#ente lla#ado
Area de traba1o> de la tabla son los #is#os <ue los definidos en el ob1eto en el diccionario de datos. +ara referenciar un
co#ponente de un Area de traba1o de una tabla? !ista o estructura del diccionario de datos se utili5a la si%uiente sinta8isE
9ob1eto6bd:69co#ponente:
4a correspondencia de tipos de datos entre el diccionario de datos y el pro%ra#a es la si%uienteE
Tipo de dato en diccionario de datos Tipo de dato en progra!a
*CC+ D=6>
CL*R n C=n>
C4DT C='>
C-KC C=/>
C-RR n? #? s +==nR">Q"> D7CI*4( # W D06(I3D X
D7C n?#? s +==nR">Q"> D7CI*4( # W D06(I3D X
D*T( D
11
F4T+ F
IDT1 (in correspondencia
IDT" (in correspondencia
IDT. I
4CLR n C=n>
4R*& n G=D>
4*D3 G=1>
D-C n D=n>
+R7C G=">
F-*D n? #? s +==nR">Q"> D7CI*4( # W D06(I3D X
R*& n G=n>
-DIT n C=n>
H*RC c C=n>
*OVE
Definicin : *si%na un literal o el contenido de un ca#po fuente sobre un ca#po ob1eto se utili5a la sentencia 0H7.
Sintaxis:
0H7 9c1: W R 9o1: X W =9l1:> X T0 9c": W R 9o": X W =9l":> X.
7sta sentencia transporta el contenido del ca#po 9c1:? el cual puede se cual<uier ob1eto de dato? sobre el ca#po 9c":? el
cual debe ser una !ariable. 9c": no puede ser una constante o un literal. 7l contenido de 9c1: per#anece sin ca#bios.
0H7 9ca#po1: T0 9ca#po": +7RC7DT*37 9p: W RI3LT X.
Copia el porcenta1e 9p: i5<uierdo del ca#po 9ca#po1: sobre 9ca#po":. (in indica#os la clAusula RI3LT serA la parte
derecha del ca#po 9ca#po1: la <ue serA #o!ida al ca#po 9ca#po":.
0H7 9ca#po1: T0 9ca#po": +7RC7DT*37 9p: W RI3LT X.
9tabla1: y 9tabla": son las Areas de traba1o de las tablas internas. (i una tabla interna tiene Area de traba1o? Area y tabla
tienen el #is#o no#bre? para poder distin%uirlos se utili5an los corchetes = W X >. Con los corchetes serA el contenido de la
tabla interna el <ue se copiarA? en lu%ar del Area de traba1o. 4a sentencia 0H7 copia el contenido de la pri#era tabla
interna =o Area de traba1o> especificada sobre la se%unda tabla interna = o Area de traba1o>. 4as tablas utili5adas pueden
tener co#o co#ponentes a su !e5 tablas internas. 7l contenido de 9tabla": se sobrescribe.
(@lo se pueden copiar tablas internas sobre otras tablas internas? no sobre field6strin%s o ca#pos ele#entales. +ara poder
copiar tablas internas? las lMneas de la tablas deben ser con!ertibles =aun<ue no sean co#patibles>.
*OVE+$ORRESPO#DI#,
Definicin : (e utili5a para copiar los datos de un co#ponente field6strin% sobre otro co#ponente field6strin%.
Sintaxis:
0H76C0RR7(+0DDID3 9strin%1: T0 9strin%":.
*si%na el contenido de los co#ponentes del re%istro 9strin%1: sobre los co#ponentes del re%istro 9strin%": <ue se lla#en
i%ual. +or cada para de no#bres coincidentes el siste#a e1ecuta una sentencia 0H7? ade#As reali5a todos los tipo de
con!ersi@n necesarios de for#a separada.
Ee!plo:
D*T*E ;73ID 0F IDTJT*;47 0CC-R( 10?
&0RD=10>?
D-;7R TC+7 I?
IDD7G 4IK7 (C6IDD7G?
7DD 0F IDTJT*;47?
;73ID 0F R7C0RD?
D*7=10> H*4-7 Inot &0RDI?
D-;7R TC+7 I?
IDD7G="0>?
7DD 0F R7C0RD.
...
0H76C0RR7(+0DDID3 IDTJT*;47 T0 R7C0RD.
12
-RITE TO
Definicin : Cuando asi%na#os !alores a ob1etos de datos con la sentencia? se puede utili5ar las opciones de la sentencia
&RIT7 a e8cepci@n de -DD7R y D063*+.
Sintaxis:
&RIT7 [ 9c1: W R9o1: XW 9=l1>: X Z =9c1:>\ T0 9c":W R9o": X W 9l":> X W 9opciones: X.
4a sentencia &RIT7 T0 escribe el contenido del ca#po fuente 9c1: sobre el ca#po destino 9c":. 9c1: puede ser
cual<uier ob1eto de datos? 9c": s@lo puede ser una !ariable. 9c": no puede ser un literal o una !ariable. 7l contenido de
9c1: per#anece sin ca#bios.
4a sentencia &RIT7 T0 sie#pre co#prueba las especificaciones reali5adas en el re%istro #aestro de usuarios? por
e1e#plo? si el punto deci#al debe aparecer con co#a =?> o con punto =.>. 7l ca#po destino sie#pre se considera co#o
alfanu#Brico =tipo C>. +or esta ra5@n es con!eniente <ue el ca#po destino sea sie#pre alfanu#Brico.
Ta#biBn se puede especificar el no#bre del ca#po fuente en tie#po de e1ecuci@n? para ello? encerra#os entre parBntesis el
no#bre del ob1eto de dato <ue contiene el no#bre del ob1eto de dato <ue !a#os a utili5ar. (in e#bar%o? no se puede
especificar en tie#po de e1ecuci@n el ca#po destino. +ara ello debere#os utili5ar fild-symbols.
(e puede especificar el offset y la lon%itud? tanto del ca#po fuente co#o del ca#po destino. 7n esta sentencia? el offset y la
lon%itud del ca#po pueden ser !ariable.
(*+ reco#ienda la asi%naci@n del ca#pos con offset y lon%itud entre ca#pos no nu#Bricos. Con ca#pos nu#Bricos? el
resultado puede ser i#pre!isible.
&RIT7 [ 9ca#po: W R9o1: X T0 9tabla: W R9o": X W 9l":> X IDD7G 9Mndice:.
7l contenido de la secci@n del ca#po 9ca#po: con despla5a#iento de 9o1: posiciones y lon%itud 9l]: es sobrescrito en la
tabla interna 9tabla:? en la lMnea con Mndice 9Mndice:? en la secci@n con despla5a#iento de 9o": posiciones y lon%itud 9l":.
0bser!e#os <ue en esta sentencia no se utili5a en nin%On caso el Area de traba1o. 7sto es una !ariante de la sentencia
&RIT7 .. T0 =utili5ada para otros casos>. 4a sentencia &RIT7 .. T0 no reconoce la estructura de lMnea de la tabla interna.
(*+ reco#ienda el uso de esta sentencia s@lo si <uere#os? por e1e#plo? sustituir fla% del <ue sabe#os e8acta#ente su
posici@n. Ta#biBn puede ser utili5ada para tablas con estructuras de un Onico ca#po alfanu#Brico^ tablas con esta
estructura son i#portantes? por e1e#plo? para la %eneraci@n auto#Atica de pro%ra#as.
Ee!plo .:
D*T*E D*7=/> H*4-7 IFI74DI?
FI74D=/> H*4-7 ILarryI?
D7(T=1)> H*4-7 IRobert Pa#es (#ithI?
0FF TC+7 I?
47D TC+7 I.
0FF N 7.
47D N ).
&RIT7 =D*7> T0 D7(TR0FF=47D>.
7l ca#po D7(T !aldrA S Robert Larry ith S.
-RITE
Definicin : (aca datos por pantalla.
Sintaxis:
&RIT7 W *T XW Q XW 9posici@n: X W 9lon%itud: X 9ca#po: W 9opciones: X.
7sta sentencia saca el ca#po 9ca#po: en su for#ato estAndar por la salida acti!a. 4a salida acti!a por defecto es la
pantalla. 7l ca#po 9ca#po: puede ser cual<uier ob1eto de dato? field6sy#bol o parA#etro for#al? o te8to si#b@lico.
7n la pantalla nor#al#ente los ca#pos de salida estAn 1ustificados a la i5<uierda. -tili5ando !arias sentencias &RIT7 los
ca#pos de salida aparecen uno detrAs de otro separados por un espacio en blanco. (ino hay suficiente espacio para un
ca#po de salida en la lMnea actual? el siste#a pro!oca un salto de lMnea.
7l for#ato de los ca#pos en la pantalla depende de su tipo. 4as caracterMsticas de los ca#pos es la si%uienteE
Tipo de dato "ongitud de salida Posiciona!iento
C 4on%itud del ca#po Pustificado a la i5<uierda
D ) Pustificado a la i5<uierda
13
F "" Pustificado a la derecha
I 11 Pustificado a la derecha
D 4on%itud del ca#po Pustificado a la i5<uierda
+ "T 4on%itud del ca#po =R1> Pustificado a la derecha
T 6 Pustificado a la i5<uierda
G " T 4on%itud del ca#po Pustificado a la i5<uierda
4os ca#pos nu#Bricos F? I y + estAn 1ustificados a la derecha rellenados con espacios en blanco por la i5<uierda. (i hay
suficiente espacio se escriben los separadores de #iles. 7stos separados !an desapareciendo en funci@n del espacio
disponible en salida. (i el ca#pos es del tipo + y tiene posiciones deci#ales? la lon%itud de salida se incre#enta en 1. Con
los tipos de datos D? el for#ato interno del ca#po difiere del for#ato de salida. +ara ca#pos de tipo D? el siste#a lee el
for#ato de salida especificado en el re%istro #aestro de usuario. +osibles for#atos de salida son DDQQCC o
QDDQCCCC? donde? DD es el dMa? es el #es y CCCC es el aVo.
(e puede dar for#ato al ca#po de salida con las opciones Q? 9offset: y 9lon%itud:. Con Q for5a#os un salto de lMnea antes
de la salida. 9posici@n: es un nO#ero o una !ariable de hasta tres dM%itos de lon%itud <ue sir!e para indicar la posici@n en el
dispositi!o de salida. 9lon%itud: es un nO#ero o una !ariable de hasta tres dM%itos de lon%itud <ue sir!e para indicar la
lon%itud de salida del ca#po. (i 9posicion: y 9lon%itud: son literales nu#Bricos la clAusula es *T es opcional. (i utili5a#os
la opci@n 9posici@n:? el ca#po saldrA en esa posici@n aun<ue no haya espacio? o haya sido utili5a esa posici@n por otro
ca#po. (i 9lon%itud: es #enor <ue el ca#po de salida? si Bste es alfanu#Brico se trunca y si es nu#Brico se rellena por la
i5<uierda con un asterisco =T>.
(e pueden utili5ar distintas opciones de for#ato con 9opciones:. 4as opciones son las si%uientesE
47FT6P-(TIFI7D 6: (alida 1ustificada a la i5<uierda.
C7DT7R7D 6: (alida centrada.
RI3LT6P-(TIFI7D 6: (alida 1ustificada a la derecha.
-DD7R 9ca#po: 6: 4a salida se posiciona ba1o el ca#po 9ca#po:.
D063*+ 6: 7l espacio en blanco posterior a la salida se o#ite.
-(ID3 7DIT *(K 9#Ascara: 6: (e especifica un for#ato de salida.
-(ID3 D0 7DIT *(K 6: Desacti!a el for#ato <ue puede tener un ca#po del diccionario de datos.
D06Y7R0 6: (i un ca#po tiene ceros? se ree#pla5an por espacios en blanco. 7n ca#pos de tipo C y D? los ceros
a la i5<uierda se ree#pla5a auto#Atica#ente.
4as opciones para los ca#po nu#Bricos es la si%uienteE
D06(I3D 6: (alida sin si%no.
D7CI*4( 9deci#ales: 6: 9deci#ales: especifica el nO#ero de dM%itos despuBs del punto.
7G+0D7DT 9e8ponente: 6: 7n ca#pos de tipo F? 9e8ponente: especifica el e8ponente.
R0-DD 9r: 6: 7n ca#pos de tipo +? se #ultiplican por 10 ele!ado a a 9r:.
C-RR7DCC 9#oneda: 6: For#ato sobre la base de datos de la #oneda 9#oneda: definida en la tabla TC-RG.
-DIT 9unidad: 6: 7l nO#ero de deci#ales se fi1a sobre la base de la unidad 9unidad: especificada en la tabla
T006 para los ca#pos de tipo +.
0pciones para ca#po de tipo DD =dMa>? =es>? CCCC =*Vo>E
DDQQCC 6: 7l separador se define en el re%istro #aestro de usuario.
QDDQCC 6: 7l separador se define en el re%istro #aestro de usuario.
14
DDQQCCCC 6: 7l separador se define en el re%istro #aestro de usuario.
QDDQCCCC 6: 7l separador se define en el re%istro #aestro de usuario.
DDCC 6: (in separadores.
DDCC 6: (in separadores.
CCDD 6: (in separadores.
Ta#biBn puede utili5arse las #is#as opciones de la sentencia F0R*T anteponiendo la clAusula C040R. 7l detalle de
opciones se !erA con dicha sentencia.
Ta#biBn tene#os las si%uientes opciones de la sentencia &RIT7E
&RIT7 9sy#bol: *( (C;04 6: (i escribe el %rAfico 9sM#bolo:. +ara poder utili5ar esta opci@n es necesario
incluir en el pro%ra#a
&RIT7 9icono: *( IC0D 6: (e escribe el icono 9icono:. +ara poder utili5ar esta opci@n es necesario incluir en el
pro%ra#a la si%uiente sentenciaE IDC4-D7 9IC0D:.
&RIT7 9ca#po: *( CL7CK;0G 6: (e escribe el ca#po 9ca#po: con la caracterMstica de chec,bo8.
&RIT7 9ca#po: L0T(+0T 6: Cuando situe#os el cursor por enci#a del ca#po? Bste ca#biarA a una #ano? y
con un solo clic, acti!are#os el e!ento *T 4ID76(747CTI0D.
IDC4-D7 9(C;04: y IDC4-D7 9IC0D: puede ser sustituida por IDC4-D7 94I(T:.
Ee!plo .:
D*T*E *RKFI74D=1> TC+7 C H*4-7 IGI.
...
&RIT7 *RKFI74D *( CL7CK;0G. Schec,bo8 seleccionado
*RKFI74D N (+*C7.
&RIT7 *RKFI74D *( CL7CK;0G. Sdeseleccionado
&RIT7 *RKFI74D *( CL7CK;0G ID+-T 0FF. Sdeseleccionado? prote%ido
Ee!plo /:
IDC4-D7 94ID7:.
-4ID7 Q1=/0>.
&RIT7E Q (C6H4ID7 D063*+? 4ID7JT0+J47FTJC0RD7R *( 4ID7.
-4ID7 '=.)>.
&RIT7E Q (C6H4ID7 D063*+? (C6H4ID7 D063*+.
Ee!plo 0:
D*T*E G TC+7 + D7CI*4( ' H*4-7 I1."67I?
C TC+7 F H*4-7 I1"/../67"I.
&RIT7E QG D7CI*4( 0? SsalidaE 1
QG D7CI*4( "? SsalidaE 1."7
QG D7CI*4( /? SsalidaE 1."6700
QC D7CI*4( 1? SsalidaE 1.'7R0.
QC D7CI*4( /? SsalidaE 1."/./67R0.
QC D7CI*4( "0. SsalidaE 1."/./60000000007R0.
Ee!plo 1:
D*T* L0-R TC+7 + D7CI*4( ' H*4-7 I1."00I.
&RIT7 =6> L0-R -DIT I(TDI. S(alidaE 1?"
L0-R N I1."'0I.
&RIT7 =6> L0-R -DIT I(TDI. S(alidaE 1?"'0
Ee!plo 2:
D*T* TI7 TC+7 T H*4-7 I1/.6''I.
&RIT7 =)> TI7 -(ID3 7DIT *(K IJJEJJEJJI. S(alidaE 1/E.6E''
Ee!plo 3:
D*T*E FI74D=10> H*4-7 IabcdeI.
15
&RIT7E Q IZI D063*+? FI74D 47FT6P-(TIFI7D D063*+? IZI?
Q IZI D063*+? FI74D C7DT7R7D D063*+? IZI?
Q IZI D063*+? FI74D RI3LT6P-(TIFI7D D063*+? IZI.
T salidaE Zabcde Z
T Z abcde Z
T Z abcdeZ
Ee!plo 4:
IDC4-D7 9(C;04:.
&RIT7E Q (CJRI3LTJL*DD *( (C;04? S salida de un sM#bolo
ITip? DoteI?
(CJ47FTJL*DD *( (C;04. S salida de un sM#bolo
'OR*AT
Definicin : (e utili5a para dar for#ato a las sentencias de escritura en el dispositi!o de salida.
Sintaxis:
F0R*T 9opci@n1: W 0D Z 0FF X 9opci@n": W 0D Z 0FF X .....
Con esta opci@n !ariante pode#os dar opciones de for#ato estAtica#ente. 4as opciones de for#ato 9opci@n1:?
9opci@n": ...? tienen efecto a partir de la e1ecuci@n de esta sentencia y hasta <ue nos encontre#os una de desacti!aci@n =o
sea? <ue pon%a 0FF>. 0D y 0FF son opcionales? la opci@n por defecto es 0D.
*l%unas de las opciones #As utili5adas son las si%uientesE
Opcin Significado
C040R Color del listado.
IDT7D(IFI7D Intensidad de salida.
ID+-T Ca#pos de entrada en el listado.
L0T(+0T Define ca#pos sensibles al cursor =hotspot>.
F0R*T 9opci@n1: N 9!ar1: 9opci@n": N 9!ar": ...
Con esta !ariante da#os for#ato de #anera dinA#ica. 7l siste#a interpreta las !ariables 9!ar1:? 9!ar":? ...? co#o
nu#Bricas =tipo I>. (i el !alor de la !ariable es 0 tiene el #is#o efecto <ue 0FF. (i el contenido de la !ariable es distinto de
0? el efecto es 0D. Con la opci@n C040R? el !alor indica el color. (i a continuaci@n de una sentencia F0R*T aparece una
sentencia &RIT7 con opciones de for#ato? estas Olti#as sobreescriben las opciones de F0R*T. 4as opciones de la
sentencia F0R*T s@lo tienen efecto sobre el e!ento =blo<ue de proceso> donde se e1ecuten. Cuando se inicia un blo<ue
de proceso los !alores de todas las opciones de for#ato to#an sus !alores por defecto. 7stos !alores son 0FF para todas
las opciones #enos para la opci@n IDT7D(IFI7D.
F0R*T R7(7T.
Con esta !ariante pone#os todas las opciones de for#ato a sus !alores por defecto.
F0R*T C040R 9n: W 0D X IDT7D(IFI7D W 0D Z 0FF X IDH7R(7 W 0D Z 0FF X.
7sta !ariante se utili5a para poder colores de #anera estAtica.
F0R*T C040R N 9c: IDT7D(IFI7D N 9int: IDH7R(7 N 9in!:.
Con esta !ariante pode#os asi%nar colores de #anera dinA#ica. 4os posibles !alores de 9n: y 9c: son los si%uientesE
5n6 5c6 color %so reco!endado por SAP
0FF o
C04J;*CK3R0-DD
0
Depende del
3-I
Color de fondo
1 o C04JL7*DID3 1 *5ul Cabeceras
" o C04JD0R*4 " 3ris Cuerpo del listado
' o C04JT0T*4 ' *#arillo Totales
. o C04JK7C . Herde a5ulado Colu#nas cla!e
/ o C04J+0(ITIH7 / Herde (i%nificado positi!o
6 o C04JD73*TIH7 6 Ro1o (i%nificado ne%ati!o
7 o C04J3R0-+ 7 Hioleta Di!eles
Ee!plo:
F0R*T IDT7D(IFI7D ID+-T.
&RIT7 / IP0LDI.
F0R*T ID+-T 0FF.
&RIT7 .0 IC*R4IC040R C04J3R0-+.
4a salida en pantalla es la si%uienteE
....R....10...R...."0...R....'0...R.....0...R
16
P0LD C*R4
(alida 96666666:
intensificadoE 9666666666666666666666666666666666666666666:
colorE 9666:
&RIT7 9ca#po: *( CL7CK;0G 6: (e escribe el ca#po 9ca#po: con la caracterMstica de chec,bo8.
&RIT7 9ca#po: L0T(+0T 6: Cuando situe#os el cursor por enci#a del ca#po? Bste ca#biarA a una #ano? y
con un solo clic, acti!are#os el e!ento *T 4ID76(747CTI0D.
IDC4-D7 9(C;04: y IDC4-D7 9IC0D: puede ser sustituida por IDC4-D7 94I(T:.
Ee!plo .:
D*T*E *RKFI74D=1> TC+7 C H*4-7 IGI.
...
&RIT7 *RKFI74D *( CL7CK;0G. Schec,bo8 seleccionado
*RKFI74D N (+*C7.
&RIT7 *RKFI74D *( CL7CK;0G. Sdeseleccionado
&RIT7 *RKFI74D *( CL7CK;0G ID+-T 0FF. Sdeseleccionado? prote%ido
Ee!plo /:
IDC4-D7 94ID7:.
-4ID7 Q1=/0>.
&RIT7E Q (C6H4ID7 D063*+? 4ID7JT0+J47FTJC0RD7R *( 4ID7.
-4ID7 '=.)>.
&RIT7E Q (C6H4ID7 D063*+? (C6H4ID7 D063*+.
Ee!plo 0:
D*T*E G TC+7 + D7CI*4( ' H*4-7 I1."67I?
C TC+7 F H*4-7 I1"/../67"I.
&RIT7E QG D7CI*4( 0? SsalidaE 1
QG D7CI*4( "? SsalidaE 1."7
QG D7CI*4( /? SsalidaE 1."6700
QC D7CI*4( 1? SsalidaE 1.'7R0.
QC D7CI*4( /? SsalidaE 1."/./67R0.
QC D7CI*4( "0. SsalidaE 1."/./60000000007R0.
Ee!plo 1:
D*T* L0-R TC+7 + D7CI*4( ' H*4-7 I1."00I.
&RIT7 =6> L0-R -DIT I(TDI. S(alidaE 1?"
L0-R N I1."'0I.
&RIT7 =6> L0-R -DIT I(TDI. S(alidaE 1?"'0
Ee!plo 2:
D*T* TI7 TC+7 T H*4-7 I1/.6''I.
&RIT7 =)> TI7 -(ID3 7DIT *(K IJJEJJEJJI. S(alidaE 1/E.6E''
Ee!plo 3:
D*T*E FI74D=10> H*4-7 IabcdeI.
&RIT7E Q IZI D063*+? FI74D 47FT6P-(TIFI7D D063*+? IZI?
Q IZI D063*+? FI74D C7DT7R7D D063*+? IZI?
Q IZI D063*+? FI74D RI3LT6P-(TIFI7D D063*+? IZI.
T salidaE Zabcde Z
T Z abcde Z
T Z abcdeZ
Ee!plo 4:
IDC4-D7 9(C;04:.
&RIT7E Q (CJRI3LTJL*DD *( (C;04? S salida de un sM#bolo
ITip? DoteI?
(CJ47FTJL*DD *( (C;04. S salida de un sM#bolo
I#$"%DE
Definicin : (e utili5a para incluir parte c@di%o fuente a un pro%ra#a.
Sintaxis:
17
IDC4-D7 9include:.
7l pro%ra#a 9include: se include en el pro%ra#a donde se ha utili5ado la sentencia. 4as sentencias del ob1eto IDC4-D7
se che<uean en la co#probaci@n sintActica. 7sta sentencia se utili5a para di!idir pro%ra#a %randes en unidades #As
pe<ueVas y #ane1ables? ta#biBn se suele utili5ar para definir s@lo una !e5 las Areas de #e#oria co#On o common part.
7sta sentencia no se puede e8pandir en #As de una lMnea? ni puede co#partir lMnea con otras sentencias. (i un pro%ra#a
es tipo I =include>? s@lo podrA ser utili5ado co#o include en otros pro%ra#as. -n e1e#plo de co#o el siste#a utili5a las
includes es el pro%ra#a estAndar R(IDC400.
Ee!plo:
IDC4-D7 4(+RIT0+
S%**AR&
Definicin : (e utili5a para resaltar las lMneas de salida.
Sintaxis:
(-*RC.
DespuBs de esta sentencia? todas las sentencias de escritura tienen alta intensidad
DETAI"
Definicin : (e utili5a para <ue las lMneas de salida se realicen en intensidad nor#al.
Sintaxis:
D7T*I4
DespuBs de esta sentencia? todas las sentencias de escritura se reali5an en intensidad nor#al
ADD
Definicin : *Vade el contenido del ca#po 9n: sobre el ca#po 9#:. *de#As del for#ato bAsico? la sentencia *DD tiene
otra !ariante para la su#a de ca#pos adyacentes.
Sintaxis:
*DD 9n: T0 9#:.
*DD 9n1: TL7D 9n": -DTI4 9n5: [ 3IHID3 Z T0 \9#:.
(u#a la secuencia de ca#pos 9n1:? 9n":? ... ? 9n5:. 9#:. 9n1:? :n":? ... ? 9n5: deben ser una secuencia de ca#pos
e<uidistantes en #e#oria del #is#o tipo y lon%itud.
Con la clAusula 3IHID3 el ca#po 9#: se actuali5a con el resultado de la su#a.
Con la clAusula T0 al ca#po 9#: se le aVade el resultado de la su#a.
Ee!plo .
D*T*E D-;7R TC+7 I H*4-7 '?
(- TC+7 I H*4-7 /.
*DD D-;7R T0 (-.
Ee!plo /
D*T*E ;73ID 0F D-;7R(?
0D7 TC+7 + H*4-7 10?
T&0 TC+7 + H*4-7 "0?
TLR77 TC+7 + H*4-7 '0?
F0-R TC+7 + H*4-7 .0?
FIH7 TC+7 + H*4-7 /0?
(IG TC+7 + H*4-7 60?
7DD 0F D-;7R(?
(- TC+7 I H*4-7 1000.
*DD D-;7R(60D7 TL7D D-;7R(6T&0
-DTI4 D-;7R(6FIH7 3IHID3 (-.
Errores
18
;CDJ;*DD*T* E 7l ca#po + tiene un for#ato ;CD incorrecto.
;CDJFI74DJ0H7RF40& E 7l ca#po del resultado es de#asiado pe<ueVo.
;CDJ0H7RF40& E 0!erflo2 al hacer la operaci@n arit#Btica .
C0+-T7JIDTJ+4-(J0H7RF40& E *l aVadir se ha producido un S0!erflo2S en un entero
$O*P%TE
Definicin : +ara procesar ob1etos de datos nu#Bricos al asi%nar el !alor resultante a un ob1eto de datos? se puede utili5ar
la sentencia co#pute.
Sintaxis:
W C0+-T7 X9ca#po: N 9e8presi@n:.
4a palabra cla!e C0+-T7 es opcional =Onica sentencia <ue su palabra cla!e es opcional>. 7l resultado de la operaci@n
#ate#Atica especificada en 9e8presi@n: se asi%na al ca#po 9ca#po:. (i el resultado de la operaci@n no tiene el #is#o
tipo de dato <ue el ca#po 9ca#po:? el siste#a reali5a la con!ersi@n oportuna de for#a auto#Atica.
4os operAndos de 9e8presi@n: deben ser de tipo nu#Brico.
4os operadores !Alidos son los si%uientesE
Operador Significado Ee!plo
R (u#a resultado N ca#po1 R ca#po".
6 Diferencia resultado N ca#po1 6 ca#po".
T ultiplicaci@n resultado N ca#po1 T ca#po".
Q Di!isi@n resultado N ca#po1 Q ca#po".
DIH Di!isi@n entera resultado N ca#po1 DIH ca#po".
0D Resto de una di!isi@n entera resultado N ca#po1 0D ca#po".
TT 78ponenciaci@n resultado N ca#po1 TT ca#po".
7n lu%ar de utili5ar los operadores bAsicos R? 6? T y Q se puede utili5ar las sentencias *DD? (-;TR*CT? -4TI+4C y DIHID7
respecti!a#ente. 7stas sentencias ya las !ere#os en posteriores apartados. 4os operadores !istos anterior#ente? asM co#o
los parBntesis? son palabras cla!e del len%ua1e *;*+Q.? por ellos? deben ir con al #enos un espacio en blanco por delante y
por detrAs. 7n la di!isi@n? el di!isor no puede ser cero. (i co#bina#os !arias e8presiones? los operadores de i%ualdad y
prioridad se e!alOan de derecha a i5<uierda. 78cepto en el caso del operador de e8ponenciaci@n? <ue se e!alOa de derecha
a i5<uierda.
4a prioridad a la hora de e!aluar una e8presi@n es la si%uienteE parBntesis? funciones? e8ponenciaci@n =TT>? operadores T? Q?
0D y DIH y operadores SRS y S6S.
*de#As de los operadores !istos hasta ahora se puede utili5ar un con1unto de funciones predefinidas. 7l for#ato <ue hay
<ue utili5ar es el si%uienteE
W C0+-T7 X 9ca#po: N 9funci@n: = 9ar%u#ento: >.
4os espacios en blanco entre los parBntesis y los ar%u#entos son obli%atorios. 7l resultado de lla#ar a la funci@n
9funci@n: con el ar%u#ento 9ar%u#ento: es asi%nado a 9ca#po:. 4as funciones e8istentes pueden clasificarse
en los si%uientes %ruposE
Funciones !Alidas para todos los tipos nu#Bricos =tipo F? I y +>. 7l ar%u#ento no tiene por <uB ser nu#Brico. (i
utili5a#os otro tipo? Bste es con!ertido a un tipo nu#Brico. +or ra5@n de opti#i5aci@n es reco#endable utili5ar tipo
de datos nu#Bricos.
Funciones s@lo para el tipo F. +ara estas funciones e8isten las restricciones nor#ales l@%icas de las funciones
#ate#Aticas? por e1e#plo? la raM5 cuadrada s@lo es !Alida con nO#eros positi!os. 7l ar%u#ento no tiene por <uB
ser del tipo F. De no ser de este tipo el siste#a reali5arA la con!ersi@n necesaria de for#a auto#Atica.
Funciones !Alidas para todos los tipos nu#Bricos =F? I y +>E
Operador Significado Ee!plo
*;( Halor absoluto del ar%u#ento resultado N *;(=ca#po >.
(I3D
(i%no del ar%u#ento. 4a funci@n de !uel!e 1 si el
ar%u#ento es positi!o? 0 si el ar%u#ento es 0 y 61
si es ne%ati!o.
resultado N (I3D=ca#po >.
C7I4 Halor entero inferior al ar%u#ento resultado N C7I4=ca#po >.
F400R Halor entero superior al ar%u#ento resultado N F400R=ca#po >.
TR-DC +arte entera del ar%u#ento resultado N TR-DC=ca#po1 >.
19
FR*C +arte fraccionaria del ar%u#ento resultado N FR*C=ca#po1 >.
Funciones s@lo para el tipo FE
Operador Significado Ee!plo
*C0( *rcocoseno resultado N *C0(=ca#po >.
*(ID *rcoseno resultado N *(ID=ca#po >.
*T*D *rcotan%ente resultado N *T*D=ca#po >.
C0( Coseno resultado N C0(=ca#po >.
(ID (eno resultado N (IDca#po1 >.
T*D Tan%ente resultado N T*D=ca#po1 >.
C0(L Coseno hiperb@lico resultado N C0(Lca#po1 >.
(IDL (eno hiperb@lico resultado N (IDLca#po1 >.
T*DL Tan%ente hiperb@lico resultado N T*DL=ca#po1 >.
7G+ 78ponenciaci@n resultado N 7G+=ca#po1 >.
403 4o%arit#o natural =base e> resultado N 403=ca#po1 >.
40310 4o%arit#o base 10 resultado N 40310=ca#po1 >.
(FRT RaM5 cuadrada resultado N (FRT=ca#po1 >.
(i el atributo Aritmtica en coma fija no estA #arcado? los ca#pos e#pa<uetados =tipo +> son enteros sin punto deci#al. 7l
parA#etro D7CI*4( de la sentencia D*T* s@lo es efecti!o para la sentencia &RIT7. +or esta ra5@n (*+ reco#ienda <ue
sie#pre <ue traba1e#os con ca#pos de tipo + #ar<ue#os el atributo Aritmtica en coma fija. Cuando tene#os #arcado
este atributo? no s@lo tiene efecto con la sentencia &RIT7? sino <ue ta#biBn to#a rele!ancia en las operaciones nu#Bricas.
4os resultados inter#edios se %uardan con '1 posiciones si%nificati!as antes y despuBs del punto deci#al.
4os tipos de datos fecha y hora no son tipo nu#Bricos pero se pueden reali5ar operaciones arit#Bticas se suele usar el
offset de los ca#pos.
78iste una funci@n <ue opera con los ca#pos alfanu#BricosE
Operador Significado Ee!plo
(TR47D
Deter#ina la lon%itud hasta el Olti#o carActer
distinto del espacio en blanco.
resultado N (TR47D=ca#po
S%)TRA$T
Definicin : Resta el contenido de dos ca#pos.
Sintaxis:
(-;TR*CT 9n: FR0 9#:
Resta el contenido de dos estructuras.
Ee!plo:
D*T* D-;7R TC+7 + H*4-7 '?
R7(-4T TC+7 I H*4-7 7.
(-;TR*CT D-;7R FR0 R7(-4T.
R7(-4T !aldrA . y D-;7R !aldrA '.
S%)TRA$T+$ORRESPO#DI#,
Definicin : (ubstrae el contenido de ca#pos de una estructura.
Sintaxis:
(-;TR*CT6C0RR7(+0DDID3 9n: FR0 9#:.
(ubstrae el contenido de los co#ponentes del re%istro 9n: del re%istro 9#:? para a<uellos co#ponentes <ue se lla#en
i%ual.
Ee!plo:
D*T*E ;73ID 0F +7R(0D?
D*7="0> H*4-7 I+aulI?
0D7C TC+7 I H*4-7 /000?
7DD 0F +7R(0D?
;73ID 0F +-RCL*(7( 0CC-R( 10?
20
+R0D-CT=10>?
0D7C TC+7 I?
7DD 0F +-RCL*(7(.
+-RCL*(7(6+R0D-CT N ITableI.
+-RCL*(7(60D7C N 100.
*++7DD +-RCL*(7(.
+-RCL*(7(6+R0D-CT N IChairI.
+-RCL*(7(60D7C N 70.
*++7DD +-RCL*(7(.
400+ *T +-RCL*(7(.
(-;TR*CT6C0RR7(+0DDID3 +-RCL*(7( FR0 +7R(0D.
7DD400+.
7l ca#po +7R(0D60D7C !aldrA .)'0
*%"TIP"&+$ORRESPO#DI#,
Definicin : ultiplica el contenido de los co#ponentes del re%istro 9#: y del re%istro 9n:.
Sintaxis:
-4TI+4C6C0RR7(+0DDID3 9#: ;C 9n:.
ultiplica el contenido de los ca#pos 9#: y 9n:? para a<uellos co#ponentes <ue se lla#en i%ual. 7l resultado actuali5a los
co#ponentes del re%istro 9#:.
Ee!plo:
D*T*E ;73ID 0F 0D7C?
H*4-7JID="0> H*4-7 Iarcos %er#anosI.
-(* TC+7 I H*4-7 100?
FR3 TC+7 I H*4-7 "00?
*-T TC+7 I H*4-7 '00?
7DD 0F 0D7C?
;73ID 0F CL*D37?
D7(CRI+TI0D='0>
H*4-7 ID a #oneda del paMsI.
-(* TC+7 F H*4-7 I0.6667I?
FR3 TC+7 F H*4-7 I1.0I?
*-T TC+7 F H*4-7 I7.0I?
7DD 0F CL*D37.
-4TI+4C6C0RR7(+0DDID3 0D7C ;C CL*D37.
0D7C6H*4-7JID N Ioneda del paMsI.
*%"TIP"&
Definicin : ultiplica el contenido de ca#pos.
Sintaxis:
-4TI+4C 9#: ;C 9n:.
ultiplica el contenido de los ca#pos 9#: y 9n:? de1ando el resultado sobre el ca#po 9#:.
Ee!plo:
D*T*E D*C(J+7RJC7*R TC+7 + H*4-7 '6/?
L0-R(J+7RJD*C TC+7 F H*4-7 I"..0I?
ID-T7(J+7RJC7*R TC+7 I H*4-7 1.
-4TI+4C ID-T7(J+7RJC7*R ;C D*C(J+7RJC7*R.
-4TI+4C ID-T7(J+7RJC7*R ;C L0-R(J+7RJD*C.
-4TI+4C ID-T7(J+7RJC7*R ;C 60.
ID-T7(J+7RJC7*R contiene /"/600.
DIVIDE+$ORRESPO#DI#,
Definicin : Hariante de DIHID7 <ue s@lo di!idirA a<uellos co#ponentes <ue se lla#en i%ual.
Sintaxis:
21
DIHID76C0RR7(+0DDID3 9#: ;C 9n:.
Di!ide el contenido de los co#ponentes del re%istro 9#: por los del re%istro 9n:? para a<uellos <ue se lla#en i%ual. 7l
resultado per#anece en los co#ponentes del re%istro 9#:.
Ee!plo:
D*T*E ;73ID 0F 0D7C?
H*4-7JID="0> H*4-7 Iarcos ale#anesI.
-(* TC+7 I H*4-7 100?
FR3 TC+7 I H*4-7 "00?
*-T TC+7 I H*4-7 '00?
7DD 0F 0D7C?
;73ID 0F CL*D37?
D7(CRI+TI0D='0>
H*4-7 ID en #oneda nacionalI.
-(* TC+7 F H*4-7 I1./I?
FR3 TC+7 F H*4-7 I1.0I?
*-T TC+7 F H*4-7 I0.1.")6I?
7DD 0F CL*D37.
DIHID76C0RR7(+0DDID3 0D7C ;C CL*D37.
0D7C6H*4-7JID N Ioneda nacionalI.
DIVIDE
Definicin : 0peraci@n #ate#Atica para di!idir dos ca#pos.
Sintaxis:
DIHID7 9#: ;C 9n:.
Di!ide el contenido del ca#po 9#: por 9n:? de1ando el resultado en 9#:.
PA$7
Definicin : 7#pa<ueta el contenido de un ca#po sobre otro.
Sintaxis:
+*CK 9ca#po1: T0 9ca#po":.
7#pa<ueta el ca#po 9ca#po1: en el ca#po 9ca#po":. 4a operaci@n contraria ser harMa con la sentencia -D+*CK.
Ee!plo:
D*T* CJFI74D=.> TC+7 C H*4-7 I010'I?
+JFI74D="> TC+7 +.
+*CK CJFI74D T0 +JFI74D.
CJFI74DE CI010'I 66: +JFI74DE +I10'CI
%#PA$7
Definicin : Dese#pa<ueta el contenido de un ca#po sobre otro.
Sintaxis:
-D+*CK 9ca#po1: T0 9ca#po":.
Dese#pa<ueta el ca#po 9ca#po1: en el ca#po 9ca#po":. 7s la operaci@n contraria a la sentencia +*CK.
Ee!plo:
D*T*E +JFI74D="> TC+7 + H*4-7 10'?
CJFI74D=.> TC+7 C.
-D+*CK +JFI74D T0 CJFI74D.
+JFI74DE +I10'CI 6: CJFI74DE CI010'I.
$O#$ATE#ATE
Definicin : (e utili5a para concatenar !arios ca#pos alfanu#Bricos en uso solo.
Sintaxis:
22
C0DC*T7D*T7 9c1: ... 9cn: IDT0 9ca#po: W (7+*R*T7D ;C 9s: X.
7sta sentencia concatena los ca#pos ca#pos 9c1: ... 9cn: en el ca#po 9ca#po:. 4os espacios en blanco se i%noran
durante la operaci@n.
Con la clAusula (7+*R*T7D ;C se puede especificar un ca#po alfanu#Brico =el ca#po 9s:> <ue serA utili5ado co#o
separador entre los ca#pos 9c1: ... 9cn:. (i el resultado de la concatenaci@n entra en el ca#po 9ca#po:? (C6(-;RC N 0?
si por el contrario? es necesario el trunca#iento? (C6(-;RC N ..
Ee!plo .:
D*T*E 0D7=10> H*4-7 II!anI?
T&0='> H*4-7 I Rodri%oI?
TLR77=10> H*4-7 I ;aVosI?
D*7="0>.
C0DC*T7D*T7 0D7 T&0 TLR77 IDT0 D*7.
4a !ariable D*7 !aldrMaE Ivan Rodrigo Baos
Ee!plo /:
D*T*E 0D7=10> H*4-7 II!anI?
T&0='> H*4-7 IRodri%oI?
TLR77=10> H*4-7 I;aVosI?
D*7="0>?
(7+*R*T0R=.> H*4-7 I3*-((I.
C0DC*T7D*T7 (+*C7 0D7 T&0 TLR77 IDT0 D*7
(7+*R*T7D ;C (+*C7.
4a !ariable D*7 !aldrMaE IvanGA!!RodrigoGA! y (C6(-;RC !aldrMa ..
SP"IT
Definicin : Di!ide un ca#po alfanu#Brico en !arios ca#pos? %racias a al%On separador.
Sintaxis:
(+4IT 9ca#po: *T 9deli#itador: IDT0 9c1: ... 9cn:.
7sta sentencia utili5a el ca#po indicado en 9deli#itador: para separar los ca#pos 9c1: ... 9cn: el contenido del ca#po
9ca#po:. (i no hay especificado los suficientes ca#pos para poder separar todo el contenido del ca#po 9ca#po:? sobre el
Olti#o se rellena el resto del ca#po 9ca#po:. (i todos los ca#pos destino son lo suficiente#ente %randes co#o para
al#acenar las partes de 9ca#po:? (C6(-;RC !ale 0. 7n caso contrario (C6(-;RC !ale ..
Ta#biBn se puede situar las partes del ca#po <ue se <uiere separar en una tabla interna con el si%uiente for#atoE
(+4IT 9ca#po: *T 9deli#itador: IDT0 T*;47 9tabla:.
+or cada parte del ca#po 9ca#po el siste#a aVade una nue!a lMnea en la tabla interna 9tabla:.
Ee!plo .:
D*T*E D*7(='0> H*4-7 ICharly? Pohn? +eterI?
0D7=10>?
T&0=10>?
D74IIT7R="> H*4-7 I?I.
(+4IT D*7( *T D74IIT7R IDT0 0D7 T&0.
0D7 !aldrA SCharlyS y T&0 tendrA el !alor SPohn? +eteS.
Ee!plo /:
D*T*E ;73ID 0F IT*; 0CC-R( 10?
&0RD="0>?
7DD 0F IT*;.
(+4IT I(T0+ T2o (T0+ Three (T0+ I *T I(T0+I IDT0 T*;47 IT*;.
4a tabla interna tendrA tres lMneas? la pri#era en blanco? la se%unda contiene ST2oS y la tercera contiene SThreeS.
S(I'T
Definicin : (e utili5a para despla5ar el contenido de un ca#po alfanu#Brico. Dispone#os de distintas !ariantes en funci@n
del #odo de despla5a#iento.
Sintaxis:
23
(LIFT 9ca#po: W ;C 9n: +4*C7( X W [ 47FT Z RI3LT Z CIRC-4*R \ X.
Despla5a el contenido del ca#po 9ca#po: 9n: posiciones.7l si%nificado de las clAusulas es el si%uienteE
;C 6: (i se o#ite? el despla5a#iento es de una posici@n. (i 9n: es cero o ne%ati!o no se reali5a nin%On
despla5a#iento. (i 9n: e8cede de la lon%itud del ca#po 9ca#po:? el despla5a#iento se rellena con espacios en
blanco. 9n: puede ser una !ariable.
47FT 6: el despla5a#iento se reali5a hacia la i5<uierda? con relleno de espacios en blanco por la derecha.
RI3LT 6: 7l despla5a#iento se reali5a hacia la derecha? con relleno de espacios en blanco por la i5<uierda.
CIRC-4*R 6: 7l despla5a#iento se reali5a hacMa la i5<uierda. 4os caracteres <ue desaparecen por la i5<uierda
aparecen por la derecha.
(LIFT 9ca#po: -+ T0 9strin%: W [ 47FT Z RI3LT Z CIRC-4*R \ X.
Reali5a un despla5a#iento del contenido de un ca#po hasta un strin% dado. 7l siste#a busca el strin% 9strin%: en el ca#po
9ca#po:. (i el strin% estA contenido en el ca#po 9ca#po: se reali5arA el despla5a#iento hasta alcan5ar el strin%. De no
contener 9ca#po: el strin% 9strin%: no se reali5arA nin%On despla5a#iento. 9strin%: puede ser una !ariable. 7l #odo de
despla5a#iento es el #is#o <ue en la !ariante anterior. (i el strin% se encuentra en el ca#po 9ca#po:? (C6(-;RC es 0?
en caso contrario es ..
(LIFT 9ca#po: 47FT D747TID3 47*DID3 9strin%:.
(LIFT 9ca#po: RI3LT D747TID3 47*DID3 9strin%:.
Reali5a un despla5a#iento hasta <ue el pri#er o Olti#o carActer cu#pla cierto criterio. 7sta sentencia despla5a el contenido
del ca#po 9ca#po: hasta <ue el pri#er carActer de la i5<uierda =pri#era sentencia> o el Olti#o carActer de la derecha
=se%unda sentencia> satisface cierta condici@n. 7l despla5a#iento se rellena con espacios en blanco. 9strin%: puede ser
una !ariable.
Ee!plo .:
D*T* *4+L*;7T=10> H*4-7 I*;CD7F3LIPI.
(LIFT *4+L*;7T CIRC-4*R.
*4+L*;7T contendrMa I;CD7F3LIP*I .
Ee!plo /:
D*T* *4+L*;7T=10> H*4-7 I*;CD7F3LIPI?
FIH7 TC+7 I H*4-7 /.
(LIFT *4+L*;7T ;C FIH7 +4*C7(.
*4+L*;7T contendrMa IF3LIPI .
Ee!plo 0:
D*T* *4+L*;7T=10> H*4-7 I*;CD7F3LIPI?
TLR77='> H*4-7 ID7FI?
F0-R=.> H*4-7 ID7F I.
(LIFT *4+L*;7T -+ T0 TLR77 CIRC-4*R.
*4+L*;7T contendrMa ID7F3LIP*;CI .
SEAR$(
Definicin : (e utili5a para buscar una cadena de caracteres en un ca#po alfanO#erico.
Sintaxis:
(7*RCL 9ca#po: F0R 9str: [ *;R7HI*T7D Z (T*RTID3 *T 9n1: Z 7DDID3 *T 9n": Z *DD *RK \.
7sta sentencia busca en el ca#po 9ca#po: la secuenca de caracteres 9str:. (i se encuentra? la !ariable del siste#a (C6
(-;RC !ale 0 y (C6FD+0( to#a el !alor del offset del strin% encontrado. 7n caso contrario? (C6(-;RC !ale .. 7l strin%
9str: puede contener caracteres con cierto si%nificado particular.
Operador Significado
9strin%: Cual<uier sentencia de caracteres. 4os espacios en blanco se i%noran.
.9strin%:. Cual<uier sentencia de caracteres. 4os espacios en blanco no se i%noran.
T9strin%: Cual<uier palabra ter#inada con el strin% especificado.
9strin%:T Cual<uier palabra <ue e#piece con el strin% especificado.
24
*;R7HI*T7D 6: 4os caracteres de 9strin%: a buscar en 9ca#po: pueden estar separados por otros caracteres?
pero el con1unto de caracteres deben for#ar un sola palabra.
(T*RTID3 *T 6: 4a bOs<ueda en el ca#po 9ca#po: se reali5a a partir de la posici@n 9n1:. 7l resultado en (C6
FD+0( es relati!o a la posici@n 9n1: y no al principio del ca#po 9ca#po:.
7DDID3 *T 6: 4i#ita#os la bOs<ueda hasta la posici@n 9n":.
*DD *RK 6: (i la bOs<ueda es satisfactoria? todos los caracteres del strin% de bOs<ueda se con!ierten en
#ayOsculas.
REP"A$E
Definicin : Ree#pla5a cierta parte de un strin% por otro strin%.
Sintaxis:
R7+4*C7 9strin%1: &ITL 9strin%": IDT0 9ca#po: W 47D3TL 9lon%itud: X.
7l siste#a busca en el ca#po 9ca#po: la pri#era ocurrencia del strin% 9strin%1: para sustituirla por el strin% 9strin%":.
Con la clAusula 47D3TL s@lo se sustituirA los caracteres indicados en 9lon%itud:. (i no se especifica la clAusula 47D3TL
la sustituici@n del strin% 9strin%1: serA co#pleta. (i el strin% 9strin%1: se encuentra en el ca#po 9ca#po: es sustituido por
9strin%": y la !ariable del siste#a (C6(-;RC to#a el !alor 0. 7n caso contrario? no se ree#pla5a nada y (C6(-;RC to#a
el !alor .. 9strin%1:? 9strin%": y 9lon%itud: pueden ser !ariables.
Ee!plo:
D*T* FI74D=10>.
0H7 I*;C;I T0 FI74D.
R7+4*C7 I;I &ITL Istrin%I IDT0 FI74D.
De!uel!eE
FI74D N I*strin%C;I? (C6(-;RC N 0
TRA#S"ATE
Definicin : (e utili5a para con!ertir caracteres de #ayOscula a #inOscula o !ice!ersa? o para reali5ar sustituciones de
caracteres a tra!Bs de ciertas re%las.
Sintaxis:
TR*D(4*T7 9ca#po: T0 [ -++7R Z 40&7 \ C*(7.
Con la opci@n -++7R? las letras #inOsculas de 9ca#po: se con!ierten en #ayOsculas. C con la opci@n 40&7R las letras
#ayOsculas se con!ierten en #inOsculas.
+ara utili5ar re%las de con!ersi@n se utili5a la si%uiente sinta8is.
TR*D(4*T7 9ca#po: -(ID3 9re%la:.
7sta sentencia ree#pla5a todos los caracteres de 9ca#po: <ue cu#plan la re%la de sustituci@n 9re%la:. 4a re%la de
sustituci@n contiene pares de letras? la pri#era de ellas indica el carActer a sustituir? la se%unda indica el carActer de
sustituci@n. 9re%la: puede ser una !ariable.
Ee!plo:
D*T*E 47TT7R(=10> H*4-7 IabcGI?
CL*D37=6> H*4-7 IaG;CI.
TR*D(4*T7 47TT7R( -(ID3 CL*D37.
7l ca#po 47TT7R( contendrA IGbcGI
OVER"A&
Definicin : (e utili5a para sobrescribir un ca#po alfanu#Brico con otro ca#po.
Sintaxis:
0H7R4*C 9ca#po1: &ITL 9ca#po": W 0D4C 9strin%: X.
7sta sentencia sobrescribe todas las posiciones del ca#po 9ca#po1: <ue conten%an las letras de 9strin%: con el contenido
del ca#po 9ca#po":. 9ca#po": per#anece sin ca#bios.
25
(i o#iti#os la clAusula 0D4C? s@lo las posiciones con espacios en blanco serAn sobrescritas. (i al #enos una posici@n del
ca#po 9ca#po1: es sustituida? (C6(-;RC serA 0. 7n caso contrario serA .. (i 9ca#po1: es superior a la lon%itud <ue
9ca#po":? s@lo los caracteres correspondientes a la lon%itud de 9ca#po": podrAn ser actuali5ados en 9ca#po1:.
Ee!plo .:
D*T*E &0RK="0> H*4-7 ITh t h s ch n% d.I?
L74+="0> H*4-7 I3rab a patternI.
0H7R4*C &0RK &ITL L74+.
4a !ariable &0RK !ale IThat has chan%ed.I
Ee!plo /:
D*T*E 0D7=16>? T&0=16>.
0D7 N I6666TTTTRRRR....I.
T&0 N I6TR.6TR.6TR.6TR.I.
0H7R4*C 0D7 &ITL T&0 0D4C I.I.
0H7R4*C T&0 &ITL 0D7 0D4C I.RI.
0H7R4*C 0D7 &ITL T&0 0D4C IRTI.
7l ca#po 0D7 contiene I66666TTT6TRR6TR.I y el ca#po T&0 contiene I6T666TTT6TRR6TR.I .
$O#DE#SE
Definicin : +ara borrar espacios en blanco superfluos en ca#pos alfanu#Bricos.
Sintaxis:
C0DD7D(7 9ca#po: W D063*+( X.
;orra cual<uier secuencia de espacios en blanco? de1ando s@lo uno <ue e8ista entre palabras e8istentes en 9ca#po:. 4os
espacios en blanco por la i5<uierda ta#biBn desaparecen.
Con la clAusula D063*+( todos los espacios en blanco desaparecen.
Ee!plo .:
D*T*E ;73ID 0F D*7?
TIT47=)>? H*4-7 IDr.I?
FIR(TJD*7=10>? H*4-7 IichaelI?
(-RD*7=10>? H*4-7 ILof#annI?
7DD 0F D*7.
C0DD7D(7 D*7.
&RIT7 D*7.
4a salida en pantalla serMaE "r# $ic%ael &ofmann
Ee!plo /:
D*T*E ;73ID 0F D*7?
TIT47=)>? H*4-7 IDr.I?
FIR(TJD*7=10>? H*4-7 IichaelI?
(-RD*7=10>? H*4-7 ILof#annI?
7DD 0F D*7.
C0DD7D(7 D*7 D063*+(.
4a !ariable D*7 !aldrMaE "r#$ic%ael&ofmann
$(E$7
Definicin : +er#ite ter#inar con la e1ecuci@n de un blo<ue de proceso de for#a condicional. +ara ter#inar el paso de un
bucle de for#a condicional se utili5a la sentencia CL7CK.
Sintaxis:
CL7CK 9condici@n:.
CL7CK [9criterio6seleccion: Z (747CT60+TI0D(\
Con la pri#era !ariante de la sentencia CL7CK utili5a#os una condici@n. (i 9condicion: resulta F*4(7? el siste#a
abandona el actual blo<ue de proceso para continuar con la pr@8i#a ocurrencia del #is#o e!ento =para el e!ento 37T> o el
si%uiente e!ento. 9condici@n: puede ser cual<uier e8presi@n l@%ica.
4a si%uiente !ariante de la sentencia CL7CK se utili5a con1unta#ente con el e!ento 37T. 9criterio6selecci@n: puede ser un
criterio de selecci@n con la sentencia (747CT60+TI0D( o con la sentencia R*D37(. 7n la definici@n se asocia un criterio
de selecci@n a un ca#po de una tabla de la base de datos. 7n el e!ento 37T con la tabla de la base de datos relacionada
se puede utili5ar esta !ariante. 7l ca#po debe cu#plir las condiciones del criterio de selecci@n.
26
Con la clAusula (747CT60+TI0D( el siste#a co#prueba todos los criterios de selecci@n definidos para ca#pos
de la tabla referenciada en el e!ento 37T.
CL7CK 9condici@n:.
(i la condici@n resulta F*4(7? el siste#a de1a de procesar el resto de sentencias del blo<ue para pasar al si%uiente paso
del bucle. 9condici@n: es cual<uier e8presi@n l@%ica.
CL7CK [ 9criterio: Z (747CT60+TI0D( \.
9criterio: es un criterio de selecci@n definido con la sentencia (747CT60+TI0D(. 4a sentencia CL7CK co#prueba si el
dato leMdo con la sentencia 37T cu#ple las condiciones del criterio de selecci@n.
Con la clAusula (747CT60+TI0D( la sentencia CL7CK co#prueba todos los criterios de selecci@n definidos
para la tabla leMda con CL7CK.
4a sentencia CL7CK ter#ina una subrutina de for#a condicional.
CL7CK 9condici@n:.
(i la condici@n es F*4(7? el siste#a abandona la subrutina. 7l pro%ra#a continOa la e1ecuci@n en el punto donde se reali5@
la lla#ada.
,ET
Definicin : Identifica un bucle de lectura.
9Sintaxis:
37T 9tabla: W FI74D( 9lista: X
37T 9tabla: 4*T7.
7ste e!ento es el #As i#portante en los pro%ra#as de infor#es <ue utilicen bases de datos l@%icas. +or cada e1ecuci@n de
la sentencia 37T se reali5a una lla#ada al pro%ra#a de bases de datos l@%ica =+;D4>? a su correspondiente sentencia
+-T. 7n el +;D4 se reali5a la lectura de la base de datos? para pasar la infor#aci@n al pro%ra#a principal sobre el Area de
traba1o de la tabla referenciada 9tabla:.
(in la clAusula FI74D(? el +;D4 de!uel!e todos los ca#pos de la tabla referenciada. Con la clAusula FI74D( s@lo serAn
de!ueltos los ca#pos especificados en 9lista:.
Ee!plo:
T*;47(E (F4I3LT? (;00K.
D*T* (0K7R( TC+7 I.
37T (F4I3LT.
-4ID7.
&RIT7E Q (F4I3LT6(7*T(*G?
(F4I3LT6(7*T(0CC.
(0K7R( N 0.
37T (;00K FI74D( (0K7R.
CL7CK (;00K6(0K7R 9: (+*C7.
*DD 1 T0 (0K7R(.
37T (F4I3LT 4*T7 FI74D( (7*T(*G (7*T(0CC.
&RIT7 (0K7R(.
P%T
Definicin : 7s una sentencia nue!a <ue aparece en el pro%ra#a de las ;D4. 7sta sentencia per#ite interactuar entre los
dos pro%ra#as.
Sintaxis:
+-T 9tablaJ;D:.
7sta setencia s@lo puede utili5arse en pro%ra#as de bases de datos l@%icas. 7sta sentencia acti!a el e!ento 37T para la
tabla especificada en 9tablaJ;D: en el pro%ra#a asociado a la ;D4. 4as Areas de traba1o de las tablas definidas en la ;D4
y el pro%ra#a se co#parten.
27
RE8E$T
Definicin : Ter#ina con el blo<ue de proceso del e!ento 37T para ir a la si%uiente iteraci@n del #is#o e!ento u otro de
e!ento 37T.
Sintaxis:
R7P7CT W 9tabla: X.
4a sentencia sin parA#etros es el de abandonar el actual blo<ue de proceso y continuar con la si%uiente iteraci@n del #is#o
e!ento 37T. Con 9tabla: en lu%ar de irnos al #is#o e!ento 37T? el siste#a e1ecuta el e!ento 37T para la tabla indicada.
9tabla: deber ser una tabla con 1erar<uMa superior =estructura 1erAr<uica de tablas de una base de datos l@%ica> a la tabla
tratada en el actual e!ento 37T.
Ee!plo:
;ase de datos l@%ica F1(
Perar<uMaE (+F4I 6: (F4I3LT 6: (;00K
T*;47(E (F4I3LT?
(;00K.
37T (F4I3LT.
...
37T (;00K.
...
R7P7CT I(F4I3LTI.
...
R7P7CT cancela el proceso del e!ento I37T (;00KI y continua con el procesa#iento del e!ento I37T (F4I3LTI
RE$EIVE RES%"TS 'RO* '%#$TIO#
Definicin : Recupera los resultados de una funci@n <ue ha sido e1ecutada de for#a asMncrona.
Sintaxis:
R7C7IH7D R7(-4T( FR0 F-DCTI0D 9funci@n:
W I+0RTID3 9parA#etro1: N 9ca#po1: ... 9parA#etron: N 9ca#pon: X
W T*;47( 9parA#etro1: N 9ca#po1: ... 9parA#etron: N 9ca#pon: X
W 7GC7+TI0D( 9e8cepci@n1: N 9ca#po1: ... 9e8cepci@nn: N 9ca#pon: X.
Recupera todos los parA#etros de una funci@n <ue ha sido e1ecutada asincr@nica#ente? co#o por e1e#plo con la sentencia
C*44 F-DCTI0D .. (T*RTID3 D7& T*(K.
Ee!plo:
D*T*E IDF0 4IK7 RFC(I?
T Result of RFCJ(C(T7JIDF0 function
(C(T7J(3=)0> H*4-7 (+*C7.
T 78ception handlin%
C*44 F-DCTI0D IRFCJ(C(T7JIDF0I
(T*RTID3 D7& T*(K IIDF0I
+7RF0RID3 IR7T-RDJIDF0I 0D 7DD 0F T*(K.
&RIT7E I&ait for replyI.
...
*T -(7R6C0*DD.
T Return fro# F0R routine R7T-RDJIDF0
IF (C(T7J(3 N (+*C7.
&RIT7E IDestination NI? IDF06RFCD7(T.
74(7.
&RIT7 (C(T7J(3.
7DDIF.
...
F0R R7T-RDJIDF0 -(ID3 T*(KD*7.
R7C7IH7 R7(-4T( FR0 F-DCTI0D IRFCJ(C(T7JIDF0I
I+0RTID3 RFC(IJ7G+0RT N IDF0
7GC7+TI0D( (C(T7JF*I4-R7 7((*37 (C(T7J(3.
R7FR7(L (CR77D. S(i#ula el ca#po de co#ando N return ,ey
7DDF0R.
28
$A"" '%#$TIO#
Definicin : 4a sentencia C*44 F-DCTI0D se utili5a para lla#ar a un #@dulo de funci@n. 7sta sentencia tiene !arias
!ariantes en funci@n de la tarea de traba1o <ue procesa el #@dulo de funci@n.
Sintaxis:
C*44 F-DCTI0D 9funci@n:
W 7G+0RTID3 9p1: N 9f1: ... 9pn: N 9fn: X
W I+0RTID3 9p1: N 9f1: ... 9pn: N 9fn: X
W T*;47( 9p1: N 9tabla1: ... 9pn: N 9tablan: X
W CL*D3ID3 9p1: N 9f1: ... 9pn: N 9fn: X
W 7GC7+TI0D( 9p1: N 9e8c1l: ... 9pn: N 9e8cn: W 0TL7R( N 9nn:X X.
4la#ada bAsica a un #@dulo de funci@n. 4la#a al #@dulo de funci@n 9funci@n:. 9funci@n puede ser un literal o una !ariable.
4a asi%naci@n de los no#bre entre el pro%ra#a y el #@dulo de funci@n se reali5a por el no#bre? no por la secuencia de los
parA#etros.
Con la clAusula 7G+0RTID3 se puede pasar ca#pos? field6strin%s o tablas al #@dulo de funci@n. 7stos
parA#etros se deben declarar en el #@dulo de funci@n co#o parA#etros I+0RT. Cuando se reali5a la lla#ada
debe#os asi%nar !alores a todos los parA#etros <ue no se les haya definido un !alor por defecto.
4a clAusula I+0RTID3 se utili5a para <ue el #@dulo de funci@n de!uel!a al pro%ra#a !alores en ca#pos? field6
strin%s o tablas internas. 7stos parA#etros deben estar declarados co#o tablas en el #@dulo de funci@n. Cuando
lla#a#os al #@dulo de funci@n debe#os indicar todas las tablas a las <ue no se les haya asi%nado una tabla por
defecto.
Con la clAusula CL*D3ID3 se puede pasar !alores en ca#pos. field6strin%s o tablas internas al #@dulo de
funci@n? <ue podrAn ser #odificados en el #@dulo de funci@n y de!ueltos al pro%ra#a.
Con la clAusula 7GC7+TI0D( especifica#os las e8cepciones <ue <uere#os considerar en la lla#ada al #@dulo.
4as e8cepciones se acti!an con las sentencias R*I(7 y 7((*37 =con la clAusula R*I(ID3>.
-na lla#ada a un #@dulo de funci@n puede %enerar los si%uientes #ensa1es de errorE
C*44JF-DCTI0DJD0TJF0-DD 6: @dulo de funci@n desconocido.
C*44JF-DCTI0DJD0JH; 6: (@lo #@dulos de funci@n de actuali5aci@n pueden ser lla#ados desde la tarea de
actuali5aci@n.
C*44JF-DCTI0DJD0J*CTIH7 6: @dulo de funci@n creado pero no acti!o.
C*44JF-DCTI0DJ+*RJI((ID3 6: 7l #@dulo de funci@n espera un parA#etro <ue no ha sido utili5ado en la
lla#ada.
C*44JF-DCTI0DJC0DF4ICTJ47D3 6: +arA#etro con lon%itud err@nea.
C*44JF-DCTI0DJC0DF4ICTJTC+7 6: +arA#etro con tipo err@neo.
C*44JF-DCTI0DJC0DFI4CTJ37DJTC+7 6: 7l tipo de parA#etro actual no satisface los re<ueri#ientos del
parA#etro definido en el #@dulo de funci@n.
C*44JF-DCTI0DJ&R0D3J*4I3D7DT 6: 7l parB#etro actual no satisface los re<ueri#ientos del parA#etro
definido en el #@dulo de funci@n.
C*44JF-DCTI0DJ;*(7J4IT4 6: (e ha pasado un literal en un parA#etro estructurado.
C*44 F-DCTI0D 9funci@n: (T*RTID3 D7& T*(K 9tarea:
W D7(TID*TI0D 9destino: X
W D7(TID*TI0D ID 3R0-+ [ 9%rupo: Z D7F*-4T \ X
W +7RF0RID3 9rutina: 0D 7DD 0F T*(K X
W 7G+0RTID3 9p1: N 9f1: ... 9pn: N 9fn: X
W T*;47( 9p1: N 9tabla1: ... 9pn: N 9tablan: X
W 7GC7+TI0D( 9p1: N 9e1: 7((*37 9#1: ... 9pn: N 9en: 7((*37 9##: X.
29
7l siste#a arranca el #@dulo de funci@n asMncrona#ente en un nue!o #odo. 7n contraste con el for#ato bAsico? esta
!ariante hace <ue el siste#a continuB con la e1ecuci@n del pro%ra#a aun<ue el #@dulo de funci@n no haya ter#inado. 4as
clAusula opcionales son las si%uientesE
Con la clAusula D7(TID*TI0D el #@dulo de funci@n se e1ecuta e8terna#ente co#o una SRe#ote Function CallS
=RFC>. 9destino: puede ser una !ariable o un literal.
Con la clAusula D7(TID*TI0D ID 3R0-+ el #@dulo de funci@n se e1ecuta en todos los ser!idores definidos en
un %rupo. 4os #@dulos de funci@n se e1ecutarAn en paralelo.
4a clAusula +7RF0RID3 nos per#ite controlar los errores <ue se puedan producir en la e1ecuci@n del #@dulo
de funci@n. 9rutina: deter#ina la rutina a e1ecutar.
4a clAusula 7G+0RTID3 se utili5a para pasar parA#etros al #@dulo de funci@n? de la #is#a for#a <ue en la
!ariante 1.
4a clAusula T*;47( se utili5a para pasar tablas internas al #@dulo de funci@n? de la #is#a for#a <ue en la
!ariante 1.
4a clAusula 7GC7+TI0D( nos per#ite #ane1ar dos e8cepciones del siste#a =en a#bos casos se puede utili5ar
la opci@n 7((*37 para acti!ar un #ensa1e>E
1. (C(T7JF*I4-R7 6: (i el siste#a destino no funciona.
". C0-DIC*TI0DJF*I4-R7 6: (i no se puede conectarnos o co#unicarnos con el siste#a destino.
+ara poder utili5ar esta !ariante de la sentencia C*44 F-DCTI0D? tanto el siste#a ser!idor co#o el siste#a cliente deben
estar en !ersi@n '.0 o superior.
C*44 F-DCTI0D 9funci@n: ID -+D*T7 T*(K
W 7G+0RTID3 9p1: N 9f1: ... 9pn: N 9fn: X
W T*;47( 9p1: N 9tabla1: ... 9pn: N 9tablan: X
Con esta !ariante el #@dulo de funci@n se e1ecutarA en la tarea de actuali5aci@n. 4a e1ecuci@n no es in#ediata? los
parA#etros traspasados con las clAusulas 7G+0RTID3 y T*;47( se al#acenan en la base de datos. 7n el si%uiente
C0IT &0RK causa <ue el #@dulo de funci@n se e1ecute en la tarea de actuali5aci@n. 4as clAusulas 7G+0RTID3 y
T*;47( tienen el #is#o si%nificado <ue en la !ariante 1.
C*44 F-DCTI0D 9funci@n: D7(TID*TI0D 9destino:
W 7G+0RTID3 9p1: N 9f1: ... 9pn: N 9fn: X
W I+0RTID3 9p1: N 9f1: ... 9pn: N 9fn: X
W T*;47( 9p1: N 9tabla1: ... 9pn: N 9tablan: X
W CL*D3ID3 9p1: N 9f1: ... 9pn: N 9fn: X
W 7GC7+TI0D( 9p1: N 9e8c1l: ... 9pn: N 9e8cn: W 0TL7R( N 9nn:X X.
7l #@dulo de funci@n se e1cuta desde una fuente e8terna? a tra!Bs de una lla#ada SRe#ote Function CallS =RFC>. 9destino:
puede ser un literal o una !ariable. Dependiendo del destino especificado el #@dulo de funci@n podrA ser e1ecutado en un
siste#a RQ' o un siste#a RQ". 9destino: es una cla!e <ue per#ite al siste#a saber <uB siste#a re#oto esta#os asi%nado.
4os destinos se definen en la transacci@n (/9. 4a for#a de lle%ar a tra!Bs de los #enOs es la si%uienteE =+antalla inicial
de (*+> -> &erramientas -> Gesti'n( Gesti'n -> Red "estinos R)*.
Lay ciertos destinos <ue tienen un si%nificado especialE
D0D7 6: 7ste destino apunta al propio siste#a donde se reali5a la lla#ada al #@dulo de funci@n.
;*CK 6: 7ste destino fuer5a a <ue el pro%ra#a <ue reali5a la lla#ada al #@dulo de funci@n ten%a <ue ser lla#ado desde
un siste#a diferente. (i el pro%ra#a se e1ecuta desde el #is#o siste#a se produce la e8cepci@n
C0-DIC*TI0DJF*I4-R7.
4as clAusulas opcionales tienen el #is#o si%nificado <ue el de la !ariante 1 =lla#ada bAsica>.
C*44 F-DCTI0D 9funci@n: ID ;*CK3R0-DD T*(K
W *( (7+*R*T7 -DIT X
W D7(TID*TI0D 9destino: X
W 7G+0RTID3 9p1: N 9f1: ... 9pn: N 9fn: X
W T*;47( 9p1: N 9tabla1: ... 9pn: N 9tablan: X
4la#ada al #@dulo de funci@n de #odo asMncrono. Con la clAusula *( (7+*R*T7 -DIT el #@dulo de funci@n se e1ecuta en
una nue!a 4-&. 7l resto de las clAusulas ya han sido co#entadas anterior#ente.
30
*ESSA,E
Definicin : 7l siste#a per#ite reaccionar a acciones incorrectas por parte del usuario #ostrando un #ensa1e? el cual
afectarA al flu1o del pro%ra#a.
Sintaxis:
R7+0RT 9pro%ra#a: ... 7((*376ID 9clase:.
4os #ensa1es se al#acenan en la tabla T100. 4os #ensa1es estAn ordenados por el len%ua1e? la identificaci@n de la clase
de #ensa1e =" caracteres> y por el nO#ero de #ensa1e =' caracteres>. 7n un pro%ra#a se puede utili5ar !arias clases de
#ensa1e? pero s@lo una de ellas podrA ser definida estAtica#ente? <ue se define en la sentencia R7+0RT.
7n la sentencia R7+0RT e8iste la clAusula 7((*376ID <ue nos per#ite asociar al pro%ra#a? de #anera estAtica? una
clase de #ensa1e.
7((*37 9tipo:9nu#: W &ITL 9c1: 9c": 9c': 9c.: X.
9tipo: define el tipo de #ensa1e. 9nu#: indentifica el nO#ero de #ensa1e. 7n esta sentencia se #ostraran los #ensa1es de
la clase de #ensa1e definidos en la sentencia R7+0RT....
4a clAusula &ITL per#ite aVadir !ariables en el #ensa1e. 78iste la li#itaci@n de cuatro !ariables por #ensa1e. 7n
el #ensa1e ala#acenado en la tabla T100? las !ariables se definen con un ampersand =_> aco#paVado de un
nO#ero del 1 al ..
7((*37 ID 9clase: TC+7 9tipo: D-;7R 9nu#: W &ITL 9c1: 9c": 9c': 9c.: X.
Con esta !ariante especifica#os la clase del #ensa1e de for#a dinA#ica. 9clase: deter#ina la clase de #ensa1e.
4a clAusula TC+7 se utili5a para deter#inar el tipo de #ensa1e. 4a clAusula D-;7R se utili5a para especificar el
nO#ero de #ensa1e.
4a clAusula &ITL tiene el #is#o si%nificado <ue en la anterior !ariante.
-n #ensa1e puede tener cinco diferentes tiposE
Tipo * =*bend> 6: 7l siste#a #uestra este tipo de #ensa1e en una !entana de diAlo%o. DespuBs de <ue el usuario
confir#e el #ensa1e pulsando la tecla IDTR0? el siste#a abandona la transacci@n donde este.
Tipo 7 =7rror> o tipo &=&arnin%> 6: 7l siste#a #uestra el #ensa1e en la lMnea de status. DespuBs de <ue el
usuario pulsa IDTR0 el siste#a actOa en funci@n del punto de proceso donde nos encontre#os. (i nos
encontra#os en la creaci@n del listado bAsico? (*+ ter#ina el pro%ra#a. (i nos encontra#os en la creaci@n de un
listado secundario? el siste#a ter#ina el actual blo<ue de proceso y presenta el listado del ni!el anterior.
Tipo I =Infor#aci@n> 6: 7l siste#a #uestra el #ensa1e en una !entana de diAlo%o. DespuBs de <ue el usuario
pulse IDTR0? el siste#a continOa con el proceso.
Tipo ( =(uccess> 6: 7l siste#a #uestra el #ensa1e en la lMnea de status del listado creado.
Ee!plo .:
7((*37 ID IGGI TC+7 I7I D-;7R I001I
&ITL ITe8tI.
Ee!plo /:
7((*37 7010 &ITL I78a#pleI (C6-D*7.
$O**IT -OR7
Definicin : * !eces es necesario ase%urarse <ue los ca#bios en la base de datos se han reali5ado? antes de continuar
con el proceso. +or el contrario? a !eces es necesario deshacer al%unos ca#bios reali5ados en la base de datos. +ara
confir#ar los ca#bios reali5ados sobre la base de datos se utili5a la sentencia C0IT &0RK
Sintaxis:
C0IT &0RK W *DD &*IT X.
para deshacer los ca#bios reali5ados en la base de datos se utili5a la sentencia R044;*CK &0RK. 7stas sentencias
tienen un papel i#portante en la pro%ra#aci@n de transacciones de diAlo%o.
31
Con la clAusula *DD &*IT? el pro%ra#a se para hasta <ue la tarea de actuali5aci@n ter#ina. (i la actuali5aci@n es
satisfactoria? (C6(-;RC !ale 0? en caso contrario? (C6(-;RC to#a un !alor distinto de 0.
Vease ta!bi9n: R044;*CK &0RK
RO"")A$7 -OR7
Definicin : Deshace los ca#bios reali5ados en la base de datos.
Sintaxis:
R044;*CK &0RK.
(i la operaci@n se reali5a satisfactoria#ente? (C6(-;RC !ale 0? en caso contrario? (C6(-;RC to#a un !alor distinto de 0
$A"" DIA"O,
Definicin: 4a sentencia C*44 DI*403 lla#a a un #@dulo de diAlo%o.
Sintaxis:
C*44 DI*403 9#@dulo6diAlo%o:
W *DD (KI+ FIR(T (CR77D X
W 7G+0RTID3 9f1: W FR0 9%1: X ... 9fn: W FR0 9%n: X X
W I+0RTID3 9f1: W T0 9%1: X ... 9fn: W T0 9%n: X X
W -(ID3 9tabla: 0D7 9#odo: X.
9#@dulo6diAlo%o: puede ser un literal o una !ariable.
Con la clAusula *DD (KI+ FIR(T (CR77D el siste#a procesa la pri#era pantalla del #@dulo de diAlo%o en
bac,%round? si he#os rellenado todos los ca#pos obli%atorios? %racias a la sentencia (7T +*R*7T7R(.
Con la clAusula 7G+0RTID3 especifica#os todos los ob1etos de datos =ca#pos? re%istros? tablas> <ue se pasan
al #@dulo de funci@n. (i el ob1eto de dato en el #@dulo de diAlo%o y en el pro%ra#a coinciden en el no#bre? la
opci@n FR0 no es necesaria. (i no coinciden? 9fi: apunta a los ob1etos de datos del #@dulo de diAlo%o y 9%i: a
los ob1etos de datos del pro%ra#a.
Con la clAusula I+0RTID3 especifica#os todos los ob1etos de datos =ca#pos? re%istros? tablas> <ue se
de!uel!en desde el #@dulo de funci@n. (i el ob1eto de dato en el #@dulo de diAlo%o y en el pro%ra#a coinciden
en el no#bre? la opci@n T0 no es necesaria. (i no coinciden? 9fi: apunta a los ob1etos de datos del #@dulo de
diAlo%o y 9%i: a los ob1etos de datos del pro%ra#a.
7l ca#po (C6(-;RC se e8porta y se i#porta auto#Atica#ente. 4os ob1etos de datos e8port o i#port
desconocidos se i%noran en el #@dulo de funci@n. 4os ob1etos de datos pasados deberMan tener el #is#o tipo o
estructura en el #@dulo de diAlo%o y en el pro%ra#a.
C*44 DI*403 9#@dulo6diAlo%o: -(ID3 9tabla: W 0D7 9#odo: X.
7sta sentencia per#ite i#ple#entar el #Btodo de batch6input C*44 DI*403 -(ID3. 4a sentencia lla#a al #@dulo de
diAlo%o 9#@dulo6diAlo%o: y le pasa la infor#aci@n? en for#ato de 1ue%o de datos? en la tabla interna 9tabla:. *l i%ual <ue en
la sentencia C*44 TR*D(*CTI0D -(ID3? el siste#a rellena ciertas !ariables del siste#a con infor#aci@n referente a un
#ensa1e.
4a clAusula 0D7 tiene el #is#o si%nificado <ue en la sentencia C*44 TR*D(*CTI0D -(ID3.
4os c@di%os de retorno de!ueltos por la sentencia son los #is#os <ue en la sentencia C*44 TR*D(*CTI0D
-(ID3. * diferencia de la anterior sentencia? C*44 DI*403 -(ID3 no reali5a C0IT de la base de datos. 4os
errores en tie#po de e1ecuci@n <ue se pueden producir son los si%uientesE
1. C*44JDI*403JD0TJF0-DD 6: 7l #@dulo de diAlo%o no e8iste.
". C*44JDI*403J&R0D3JTDCTJ0D7 6: 7l #@dulo de diAlo%o contiene errores.
'. C*44JDI*403JD*7JT00J40D3 6: 7l no#bre de al%On parA#etro es #As lar%o <ue el per#itido.
SET PARA*ETER
Definicin : *ctuali5aci@n de un parA#etro (+*Q3+*.
32
Sintaxis:
(7T +*R*7T7R ID I9parA#etro:I FI74D 9ca#po:.
7l siste#a actuali5a el !alor del parA#etro 9parA#etro: con el contenido del ca#po 9ca#po:. 9parA#etro: sie#pre es un
literal alfanu#Brico de tres posiciones y debe ir con las co#illas =I I>. 7l !alor anterior del parA#etro se sobrescribe
,ET PARA*ETER
Definicin : 4ee el !alor del parA#etro actuali5ando el contenido del ca#po.
Sintaxis:
37T +*R*7T7R ID I9para#etro:I FI74D 9ca#pos:.
7l siste#a lee el !alor del parA#etro 9parA#etro: actuali5ando el contenido del ca#po 9ca#po:. 9parA#etro: sie#pre es
un literal alfanu#Brico de ' posiciones y debe ir con las co#illas =I I>. 7l !alor del parA#etro de #e#oria no !aria.
* partir de la !ersi@n ..8 se puede utili5ar la !ariable (C6(-;RC. 7n esta !ersi@n si conse%ui#os leer el parA#etro de
#e#oria correcta#ente (C6(-;RC !aldrA 0? en caso contrario !aldrA .. 7n !ersiones anteriores habMa <ue introducir un
!alor err@neo y una !e5 e1ecutado la sentencia 37T +*R*7T7R co#probar si el !alor habMa ca#biado.
Ee!plo:
D*T* E R7+ID=)>.
37T +*R*7T7R ID IRIDI FI74D R7+ID
$A"" TRA#SA$TIO#
Definicin : 4a sentencia C*44 TR*D(*CTI0D per#ite e1ecutar una transacci@n.
Sintaxis:
C*44 TR*D(*CTI0D 9transaccion: W*DD (KI+ FIR(T (CR77D X.
7sta sentencia lla#a a la transacci@n 9transacci@n:. 9transacci@n: puede ser un literal o una !ariable. +ara retornar desde
la transacci@n al pro%ra#a se utili5a la sentencia 47*H7 +R03R*.
Con la clAusula *DD (KI+ FIR(T (CR77D ade#As de lla#ar a la sentencia indicada se puede saltar la pri#era
pantalla de la transacci@n. 7sta acci@n debe ir co#binada con el uso de parA#etros (+*Q3+* de los ca#pos de
la pri#era pantalla de la transacci@n =sentencia (7T +*R*7T7R(> para <ue el #o#ento de la e1ecuci@n de la
transacci@n? Bsta to#e los parB#tros de la #e#oria =sentencia 37T +*R*7T7R(> y asM? de esta for#a? poder
saltar la pri#era pantalla. (i para pasar la pri#era pantalla se necesita rellenar para#etros <ue no indica#os? el
siste#a presenta la pri#era pantalla y serA el usuario el <ue reali5a la entrada #anual#ente.
7sta sentencia tiene una !ariante con la clAusula -(ID3 <ue ca#bia total#ente el si%nificado de la sentencia. (e
utili5a co#o #Btodo de batch6input.
(entencia utili5ada para i#ple#entar el #Btodo C*44 TR*D(*CTI0D.
C*44 TR*D(*CTI0D 9transacci@n: -(ID3 9tabla:
W 0D7 9#odo: X
W -+D*T7 9actuali5aci@n: X
W 7((*37( IDT0 9tabla6#ensa1es X.
9transacci@n: es el c@di%o de la transacci@n? a la cual !a#os a reali5ar el batch6input. 9tabla: es la tabla interna con los
datos de batch6input =estructura ;DCD*T*>. (i la transacci@n de!uel!e al%On tipo de #ensa1e? las si%uientes !ariables del
siste#a %uardan la si%uiente infor#aci@nE
(C6(3ID 6: Identificador de #ensa1e =R7+0RT ..... 7((*376ID 88>.
(C6(3TC 6: Tipo de #ensa1e =* 6: *bend? 76: 7rror? ...>
(C6(3D0 6: DO#ero de #ensa1e.
(C6(3H1 6: Halor 1 del #ensa1e =si e8iste>.
(C6(3H" 6: Halor " del #ensa1e =si e8iste>.
(C6(3H' 6: Halor ' del #ensa1e =si e8iste>.
33
(C6(3H. 6: Halor . del #ensa1e =si e8iste>.
4a !ariable del siste#a (C6(-;RC to#a el !alor 0 si el proceso ha sido satisfactorio. 7n caso contrario to#a un !alor
distinto de 0. -na lla#ada a una transacci@n puede ter#inar satisfactoria#ente si se reali5a un C0IT &0RK? un C*44
(CR77D con !alor 0 o un 47*H7 T0 TR*D(*CTI0D 9c@di%o6transacci@n:.
Con la clAusula 0D7 especifica#os el #odo de e1ecuci@n de la transacci@n. 9#odo: puede tener uno de los si%uientes
!alores =el !alor por defecto es *>E
1. * 6: (e #uestran todas las pantallas.
". 7 6: (e #uestran s@lo las pantallas con error.
'. D 6: Do se #uestra nin%una pantalla.
Con la clAusula -+D*T7 especifica#os el #odo de actuali5aci@n de la base de datos. 9actuali5aci@n: puede tener uno de
los si%uientes !alores =el !alor por defecto es *>E
1. * 6: odo asMncrono.
". ( 6: odo sMncrono.
Con la clAusula 7((*37( IDT0 el siste#a actuali5a la tabla interna 9tabla6#ensa1es: con todos los #ensa1es <ue se
%eneran en la transacci@n. 4a tabla interna debe tener la estructura ;DC(3C044.
4os errores <ue se pueden producir en tie#po de e1ecuci@n son los si%uientesE
1. C*44JTR*D(*CTI0DJD0TJF0-DD 6: Transacci@n desconocida.
". C*44JTR*D(*CTI0DJI(J7D- 6: 4a transacci@n especificada es un #enO.
'. C*44JTR*D(*CTI0DJ-(ID3JD7(T7D 6: (e ha utili5ado una lla#ada recursi!a in!Alida para esta sentencia.
.. C*44JTR*D(*CTI0DJ40CK7D 6: Transacci@n blo<ueda.
$A"" S$REE#
Definicin : (e utili5a para lla#ar a una dynpro.
Sintaxis:
C*44 (CR77D 9dynpro: W (T*RTID3 *T 981: 9y1: W 7DDID3 *T 98": 9y": X X
4la#a al dynpro 9dynpro:. 9dynpro: es un nO#ero de pantalla del pro%ra#a principal. +ara abandonar la pantalla se deben
utili5ar las sentencias (7T (CR77D o 47*H7 (CR77D.
Con la clAusula (T*RTID3Q7DDID3 defini#os el ta#aVo de la !entana. 981: y 9y1: definen la es<uina superior
i5<uierda de la !entana? 98": y 9y": definen la es<uina inferior derecha de la !entana. (i no se utili5a la clAusula
7DDID3 la es<uina inferior derecha serA el lM#ite de la pantalla. (e puede producir el si%uiente error en tie#po de
e1ecuci@nE
1. DCD+JT00J*DCJC*44J(CR77D( 6: Le#os alcan5ado el lM#ite de pantallas abiertas para un
pro%ra#a. 7l lM#ite actual#ente es de /0 pantallas.
$A"" S%)S$REE#
Definicin: -na subscreen es una pantalla independiente <ue se #uestra en un Area de otra pantalla principal.
Sintaxis:
C*44 (-;(CR77D 9Area: IDC4-DID3 9pro%ra#a: 9pantalla:.
4a sentencia se debe utili5ar en a#bos procesos +;0 y +*I.
"EAVE TO TRA#SA$TIO#
Definicin: +er#ite abandonar la dynpro actual para pasar a otra dynpro.
Sintaxis:
34
47*H7 T0 TR*D(*CTI0D 9transacci@n: W *DD (KI+ FIR(T (CR77D X.
4a transacci@n lla#ada se especifica en 9transacci@n:.
4a clAusula *DD (KI+ FIR(T (CR77D tiene el #is#o si%nificado <ue en la sentencia C*44 TR*D(*CTI0D
$A"" $%STO*ER+'%#$TIO#
Definicin: 7sta sentencia se utili5a para lla#ar a #@dulos de funci@n? desarrollados por el usuario? <ue pueden o no estar
acti!os.
Sintaxis:
C*44 C-(T07R6F-DCTI0D 9funci@n:.
7sta sentencia la utili5a el siste#a de #anera estAndar para desarrollar el concepto de Sa#pliaci@nS. 4a idea es la si%uiente?
en los pro%ra#as estAndar del siste#a? en a<uellos puntos donde se ha considerado interesante? se ha incluido esta
sentencia con lla#adas a #@dulos e8istentes pero sin desarrollar y sin acti!ar. 7l usuario puede incluir en estos #@dulos el
desarrollo necesario para las especificaciones concretas de un siste#a y acti!ar posterior#ente el #@dulo. De esta for#a
se e!ita <ue se #odifi<uen los pro%ra#as estAndar =co#o ha sucedido en tantas ocasiones en el siste#a RQ" <ue no acepta
este concepto>.
7l no#bre del #@dulo de funci@n tiene la si%uiente no#enclaturaE 7GITJGGGGGGGGJDDD? siendo GGGGGGGG el no#bre
del pro%ra#a <ue reali5a la lla#ada y DDD el nO#ero de funci@n especificado en la lla#adaE 9funci@n:.
*un<ue la sentencia no esta li#itada al uso interno de (*+ =co#o sucede con otras sentencias> real#ente no !eo la
necesidad de utili5ar esta sentencia. (i necesita#os crear un #@dulo de funci@n os reco#iendo <ue utilicBis C*44
F-DCTI0D.
$A""
Definici@nE +er#ite reali5ar una lla#ada a una funci@n del siste#a.
Sintaxis:
C*44 9funci@n: WID 9id1: FI74D 9c1: ... ID 9idn: FI74D 9cn:
X.
4a funci@n 9funci@n: debe e8istir en el fichero sapactab.h. (i ca#bia#os o crea#os nue!as funciones del siste#a
tendre#os <ue co#pilar y lin,ar de nue!o el ,ernel de (*+? para ello serMa necesario tener los c@di%os fuente de la
aplicaci@n (*+.
4a clAusula ID nos per#ite pasar parA#etros por referencia. 9id1: ... 9idn: son los no#bres de los parA#etros de
la funci@n del siste#a? 9c1: ... 9cn: son los ca#pos =o literales> con los !alores <ue hay <ue pasar.
7sta sentencia fue creada para uso e8clusi!o de los pro%ra#a estAndar de (*+ RQ'.
SE"E$T+OPTIO#S
Definicin: (e utili5a para definir un criterio de selecci@n. *l%unas de las !ariantes de esta sentencia s@lo se pueden utili5ar
en pro%ra#as de definici@n de bases de datos l@%icas.
Sintaxis:
(747CT60+TI0D( 9criterio: F0R 9ca#po:
W D7F*-4T 9%: W T0 9h: X W 0+TI0D 9opci@n: (I3D 9si%no: X
W 70RC ID 9#e#oria: X W 0DIF ID 9cla!e: X
W *TCLC0D7 0;P7CT 9ob1eto: X
W D06DI(+4*C X W 40&7R C*(7 X W 0;4I3*T0RC X
W D067GT7D(I0D X W D0 IDT7RH*4( X W D0 D*T*;*(7 (747CTI0D X
W H*4-7 R7F-7(T XW F0R 40&QLI3L X X
W H*4-76R7F-7(T W F0R 40&QLI3L X X
W L74+6R7F-7(T W F0R 40&QLI3L X X.
7sta sentencia crea el criterio de selecci@n 9criterio: para el ca#po 9ca#po:. 9ca#po: puede ser un ca#po de una tabla
de la base de datos o un ca#po interno al pro%ra#a. 9criterio: puede ser co#o #A8i#o de ) caracteres de lon%itud. 7l
criterio de selecci@n lo rellena el usuario en la pantalla de selecci@n. 4os te8tos descripti!os <ue aparecen a la i5<uierda del
criterio de selecci@n se pueden ca#biar utili5ando =i%ual <ue con los parA#etros definidos con +*R*7T7R(> con el ob1eto
parcial a un pro%ra#a? ele#entos de te8to. 7l si%nificado de las clAusulas es el si%uienteE
35
D7F*-4T 6: (e puede incluir una lMnea en el criterio de selecci@n con !alores por defecto. 9%: actuali5a el ca#po
40& del criterio de selecci@n. Con T0 9h: inclui#os un !alor por defecto en el ca#po LI3L del criterio de
selecci@n. 7l ca#po o literal 9opci@n:? utili5ado en 0+TI0D? incluye un !alor en el ca#po (I3D del criterio de
selecci@n. Todos los ca#pos !istos en esta clAusula? 9%:? 9h:? 9opci@n: y 9si%no: pueden ser !ariables o
literales.
D067GT7D(I0D 6: Restrin%e <ue el usuario s@lo pueda introducir una lMnea en el criterio de selecci@n. 7l siste#a
no presenta el ca#po de e8tensi@n <ue aparece a la derecha de los criterios de selecci@n? por lo tanto? el usuario
no puede reali5ar e8tensiones.
D06IDT7RH*4( 6: Restrin%e <ue el usuario no puede introducir inter!alos y se li#ite a introducir Onica#ente
!alores sencillos. 7l siste#a eli#ina la colu#na de !alores %asta.
D0 D*T*;*(7 (747CTI0D 6: (i el criterio de selecci@n definido tiene otro ob1eti!o <ue el de la selecci@n de
datos se puede utili5ar esta clAusula para <ue no sea transportado al pro%ra#a de la base de datos. Cuando
declara#os un criterio de selecci@n para un ca#po de una tabla de la base de datos y utili5a#os un pro%ra#a de
bases de datos l@%ica =sentencia 37T>? el siste#a? por defecto? transporta el criterio de selecci@n al pro%ra#a de
la base de datos para li#itar la lectura de re%istros.
D06DI(+4*C? 40&7R C*(7? 0;4I3*T0RC? 70RC ID? 0DIF ID y *TCLC0D7 0;P7CT 6: (e utili5an de
la #is#a for#a <ue en la sentencia +*R*7T7R(.
H*4-76R7F-7(T y L74+6R7F-7(T 6: (e utili5an e8clusi!a#ente en los pro%ra#a de definici@n de bases de
datos l@%ica.
Ee!plo .:
T*;47( (*+4*D7.
...
(747CT60+TI0D( (J+TC+7 F0R (*+4*D76+4*D7TC+7 0DIF ID *;C.
...
*T (747CTI0D6(CR77D 0-T+-T.
400+ *T (CR77D.
IF (CR77D63R0-+1 N I*;CI.
(CR77D6IDT7D(IFI7D N I1I.
0DIFC (CR77D.
7DDIF.
7DD400+.
Ee!plo /:
(747CT60+TI0D( D*T7 F0R (C6D*T- D7F*-4T (C6D*T-
PARA*ETERS
Definicin : (i <uere#os dar la posibilidad al usuario de introducir !alores en !ariables en la pantalla de selecci@n?
debe#os definir dichas !ariables con la sentencia +*R*7T7R(. 4a declaraci@n de !ariables con la sentencia
+*R*7T7R( es #uy parecida a la sentencia D*T*.
Sintaxis:
+*R*7T7R( 9parA#etro: W =9lon%itud>:X.
W TC+7 9tipo: Z 4IK7 9ca#po: X
W D7CI*4( 9deci#ales: X W D7F*-4T 9!alor: X
W 70RC ID 9#e#oria:X W 0DIF ID 9%rupo: X
W *TCLC0D7 0;P7CT 9ob1eto: X W *( *TCLC0D7 (TR-CT-R7X
W D06DI(+4*C X W 40&7R C*(7 X W 0;4I3*T0RC X W F0R T*;47 9tabla: X
W *( CL7CK;0G X W R*DI0;-TT0D 3R0-+ 9%rupo: X
W H*4-76R7F-7(T X W L74+ R7F-7(T X.
Con esta sentencia defini#os el parA#etro 9parA#etro:. 4as clAusulas 9lon%itud:? 9tipo: y 9deci#ales: sin i%uales a las
de la sentencia D*T*.
Cuando el usuario arran<ue el pro%ra#a aparece una pantalla de selecci@n con el parA#etro 9parA#etro:? con lon%itud la
especificada en 9lon%itud:? o la lon%itud por defecto del ca#po si la clAusula no se define. +or defecto la descripci@n <ue
aparece a la i5<uierda del ca#po es el no#bre del ca#po. 7l ob1eto parcial de pro%ra#a +lementos de te,to? la opci@n
-e,tos de selecci'n nos per#ite asociar al parA#etro un te8to si%nificati!o. 0tra posibilidad es la utili5aci@n de la sentencia
(747CTI0D6(CR77D co#o !ere#os en el apartado correspondiente a esta sentencia.
36
(e puede utili5ar los parA#etros de selecci@n? por e1e#plo? para <ue el usuario li#ite los !alores desde y hasta para una
posterior lectura de la base de datos. (i las condiciones de selecci@n son #As co#ple1as <ue indicar un !alor desde y hasta?
es preferible utili5ar la sentencia (747CT60+TI0D(.
D7F*-4T 6: 9!alor: puede ser un literal o el no#bre de un ca#po. (i especifica#os el no#bre de un ca#po el
!alor por defecto en el parA#etro serA el !alor del ca#po en el #o#ento de presentar la pantalla de selecci@n.
Recorde#os <ue el e!ento IDITI*4IY*TI0D se e1ecuta antes de la presentaci@n de la pantalla de selecci@n? en Bl
se puede actuali5ar el !alor del ca#po especificado. 7l usuario puede #odificar el !alor <ue aparece por defecto.
D06DI(+4*C 6: 7l parA#etro no aparece en la pantalla de selecci@n. (e le puede dar un !alor con la clAusula
D7F*-4T? en el e!ento IDITI4IY*TI0D? o con una lla#ada al pro%ra#a con la sentencia (-;IT. (i <uere#os
#ostrar el parA#etro ba1o ciertas circunstancias no se debe utili5ar la clAusula D06DI(+4*C ya <ue con ella no se
podrA hacer !isible el parA#etro. (e debe definir !isible y si no <uere#os <ue apare5ca el ca#po utili5a#os la
sentencia 0DIFC (CR77D.
40&7R6C*(7 6: 7l siste#a no con!ierte el !alor del parA#etro a #ayOsculas? es decir? respeta la entrada del
usuario? sea con caracteres en #ayOsculas yQo #inOsculas. (i defini#os el tipo de parA#etro con la opci@n 4IK7 y
referencia#os un ca#po del diccionario de datos? la clAusula 40&7R C*(7 no se puede utili5ar.
0;4I3*T0RC 6: 0bli%a a introducir un !alor al usuario en el parA#etro. +ara si%nificar el hecho de la
obli%atoriedad? el siste#a presenta el ca#po con el si%no de interro%aci@n =`>.
*( CL7CK;0G 6: -n chec,bo8 es un ca#po de entrada de lon%itud 1 sobre el <ue se puede acti!ar o desacti!ar
un vise. +ara definirlo utili5a la clAusula *( CL7CK;0G. 7l !alor interno del parA#etro serA SGS o S S si estA acti!o
o desacti!o respecti!a#ente. 7l usuario para acti!ar o desacti!ar el parA#etro debe hacer un clic, sobre el
parA#etro. (i utili5a#os la opci@n 4IK7 en la sentencia +*R*7T7R( haciendo referencia a un ca#po del
diccionario de tipo C? lon%itud 1 y !alores per#itidos SGS y S S = a tra!Bs del do#inio>? el parA#etro aparece
auto#Atica#ente co#o chec,bo8.
R*DI0;-TT0D 6: 7s un con1unto de ca#po de entrada de lon%itud 1 sobre el <ue se puede acti!ar o desacti!ar
uno y s@lo uno de ellos. +ara definir un %rupo de ca#pos con el for#ato de radiobutton se utili5a la clAusula
R*DI0;-TT0D 3R0-+. Cada parA#etro definido co#o radiobutton es de tipo C y lon%itud 1? y se asi%na al
%rupo 9%rupo:. 4a #A8i#a lon%itud del ca#po 9%rupo: es de .. 4a clAusula 4IK7 se puede utili5ar pero debe
referenciar un ca#po de tipo C y lon%itud 1. (e deben asi%nar al #enos dos parA#etros por cada %rupo. (@lo un
parA#etro por %rupo podrA tener un !alor por defecto con la clAusula D7F*-4T? y este !alor s@lo podrA ser SGS.
Cuando el usuario hace un clic, sobre el radiobutton? el siste#a acti!a dicho parA#etro =!alor internoE SGS> y
desacti!a =!alor internoE S S> el parA#etro del %rupo <ue estu!iera acti!o. (ie#pre un parA#etro del %rupo estA
acti!o. (i nin%On parA#etro se acti!a por definici@n? o en el e!ento IDITI*4IY*TI0D? el siste#a acti!a el pri#er
parA#etro del %rupo.
70RC ID 6: 7l siste#a presentarA en el parA#etro de la pantalla el !alor al#acenado en un parA#etro de
#e#oria (+*Q3+*. 9#e#oria: identifica el no#bre del parA#etro y debe tener hasta tres caracteres de lon%itud.
0DIF ID 6: (e utili5a para asi%nar un parA#etro a un %rupo de #odificaci@n. 7se %rupo de #odificaci@n podrA
ser utili5ada por la sentencia 0DIFC (CR77D para #odificar los atributos de la pantalla de selecci@n. 9%rupo:
es el no#bre del %rupo de #odificaci@n y debe ser un strin% de tres caracteres sin las co#illas = I >. 9%rupo: se
asi%na a la colu#na (CR77D63R0-+1 de la tabla interna (CR77D. 7n el e!ento *T (747CTI0D6(CR77 D se
puede #anipular la pantalla de selecci@n %racias a las sentencias 400+ *T (CR77D y 0DIFC (CR77D.
F0R T*;47 y *( *TCLC0D7 (TR-CT-R7 6: *si%na#os el parA#etro a la tabla de la base de datos 9tabla:.
7sto s@lo tiene sentido en pro%ra#as de acceso a bases de datos l@%icas. * diferencia de un ca#po de un
pro%ra#a de diAlo%o =transacci@n>? el iste#a no !alida si el !alor introducido e8iste en el #atchcode.
4as opciones H*4-76R7F-7(T y L74+6R7F-7(T 6: (@lo se pueden ser utili5adas en pro%ra#as de definici@n
de bases de datos.
SE"E$TIO#+S$REE#
Definicin: 7n la pantalla de selecci@n los parA#etros y criterios de selecci@n aparecen uno detrAs de otro en filas distintas.
(i este for#ato de pantalla no es suficiente para nuestras necesidades se puede utili5ar la sentencia (747CTI0D6(CR77D
para for#atear la pantalla de selecci@n.
Sintaxis:
(747CTI0D6(CR77D ;73ID 0F 4ID7...
....
37
(747CTI0D6(CR77D 7DD 0F 4ID7.
(747CTI0D6(CR77D (KI+ W 9n: X.
(747CTI0D6(CR77D -4ID7 W W Q X 9posici@n: = 9lon%itud:> X W Q X
(747CTI0D6(CR77D +0(ITI0D 9posici@n:.
(747CTI0D6(CR77D C07DT W Q X 9posici@n: =9lon%itud:> 9ca#po:
W F0R FI74D 9ca#po": X W 0DIF ID 9cla!e: X .
(747CTI0D6(CR77D ;73ID 0F ;40CK 9blo<ue: W &ITL FR*7 W TIT47 9tMtulo: X X W D0 IDT7RH*4( X
...
(747CTI0D6(CR77D 7DD 0F ;40CK 9blo<ue:.
(747CTI0D6(CR77D F-DCTI0D K7C 9i:.
(747CTI0D6(CR77D ;73ID 0F H7R(I0D 9!ersi@n: T7GT6888.
(747CTI0D6(CR77D 7DD 0F H7R(I0D 9!ersi@n:.
(747CTI0D6(CR77D 7GC4-D7
(747CTI0D6(CR77D DCD*IC (747CTI0D( F0R T*;47 9tabla:.
(747CTI0D6(CR77D FI74D (747CTI0D F0R T*;47 9tabla:.
7l si%nificado de las clAusulas es el si%uienteE
(KI+ 6: +ro!oca lMneas en blanco en la pantalla de selecci@n. 9n: es opcional se utili5a para saltar #As de una
lMnea.
-4ID7 6: (ubraya una lMnea o parte de ella en la pantalla de selecci@n. (i no utili5a#os la opci@n 9posici@n:
=9lon%itud:> una nue!a lMna se crea. (i utili5a#os la opci@n 9posici@n:=9lon%itud:> la nue!a lMnea co#ien5a en la
posici@n 9posici@n: con una lon%itud de 9lon%itud: caracteres. Con !arios ele#entos sobre una lMnea se puede
especificar 9lon%itud: sin especificar 9posici@n:.
0DIF ID 6: Tiene el #is#o si%nificado <ue en la sentencia +*R*7T7R(.
C07DT 6: (e utili5a para escribir te8to sobre la pantalla de selecci@n. Con la barra = Q > salta#os de lMnea y
con 9posici@n: y 9lon%itud: defini#os la posici@n y la lon%itud del te8to en la pantalla. 9ca#po1: puede ser un
ele#ento de te8to o un ca#po con una lon%itud #A8i#a de ) caracteres. +ara asi%nar un te8to a un parA#etro o
a un criterio de selecci@n se utili5a la opci@n F0R FI74D? 9ca#po": identifica el no#bre del parA#etro o criterio
de selecci@n. 4a opci@n 0DIF ID tiene el #is#o si%nificado <ue en la clAusula +*R*7T7R(.
;73ID 0F 4ID7 ... 7DD 0F 4ID7 6: (e utili5a para situar en una #is#a lMnea !arios parA#etros yQo co#entarios
en la pantalla de selecci@n. Cuando utili5a#os esta clAusula el posible ele#ento de te8to habrA <ue utili5ar la
clAusula C07DT de la sentencia (747CTI0D6(CR77D. 4os criterios de selecci@n no se pueden incluir. 4a
opci@n barra = Q > no se puede especificar? y la opci@n 9posici@n: se puede o#itir.
+0(ITI0D 6: (itOa un parA#etro o un co#entario en una posici@n deter#inada. +ara 9posici@n: se puede
especificar un nO#ero? +0(J40& y +0(JLI3L. +0(J40& y +0(JLI3L son las posiciones del ca#po desde y
ca#po %asta de un criterio de selecci@n sobre la pantalla. 7sta clAusula s@lo puede ser utili5ada en un blo<ue
;73ID 0F 4ID7 ... 7DD 0F 4ID7.
;73ID 0F ;40CK ... 7DD 0F ;40CK 6: Crea un blo<ue l@%ico sobre la pantalla de selecci@n. Con la opci@n
&ITL FR*7 el blo<ue se en%loba con un cuadreo. Con la opci@n TIT47 aparecerA el tMtulo 9tMtulo: en la pri#era
lMnea del cuadro. 9tMtulo: puede ser un ele#ento de te8to o un literal. Con la opci@n D0 IDT7RH*4( todas las
sentencias (747CT60+TI0D( se procesan co#o si tu!ieran la sentencia D0 IDT7RH*4(. Con esta opci@n? si
utili5a#os ade#As &ITL FR*7? el cuadro serA #enos ancho.
(e puede crear hasta cinco botones en la barra de botones sobre la pantalla de selecci@n. 7stos botones se conectan
auto#Atica#ente a teclas de funci@n.9i: debe estar co#prendido entre 1 y /. 7l te8to <ue aparece sobre el bot@n se
especifica en tie#po de e1ecuci@n #o!iendo un !alor sobre el ca#po ((CRFI74D(6F-DCTGTJ09i:. 4a estructura
((CRFI74D( debe estar declarada con la sentencia T*;47(. Cuando el usuario acti!a un bot@n? el !alor FC09i: es
introducido sobre el ca#po ((CRFI74D(6-C0? el cual puede ser che<ueado en el e!ento *T (747CTI0D6(CR77D.
78iste ta#biBn la posibilidad de situar botones sobre la pantalla de selecci@n con la opci@n +-(L;-TT0D. 4as opciones
barra =Q>? posici@n:? 9lon%itud: y 0DIF ID 9cla!e: son las #is#as <ue las e8plicadas en la clAusula C07DT. 9ca#po:
es el te8to <ue aparece sobre el bot@n. +ara 9c#d: se debe especificar un c@di%o de hasta cuatro caracteres. Cuando el
usuario presiona el bot@n? 9c#d: es introducido en el ca#po ((CRFI74D(6-C0. Co#o sucedMa en la clAusula anterior?
(CCRFI74D( debe declararse con la sentencia T*;47(. 7l ca#po ((CRFI74D(6-C0 puede ser utili5ado en el e!ento
*T (747CTI0D6(CR77D.
7l resto de clAusulas se utili5an e8clusi!a#ente en los pro%ra#as de definici@n de bases de datos.
Ee!plo .:
(747CTI0D6(CR77D ;73ID 0F 4ID7.
(747CTI0D6(CR77D C07DT 1=10> T7GT6001.
38
+*R*7T7R(E +1='>? +"=/>? +'=1>.
(747CTI0D6(CR77D 7DD 0F 4ID7.
Ee!plo /:
(747CT60+TI0D( D*T7 F0R (C6D*T- D7F*-4T (C6D*T-.
Ee!plo 0:
(747CTI0D6(CR77D ;73ID 0F 4ID7.
(747CTI0D6(CR77D C07DT 10="0> T7GT6001
F0R FI74D +*R.
(747CTI0D6(CR77D +0(ITI0D +0(J40&.
+*R*7T7R( +*R 4IK7 (*+4*D76+4*D7TC+7.
(747CTI0D6(CR77D 7DD 0F 4ID7.
Ee!plo 1:
T*;47( ((CRFI74D(.
...
(747CTI0D6(CR77D +-(L;-TT0D Q10="0> CL*R4C -(7R6C0*DD *;CD.
...
IDITI*4IY*TI0D.
0H7 Iy te8tI T0 CL*R4C.
...
*T (747CTI0D6(CR77D.
IF ((CRFI74D(6-C0 N I*;CDI.
...
7DDIF.
Ee!plo 2:
T*;47( (*+4*D7.
(747CTI0D6(CR77D ;73ID 0F ;40CK CL*R4C
&ITL FR*7 TIT47 T7GT6001.
+*R*7T7R( +*R=/>.
(747CT60+TI0D( (74 F0R (*+4*D76+4*D7TC+7.
(747CTI0D6(CR77D 7DD 0F ;40CK CL*R4C.
I#ITIA"I:ATIO#
Definicin: Con este e!ento pode#os iniciali5ar los ca#pos de una pantalla de selecci@n =o cual<uier otro ca#po u otra
!ariable> si este pro%ra#a la posee antes de <ue apare5ca.
Sintaxis:
IDITI*4IY*TI0D.
(i <uere#os <ue los ca#pos <ue aparecen en pantalla de selecci@n =o cual<uier otra !ariable o ca#po> ten%an ciertos
!alores o? en %eneral? si <uere#os reali5ar cual<uier acci@n antes de <ue apare5ca la pantalla de selecci@n.
Lay <ue recordar <ue en nuestro *;*+Q. aparece una pantalla de selecci@n por dos #oti!os. 7l pri#ero es por<ue
haya#os puesto en nuestro pro%ra#a al%una sentencia de criterio de selecci@n y se%undo en el pro%ra#a accede#os a
una base de datos l@%ica <ue ten%a criterios de selecci@n.
7n un principio no sabe#os <ue ca#pos de selecci@n aparecen en un pro%ra#a <ue utili5a base de datos l@%ica. +ara
saber <ue ca#pos pode#os ir a la transacci@n (4D; =;ase de datos l@%ica> o por #enO =desde la pantalla principal> serMaE
&erramientas. /or0benc%. "esarrollo. +ntorno de programaci'n. base de datos l'gica. Con esta transacci@n pode#os !er
los ca#pos definidos en la pantalla de selecci@n. 0tra for#a es nos posiciona#os en el ca#po? <ue <uere#os saber el
no#bre? y pulsa#os F1 =la tecla de ayuda> y a continuaci@n pulsare#os el bot@n <ue poneE Informaci'n tcnica. 7n la
pantalla resultante tendre#os entre otras cosas el no#bre del ca#po.
Ee!plo:
+*R*7T7R( F-*4JD*C TC+7 D D7F*-4T (C6D*T-.
IDITI*4IY*TI0D.
F-*4JD*CR6="> N I01I.
F-*4JD*C N F-*4JD*C 6 1.
AT SE"E$TIO#+S$REE#
Definicin: 7l e!ento *T (747CTI0D6(CR77D pro!ee de !arias posibilidades de blo<ues de proceso pero todos
relacionados con la pantalla de selecci@n. *l%unos se e1ecutan antes de la pantalla de selecci@n y otros despuBs.
Sintaxis:
39
*T (747CTI0D6(CR77D
(i utili5a#os la palabra cla!e sin usar nin%una opci@n? el blo<ue de proceso correspondiente se e1ecuta despuBs de <ue el
siste#a procese la pantalla de selecci@n. (i durante la e1ecuci@n del blo<ue de proceso se acti!a al%On #ensa1e de error?
!uel!e a aparecer la pantalla de selecci@n. Todos los ca#pos de la pantalla de selecci@n se pueden #odificar. 4a sentencia
7((*37 acti!a #ensa1es. 4os tipo de error pueden ser * =abend>? 7 =7rror>? I =Infor#ati!o>? ( =si%uiente pantalla> o &
=/arning>. 74 %rupo de #ensa1es se especifica en la sentencia R7+0RT =ClAusula 7((*376ID ...>.
*T (747CTI0D6(CR77D 0D 9parA#etro:.
4a si%uiente !ariante nos per#ite crear un blo<ue de proceso para un solo ca#po de la pantalla de selecci@n. 9parA#etro:
debe ser una parA#etro. 7l blo<ue de proceso se arranca cuando el siste#a ha procesado el ca#po en cuesti@n. 7l siste#a
reali5a pri#ero !alidaciones de for#ato. -na !e5 anali5ado el for#ato? se arranca el blo<ue de proceso. (i acti!a#os un
#ensa1e de error en este blo<ue de proceso? !uel!e a aparecer la pantalla de selecci@n y s@lo se puede #odificar el ca#po
tratado.
*T (747CTI0D6(CR77D 0D 7DD 0F 9criterio:.
4a si%uiente !ariante nos per#ite !alidar un criterio de selecci@n de la pantalla de selecci@n. 7l blo<ue de proceso se
e1ecuta despuBs de introducir !alores en la pantalla Sco#ple1aS de introducci@n de datos en un criterio de selecci@n.
*T (747CTI0D6(CR77D 0D H*4-76R7F-7(T F0R 9ca#po:.
4a si%uiente !ariante per#ite crear un blo<ue de proceso asociado cuando el usuario pulsa el bot@n de posibles !alores
=ta#biBn se acti!a pulsando la tecla de funci@n F.>. Dicho bot@n aparece auto#Atica#ente a la derecha del ca#po
=parA#etro o criterio de selecci@n> cuando se utili5a este e!ento. 7n el blo<ue de proceso se debe pro%ra#ar una lista de
!alores de proceso.
*T (747CTI0D6(CR77D 0D L74+6R7F-7(T F0R 9ca#po:.
4a si%uiente !ariante per#ite crear un blo<ue de proceso asociado a la tecla de funci@n F1 =ayuda en el estAndar>.
Dor#al#ente lo <ue codifica en el blo<ue de proceso es una !entana de ayuda.
*T (747CTI0D6(CR77D 0D R*DI0;-TT0D 3R0-+ 9bot@n:.
4a si%uiente !ariante nos per#ite asociar un blo<ue de proceso a un radiobutton =%rupo de botones>. 7l blo<ue proceso se
acti!a despuBs de <ue el siste#a procesa el radiobutton definido en 9bot@n:. (i acti!a#os un #ensa1e de error en el
blo<ue de proceso !uel!e a aparecer la pantalla de selecci@n. (@lo el radiobutton relacionado puede ser #odificado.
*T (747CTI0D6(CR77D 0D ;40CK 9blo<ue:.
4a si%uiente !ariante nos per#ite acti!ar un blo<ue de proceso cuando el siste#a ter#ina de procesar un blo<ue.
Recorde#os <ue en un blo<ue de pantalla de selecci@n se define con la sentencia (747CTI0D6(CR77D. (i acti!a#os un
#ensa1e de error en el blo<ue de proceso aparece de nue!o la pantalla de selecci@n. (@lo los ca#pos del blo<ue
relacionado se pueden #odificar.
*T (747CTI0D6(CR77D 0-T+-T.
4a si%uiente !ariante nos per#ite acti!ar un blo<ue de proceso antes de <ue el siste#a #uestre la pantalla de selecci@n
=parte +;0 de la l@%ica de proceso>. 7ste blo<ue de proceso se puede utili5ar? por e1e#plo? para #o!er !alores a los
ca#pos de la pantalla de selecci@n? pero hay <ue tener en cuenta <ue cada !e5 <ue se procesa la pantalla de selecci@n
=puede haber #ensa1es de error en otros e!entos *T (747CTI0D6(CR77D> se procesa este e!ento. 7n cierta ocasiones
puede ser #As reco#endable utili5ar el e!ento IDITI*4IY*TI0D.
Ee!plo .:
(747CT60+TI0D( D*7 F0R (C6R7+ID 0DIF ID GCY.
...
*T (747CTI0D6(CR77D 0-T+-T.
400+ *T (CR77D.
CL7CK (CR77D63R0-+1 N IGCYI.
(CR77D6IDT7D(IFI7D N I1I.
0DIFC (CR77D.
7DD400+.
START+O'+SE"E$TIO#
Definicin: 7ste e!ento nos per#ite crear un blo<ue de proceso despuBs de procesar la pantalla de selecci@n y antes del
e!ento 37T.
Sintaxis:
40
(T*RT60F6(747CTI0D.
(e puede utili5ar para car%ar cierta infor#aci@n despuBs de procesar la pantalla de selecci@n y antes del e!ento 37T.
E#D+O'+SE"E$TIO#
Definicin: 7ste e!ento define un blo<ue de proceso <ue se e1ecuta despuBs de <ue se hayan procesado los e!entos 37T?
es decir? despuBs de haber sido leMdas todas las tablas especificadas de la base de datos l@%ica asociada al pro%ra#a.
Sintaxis:
7DD60F6(747CTI0D.
7ste e!ento puede ser utili5ado? por e1e#plo? para escribir la infor#aci@n <ue he#os leMdo de las tablas de diccionario y
he#os %rabado en tablas internas.
S%)*IT
Definicin: 71ecuta un pro%ra#a.
Sintaxis:
(-;IT [ 9pro%ra#a: Z =9pro%ra#a:> \ W 4ID76(IY7 9colu#nas: X W 4ID76C0-DT 9filas: X
W T0 (*+6+004
W D7(TID*TI0D 9destino: X
W C0+I7( 9copias: X
W 4I(T D*7 9no#bre: X
W C0H7R T7GT 9te8to: X
W 4I(T *-TL0RITC 9autori5aci@n: X
W ID7DI*T74C 9fla%: X
W K77+ ID (+004 9fla%: X
W D7& 4I(T ID7DTIFIC*TI0D 9fla%: X
W D*T*(7T 7G+IR*TI0D X
W 4ID76C0-DT 9lMneas: X
W 4ID76(IY7 9colu#nas: X
W 4*C0-T 9layout: X
W (*+ C0H7R +*37 9#odo: X
W C0H7R +*37 9fla%: X
W R7C7IH7R 9receptor: X
W D7+*RT7DT 9departa#ento: X
W *RCLIH7 0D7 9#odo: X
W *RCLIH7 +*R*7T7R( 9parA#etros: X
W &ITL0-T (+004 DCD+R0 X X
W (+004 +*R*7T7R( 9parA#etros: X
W *RCLIH7 +*R*7T7R( 9parA#etros: X
W &ITL0-T (+004 DCD+R0 X
W HI* (747CTI0D6(CR77D X
W *DD R7T-RD X
W 7G+0RTID3 4I(T T0 70RC X
W -(7R 9usuario: HI* P0; 91ob: D-;7R 9nO#ero: X
W -(ID3 (747CTI0D6(7T( 0F +R03R* 9pro%ra#a1: X.
7sta sentencia lla#a al R7+0RT 9pro%ra#a:. 7l no#bre del pro%ra#a se puede especificar dinA#ica#ente utili5ando una
!ariable entre parBntesis. 7l si%nificado de las clAusulas es el si%uienteE
4ID76(IY7 6: 7l pro%ra#a se !isuali5a con el nO#ero de colu#nas definido en 9colu#nas:.
4ID76C0-DT 6: 7l pro%ra#a se !isuali5a con el nO#ero de lMneas definido en 9filas:.
T0+ (*+6(+004 6: 7specifica los parA#etros de i#presi@n. 7l si%nificado de las clAusulas es el si%uienteE
D7(TID*TI0D 6: Dispositi!o de salida.
C0+I7( 6: DO#ero de copias.
4I(T D*7 6: Do#bre del listado.
4I(T D*T*(7T 6: Do#bre del spool dataset.
41
C0H7R T7GT 6: TMtulo de la cubierta.
4I(T *-TL0RITC 6: *utori5aci@n de display.
ID7DI*T74C 6: I#presi@n in#ediata.
K77+ ID (+004. 3uardar el listado despuBs de la i#presi@n.
D7& 4I(T ID7DTIFIC*TI0D 6: Identificaci@n del nue!o listado.
D*T*(7T 7G+IR*CI0D 6: Fecha de e8piraci@n.
4ID76C0-DT 6: 4Mneas por pA%ina.
4ID76(IY7 6: Colu#nas del infor#e.
4*C0-T 6: For#ato de i#presi@n.
(*+ C0H7R +*37 6: Con carAtula de i#presi@n.
C0H7R +*37 6: (elecci@n de cubierta.
R7C7IH7R 6: -suario receptor.
D7+*RT7DT 6: Do#bre del departa#ento.
*RCLIH7 0D7 6: odo de archi!o.
*RCLIH7 +*R*7T7R( 6: +arA#etros de archi!o.
&ITL0-T (+004 DCD+R0 6: (alta la pantalla de control de i#presi@n.
(+004 +*R*7T7R( 6: +arA#etros de i#presi@n.
HI* (747CTI0D6(CR77D 6: *parece al usuario la pantalla de selecci@n.
*DD R7T-RD 6: 7l pro%ra#a lla#ador per#anece en espera #ientras se e1ecuta el pro%ra#a lla#ado. Cuando
el pro%ra#a lla#ado ter#ina se de!uel!e control al pro%ra#a lla#ador. +ara ello se crea una sesi@n interna.
7G+0RTID3 4I(T T0 70RC 6: 7l listado de salida del pro%ra#a lla#ado no aparece en pantalla. 7n su lu%ar
se %uarda en #e#oria. 7l pro%ra#a lla#ador puede leer el listado de la #e#oria. 7sta clAusula no puede ser
utili5ada en co#binaci@n con la clAusula T0 (*+6(+004.
-(7R 9usuario: HI* P0; 91ob: D-7R 9n: 6: (e utili5a para incluir un paso de 1ob en un proceso de
bac,%round.
-(ID3 (747CTI0D6(7T( 0F +R03R* 6: 7l pro%ra#a lla#ado utili5a las !ariantes del pro%ra#a
9pro%ra#a1:. (i los parA#etros y criterios de selecci@n de a#bos pro%ra#as no coinciden? las !ariables de
9pro%ra#a1: se pueden borrar.
4os #ensa1es de error <ue se pueden producir son los si%uientesE
40*DJ+R03R*JD0TJF0-DD 6: 7l pro%ra#a especMfico no e8iste.
(-;ITJ&R0D3JTC+7 6: 7l pro%ra#a especificado no es un report.
(-;ITJI+0RTJ0D4CJ+*R*7T7R 6: Halor in!Alido pasado por parA#etro.
(-;ITJ&R0D3J(I3D 6: Halor in!Alido pasado a un criterio de selecci@n.
42
(-;ITJIDJIT*;JI44J(TR-CT-R7 6: Tabla pasado co#o criterio con estructure err@nea.
4a sentencia s1bmit? con una deter#ina clAusula ta#biBn nos per#ite aVadir pasos a un 1ob creado con el #@dulo de
funci@n P0;J0+7D.
(-;IT 9report: *DD R7T-RD
-(7R 9usuario:
HI* P0; 9no#breJ1ob: D-;7R 9idJ1ob:
T0 (*+6(+004 (+004 +*R*7T7R( 9parA#etrosJi#presi@n:
*RCLIH7 +*R*7T7R( 9parA#etroJarchi!o:
&ITL0-T (+004 DCD+R0.
*ODI'& S$REE#
Definicin: odifica ciertos atributos de ca#pos de un dynpro. (entencia utili5ada para #odificar los atributos de los
ca#pos de pantalla.
Sintaxis:
0DIFC (CR77D.
4as #odificaciones reali5adas en los atributos de ca#pos de un dynpro se deben reali5ar en un bucle 400+ *T (CR77D ...
7DD400+. 7n el siste#a e8iste una tabla deno#inada (CR77D donde se %uardan los atributos de los ca#pos de un
dynpro. Dicha tabla? y dentro de un bucle? se puede actuali5ar los !alores de la tabla para lue%o #odificarla con esta
sentencia. 7sta sentencia solo se puede utili5ar en el proceso +;0 de un dynpro o de la pantalla de selecci@n de un dynpro.
7sta sentencia solo tiene sentido en co#binaci@n con la sentencia 400+ *T (CR77D.
"OOP AT S$REE# ;; E#D"OOP
Definicin: 7sta sentencia nos per#ite acceder a los atributos de todos los ca#pos de un dynpro.
Sintaxis:
400+ *T (CR77D.
...
7DD400+.
Todos los ca#pos de un dynpro se al#acenan en la tabla del siste#a (CR77D con sus atributos. 4a sentencia 400+ *T
(CR77D sitOa la infor#aci@n de cada ca#po sobre la lMnea de cabecera de la tabla del siste#a. 7sta sentencia se puede
utili5ar en co#binaci@n con la sentencia 0DIFC (CR77D para #odificar los atributos de cual<uier ca#po de la dynpro?
aun<ue esta acci@n solo se puede reali5ar en el +;0 =+orcess ;efore 0utput> del dynpro. (i esta sentencia se utili5a en
co#binaci@n de una step-loop =bucle sobre una tabla de pantalla> s@lo !ere#os los atributos de la lMnea de la tabla de
pantalla <ue se estA tratando en ese #o#ento. 4os ca#pos de un step-loop de pantalla no deben ser #odificados fuera del
bucle step-loop.
4os ca#pos de la tabla screen son los si%uientesE
$a!po Tipo lg; Significado
D*7 C '0 Do#bre del ca#po.
3R0-+1 C ' 3rupo de e!aluaci@n de #odificaci@n 1.
3R0-+" C ' 3rupo de e!aluaci@n de #odificaci@n ".
3R0-+' C ' 3rupo de e!aluaci@n de #odificaci@n '.
3R0-+. C ' 3rupo de e!aluaci@n de #odificaci@n ..
R7F-IR7D C 1 Ca#po obli%atorio.
ID+-T C 1 Ca#po de entrada.
0-T+-T C 1 Ca#po de salida.
IDT7D(IFI7D C 1 Ca#po con intensidad.
IDHI(I;47 C 1 Ca#po in!isible.
47D3TL G 1 4on%itud del ca#po.
*CTIH7 C 1 Ca#po acti!o.
DI(+4*CJ'D C 1 *tributo for#ato '6D
H*4-7JL74+ C 1 *tributo de ca#po de ayuda.
4os atributos se acti!an con el !alor I1I y se desacti!an con el !alor I0I.
Ee!plo:
C0D(T*DT( 0FF H*4-7 I0I.
400+ *T (CR77D.
43
(CR77D6ID+-T N 0FF.
0DIFC (CR77D.
7DD400+.
Con esta bucle indica#os <ue todos los ca#pos solo son de salida.
"OOP ;; E#D"OOP
Definicin: 7sta sentencia lee una tabla interna lMnea a lMnea a tra!Bs de un bucle de lectura. +er#ite reali5ar un bucle en
una tabla de pantalla.
Sintaxis:
400+ *T 9tabla: W IDT0 9Area6traba1o: X W FR0 9n1: X W T0 9n": X
W &L7R7 9condici@n: X.
...
7DD400+.
Con la clAusula IDT0 9Area6traba1o: especifica#os un Area de traba1o? la cual se con!ierte en el Area de destino.
7n el caso de tablas con cabeceras de lMnea? esta clAusula es opcional. 4a tabla interna 9tabla: se lee lMnea a
lMnea sobre 9Area6traba1o: =si se especifica> o sobre el Area de traba1o de la tabla 9tabla:. +or cada lMnea leMda el
siste#a procesa el blo<ue de sentencias del bucle 400+ .. 7DD400+. Con la sentencia *T se puede controlar el
flu1o de blo<ue de sentencias. ientras se procesa el blo<ue de sentencias? la !ariable (C6T*;IG contiene el
Mndice de la actual lMnea tratada. 7l bucle ter#ina en cuanto se han leMdo todas las lMneas de la tabla interna.
DespuBs de salir del bucle? la !ariable (C6(-;RC serA 0 si al #enos una lMnea ha sido leMda? si no? tendrA el !alor
..
(e puede restrin%ir el nO#ero de lMneas para leer? con las clAusulas FR0? T0 y &L7R7. Con la clAusula FR0?
en 9n1: especifica#os el Mndice desde donde co#en5are#os la lectura. Con la clAusula &L7R7 especifica#os
cual<uier e8presi@n l@%ica en 9condici@n:. 7l pri#er operando de la e8presi@n l@%ica debe ser un co#ponente de
la estructura de la lMnea. Do se puede utili5ar la clAusula &L7R7 si en el blo<ue de proceso se utili5a la sentencia
*T. Con las clAusulas FR0 y T0 li#ita#os las lecturas de la tabla interna? #ientras <ue con la clAusula &L7R7
lee#os todas las entradas para poder aplicar la e8presi@n l@%ica. +or ra5ones de opti#i5aci@n? y sie#pre <ue
poda#os? se debe utili5ar las clAusulas FR0 y T0.
400+ W &ITL C0DTR04 9tabla6control: X
...
7DD400+.
7sta !ariante per#ite reali5ar un bucle sobre una tabla de pantalla. 4a tabla de pantalla puede ser una tabla de control? y si
es asM? se debe utili5ar la clAusula &ITL C0DTR04.
400+ *T 9tabla: C-R(0R 9cursor: W &ITL C0DTR04 9tabla6control: X
W FR0 9lMnea1: X W T0 9lMnea": X.
...
7DD400+.
7sta !ariante nos per#ite rellenar los ca#pos de la tabla de pantalla a tra!Bs de ca#pos de una tabla interna. 7l si%nificado
de las clAusulas es el si%uienteE
C-R(0R define el cursor de la tabla interna.
&ITL C0DTR04 define una tabla de control.
FR0 define la lMnea desde donde reali5a#os el traspaso de datos.
T0 define la lMnea lM#ite de asociaci@n con la tabla de la pantalla.
Ee!plo .:
D*T*E ;73ID 0F T 0CC-R( 100?
;*R7*=/>? ;4DC7=/>?
7DD 0F T.
400+ *T T FR0 7 T0 ).
&RIT7E Q T6;*R7*? T6;4DC7.
7DD400+.
Ee!plo /:
D*T*E ;73ID 0F T 0CC-R( 100?
;*R7*=/>? ;4DC7=/>?
7DD 0F T.
44
D*T* C+J;*R7* 4IK7 T6;*R7*.
C+J;*R7* N I01I.
400+ *T T &L7R7 ;*R7* N C+J;*R7*.
&RIT7E Q T6;*R7*? T6;4DC7.
APPE#D
Definicin(e utili5a para aVadir re%istros en una tabla interna.
Sintaxis:
*++7DD [ 9Area6traba1o: T0 Z IDITI*4 4ID7 T0\ 9tabla:.
7sta sentencia aVade una lMnea sobre la tabla 9tabla:. 4a sentencia *++7DD no co#prueba duplicidades en la cla!e
estAndar. DespuBs de cada sentencia *++7DD? la !ariable del siste#a (C6T*;IG contiene el Mndice de la lMnea aVadida.
Con la clAusula 9Area6traba1o: T0 se especifica el Area de traba1o <ue <uere#os aVadir. Con tablas internas con
cabecera de lMnea se puede o#itir esta clAusula? los datos serAn leMdos del Area de traba1o de la tabla interna.
7n lu%ar de esta opci@n se puede utili5ar IDITI*4 4ID7 T0? la cual aVade una lMnea en la tabla interna con los
!alores iniciales correspondientes a cada co#ponente de la tabla.
*++7DD 4ID7( 0F 9tabla1: [ FR0 9n1: \ Z [T0 9n":\ T0 9tabla":.
+ara aVadir parte del contenido de una tabla interna =o toda la tabla> al final de otra tabla? se puede utili5ar la sentencia
*++7DD con el for#ato anterior.
DespuBs de e1ecutarse la sentencia la !ariable del siste#a (C6T*;IG tiene el Mndice de la Olti#a lMnea aVadida. 7ste #Btodo
de aVadir lMneas de una tabla sobre otra es de tres a cuatro !eces #As rApido si lo hace#os lMnea a lMnea. (ie#pre <ue sea
posible? es #e1or utili5ar este #etodo.
(i no se especifican las clAusulas FR0 9n1: y T0 9n": la tabla 9tabla1: se copia entera sobre la tabla
9tabla":. Con la clAusula FR0 9n1: especifica#os desde donde se copia la tabla. Con T0 9n": especifica#os
hasta d@nde se copia la tabla. 9n1: y 9n": son Mndices de la tabla interna.
*++7DD [ 9Area6traba1o: T0 \ 9tabla: (0RT7D ;C 9ca#po:.
Con este for#ato de la sentencia las lMneas de la tabla no son aVadidas al final de la tabla? sino <ue son aVadidas en la tabla
9tabla: ordenadas por el ca#po 9ca#po: de for#a descendente. 4a tabla interna s@lo puede contener las entradas
especificadas en la clAusula 0CC-R(. 7sto es una e8cepci@n a la re%la %eneral. (i se aVade una lMnea y con ello
rebasa#os el lM#ite definido? la Olti#a lMnea es eli#inada. +or este #oti!o? esta sentencia para crear tablas ran0ing no #uy
%randes. (i <uere#os ordenar tablas de #uchas entradas es preferible utili5ar las sentencias (0RT por ra5ones de
rendi#iento.
Ee!plo .
D*T*E ;73ID 0F IT*; 0CC-R( 0?
D0;R7=1/>?
*+744ID0(=.0>?
7DD 0F IT*;.
IT*;6D0;R7 N IPor%eI.
IT*;6*+744ID0( N I(#ithI.
*++7DD IT*;.
Ee!plo /
D*T*E ;73ID 0F IT*; 0CC-R( 0?
D0;R7=1/>?
*+744ID0(=.0>?
7DD 0F IT*;?
;IT*; 4IK7 IT*; 0CC-R( 0 &ITL L7*D7R 4ID7.
IT*;6D0;R7 N IPor%eI. *++7DD IT*;.
IT*;6D0;R7 N I(#ithI. *++7DD IT*;.
IT*;6D0;R7 N IDa!idI. *++7DD IT*;.
*++7DD 4ID7( 0F IT*; FR0 1 T0 IT*;.
SORT
Definicin: 0rdena una tabla interna.
45
Sintaxis:
(0RT 9tabla: W 9orden: XW *( T7GT X W ;C 9ca#po1: W 9orden: XW *( T7GT X ... 9ca#pon: W 9orden:XW *( T7GT X X.
7l si%nificado de las clAusulas es el si%uienteE
;C 6: (i no la utili5a#os la tabla interna es ordenada por la cla!e estAndar. +ara definir un criterio de ordenaci@n
distinto a la cla!e estAndar se utili5a la clAusula ;C6 Con la clAusula ;C los ca#pos se ordenarAn de acuerdo con
los co#ponentes especificados 9ca#po1: ... 9ca#pon:. 7stos co#ponentes puede ser de cual<uier tipo =incluido
tablas>. 7l nO#ero de ca#pos <ue se pueden ordenar estA restrin%ido a "/0. 7l siste#a utili5a las opciones
utili5adas antes de ;C =9orden: y *( T7GT> co#o !alores por defecto para los ca#pos especificados en ;C. (e
pueden especificar el criterio de ordenaci@n en tie#po de e1ecuci@n? utili5ando = 9no#bre: > en lu%ar de
9ca#po:. 4a !ariable 9no#bre: contiene el no#bre del co#ponente de la tabla interna. (i la !ariable 9no#bre:
estA !acMa? el siste#a i%norarA el criterio de ordenaci@n? si contiene un no#bre de co#ponente in!Alido? producirA
un error en tie#po de e1ecuci@n. +ara cual<uier ca#po? co#ponente de una tabla interna? se puede indicar un
offset =posici@n> y lon%itud. 7n 9orden: se puede especificar c@#o se debe ordenar la tabla? de for#a
descendente? D7(C7DDID3? o de for#as ascendente? *(C7DDID3?. +or defecto el orden es ascendente.
*( T7GT 6: Influye en el #Btodo de ordenaci@n para ca#pos alfanu#Bricos. (in esta opci@n? el siste#a ordena
los ca#pos binaria#ente? de acuerdo con el siste#a donde ten%a#os el siste#a (*+ RQ'. Con la opci@n *(
T7GT? el siste#a ordena los ca#pos alfanu#Bricos de for#a alfabBtica. (i especifica#os *( T7GT antes de la
clAusula ;C? s@lo afectarA a los ca#po de tipo C. (i lo especifica#os despuBs de la clAusula ;C s@lo podrA ser
utili5ada en ca#pos de tipo C? con lo cual la ordenaci@n no es estable. 7sto <uiere decir <ue lMneas con la #is#a
cla!e de ordenaci@n no tienen por <uB ser ordenadas de la #is#a for#a en distintas e1ecuciones. (i no hay
suficiente espacio en #e#oria para ordenar la tabla? el siste#a escribe los datos en un fichero e8terno te#poral.
7l no#bre de ese fichero estA especificado en el parA#etro DIRJ(0RTT+ del perfil de arran<ue de (*+.
Ee!plo:
D*T*E 0DR=7>? D*T7 TC+7 D? +0(ITI0D='> TC+7 D?
C-(T07R=16>?
+DR=/> TC+7 D? D*7=10>? -DIT( TC+7 I?
0RD7R( TC+7 I.
FI74D63R0-+(E L7*D7R? 0RD7R? +R0D-CT? D*T7JFIR(T.
ID(7RT 0DR D*T7 +0(ITI0D IDT0 L7*D7R.
ID(7RT C-(T07R IDT0 0RD7R.
ID(7RT +DR D*7 -DIT( IDT0 +R0D-CT.
ID(7RT D*T7 0DR +0(ITI0D IDT0 D*T7JFIR(T.
0DR N I3F0001"I. D*T7 N I199"1"".I.
+0(ITI0D N I000I. C-(T07R N I3ood friend =".>I.
7GTR*CT 0RD7R.
*DD 1 T0 +0(ITI0D.
+DR N I1"'./I. D*7 N I(cre2I. -DIT( N 100.
7GTR*CT +R0D-CT.
*DD 1 T0 +0(ITI0D.
+DR N I"'./6I. D*7 N IDailI. -DIT( N "00.
7GTR*CT +R0D-CT.
0DR N I000'.I. D*T7 N I199"0.01I.
+0(ITI0D N I000I. C-(T07R N Ioney#a,erI.
7GTR*CT 0RD7R.
*DD 1 T0 +0(ITI0D.
+DR N I"'./6I. D*7 N IDailI. -DIT( N '00.
7GTR*CT +R0D-CT.
*DD 1 T0 +0(ITI0D.
+DR N I'./67I. D*7 N ILa##erI. -DIT( N ..
7GTR*CT +R0D-CT.
0DR N I3F00011I. D*T7 N I199"1"".I.
+0(ITI0D N I000I. C-(T07R N I3ood friend =1.>I.
7GTR*CT 0RD7R.
*DD 1 T0 +0(ITI0D.
+DR N I'./67I. D*7 N ILa##erI. -DIT( N /.
7GTR*CT +R0D-CT.
(0RT ;C D*T7JFIR(T.
400+.
*T 0RD7R.
&RIT7E Q? Q D*T7? 0DR? +0(ITI0D?
C-(T07R? IorderedEI.
7DD*T.
*T +R0D-CT.
&RIT7E Q D*T7? 0DR? +0(ITI0D?
+DR? D*7? -DIT(.
7DD*T.
46
7DD400+.
7l resultado en pantalla serMaE
010.199" 000'. 000 oney#a,er orderedE
010.199" 000'. 001 "'./6 Dail '00
010.199" 000'. 00" './67 La##er .
".1"199" 3F00011 000 3ood friend =1.> orderedE
".1"199" 3F00011 001 './67 La##er /
".1"199" 3F0001" 000 3ood friend =".> orderedE
".1"199" 3F0001" 001 1"'./ (cre2 100
".1"199" 3F0001" 00" "'./6 Dail "00
I#SERT
Definicin: (e utili5a para insertar lMneas en una tabla interna antes de una posici@n deter#inada.
Sintaxis:
ID(7RT W 9Area6traba1o: IDT0 Z IDITI*4 4ID7 IDT0 X 9tabla: W IDD7G 9Mndice: X.
Con 9Area6traba1o: IDT0 especifica#os el Area de traba1o <ue !a#os a insertar. (i o#iti#os esta opci@n? el Area de traba1o
<ue se !a a insertar serA la asociada con la tabla interna. 7l si%nificado de las clAusulas es el si%uienteE
IDITI*4 4ID7 T0 6: inserta una lMnea con los !alores iniciales de cada ca#po.
IDD7G 6: Inserta una lMnea antes de la posici@n indicada en 9Mndice: y la nue!a tiene el Mndice 9Mndice:.
(i la tabla tiene 9Mndice: 6 1 entradas la lMnea se insertara en la Olti#a posici@n. (i la tabla tiene #enos de 9Mndice: 6 1
posiciones la lMnea no se insertara. (i se produce al%On error al insertar la lMnea la !ariable (C6(-;RC !aldrA .? en caso
contrario !aldrA 0.
(i la sentencia se utili5a sin la clAusula IDD7G s@lo se podrA utili5ar en un 400+ .. 7DD400+. 7l siste#a insertara la lMnea
antes de la lMnea tratada en el bucle.
ID(7RT 4ID7( 0F 9tabla1: W FR0 9n1: X W T0 9n": X IDT0 9tabla": W IDD7G 9Mndice: X
(i no se especifican las clAusulas FR0 9n1: y T0 9n": la tabla 9tabla1: se inserta entera sobre la tabla
9tabla":. 7specificando estas clAusulas se puede indicar la pri#era y la Olti#a lMnea <ue se !a insertar. 9n1: y
9n": son Mndice de la tabla interna.
(i especifica#os la clAusula IDD7G 9Mndice:? la lMnea se insertarA antes de la lMnea con el Mndice 9Mndice:. (i la
sentencia ID(7RT se utili5a sin la clAusula IDD7G s@lo se podrA ser utili5ada en un bucle 400+ .. 7DD400+. 7l
siste#a inserta la lMnea tratada en el bucle. DespuBs de e1ecutarse la sentencia la !ariable del siste#a (C6T*;IG
tiene el Mndice de la Olti#a lMnea aVadida. Dependiendo del ta#aVo de la tabla interna <ue hay <ue copiar? con
este #Btodo el proceso en "0 !eces #As rApido <ue insertarlas lMnea a lMnea.
4a sentencia ID(7RT puede ser utili5ada para insertar una o !arias lMneas =a partir de una tabla interna> en una tabla de la
base de datos. (i no sabe#os si la cla!e pri#aria e8iste? se debe utili5ar la sentencia 0DIFC. (e puede utili5ar una !ista
co#o especificaci@n de tabla? sie#pre y cuando la !ista ha%a referencia a una sola tabla.
ID(7RT IDT0 [ 9tabla: Z =9ca#po:> \ W C4I7DT (+7CIFI7D X H*4-7( 9Area:.
7sta sentencia se utili5a para insertar una lMnea a una tabla de diccionario. 7l contenido del Area de traba1o 9Area: serA
escrito en la tabla de la base de datos 9tabla:. 4a tabla tiene <ue estar declarada en la sentencia T*;47( y la Area de
traba1o 9Area: tiene <ue tener la #is#a estructura <ue 9tabla: =se reco#ienda utili5ar el operador 4IK7 en la sentencia
D*T* para declararla de la #is#a estructura>.
(i la tabla no contiene una lMnea con la #is#a cla!e pri#aria <ue la especificada en el Area de traba1o 9Area:? la !ariable
(C6(-;RC !aldrA 0? en caso contrario? la lMnea no se insertara y la !ariable (C6(-;RC !aldrA ..
+ara especificar el no#bre de la tabla en tie#po de e1ecuci@n utili5are#os la opci@n =9ca#po:>. 7n tie#po de e1ecuci@n se
debe rellenar con el no#bre de la tabla donde reali5are#os la operaci@n de inserci@n.
ID(7RT [ 9tabla: Z =9ca#po:> \ W C4I7DT (+7CIFI7D X W FR0 9field6strin%: X.
7sta !ariante tiene el #is#o efecto <ue la !ariante !ista anterior#ente.
(e trata de una !ersi@n simplificada donde la clAusula IDT0 no se especifica y en lu%ar de H*4-7( se pone
FR0.
(i no se especifica la clAusula FR0? los datos <ue hay <ue insertar serAn los del Area de traba1o de la tabla
9tabla:. (i especifica#os el no#bre de la tabla en tie#po de e1ecuci@n? la clAusula FR0 es obli%atoria.
47
ID(7RT [ 9tabla: Z =9ca#po:> \ W C4I7DT (+7CIFI7D X FR0 T*;47 9tabla6interna:
W *CC7+TID3 D-+4IC*T7 K7C(X.
7n esta !ariante se puede insertar #As de una lMnea en la tabla de diccionario. 4a estructura de la tabla interna debe ser la
#is#a <ue la estructura de la tabla en la <ue se !an a insertar lMneas. 4as lMneas serAn e1ecutadas en una sola operaci@n. (i
la sentencia se e1ecuta correcta#ente (C6(-;RC !aldrA 0? en caso contrario !aldrA ..
(i al%una de las lMneas de la tabla interna no puede ser insertada? el siste#a acti!a un error en tie#po de e1ecuci@n =suele
ser por duplicaci@n de cla!es>. +ara e!itar este error en tie#po de e1ecuci@n? se utili5a la clAusula *CC7+TID3 D-+4IC*T7
K7C(. Con estos for5a#os al siste#a a saltar las lMneas <ue no puede insertar. 4a !ariable (C6D;CDT tendre#os las lMneas
insertadas y la !ariable (C6(-;RC !aldrA . cuando se salte al%una lMnea.
7s #As eficiente utili5ar esta Olti#a sentencia para insertar un con1unto de lMneas? <ue utili5ar las otras !ariantes <ue las
insertarMa de en una en una.
Ee!plo .:
D*T*E H*4-7 TC+7 I?
IT*; TC+7 I 0CC-R( 100 &ITL L7*D7R 4ID7.
IT*; N /.
H*4-7 N '6.
ID(7RT IT*; IDD7G 1.
ID(7RT H*4-7 IDT0 IT*; IDD7G ".
ID(7RT IDITI*4 4ID7 IDT0 IT*; IDD7G ".
Ee!plo /:
TC+7( D*7=10> TC+7 C.
D*T*E D*7JT*;J1 TC+7 D*7 0CC-R( /?
D*7JT*;J" TC+7 D*7 0CC-R( /.
*++7DD I*liceI T0 D*7JT*;J1.
*++7DD IarthaI T0 D*7JT*;J1.
*++7DD IRuthI T0 D*7JT*;J1.
*++7DD ILarryI T0 D*7JT*;J".
*++7DD I&alterI T0 D*7JT*;J".
ID(7RT 4ID7( 0F D*7JT*;J1 FR0 " IDT0 D*7JT*;J" IDD7G ".
*ODI'&
Definicin: (e utili5a para sustituir lMneas de una tabla interna.
Sintaxis:
0DIFC 9tabla: W FR0 9Area6traba1o: X W IDD7G 9Mndice: X.
7l Area de traba1o 9Area6traba1o: sustituye a la lMnea de la tabla interna.
7n el caso de tablas internas con lMneas de cabecera? la clAusula FR0 es opcional.
(i utili5a#os la clAusula IDD7G? la lMnea <ue hay <ue ree#pla5ar serA la e8istente con el Mndice 9Mndice:. (i el
siste#a puede reali5ar la #odificaci@n? la !ariable del siste#a (C6(-;RC es 0. (i la tabla interna tiene #enos
lMneas <ue las indicadas en 9Mndice:? la #odificaci@n no se reali5a y (C6(-;RC !ale .. (i no utili5a#os la
clAusula IDD7G? la sentencia solo puede ser procesada en un bucle 400+ .. 7DD400+. 7n este caso la lMnea
<ue se #odificara serA la <ue se este tratando.
0DIFC [ 9tabla: Z =9tabla:> \W C4I7DT (+7CIFI7D X W FR0 9Area: X.
(entencia utili5ada para #odificar o insertar re%istros de una tabla de la base de datos. Con esta sentencia tene#os dos
posibilidades. (i la tabla de base de datos no tiene nin%una lMnea con la #is#a cla!e pri#era se inserta. 7n caso contrario
se #odifica. +or cuestiones de rendi#iento se debe li#itar su uso al #A8i#o.
Con 9tabla: se especifica el no#bre de la tabla de for#a estAtica. +ara especificar la tabla de for#a dinA#ica se utili5a la
opci@n =9tabla:>.
Con la especificaci@n dinA#ica? la clAusula FR0 es obli%atoria.
0DIFC [ 9tabla: Z =9tabla:> \W C4I7DT (+7CIFI7D X W FR0 T*;47 9Area: X.
7sta sentencia #odifica o inserta el contenido de Area de traba1o 9Area: sobre la tabla de la base de datos.
4as lMneas de la tabla interna 9tabla6interna: #odifican las lMneas de la tabla de la base de datos si la cla!e pri#era e8iste.
+ara el resto de entradas de la tabla interna? se aVaden a la tabla. (C6(-;RC es sie#pre 0. (C6D;CDT to#a el !alor del
nO#ero de entradas de la tabla interna. Cuando se aVaden entradas? la sentencia funciona co#o la sentencia ID(7RT y
cuando se #odifican entradas? las sentencias funciona co#o la sentencia 0DIFC.
48
$O""E$T
Definicin: +ara rellenar lMneas en una tabla interna con la co#probaci@n por parte del siste#a de <ue la cla!e estAndar de
la tabla serA Onica.
Sintaxis:
C0447CT W 9Area6traba1o: IDT0 X9tabla: W (0RT7D ;C 9ca#po: X.
+ara especificar un Area de traba1o distinta al Area de traba1o de la tabla interna se utili5a la clAusula 9Area6
traba1o: IDT0.
7l siste#a co#prueba si e8iste al%una lMnea en la tabla interna con la #is#a cla!e estAndar. Recorde#os <ue la
cla!e estAndar esta co#puesta de todos los ca#pos no nu#Bricos. De no e8istir una lMnea con la #is#a cla!e? el
efecto de esta sentencia es el #is#o <ue el de la sentencia *++7DD? aVade una entrada en la tabla. (i e8iste ya
una lMnea con la #is#a cla!e estAndar? no se inserta nin%una lMnea a la tabla interna^ si hay ca#pos nu#Bricos? se
su#arAn.
4a clAusula (0RT7D ;C 9ca#po: no debe utili5arse. 7n futuras !ersiones esta clAusula desaparecerA. 7n su
lu%ar se puede utili5ar la sentencia *++7DD.
Ee!plo:
D*T*E ;73ID 0F C0+*DI7( 0CC-R( 10?
D*7="0>?
(*47( TC+7 I?
7DD 0F C0+*DI7(.
C0+*DI7(6D*7 N IDuc,I. C0+*DI7(6(*47( N 10.
C0447CT C0+*DI7(.
C0+*DI7(6D*7 N ITi%erI. C0+*DI7(6(*47( N "0.
C0447CT C0+*DI7(.
C0+*DI7(6D*7 N IDuc,I. C0+*DI7(6(*47( N '0.
C0447CT C0+*DI7(.
7l resultado en la tabla companies serMa el si%uienteE

#A*E SA"ES
Duc, .0
Ti%er "0
READ TA)"E
Definicin: (e utili5a para leer una sola lMnea de una tabla interna.
Sintaxis:
R7*D T*;47 9tabla: W IDT0 9Area6traba1o: X IDD7G 9Mndice:.
Con la clAusula IDT0 especifica#os un Area de traba1o distinto a la lMnea de cabecera de la tabla. 4a clAusula IDT0 es
opcional si la tabla especificada tiene lMnea de cabecera. 7l siste#a lee la lMnea correspondiente al Mndice 9Mndice:. (i el
siste#a encuentra la lMnea con el Mndice indicado la !ariable (C6(-;RC !aldrA 0 y (C6T*;IG contiene el Mndice de la lMnea
0^ sino? (C6(-;RC es distinto de 0. (i 9Mndice: es #enor o i%ual a 0 se produce un error en tie#po de e1ecuci@n. (i el
Mndice e8cede del ta#aVo de la tabla? (C6(-;RC es ..
R7*D T*;47 9tabla: W IDT0 9Area6traba1o: X &ITL K7C 9cla!e: W ;ID*C (7*RCL X.
Con esta !ariante se puede leer de una tabla interna a tra!Bs de una cla!e particular o una tabla estAndar. Con esta !ariante
ta#biBn se puede e1ecutar una bOs<ueda binaria en lu%ar de la secuencial. 9cla!e: puede tener las si%uientes opcionesE
&ITL K7C 9ca#po1: N 9!alor1: ... 9ca#pon: N 9!alorn: 6: 4os ca#pos 9ca#po1: son ca#pos de la tabla. 4os
ca#pos 9!alor1: son los !alores <ue deben coincidir con los ca#pos de la tabla.
&ITL K7C N 9!alor: 6: 9!alor: es una lMnea co#pleta de la tabla.
&ITL K7C 9!alor: 6: Con esta opci@n el siste#a co#para la parte i5<uierda de la tabla con el ca#po 9!alor:. 4a
lon%itud <ue hay <ue co#parar !iene definida por la lon%itud del ca#po 9!alor:.
R7*D T*;47 9tabla: W IDT0 9Area6traba1o: X W ;ID*C (7*RCL X.
49
Con esta !ariante lee#os una lMnea con la cla!e estAndar de la tabla interna. 7sta !ariante s@lo puede ser utili5ada con
tablas con cabecera de lMnea.
Ee!plo:
D*T*E ;73ID 0F IDTJT*;47 0CC-R( 100?
C0+1?
C0+"?
C0+'?
7DD 0F IDTJT*;47.
F0R +-TJ7DTRC -(ID3 7DTRC 4IK7 4ID7 0F IDTJT*;47.
R7*D T*;47 IDTJT*;47 &ITL K7C C0+" N 7DTRC6C0+"
;ID*RC (7*RCL
TR*D(+0RTID3 D0 FI74D(.
IF (C6(-;RC 9: 0.
ID(7RT 7DTRC IDT0 IDTJT*;47 IDD7G (C6T*;IG.
7DDIF.
7DDF0R.
DE"ETE
Definicin: +ara borrar lMneas de una tabla interna conta#os con la sentencia D747T7. Harios for#atos de la sentencia
nos per#iten borrar lMneas de una for#a diferente.
Sintaxis:
D747T7 9tabla:.
7l siste#a s@lo puede procesar esta sentencia dentro de un bucle 400+ .. 7DD400+. 4a sentencia D747T7 borra la lMnea
<ue este#os tratando en el bucle.
D747T7 9tabla: IDD7G 9Mndice:.
Con la clAusula IDD7G? el siste#a borra la lMnea con el Mndice 9Mndice: en la tabla interna 9tabla:. DespuBs de
borrar la lMnea? el Mndice de la si%uiente lMnea es decre#entado en 1. (i la operaci@n es co#pletada? la !ariable
(C6(-;RC !ale 0. (i la lMnea con el Mndice 9Mndice: no e8iste? (C6(-;RC !ale ..
D747T7 *DP*C7DT D-+4IC*T7 7DTRI7( FR0 9tabla: W C0+*RID3 9c: X.
7sta sentencia borra todas las entradas duplicada adyacentes de una tabla interna. Dos lMneas se consideran duplicadas si
cu#plen uno de los si%uientes criterios de co#paraci@nE
(in la clAusula C0+*RID3? el contenido de los ca#pos cla!es estAndar deben ser i%uales.
Con la clAusula C0+*RID3 con el for#ato si%uienteE C0+*RID3 9c1: 9c": .... 7l contenidos de los ca#pos
= c1? c" ....> debe ser i%ual. Ta#biBn se puede especificar el no#bre de los ca#pos <ue hay <ue co#parar en
tie#po de e1ecuci@n utili5ando la si%uiente sinta8isE =9ca#po:>. 4a !ariable 9ca#po: contiene el no#bre de la
!ariable <ue se !a a co#parar. (i en el #o#ento de procesar la sentencia D747T7? 9ca#po: estA !acMo? el
siste#a la i%nora. (i contiene el no#bre in!Alido? se produce un error en tie#po de e1ecuci@n.
Con la clAusula C0+*RID3 con el si%uiente for#atoE C0+*RID3 *44 FI74D(? el contenido de todos los
ca#pos debe ser i%ual.
(i el siste#a borra al #enos una lMnea de la tabla la !ariable (C6(-;RC !aldrA 0 si no borra nin%una lMnea? (C6(-;RC
!aldrA .. 7s reco#endable <ue la tabla interna este ordenada antes de e1ecutar esta sentencia.
D747T7 9T*;4*: W FR0 9n1: X W T0 9n": X W &L7R7 9condici@n: X.
(entencia utili5ada para borrar re%istros de una tabla de la base de datos. Con esta sentencia se puede borrar una o !arias
lMneas de una tabla. (@lo se pueden borrar lMneas de una tabla a tra!Bs de una !ista si Bsta s@lo hace referencia a una Onica
tabla.
(e debe indicar al #enos una de las tres clAusulas.
(i utili5a#os la sentencia sin la clAusula &L7R7? el siste#a borrarA todas las lMneas de la tabla 9tabla: cuyo
Mndice estB co#prendido entre 9n1: y 9n":.
(i no utili5a#os la clAusula FR0? el siste#a borrarA desde la pri#era lMnea.
(i no utili5a#os la clAusula T0? el siste#a borrarA hasta la Olti#a lMnea.
50
Con la clAusula &L7R7 el siste#a s@lo borrarA a<uellas lMnea de la tabla 9tabla: <ue cu#plen la condici@n
especificada en 9condici@n:. 7n 9condici@n: se puede utili5ar cual<uier e8presi@n l@%ica. 7l pri#er operando
debe ser un co#ponente de la estrucutra de lMnea de la tabla interna. (i el siste#a borra al #enos una lMnea la
!ariable (C6(-;RC !aldrA 0? si no borra nin%una !aldrA ..
D747T7 [9tabla: Z =9ca#po:> \ W C4I7DT (+7CIFI7D X W FR0 9Area: X.
Con la clAusula FR0? la lMnea <ue se borra es la <ue coincide con la cla!e pri#ara del Area 9Area:. (in la
clAusula FR0? la lMnea <ue se borra es la <ue coincide con la cla!e pri#aria del Area de traba1o de la tabla
tabla:
7l Area de traba1o 9Area: debe tener al #enos? la lon%itud de la cla!e pri#aria. (i se borra al #enos una lMnea de
la tabla la !ariable (C6(-;RC !aldrA 0? si no se borra nin%una !aldrA ..
Con la especificaci@n dinA#ica de la tabla? la clAusula FR0 es obli%atoria.
D747T7 FR0 [9tabla: Z =9ca#po:> \ W C4I7DT (+7CIFI7D X W &L7R7 9condici@n: X.
7sta !ariante nos per#ite borrar una o !arias lMneas de la tabla 9tabla: en funci@n de las especificaciones de la
clAusula &L7R7. Dicha clAusula tiene las #is#as opciones <ue las !istas para la sentencia (747CT. (i no
especifica#os la clAusula &L7R7? todas las lMneas de la tabla se borran. 9tabla: debe estar declarada con la
sentencia T*;47(.
4a !ariable del siste#a (C6D;CDT contiene el nO#ero de lMneas borrar. (i se borra al #enos una lMnea de la tabla
la !ariable (C6(-;RC !aldrA 0? si no se borra nin%una !aldrA ..
Lay <ue !i%ilar #ucho con la clAusula &L7R7 para no borrar toda la tabla o lMneas <ue no desea#os borrar. 4a Onica for#a
de recuperar lo borrada es restaurar el bac,up de la base de datos.
D747T7 [9tabla: Z =9tabla:> \ W C4I7DT (+7CIFI7D X FR0 T*;47 9tabla6interna:.
Con esta !ariante se puede borrar lMnea de una tabla de diccionario? basAndose las lMneas de una tabla interna. 9tabla: y
=9tabla:> sir!e para especificar el no#bre de la tabla de for#a estAtica o dinA#ica. 7sta sentencia borra a<uellas lMneas de
la tabla cuya cla!e pri#aria coincida con la definida en una lMnea de la tabla interna. 4a tabla interna debe tener la lon%itud
de la cla!e pri#aria de la tabla. (i el siste#a no puede borrar nin%una entrada de la tabla por<ue no coincide nin%una cla!e
pri#aria? el siste#a continua con la si%uiente lMnea de la tabla interna. (i todas las lMneas de la tabla interna se procesan?
(C6(-;RC !ale 0? en caso contrario !ale .. (C6D;CDT nos indica el nO#ero de lMneas borradas. (i la tabla interna esta
!acMa? (C6(-;RC y (C6D;CDT !alen 0.
Ee!plo .:
D*T*E ;73ID 0F D*7T*; 0CC-R( 100?
D*7='0> TC+7 C? 7DD 0F D*7T*;.
...
D747T7 D*7T*; FR0 / T0 '6 &L7R7 D*7 C* I*;CI.
SE"E$T ;; E#DSE"E$T
Definicin: (e utili5a para leer unQos re%istroQs de una tabla de la base de datos. 4ectura de un Onico re%istro de una tabla
de la base de datos.
Sintaxis:
(747CT W (ID347 X 9opciones6select:
FR0 9opciones6fro#:
W IDT0 9opciones6into Z *++7DDID3 9opciones6appendin%: X
W &L7R7 9opciones62here: X
W 3R0-+ ;C 9opciones6%roup: X
W 0RD7R ;C 9opciones6order: X.
...
W 7DD(747CT. X
Con la clAusula (747CT identifica#os los ca#pos <ue <uere#os leer? si se usa con la clAusula FR0 es
obli%atoria e identifica la tabla <ue hay <ue leer.
IDT0 o *++7DDID3 6: (on opcionales e identifican los ca#pos destino de la lectura.
&L7R7 6: 7s opcional e identifica las condiciones de selecci@n.
3R0-+ ;C 6: 7s opcional y sir!e para la a%rupaci@n de ca#pos.
51
0RD7R ;C 6: 7s opcional y sir!e para #arcar el criterio de ordenaci@n.
7DD(747CT 6: arca el final de un blo<ue si la sentencia (747CT no se ha puesto la opci@n (ID347.
4a sentencia 2pen !34 utili5an de for#a auto#Atica el ca#po #andante. 4as sentencias acceden a tablas dependientes
de #andante leen y procresan s@lo los datos del #andante actual =#andante de cone8i@n>. (in la clAusula C4I7DT
(+7CIFI7D no es posible utili5ar el ca#po #andante en la clAusula &L7R7 =pro!ocan un error de sinta8is>. (i rellena#os
el ca#po #andante en las sentencias ID(7RT? -+D*T7 o D747T7 no se produce nin%On error en tie#po de e1ecuci@n? el
siste#a sobrescribe el ca#po #andante del Area de traba1o con el #andante actual antes de procesar la sentencia 0pen
(F4. (i desea#os especificar un #andante distinto al actual debe#os utili5ar la clAusula C4I7DT (+7CIFI7D en las
sentencias (747CT? ID(7RT? -+D*T7? 0DIFC o D747T7.
... C4I7DT (+7CIFI7D.
7sta opci@n debe ir sie#pre a continuaci@n del no#bre de la tabla. Con esta opci@n desconecta#os el auto#atis#o del
#ane1o del ca#po #andante? por lo tanto? habrA <ue rellenarlo en la sentencias de inserci@n o #odificaci@n.
4a clAusula (747CT define la selecci@n sencilla o #Oltiple de fila? define ta#biBn si las filas duplicadas serAn e8cluidas? asM
co#o las colu#nas <ue seleccionar.
(747CT W (ID347 W F0R -+D*T7 X X W DI(TIDCT X
[ T Z 9ca#pos: Z *G=9ca#po: > *( 9#: Z ID=9ca#po: > *( 9#: Z
*H3=9ca#po: > *( 9#: Z (-=9ca#po: > *( 9#: Z C0-DT=T > as 9#: Z =lista>
C0-DT=W DI(TIDCT X 9ca#po: > *( 9#: \
...
W 7DD(747CT X.
+ara leer todas las colu#nas de una tabla se utili5a el asterisco =T>.
Con la clAusula (ID347 es necesario especificar todos los ca#pos de la cla!e pri#aria en la clAusula &L7R7 para
identificar de for#a Onica un re%istro. (i la lMnea no se encuentra (C6(-;RC !ale .. (i el siste#a consi%ue leer hasta una
lMnea (C6(-;RC !aldrA 0. Con la clAusula F0R -+D*T7 el siste#a blo<uea la lMnea leMda. (@lo puede ser utili5ada en
co#binaci@n con la clAusula (ID347. 7l pro%ra#a espera hasta <ue recibe por parte del siste#a confir#aci@n del blo<ueo.
(i no se pudiera reali5ar el blo<ueo el pro%ra#a ter#ina con un error. 4a clAusula no se pudiera reali5ar el blo<ueo el
pro%ra#a ter#ina con un error. 4a clAusula F0R -+D*T7 debe ser utili5ada en co#binaci@n con los #ecanis#os de blo<ue
y desblo<ueo. Con la clAusula (ID347 lee#os una sola lMnea de la tabla y sin la clAusula la selecci@n es #Oltiple. Cada !e5
<ue el siste#a nos de1a una lMnea sobre el Area de traba1o especificado? se e1ecuta el blo<ue de sentencias hasta la
sentencia 7DD(747CT.
Con la opci@n DI(TIDCT auto#Atica#ente se e8cluyen las lMnea duplicadas. (i al #enos se lee una lMnea de la tabla? (C6
(-;RC !ale 0? en caso contrario !ale .. 4a !ariable del siste#a (C6D;CDT se incre#enta en uno por cada paso del bucle.
*l final de Bste conser!a el nO#ero de lMneas leMdas.
7n lu%ar de leer todas las colu#nas de la tabla se puede leer ciertas colu#nas o aplicar ciertas funciones a dichas
colu#nas. Hea#os todas las posibilidades de la clAusulaE
T 6: (on todos los ca#pos de la tabla.
9ca#po: 6: 7s una lista de ca#pos de la tabla.
*G=9ca#po: > 6: De!uel!e el !alor #A8i#o de la colu#na 9ca#po:.
ID=9ca#po: > 6: De!uel!e el !alor #Mni#o de la colu#na 9ca#po:.
*H3=9ca#po: > 6: De!uel!e la #edia de !alores de la colu#na 9ca#po:.
(-=9ca#po: > 6: De!uel!e la su#a de !alores de la colu#na 9ca#po:.
C0-DT=W DI(TIDCT X9ca#po: > 6: De!uel!e el nO#ero de re%istros seleccionados. Con DI(TIDCT s@lo se
cuentan los re%istros distinto
=9tabla: > 6: 7s una tabla interna donde se especifica cual<uier opci@n de las !istas anterior#ente.
(e deben de1ar espacios en blanco entre los parBntesis y el ar%u#ento de la funci@n. Con la opci@n *( se utili5a un no#bre
alternati!o 9#:. (i se especifican ca#pos a leer o funciones? la clAusula IDT0 es obli%atoria.
0pciones de la clAusula FR0
7sta clAusula especifica la tabla o !ista de la base de datos <ue !a a ser leMda.
52
FR0 [ 9tabla: Z 9!ista: Z 9tabla: \
W C4I7DT (+7CIFI7D X W ;C+*((ID3 ;-FF7R X W -+ T0 9n: R0&( X
4a tabla o !ista 9tabla: debe estar definida en el diccionario de datos? y debe estar declarada en el pro%ra#a en la
sentencia T*;47(. Con la opci@n ;C+*((ID3 ;-FF7R el siste#a lee los datos de la tabla directa#ente de la base de
datos? sin utili5ar el buffer de la tabla. Con ellos nos ase%ura#os de <ue los datos son los #As recientes. Cuando se define
un tabla en el diccionario de datos se puede especificar <ue el siste#a utilice un buffer local de la tabla. 7ste buffer se
actuali5a de for#a asMncrona. Dor#al#ente la sentencia (747CT utili5a este buffer? y no tiene por <uB ser la !ersi@n #As
reciente. +ara ase%urar la lectura de la Olti#a !ersi@n? se utili5a esta opci@n. (i <uere#os leer un nO#ero deter#inado de
lMneas se utili5a la opci@n -+ T0 9n: R0&(. 9n: deter#ina el nO#ero de lMneas a leer. (i 9n: es i%ual a 0 se leen todas las
lMneas? si 9n: es #enor <ue 0? se produce un error en tie#po de e1ecuci@n. (i co#bina#os la opci@n -+ T0 9n: R0&(
con la clAusula 0RD7R ;C? el siste#a pri#ero ordena la tabla y posterior#ente procesa las 9n: pri#eras lMneas.
(e puede especificar el no#bre de la tabla en tie#po de e1ecuci@n? para ello? se utili5a la clAusula =9ca#po:>. 9ca#po:
contiene el no#bre de la tabla? y no tiene por <uB declararse con la sentencia T*;47(. Con esta opci@n la clAusula IDT0 es
obli%atoria.
0pciones de la clAusula IDT0
+ara especificar un Area de destino de los datos seleccionados se utili5a la clAusula IDT0 de la sentencia (747CT.
IDT0 W C0RR7(+0DDID3 FI74D 0F X
[ 9Area: Z T*;47 9tabla: Z W +*CK*37 (IY7 9n: X \
7sta clAusula es necesaria si <uere#os utili5ar un Area de traba1o distinto al Area de traba1o de la tabla leMda. 4as Areas de
traba1o de las tablas se %eneran auto#Atica#ente en el #o#ento de declarar la tabla con la sentencia T*;47(. 4a clAusula
IDT0 ta#biBn aparece en otras sentencias 2pen !34 co#o F7TCL. 7l ca#po 9Area: debe estar declarado co#o ob1eto
de datos y debe tener? al #enos? la lon%itud de los ca#pos leMdos. Con la opci@n C0RR7(+0DDID3 FI74D 0F el siste#a
de1a los ca#pos sobre la estructura especificada? sobre los ca#pos con el #is#o no#bre <ue los leMdos. Con la opci@n
T*;47 la lectura se reali5a en una sola operaci@n =no es necesario 7DD(747CT> y cada lMnea leMda es insertada en la tabla
interna. (i se especifica la clAusula +*CK*37 (IY7 la lectura se reali5a en pa<uetes de 9n: lMneas =si es necesario
7DD(747CT>.
0pciones de la clAusula *++7DDID3
Con la clAusula *++7DDID3 las lMneas aVadidas en la tabla interna se aVaden al final6
*++7DDID3 W C0RR7(+0DDID3 FI74D 0FX
T*;47 9tabla: W +*CK*37 (IY7 9n: X
4as opciones C0RR7(+0DDID3 FI74D( 0F? T*;47 y +*CK*37 (IY7 tienen el #is#o si%nificado <ue en la clAusula
IDT0.
0pciones de la clAusula &L7R7
la clAusula &L7R7 nos per#ite indicar los criterios de selecci@n. 7sta clAusula ta#biBn se utili5a en las sentencias
-+D*T7? D747T7 y 0+7D C-R(0R.
&L7R7 [ 9ca#poJbd: 9operador: 9ca#po: Z
9ca#poJbd: W D0T X ;7T&77D 9ca#po1: *DD 9ca#po": Z
9ca#poJbd: W D0T X 4IK7 9ca#po: W 7(C*+7 9e: X Z
9ca#poJbd: W D0T X ID 9ca#po1: =ca#po1:? ... ? 9ca#pon: > Z
9ca#poJbd: I( W D0T X D-44 Z
9ca#poJbd: W D0T X ID 9criterioJseleccion: Z
= 9tablaJcondiciones: > \
W [ D0T? *DD? 0R? =? > \ ... X
7l si%nificado de las opciones de esta clAusula es el si%uienteE
9ca#poJbd: 9operador: 9ca#po: 6: 4os operadores !Alidos para 9operador: son los si%uientesE
Operador E<uivalente Significado
7F N I%ual a
D7 9: o :9 Do i%ual
4T 9 enor <ue
47 9N enor o i%ual a
3T : ayor <ue
37 :N ayor o i%ual <ue
9ca#poJbd: W D0T X ;7T&77D 9ca#po1: *DD 9ca#po": 6: 7l !alor del ca#po de la base de datos
9ca#poJbd: debe estar co#prendido =o no? si se utili5a D0T> entre los !alores de los ca#pos 9ca#po1: y
9ca#po":. 9ca#po1: y 9ca#po": pueden ser literales.
53
9ca#poJbd: W D0T X 4IK7 9ca#po: W 7(C*+7 9e: X 6: 7sta opci@n s@lo puede ser utili5ada con ca#pos
alfanu#Bricos. 7l ca#po de la base de datos debe? o no? corresponder con el patr@n 9ca#po:. +atr@n si%nifica
<ue el ca#po puede tener caracteres con un si%nificado especial. 7l %ui@n ba1o = J > representa cual<uier carActer
indi!idual? el carActer porcenta1e = a > representa cual<uier nO#ero de caracteres. (i <uere#os utili5ar estos
caracteres especiales co#o carActer si%nificati!o hay <ue anteponerle el carActer de escape 9e:.
9ca#poJbd: W D0T X ID 9criterioJseleccion: 9ca#po1: =ca#po1:? ... ? 9ca#pon: > 6: 7l !alor de la base de
datos debe? o no? ser el !alor nulo.
9ca#poJbd: I( W D0T X D-44 6: 7l !alor del ca#po de la base de datos debe? o no? ser el !alor nulo.
9ca#poJbd: W D0T X ID 9criterioJseleccion: 6: 7l ca#po de la base de datos debe? o no? cu#plir las
condiciones del criterio.
= 9tablaJcondiciones: > 6: (e puede especificar la e8presi@n en tie#po de e1ecuci@n a tra!Bs de la tabla interna
9tablaJcondiciones:. 4a tabla debe contener s@lo un ca#po alfanO#erico de lon%itud 7". 4a tabla debe estar
especificada entre parBntesis sin espacios en blanco entre los parBntesis y el no#bre de la tabla. +uede estar
co#binada con e8presiones estAticas %racias a los operadores *DD y 0R.
(e puede crear una e8presi@n co#binada %racias a los operadores *DD? 0R y D0T. D0T no tiene prioridad sobre *DD y a
su !e5 0R. (e pueden utili5ar los parBntesis para #arcar la prioridad en una e8presi@n.
Lay un for#ato especial de la sentencia &L7R7 <ue es el si%uienteE
F0R *44 7DTRI7( ID 9tabla: &L7R7 9condici@n:.
Con esta !ariante se puede especificar condiciones en tie#po de e1ecuci@n. 7n 9condici@n: se puede especificar ca#pos
de la tabla interna y literales. Con esta !ariante no se puede utili5ar en 9condici@n: las opciones 4IK7? ;7T&77D e ID.
0pciones de la clAusula 3R0-+ ;C
+ara co#binar en contenido de un %rupo de lMneas de una tabla de la base de datos en una sola lMnea se utili5a la clAusula
3R0-+ ;C.
3R0-+ ;C [ 9ca#po1: ... 9ca#pon: Z =9tabla:> \
Con ca#po 9ca#po1: ... 9ca#pon: especifica#os los ca#pos de a%rupa#iento. Con =9tabla:> se puede especificar los
ca#pos de a%rupa#iento dinA#ica#ente? es decir? en tie#po de e1ecuci@n.
0pciones de la clAusula 0RD7R ;C
Con dicha clAusula fi1a#os un criterio de ordenaci@n en los datos.
0RD7R ;C [ +RI*RC K7C Z
9ca#po1: W *(C7DDID3 Z D7(C7DDID3 X ...
9ca#pon: W *(C7DDID3 Z D7(C7DDID3 X Z
=9tabla:> \
Con la opci@n +RI*RC K7C se ordenan por los ca#po de la cla!e pri#aria ascendente#ente. 9ca#po1: puede ser
cual<uier ca#po de la tabla. (e puede especificar si el criterio de ordenaci@n? en cada ca#po? es ascendente =por defecto>
o descendente. (i especifica#os #As de un ca#po se ordenarAn en la secuencia especificada. Con la opci@n =9tabla:> se
puede indicar los ca#pos de ordenaci@n dinA#ica#ente. 4a lMnea de la tabla debe ser del tipo C y lon%itud 7".
Ee!plo:
T*;47( (;00K.
(747CT T FR0 (;00K
&L7R7
C*RRID N I4L I *DD
C0DDID N I0.00I *DD
F4D*T7 N I199/0"")I
0RD7R ;C +RI*RC K7C.
&RIT7E Q (;00K6;00KID? (;00K6C-(T0ID? (;00K6C-(TTC+7?
(;00K6(0K7R? (;00K64-33&7I3LT? (;00K6&-DIT?
(;00K6IDH0IC7.
7DD(747CT.
%PDATE
Definicin: (entencia utili5ada para #odificar re%istros de una tabla de la base de datos.
Sintaxis:
54
-+D*T7 [ 9tabla: Z =9tabla:> \ W C4I7DT (+7CIFI7D X W FR0 9Area: X.
Con esta !ariante de la sentencia -+D*T7 #odifica#os una sola lMnea de la tabla especificada. 7l si%nificado de la clAusula
FR0 es la si%uienteE
FR0 6: 7l Area de traba1o 9Area: sobrescribe la lMnea de la tabla <ue ten%a la #is#a cla!e pri#aria. 4a tabla
9tabla: debe estar declarada con la sentencias T*;47(. (i no especifica#os la clAusula FR0? serA el
contenido del Area de traba1o de la propia tabla el <ue sobrescriba la lMnea de la tabla con la #is#a cla!e pri#aria.
7l Area de traba1o 9Area:debe tener la #is#a lon%itud <ue el Area de traba1o de la tabla. +ara ase%urarnos de
<ue el Area de traba1o 9Area: tiene la #is#a estructura <ue el Area de traba1o de la tabla 9tabla: se suele
declarar con la sentencia D*T* =o TC+7> una estructura utili5ando la clAusula 4IK7 9tabla:.
(i la operaci@n concluye satisfactoria#ente? (C6(-;RC !ale 0 y (C6D;CDT !ale 1? en caso contrario (C6(-;RC !ale . y
(C6D;CDT !ale 0. (e puede especificar el no#bre de la tabla en tie#po de e1ecuci@n co#o !eMa#os en sentencias
anteriores con la opci@n =9ca#po:>. Con esta opci@n? la clAusula FR0 es obli%atoria y 9Area: no puede ser la propia Area
de traba1o de la tabla.
-+D*T7 9tabla: W C4I7DT (+7CIFI7D X (7T 9set1: ... 9setn: W &L7R7 9condici@n: X.
7sta !ariante nos per#ite #odificar una o !arias lMneas de la tabla 9tabla: en funci@n de las especificaciones de la clAusula
&L7R7. Dicha clAusula tiene las #is#as opciones <ue las !istas para la sentencia (747CT. (i no especifica#os la
clAusula &L7R7? todas las lMneas de la tabla se ca#bian. 9tabla: debe estar declaradas con la sentencia T*;47(.
+ara identificar las colu#nas a ca#biar se utili5a la clAusula (7T. 4a lista de co#andos especificados en la clAusula (7T
debe respetar uno de los si%uientes for#atosE
6 9f: N 9%:. 6: 9f: es un ca#po de la tabla 9tabla:. 9%: es un !alor.
6 9f: N 9f: R 9%:. 6: 9f: es un ca#po de la tabla 9tabla:. 9%: es un !alor. 7l !alor de 9f: es incre#entado con el
!alor de 9%:.
6 9f: N 9f: 6 9%:. 6: 9f: es un ca#po de la tabla 9tabla:. 9%: es un !alor. 7l !alor de 9f: es decre#entado con el
!alor de 9%:. 9%: puede ser un literal o una !ariable.
+ara !er la re%la de con!ersi@n entra ca#pos de la base de datos y ca#pos de un pro%ra#a? !er la clAusula IDT0 de la
sentencia (747CT.
(C6D;CDT contiene el nO#ero de lMneas ca#biadas. (C6(-;RC es 0 si al #enos una lMnea es ca#biada y . si nin%una
lMnea es ca#biada. 7n esta !ariante de sentencia no se puede especificar el no#bre de la tabla en tie#po de e1ecuci@n.
-+D*T7 [ 9tabla: Z =9tabla:> \ W C4I7DT (+7CIFI7D X W FR0 T*;47 9tablaJinterna: X.
0tra for#a de actuali5ar !arias lMneas de una tabla es con la anterior !ariante de la sentencia -+D*T7. (e puede definir la
tabla <ue hay <ue actuali5ar estAtica#ente con la opci@n 9tabla:? o dinA#ica#ente con la opci@n =9tabla:>.
4as lMneas de la tabla interna sobrescriben las lMneas de la tabla internas <ue ten%an la #is#a cla!e pri#aria. 4as lMneas de
la tabla interna 9tablaJinterna: deben tener la #is#a lon%itud <ue el Area de traba1o de la tabla. +ara ase%urarnos de esto?
se suele declarar la tabla interna =en el D*T* o TC+7> con la #is#a estructura <ue la tabla de diccionario =clAusula 4IK7>.
(i el siste#a no puede ca#biar una lMnea por<ue la cla!e pri#aria no e8iste en la tabla de la base de datos? el siste#a
continOa con la si%uiente lMnea de la tabla interna. (i todas las lMneas se procesan satisfactoria#ente? (C6(-;RC !ale 0? en
caso contrario !ale .. (C6D;CDT to#a el !alor del nO#ero de lMneas actuali5adas por la sentencia.
Con esta sentencia sucede lo #is#o <ue con la sentencia ID(7RT. 7s #ucho #As eficiente #odificar un con1unto de lMneas
en una sola operaci@n =se%unda !ariante de la sentencia -+D*T7> <ue #odificarlas una a una =pri#era !ariante de la
sentencia -+D*T7>.
Ee!plo .:
-+D*T7 (C-(T0 (7TE DI(C0-DT N I00'I?
T747+L0D7 N I06"1Q......I
&L7R7 ID N I00017777I.
Ee!plo /:
T*;47( (C-(T0.
D*T* &* 4IK7 (C-(T0.
&*6ID N I1".00177I.
&*6T747+L0D7 N I06"01Q..))9I.
-+D*T7 (C-(T0 FR0 &*.
'ET$(
55
Definicin: +ara obtener la si%uiente lMnea del resultado de la orden 0+7D C-R(0R utili5are#os la sentencia F7TCL.
Sintaxis:
F7TCL D7GT C-R(0R 9cursor: IDT0 9destino:.
Cursor identifica el cursor? pre!ia#ente tiene <ue estar abierto. 4as lMneas leMdas sobre el Area de traba1o 9destino:? <ue se
especifica en la clAusula IDT0. (i se puede leer la si%uiente lMnea la !ariable (C6(-;RC !aldrA 0? en caso contrari@ !aldrA
..
Ee!plo:
T*;47( (;00K.
D*T* C TC+7 C-R(0R?
&* 4IK7 (;00K.
0+7D C-R(0R C F0R (747CT T FR0 (;00K
&L7R7
C*RRID N I4L I *DD
C0DDID N I0.00I *DD
F4D*T7 N I199/0"")I
0RD7R ;C +RI*RC K7C.
D0.
F7TCL D7GT C-R(0R C IDT0 &*.
IF (C6(-;RC 9: 0.
C40(7 C-R(0R C. 7GIT.
7DDIF.
&RIT7E Q &*6;00KID? &*6C-(T0ID? &*6C-(TTC+7?
&*6(0K7R? &*64-33&7I3LT? &*6&-DIT?
&*6IDH0IC7.
7DDD0.
OPE# $%RSOR
Definicin: (e puede leer lMneas de una tabla de la base de datos utili5ando un cursor. *ntes de poder utili5ar un cursor
=con la sentencia F7TCL> es necesario abrirlo y? para ello? conta#os con la sentencia 0+7D C-R(0R.
Sintaxis:
0+7D C-R(0R W &ITL L04D X 9cursor: F0R (747CT ... W &L7R7 9condici@n:X.
4a sentencia lle!a i#plMcita una sentencia (747CT <ue nos sir!e para seleccionar las lMneas <ue serAn recorridas por el
cursor. 7l cursor 9cursor: debe estar definido con la sentencia D*T* y ser del tipo C-R(0R. (i utili5a#os la opci@n &ITL
L04D? el cursor per#anece abierto despuBs de un C0IT de la base de datos con una sentencia 5ative !34.
7n la clAusula (747CT no se puede utili5ar la opci@n (ID347 y funciones de a%re%aci@n. 7l resto de opciones estAn
per#itidas.
$"OSE $%RSOR
Definicin: (entencia utili5ada para cerrar un cursor de una tabla de la base de datos.
Sintaxis:
C40(7 C-R(0R 9cursor:.
Debe#os cerrar a<uellos cursores <ue no !ayan a ser utili5ados #As en un pro%ra#a. 7l cursor se cierra auto#Atica#ente
en los si%uientes casosE
Cuando se e1ecuta una de las si%uientes sentencias C0IT &0RK o R044;*CK &0RK.
Cuando una sentencia nati!a =nati!e (F4> reali5a una de las si%uientes funciones co##it o rollbac, =con la
opci@n &ITL L04D no sucede esto>.
Cuando se produce un ca#bio de pantalla =reports interacti!os o transacciones>.
Cuando se reali5a una RFC o SRe#ote Function CallS.
,ET $%RSOR
Definicin: Recupera infor#aci@n a partir de la posici@n del cursor.
56
Sintaxis:
37T C-R(0R FI74D 9ca#po: W 0FF(7T 9offset: X W 4ID7 9lMnea: X
W H*4-7 9!alor: X W 47D3TL 9lon%itud: X
7sta !ariante transfiere el no#bre del ca#po sobre el cual se encuentra posicionando el cursor. (i el cursor se encuentra
sobre al%On ca#po? (C6(-;RC to#a el !alor 0? en caso contrario to#a el !alor .. 7l siste#a transporta el no#bre de
!ariables %lobales? ca#pos si#b@licos? constantes o parA#etros referenciados de subrutinas. +ara literales y ca#pos
locales? (C6(-;RC !ale 0 pero el ca#po 9ca#po: to#a el !alor (+*C7. 7l si%nificado de las clAusulas es el si%uienteE
0FF(7T 6: Contiene la posici@n relati!a del cursor sobre el ca#po. 4a pri#era posici@n tiene el offset 0.
4ID7 6: Contiene el nO#ero de la lMnea en el listado =!ariable (C64I44I>.
H*4-7 6: Contiene el strin% de salida? incluyendo los for#atos? del ca#po sobre el <ue estA situado el cursor.
47D3TL 6: Contiene la lon%itud de salida del ca#po sobre el <ue estA situado el cursor.
37T C-R(0R 4ID7 9lMnea: W 0FF(7T 9offset: X W H*4-7 9!alor: X W 47D3TL 9lon%itud: X
Transfiere a 9lMnea: el nO#ero de la lMnea sobre la cual estA situado el cursor. (i el cursor estA sobre al%una lMnea del listado
(C6(-;RC !aldrA 0? en caso contrario !aldrA .. 7sta !ariante se puede utili5ar para !alidar <ue el usuario ha seleccionado
una lMnea. 7l si%nificado de las clAusulas es el si%uienteE
0FF(7T 6: Contiene la posici@n del cursor en la lMnea seleccionada.
H*4-7 6: Contiene el strin% de salida de la lMnea donde se encuentra el cursor.
47D3TL 6: Contiene la lon%itud de salida donde se encuentra el cursor.
Ee!plo:
D*T*E C-R(0RFI74D="0>?
340;JFI74D="0> H*4-7 Ica#po %lobalI?
R7FJ+*R*7T7R='0> H*4-7 IparA#etro por referenciaI?
H*4J+*R*7T7R='0> H*4-7 IparA#etro por !alorI?
FI74DJ(C;04="0> H*4-7 Ifield6sy#bolI.
FI74D6(C;04(E 9F:.
+7RF0R &RIT7J4I(T -(ID3 R7FJ+*R*7T7R H*4J+*R*7T7R.
*((I3D 340;JFI74D T0 9F:.
*T 4ID76(747CTI0D.
37T C-R(0R FI74D C-R(0RFI74D.
&RIT7E Q C-R(0RFI74D? (C6(-;RC.
F0R &RIT7J4I(T -(ID3 R+ H*4-7=H+>.
D*T*E 40KJFI74D="0> H*4-7 Ilo,al fieldI.
*((I3D FI74DJ(C;04 T0 9F:.
&RIT7E Q 340;JFI74D? Q 40KJFI74D?
Q R+? Q H+?
Q IliteralI? Q FI74DJ(C;04.
7DDF0R.
SET $%RSOR
Definicin: (itOa el cursor en una posici@n deter#inada.
Sintaxis:
(7T C-R(0R 9colu#na: 9fila:.
7sta !ariante per#ite situar el cursor sobre la colu#na 9colu#na: y fila 9fila: respecto de la !entana actual de salida.
(7T C-R(0R W FI74D 9ca#po: X4ID7 9lMnea: W 0FF(7T 9offset: X.
7sta !ariante per#ite situar el cursor sobre una posici@n del listado actual. 7l si%nificado de las clAusulas es el si%uienteE
FI74D 6: 7s opcional. (i se utili5a sitOa el cursor sobre el ca#po especificado en 9ca#po:. (i se ha utili5ado la
clAusula FI74D el despla5a#iento serA relati!o al ca#po. (i no se ha utili5ado la clAusula FI74D el
despla5a#iento serA relati!o a la lMnea.
4ID7 6: 7s obli%atoria y deter#ina el nO#ero de lMnea absoluto del listado.
57
0FF(7T 6: 7s opcional y deter#ina el offset o despla5a#iento utili5ado.
Ee!plo:
0H7 I0D-(I T0 F.
0H7 I1"'./67)90I T0 0D-(.
D0 10 TI7(.
D7&64ID7. +0(ITI0D (C6IDD7G &RIT7 0D-(.
7DDD0.
*T 4ID76(747CTI0D.
(7T C-R(0R FI74D F 4ID7 (C64I44I.
RA#,ES
Definicin: Con esta sentencia declara#os una tabla interna con el #is#o for#ato <ue el utili5ado en los criterios de
selecci@n. 7l ob1eto declarado con esta sentencia podrA ser utili5ado en una e8presi@n l@%ica con el operador ID.
Sintaxis:
R*D37( 9criterio: F0R 9ca#po:.
(e declara el criterio de selecci@n 9criterio:? el cual referencia al ca#po 9ca#po:. 9ca#po: puede ser un ca#po de una
tabla de la base de datos? o cual<uier otro tipo de ca#po. (e puede declarar una tabla con los ca#pos de un criterio de
selecci@nE (I3D? 0+TI0D? 40& y LI3L.
$O#TI#%E
Definicin: (e utili5a para ter#inar el paso de un bucle de for#a incondicional.
Sintaxis:
C0DTID-7
DespuBs de la sentencia C0DTID-7 el siste#a no procesa nin%una sentencia #As del actual paso del bucle? y continua
con el si%uiente pasoE
Ee!plo:
D0 100 TI7(.
IF (C6IDD7G :N 10 *DD (C6IDD7G 9N "0.
C0DTID-7.
7DDIF.
...
7DDD0.
E=IT
Definicin: Ter#ina un bucle de for#a incondicional.
Sintaxis:
7GIT
Con esta sentencia abandona#os todos los blo<ues de proceso? a e8cepci@n de los <ue e#pie5an por *T? para ir
directa#ente a la pantalla de salida. 7l abandono se reali5a de for#a incondicional. (i la sentencia se utili5a en un e!ento
<ue e#pie5a por *T =co#o *T (747CTI0D6(CR77D? etc..> se de1a de procesar el e!ento tratado? pero se procesa el
si%uiente e!ento l@%ico.
* diferencia con la sentencia (T0+? el e!ento 7DD60F6(747CTI0D no se e1ecuta. DespuBs de e1ecutarse la sentencia
7GIT el siste#a abandona el bucle in#ediata#ente para continuar el proceso en la sentencia si%uiente al bucle.
+ara ter#inar el proceso de una subrutina conta#os con las sentencias 7GIT y CL7CK. *#bas sentencias se utili5an de la
#is#a for#a <ue en los bucles 400+ .. 7DD400+. DespuBs de parar el proceso de una subrutina el siste#a continOa en
el punto donde se reali5o la lla#ada =sentencia +7RF0R>.
STOP
Definicin: +er#ite abandonar cual<uier blo<ue de proceso e ir directo al blo<ue de proceso del e!ento 7DD60F6
(747CTI0D. 7l abandono se reali5a de for#a incondicional.
Sintaxis:
(T0+.
58
PER'OR*
Definicin: Dos per#ite reali5ar una lla#ada a una subrutina. (e puede lla#ar a subrutinas <ue se encuentran en el #is#o
pro%ra#a donde se encuentra la lla#ada =subrutinas internas> o en otros pro%ra#as =subrutinas e8ternas>. (e puede
especificar el no#bre de la subrutina estAtica o dinA#ica#ente en tie#po de e1ecuci@n. (e puede reali5ar lla#adas a
subrutinas desde un subrutina? incluso es posible <ue una subrutina se lla#e asM #is#a =lla#ada recursi!a>.
Sintaxis:
+7RF0R 9subrutina: W T*;47( 9parA#etrosJactuales: X
W -(ID3 9parA#etroJactuales: X
W CL*D3ID3 9parA#etroJactuales: X.
7sta !ariante pri#era lla#a a la subrutina interna 9subrutina:. 7n la clAusula 9parA#etros: se especifican los parA#etros
<ue hay <ue pasar a la subrutina =parA#etros actuales>. 4a subrutina puede acceder a todos los ob1etos de datos definidos
en el pro%ra#a? por lo tanto? el uso de parA#etros es opcional. (e suelen utili5ar por claridad en la codificaci@n y por la
posibilidad de ser !ariables.
+7RF0R 9subrutina:=9pro%ra#a:> W T*;47( 9parA#etrosJactuales: X
W -(ID3 9parA#etroJactuales: X
W CL*D3ID3 9parA#etroJactuales: X
W IF F0-DD X.
7sta !ariante per#ite reali5ar lla#adas a subrutinas <ue se encuentran en otro pro%ra#a. 4a Onica for#a de pasar datos es
a tra!Bs de los parA#etros o utili5ando un Area co#On de #e#oria =C00D +*RT(>.
(i utili5a#os la clAusula IF F0-DD? el pro%ra#a continuarA sin producir nin%On error si la subrutina no e8iste.
Cada !e5 <ue lla#a#os a una subrutina e8terna? el pro%ra#a <ue la contiene se car%a en #e#oria. 7ste hecho hay <ue
tenerlo #uy en cuenta a la hora de diseVar una aplicaci@n para e!itar car%as e8cesi!as de infor#aci@n.
+7RF0R 9subrutina:=9pro%ra#a:> ID +R03R* 9pro%ra#a:
W T*;47( 9parA#etrosJactuales: X
W -(ID3 9parA#etroJactuales: X
W CL*D3ID3 9parA#etroJactuales: X
W IF F0-DD X.
*<uM se per#ite reali5ar una lla#ada a una subrutina <ue especifica#os en tie#po de e1ecuci@n. Con la clAusula ID
+R03R* se puede deter#inar <ue la subrutina es e8terna? ta#biBn de for#a dinA#ica.
+7RF0R 9Mndice: 0F 9subrutina61: 9subrutina6": ... 9subrutina6n:.
7sta !ariante nos per#ite lla#ar a una subrutina en funci@n del !alor de un ca#po Mndice y la posici@n <ue %uarda la
subrutina en la sentencia. 4a subrutinas s@lo pueden ser internas.
7l concepto de parA#etro for#al corresponde con la definici@n del parA#etro en la subrutina =sentencia F0R>. 7l
concepto de parA#etro actual corresponde con el parA#etro utili5ado en la lla#ada a la subrutina =sentencia +7RF0R>.
-n parA#etro =for#al o actual> puede ser definido con la clAusula T*;47(? -(ID3 o CL*D3ID3. 7l si%nificado de cada
una de estas clAusulasE
T*;47( 6: 4os parA#etros definidos con esta clAusula s@lo pueden ser tablas internas? con o sin lMnea de
cabecera.
-(ID3 6: 4os parA#etros definidos con esta clAusula pueden ser de cual<uier tipo de dato? incluidas las tablas
internas. (e suelen utili5ar co#o parA#etros de entrada a la subrutina.
CL*D3ID3 6: 4os parA#etros definidos con esta clAusula pueden ser de cual<uier tipo de dato? incluidas las
tablas internas. (e suelen utili5ar co#o parA#etro de salida de la subrutina.
4os parA#etros for#ales con -(ID3 o CL*D3ID3 pueden ser especificados en el parA#etro actual utili5ando los
si%uientes #BtodosE
4la#ada por referencia 6: 7s el #Btodo por defecto. Do se especifica nada? tanto en los parA#etros -(ID3 co#o
en los parA#etros CL*D3ID3. 7n la lla#ada transferi#os la direcci@n del ob1eto de dato. Cual<uier #odificaci@n
reali5ada sobre el ob1eto de dato tendrA efecto despuBs de la lla#ada.
4la#ada por !alor 6: (e antepone a los parA#etros la opci@n H*4-7 =el parA#etro entre parBntesis> con la
clAusula -(ID3. 7n la lla#ada se crea una copia del parA#etro? <ue serA la utili5ada por la subrutina. Cual<uier
#odificaci@n reali5ada en la subrutina no afectarA al ob1eto de dato fuera de Bsta.
59
4la#ada por !alor y resultado 6: (e antepone a los parA#etros la opci@n H*4-7 =el parA#etro entre parBntesis>
con la clAusula CL*D3ID3. 7n la lla#ada se crea una copia del parA#etro? <ue serA la utili5ada por la subrutina.
Cual<uier #odificaci@n reali5ada en la subrutina =copia de parA#etro actual> afectarA al ob1eto de dato =parA#etro
actual> s@lo si la subrutina ter#ina correcta#ente? es decir? si no se ha e1ecutado nin%una sentencia 7((*37.
7ste tipo de #Btodo s@lo tiene sentido en pro%ra#aci@n de transacciones.
7n los parA#etros for#ales =sentencia F0R> se puede especificar un tipo de dato para ase%urarnos el tipo de Bste. 4as
con!ersiones de tipo reali5adas entre los parA#etros actuales y los parA#etros for#ales cu#plen las si%uientes re%lasE
Especificacin de tipo $onversin
(in especificaci@n Q TC+7 *DC
7l siste#a acepta cual<uier tipo del parA#etro actual. Todos los atributos del
parA#etro actual se traspasan al parA#etro for#al.
TC+7 T*;47
7l siste#a co#prueba si el parA#etro actual es una tabla interna. Todos los
atributos y estructura del parA#etro actual se transporta al parA#etro for#al.
TC+7 C? D? + o G
7l siste#a co#prueba si el parA#etro actual es del tipo especificado. 4a lon%itud
del parA#etro y las especifica#os de deci#ales? para el tipo + se transportan
del parA#etro actual al parA#etro for#al.
TC+7 D? F? I o T
7l tipo de dato del parA#etro actual debe coincidir con el tipo de dato del
parA#etro for#al.
4IK7 9ca#po: Q TC+7 9tipo6usuario:
Ee!plo .:
D*T*E RD*7='0> H*4-7 I&RIT7J(T*TI(TICI?
+D*7=)> H*4-7 IYCGJ(T*TI.
+7RF0R &RIT7J(T*TI(TIC=YCGJ(T*T>.
+7RF0R =RD*7> ID +R03R* YCGJ(T*T.
+7RF0R &RIT7J(T*TI(TIC ID +R03R* =+D*7>.
+7RF0R =RD*7> ID +R03R* =+D*7>.
Ee!plo /:
D*T*E ;73ID 0F IT*; 0CC-R( 100?
T7GT=/0>?
D-;7R TC+7 I?
7DD 0F IT*;.
(TR-C 4IK7 T00/T.
...
+7RF0R DI(+4*C T*;47( IT*;
-(ID3 (TR-C.
F0R DI(+4*C T*;47( +*RJIT*; (TR-CT-R7 IT*;
-(ID3 +*R (TR-CT-R7 T00/T.
D*T* 40CJC0+*R7 4IK7 +*RJIT*;6T7GT.
&RIT7E Q +*R64*DD1? +*R64*DDG.
...
400+ *T +*RJIT*; &L7R7 T7GT N 40CJC0+*R7.
...
7DD400+.
...
7DDF0R.
Ee!plo 0:
D*T*E D-;7RJI TC+7 I H*4-7 /?
D-;7RJ+ TC+7 + H*4-7 .?
;73ID 0F +7R(0D?
D*7=10> H*4-7 I+aulI?
*37 TC+7 I H*4-7 ")?
7DD 0F +7R(0D?
*4+L*=10> H*4-7 Iabcdef%hi1I.
FI74D6(C;04( .
*((I3D D-;7RJ+ T0 .
+7RF0R CL*D37 -(ID3 1
D-;7RJI
D-;7RJ+

+7R(0D
*4+L*RD-;7RJI=>.
F0R CL*D37 -(ID3 H*4-7=+*RJ1>
+*RJD-;7RJI
+*RJD-;7RJ+
+*RJ+0IDT7R
+*RJ+7R(0D (TR-CT-R7 +7R(0D
60
+*RJ+*RTJ0FJ*4+L*.
*DD +*RJ1 T0 +*RJD-;7RJI.
+*RJD-;7RJ+ N 0.
+*RJ+7R(0D6D*7R.=1> N *4+L*.
+*RJ+7R(0D6*37 N D-;7RJ+ R "/.
*DD D-;7RJI T0 +*RJ+0IDT7R.
+*RJ+*RTJ0FJ*4+L* N (+*C7.
7DDF0R.
7l contenido de los ca#pos despuBs del +7RF0R esE
D-;7RJI N 6
D-;7RJ+ N 6
+7R(0D6D*7 N I+aulaI
+7R(0D6*37 N "/
*4+L* N Iabcde 1I
'OR* ;; E#D'OR*
Definicin: 7sta sentencia per#ite definir subrutinas.
Sintaxis:
F0R 9subrutina: W T*;47( 9parA#etros6for#ales: X
W -(ID3 9parA#etros6for#ales: X
W CL*D3ID3 9parA#etros6for#ales: X
9subrutina: define el no#bre de la subrutina. Con T*;47(? -(ID3 y CL*D3ID3 defini#os los parA#etros for#ales de la
subrutina. +ara las subrutina internas nos es definir parA#etros ya <ue la subrutina tiene acceso a todos los ob1etos de
datos declarados en el pro%ra#a principal. +ara las subrutinas e8ternas se puede ele%ir pasar los ob1etos de datos
#ediante parA#etros o utili5ar #e#oria co#partida entre el pro%ra#a <ue lla#a a la subrutina y la subrutina =sentencia
C00D +*RT>.
Ee!plo .:
+7RF0R &74C07.
F0R &74C07.
&RIT7 Q ILola #undoI.
7DDF0R.
Ee!plo /:
D*T*E ;73ID 0F G.
IDC4-D7 (TR-CT-R7 (F4I3LT.
D*T*E *DDITI0D=)> TC+7 C?
7DD 0F G.
...
+7RF0R - -(ID3 G.
...
F0R - -(ID3 G (TR-CT-R7 (F4I3LT.
&RIT7E G6F4D*T7.
7DDF0R.
Ee!plo 0:
TC+7(E ;73ID 0F F4I3LTJ(TR-C?
F4C*RRID 4IK7 (F4I3LT6C*RRID?
+RIC7 4IK7 (F4I3LT6F4D*T7?
7DD 0F F4I3LTJ(TR-C.
D*T*E CJF4I3LT TC+7 F4I3LTJ(TR-C 0CC-R( 0 &ITL L7*D7R 4ID7?
I;00K1 4IK7 (;00K 0CC-R( 0 &ITL L7*D7R 4ID7?
I;00K" 4IK7 I;00K1 0CC-R( 0?
(TR-C 4IK7 (;00K.
+7RF0R DI(+4*C T*;47( CJF4I3LT I;00K1 I;00K" -(ID3 (TR-C.
F0R DI(+4*C T*;47( +JIT*; 4IK7 CJF4I3LTWX
+J;00K1 4IK7 I;00K1WX
+J;00K" 4IK7 I;00K"WX
-(ID3 +J(TR- 4IK7 (TR-C.
D*T* 4JC*RRID 4IK7 +JIT*;6F4C*RRID.
...
&RIT7E Q +J(TR-6C*RRID? +J(TR-6C0DDID.
...
400+ *T +JIT*; &L7R7 F4C*RRID N 4JC*RRID.
...
7DD400+.
61
...
7DDF0R.
Ee!plo 1:
D*T*E D-;7RJ1 TC+7 I H*4-7 1?
D-;7RJ" TC+7 I H*4-7 "?
T7GTJ1=10> H*4-7 IoneI?
T7GTJ"=10> H*4-7 It2oI.
+7RF0R C0DF-(7 -(ID3 D-;7RJ1
D-;7RJ"
T7GTJ1
D-;7RJ1
T7GTJ".
F0R C0DF-(7 -(ID3 +*RJD-;7RJ1 TC+7 I
+*RJD-;7RJ" TC+7 I
+*RJT7GTJ1 TC+7 C
H*4-7=+*RJHJD-;7RJ1> TC+7 I
H*4-7=+*RJHJT7GTJ"> TC+7 C.
*DD ' T0 +*RJHJD-;7RJ1.
*DD . T0 +*RJD-;7RJ1.
*DD D-;7RJ1 T0 +*RJD-;7RJ".
T7GTJ" N IthreeI.
+*RJT7GTJ1 N +*RJHJT7GTJ".
+*RJHJT7GTJ" N IfourI.
7DDF0R.
7l contenido de los ca#pos despuBs de la lla#ada al +7RF0R 7sE
D-;7RJ1 N /
D-;7RJ" N 7
T7GTJ1 N It2oI
T7GTJ" N IthreeI
Parte II
Con lo aprendido en el capMtulo anterior ya podre#os hacer ciertos pro%ra#as? aun<ue tendrA <ue ser #uy sencillos. 7n
este capMtulo !a#os a !er co#o pode#os hacer pre%untas a nuestras !ariables y to#ar decisiones dependiendo de sus
!alores.
$ondicionales;
+ara poder pre%untar por los !alores de las !aribles? *;*+ nos per#ite utili5ar tras directi!as #uy parecidas entre
si? pero con diferentes resultadosE
7stas son las condiciones l@%icasE
N ? 7FE I%ual =7Fual>
9:? :9? D7E Do I%ual =Dot 7<ual>
: ? 3TE ayor <ue =3reater Than>
9 ? 4TE enor <ue =4ess Than>
:N? N:? 37E ayor o I%ual =3reater than or 7<ual>
9N? N9? 47E enor o I%ua, =4ess than or 7<ual>
C0E Contiene (olo =Contain 0nly>
C*E Contiene *l%uno =Contain *ny>
D*E Do Contiene *l%uno =Dot Contain *ny>
C(E Contiene Cadena =Contain (trin%>
D(E Do Contiene Cadena =Do Contain (trin%>
C+E Contiene ascara =Contain +attern>
D+E Contiene Cadena =Do Contain +attern>
f6 ;7T&77D f7 *DD f8E Ca#po f6 estA entre f7 y f8
f6 I( IDITI*4E Ca#po f6 estA iniciali5ado
9f6: I( *((I3D7DE +re%unta si el Field6(y#bol f6 estA asi%nado
f6 ID f7E +re%unta si el ca#po f6 estA dentro de f7
o IF ... 7DDIF? pre%unta si cierto y si no.
o IF (C6(-;RC 7F 0.
62
o 74(7IF (C6(-;RC 3T ).
o 74(7.
o IF (C6(-;RC N ..
o 74(7.
o 7DDIF.
o 7DDIF.
o CL7CK? co#prueba y sal.
o CL7CK (C6(-;RC 7F 0.
o C*(7 ... 7DDC*(7? co#para #ultiples casos.
o C*(7 (C6(-;RC.
o &L7D I0I. &RIT7 I7RR0R 0.I
o &L7D I.I. &RIT7 I7RR0R ..I
o &L7D I6I 0R I)I. &RIT7 I7RR0R 6 o )I.
o &L7D 0TL7R(. &RIT7 I0TR0( 7RR0R7(I.
o 7DDC*(7.
)ucles;
*de#As? pode#os hacer <ue ciertas instrucciones se repitan n !eces o hasta <ue se cu#pla cierta condici@n?
para ello conta#os conE
o D0? ha5.
o D*T* H*R01 TC+7 I.
o D0 / TI7(.
o *DD 1 T0 H*R01.
o 7DDD0.
o &LI47? #ientras se cu#pla la condici@n repite.
o &LI47 (C6(-;RC D7 0.
o 9###:
o 7DD&LI47.
o 400+? entra en un bucle? !er tablas internas.
o D*T* TIT*; 4IK7 ;(73 0CC-R( 0 &ITL L7*D7R 4ID7.
o 400+ *T TIT*;.
o 9###:
o 7DD400+.
Procedi!ientos;
-n procedi#iento no es #As <ue un peda5o de c@di%o aislado dentro del pro%ra#a y <ue puede ser lla#ado en
!arios #o#entos de su e1ecuci@n. * este procedi#iento se le puede hacer un pase de para#etros y <ue este nos
de!uel!a !arios resultados. (i conse%ui#os hacer <ue un procedi#iento sea lo #As independiente al pro%ra#a
estare#os consi%uiendo hacer una !erdadera pro%ra#aci@n #odular. *l procedi#iento se le lla#a con la
instrucci@n perfor# y no i#porta donde estB definido si en nuestro pro%ra#a o en cual<uier otro o incluso no hace
falta <ue e8ista.
Open+S>";
+ara poder #ane1ar correcta#ente la infor#aci@n al#acenada en las tablas? es necesario disponer de unas
sentencias capaces de hacer todo el traba1o independinte#ente de la #A<uina donde se estB e1ecutando (*+.
+or ello (*+ ha creado una serie de sentencias <ue las lla#a 0pen6(F4 y con son casi her#anas <ue las
conocidas (F4. +or ello dispone#os deE
o (747CT? bus<uedas.
o T*;47( T00/-.
o (747CT T FR0 T00/- &L7R7 (+R*( N (C64*D3-.
o 7GIT.
o 7DD(747CT.
o ID(7RT? inserciones.
o (747CT T FR0 T00/- &L7R7 (+R*( N (C64*D3-.
o T00/-6(+R*( N ID7I.
63
o ID(7RT T00/-.
o 7DD(747CT.
o D747T7? borrar entradas.
o (747CT T FR0 T00/- &L7R7 (+R*( N (C64*D3-.
o D747T7 T00/-.
o 7DD(747CT.
o 0DIFC? #odifica y si no e8iste crea.
o -+D*T7? #odifica.
Tablas Internas
4as tablas internas son #uy i#portantes en (*+? ya <ue es una for#a c@#oda y rApida de traba1ar con la
infor#aci@n. 7n ella pode#os hacer las #is#as operaciones <ue con las tablas propias de (*+? pero su
rendi#iento es #ucho #e1or. +or ello? no hay pro%ra#a <ue no dispon%a de al#enos una tabla interna. C su
herra#ientas sonE
o D*T*? definici@n de tablas.
o D*T*E ;73ID 0F IT*; 0CC-R( 0?
o K7C TC+7 I?
o D0;R7=.0>?
o 9###:
o 7DD 0F IT*;.
o D*T*E I;(73 4IK7 ;(73 0CC-R( 0 &ITL L7*D7R 4ID7.
o R7FR7(L? eli#ina todo el contenido.
o *++7DD? inserciones.
o D747T7? borrar entradas.
o C0447CT? aVade.
o (0RT? ordenaciones.
o (0RT TIT*; ;C D0;R7.
o 400+ *T? bucles.
o R7*D T*;47? lectura de tabla.
o R7*D T*;47 TIT*; &ITL K7C C4*H7 N (C6T*;IG.
o D7(CRI;7 T*;47? anali5a#os la tabla.
o D7(CRI;7 T*;47 TIT*; 4ID7( C0DT*D0R.
o IF C0DT*D0R 7F 0.
o 7((*37 7001.
o 7DDIF.
o
Tablas $luster
78iste otra for#a de tener los datos #etidos en las tablas y eso son #ediante datos del tipo Cluster 4RA/. 7n
ellos se puede al#acenar tanta infor#aci@n co#o se desee e incluso puede estar %uardada de for#a
estructurada? co#o si fuesen tablas internas y #e5cladas de diferentes for#as. 7n definiti!a? los 4RA/ son co#o
un %ran saco donde uno puede ir #etiendo infor#aci@nE
I' ;; E#DI'
Definicin: Con esta sentencia per#ite bifurcar el flu1o de un pro%ra#a en blo<ues de sentencias dependiendo de una
condici@n.
Sintaxis:
IF 9condici@n:.
W 9blo<ue6sentencias: X
64
W 74(7IF 9condici@n:.X
W 9blo<ue6sentencias: X
W 74(7IF 9condici@n:.X
W 9blo<ue6sentencias: X
...
W 74(7. X
W 9blo<ue6sentencias: X
7DDIF.
9condici@n: puede ser cual<uier e8presi@n l@%ica. 9blo<ue6sentencias: puede ser cual<uier co#binaci@n de sentencias. -n
blo<ue de sentencias estarA li#itado por las palabras cla!e IF? 74(7IF? 74(7 y 7DDIF. 4a condiciones se e!alOan de for#a
secuencial. Cuando el resultado de una condici@n es TR-7 =!erdadera> se e1ecuta el blo<ue de sentencias de esa
condici@n. -na !e5 se haya e1ecutado el blo<ue de sentencias el proceso continua a partir de la clAusula 7DDIF. 4as
clAusulas IF y 7DDIF son obli%atorias.
(e puede anidar tantas sentencias IF co#o <uera#os? y dentro del blo<ue se sentencias no puede haber nin%una sentencia
de e!ento =(T*RT60F6(747CTI0D>.
Ee!plo:
if sy6subrc N 0.
2rite IResultado Correcto]I.
elseif sy6subrc N .
2rite IResultado 7rroneo .I.
elseif sy6subrc N )
2rite IResultado 7rroneo )I.
else.
2riteE IResultadoEI? sy6subrc.
endif.
$ASE ;; E#D$ASE
Definicin: +ara e1ecutar diferentes blo<ues de sentencias en funci@n del contenido de una !ariable? se utili5a la sentencia
C*(7.
Sintaxis:
C*(7 9c:.
&L7D 9c1: W 0R 9c11: X.
W 9blo<ue6sentencias: X
W &L7D 9c": W 0R 9C"1: X. X
W 9blo<ue6sentencias: X
W &L7D 0TL7R(. X
W 9blo<ue6sentencias: X
7DDC*(7.
7l siste#a e1ecuta el blo<ue de sentencias correspodiente a la clAusula &L7D <ue cu#pla <ue el !alor de 9c:
coincida con el !alor de 9cn:? continuando el proceso a continuaci@n de la clAusula 7DDC*(7.
Con la clAusula 0R? se puede indicar #As de un ca#po para reali5ar la co#paraci@n. 7l blo<ue de sentencias
correspondiente a la clAusula &L7D 0TL7R( se procesarA si nin%una de las clAusulas &L7D se cu#ple.
4a clAusula 7DDC*(7 es obli%atoria.
Ee!plo:
D*T*E 0D7 TC+7 I H*4-7 1?
TLR77 TC+7 + H*4-7 '.
D0 / TI7(.
C*(7 (C6IDD7G.
&L7D 0D7.
&RIT7 Q I7ste esI.
&L7D ".
&RIT7 IunI.
&L7D TLR77.
&RIT7 IbuenI.
&RIT7 Ie1#eploI.
&L7D 0TL7R(.
&RIT7 I]I.
7DDC*(7.
7DDD0.
(alidaE S 7ste es un buen e1e#plo ] ] S
65
DO ;; E#DDO
Definicin: 71ecuci@n de sentencias indefinida#ente hasta <ue se procese la sentencia 7GIT? (T0+ o R7P7CT.
Sintaxis:
D0 W9n: TI7( X W H*RCID3 9c: FR0 9c1: D7GT 9c": X
9blo<ue6de6sentencias:
7DDD0.
4a sentencia D0 sin clAusulas e1ecuta el blo<ue de sentencias indefinida#ente? o hasta <ue se procese una sentencia
7GIT? (T0+ o R7P7CT. +ara li#itar el nO#ero de pasos de un bucle se puede utili5ar la opci@n TI7(. 9n: puede ser un
literal o una !ariable. (i 9n: es 0 o ne%ati!o? el siste#a no procesarA el bucle.
4a clAusula 7DDD0 es obli%atoria =#arca el fin del blo<ue de sentencias>. 4a !ariable (C6IDD7G contiene el
nO#ero de !eces <ue el bucle ha sido e1ecutado.
-tili5ando la opci@n H*RCID3 se pueden ir asi%nando !alores a una !ariable 9c: a partir de un con1unto de
ca#pos del #is#o tipo y lon%itud de #e#oria por cada paso de bucle. 7n una sentencia D0 se pueden utili5ar
!arias opciones H*RCID3.
Ee!plo:
D0.
&RIT7E Q I(C6IDD7G 6 InicioEI? ='> (C6IDD7G.
IF (C6IDD7G N 10.
7GIT.
7DDIF.
&RIT7E IFinEI? ='> (C6IDD7G.
7DDD0.
-(I"E ;; E#D-(I"E
Definicin: 71ecuta un blo<ue de sentencias #As de una !e5? hasta <ue una condici@n se cu#pla.
Sintaxis:
&LI47 9condici@n: W H*RC 9f: FR0 9f1: D7GT 9f": X.
9blo<ueJdeJsentencias:.
7DD&LI47.
7l siste#a procesa el blo<ue de sentencias hasta <ue se cu#pla la condici@n o hasta <ue el siste#a procesa una sentencia
7GIT? (T0+ o R7P7CT. +ara condici@n se puede utili5ar cual<uier e8presi@n l@%ica. 7l ca#po del siste#a (C6IDD7G
contiene el nO#ero de !eces <ue el bucle ha sido e1ecutado. 7l siste#a per#ite anidar sentencias &LI47? asM co#o
co#binarlas con otras sentencias de bucle.
4a opci@n H*RC actOa de la #is#a for#a en <ue actOa la opci@n H*RCID3 en la sentencia D0. *l i%ual en la sentencia D0?
se puede utili5ar #As de una opci@n H*RC en una sentencia &LI47.
Ee!plo:
D*T*E (7*RCLJ7 TC+7 I?
ID TC+7 I H*4-7 0?
*G TC+7 I H*4-7 1000?
TRI7( TC+7 I?
D-;7R TC+7 I.
(7*RCLJ7 N "'.
&LI47 D-;7R 9: (7*RCLJ7.
*DD 1 T0 TRI7(.
D-;7R N = ID R *G > Q ".
IF D-;7R : (7*RCLJ7.
*G N D-;7R 6 1.
74(7.
ID N D-;7R R 1.
7DDIF.
7DD&LI47.
DES$RI)E TA)"E
Definicin : (e utili5a para saber el nO#ero de lMneas de una tabla interna y para saber el !alor de la clAusula 0CC-R( de
la definici@n de la tabla.
66
Sintaxis:
D7(CRI;7 T*;47 9tabla: W 4ID7( 9lMnea: X W 0CC-R( 9ta#aVo: X.
(i utili5a#os la clAusula 4ID7( el siste#a actuali5a 9lMnea: con el nO#ero de entradas en la tabla interna 9tabla:.
Con la clAusula 0CC-R( el siste#a actuali5a 9ta#aVo: con el ta#aVo definido de la tabla.
I*PORT 'RO* DATA)ASE
Definicin: (e utili5a para leer ob1etos de un cluster al#acenado en un fichero cluster.
Sintaxis:
I+0RT 9ca#po11: W T0 9ca#po1": X 9ca#po"1: W T0 9ca#po"": X FR0 D*T*;*(7 ...
9tabla:=9Area:> W C4I7DT 9#andante: X [ID 9cla!e: Z *P0R6ID 9#ayor:
W ID0R6ID 9#enor: X \.
4ee los ob1etos de datos especificados en la lista 9ca#po11:? 9ca#po"1:? ... de un cluster de datos al#acenados en
fichero cluster 9tabla: =esta tabla tiene <ue estar declaradas en la sentencia T*;47(>.
(in la clAusula T0 el ob1eto de datos 9ca#po11: de la base de datos se asi%na sobre el ob1eto de datos con el
#is#o no#bre definido en el pro%ra#a. Con la clAusula T0 el ob1eto de datos 9ca#po11: leMdo de la base de
datos se al#acena sobre el ca#po 9ca#po1": declarado en el pro%ra#a.
9Area: es un ca#po o literal alfanu#Brico de dos posiciones <ue identifica el Area del fichero cluster.
Recorde#os <ue el Area se al#acena en el ca#po R74ID del fichero cluster.
9cla!e: identifica la cla!e del fichero cluster y tendrA una lon%itud #A8i#a del fichero. +or e1e#plo? para el fichero
IDDG? la lon%itud #A8i#a es de "" caracteres.
(e puede utili5a la clAusula *P0R6ID en !e5 de la clAusula ID. De esta for#a el cluster seleccionado serA el
pri#ero en <ue coincida parte de la cla!e. del cluster con 9#ayor:. (i aparte especifica#os la opci@n ID0R6ID?
el cluster seleccionado serA el <ue en la se%unda parte del no#bre del cluster =la pri#era parte es la de la
clAusula *P0R6ID> sea #ayor o i%ual a 9#enor:.
Do es necesario leer todos los ob1etos al#acenados en el cluster s@lo habrA <ue especificar en la lista de ob1etos a<uellos
<ue desee#os leer. (i no e8iste cluster para un fichero? Area y cla!e especificado la !ariable (C6(-;RC !aldrA . en caso
contrario !aldrA 0. (i al%On ob1eto de dato especificado en la lista no e8iste en el cluster? Bste per#anece sin ca#bios. 7n
tie#po de e1ecuci@n del siste#a co#prueba en el #o#ento de e1ecutar la sentencia <ue los tipos de los ob1etos de datos
al#acenados en el cluster y los pro!istos en la sentencia son co#patibles.
E=PORT TO DATA)ASE
Definicin: +ara al#acenar cluster en un fichero cluster de la base de datos se utili5a esta sentencia.
Sintaxis:
7G+0RT 9ca#po11: W FR0 9ca#po1": X 9ca#po"1: W FR0 9ca#po"":X ...
T0 D*T*;*(7 9tabla:=9Area:> W C4I7DT 9#andante: X ID 9cla!e:.
*l#acena los ob1etos de datos especificados =9ca#po11:? 9ca#po"1:? ..> ba1o un cluster con cla!e 9cla!e: en el fichero
9tabla:? en el Area 9Area:. 9Area: es un ca#po de dos posiciones <ue el siste#a al#acenarA en el ca#po R74ID. 9tabla:
indentifica el fichero cluster. 4a #A8i#a lon%itud para 9cla!e: estA li#itada por la lon%itud del ca#po cla!e del fichero
cluster utili5ado? por e1e#plo? para el fichero IDDG? esta lon%itud es de "" caracteres.
(in la clAusula C4I7DT? el siste#a rellena de for#a auto#Atica el ca#po *DDT con el #andante de cone8i@n.
Con la clAusula serA el !alor 9#andante: el <ue actualice el ca#po *DDT.
4a clAusula C4I7DT debe especificarse s@lo a continuaci@n de la especificaci@n del fichero y Area. 4os ca#pos de
usuario definidos en el fichero serAn transportados al fichero de for#a auto#Atica? pero deben ser rellenados
pre!ia#ente. 7sta sentencia sie#pre sobreescribe cual<uier cluster e8istente con la #is#a cla!e y Area para un
#is#o #andante.
(i utili5a#os tablas internas con cabecera de lMnea? serA el contenido de la tabla y no la cabecera de la tabla la <ue se
%uarde en el fichero cluster. 4a cabecera de lMnea en nin%On caso se %uarda en el fichero cluster.
Ee!plo:
67
T*;47( IDDG.
D*T*E IDDGK7C 4IK7 IDDG6(RTFD H*4-7 IH*40RC4*H7I?
F1=.>? F" TC+7 +?
;73ID 0F IT*;' 0CC-R( "?
C0DT=.>?
7DD 0F IT*;'.
T *ntes de e8portar los ca#pos son
T rellenados
IDDG6*7D*T N (C6D*T-.
IDDG6-(7R* N (C6-D*7.
T 78porta#os a la base de datos.
7G+0RT F1 F" IT*;' T0
D*T*;*(7 IDDG=(T> ID IDDGK7C.
Parte III
7n este capMtulo conte#plare#os la interacci@n del usuario con los reports? para <ue de esta for#a pueda haber
un selecci@n de datos pre!ia a las salidas.
Eventos AT
4os e!entos del tipo *T se acti!an cuando el usuario interacciona con la pantalla? de esta for#a pode#os reali5ar
diferentes operaciones dependiendo de lo <ue el usuario decida. C nor#al#ente esta pro%ra#aci@n !a de la
#an@ del enu +ainter
o *T 4ID76(747CTI0D? se acti!a cuando se selecciona una linea
o *T +F? cuando se pulsa una tecla de funci@n.
o *T (747CTI0D6(CR77D? si se pulsa al%un boton en la pantalla de selecci@n.
o *T -(7R6C0*DD? si se pulsa al%un boton en la pantalla de listado.
Eventos "OOP
7stos e!entos nos resultaran real#ente Otiles para hacer <ue nuestro listados ten%an diferentes rupturas.
o *T FIR(T y *T 4*(T? se e1ecutan en el pri#er y Olti#o re%istro de la tabla interna.
o *T D7& y *T 7DD 0F? se e1ecutan en el pri#er y Olti#o re%istro del ca#po seleccionado.
o (-? utili5ado para hacer su#atorios.
Eventos en la seleccin
Ta#biBn el pro%ra#a posee ciertos e!entos <ue se lan5an antes de la e1ecuci@n del #is#o? pode#os 1u%ar con
estos e!entos para rellenar infor#aci@n? por e1e#plo en los datos de pantalla.
o (T*RT60F6(747CTI0D? 7DD60F6(747CTI0D? nos per#iten seleccionar despuBs de la pantalla.
o *T (747CTI0D6(CR77D? si se pulsa al%un boton en la pantalla de selecci@n.
o IDITI*4IY*TI0D? antes de pintar la pantalla pasa por a<ui.
o T0+60F6+*37 y 7DD60F6+*37? salta al inicio y final de cada pA%ina.
Dentro los listados
Ta#biBn pode#os hacer <ue despuBs de <ue se e1ecute nuestro pro%ra#a? hacer <ue este ta#biBn sea
interacti!o? es decir? <ue #ediante una pulsaci@n de botones? de lineas o de partes de linea se lancen otras
pantallas o otros listados. *de#As de las directi!as propias de (*+? ta#biBn conta#os con las !ariables de
siste#a =lisel? pa%no? curo2? etc>? <ue nos pueden ayudar a saber en <ue listado nos encontra#os? colu#na y
lMnea? asM co#o el contenido de toda la lMnea de <ue ha pulsado.
o LID7? de!uel!e el !alor de una !ariable.
o R7*D 4ID7? 0DIFC 4ID7 y 0DIFC C-RR7DT 4ID7? trata la linea del listado.
o (CR044 64I(T? per#ite hacer scrollin%s.
68
o &IDD0&? nos abre una nue!a !entana.
Ta#biBn pode#os poner iconos <ue !arien con los clic,? incluso herra#ientas del tipo chec,bo8 para
selecciones #ultiples o tener literales <ue son ca#pos input.
AT "I#E+SE"E$TIO#
Definicin: +ara per#itir al usuario seleccionar una lMnea de un listado y reali5ar al%una acci@n? se puede escribir un blo<ue
de proceso en el pro%ra#a para el e!ento *T 4ID76(747CTI0D.
Sintaxis:
*T 4ID76(747CTI0D..
9blo<ue6de6proceso:
7DD*T.
7ste e!ento define un blo<ue de proceso <ue se acti!a cuando selecciona#os una lMnea del infor#e. 7ste e!ento se utili5a
en los infor#es interacti!os cuando %eneran salidas secundarias. 7ste e!ento se describe con #ayor detalle en el CapMtulo
1/E S+ro%ra#as interacti!osS. (i no defini#os una interfa5 particular para el listado =a tra!Bs de la transacci@n S#enu
painterS> el siste#a crea una interfa5 estAndar. 4a apariencia de esta interfa5 es la #is#a <ue la de cual<uier infor#e?
interacti!o o no. 7l usuario podrA acti!ar este e!ento a tra!Bs de las si%uientes accionesE
7n el #enO Sedici@nS? se eli%e la opci@n SseleccionarS.
+resionando la tecla de funci@n F".
Reali5ando un doble6clic, sobre la lMnea o un solo clic, sobre un %otspot =!er las opciones sentencia &RIT7>.
despuBs de posicionar el cursor sobre una lMnea y reali5ar al%una de las acciones anteriores? el e!ento *T 4ID76
(747CTI0D se acti!a.
Interna#ente? el c@di%o de funci@n +ICK acti!a el e!ento *T 4ID76(747CTI0D. 7n la interfa5 predefinida? la opci@n de
#enO Sedici@nS 6: SseleccionarS y la tecla de funci@n FS estAn asi%nadas al c@di%o de funci@n +ICK.
Ee!plo .:
D*T* T7GT="0>.
(T*RT60F6(747CTI0D.
+7RF0R &RIT7J*DDJLID7 -(ID3 (+*C7 (+*C7.
*T 4ID76(747CTI0D.
C*(7 T7GT.
&L7D I4ist inde8I.
+7RF0R &RIT7J*DDJLID7 -(ID3 IGI (+*C7.
&L7D I-ser co##andI.
+7RF0R &RIT7J*DDJLID7 -(ID3 (+*C7 IGI.
&L7D 0TL7R(.
(-;TR*CT " FR0 (C64(IDD.
+7RF0R &RIT7J*DDJLID7 -(ID3 (+*C7 (+*C7.
7DDC*(7.
C47*R T7GT.
F0R &RIT7J*DDJLID7 -(ID3 +JF4*3J4(IDD +JF4*3J-C0.
&RIT7 Q I(C64(IDDEI.
+7RF0R &RIT7J&ITLJC040R -(ID3 (C64(IDD +JF4*3J4(IDD.
T7GT N I4ist inde8I.
LID7 T7GT.
&RIT7 Q I(C6-C0EI.
+7RF0R &RIT7J&ITLJC040R -(ID3 (C6-C0 +JF4*3J-C0.
T7GT N I-ser co##andI.
LID7 T7GT.
IF (C64(IDD : 0.
&RIT7 Q I+ICK here to %o bac, one list le!elI.
7DDIF.
69
7DDF0R.
F0R &RIT7J&ITLJC040R -(ID3 +JH*4-7
+JF4*3J+0(ITIH7.
IF +JF4*3J+0(ITIH7 N (+*C7.
&RIT7 +JH*4-7 C040R C04JD0R*4.
74(7.
&RIT7 +JH*4-7 C040R C04J+0(ITIH7.
7DDIF.
7DDF0R.
(IDE
Definicin: 4a sentencia LID7 per#ite asociar a cada lMnea de un listado ciertos ca#pos? <ue posterior#ente podrAn ser
leMdos. 7stos ca#pos puede no salir en el listado.
Sintaxis:
LID7 9ca#po:.
4a orden LID7 al#acena el contenido del ca#po 9ca#po: en relaci@n con la lMnea actual de salida. 7l ca#po 9ca#po:
puede o no puede aparecer en el listado.
AT %SER+$O**A#D
Definicin: +ara per#itir <ue el pro%ra#a reaccione a las funciones <ue el usuario acti!e se utili5a el e!ento *T -(7R6
C0*DD.
Sintaxis:
*T -(7R6C0*DD.
9blo<ue6de6proceso:
7ste e!ento define un blo<ue de proceso <ue se acti!a cuando selecciona#os un co#ando. 4os co#andos se pueden
seleccionar a tra!Bs de los botones proporcionados en el pro%ra#a? o a tra!Bs del ca#po 0K6C0D7. 7ste e!ento se utili5a
en los infor#es interacti!os cuando %eneran salidas secundarias.
7l blo<ue de proceso del e!ento *T -(7R6C0*DD se e1ecuta cuando el usuario acti!a un c@di%o de funci@n presente
en el status acti!o en ese #o#ento. 7ste e!ento no se acti!a por los c@di%os de funci@n predefinido del siste#a o por el
c@di%o de funci@n +ICK <ue? co#o ya he#os !isto? acti!a el e!ento *T 4ID76(747CTI0D. 7l ca#po del siste#a (C6
-C0 nos per#ite saber <uB c@di%o de funci@n ha acti!ado el usuario.
Ee!plo .:
D*T*E D-;7R1 TC+7 I H*4-7 "0?
D-;7R" TC+7 I H*4-7 /?
R7(-4T TC+7 I.
(T*RT60F6(747CTI0D.
&RIT7E Q D-;7R1? I`I? D-;7R".
*T -(7R6C0*DD.
C*(7 (C6-C0.
&L7D I*DDI.
R7(-4T N D-;7R1 R D-;7R".
&L7D I(-;TI.
R7(-4T N D-;7R1 6 D-;7R".
&L7D I-4TI.
R7(-4T N D-;7R1 T D-;7R".
&L7D IDIHII.
R7(-4T N D-;7R1 Q D-;7R".
&L7D 0TL7R(.
&RIT7 I-n,no2n function codeI.
7GIT.
7DDC*(7.
&RIT7E Q IResultEI? R7(-4T.
S$RO"" "IST
70
Definicin: (e utili5a para hacer un despla5a#iento =scrollin%> del infor#e de salida? por e1e#plo? co#o respuesta a una
entrada por parte del usuario. 7l scrollin% puede ser hori5ontal o !ertical.
Sintaxis:
(CR044 4I(T [ F0R&*RD Z ;*CK&*RD \ W IDD7G 9Mndice: X W 9n: +*37( X.
Con la clAusula F0R&*RD el scrollin% se reali5a hacMa adelante. Con ;*CK&*RD se reali5a hacMa atrAs. (in la opci@n
IDD7G? el scrollin% se reali5a desde la posici@n actual en listado actual? una pA%ina adelante o atrAs en funci@n de la
pri#era clAusula. Con la opci@n IDD7G el scrollin% se reali5a en el ni!el #arcado por 9Mndice:. (in la clAusula +*37 se
a!an5a o retrocede una pA%ina.
7n todas las !ariantes <ue !ere#os de la sentencia la clAusula IDD7G tiene el #is#o si%nificado <ue el !isto anterior#ente.
4a sentencia (CR044 tiene efecto sobre el listado co#pleto. 4a sentencia no tiene efecto si se utili5a antes de la pri#era
sentencia de salida del listado. (i se utili5a despuBs de la pri#era sentencia de salida? el efecto de la sentencia es para todo
el listado? incluyendo posibles sentencias de salida posteriores.
(CR044 4I(T T0 [ FIR(T +*37 Z 4*(T +*37 Z +*37 9pA%ina: \
W IDD7G 9Mndice: X W 4ID7 9lMnea: X.
7l infor#e se despla5arA hasta la pri#era pA%ina con la opci@n FIR(T +*37? a la Olti#a pA%ina con la opci@n 4*(T +*37?
o a una pA%ina deter#inada con la opci@n +*37 9pA%ina:. Con la opci@n 4ID7 el siste#a #uestra la pA%ina en la cual se
encuentra la lMnea 9lMnea:. 4as lMneas de la cabecera y pie de pA%ina no se consideran a la hora de contar las lMneas del
infor#e.
(CR044 4I(T [ 47FT Z RI3LT \ W ;C 9n: +4*C7( X W IDD7G 9Mndice: X.
7l scrollin% se reali5a hori5ontal#ente? con 47FT hasta el #ar%en i5<uierdo? con RI3LT hasta el #ar%en i5<uierdo. Con la
clAusula ;C especifica#os el nO#ero de colu#nas <ue <uera#os despla5ar.
(CR044 4I(T [ 47FT Z RI3LT \ W ;C 9n: +4*C7( X W IDD7G 9Mndice: X.
Despla5a el infor#e hori5ontal#ente hasta la colu#na 9col:. 7l despla5a#iento? por lo tanto? podrA ser hacia la i5<uierda o
hasta la derecha en funci@n de la colu#na actual de listado.
READ "I#E
Definicin: +er#ite leer lMneas de un listado.
Sintaxis:
R7*D 4ID7 9lMnea: W IDD7G 9Mndice: X
W FI74D H*4-7 9c11: W IDT0 9c1": X ... 9cn1: W IDT0 9cn": X X
W 0F C-RR7DT +*37 Z 0F +*37 9pA%ina: X.
7sta sentencia sin utili5ar nin%una opci@n lee la lMnea con Mndice 9lMnea: en el listado actual? actuali5ando la !ariable (C6
4I(74 con el contenido de la lMnea? y actuali5ando todos los ca#pos asociados a la lMnea con la sentencia LID7. (i la lMnea
indica e8iste? (C6(-;RC to#a el !alor 0? en caso contrario to#a el !aloe .. 4as distintas opciones de la sentencia tienen los
si%uientes efectosE
IDD7G 6: 4a lMnea <ue hay <ue leer serA del listado con el ni!el deter#inado en 9Mndice:. podrA ser una lMnea del
listado bAsico =!alor 0> o de un listado secundario =!alor 1? "? ...>
FI74D H*4-7 6: 7l siste#a interpreta la salida del ca#po 9c11: sobre la lMnea 9lMnea: para al#acenarlo sobre el
#is#o ca#po o sobre el ca#po alternati!o 9c1": si utili5a#os la opci@n IDT0.
0F C-RR7DT +*37 6: Con estA clAusula el !alor de 9lMnea: no se refiere al listado co#pleto? sino a la posici@n
en la pA%ina actual.
0F +*37 6: Con esta clAusula el !alor de 9lMnea: no se refiere al listado co#pleto? sino a la posici@n relati!a de
la pA%ina 9pA%ina:.
READ $%RRE#T "I#E
Definicin: Huel!e a una lMnea ya tratada? por e1e#plo? por el e!ento de la tecla de funci@n F"? o por la sentencia R7*D
4ID7.
Sintaxis:
R7*D C-RR7DT 4ID7 W FI74D H*4-7 9c11: W IDT0 9c1": X ... 9cn1: W IDT0 9cn": X X.
4a clAusula FI74D H*4-7 tiene el #is#o efecto <ue el !isto en la sentencia R7*D 4ID7.
71
*ODI'& $%RRE#T "I#E
Definicin: 7sta sentencia #odifica la Olti#a lMnea leMda.
Sintaxis:
0DIFC C-RR7DT 4ID7 W 4ID7 F0R*T 9opci@n61: ... 9opci@n6n: X
W 4ID7 F0R*T 9opci@n61: ... 9opci@n6n: X
W FI74D H*4-7 9c11: W FR0 9c1": X ... 9cn1: W FR0 9cn": X X W FI74D F0R*T 9c1: 9opciones61: ... 9cn:
W9opciones6n: X.
(i no utili5a#os nin%una opci@n? la Olti#a lMnea leMda se #odifica con el contenido actual del ca#po (C64I(74. 7l Area LID7
de la lMnea se sustituye por los !alores actuales de los ca#po correspondientes? sin e#bar%o esto no influye en los !alores
#ostrados. (i el siste#a puede #odificar la lMnea? el ca#po del siste#a (C6(-;RC to#a el !alor 0. 7n caso contrario to#a
un !alor distinto de 0.
Ee!plo .:
D*T* I TC+7 I H*4-7 ".
&RIT7E Q IIntensifiedI IDT7D(IFI7D?
IInputI ID+-T?
Icolor 1I C040R 1?
Iintensified offI IDT7D(IFI7D 0FF.
T 4ine selection
*T 4ID76(747CTI0D.
0DIFC C-RR7DT 4ID7
4ID7 F0R*T IDH7R(7
ID+-T 0FF
C040R N I.
Ee!plo /:
D*T*E F4*3 H*4-7 IGI?
T7GT="0> H*4-7 I*ustraliaI?
I TC+7 I H*4-7 7.
F0R*T IDT7D(IFI7D 0FF.
&RIT7E Q F4*3 *( CL7CK;0G? T7GT C040R C04JD73*TIH7.
*T 4ID76(747CTI0D.
0DIFC C-RR7DT 4ID7
4ID7 F0R*T IDT7D(IFI7D
FI74D H*4-7 F4*3 FR0 (+*C7
FI74D F0R*T F4*3 ID+-T 0FF
T7GT C040R N I.
*ODI'& "I#E
Definicin: 7sta sentencia #odifica cual<uier lMnea de un listado.
Sintaxis:
0DIFC 4ID7 9n: W IDD7G 9Mndice: Z 0F C-RR7DT +*37 Z 0F +*37 9pA%ina: X
W 4ID7 F0R*T 9opci@n61: ... 9opci@n6n: X
W 4ID7 F0R*T 9opci@n61: ... 9opci@n6n: X
W FI74D H*4-7 9c11: W FR0 9c1": X ... 9cn1: W FR0 9cn": X X
W FI74D F0R*T 9c1: 9opciones61: ... 9cn: W9opciones6n: X.
(in las clAusulas opcionales de la pri#era lMnea de la sentencia? el siste#a #odifica la lMnea 9n: del listado en el cual ocurra
el e!ento =Mndice (C64I(TI>. Con las clAusula de la pri#era lMnea se puede #odificar lo si%uienteE
IDD7G 6: (e #odifica la lMnea 9n: del listado de ni!el definido en 9Mndice:.
0F C-RR7DT +*37 6: (e utili5a para #odificar la lMnea 9n: de la pA%ina 9pA%ina:.
0F +*37 6: (e utili5a para #odificar la lMnea 9n: de la pA%ina 9pA%ina:.
7l si%nificado del resto de clAusulas es el si%uienteE
4ID7 F0R*T 6: *ctuali5a el for#ato de salida de la lMnea a #odificar de acuerdo con las especificaciones
reali5adas en 9opci@n61: ... 9opci@n6n:.
72
FI74D H*4-7 6: odifica ciertos ca#pos de la lMnea <ue #odifica#os. 7l ca#po 9c11: se #odifica con el !alor
actual del ca#po 9c1: o del ca#po 9c1": si se especifica la clAusula FR0. (i el ca#po especificado se utili5a
#As de una !e5 en la lMnea <ue se <uiere #odificar? el siste#a #odifica? s@lo el pri#er ca#po. (i en el ca#po no
aparece en la lMnea <ue hay <ue #odificar s@lo el pri#er ca#po. (i en el ca#po no aparece en la lMnea <ue hay
<ue #odificar? la opci@n se i%nora. 7l siste#a #odifica el contenido del ca#po de la lMnea <ue se debe #odificar?
independiente#ente del contenido actual del ca#po del siste#a (C64I(74. *de#As de #odificar un ca#po con
esta clAusula se puede #odificar directa#ente la !ariable del siste#a (C64I(74.
FI74D F0R*T 6: odifica el for#ato de salida del ca#po especificado en 9c1:? con las opciones 9opciones61:.
7n opciones 9opciones61: se puede especificar una o #As de una opci@n de la clAusula F0R*T. 7sta clAusula
sobreescribe las opciones utili5adas con la clAusula 4ID7 F0R*T. (i el ca#po especificado se utili5a #As de
una !e5 en la lMnea <ue se !a a #odificar? el siste#a #odifica s@lo el pri#er ca#po. (i el ca#po no aparece en la
lMnea <ue se !a a #odificar? la opci@n se i%nora.
-I#DO-
Definicin: 7sta sentencia #uestra el listado secundario <ue se presenta en una !enta en lu%ar de en una pantalla
co#pleta.
Sintaxis:
&IDD0& (T*RTID3 *T 9ci: 9fs: W 7DDID3 *T 9cd: 9fi: X.
9ci: y 9fs: deter#ina la es<uina superior i5<uierda. 9ci: deter#ina la colu#na i5<uierda y 9fs: la fila superior. 9cd: y 9fi:
deter#inan la es<uina inferior derecha. 9cd: deter#ina la colu#na derecha y 9fi: la fila inferior.
4a clAusula 7DDID3 es opcional? si no se utili5a? la !entana alcan5a la es<uina inferior derecha de la pantalla.
Ee!plo:
&IDD0& (T*RTID3 *T 1 1/
7DDID3 *T 79 "'.
&RIT7 ITe8tI.
AT 'IRST ;; E#DAT
Definicin: 4a sentencia *T FIR(T .. 7DD*T s@lo puede ser utili5ada dentro de un bucle 400+ .. 7DD400+ e identifica
un blo<ue de proceso. 4a sentencia se e1ecuta con el pri#er !alor o pri#er re%istro de la sentencia 400+ .. 7DD400+.
Sintaxis:
*T FIR(T.
9blo<ue6sentencias:
7DD*T.
4a sentencia *T FIR(T se cierra con 7DD*T? identificando de esta for#a un blo<ue de proceso. 7n un blo<ue *T FIR(T ..
7DD*T el Area de traba1o no se rellena con la lMnea actual de la tabla interna. Todos los ca#pos <ue no for#an parte de la
cla!e estAndar de la tabla to#an el !alor inicial. +ara la condici@n de lMnea FIR(T el siste#a sobrescribe todos los ca#pos
de la cla!e estAndar? <ue se encuentran a la derecha del ca#po 9ca#po: con asterisco =T>. Do se debe utili5ar la sentencia
*T FIR(T .. 7DD*T en co#binaci@n con la sentencia 400+ .. 7DD400+ con las clAusulas FR0? T0 o &L7R7.
Ee!plo .:
D*T*E ;73ID 0F C0+*DI7( 0CC-R( "0?
D*7='0>?
+R0D-CT="0>?
(*47( TC+7 I?
7DD 0F C0+*DI7(.
...
400+ *T C0+*DI7(.
*T FIR(T.
D7&6+*37.
&RIT7 Q C0+*DI7(6;-KR(.
7DD*T.
&RIT7E Q C0+*DI7(6+R0D-CT? C0+*DI7(6(*47(.
7DD400+.
73
AT "AST ;; E#DAT
Definicin: 4a sentencia *T 4*(T .. 7DD*T s@lo puede ser utili5ada dentro de un bucle 400+ .. 7DD400+ e identifica un
blo<ue de proceso. 4a sentencia se e1ecuta con el Olti#o !alor o Olti#o re%istro de la sentencia 400+ .. 7DD400+.
Sintaxis:
AT "AST;
9blo<ue6sentencias:
7DD*T.
4a sentencia *T 4*(T se cierra con 7DD*T? identificando de esta for#a un blo<ue de proceso. 7n un blo<ue *T 4*(T ..
7DD*T el Area de traba1o no se rellena con la lMnea actual de la tabla interna. Todos los ca#pos <ue no for#an parte de la
cla!e estAndar de la tabla to#an el !alor inicial. +ara la condici@n de lMnea 4*(T el siste#a sobrescribe todos los ca#pos
de la cla!e estAndar? <ue se encuentran a la derecha del ca#po 9ca#po: con asterisco =T>. Do se debe utili5ar la sentencia
*T 4*(T .. 7DD*T en co#binaci@n con la sentencia 400+ .. 7DD400+ con las clAusulas FR0? T0 o &L7R7.
Ee!plo .:
D*T*E ;73ID 0F C0+*DI7( 0CC-R( "0?
D*7='0>?
+R0D-CT="0>?
(*47( TC+7 I?
7DD 0F C0+*DI7(.
...
400+ *T C0+*DI7(.
*T D7& D*7.
D7&6+*37.
7DD*T.
&RIT7E Q C0+*DI7(6+R0D-CT? C0+*DI7(6(*47(.
*T 4*(T.
(-.
&RIT7E Q C0+*DI7(6D*7? C0+*DI7(6(*47(.
7DD*T.
7DD400+.
AT #E- ;; E#DAT
Definicin: 4a sentencia *T D7& .. 7DD*T s@lo puede ser utili5ada dentro de un bucle 400+ .. 7DD400+ e identifica un
blo<ue de proceso. 4a sentencia se e1ecuta cuando se detecta <ue para el ca#po especificado se !a a producir un nue!o
!alor
Sintaxis:
*T D7& 9ca#po:.
9blo<ue6sentencias:
7DD*T.
4a sentencia *T D7& se cierra con 7DD*T? identificando de esta for#a un blo<ue de proceso. 7n un blo<ue *T .. 7DD*T
el Area de traba1o no se rellena con la lMnea actual de la tabla interna. Todos los ca#pos <ue no for#an parte de la cla!e
estAndar de la tabla to#an el !alor inicial. +ara la condici@n de lMnea D7& el siste#a sobrescribe todos los ca#pos de la
cla!e estAndar? <ue se encuentran a la derecha del ca#po 9ca#po: con asterisco =T>. Do se debe utili5ar la sentencia *T ..
7DD*T en co#binaci@n con la sentencia 400+ .. 7DD400+ con las clAusulas FR0? T0 o &L7R7.
Ee!plo .:
D*T*E ;73ID 0F C0+*DI7( 0CC-R( "0?
D*7='0>?
+R0D-CT="0>?
(*47( TC+7 I?
7DD 0F C0+*DI7(.
...
400+ *T C0+*DI7(.
*T D7& D*7.
D7&6+*37.
&RIT7 Q C0+*DI7(6D*7.
74
7DD*T.
&RIT7E Q C0+*DI7(6+R0D-CT? C0+*DI7(6(*47(.
7DD400+.
AT E#D O' ;; E#DAT
Definicin: 4a sentencia *T 7DD 0F .. 7DD*T s@lo puede ser utili5ada dentro de un bucle 400+ .. 7DD400+ e identifica
un blo<ue de proceso. 4a sentencia se e1ecuta cuando se detecta <ue ca#bia al%On !alor para el ca#po especificado.
Sintaxis:
*T 7DD 0F 9ca#po:.
9blo<ue6sentencias:
7DD*T.
4a sentencia *T 7DD 0F se cierra con 7DD*T? identificando de esta for#a un blo<ue de proceso. 7n un blo<ue *T 7DD 0F
.. 7DD*T el Area de traba1o no se rellena con la lMnea actual de la tabla interna. Todos los ca#pos <ue no for#an parte de la
cla!e estAndar de la tabla to#an el !alor inicial. +ara la condici@n de lMnea 7DD 0F 9ca#po: el siste#a sobrescribe todos
los ca#pos de la cla!e estAndar? <ue se encuentran a la derecha del ca#po 9ca#po: con asterisco =T>. Do se debe utili5ar
la sentencia *T 7DD 0F .. 7DD*T en co#binaci@n con la sentencia 400+ .. 7DD400+ con las clAusulas FR0? T0 o
&L7R7.
Ee!plo .:
D*T*E ;73ID 0F C0+*DI7( 0CC-R( "0?
D*7='0>?
+R0D-CT="0>?
(*47( TC+7 I?
7DD 0F C0+*DI7(.
...
400+ *T C0+*DI7(.
*T D7& D*7.
D7&6+*37.
&RIT7 Q C0+*DI7(6D*7.
7DD*T.
&RIT7E Q C0+*DI7(6+R0D-CT? C0+*DI7(6(*47(.
*T 7DD 0F D*7.
(-.
&RIT7E Q C0+*DI7(6D*7? C0+*DI7(6(*47(.
7DD*T.
7DD400+.
S%*
Definicin: 4a sentencia (- s@lo se puede utili5ar en el bucle 400+..7DD400+. Con ella? el siste#a su#a todos
a<uellos ca#pos nu#Bricos? co#ponentes de la tabla interna? de1ando el resultado sobre el Area de traba1o de la tabla
interna.
Sintaxis:
(-.
(i la sentencia (- puede ser utili5ada en la sentencia *T .. 7DD*T. 7n este caso? los ca#pos a su#ar serAnE
FIR(T 6: (u#an todas las lMneas.
4*(T 6: (u#an todas las lMneas.
D7& 9ca#po: 6: (u#an todas las lMnea para el !alor del ca#po <ue acti!a la sentencia.
7DD 0F 9ca#po: 6: (u#an todas las lMnea para el !alor del ca#po <ue acti!a la sentencia.
(i al%On co#ponente de la tabla interna es a su !e5 una tabla interna? la sentencia (- no puede ser utili5ada
AT 5fg6 ;; E#DAT
75
Definicin: 4a sentencia *T 9f%: .. 7DD*T s@lo puede ser utili5ada dentro de un bucle 400+ .. 7DD400+ para e8tractos?
e identifica un blo<ue de proceso. 4a sentencia se e1ecuta cuando se detecta <ue ca#bia al%On !alor en el field6%roup.
Sintaxis:
*T 95f%: [ &ITL 9f%1: \.
9blo<ue6sentencias:
7DD*T.
4a setencia *T 9f%: se cierra con 7DD*T? identificando de esta for#a un blo<ue de proceso.
4a clAusula &ITL se utili5a para indicar <ue la sentencia *T se debe e1ecutar si para el field6%roup 9f%: le si%ue el
field6%roup 9f%1:.
Ee!plo .:
D*T*E D*7='0>?
(*47( TC+7 I.
FI74D63R0-+(E L7*D7R? IDF0(.
ID(7RTE D*7 IDT0 L7*D7R?
(*47( IDT0 IDF0(.
...
400+.
*T D7& D*7.
D7&6+*37.
7DD*T.
...
*T 7DD 0F D*7.
&RIT7E Q D*7? (-=(*47(>.
7DD*T.
7DD400+.
E=TRA$T
Definicin: 7scribe un field6%roup sobre un e8tracto de datos.
Sintaxis:
7GTR*CT 9field6%roup:.
7scribe todos los ca#pos del field6%roup en un re%istro de un e8tracto de datos. (i se ha definido un field6%roup con el
no#bre L7*D7R? los re%istros se aVaden con la cla!e definida en dicho field6%roup.
4os errores en tie#po de e1ecuci@n <ue se pueden producir son los si%uienteE
7GTR*CTJ*FT7RJ(0RTQ400+ 6: (e ha reali5ado un 7GTR*CT despuBs de la sentencia 400+ o (0RT.
7GTR*CTJFI74DJT00J4*R37 6: 4a lon%itud de los datos a pasar es #As %rande <ue la lon%itud del ca#po
donde <uere#os %uardar dicho dato.
7GTR*CTJL7*D7RJD0TJ-DIF-7 6: 7l field6%roup L7*D7R se ha #odificado despuBs <ue los re%istros se
hayan e8traMdo con la sentencia 7GTR*CT.
7GTR*CTJT00J4*R37 6: 4a lon%itud total de los datos <ue se !an a e8traer =incluido los ca#pos del L7*D7R>
es de#asido %rande
'IE"D ,RO%PS
Definicin: (e utili5a para declarar un e8tracto de datos? ta#biBn lla#ado %rupo de ca#pos o field-gro1ps.
Sintaxis:
FI74D63R0-+( 9no#bre:.
-n field-gro1p se utili5a para a%rupar un con1unto de ca#po con el #is#o no#bre. 7l no#bre L7*D7R es especial? los
ca#pos <ue se definan en ese field-gro1ps ser!irAn co#o criterio de ordenaci@n en la sentencia (0RT.
Ee!plo:
76
FI74D63R0-+(E L7*D7R? 0RD7R? +R0D-CT.
TOP+O'+PA,E
Definicin: 7ste e!ento define un blo<ue de proceso <ue se acti!a cuando el siste#a detecta <ue !a#os a co#en5ar a
escribir en la pA%ina actual. 7l nO#ero de lMneas por pA%ina se define en la sentencia R7+0RT. (e suele utili5ar este e!ento
para co#poner cabeceras de pA%inas.
Sintaxis:
T0+60F6+*37.
7n los listados secundarios el siste#a no #uestra la cabecera de pA%ina estAndar? ni ta#poco acti!a el e!ento T0+60F6
+*37. +ara crear cabeceras de pA%ina en los listados secundarios se utili5a el si%uiente e!entoE
T0+60F6+*37 D-RID3 4ID76(747CTI0D.
7l siste#a acti!a este e!ento en todos los listados secundarios. (i <uere#os crear diferentes cabeceras de pA%ina para los
diferentes listados secundarios debe#os pro%ra#ar el blo<ue de proceso del e!ento de acuerdo? por e1e#plo? con las
!ariables del siste#a (C64(IDD o (C6+FK7C en co#binaci@n con las sentencias de control IF o C*(7. Cuando nos
despla5a#os !ertical#ente en un listado secundario? la cabecera per#anece fi1a.
Ee!plo:
+R03R* D0C-7G* D0 (T*DD*RD +*37 L7*DID3.
(T*RT60F6(747CTI0D.
&RIT7E Q Iline 1I.
&RIT7E Q Iline "I.
&RIT7E Q Iline 'I.
T0+60F6+*37.
&RIT7E Q ILeadin%I.
-4ID7.
4a salida en pantalla serMaE
Leadin%
6666666666666666666666666666666
line 1
line "
line '
E#D+O'+PA,E
Definicin: 7ste e!ento define un blo<ue de proceso <ue se acti!a cuando el siste#a detecta <ue he#os escrito en la
Olti#a lMnea de la pA%ina actual.
Sintaxis:
7DD60F6+*37.
7l nO#ero de lMneas por pA%ina se define en la sentencia R7+0RT. 7ste e!ento se utili5a para co#poner pies de pA%ina
Parte IV
78iste una for#a #uy rApida de pro%ra#a y de obtener infor#aci@n? tan sencilla co#o teclear una si#ple instrucci@n y tan
potente <ue puede rellenar #ultiples tablas en un #o#entos. C #ediante la pro%ra#aci@n orientada a ;D4 se puede
conse%uir.
7n la i#a%en de la derecha pode#os !er la estructura tMpica de una D;4? su
estructura nos puede parecer un hibrido entre el editor y la biblioteca de funciones ya
<ue contiene ele#entos de a#bos.
4o pri#ero <ue nos lla#a la atenci@n es la estructura? en esta opci@n pode#os !er
co#o estA creada y de una for#a 1erar<uica la estructura de la ;D4.
(i to#a#os co#o e1e#plo la D;4 ;") =aestro de +ro!eedores>? !e#os <ue estA
estA enla5ada con la 4)A6 <ue es la <ue contiene los datos reales de los acreedores
y ade#As estA enla5adas con tablas de finan5asE B!I;. B;<). B!+G para una
obtenci@n rApida de sus docu#entos contables.
77
De esta for#a sabe#os <ue esta ;D4 tiene un acceso total a los datos de los acreedores? tanto ad#inistrati!os co#o
financieros.
7l si%uiente punto? la selecciones es al%o irre%ular? ya <ue nor#al#ente so#os nosotros dentro de cada pro%ra#a los <ue
indica#os <ue selecciones <uere#os a cada #o#ento.
Do obstante cuando se diseVa una ;D4 se establece un diseVo bAsico de selecciones
<ue son Otiles y necesarias para la obtenci@n de los datos. 4a %ran !enta1a de esto
radica en el #o#ento de incorporar la ;D4 a nuestro pro%ra#a ya <ue
auto#Atica#ente nos incorpora las selecciones.
4os de#As puntos ya son #As sencillos? la utili5aci@n de los te8tos y l@%ica#ente el
pro%ra#a de base de datos son co#o los anteriores. Lay <ue decir <ue el pro%ra#a
<ue real#ente se encar%a de recuperar todos los ca#pos de la ;D4 es el <rograma
base datos y si !e#os su contenido !ere#os <ue son las #is#as selecciones <ue
nosotros haria#os con 0pen6(F4. +or eso pode#os lle%ar a enteder la ;D4 co#o
unas #acros para no tener <ue repetir sentencias de 0pen6(F4.
%tili?acib )D"
+ara poder utili5ar correcta#ente las ;D4 dentro de nuestros *;*+ dispone#os de
!arias directi!as para obtener la infor#aci@n y funcionan i%ual <ue los e!entos? es decir? hasta <ue no encuentro otro e!ento
todo lo tecleado ba1o de ellas es su c@di%o. Dor#al#ente para ter#inar con los e!entos de ;D4 se utili5a el 7DD60F6
(747CTI0D
o 37T? recupera un ni!el
o +-T? %raba un ni!el.
Parte V
-na de las !enta1as de los pro%ra#as es <ue entre ellos se pueden co#unicar para de esta for#a poder hacerse los <ue se
conoce co#o pase de parA#etros. De esta for#a los pro%ra#a se lla#an dependiendo de los !alores o resultados de
e1ecuci@n de otros.
Lay <ue reconocer? <ue cuando uno habre una sesi@n en (*+ este crea un entorno de desarrollo para esta sesi@n. De
hecho? se crean dos 5onas de #e#@ria? una <ue lla#are#os %lobal a la sesi@n? #ientras <ue habrA un se%unda <ue serA
local al #odo. 4a diferencia radica en <ue dentro de una sesi@n pode#os crear diferentes #odos =hasta seis> estos #odos
disponen de una 5ona de #e#@ria propia <ue la !a#os a lla#ar local. 7ntonces? todos los #odos de una #is#a sesi@n
co#parte una #is#a #e#@ria %lobal? #ientras <ue las #e#orias locales s@lo son dependientes de cada #odo.
"la!adas
Co#o un pro%ra#a puede ser lla#ado de diferentes for#as dependiendo del tipo de ob1eto <ue sea? ade#As el pro%ra#a
destino puede destruir todos los ori%enes.
o (-;IT? lla#ada tipo report.
o C*44 TR*D(*CTI0D? lla#a a una transacci@n.
o 47*H7 T0 TR*D(*CTI0D? lla#a a una transacci@n borrando las de#As lla#adas.
o 47*H7 T0 (CR77D? de1a el proceso de la pantalla actual y pasa a la si%uiente.
o C*44 F-DCTI0D? lla#a a una funci@n.
o C*44 DI*403? lla#a a otro #@dulo de dialo%o.
o C*44? lla#a a una funci@n propia del ,ernel.
Par@!etros
Ca he#os !isto <ue so#os capaces de lla#ar a otros pro%ra#as o #odulos dentro de uno de los nuestros? pero #uchas
!eces es necesario tener un pase de para#etros #As duradero <ue el si#ple =it% del s1bmit o los e,port>import de las
funciones? etc. +or ello conta#os con una herra#ientas <ue nos !an a de1ar !ariables en las #e#orias inter#edias. *<uM es
cuando a enteder el pr@lo%o del principio del capMtulo.
o I+0RT y 7G+0RT? per#iten %uardar y recuperar en la #e#oria local.
78
o (7T Q 37T? per#iten %uardar y recuperar en la #e#oria %lobal.
'icAeros Externos
uchas !eces se necesitan acceder a ficheros plain-te,t <ue son e8ternos a (*+ y <ue nor#al#ente proceden de otro tipo
de #A<uinas? estilo *(6.00? H(? +C o Internet. (*+ tiene la posibilidad de acceder al contenido de esos ficheros y
tratarlos? (*+ puede acceder a las unidades locales del +C? asM co#o todos los directorios <ue estan co#partidos por (*+?
!er =A466>. +or ello conta#os con las directi!asE
o 0+7D D*T*(7T? abre un fichero e8terno.
o R7*D D*T*(7T? lee un fichero e8terno.
o TR*D(F7R? %raba en un fichero e8terno.
o C40(7 D*T*(7T? cierra un fichero e8terno.
78isten ta#biBn dos funciones <ue nos per#iten subir en blo<ue? sin tener <ue hacer una lectura de cada uno de los
re%istros. (on #uy Otiles ya <ue de1an el contenido de los ficheros en tablas internas para lue%o poder ser tratadas? las
funciones son -SB%P"OAD y -SBDO-#"OAD.
"EAVE TO S$REE#
Definicin: +er#ite abandonar la dynpro actual para pasar a otra dynpro.
Sintaxis:
47*H7 T0 (CR77D 9dynpro:.
9dynpro: identifica el nO#ero del dynpro <ue se !a a procesar. 7sta sentencia es una #e5cla de la sentencia (7T
(CR77D y 47*H7 (CR77D. (i 9dynpro: es 0 se de!uel!e el control al pro%ra#a <ue reali5@ la lla#ada al #@dulo de
funci@n.
7l e1e#plo de la sentencia (7T (CR77D nos sir!e para !er un e1e#plo de la sentencia 47*H7 (CR77D.
V9ase ta!bi9n: (7T (CR77D? 47*H7 (CR77D.
SET S$REE#
Definicin: Deter#ina cual !a ser la dynpro si%uiente en procesarse.
Sintaxis:
(7T (CR77D 9dynpro:.
9dynpro: deter#ina el nO#ero del dynpro <ue serA procesado cuando en dynpro actual se haya procesado co#pleta#ente.
+ara ter#ina el proceso de un dynpro se puede utili5ar la sentencia (7T (CR77D con el !alor 0 o la sentencia 47*H7
(CR77D. -n proceso ta#biBn ter#ina cuando se han e1ecutado todos los #@dulos del proceso l@%ico del dynpro.
"EAVE S$REE#
Definicin: (e utili5a para abandonar el proceso de la pantalla actual.
Sintaxis:
47*H7 (CR77D.
Con esta sentencia abandona#os el proceso del dynpro actual. 7l si%uiente dynpro puede haber sido definido
estAtica#ente en los atributos del dynpro o dinA#ica#ente con la sentencia (7T (CR77D. (i el si%uiente dynpro <ue se !a
a procesar es el 0? el siste#a de!uel!e control al pro%ra#a <ue reali5@ la lla#ada al dynpro.
I*PORT 'RO* *E*OR&
Definicin: (e utili5a para leer ob1etos de un pro%ra#a *;*+Q. de la #e#oria *;*+Q..
Sintaxis:
79
I+0RT 9ca#po11: W T0 9ca#po1":X 9ca#po"1: W T0 9ca#po"":X ...
FR0 70RC ID 9cla!e:.
4ee los ob1etos especificados en la lista 9ca#po11:? 9ca#po"1:? ... del cluster al#acenado en la #e#oria *;*+Q..
(in la clAusula T0 el ob1eto de dato al#acenado en el cluster se %uarda en el ob1eto definido en el pro%ra#a con el #is#o
no#bre. Con la clAusula T0? el ob1eto de dato 9ca#po11: al#acenado en el cluster se %uarda en el ob1eto de dato
9ca#po1": <ue esta definido en el pro%ra#a.
4a cla!e 9cla!e: puede tener hasta '" caracteres e identifica el cluster de la #e#oria *;*+Q.. Do es necesario leer todos
los ob1etos de datos al#acenados en el cluster. (i intenta#os leer un cluster ba1o una cla!e <ue no e8iste (C6(-;RC !ale
.? en caso contrario? o sea? <ue e8ista la cla!e aun<ue no indi<ue#os un ob1eto de datos la !ariable !aldrA 0.
(i el ob1eto de dato especificado no e8iste el cluster no !aria. 7sta sentencia no co#prueba si la estructura de los ob1etos en
#e#oria coincide con los especificados en la lista. 7l transporte se reali5a bit a bit? por lo tanto? si la estructuras no
coinciden se puede %enerar inconsistencias.
E=PORT TO *E*OR&
Definicin: (e utili5a para %uardar ob1etos de un pro%ra#a *;*+Q. a la #e#oria *;*+Q..
Sintaxis:
7G+0RT 9ca#po11: W FR0 9ca#po1":X 9ca#po"1: W FR0 9ca#po"":X ...
T0 70RC ID 9cla!e:.
(e utili5a para al#acenar los datos especificados en la lista 9ca#po11:? 9ca#po"1:? ... co#o cluster en la #e#oria
*;*+Q..
(in la clAusula FR0 el ob1eto de datos 9ca#po11: se %uarda con su propio no#bre? con la opci@n FR0 el
ob1eto de dato 9ca#po1": se %uarda con el no#bre 9ca#po11:.
4a cla!e puede tener hasta '" caracteres e identifica el cluster en la #e#oria *;*+Q.. 4a sentencia 7G+0RT
sie#pre sobrescribe cual<uier cluster <ue e8ista con la #is#a cla!e.
(i utili5a#os tablas internas con cabecera de lMnea? serA el contenido de la tabla y no la cabecera la <ue se %uarde en el
cluster
E=PORT
Definicin: 78porta la descripci@n de una estructura %enerada. (*+ cre@ esta sentencia para uso interno. (e puede utili5ar
pero hay <ue tener en cuenta <ue (*+ puede ca#biar o eli#inar la sinta8is sin pre!io a!iso.
Sintaxis:
7G+0RT 9tabla: 9h: 9f: ID 9id:.
78porta la descripci@n de la estructura 9tabla:. 7sta sentencia s@lo se utili5a en las herra#ientas del repositorio de *;*+Q..
(e puede producir el error 7G+0RTJD*7T*;J&0RKJIF si el no#bre de la tabla es de#asiado lar%o.
OPE# DATASET
Definicin: *bre un fichero en el ser!idor de aplicaci@n.
Sintaxis:
0+7D D*T*(7T 9fichero: W 7((*37 9#ensa1e: X
W F0R ID+-T Z F0R 0-+-T Z F0R *++7DDID3 X
W ID ;ID*RC Z ID T7GT 0D7 X W *T +0(ITI0D 9posici@n: X.
*bre el fichero 9fichero:. (i no se especifica la opci@n para el #odo de apertura? el fichero se abre para lectura en #odo
binario. (i el siste#a puede abrir el fichero? (C6(-;RC !ale 0. 7n caso contrario !ale ). 9fichero: puede ser un literal o un
ca#po <ue conten%a el no#bre del fichero. (i no se especifica el ca#ino de acceso del fichero? el siste#a abre el fichero en
el directorio donde el siste#a (*+ se estB e1ecutnado? en el ser!idor de aplicaci@n. +ara abrir un fichero? el usuario ba1o el
<ue se estB e1ecutando el siste#a (*+ debe tener las apropiadas autori5aciones del siste#a operati!o.
7((*37 6: (obre el ca#po 9#ensa1e: recibi#os #ensa1es del siste#a operati!o de c@#o ha ido la operaci@n
de apertura del fichero. 9#ensa1e: y la !ariable del siste#a (C6(-;RC nos pueden ser!ir para controlar los
posibles errores <ue puedan sur%ir.
80
F0R ID+-T 6: 7l fichero se abre para lectura. (i el fichero no e8iste (C6(-;RC !ale ). (i el fichero ya se
ecnuentra abierto =para cual<uier opci@n de aperturaE lectura? escritura? aVadir>? el siste#a inicia el
posiciona#iento sobre el fichero al principio de Bste. Con esto el siste#a no da error? pero se reco#ienda utili5ar
la sentencia C40(7 D*T*(7T antes de utili5ar de nue!o un fichero.
F0R 0-+-T 6: *bre un fichero para escritura. (i el fichero no e8iste se crea? si e8iste y ade#As esta abierto en
el pro%ra#a? el posiciona#iento sobre el fichero se inicia a la pri#era posici@n de Bste. (i el fichero no se puede
abrir? (C6(-;RC !aldrA ).
F0R *++7DDID3 6: 7l fichero se abre para escritura para aVadir re%istros al final del fichero. (i el fichero no
e8iste se crea. (i el fichero e8iste y estA cerrado? el siste#a abre el fichero y posiciona el cursor del fichero al final
de Bste. (i el fichero e8iste y estA abierto en el pro%ra#a? la posici@n del cursor del fichero se posiciona al final de
Bste. 4a !ariable del siste#a sie#pre to#a el !alor 0. 7s aconse1able cerrar el fichero antes de abrirlo en el
#is#o pro%ra#a.
ID ;ID*RC 0D7 6: 7l fichero abierto? tanto para lectura co#o para escritura? los datos se trans#iten byte a
byte. 7l contenido del fichero no es interpretado durante la trans#isi@n. Cuando escribi#os el contenido de un
ca#po sobre un fichero? el siste#a trans#ite todos los bytes del ca#po fuente. Cuando lee#os datos de un
fichero de un ca#po? el nO#ero de bytes transferidos depende de la lon%itud del ca#po receptor. Cuando
despuBs de la lectura? referencia#os el ca#po destino en otra sentencia? el siste#a interpreta el contenido del
ca#po en funci@n de su tipo.
ID T7GT 0D7 6: 7l fichero se abre en #odo te8to. 4os datos leMdos del fichero o los datos escritos sobre el
fichero se reali5an de lMnea en lMnea. +or cada sentencia TR*D(F7R se escriben todos los bytes pertenecientes a
una lMnea y se pone una #arca de fin de lMnea. (i el ca#po destino es #As pe<ueVo <ue la lMnea del fichero? los
datos se truncan. (i el ca#po destino es #ayor <ue la lMnea leMda? se rellena con caracteres en blanco. (e debe
utili5ar el #odo te8to si <uere#os escribir strin% sobre el fichero? o si conoce#os el for#ato de la lMnea del fichero.
*T +0(ITI0D 6: 7l fichero se abre en una posici@n deter#inada. 7l cursor del fichero se posiciona en la posici@n
9posici@n: es contada en bytes desde el principio del fichero. Do se puede especificar una posici@n anterior al
principio del fichero.
$"OSE DATASET
Definicin: 7sta sentencia cierra un fichero del ser!idor de aplicaci@n.
Sintaxis:
C40(7 D*T*(7T 9fichero:.
Cierra el fichero 9fichero:. 9fichero: puede ser un literal o un ca#po? de la #is#a for#a <ue en la sentencia 0+7D
D*T*(7T. 4a operaci@n de cerrar un fichero es s@lo necesaria si <uieres borrar el contenido de Bste durante otra operaci@n
de escritura.
+ara e!itar errores y hacer <ue los pro%ra#as sean #As fAciles de leer? se debe cerrar un fichero antes de !ol!er a utili5ar la
sentencia 0+7D D*T*(7T. -tili5ando la sentencia C40(7 el pro%ra#a se di!ide en blo<ues l@%icos? haciendo #As fAcil el
#anteni#iento
READ DATASET
Definicin: 4ee un fichero secuencial en el ser!idor de aplicaci@n.
Sintaxis:
R7*D D*T*(7T 9fichero: IDT0 9ca#po: W 47D3TL 9lon%itud: X.
4ee datos del fichero secuencial 9fichero: sobre el ca#po 9ca#po:. +ara decidir el for#ato de 9ca#po: es necesario
conocer la estructura del fichero. 7l #odo de transferencia se indica en la sentencia 0+7D D*T*(7T. (i el fichero no esta
abierto para lectura? el siste#a intenta abrir el fichero en #odo binario? o con las opciones de la Olti#a sentencia 0+7D
D*T*(7T sobre ese fichero. Do obstante? es reco#endable abrir sie#pre el fichero con la sentencia 0+7D D*T*(7T. (i la
operaci@n de lectura ha sido satisfactoria la !ariable (C6(-;RC !ale 0? si !ale . <uiere decir <ue he#os lle%ado al final del
fichero? y si !ale ) es <ue el fichero no ha podido ser abierto. Traba1ando en el #odo binario? se puede utili5ar la clAusula
47D3TL para <ue el siste#a actualice el ca#po 9lon%itud: con la lon%itud del ca#po leMdo.
Ee!plo:
D0.
R7*D D*T*(7T IQusrQtestI IDT0 R7C.
81
IF (C6(-;RC 9: 0.
7GIT.
7DDIF.
&RIT7E Q R7C6T7GT? R7C6D-;7R.
7DDD0.
TRA#S'ER
Definicin: 7scribe re%istros sobre un fichero en el ser!idor de aplicaci@n.
Sintaxis:
TR*D(F7R 9ca#po: T0 9fichero: W 47D3TL 9lon%itud: X.
7scribe el !alor del ca#po 9ca#po: en el fichero 9fichero:. 7l #odo de transferencia se especifica en la sentencia 0+7D
D*T*(7T. (i el fichero no esta abierto para escritura? el siste#a intenta abrirlo en #odo binario o con las opciones de la
Olti#a sentencia 0+7D D*T*(7T para ese fichero? sin e#bar%o? es reco#endable abrir sie#pre el fichero con la sentencia
0+7D D*T*(7T. 9fichero: puede ser un literal o un ca#po co#o en la sentencia 0+7D D*T*(7T 9ca#po: pude ser de
un tipo ele#ental? o un strin% <ue no conten%a tablas internas co#o co#ponentes. 4as tablas internas no se puede escribir
directa#ente sobre ficheros.
Con la opci@n 47D3LT se puede especificar la lon%itud del datos <ue !a a ser transferido. 7l siste#a transfiere los pri#eros
9lon%itud: bytes sobre el fichero. (i el ca#po 9lon%itud: es #As pe<ueVo <ue el ca#po? se trunca. (i 9lon%itud: es #As
%rande <ue el ca#po? el ca#po se rellena con espacios en blanco.
Parte ==
Con todo lo <ue he#os aprendido tene#os #As <ue suficiente co#o para hacer nuestras propias aplicaciones. Do
obstante? es necesario disponer de #As herra#ientas para hacer <ue nuestro pro%ra#as sean #As efecti!os.
o *((I3D? asi%nare#os ca#po y estructuras a los FI74D6(C;40(.
o *-TL0RITC CL7CK? co#prueba las autori5aciones del usuario.
o ;R7*K? ;R7*K6+0IDT? colocan un punto de interrupci@n.
o C0IT y R044;*CK? %aranti5an la inte%ridad de los datos.
o D7FID7? per#ite traba1ar con #acros.
o 7G7C (F4? lla#a al %estor de ;D.
o IDC4-D7 (TR-CT-R7? aVadire#os subrutinas y estructuras.
o R*D37(? podre#os crean ran%os de datos.
ID(7RT Q D747T7 Q R7*D Q 37D7R*T7 R7+0RT? acceso al fuente de los reports.
APPE#D
Definicin: *si%na con una referencia directa o dinA#ica el no#bre del ob1eto <ue desea#os asi%nar a un ca#po.
Sintaxis:
(i conoce#os el no#bre del ob1eto de datos <ue desea#os asi%nar a un field6sy#bol antes de la e1ecuci@n del pro%ra#a
debe#os reali5ar una asi%naci@n estAtica? es decir? con una referencia directa al ob1eto de dato. (i no conoce#os el ob1eto
de dato hasta la e1ecuci@n del pro%ra#a? la asi%naci@n deberA ser dinA#ica? es decir? con una referencia indirecta.
4a sinta8is de la sentencia *((I3D estAtica? sin especificaci@n del offset? es la si%uienteE
*((I3D 9ca#po: T0 9F(: [ 9tipo: \ [ 9deci#ales: \.
DespuBs de la asi%naci@n? el field6sy#bol 9F(: tiene los atributos del ob1eto de datos 9ca#po:? y apunta a la #is#a
posici@n de #e#oria. 4as clAusulas 9tipo: y 9deci#ales: son opciones y las !ere#os en posteriores apartados.
82
4a sinta8is de la sentencia *((I3D estAtica? con especificaci@n del offset? es la si%uienteE
*((I3D 9ca#po: [ R9offset: \ [ =9lon%itud:> \ T0 9F(: [ 9tipo: \ [ 9deci#ales: \.
4a Onica diferencia con la !ariante anterior es <ue en Bsta especifica#os el offset y la lon%itud del ob1eto de datos <ue hay
<ue asi%nar. 4as clAusulas 9tipo: y 9deci#ales: son opcionales y las !ere#os en posteriores apartados. 9offset: y
9lon%itud: pueden ser !ariables. 7l siste#a no co#prueba si la parte seleccionada en el ca#po? contando el offset y la
lon%itud? es #ayor <ue la lon%itud del ca#po. (e puede referenciar direcciones #As allA de la lon%itud del ca#po? sie#pre y
cuando no sobrepase#os el Area de #e#oria asi%nada. (i no especifica#os la lon%itud del ca#po con 9lon%itud:? el field6
sy#bol 9F(: apunta al Area perteneciente a los lM#ites del ca#po. (i 9offset: es #ayor <ue 0? 9F(: sie#pre apunta a un
Area perteneciente a los lM#ites del ca#po. (i 9offset: es #enor <ue la lon%itud del ca#po? se puede especificar un
asterisco =T> para 9lon%itud:? para e!itar sobrepasar el Area asi%nada al ca#pos. las clAusulas 9tipo: y 9deci#ales: son
opcionales y las !cere#os en posteriores apartados.
(i s@lo en tie#po de e1ecuci@n conoce#os el no#bre del ob1eto de dato <ue hay <ue asi%nar al field6sy#bol debe#os
reali5ar una asi%naci@n dinA#ica. +ara ello utili5are#os la sentencia *((I3D con la si%uiente sinta8isE
*((I3D =9ca#po:> T0 9F(: [ 9tipo: \ [ 9deci#ales: \.
7l no#bre de ob1eto de dato <ue hay <ue asi%nar al field6sy#bol estarA contenido en 9ca#po: =asi%naci@n indirecta>. 7n
tie#po de e1ecuci@n? el siste#a busca el ca#po referenciado si%uiendo la si%uiente secuenciaE
(i la asi%naci@n se reali5a en una subrutina o #@dulo de funci@n? el siste#a busca el ca#po en la subrutina o
#@dulo de funci@n co#o ob1eto local.
(i la asi%naci@n se reali5a fuera de una subrutina o #@dulo de funci@n? o el ca#po no se encuentra allM? el siste#a
busca el ca#po co#o ob1eto %lobal al pro%ra#a.
(i el ca#po ta#poco se encuentra co#o ob1eto %lobal al pro%ra#a? el siste#a busca un Area de traba1o
declarada con la sentencia T*;47( en el pro%ra#a principal? o en el %rupo de pro%ra#as actual. 4a definici@n
S%rupo de pro%ra#asS en%loba un pro%ra#a principal y todos los pro%ra#a contenidos? incluyendo a<uBllos en los
<ue se realice una lla#ada a una subrutina.
(i la bOs<ueda del ca#po es satisfactoria y el ca#po puede ser asi%nado al field6sy#bol? el ca#po (C6(-;RC !aldrA 0. 7n
otro caso !aldrA .. +or ra5ones de se%uridad? se debe co#probar el !alor de (C6(-;RC despuBs de reali5ar la asi%naci@n
para pre!enir <ue un field6sy#bol apunte a un Area indefinida. 4as clAusulas 9tipo: y 9deci#ales: son opcionales y las
!ere#os en posteriores apartados. Ca <ue este tipo de bOs<ueda tiene unos efectos ad!ersos en cuanto al tie#po de
respuesta del pro%ra#a? debe#os utili5ar este tipo de asi%naci@n s@lo si es absoluta#ente necesario. (i antes de la
e1ecuci@n del pro%ra#a sabe#os <ue la asi%naci@n s@lo serA de Areas de traba1o? se puede utili5ar la !ariante de la
sentencia *((I3D <ue !ere#os a continuaci@n.
(i antes de la e1ecuci@n del pro%ra#a sabe#os <ue !a#os a asi%nar un Area de traba1o a un field6sy#bol? pero hasta la
e1ecuci@n no sabe#os de dicha Area de traba1o se puede utili5ar la si%uiente !ariante dinA#ica de la sentencia *((I3DE
*((I3D T*;47 FI74D =9ca#po:> T0 9F(: [ 9tipo: \ [ 9deci#ales: \.
7l siste#a busca el ob1eto de dato <ue !a#os a asi%nar al field6sy#bol s@lo en las Areas de traba1o declaradas con la
sentencia T*;47( en el pro%ra#a principal de un %rupo de pro%ra#a. 7l siste#a s@lo reali5a el paso ' de la sentencia
anterior#ente !ista. (i la bOs<ueda es satisfactoria y el ca#po puede ser asi%nado al field6sy#bol? (C6(-;RC es 0^ en
caso contrario es .. 4as clAusulas 9tipo: y 9deci#ales: son opcionales y las !ere#os en posteriores apartados.
*de#As de poder asi%nar ob1etos de datos a field6sy#bols? el siste#a nos per#ite asi%nar un field6sy#bol sobre otro field6
sy#bol. +ara reali5ar esto se puede utili5ar cual<uier !ariante !ista hasta el #o#ento de la sentencia *((I3D? pero en
lu%ar de utili5ar un ob1eto de dato utili5are#os un field6sy#bol. Resu#a#os estas !ariantes a continuaci@nE
*((I3D =9F(1:> T0 9F(": [ 9tipo: \ [ 9deci#ales: \.
*((I3D =9F(1:> [ R9offset: \ [ =9lon%itud:> \T0 9F(": [ 9tipo: \ [ 9deci#ales: \.
*((I3D =9ca#po:> T0 9F(": [ 9tipo: \ [ 9deci#ales: \.
*((I3D T*;47 FI74D =9ca#po:> T0 9F(: [ 9tipo: \ [ 9deci#ales: \.
9ca#po: es un ob1eto de datos con el !alor de un field6sy#bol. 4as clAusulas 9tipo: y 9deci#ales: son opcionales y las
!ere#os en posteriores apartados. (e puede especificar co#ponentes de un field6strin% a un field6sy#bol con la si%uiente
!ariante de la sentencia *((I3DE
*((I3D C0+0D7DT 9c: 0F (TR-CT-R7 9e: T0 9F(: [ 9tipo: \ [ 9deci#ales: \.
83
7l siste#a asi%na el co#ponente 9c: de la estructura 9e: al field6sy#bol 9F(:. 9c: puede ser un literal o una !ariable. (i
la asi%naci@n es satisfactoria? (C6(-;RC es 0^ en caso contrario es .. 4as clAusulas 9tipo: y 9deci#ales: son opcionales y
las !ere#os en posteriores apartados.
(e puede definir el tipo de un field6sy#bol utili5ando la clAusula TC+7 de la sentencia *((I3D. 4a clAusula TC+7
se puede utili5ar con todas las !ariantes de la sentencia *((I3D !istas anterior#ente. 9tipo: puede ser un literal
a una !ariable. (e produce un error en tie#po de e1ecuci@n si el tipo de datos es desconocido? o si la lon%itud del
tipo de datos especificado es inco#patible con el tipo de dato asi%nado.
Ta#biBn se puede especificar el nO#ero de deci#ales de un field6sy#bol si el ca#po asi%nado es del tipo +
=e#pa<uetado>. +ara ello se especifica la clAusula D7CI*4( de la sentencia *((I3D. 4a clAusula D7CI*4(
se puede utili5ar con todas las !ariantes de la sentencia *((I3D. Con esta clAusula se puede tener distinto
nO#ero de deci#ales entre el ob1eto de dato asi%nado y el field6sy#bol. 9deci#ales: puede ser un literal o una
!ariable. -n erro en tie#po de e1ecuci@n se produce si 9deci#ales: no tiene un !alor co#prendido entre 0 y 1.? o
si el ob1eto de dato asi%nado no es del tipo +.
Cuando traba1a#os con subrutinas? se puede estar interesados en crear copias locales de datos %lobales sobre la pila de
datos. +ara reali5ar esto? dispone#os de la si%uiente clAusula de la sentencia *((I3DE
*((I3D 40C*4 C0+C 0F ... T0 9F(:.
7l siste#a es una copia del dato %lobal especificado sobre la pila. 7n la subrutina? se puede acceder y ca#biar esta copia
sin ca#biar el !alor del dato %lobal. (e puede utili5ar esta clAusula con todas las !ariantes de la sentencia *((I3D a
e8cepci@n de la !ista en el apartado S(entencia *((I3D con co#ponentes de un field6strin%S.
Ee!plo .:
D*T* D*7=.> H*4-7 IP0LDI.
FI74D6(C;04( 9F:.
*((I3D D*7 T0 9F:.
&RIT7 9F:.
(alidaE P0LD
Ee!plo /:
D*T*E D*7=1"> H*4-7 IP*CKP0LDC*R4I?
G=10> H*4-7 IGGGGGGGGGGI.
FI74D6(C;04( 9F:.
*((I3D D*7R. T0 9F:.
&RIT7 9F:.
*((I3D D*7R.=T> T0 9F:.
&RIT7 9F:.
(alidaE P0LDC*R4GGGG P0LDC*R4
Ee!plo 0:
D*T* (*47(JD7C"=10> TC+7 + D7CI*4( " H*4-7 1"'./67.
FI74D6(C;04( 9(*47(JD7C/:.
*((I3D (*47(JD7C" T0 9(*47(JD7C/: D7CI*4( /.
&RIT7E Q (*47(JD7C"?
Q 9(*47(JD7C/:.
(alidaE
1?"'.?/67.00
1?"'../6700
Ee!plo 1:
D*T* G=.> H*4-7 ICarlI.
+7RF0R -.
F0R -.
FI74D6(C;04( 9F:.
*((I3D 40C*4 C0+C 0F G T0 9F:.
&RIT7 9F:.
0H7 IPohnI T0 9F:.
&RIT7 9F:.
&RIT7 G.
7DDF0R.
(alidaE Carl Pohn Carl
Ee!plo 2:
D*T*E D*7=.> H*4-7 IGCYI? GCY H*4-7 I/I.
FI74D6(C;04( 9F:.
84
*((I3D =D*7> T0 9F:.
&RIT7 9F:.
(alidaE /
Ee!plo 3:
T*;47( TRDIR.
D*T* D*7=10> H*4-7 ITRDIR6D*7I.
FI74D6(C;04( 9F:.
0H7 IGCYJ+R03I T0 TRDIR6D*7.
*((I3D T*;47 FI74D =D*7> T0 9F:.
&RIT7 9F:.
(alidaE GCYJ+R03
Ee!plo 4:
T*;47( TRDIR.
D*T*E F=)> H*4-7 IFJ%lobalI?
3=)> H*4-7 I3J%lobalI.
0H7 IGCYJ+R03I T0 TRDIR6D*7.
+7RF0R -.
F0R -.
D*T*E F=)> H*4-7 IFJlocalI?
D*7='0> H*4-7 IFI.
FI74D6(C;04( 9F:.
*((I3D =D*7> T0 9F:.
&RIT7 9F:.
0H7 I3I T0 D*7.
*((I3D =D*7> T0 9F:.
&RIT7 9F:.
0H7 ITRDIR6D*7I T0 D*7.
*((I3D =D*7> T0 9F:.
&RIT7 9F:.
7DDF0R.
(alidaE FJlocal 3J%lobal GCYJ+R03
Ee!plo C:
+R03R* +1*ID.
T*;47( TRDIR.
D*T* D*7='0> H*4-7 ITFDIR6+D*7I.
FI74D6(C;04( 9F:.
0H7 IGCYJ+R03I T0 TRDIR6D*7.
+7RF0R -=+1(-;>.
*((I3D =D*7> T0 9F:.
&RIT7 9F:.
C*44 F-DCTI0D I7G*+47I.
+R03R* +1(-;.
T*;47( TFDIR.
...
F0R -.
FI74D6(C;04( 9F:.
D*T* D*7='0> H*4-7 ITRDIR6D*7I.
*((I3D T*;47 FI74D =D*7> T0 9F:.
&RIT7 9F:.
0H7 IFCTJ+R03I T0 TFDIR6+D*7.
7DDF0R.
F-DCTI0D6+004 F-D1.
F-DCTI0D 7G*+47.
D*T* D*7='0> H*4-7 ITRDIR6D*7I.
FI74D6(C;04( 9F:.
*((I3D =D*7> T0 9F:.
IF (C6(-;RC N 0.
&RIT7 9F:.
74(7.
&RIT7 Q ITRDIR6D*7 cannot be accessedI.
7DDIF.
7DDF-DCTI0D.
(alidaE GCYJ+R03 FCTJ+R03
TRDIR6D*7 no se tiene acceso.
Ee!plo D:
+R03R* +1*ID.
T*;47( TRDIR.
85
D*T* D*7='0> H*4-7 ITFDIR6+D*7I.
FI74D6(C;04( 9F:.
0H7 IGCYJ+R03I T0 TRDIR6D*7.
C*44 F-DCTI0D I7G*+47I.
F-DCTI0D6+004 F-D1.
F-DCTI0D 7G*+47.
D*T* D*7='0> H*4-7 ITRDIR6D*7I.
FI74D6(C;04( 9F:.
*((I3D 40C*4 C0+C 0F *ID
T*;47 FI74D =D*7> T0 9F:.
IF (C6(-;RC N 0.
&RIT7 9F:.
74(7.
&RIT7 Q ITRDIR6D*7 cannot be accessedI.
7DDIF.
7DDF-DCTI0D.
(alidaE GCYJ+R03
Ee!plo .E:
+R03R* +1*ID.
D*T*E ;73ID 0F R7C?
* H*4-7 IaI?
; H*4-7 IbI?
C H*4-7 IcI?
D H*4-7 IdI?
7DD 0F R7C?
CD=/> H*4-7 IDI.
FI74D6(C;04( 9F(:.
D0 ' TI7(.
*((I3D C0+0D7DT (C6IDD7G 0F
(TR-CT-R7 R7C T0 9F(:.
IF (C6(-;RC 9: 0. 7GIT. 7DDIF.
&RIT7 9F(:.
7DDD0.
*((I3D C0+0D7DT CD 0F (TR-CT-R7 R7C T0 9F(:.
&RIT7 9F(:.
0utputE a b c d
DES$RI)E 'IE"D
Definicin: Recupera los atributos de una !ariable.
Sintaxis:
D7(CRI;7 FI74D 9!ariable:
W 47D3TL 9lon%itud: X
W TC+7 9tipo: W C0+0D7DT( 9n: X X
W 0-T+-T647D3TL 9salida: X
W D7CI*4( 9deci#ales: X
W 7DIT *(K 9#ascara: X.
4a opci@n 47D3TL nos actuali5a la !ariable 9lon%itud: con la lon%itud del ca#pos.
4a opci@n TC+7 nos actuali5a la !ariable 9tipo: con el tipo del ca#po? <ue podrA ser uno de los si%uientes
!aloresE SCS? SDS? SFS? SIS? SDS? S+S? STS y SGS para los tipos predefinidos. SsS para enteros de dos bytes con si%no?
SbS para enteros de un byte sin si%no? ShS para tablas internas? y SCS para estructuras. Con la opci@n
C0+0D7DT(? la sentencia de!uel!e en el ca#po 9tipo:E SuS para estructuras sin una tabla co#o co#ponente?
y S!S para estructuras con al #enos una tabla interna co#o co#ponente o subco#ponente^ y sobre el ca#po 9n:
el nO#ero de co#ponentes directos.
4a opci@n 0-T+-T647D3TL actuali5a la !ariable 9salida: con la lon%itud de salida de la !ariable especificada.
4a opci@n D7CI*4( actuali5a la !ariable 9deci#ales: con el nO#ero de deci#ales de la !ariable especificada.
+ara deter#inar si e8iste una rutina de con!ersi@n para un ca#po en el diccionario de datos y ade#As cuAl es el
no#bre de esa rutina se utili5a la opci@n 7DIT *(K. (i e8iste rutina de con!ersi@n? el ca#po del siste#a (C6
(-;RC contendrA el !alor 0 y la !ariable 9#Ascara: contendrA el no#bre de la rutina de con!ersi@n. (i el ca#po
no tiene rutina de con!ersi@n el ca#po del siste#a (C6(-;RC tendrA el !alor ..
Ee!plo .:
86
D*T*E F4D=)>?
47D TC+7 +.
D7(CRI;7 FI74D F4D 47D3TL 47D.
4a !ariable 47D !ale ).
Ee!plo /:
D*T*E F4D=)> TC+7 D?
FJTC+7.
D7(CRI;7 FI74D F4D TC+7 FJTC+7.
FJTC+7 !ale IDI.
'IE"D+S&*)O"S
Definicin: Declara un field-symbol. 4as asi%naci@n se reali5a con la sentencia *((I3D en tie#po de e1ecuci@n.
Sintaxis:
FI74D6(C;04( 9fs: W 9tipo: X.
7n la sinta8is de los field6sy#bols? los sM#bolos S9S y S:S en 9fs: for#an parte de la sinta8is de la sentencia. (ir!en para
identificar un field6sy#bol en el c@di%o fuente de un pro%ra#a. Con esta sentencia defini#os el field6sy#bol en c@di%o del
pro%ra#a. -n field6sy#bol puede ser especificado con o sin identificaci@n de tipo. (i no especifica#os nin%On tipo? se puede
asi%nar cual<uier ob1eto de dato? en tie#po de e1ecuci@n? al field6sy#bol. Durante el proceso de asi%naci@n? el field6sy#bol
ad<uiere todos los atributos del ob1eto de dato.
7n la opci@n 9tipo: se puede utili5ar la especificaci@n directa =con TC+7>? o la indirecta =con 4IK7>. Con la especificaci@n de
tipo? el siste#a co#prueba si los tipos del field6sy#bol y el dato son co#patibles. 7n caso de no ser co#patibles? se
produce un error en tie#po de e1ecuci@n.
FI74D6(C;04( 9fs: (TR-CT-R7 9estructura: D7F*-4T 9ca#po:.
7n esta sentencia defini#os el field6sy#bol estructurado 9fs:? el cual apunta por defecto al ca#po 9ca#po:. 7l siste#a
obli%a a un ca#po inicial? aun<ue se puede #odificar a posteriori. 7l field6sy#bol 9fs: ad<uiere la estructura 9fs: <ue
puede ser cual<uier field6strin% o estructura definida en el diccionario de datos. 4as estructuras del diccionario de datos
referenciadas en esta sentencia no tienen <ue ser declaradas con la sentencia T*;47(. 4a estructura se debe especificar
sin encerrar entre co#illas =SS>? sin ser posible su especificaci@n en tie#po de e1ecuci@n. (i 9estructura: no tiene
co#ponentes de tipo F o I? 9ca#po: puede ser cual<uier ca#po interno con la lon%itud de 9estructura:. (i 9ca#po: es
#enor <ue 9estructura: aparecerA un error de sinta8is cuando !erifi<ue#os el pro%ra#a. (i durante la e1ecuci@n asi%na#os
un ca#po al field6strin%? el siste#a !erificarA la lon%itud. (i la lon%itud es #enor a la de la estructura entonces se producirA
un error en tie#po de e1ecuci@n. (i la estructura 9estructura: tiene ca#pos de tipo F o I? debe#os especificar un ca#po
con la #is#a estructura.
Ee!plo .:
FI74D6(C;04( 9+T:.
T*;47( (F4I3LT.
...
*((I3D (F4I3LT6+4*D7TC+7 T0 9+T:.
&RIT7 9+T:.
Ee!plo /:
D*T* (;00KJ&* 4IK7 (;00K.
FI74D6(C;04( 9(;: (TR-CT-R7 (;00K
D7F*-4T (;00KJ&*.
...
&RIT7E 9(;:6;00KID? 9(;:6F4D*T7.
A%T(ORIT&+$(E$7
Definicin: 7sta sentencia nos per#ite co#probar las autori5aciones de un usuario. Recorde#os <ue dichas
autori5aciones for#an parte del perfil de usuario y el siste#a las %uarda en el #aestro de usuarios.
Sintaxis:
*-TL0RITC6CL7CK 0;P7CT I9ob1eto:I
ID Ica#po1: [ FI74D 9!alor1: Z D-C \
87
ID Ica#po": [ FI74D 9!alor": Z D-C \
...
ID Ica#pon: [ FI74D 9!alorn: Z D-C \
9ob1eto: es el no#bre del ob1eto de autori5aci@n <ue hay <ue co#probar.
-n ob1eto de autori5aci@n esta co#puesto de ca#pos de autori5aci@n? todos ellos deben estar especificados a
continuaci@n de las clAusulas ID =9ca#po1:? 9ca#po": ...? 9ca#pon:>.
9!alor1? 9!alor":? ...? 9!alorn: son los !alores de autori5aci@n <ue hay <ue co#probar. 9!alor8: puede ser un
literal o una !ariable. 7l siste#a busca en el perfil del usuario el ob1eto especificado en la sentencia? y co#prueba
si el usuario tiene autori5aci@n para todos los ca#pos del ob1eto.
(e puede saltar la co#probaci@n de un ca#po sustituyendo la clAusula FI74D por D-C. (i (C6(-;RC !ale 0?
el usuario esta autori5ado? en caso contrario? (C6(-;RC to#a un !alor distinto de 0.
Ee!plo .:
*-TL0RITC6CL7CK 0;P7CT IJ7IDFJ&RKI
ID I&7RK(I FI74D I000"I
ID I*CTHTI FI74D I0"I.
*-TL0RITC6CL7CK 0;P7CT IJ7IDFJ&RKI
ID I&7RK(I D-C
ID I*CTHTI FI74D I01I.
)REA7
Definicin: Con esta sentencia acti!a#os la transacci@n de depuraci@n de pro%ra#as.
Sintaxis:
;R7*K 9usuario:.
Cuando esta sentencia se e1ecuta? si el usuario <ue estA e1ecutando el pro%ra#a es el especificado en el literal 9usuario:?
se acti!a la transacci@n de depuraci@n de pro%ra#as. 9usuarios: no debe ir entre co#illas co#o serMa l@%ico en un literal. 7l
efecto es el #is#o <ue el de la sentencia ;R7*K6+0IDT? para un #ayor detalle !er esta sentencia.
)REA7+POI#T
Definicin: (entencia utili5ada para acti!ar la transacci@n de depuraci@n de pro%ra#as.
Sintaxis:
;R7*K6+0IDT 9ca#po:.
4a sentencia ;R7*K6+0IDT interru#pe el proceso y acti!a el depurador de pro%ra#a en ese punto. -na !e5 acti!o el
depurador se pueden reali5ar todas las funciones <ue per#ite el siste#a de debu%%in%. (i el siste#a es incapa5 de acti!ar
el #odo depuraci@n? por e1e#plo? si el pro%ra#a se estA e1ecutando en fondo =bac,%round> o si el pro%ra#a es de
actuali5aci@n? el siste#a %enera un #ensa1e en el lo% del siste#a. 7l contenido de 9ca#po:? para e1ecuciones en
bac,%round o en procesos de actuali5aci@n? se %raba en el #ensa1e del lo% del siste#a.
DespuBs de procesar el siste#a la sentencia ;R7*K6+0IDT se reali5a auto#Atica#ente un C0IT6&0RK de la base de
datos.
DE'I#E ;; E#D+O'+DE'I#ITIO#
Definicin: Define una #acro <ue contiene parte de c@di%o fuente? con la posibilidad de utili5ar parA#etros.
Sintaxis:
D7FID7 9#acro:.
... W 9_1: ... 9_9: X
7DD60F6D7FIDITI0D.
9#acro: W 9p1: ... 9p9: X
88
+ara definir una #acro se utili5an las palabras cla!es D7FID7 y 7DD60F6D7FIDITI0D. 7ntre ellas se incluyen las
sentencias <ue for#arAn la #acro. (e pueden incluir parA#etros = 9_1: ... 9_9: > <ue serAn sustituidos en la lla#ada. 4a
lla#ada a la #acro se reali5a con el no#bre de la #acro. Durante la %eneraci@n del pro%ra#a el siste#a ree#pla5a los
parA#etros utili5ados en la lla#ada.
Ee!plo:
D7FID7 RR.
*DD 1 T0 _1.
7DD60F6D7FIDITI0D.
D*T*E D-;7R TC+7 I H*4-7 1.
...
RR D-;7R.
'%#$TIO# ;; E#D'%#$TIO#
Definicin: Define un #@dulo de funci@n.
Sintaxis:
F-DCTI0D 9funci@n:
...
7DDF-DCTI0D.
Todas las sentencias incluidas entre F-DCTI0D y 7DDF-DCTI0D serAn e1ecutadas cuando se realice una lla#ada a la
funci@n.
+ara crear? #odificar o !isuali5ar un #@dulo tene#os <ue ir a =desde el #enO principal> &erramientas -> Abap>? /or0benc%
-> $'d1lo f1nci'n. 0 ir directa#ente a tra!Bs de la transacci@n (7'7.
E=E$ S>" ;; E#DE=E$
Definicin: -na sentencia nati!a debe incluirse en un blo<ue 7G7C (F4 .. 7DD7G7C.
Sintaxis:
7G7C (F4 W +7RF0RID3 9rutina: X.
9sentencia6nati!a6(F4: W ^ X
7DD7G7C.
7l p1nto y coma =^> es opcional. 7l p1nto =.> utili5ado en cual<uier sentencia *;*+Q. para #arcar el final de Bsta? no puede
ser utili5ado en el blo<ue. Dentro del blo<ue? la sentencia doble comilla =S> no #arca un co#ien5o de co#entario. 4a tabla
utili5ada es una sentencia nati!a no tiene por <ue estar definida en el diccionario *;*+Q.? por lo tanto? no es necesario
declarar la tabla con la sentencia T*;47(. 7l siste#a no procesa de for#a auto#Atica el ca#po #andante. 4a
co#unicaci@n entre la tabla de la base de datos y el pro%ra#a se reali5a a tra!Bs de las !ariables de entorno? <ue se
identifican en la sentencia nati!a %racias al carActer dos p1ntos =E>. Co#o !ariable de entorno se puede utili5ar ca#pos
ele#entales? asM co#o ca#pos estructurados.
(i el resultado de la sentencia (747CT es una tabla? se puede utili5ar la clAusula +7RF0RID3. +or cada lMnea
leMda en la sentencia (747CT? se procesa la rutina especificada en +7RF0RID3.
Ee!plo:
7G7C (F4.
CR7*T7 T*;47 *H7RIJC4DT =
C4I7DT CL*R='> D0T D-44?
*R31 CL*R='> D0T D-44?
*R3" CL*R='> D0T D-44?
F-DCTI0D CL*R=10> D0T D-44?
+RI*RC K7C =C4I7DT? *R31? *R3">
>
7DD7G7C.
7n este e1e#plo se crea la tabla *H7RIJC4DT. C con el si%uiente e1e#plo lee#os dicha tablaE
D*T*E F1='>? F"='>? F'='>.
F' N I 1 I
7G7C (F4 +7RF0RID3 &RIT7J*H7RIJC4DT.
(747CT C4I7DT? *R31 IDT0 EF1? EF" FR0 *H7RIJC4DT
&L7R7 *R3" N EF'
7DD7G7C.
89
F0R &RIT7J*H7RIJC4DT.
&RIT7E Q F1? F".
7DDF0R.
I#SERT REPORT
Definicin: (e utili5a para insertar un pro%ra#a en el siste#a.
Sintaxis:
ID(7RT R7+0RT 9pro%ra#a: FR0 9tabla:.
7l c@di%o fuente del pro%ra#a esta en una tabla interna 9tabla:. 4as lMneas de la tabla interna no puede tener #As de 7"
caracteres de lon%itud. 4os atributos del pro%ra#a =tipo? fecha? ...> son asi%nados auto#Atica#ente por el siste#a. 4os
atributos se pueden #odificar desde el editor de pro%ra#as o a tra!Bs de la tabla TRDIR. 4os errores en tie#po de
e1ecuci@n son los si%uientesE
ID(7RTJ+R03R*JIDT7RD*4JD*7 6: 7l no#bre del pro%ra#a esta reser!ado para el siste#a =aJT>.
ID(7RTJ+R03R*JD*7J;4*DK 6: 7l no#bre del pro%ra#a no puede contener espacios en blanco.
ID(7RTJ+R03R*JD*7JT00J40D3 6: 7l no#bre del pro%ra#a no puede superar los ) caracteres.
ID(7RTJR7+0RTJ4ID7JT00J40D3 6: -na lMnea o #As de una no puede superar los 7" caracteres
DE"ETE REPORT
Definicin: ;orra ciertos ob1etos parciales de un pro%ra#a.
Sintaxis:
D747T7 R7+0RT 9pro%ra#a:.
;orra el c@di%o fuente del pro%ra#a 9pro%ra#a:? los ele#entos de te8to y la !ersi@n %enerada. 4a sentencia no borra ni las
!ariantes ni la docu#entaci@n. (C6(-;RC !ale 0 si el pro%ra#a se borra. 7n caso contrario !ale .. 7l siste#a proporciona
la funci@n R(JD747T7J+R03R* para reali5ar la #is#a funci@n.
(*+ cre@ esta sentencia para uso interno. (e puede utili5ar pero hay <ue tener en cuenta <ue (*+ puede ca#biar o
eli#inar la sinta8is sin pre!io a!iso
READ REPORT
Definicin: 4ee un pro%ra#a de la base de datos.
Sintaxis:
R7*D R7+0RT 9pro%ra#a: IDT0 9tabla:.
4ee el pro%ra#a 9pro%ra#a: de la base de datos sobre la tabla interna 9tabla:. 4a lon%itud de la lMnea de la tabla interna
debe ser? al #enos? de 7" caracteres. (i el pro%ra#a lee? (C6(-;RC !ale 0? en caso contrario !ale distinto de 0.
Ee!plo:
D*T*E ;73ID 0F IDTJT*;47 0CC-R( 100?
C0+1?
C0+"?
C0+'?
7DD 0F IDTJT*;47.
F0R +-TJ7DTRC -(ID3 7DTRC 4IK7 4ID7 0F IDTJT*;47.
R7*D T*;47 IDTJT*;47 &ITL K7C C0+" N 7DTRC6C0+"
;ID*RC (7*RCL
TR*D(+0RTID3 D0 FI74D(.
IF (C6(-;RC 9: 0.
ID(7RT 7DTRC IDT0 IDTJT*;47 IDD7G (C6T*;IG.
7DDIF.
7DDF0R.
,E#ERATE D&#PRO
Definicin: 3enera una dynpro de la base de datos.
90
Sintaxis:
37D7R*T7 DCD+R0 9h: 9f: 9e: 9#: ID 9id: 7((*37 9c1: 4ID7 9c":
&0RD 9c': W 0FF(7T 9c.: X W TR*C76FI47 9tabla: X
4a infor#aci@n necesaria para %enerar un dynpro se to#a del ca#po 9h: y de las tablas internas 9f:?9e: y 9#:. 7l ca#po
9h: y las tablas internas 9f:? 9e: y 9#: tienen la #is#a estructura y si%nificado <ue en la sentencia I+0RT DCD+R0. (i
se produce un error al %enerar el #ensa1e de error se %uarda en 9c1:? la lMnea donde se produce el error se %uarda en 9c":
y la palabra con el error se %uarda en 9c':.
4a !ariable (C6(-;RC de!uel!e los si%uientes !aloresE
0 6: Do e8isten errores y la dynpro se ha %enerado correcta#ente.
. 6: 7l error se encuentra en la l@%ica de proceso.
) 6: 7l error se encuentra en los ca#pos del dynpro.
7l si%nificado de las clAusulas es el si%uienteE
0FF(7T 6: (i ocurre un error el ca#po 9c.: contiene la posici@n de la palabra incorrecta.
TR*C76T*;47 6: Cual<uier salida del tra5ador se deposita en la tabla 9tabla:.
(*+ cre@ esta sentencia para uso interno. (e puede utili5ar pero hay <ue tener en cuenta <ue (*+ puede ca#biar o
eli#inar la sinta8is sin pre!io a!iso
I*PORT D&#PRO
Definicin: (e utili5a para i#portar un dynpro.
Sintaxis:
I+0RT DCD+R0 9h: 9f: 9e: 9#: 9id:.
I#porta el dynpro especificado en el ca#po 9id:. 7l no#bre de un dynpro estA co#puesto de una ca#po de ) caracteres?
no#bre del #odulpool =pool de #@dulos de diAlo%o> y un ca#po de . caracteres <ue identifica el nO#ero de pantalla. 7n
9h: se car%a infor#aci@n de la cabecera de pantalla =estructura D0"0(>. 7n la tabla interna 9f: se car%a la lista de ca#pos
=estructura D0""(>. 7n la tabla interna 9e: se car%a el proceso l@%ico =estructura D0"'(>. 4a !ariable (C6(-;RC !aldrA 0
si la dynpro se ha i#portado y to#ara el !alor . en caso contrario.
(*+ cre@ esta sentencia para uso interno. (e puede utili5ar pero hay <ue tener en cuenta <ue (*+ puede ca#biar o
eli#inar la sinta8is sin pre!io a!iso.
E=PORT D&#PRO
Definicin: (entencia <ue se utili5a para e8portar un dynpro a la base de datos. (*+ cre@ esta sentencia para uso interno.
(e puede utili5ar pero hay <ue tener en cuenta <ue (*+ puede ca#biar o eli#inar la sinta8is sin pre!io a!iso.
Sintaxis:
7G+0RT DCD+R0 9h: 9f: 9e: 9#: ID 9id:.
78porta el dynpro especificado en 9id:. 7l ca#po 9h: y las tablas internas 9f:? 9e: y 9#: tienen la #is#a estructura y
si%nificado <ue en la sentencia I+0RT DCD+R0.
DE"ETE D&#PRO
Definicin: (e utili5a para borrar un dynpro de la base de datos.
Sintaxis:
D747T7 DCD+R0 9dynpro:.
;orra el dynpro 9dynpro: de la base de datos. 4a !ariable (C6(-;RC !aldrA 0 si la dynpro se borra correcta#ente y !aldrA
. en caso contrario.
91
(*+ cre@ esta sentencia para uso interno. (e puede utili5ar pero hay <ue tener en cuenta <ue (*+ puede ca#biar o
eli#inar la sinta8is sin pre!io a!iso
S&#TA=+$(E$7 'OR D&#PRO
Definicin: Co#prueba la sinta8is de una dynpro.
Sintaxis:
(CDT*G6CL7CK F0R DCD+R0 9h: 9f: 9e: 9#: 7((*37 9c1: 4ID7 9%: &0RD 9c": &0RD 9c':W 0FF(7T 9c.: X
W TR*C76T*;4* 9tabla: X.
Toda la infor#aci@n necesaria para !alidar el dynpro se to#a del ca#pa 9h: y de las tablas internas 9f:? 9e: y 9#:. 7ste
ca#po y tablas internas tiene la #is#a estructura y si%nificado <ue el de la sentencia I+0RT DCD+R 0. (i ocurre un error
de sinta8is el ca#po 9c1: se rellena con el te8to del #ensa1e? 9c": se rellena con la lMnea de la pantalla donde ocurre el
error y 9c': contiene la palabra con el error. 4a !ariable del siste#a (C6(-;RC to#a el !alor 0 su no e8isten errores? en
caso contrario !aldrA .. 7l si%nificado de las clAusulas es el si%uienteE
0FF(7T 6: (i ocurre un error? el ca#po 9c.: contiene la posici@n de la palabra incorrecta.
TR*C76T*;47 6: Cual<uier salida del tra5ador se deposita en la tabla 9tabla:.
(*+ cre@ esta sentencia para uso interno. (e puede utili5ar pero hay <ue tener en cuenta <ue (*+ puede ca#biar o
eli#inar la sinta8is sin pre!io a!iso
S&#TA=+$(E$7
Definicin: Dos per#ite !erificar la sinta8is de un pro%ra#a.
Sintaxis:
(CDT*G6CL7CK F0R 9tabla: 7((*37 9f: 4ID7 9%: &0RD 9h: W +R03R* 9f1: XW IDC4-D7 9f": X W 0FF(7T 9f': X
W TR*C76T*;47 9t1: X W DIR7CT0RC 7DTRC 9f.: X W R7+4*CID3 9f/: X W FR*7 7DTRC 9f6: X W 7((*376ID 9f7: X
W ID 9id: T*;47 9tab: X.
7l c@di%o del pro%ra#a estA contenido en 9tabla:. (i la sentencia detecta al%On error durante la co#probaci@n sintActica?
los ca#pos 9f:? 9%: y 9h: son rellenados con la si%uiente infor#aci@nE
9f: 6: Contiene el te8to del #ensa1e de error. Tipo alfanu#Brico.
9%: 6: Contiene la lMnea del pro%ra#a donde aparece el error. Tipo nu#Brico.
9h: 6: Contiene la palabra con el error. Tipo alfanu#Brico.
4a !ariable (C6(-;RC puede to#ar los si%uiente !aloresE
0 6: 7l pro%ra#a no tiene errores de sinta8is.
. 6: 7l pro%ra#a contiene errores de sinta8is.
) 6: 7l pro%ra#a tiene errores <ue no son de sinta8is.
7l si%nificado de las clAusula es el si%uienteE
+R03R* 6: 7specifica el no#bre del pro%ra#a en 9f1:. (i no se utili5a la clAusula DIR7CT0RC 7DTRC? el
no#bre del pro%ra#a se utili5a para deter#inar los atributos? por e1e#plo? si se trata de un pro%ra#a? un include o
una base de datos l@%ica. 7l ca#po 9f1: debe tener el for#ato de la !ariable del siste#a (C6R7+ID.
IDC4-D7 9f": 6: (i e8iste un error y este aparece en un include? 9f": contiene el no#bre del pro%ra#a include.
7l ca#po 9f1: debe tener el for#ato de la !ariable del siste#a (C6R7+ID.
0FF(7T 6: (i e8iste un error? 9f': contiene la posici@n de la palabra incorrecta en la lMnea incorrecta. 9f': debe
ser declarado de tipo entero.
TR*C76T*;47 6: 4a tra5a de salida se al#acena en la tabla 9t1:. +ara acti!ar o desacti!ar la tra5a durante las
co#probaciones sintActicas del pro%ra#a se utili5a la sentencia (CDT*G6TR*C7.
92
DIR7CT0RC 7DTRC 6: 4os atributos del pro%ra#a re<uerido para la co#probaci@n sintActica del pro%ra#a se
especifican en el ca#po 9f.:? el cual debe tener la estructura de la tabla TRDIR.
R7+4*CID3 6: (i el pro%ra#a a !alidar contiene un include con el no#bre especificado en 9f/:? el contenido de
la tabla interna deber ser to#ado.
FR*7 7DTRC 6: 4os atributos del pro%ra#a principal se especifican en el ca#po 9f6:? <ue debe tener la
estructura de la tabla TRDIR.
7((*376ID 6: (i ocurre un error? el ca#po 9f7: contiene la cla!e del #ensa1e rele!ante. 9f7: debe tener la
estructura de la tabla TR(3.
ID 9id: T*;47 9tabla: 6: De!uel!e infor#aci@n de la co#probaci@n sintActica. Do debe ser utili5ado por
usuarios. 9id: contiene el tipo de infor#aci@n <ue serA escrito en la tabla interna 9tab:. 9id: puede contener los
si%uientes !aloresE
(3 6: ensa1es 2arnin%s.
C0RR 6: Correciones.
(C; 6: Du#ps.
D*T* 6: 0b1etos del pro%ra#a.
D+*R 6: +arA#etros del pro%ra#a.
TC+7 6: Tipos de datos del pro%ra#a.
F0TC 6: Tipos de datos utili5ados en subrutinas.
F-TC 6: Tipos de datos utili5ados en #@dulos de funci@n.
TCCL 6: Co#ponentes de tipos de ob1etos.
CR0( 6: 0b1etos de datos referenciados.
(TR 6: Identificadores.
F0R 6: Rutinas F0R.
F+*R 6: +arA#etros F0R.
+7RF 6: 4la#adas a rutinas =+7RF0R>.
*+*R 6: +arA#etros +7RF0R.
F-DC 6: @dulos de funci@n.
FF+* 6: +arA#etros de #@dulos de funci@n.
C*44 6: 4la#adas a C*44 F-DCTI0D.
F*+* 6: +arA#etros C*44 F-DCTI0D.
LC+L 6: 0b1etos de datos con %uiones en el no#bre.
IDC4 6: Include del pro%ra#a.
93
(*+ cre@ esta sentencia para uso interno. (e puede utili5ar pero hay <ue tener en cuenta <ue (*+ puede ca#biar o
eli#inar la sinta8is sin pre!io a!iso.
,E#ERATE REPORT
Definicin: 3enera un pro%ra#a
Sintaxis:
37D7R*T7 R7+0RT 9pro%ra#a: W 7((*37 9C1: X W IDC4-D7 9c": X W 4ID7 C' X
W &0RD 9c.: X W 0FF(7T 9c/: X W TR*C76FI47 9c6: X W DIR7CT0RC 7DTRC 9c7: X
W &ITL0-T (747CTI0D6(CR77D X
3enera el pro%ra#a especificado en 9pro%ra#a:. (i el pro%ra#a es un report =pro%ra#as del tipo I> ta#biBn la pantalla de
selecci@n se %enera. 4a !ariable (C6(-;RC puede to#ar los si%uiente !aloresE
0 6: 7l pro%ra#a se %enera correcta#ente.
. 6: 7rror de sinta8is y el report no se %enera.
) 6: 7rror de %eneraci@n y el report no se %enera.
1" 6: 7rror en la %eneraci@n de la pantalla de selecci@n y el report no se %enera.
7l si%nificado de las clAusulas es el si%uienteE
7(*37 6: Cuando ocurre un error de sinta8is el error se al#acena en la !ariable 9c1:.
IDC4-D7 6: Cuando ocurre un error de sinta8is el no#bre del pro%ra#a include relacionado se al#acena en el
ca#po 9c":.
4ID7 6: Cuando ocurre un error de sinta8is el nO#ero de lMnea err@nea se al#acena en 9c':.
&0RD 6: Cuando ocurre un error de sinta8is la palabra incorrecta se al#acena en 9c.:.
0FF(7T 6: Cuando ocurre un error de sinta8is la posici@n de la palabra incorrecta se al#acena en el ca#po
9c/:.
TR*C76FI47 6: 4a tra5a de salida del pro%ra#a se al#acena en el fichero 9c6:. Con esta clAusula se acti!a de
for#a auto#Atica el tra5ador de pro%ra#as.
DIR7CT0RC 7DTRC 6: 4os atributos del pro%ra#a re<ueridos para la co#probaci@n sintActica son to#ados del
ca#po 9c7:. 7ste ca#po debe tener la estructura de la tabla TRDIR.
&ITL0-T (747CTI0D6(CR77D 6: Con esta clAusula no se %enera la pantalla de selecci@n.
(*+ cre@ esta sentencia para uso interno. (e puede utili5ar pero hay <ue tener en cuenta <ue (*+ puede ca#biar o
eli#inar la sinta8is sin pre!io a!iso
AT P'nn
+ara per#itir <ue el usuario realice una acci@n tras pulsar una tecla de funci@n? se puede escribir un blo<ue de proceso en
el pro%ra#a? encabe5ado por el e!ento *T+Fnn.
Sintaxis:
9blo<ue6de6proceso:
7ste e!ento define un blo<ue de proceso <ue se acti!a cuando pulsa#os la tecla de funci@n +Fnn? siendo SnnS un !alor
co#prendido entre 1 y ".. 7ste e!ento se utili5a en los infor#es interacti!os cuando %eneran salidas secundarias. 7ste
e!ento se describe con #ayor detalle en el CapMtulo 1/E S+ro%ra#as interacti!osS.
De i%ual for#a <ue en los e!entos anteriores? si no defini#os una interfa5 de usuario particular para el pro%ra#a? el siste#a
incorpora una estAndar. (i el usuario presenta una tecla de funci@n el siste#a procesarA el blo<ue de proceso de esa tecla
94
de funci@n =si e8iste>. 4a posici@n del cursor no es rele!ante. +ara !er una lista de tecla de funci@n predefinidas se puede
crear un pro%ra#a <ue ten%a un e!ento *T +Fnn? e1ecutar el listado? y sobre Bste pulsar el bot@n derecho del rat@n.
*parecerA un listado con todas las teclas de funci@n definidas con un te8to. Reco#iendo no utili5ar este e!ento? es
preferible utili5a el e!ento *T -(7R6C0*DD. Lace #As a#i%able la interfa5 del usuario el uso de botones <ue el uso de
teclas de funci@n.
Ee!plo .:
D*T* D-;7R 4IK7 (C6IDD7G.
(T*RT60F6(747CTI0D.
D0 9 TI7(.
&RIT7E Q IRo2I? ="> (C6IDD7G.
D-;7R N (C6IDD7G.
LID7 D-;7R.
7DDD0.
*T +F).
CL7CK D0T D-;7R I( IDITI*4.
&RIT7E Q ICursor 2as in ro2I? ="> D-;7R.
C47*R D-;7R.
95

Вам также может понравиться