Sei sulla pagina 1di 92

ABAP

AO 2005
Pgina 2 de 92
INDICE
I. Introduccin__________________________________________________________________5
Caractersticas del lenguaje:___________________________________________________________5
Sintaxis y formato de un programa ABAP________________________________________________5
Concatenacin de sentencias__________________________________________________________7
eclaracin de datos_________________________________________________________________7
!"jetos de datos_____________________________________________________________________#
Sentencias de declaracin de datos_____________________________________________________$
II. Sentencias Bsicas de Procesamiento de Datos___________________________________10
III. Control interno del flujo de un programa________________________________________1
%jemplos de expresiones lgicas______________________________________________________&'
Sentencias de control________________________________________________________________&5
Sentencias de salida en "ucles________________________________________________________&(
I!. "a#las Internas $parte I%_______________________________________________________1&
Concepto de ta"la interna____________________________________________________________&7
efinicin de ta"las internas__________________________________________________________&7
!.'lementos de "e(to___________________________________________________________1)
!I. Diccionario *B*P___________________________________________________________+0
!II. Pantalla de seleccin $parte I%_________________________________________________+1
efinicin de par)metros de seleccin__________________________________________________*&
efinicin de pantallas de seleccin____________________________________________________*&
!II. Pantallas de seleccin $parte II%_______________________________________________+,
efinicin de Select+options__________________________________________________________*,
!III. Campos del sistema $S-S"%__________________________________________________+
I.. S/0 *B*P_________________________________________________________________+&
!pen S-.__________________________________________________________________________*7
S-. /ati0o_________________________________________________________________________*7
Sentencias 1!pen S-.1______________________________________________________________*7
Sentencias 1/ati0e S-.1_____________________________________________________________,2
.. Bases de datos lgicas_______________________________________________________,+
.I.Salida estndar de datos______________________________________________________,
.istas sencillas_____________________________________________________________________,'
.istas complejas3___________________________________________________________________,(
.II. Procesamiento de ta#las internas______________________________________________,)
Acceso a los registros de una ta"la interna______________________________________________,#
!peraciones con ta"las internas_______________________________________________________,#
4sos de .!!P33%/.!!P para recorrer una ta"la interna__________________________________'2
Pgina 3 de 92
Procesamiento de ni0eles de control en ta"las internas____________________________________'&
4so de S45 para calcular totales y su"totales en un e0ento A63_____________________________'*
!rdenamiento de registros de una ta"la interna__________________________________________',
eterminacin de la cantidad de entradas de una ta"la interna______________________________',
Comparacin de ta"las internas_______________________________________________________',
.I!. Control e(terno del flujo de un programa_______________________________________5
%0entos principales_________________________________________________________________'5
%0entos 7ue se procesan en la salida de datos___________________________________________'(
%0entos 7ue se procesan despu8s de la salida principal de un programa_____________________'(
A"andono de "lo7ues de proceso______________________________________________________'(
.!. Programas interacti1os______________________________________________________)
.!I. 2odulari3acin de un programa______________________________________________5,
5odulari9acin en declaracin de datos3________________________________________________5,
6ransacciones______________________________________________________________________5,
Programas_________________________________________________________________________5'
5dulos de funcin_________________________________________________________________55
Su"rutinas_________________________________________________________________________5(
5acroinstrucciones_________________________________________________________________57
Salida de procesos__________________________________________________________________57
.!II. De#ugging de un programa__________________________________________________54
Pantallas del de"ugger_______________________________________________________________(2
:atc;points________________________________________________________________________(2
%jecucin paso a paso en el de"ugger__________________________________________________(2
Sentencias de depuracin____________________________________________________________(2
5emoria SAP y memoria ABAP________________________________________________________(&
%<S en memoria SAP_________________________________________________________________(&
%<S en memoria ABAP_______________________________________________________________(&
%<S en clusters de "ase de datos_______________________________________________________(*
%<S en arc;i0os externos_____________________________________________________________('
Ser0idor de presentacin_____________________________________________________________(5
.!III. C5e6ueos de *utori3acin__________________________________________________77
.I.. Procesos Bac8ground______________________________________________________7&
58todo ")sico______________________________________________________________________(7
58todo manual_____________________________________________________________________(#
58todo =Batc; >nput Cl)sico?_________________________________________________________7,
Programas est)ndar de Batc; >nput____________________________________________________75
%jecutar un juego de datos desde el programa ABAP______________________________________75
Pgina 4 de 92
6ransaccin gra"adora de "atc;+input__________________________________________________7(
..I. 9ser '(its_________________________________________________________________&&
Cmo s8 si una transaccin est)ndar tiene asociada una 4ser %xit@_________________________77
..II.:ield '(its________________________________________________________________&4
..III.Introduccin a la programacin de transacciones_______________________________)1
..I!.:ield S;m#ols_____________________________________________________________)
eclaracin de field sym"ols__________________________________________________________#'
Procesamiento de field sym"ols_______________________________________________________#'
..!."ransacciones del 'ntorno de Desarrollo______________________________________)7
..!I.Creacin de 2dulos de :uncin_____________________________________________)&
Pgina 5 de 92
I. Introduccin
Las aplicaciones R/3 estn escritas en el lenguaje de programacin ABAP (Advanced
Business Application Programming).
Los programas ABAP se comunican con la base de datos con la inter!a" gr!ica de
usuario (#APgui).
Caractersticas del lenguaje:
Basado en programacin estructurada.
$nterpretado% no compilado.
&irigido por eventos.
$ntegrado por completo en #AP R/3.
#oporta elementos de te'to multilenguaje.
(anejo transparente abierto del sistema de gestin de bases de datos mediante
ABAP )pen#*L.
Permite ampliar la !uncionalidad estndar del sistema R/3.
Sintaxis y formato de un programa ABAP
+n programa ABAP est compuesto por sentencias. ,ada sentencia comien"a con una
palabra clave (-e.ord) termina con un punto.
/j0
REPORT PRIMER_PROGRAMA.
WRITE 'Primer programa.
Adems de las sentencias% los programas pueden contener comentarios (te'tos entre
sentencias del programa ABAP para cuo objetivo es e'plicar el propsito de dic1as
Pgina 6 de 92
sentencias). Los comentarios se distinguen por2ue comien"an con 3 (al principio de la
l4nea) o con 5 (en cual2uier posicin de la l4nea).
PROGRAM SAPMTEST.
************************************************
* DECLARACIONES *
************************************************
DATA: FLAG " UN FLAG
NUMBER TYPE I " CONTADOR
......
/l lenguaje ABAP no tiene restricciones de !ormato. Las palabras deben separarse al menos por
un espacio (el !in de l4nea se considera como un espacio).
/j0
PROGRAM TEST.
WRITE 'esto es una sentencia'.
/s igual a
PROGRAM TEST. WRITE 'Esto es una sentencia'.
6 a su ve" es igual a
PROGRAM
TEST.
WRITE
Esto es una sentencia.
Caso especial: literales de texto
/l !ragmento de cdigo0
PROGRAM TEST.
WRITE 'Esto
es
una setencia'.
$nserta espacios entre cada l4nea del literal. /n este caso se debe resolver de la siguiente manera0
PROGRAM TEST.
WRITE 'Esto' &
' es ' &
'una sentencia'.
/structura bsica de las sentencias
Pgina 7 de 92
Concatenacin de sentencias
/l lenguaje ABAP permite concatenar sentencias consecutivas 2ue tienen la misma -e.ord%
usando : (dos puntos)
/j0
WRITE: SPFLI-CITYFROM,
SPFLI-CITYTO,
SPFLI-AIRPTO.
eclaracin de datos
7ipos de datos 0
#on descripciones
8o ocupan memoria en tiempo de ejecucin
&escriben propiedades t9cnicas 2ue luego sern asociadas a un programa.
7ipos de datos prede!inidos
Pgina 8 de 92
7ipos de datos locales de programa
7odos los programas ABAP permiten de!inir tipos de datos propios. Los tipos de datos locales de
un programa se de!inen usando la sentencia 76P/#0
TYPES <t> ... [TYPE <type>|LIKE <obj>] ...
/j0
TYPES: number TYPE i,
length TYPE p DECIMALS 2,
code(3) TYPE c.
TYPES: BEGIN OF linea,
columna1(3) TYPE C,
columna2(2) TYPE N,
END OF LINEA.
!"jetos de datos
+nidades !4sicas 2ue ocupan espacio en memoria un programa puede utili"ar en tiempo de
ejecucin.
,ada objeto de dato tiene asociado un tipo de dato.
/j0 :ariables% constantes
Pgina 9 de 92
Sentencias de declaracin de datos
7ABL/#
/j0 TABLES bkpf.
TABLES: bkpf, bseg.
&A7A
/j0
DATA numero(2) TYPE P.
DATA: numero(2) TYPE P,
texto(15),
texto2(20) TYPE C.
DATA numero2 LIKE numero.
DATA cliente LIKE kna1-kunnr.
DATA texto(25) TYPE C VALUE Texto inicial.
DATA numero(4) TYPE P DECIMALS 2 value 123,15.
DATA: BEGIN OF cliente,
nombre(30) TYPE C,
direccion(50) TYPE C,
END OF cliente.
,)8#7A87#
/j0 CONSTANTS pi(3) TYPE P DECIMALS 2 VALUE 3,14.
RA8;/# : Tablas internas con la estructura de los SELECT-OPTIONS.
E: RANGES belnr FOR bkpf-belnr.
Pgina 10 de 92
II. Sentencias Bsicas de Procesamiento de Datos
&A Asignacin y Con0ersin
MOVE: #e corresponde con el operador de asignacin 5<=.
/j0
MOVE var1 TO var2.
/s igual a
var2 = var1.
/j0
var2 = var1 = var3.
Asignacin de valores de estructuras
,opiar el contenido de la estructura #7R+,7> en #7R+,7?.
/j0
struct2 = struct1.
MOVE-CORRESPONDIN: ,opia el contenido de los campos de la estructura #7R+,7> en los
campos de #7R+,7? 2ue tienen id9ntico nombre.
/j0
MOVE-CORRESPONDIN struct! to struct". #mismo nombre del cam$o%
Asignacin de 0alores con &RITE TO
@R$7/...7)0 ,onvierte el contenido de 'ar! en tipo , lo guarda en 'ar". A di!erencia de ():/%
guarda con (ormato. #e tienen en cuenta los !ormatos de separador decimal !ec1a 2ue tiene
de!inido cada usuario.
/j0
WRITE var1 TO var2.
Besetear 0aria"les Ca su 0alor inicialA
CLE)R: Asigna a una variable su valor inicial.
/j0
CLEAR !"a#$%. Y est#uctu#as &so'o 'i()ia 'a ca*ece#a+
Asignacin entre campos tipo C y tipo P
P)C*: ,onvierte un campo caracter en un campo empa2uetado (tipo P).
+NP)C*: ,onvierte un campo empa2uetado en un campo caracter.
/j0
PAC, "a#C TO "a#P.
-.PAC, "a#P TO "a#C.
eterminacin de offset y longitud en asignaciones
Las sentencias ():/ @R$7/..7) permiten utili"ar el o!!set la longitud 2ue deseemos para
1acer asignaciones entre objetos de datos.
Pgina 11 de 92
/j0
MOVE nombre+2(5) to texto. (Empieza de la 2 posicion y se extiende
5) (nombre(3) toma los primeros tres lugares)
MOVE nombre TO texto+4. +4(offset)
MOVE nombre(4) TO texto.
WRITE nombre(6) TO texto+offset(long). /offset 0 long son
"a#ia*'es 1e ti)o I
Asignacin de 0alores tipo fec;a
/j0
fecha = sy-datum.
fecha+6(2) = '01'.
fecha = fecha -1. (resta un dia)
/ota para las sentencias de asignacin conversin0 ,uando los tipos de datos de las variables
origen destino no son los mismos% se aplican re,las de con'ersi-n.
ABAP provee un gran nAmero de conversiones de tipo automtico.
*A Procesamiento num8rico
#entencias bsicas0
)tras sentencias0
AB#0 :alor absoluto
/j0
. 2 A3S& M +.
,/$L0 :alor entero superior.
/j0
. 2 CEIL& M +.
BL))R0 :alor entero in!erior.
/j0
. 2 FLOOR& M +.
7R+8,0 Parte entera de un nAmero.
/j0
. 2 TR-.C& M +.
BRA,0 Parte decimal de un nAmero.
/j0
. 2 FRAC& M +.
Pgina 12 de 92
#7RL/80 &evuelve la longitud de un string.
/j0
. 2 STRLE.& M +.
/ntre campos de estructuras% se pueden llevar a cabo operaciones aritm9ticas usando las
siguientes sentencias0
A&&C,)RR/#P)8&$8;
#+B7RA,7C,)RR/#P)8&$8;
(+L7$PL6C,)RR/#P)8&$8;
&$:$&/C,)RR/#P)8&$8;
/j0
4ATA: 3EGI. OF a,
uno TYPE I 5AL-E 676,
1os TYPE I 5AL-E 686,
E.4 OF a.
4ATA: 3EGI. OF *,
1os TYPE I 5AL-E 696,
t#es TYPE I 5AL-E 6:6,
E.4 OF *.
A44-CORRESPO.4I. a TO *.
WRITE: 3-4OS, 3-TRES.
/l resultado en pantalla ser4a0
D D
,A Sentencias de manejo de strings Csolo para cadenasAtipo c;ar
,)8,A7/8A7/ s> .. sn $87) str
,oncatena varios strings (s> .. sn) en uno solo (str).
/j0
CO.CATE.ATE 6E' "a'o# es6 su(a I.TO #esu't.
#PL$7 str A7 separador $87) s> .. sn.
&ivide el contenido de campo (str) en varios substrings (s>..sn).
/j0
SPLIT cuit AT 6-6 I.TO )a#te$ )a#te; )a#te9.
#E$B7 str.
Permite reali"ar despla"amientos del contenido de un campo.
/j0
S<IFT no(*#e.
,)8&/8#/ str.
Elimina es$acios en blanco sobrantes de un cam$o.
/j0
CO.4E.SE te=to.
CO.4E.SE te=to .O-GAPS.
Pgina 13 de 92
7RA8#LA7/0 7rans!orma el contenido de un objeto de dato.
/j0
TRA.SLATE nu(e#o -SI.G 6.,6.
TRA.SLATE te=to TO -PPER CASE.

):/RLA6 str @$7E s>.
#obreescribe el contenido de un campo (s>) sobre otro (str) .
/j0
O5ERLAY te=to WIT< >i''e#.
O5ERLAY te=to WIT< >i''e# O.LY te=t$.
R/PLA,/ str> @$7E str? $87) str.
Reempla"a el contenido de un campo (str)% cambiando las ocurrencias de str> por str?.
/j0
REPLACE st#$ WIT< st#; I.TO st#in?.
#/AR,E str B)R str?.
Busca la ocurrencia de str? en str (guarda la posicin en #6CB&P)# completa #6C
#+BR, con F si encontr el substring% sino G).
/j0
SEARC< st#in? >o# 6@6.
Pgina 14 de 92
III. Control interno del flujo de un programa
(ediante el control interno del !lujo de un programa se pueden reali"ar bi!urcaciones o bucles. La
maor4a de las sentencias de control interno utili"a 5e'presiones lgicas=.
/l !ormato bsico de una e'presin lgica es0
.cam$o!/ .o$erador/ .cam$o"/
!peradores para cual7uier o"jeto de dato
!P%BA!B %-4>DA.%/6% %SCB>PC>E/
/* < $gual aH
8/ IJ % JI 8o igual aH
L7 I (enor 2ueH
L/ I< (enor o igual 2ueH
;7 J (aor
;/ J< (aor o igual 2ueH
!peradores para strings car)cter CCA y num8ricos C/A
!P%BA!B %SCB>PC>E/
,) ,ontiene sloH
,8 8o contiene sloH
,A ,ontiene algAnH
8A 8o contiene algAnH
,# ,ontiene el stringH
8# 8o contiene el stringH
,P ,ontiene el patternH(3)
8P 8o contiene el patternH(3)
(3) Permite usar los caracteres especiales K3K (,ual2uier nAmero de caracteres) KLK (cual2uier
caracter). Para buscar un K3K o KLK o para di!erenciar maAsculas de minAsculas 1a 2ue anteponer
el KMK.
!peradores especiales
!P%BA!B %SCB>PC>E/
B/7@//8 .. A8& Rango de valores
$# $8$7$AL :alor inicial
$8 :alor perteneciente a un
criterio de seleccin
Las e'presiones lgicas pueden combinarse con A8&% )R 8)7.
%jemplos de expresiones lgicas
> %2 )
i LE >
st#$ CO su*st#
Pgina 15 de 92
st#; CA 6Aa6.
st#9 CP 6Ate=to6.
>ecBa 3ETWEE. >ecBaCinicio A.4 6;DD;DE$;6
conta1o# IS I.ITIAL
socie1a1 I. sC*uF#s
Sentencias de control
$B0 Bi!urcacin condicional.
/j0
!% IF c1 = c2.
...
ELSE.
...
ENDIF.
"% IF c1 > c2.
...
ELSEIF c1 < c2.
...
ELSE.
...
ENDIF.
,A#/0 Bi!urcacin mAltiple condicional.
/j0
CASE string.
WHEN A.
.
WHEN 'B' OR C.
.
WHEN OTHERS.
.
ENDCASE.
&)0 Bucle incondicional.
/j0
!% 4O.
WRITE SY-I.4E@.
IF SY-I.4E@ 2 9.
E@IT.
E.4IF.
E.44O.
"% 4O 9 TIMES.
WRITE SY-I.4E@.
E.44O.
Pgina 16 de 92
@E$L/0 Bucle condicional.
/j0
W<ILE in1ice % $.
>acto#ia' 2 >acto#ia' A in1ice.
in1ice 2 in1ice G $.
E.4W<ILE.
Sentencias de salida en "ucles
,)87$8+/0 7ermina el paso de un bucle de !orma incondicional.
,E/,N Ie'pOlogicaJ0 7ermina el paso de un bucle de !orma condicional (si no se cumple
la e'presin evaluada). (Rempla"a el i!)
/P$70 7ermina un bucle de !orma incondicional.
Pgina 17 de 92
I!. "a#las Internas $parte I%
Concepto de ta"la interna
La tablas internas proveen una !orma de almacenar datos en memoria l4nea por l4nea.
,ada l4nea tiene la misma estructura.
Los datos almacenados en tablas internas solamente e'istirn durante el tiempo de
ejecucin del programa.
/l nAmero de registros de una tabla interna no es !ijo% el sistema incrementa el tamaQo de
la misma en tiempo de ejecucin (a medida 2ue se van agregando datos).
Las tablas internas estn compuestas por 0eader line Table lines. La 1eader line es el
rea de trabajo% cuando se leen datos de una tabla interna estos 2uedan almacenados en
la 1eader line. Los datos solamente pueden leerse (o modi!icarse) en el 1eader line% de
a14 reci9n trans!erirse a la tabla interna.
/l 1eader line es opcional% por lo tanto si 2uiere leerse una l4nea de una tabla interna
de!inida sin 1eader line debe guardarse el resultado en otra rea de trabajo (con $87)).
/l 1eader line la tabla interna (table lines) tienen el mismo nombre. /l sistema sabe en
cada sentencia si nos re!erimos al rea de trabajo o a la tabla interna (segAn el tipo de
sentencia).
7abla interna Rrea de trabajo
efinicin de ta"las internas
Las tablas internas se declaran con la clusula ),,+R# de la sentencia &A7A o 76P/#. /l
parmetro ),,+R# determina el nAmero de l4neas creadas cuando la tabla es creada en
memoria. #in embargo% en tiempo de ejecucin la tabla se e'tiende dinmicamente% Son demandT
(a medida 2ue se re2uieren nuevos registros).
,rear una tabla interna en base a un tipo de estructura0
TYPES: 3EGI. OF 'inea,
co'u(na$&;+ TYPE C,
co'u(na; TYPE I,
E.4 OF LI.EA.
4ATA ita* TYPE 'inea OCC-RS $D.
4ATA ita*; TYPE 'inea OCC-RS D WIT< <EA4ER LI.E.
4ATA ita*9 LI,E ita*.
4ATA ita*E LI,E ita* WIT< <EA4ER LI.E.
?. ,rear una tabla interna directamente% sin de!inir antes un tipo.
4ATA: 3EGI. OF ita* OCC-RS n,
...
E.4 OF ita*.
Pgina 18 de 92
!.'lementos de "e(to
Los elementos de te'to permiten guardar te'tos en el programa sin necesidad de especi!icarlos en
el cdigo !uente mediante 1ard-codin,.
Los elementos de te'to de un programa se mantienen desde el editor ABAP (#/3U)0 Pasar a -/
elementos de te2to.
Ea tres tipos de elementos de te'to0
,abeceras de lista0 Permite setear la cabecera de pgina las cabeceras de columna del
reporte.
Ca"ecera de p)gina
,abecera de columna
7e'tos de seleccin0 Los te'tos 2ue aparecen en la pantalla de seleccin. #e de!inen para
los PARA(/7/R# #/L/,7 )P7$)8#.
Pgina 19 de 92
Parmetro
7e'to en pantalla de seleccin
(arcar para tomar el te'to del
&iccionario de datos.
#4mbolos de te'to0 7e'tos 2ue se van a listar en algAn momento dentro del programa.
> sm"olo de texto
6exto
(ediante la opcin $asar a -/ traducci-n se puede mantener los te'tos en di!erentes idiomas%
para 2ue se muestren segAn el idioma de logon.
+so de los s4mbolos de te'to
WRITE TE@T-DD$. HSi no e=iste e' te=to DD$, 'a sa'i1a es es)acios.
WRITE C#ite#ios 1e se'ecciIn&DD$+. HSi e=iste e' te=to DD$, 'o
i()#i(e. Sino i()#i(e e' 'ite#a'
,uando se imprime un s4mbolo de te'to% se busca en el idioma correspondiente. #i no e'iste en
ese idioma es e2uivalente a 2ue el elemento de te'to no e'iste.
Pgina 20 de 92
!I. Diccionario *B*P
A trav9s de la transaccin del diccionario de datos (#/>>) se pueden mantener todos los objetos
de base de datos relacionados directamente con el entorno de programacin0
7ablas.
/structuras0 #e de!inen en !orma similar a las tablas pero !4sicamente es slo una
de!inicin% no se pueden almacenar datos en ellas.
:istas de tablas.
/lementos de datos0 +n elemento de datos es un tipo elemental 2ue describe los atributos
de tipo (tipo de datos% longitud de campo % en caso necesario% cantidad de decimales)
contiene in!ormacin relevante para dnpros (te'tos e'plicativos o Auda para campos).
&ominios0 Los dominios de!inen !ormatos de campos. +n dominio describe los atributos
t9cnicos de un campo% tales como el tipo de datos o la cantidad de posiciones del campo%
la tabla de veri!icacin de posibles valores valores% longitud de salida rutina de
conversin.
Audas para bAs2ueda ((atc1code).
)bjetos de blo2ueo0 Las bases de datos soportadas por #AP reali"an blo2ueos !4sicos en
la actuali"acin de la in!ormacin. Los objetos de blo2ueo permiten reali"ar blo2ueos
lgicos en lo programas.
Pgina 21 de 92
!II. Pantalla de seleccin $parte I%
Las pantallas de seleccin se componen de0
PARA(/7R)#0 /2uivale a una variable 2ue acepta un Anico valor.
#/L/,7C)P7$)8#0 #e asocia a campos de la base de datos. Permite al usuario
introducir combinaciones complejas de seleccin% 2ue se guardan en una tabla
interna con un !ormato particular. Al de!inir un #/L/,7C)P7$)8 el programa crea
una tabla RA8;/# con el mismo nombre.
efinicin de par)metros de seleccin
PARA(/7/R#0 &e!ine parmetros en la pantalla de seleccin.
/j0
PARAMETERS: ca()o$&$D+ t0)e c, /Pa#J(et#o ti)o cBa#, 'on? $D
ca()o; t0)e 1(fecha), /Pa#J(et#o ti)o >ecBa
ca()o9 LI,E Fna$-Funn#,/Co(o n#o.cte &Be#e1a (atcBco1e+
ca()oE TYPE I 4EFA-LT $DD, /Ti)o ente#o &)#o)one 6$DD6+
ca()o7 LI,E SY-4AT-M, /Ti)o >ecBa
ca()o8 O3LIGATORY, /CBa# 1e 'on?. $ o*'i?ato#io
ca()oK AS C<EC,3O@ 4EFA-LT @,/CBecF*o= (a#ca1o )L1e>ecto
ca()oM RA4IO3-TTO. GRO-P #a1$(mismo grupo se tilda uno solo+,
/Ra1io*utton
ca()o: RA4IO3-TTO. GRO-P #a1$ 4EFA-LT @,
/Ra1io*utton &se'ecciona1o )o# /1e>ecto+
ca()o$D MEMORY I4 *uF, /To(a e' "a'o# )o# 1e>ecto 1e
(e(o#ia
ca()o$$ LI,E ,.A$-,-..R MATC<CO4E O3NECT 1e*i. /usa (atcBco1e
/61e*i6
efinicin de pantallas de seleccin
#/L/,7$)8C#,R//80 &a !ormato a la pantalla de seleccin.
/j0
A 4e>ini# un *'oOue Oue contiene )a#J(et#os
SELECTIO.-SCREE. 3EGI. OF 3LOC, *$ WIT<
FRAME TITLE 6Se'eciones6.
& 1e>ini# )a#J(et#os o se'ect-o)tions+
SELECTIO.-SCREE. E.4 OF 3LOC, *$.
A 4e>ini# "a#ios )a#J(et#os untos en 'a (is(a 'Pnea
SELECTIO.-SCREE. 3EGI. OF LI.E.
& 1e>ini# )a#J(et#os o se'ect-o)tions+
SELECTIO.-SCREE. E.4 OF LI.E.
A 4i*ua# una 'Pnea se)a#a1o#a
SELECTIO.-SCREE. -LI.E.
SELECTIO.-SCREE. -LI.E L$&7D+.
A 4ea# 'Pneas en *'anco
Pgina 22 de 92
SELECTIO.-SCREE. S,IP.
SELECTIO.-SCREE. S,IP 9.
A Most#a# un te=to en 'a )anta''a 1e se'ecciIn
SELECTIO.-SCREE. COMME.T L;&7D+ te=t-DD9.
Pgina 23 de 92
!II. Pantallas de seleccin $parte II%
Las pantallas de seleccin se componen de0
PARA(/7R)#0 /2uivale a una variable 2ue acepta un Anico valor.
#/L/,7C)P7$)8#0 #e asocia a campos de la base de datos. Permite al usuario
introducir combinaciones complejas de seleccin% 2ue se guardan en una tabla
interna con un !ormato particular. Al de!inir un #/L/,7C)P7$)8 el programa crea
una tabla RA8;/# con el mismo nombre.
efinicin de Select+options
,ampos de la tabla RA8;/# de un #/L/,7C)P7$)80
CA5P! .!/F>64 DA.!B%S P!S>B.%S
#$;8 > S$T0 $nclusin
S/T0 /'clusin
)P7$)8 ? S/*T0 $gual aH
S8/T0 8o igual aH
S;/T0 (aor o igual 2ueH
S;7T0 (aor 2ueH
SL/T0 (enor o igual 2ueH
SL7T0 (enor 2ueH
S,PT0 ,ontiene patrnH (usa caracteres especiales 5L= 53=).
S8PT0 8o contiene el patrnH (usa caracteres especiales 5L=
53=).
SB7T0 /ntre los valoresH (usa el campo E$;E).
S8BT0 8o est entre los valoresH(usa el campo E$;E).
L)@ La del campo
re!erenciado
#egAn el campo de re!erencia
E$;E La del campo
re!erenciado
#egAn el campo de re!erencia
#/L/,7C)P7$)8#0 &e!ine un criterio de seleccin en la pantalla de seleccin.
/j0
SELECT-OPTIO.S: sCFunn# FOR Fna$-Funn#,
sC*#scB FOR Fna$-*#scB
4EFA-LT D;DD TO DEDD OPTIO. 3T SIG. I,
sC)st'Q FOR Fna$-)st'Q .O-E@TE.SIO.,
sCo#tD$ FOR Fna$-o#tD$ .O I.TER5ALS.
Pgina 24 de 92
!III. Campos del sistema $S-S"%
/n la siguiente tabla se describen los campos del sistema (#6Ccampo) ms importantes
para utili"ar en los programas ABAP.
La lista completa puede verse desde el diccionario de datos (estructura #6#7).
CA5P! 6>P! .!/F>64 %SCB>PC>E/
$8&/P $87G >F Loops% ejecucin de loop actual
PA;8) $87G >F ,reacin lista% pgina actual
7AB$P $87G >F 7ablas internas% 4ndice de l4neas actual
7B$LL $87G >F 7ablas internas% cantidad de l4neas actual
7),,+ $87G >F 7ablas internas% valor del parmetro ),,+R#
&B,87 $87G >F Accesos base datos% cantidad de l4neas de tabla le4das
B&P)# $87G >F #trings% o!!set en string (lugar de 1alla"go)
,)L8) $87G >F ,reacin de listas% columna actual en la creacin de la lista
L$8,7 $87G >F ,reacin listas% longitud pgina de la lista
L$88) $87G >F ,reacin listas% l4nea actual
L$8#V $87G >F ,reacin listas% anc1o l4nea de la lista
(A,)L $87G >F $mprimir listas% columnas de la sentencia #/7 (AR;$8
(AR)@ $87G >F $mprimir listas% l4neas de la sentencia #/7 (AR;$8
7L/8; $87G >F 7ablas internas% tamaQo de la l4nea
L$LL$ $87G >F 7ratamiento listas% l4nea de lista seleccionada
#+BR, $87G >F ,digo retorno% cdigo retorno tras sentencia
,+,)L $87G >F $mgenes pantalla% posicin del cursor 1ori"ontal (columna)
,+R)@ $87G >F $mgenes pantalla% posicin del cursor vertical (!ila)
L#$8& $87G >F 7ratamiento listas% 4ndice del listado actual
L$#7$ $87G >F
7ratamiento listas% nivel del listado desde el cual se activ el
evento actual
#7/PL $87G >F &npros% 4ndice de l4nea de tabla actual (en L))P)
#R)@# $87G >F $mgenes pantalla% cantidad l4neas
#,)L# $87G >F $mgenes pantalla% cantidad columnas
L))P, $87G >F
&npros% cantidad de l4neas visibles en #7/P L))P de
dnpro
7V)8/ $87G >F
Bec1a 1ora% di!.tiempo con WEra estndar ;reen.ic1W en
segundos
&A6#7 ,EAR > Bec1a 1ora% indic.1orario verano activo
B&A6@ $87> 3 Bec1a 1ora% d4a de la semana en calendario !brica
LA8;+ LA8; > #istema R/3% idioma actual
()&8) ,EAR > #istema R/3% cantidad de modos e'ternos
BA7,E ,EAR > /jecucin en proceso de !ondo (P)X
B$8P7 ,EAR > Batc1 input% programa ejecutado en batc1 input (P)X
,ALL& ,EAR > Programa ABAP% modo de llamada del programa activo
&688R ,EAR G Programa ABAP% 8Amero del dnpro actual
Pgina 25 de 92
&68;R ,EAR G Programa ABAP% grupo de imgenes del dnpro actual
@7$7L ,EAR > ,reacin listas% indicador para cabecera estndar de pgina
,PA;/ $87G >F 7ratamiento de listas% nAmero de pgina actual
&B8A( ,EAR ?F Programa ABAP% base de datos lgica usada
(A8&7 ,L87 3 #istema R/3% 8Y mandante desde entrada al sistema
P/PP$ 8+(, > Parmetro impr.% tmpo.permanencia en #P))L
PR$(( ,EAR > Parmetro impr.% salida inmediata
PRR/L ,EAR > Parmetro impr.% borrar tras salida
PRB$; ,EAR > Parmetro impr.% portada de seleccin
PR8/@ ,EAR > Parmetro impr.% nueva orden #P))L
P&/#7 ,EAR G Parmetro impr.% disp.salida
PL$#7 ,EAR >? Parmetro impr.% nombre de la orden #P))L
PR&#8 ,EAR Z Parmetro impr.% nombre set de datos #P))L
,ALLR ,EAR U $mprimir listas% identi!.!uncin de dilogo
R7$7L ,EAR [F Parmetro impresin% t4tulo programa impresn
PRR/, ,EAR >? Parmetro impr.% destinatario
PR7P7 ,EAR ZU Parmetro impr.% te'to para portada
PRAB7 ,EAR >? Parmetro impr.% departamento en la portada
PAAR7 ,EAR >Z Parmetros impresin% edicin impresin
PR,)P 8+(, 3 Parmetro impr.% cantidad impresiones
&B#6# ,EAR >F #istema R/3% nombre sistema base de datos
#6#$& ,EAR U #istema #AP% nombre del sistema #AP
)P#6# ,EAR >F #istema R/3% sistema operativo del servidor #AP
PBN/6 ,EAR ?F $mgenes pantalla% status ;+$ actual
#APRL ,EAR G #istema #AP% versin release del sistema
7,)&/ ,EAR ?F Programa ABAP% cdigo transaccin actual
+,)(( ,EAR [F
$mgenes pantalla% cdigo !uncin 2ue se ingres en campo
comandos
#P)8) 8+(, >F $mprimir listas% nAmero #P))L
&A7+( &A7# U Bec1a 1ora% !ec1a (servidor de aplicacin)
#L#/7 ,EAR >G $mgenes seleccin% nombre variante
+V/$7 7$(# Z Bec1a 1ora% 1ora (servidor de aplicacin)
R/P$& ,EAR GF Programa ABAP% programa de control actual
+8A(/ ,EAR >? #istema #AP% nombre de acceso del usuario
L#7A7 ,EAR >Z 7ratamiento listas% denominador p.nivel
AB,&/ ,EAR ?Z ,onstantes0 Al!abeto (A%B%,%...)
(#;L$ ,EAR ZF (ensajes% l4nea de mensajes
7$7L/ ,EAR [F $mgenes pantalla% te'to de la l4nea de cabecera
L$#/L ,EAR ?\\ 7ratamiento listas% contenido l4nea seleccionada
+L$8/ ,EAR ?\\ ,onstantes% barra 1ori"ontal de longitud (C)
,PR); ,EAR GF Programa ABAP% nombre del programa principal
L&BP; ,EAR GF
Programa ABAP% programa de base de datos (para #6C
&B8A()
Pgina 26 de 92
7:ARF ,EAR ?F ,reacin listas% variable te'to para elemento de te'to
7:AR> ,EAR ?F ,reacin listas% variable te'to para elemento de te'to
7:AR? ,EAR ?F ,reacin listas% variable te'to para elemento de te'to
7:AR3 ,EAR ?F ,reacin listas% variable te'to para elemento de te'to
7:ARG ,EAR ?F ,reacin listas% variable te'to para elemento de te'to
7:AR\ ,EAR ?F ,reacin listas% variable te'to para elemento de te'to
7:ARZ ,EAR ?F ,reacin listas% variable te'to para elemento de te'to
7:AR[ ,EAR ?F ,reacin listas% variable te'to para elemento de te'to
7:ARU ,EAR ?F ,reacin listas% variable te'to para elemento de te'to
7:ARD ,EAR ?F ,reacin listas% variable te'to para elemento de te'to
(#;$& ,EAR ?F (ensajes% clase de mensaje
(#;76 ,EAR > (ensajes% tipo de mensaje
(#;8) 8+(, 3 (ensajes% nAmero de mensaje
(#;:> ,EAR \F (ensajes% variable de mensaje
(#;:? ,EAR \F (ensajes% variable de mensaje
(#;:3 ,EAR \F (ensajes% variable de mensaje
(#;:G ,EAR \F (ensajes% variable de mensaje
:L$8/ ,EAR > ,onstantes0 barra vertical (])
#7A,) $87G >F 7ratamiento listas% primera columna visuali"ada en pantalla
#7AR) $87G >F 7ratamiento listas% l4nea superior visuali"ada en pantalla
&A7AR ,EAR > &npros% visuali"a entrada usuario (datos recibidos)
E)#7 ,EAR 3? #istema R/3% 8ombre servidor de aplicacin
&A7L) &A7# U Bec1a 1ora% !ec1a local del usuario
7$(L) 7$(# Z Bec1a 1ora% 1ora local del usuario
V)8L) ,EAR Z Bec1a 1ora% Euso 1orario del usuario
Pgina 27 de 92
I.. S/0 *B*P
/n un sistema R/3% los datos 2ue deben permanecer en el sistema se almacenan en las
tablas de base de datos. /l lenguaje ABAP permite acceder a la base de datos por
di!erentes caminos0
!pen S-.
)pen #*L es un subconjunto de comandos de #*L #tandard completamente integrado
en ABAP. 8os permite leer (#/L/,7) modi!icar ($8#/R7% +P&A7/% &/L/7/)
in!ormacin. /s independiente del motor de base de datos 2ue se est utili"ando.
S-. /ati0o
/s la posibilidad de incluir sentencias nativas #*L en un programa ABAP. Al ser nativas%
estas sentencias dependen del motor 2ue se este utili"ando. ($n!ormi'% )racle% etc.).
Ea dos variables del #istema 2ue nos permiten conocer in!ormacin% luego de una
sentencia )pen #*L. #6C#+BR, para saber si la operacin !ue satis!actoria% o no% #6C
&B,87 2ue nos permite conocer la cantidad de registros seleccionados por la consulta.
Por de!ecto las sentencias )pen #*L 1acen re!erencia al mandante en cual estamos
trabajando% si es 2ue la tabla es dependiente del mandante. /sto sucede cuando la tabla
posee como primer columna el campo (A8&7. /n el caso 2ue se desee acceder a una
tabla pero de otro mandante se debe especi!icar a trav9s de la opcin ,L$/87
#P/,$B$/&.
Sentencias 1!pen S-.1
#/L/,70 Lectura de datos de las tablas de base de datos. /l !ormato bsico es0
#/L/,7 ^#$8;L//&$#7$8,7_ IresultadoJ
$87) Iitab / estructuraJ
BR)( ItablaJ
^@E/R/ IcondicinJ_
^;R)+P B6 IcamposJ_
^EA:$8; IcondicinJ_
^)R&/R B6 IcamposJ ^A#,/8&$8;/&/#,/8&$8;__.
/j0
TA3LES Fna$.
SELECT A FROM Fna$ W<ERE Funn# % 6DDD$78$DDD6.
WRITE: L Fna$-Funn#, Fna$-na(e$.
E.4SELECT.
A Lectu#a 1e un so'o #e?ist#o 1e *ase 1e 1atos
SELECT SI.GLE A FROM Fna$ W<ERE Funn# 2 6DDDDDDDDD$6.
4ATA st#uct LI,E Fna$.
Pgina 28 de 92
SELECT A FROM Fna$ I.TO st#uct W<ERE 'an1$ 2 6AR6.
WRITE: L st#uct-Funn#.
E.4SELECT.
4ATA: 3EGI. OF st#uct,
Funn# LI,E Fna$-Funn#,
na(e$ LI,E Fna$-na(e$,
E.4 OF st#uct.
SELECT na(e$ Funn# I.TO CORRESPO.4I.G FIEL4S OF st#uct
FROM Fna$.
WRITE: L st#uct-Funn#.
E.4SELECT.
4ATA ta*'a LI,E Fna$ OCC-RS $D WIT< <EA4ER LI.E.
A Gua#1a# e' #esu'ta1o 1e 'a consu'ta en una ta*'a inte#na
SELECT A FROM Fna$ I.TO TA3LE ta*'a W<ERE 'an1$ 2 6AR6.
4ATA: 3EGI. OF ta*'a OCC-RS D,
Funn# LI,E Fna$-Funn#,
na(e$ LI,E Fna$-na(e$,
E.4 OF ta*'a.
SELECT na(e$ Funn# I.TO CORRESPO.4I.G FIEL4S OF TA3LE ta*'a
FROM Fna$ W<ERE 'an1$ 2 6AR6.
AEn 'u?a# 1e I.TO, en este caso se )ue1e usa# APPE.4I.G
A Se )ue1en usa# >unciones 1e a?#e?aciIn
SELECT MA@&1(*t#+ I.TO #esu'ta1o FROM 3SIS.
SELECT S-M&4ISTI.CT 1(*t#+ I.TO RES-LTA4O FROM 3SIS.
A Funciones 1e a?#e?aciIn 1is)oni*'es: MA@, MI., A5G, S-M 0 CO-.T
A Lectu#a es)eci>ican1o ca()os 1e sai1a 0 OR4ER 3Y...
SELECT na(e$ Funn# I.TO & no(*#e , co1i?o +
FROM Fna$ W<ERE 'an1$ 2 6AR6
OR4ER 3Y na(e$ 4ESCE.4I.G.
A Lectu#a con es)eci>icaciIn 1e ta*'a 1inJ(ica
4ATA ta*'a&$D+ TYPE C.
ta*'a 2 63,PF6.
SELECT SI.GLE A FROM &ta*'a+...
A CBeOueo 1e "a'o#es con SELECT-OPTIO.S
SELECT-OPTIO.S sCFunn# FOR Fna$-Funn#.
SELECT A FROM Fna$ W<ERE Funn# I. sCFunn#.
A Lectu#a 1e 1os ta*'as a t#a"Rs 1e I..ER NOI.
SELECT AS,-..R AS.AME$ 3S3-,RS 3SALT,.
I.TO CORRESPO.4I.G FIEL4S OF TA3LE ITA3
FROM & ,.A$ AS A
Pgina 29 de 92
I..ER NOI. ,.3$ AS 3 O. AS,-..R 2 3S,-..R +
W<ERE AS,-..R 3ETWEE. $ A.4 ;7DDD A.4
3-ALT,. 3ETWEE. $ A.4 ;7DDD.
>5P!B6A/6%: /n la clusula @E/R/ pueden utili"arse todos los valores lgicos de
comparacin (los aplicables a todos los objetos de datos).
$8#/R70 $nserta un registro en tabla de base de datos. /l !ormato bsico es0
I.SERT I.TO !ta#?et% 5AL-ES !Ta% .
/l contenido de la variable o estructura .a es insertado en la tabla target. La variable o
estructura .a debe contener la misma longitud 2ue la tabla del diccionario. /s
conveniente de!inir 3a li4e tar,et.
)tras !ormas de lograr lo mismo son0
$8#/R7 ItargetJ BR)( I.a J.
$8#/R7 IdbtabJ. ,uando se 1a completado con in!ormacin la cabecera de la tabla.
Para insertar varias l4neas0
$8#/R7 ItargetJ BR)( 7ABL/ IitabJ ^A,,/P7$8; &+PL$,A7/ N/6#_ .
/j0
TA3LES Fna$.
Fna$-Funn# 2 6DDD$78$DD96.
Fna$-na(e$ 2 6C'iente Test6.
I.SERT Fna$.
()&$B60 La sinta'is es como $8#/R7% pero se di!erencia en el !uncionamiento. #i el
registro no e'iste lo inserta en la tabla% si a e'iste% lo modi!ica.
+P&A7/0 (odi!ica el contenido de uno o ms registros de la base de datos. /l !ormato
bsico es0
+P&A7/ ItargetJ #/7 Iset>J Iset ?J ... ^@E/R/ IcondJ_.
7ambi9n puede usarse de la !orma0
+P&A7/ ItargetJ BR)( I.aJ .
+P&A7/ IdbtabJ.
+P&A7/ ItargetJ BR)( 7ABL/ IitabJ .
/j0
UPDATE kna1 SET spras = 'S' TELTX = ' '
WHERE kunnr > '0001560000'.
&/L/7/0 /limina registros de la base de datos. /l !ormato bsico es0
4ELETE FROM !ta#?et% W<ERE !con1%.
7ambi9n se puede usar de la !orma0
Pgina 30 de 92
&/L/7/ IdbtabJ. ,uando se 1a completado con in!ormacin la cabecera de la
tabla.
) para borrar mAltiples l4neas0
&/L/7/ ItargetJ BR)( 7ABL/ IitabJ .
/j0
TA3LES Fna$.
Fna$-Funn# 2 6DDD$78$DD96.
4ELETE Fna$.
/n todos los casos0
#6C#+BR, < F indica 2ue se seleccion al menos un registro. )tro valor indica 2ue la
lectura/modi!icacin no tuvo 9'ito.
#6C&B,87 contiene la cantidad de registros seleccionados.
Sentencias 1/ati0e S-.1
)pen #*L nos permite acceder a tablas de la base de datos 2ue est9n declaradas en el
diccionario de datos Anicamente. /sto nos permite independi"arnos del motor de Base de
datos sobre el cual #AP esta montado. #*L 8ativo nos permite utili"ar #*L espec4!ico de
la base de datos en un programa ABAP. /sto permite 2ue podamos acceder no solo a
tablas de #AP% sino a cual2uier tabla del motor.
#inta'is para utili"ar #*L 8ativo.
/P/, #*L ^P/RB)R($8; I!ormJ_.
I#entencias #*L 8ativasJ
/8&/P/,.
&entro del blo2ue de sentencias #*L no 1a control de sinta'is por parte del procesador
ABAP% a 2ue no es su lenguaje. 7anto las (5) como el (3) no generan comentarios% tanto
las tablas como los campos son caseCsensitive.
La trans!erencia de la in!ormacin entre la tabla de base de datos el programa ABAP es
a trav9s de variables de Eost. /stas tienen 2ue estar declaradas en el programa ABAP.
#i lo 2ue va a devolver el #*L es una tabla se pasa al programa ABAP a trav9s de
P/RB)R($8;. Lo 2ue estar4a 1aciendo es de!inir una subrutina donde poder tratar la
in!ormacin devuelta por el 2uer.
/j0
REPORT 1e(o.
4ATA: 3EGI. OF TFna$,
Funn#&$D+,
na(e$&;7+,
st#as&;D+,
E.4 OF TFna$.
4ATA c$&$D+ TYPE C 5AL-E 6DD87DDD$DD6.
Pgina 31 de 92
E@EC SUL PERFORMI.G 'oo)Cout)ut.
SELECT Funn#, na(e$, st#as
I.TO :TFna$
FROM Fna$
W<ERE Funn# 2 :c$
E.4E@EC.
FORM 'oo)Cout)ut.
WRITE: L TFna$-Funn#, TFna$-na(e$, TFna$-st#as.
E.4FORM.
Pgina 32 de 92
.. Bases de datos lgicas
+na base de datos lgica (B&L) es un programa de acceso a base de datos 2ue se asocia
a un programa principal. La B&L el programa principal se unen en el proceso de
generacin para !ormar un Anico programa.
:entajas de usar B&L0
#i varios programas leen los mismos datos% se puede centrali"ar el acceso a las tablas de
base de datos en un Anico programa% la B&L.
#i se 2uiere usar la misma pantalla de selecin para varios programas% esto se reali"a con
la pantalla de seleccin de la B&L.
/l programa de B&L puede reali"ar los c1e2ueos de autori"acin.
&esventajas0
/l acceso a las tablas es ms lento 2ue el acceso directo (por sentencias #*L).
La transaccin mediante la cual se pueden de!inir% modi!icar visuali"ar las B&L es #/3Z.
+na B&L est compuesta principalmente por0
/structura0 /s la relacin entre las tablas 2ue componen la B&L. /s jerr2uica.
#eleccin0 /s la inter!a" de usuario asociada a la B&L (pantalla de seleccin).
Programa de base de datos0 #on las rutinas de acceso a los datos.
7e'tos de seleccin0 #on los te'tos 2ue aparecen en la pantalla de seleccin%
dependientes del idioma.
&ocumentacin.
La lgica de acceso a los datos de una B&L se da en !orma jerr2uica0

>) #e accede al > registro de A.
?) #e accede al primer registro de B relacionado con el registro le4do de A.
3) #e accede a todos los registros de , relacionados con el registro de B.
G) &espu9s se accede al siguiente registro de B (siempre relacionado con el de A).
\) #e accede a todos los de , relacionados a este registro de B.
Z) +na ve" 2ue se procesaron todos los registros de B relacionados al primer registro de
A% se lee el siguiente registro de A.
Pgina 33 de 92
Tabla A
Tabla B
Tabla C
Pgina 34 de 92
.I.Salida estndar de datos
Las sentencias de salida estndar de datos se dividen en dos grupos. /n el primero
!iguran sentencias elementales% mientras 2ue en el segundo !iguran sentencias
secundarias% bien por a!ectar la salida de !orma indirecta% o bien por ser poco utili"adas.
.istas sencillas
@R$7/0 #entencia bsica de escritura.
/j0
WRITE <o'a.
WRITE 3,PF-3EL.R.
WRITE: E' nV(e#o , nu( , es ne?ati"o.
#e puede de!inir la posicin (columna) donde va a comen"ar a imprimir la longitud en
caracteres de lo 2ue se imprime.
/j0
WRITE L P#i(e# 'Pnea.
WRITE L$9 Se?un1a 'Pnea.
WRITE L7&M+ Te#ce# 'Pnea.
WRITE AT )os&'on?+ TE@TO.
7ambi9n se pueden agregar distintas opciones de impresin.
/j0
A .o i()#i(i# e' conteni1o 1e cant si es D.
WRITE cant .O-WERO.
A .o i()#i(i# e' si?no 1e "Ci()o#te
WRITE "Ci()o#te .O-SIG..
A 4e>ini# e' >o#(ato 1e >ecBa a i()#i(i#.
WRITE s0-1atu( 11L((L00.
WRITE s0-1atu( ((L11L00.
WRITE s0-1atu( 11L((L0000.
WRITE s0-1atu( 11((00.
A I()#i(i# un i()o#te en e' >o#(ato 1e una (one1a
WRITE i()o#te C-RRE.CY ARS.
A I()#i(i# un "a'o# con 'os 1eci(a'es in1ica1os.
A Si "Ci()o#te tiene (Js 1e ; 1eci(a'es, se t#unca. Si tiene (enos
se ''enan con D
WRITE "Ci()o#te 4ECIMALS ;.
A I()#i(i# 1e >o#(a esca'a1a
4ATA "a# TYPE P 5AL-E 6$;9.E786 4ECIMALS 9.
WRITE "a# RO-.4 ;. /I()#i(e $,;97
WRITE "a# RO-.4 D.
WRITE "a# RO-.4 G$. /I()#i(e $.;9E,78D8D
Pgina 35 de 92
A I()#(i# usan1o (Jsca#as. Los "a'o#es 1e 'as (Jsca#as se inte#>#etan 1e
'a si?. >o#(a:
A C se #ee()'aQa )o# un ca#Jcte# 1e 'a "a#ia*'e a i()#i(i#
A 5 I()#i(e e' si?no 1eci(a' &so'o ti)os I 0 P+.
A LL a' )#inci)io 1e' te()'ate: Nusti>ica1o a iQOuie#1a &1e>au't+.
A RR a' )#inci)io 1e' te()'ate: Nusti>ica1o a 1e#ecBa.
A Cua'Ouie# ot#o ca#Jcte# se i()#i(e ta' co(o estJ.
WRITE Bo#a -SI.G E4IT MAS, CC:CC:CC.
WRITE "Ctota' -SI.G E4IT MAS, 5CCC,CC.
A I()#i(i# una "a#ia*'e 1e*ao 1e ot#a
A Si se i()#i(en en 'a (is(a 'Pnea, "a#$ se so*#eesc#i*e.
WRITE "a#; -.4ER "a#$.
A .o i()#i(i# un *'anco 1es)uRs 1e 'a "a#ia*'e &'o Bace )o#
1e>ecto+
WRITE "a# .O-GAP.
WIRTE: "a#$ .O-GAP, "a#; .O-GAP, "a#9, "a#E.
A Nusti>ica# e' te=to
WRITE te=to LEFT-N-STIFIE4. H1e>au't )a#a te=to
WRITE te=to CE.TERE4.
WRITE te=to RIG<T-N-STIFIE4. H1e>au't )a#a nu(R#icos
A I()#i(i# un cBecF*o= en )anta''a
WRITE cBF AS C<EC,3O@.
A I()#i(i# sP(*o'os e Pconos
I.CL-4E !SYM3OL%.
I.CL-4E !ICO.%.
WRITE SYMCP<O.E AS SYM3OL.
WRITE ICO.CALARM AS ICO..
A I()#i(i# un se)a#a1o# 1e co'u(nas
WRITE X.
+L$8/0 #ubraado.
/j0
ULINE.
ULINE AT /(13).
#N$P0 #alto de n l4neas.
/j0
S,IP.
S,IP ;.
S,IP TO LI.E 8.
8/@CL$8/0 #alto de l4nea
/j0
.EW-LI.E.
Pgina 36 de 92
8/@CPA;/0 #alto de pgina.
/j0
NEW-PAGE.
.istas complejas3
R/P)R70 &e!ine las caracter4sticas del listado (anc1o de pgina% cant. de l4neas por
pgina% id de mensaje% etc.).
/j0
REPORT Q#e)o#te LI.E-SIWE ED LI.E CO-.T ED.
REPORT Q#e)o#te LI.E-SIWE ED LI.E CO-.T 9D&;+ .O STA.4AR4 PAGE <EA4I.G.
REPORT Q#e)o#te MESSAGE-I4 WFI.
B)R(A70 &a !ormato a la salida de un programa.
/j0
A Pa#a #esa'ta# e' te=to
FORMAT I.TE.SIFIE4 O.. HE' O. es o)ciona'.
WRITE tota'.
FORMAT I.TE.SIFIE4 OFF.
A Pa#a setea# e' co'o# 1e sa'i1a 1e' 'ista1o
FORMAT COLOR COLCTOTAL.
WRITE tota'.
FORMAT COLOR OFF.
A I()#i(i# en >o#(ato in"e#so
FORMAT I.5ERSE O..
WRITE tota'.
FORMAT I.5ERSE OFF.
A Ca(*ia# e' )unte#o 1e' (ouse cuan1o )asa )o# e' "a'o# i()#eso
FORMAT <OTSPOT O..
WRITE tota'.
FORMAT <OTSPOT OFF.
A 4e>ini# un ca()o )a#a ent#a1a 1e 1atos
FORMAT I.P-T O..
WRITE In?#ese un "a'o#.
FORMAT I.P-T OFF.
Pgina 37 de 92
Listado de colores !ormatos0
#+((AR60 #alida en alta intensidad.
&/7A$L0 #alida en baja intensidad.
/j0
S-MMARY.
WRITE Te=to.
4ETAIL.
WRITE Te=to.
#e recomienda usar B)R(A7 $87/8#$B$/& en lugar de #+((AR6 &/7A$L.
P)#$7$)80 Posiciona el puntero de escritura en una posicin.
/j0
POSITIO. $D.
#/7 LA8;+A`/0 &etermina 2ue todos los elementos de te'to se van a mostrar en el
lenguaje indicado.
/j0
SET LA.G-ANE E.
#/7 L/B7 #,R)LLCB)+8&AR60 &e!ine las columnas 2ue no se mueven en un
despla"amiento 1ori"ontal.
/j0
SET LEFT SCROLL-3O-.4ARY COL-M. ;D.
R/#/R:/0 #i no 1a espacio su!iciente en la pgina actual para imprimir la cantidad de
pginas indicada% se salta a una pgina nueva.
/j0
RESER5E 9 LI.ES.
#/7 (AR;$80 /n la impresin en pantalla% la sentencia #/7 (AR;$8 no tiene ningAn
e!ecto. /n la impresin al spool setea el margen in!erior superior.
/j0
SET MARGI. E 9. 5margen i"2uierdo de G columnas superior de 3 l4neas.
Pgina 38 de 92
.II. Procesamiento de ta#las internas
Acceso a los registros de una ta"la interna
Para acceder a los registros de una tabla interna el sistema proporciona los siguientes
m9todos0
$ndice de la tabla interna0 /s un nAmero secuencial de cada registro de la tabla interna.
8o es un campo de la tabla. &espu9s de procesar un registro de una tabla interna% el
campo del sistema #6C7AB$P contiene el 4ndice del registro.
,lave de!inida por sentencia0 ,uando se lee un registro de la tabla interna con la
sentencia R/A& se pueden especi!icar los campos 2ue se 2uieren usar como !iltro
en el criterio de lectura.
,lave estndar0 3Por de!inicin% los campos clave de una tabla interna son a2uellos
campos no num9ricos (tipos B. $% P) 2ue no son tablas internas. /sta clave estndar
puede ser usada en sentencias como ,)LL/,7% R/A&% #)R7 #+(.
!peraciones con ta"las internas
Borrado de tablas internas0
Sentencia escripcin
R/BR/#E Borra todas las l4neas de la tabla interna (las table lines). 8o borra la
cabecera.
,L/AR Borra el 1eader line (la cabecera).
BR// Libera la memoria usada por la tabla interna.
/j0
REFRESH itab.
CLEAR itab.
FREE itab.
$nsercin de registros en tablas internas.
Sentencia escripcin
APP/8& AQade registros al !inal de la tabla interna. /s la 2ue se recomienda por
ra"ones de rendimiento.
,)LL/,7 AQade o modi!ica registros de la tabla interna en !uncin de la clave
estndar de la tabla. #i la clave estandar a e'iste en la tabla% modi!ica el
registro acumulando los campos num9ricos. #i no e'iste% es e2uivalente
a APP/8&.
$8#/R7 $nsertar un registro en una posicin determinada de la tabla interna.
/j0
5 toma el 1eader line 6 lo a,re,a como una nue'a table line #se a,re,a al (inal%.
APPEND itab.
Pgina 39 de 92
5 uarda el contenido de (ield como una l7nea de itab.
APPEND field to itab.
5 Se busca en itab una entrada 8ue conten,a los cam$os no num9ricos con el mismo
'alor 8ue
5 los corres$ondientes al 1eader line: 6 se suman en dic1a entrada los cam$os
num9ricos.
COLLECT itab.
5 Inserta una entrada en la tabla interna. El 'alor de los cam$os lo toma del 1eader line
INSERT itab.
INSERT itab INDEX i.
5 Inserta una entrada en la tabla interna. El 'alor de los cam$os lo toma de la estructura
&)
INSERT wa INTO itab.
,opia de tablas internas.
Sentencia escripcin
APP/8& 7ambi9n puede ser utili"ada para copiar el contenido de tablas internas.
():/ ,opia el contenido de una tabla interna sobre otra% sobreescribiendo la
tabla destino.
$8#/R7 7ambi9n puede ser utili"ada para copiar el contenido de tablas internas.
/j0
5 Co$iar al,unas entradas de una tabla interna en otra: a,re,;ndolas al (inal de la tabla
5 destino
APPEND LINES OF itab1 FROM 1 TO 5 TO itab2.
5 Co$iar las entradas de una tabla interna en otra: insert;ndolas en una $osici-n de la
5tabla destino.
INSERT LINES OF itab1 INTO itab2 INDEX 2.
5 Co$iar una tabla interna en otra: sobreescribiendo la tabla destino.
5 Si las tablas internas tienen 1eader line: el mismo 6 las table lines tienen el mismo
5 nombre: $or esto $ara re(erenciar las table lines se usa <=.
MOVE itab2 TO itab1. "Si las tablas no tienen header line
MOVE itab2[] TO itab1[]. "Si las tablas tienen header line.
itab1[] = itab2[].
5 Recordar 8ue silas tablas internas tiene 1eader line: la sentencia:
itab1 = itab2.
5 Solamente co$ia el 1eader line #cabecera%.
Pgina 40 de 92
Lectura de registros de tablas internas.
Sentencia escripcin
L))P ..
/8&L))P
Lectura de registros de tablas internas% recorriendo registro a registro.
R/A& Lectura de un registro particular de una tabla interna usando un
4ndice o una clave.
A7 .. /8&A7 /ventos internos e la sentencia L))P 2ue se activan cuando se
cumplen ciertas condiciones.
#+( #uma los campos num9ricos de los registros de una tabla interna
(dentro de un loop).
Lectura de un re,istro de la tabla interna usando RE)D.
/l !ormato bsico de la sentencia es0
READ TABLE <itab> [index n | with key f1 = v1 .. fn = vn].
La sentencia R/A& lee un registro de la tabla interna lo guarda en el 1eader line o un
rea de trabajo para su tratamiento.
5 Leer el cuarto re,istro de una tabla interna
READ TABLE itab INDEX 4.
5 Leer el re,istro 8ue cum$la determinada condici-n
READ TABLE itab WITH KEY col1 = val1 col2 = val2.
5 uardar la l7nea en un ;rea de traba>o
READ TABLE itab INDEX 2 INTO wa.
/n la variable del sistema #6C7AB$P 2ueda almacenado el 4ndice del registro le4do%
mientras 2ue #6C#+BR, se setea con valor F si se le un registro% o IJ F si no se pudo
leer ningAn registro.
4sos de .!!P33%/.!!P para recorrer una ta"la interna
5 !% Recorrido de la tabla com$leta. En cada $aso del LOOP se ,uarda el contenido del
re,istro en la 1eader line.
LOOP AT itab.
...
ENDLOOP.
5 "% Recorrido condicional de la tabla interna. Solamente se leen los re,istros 8ue
cum$lan
5 la condici-n es$eci(icada.
LOOP AT itab WHERE col1 = valor AND col2 > '9'.
...
ENDLOOP.
5 ?% Recorrer un inter'alo de re,istros de la tabla interna
Pgina 41 de 92
LOOP AT itab FROM 10 TO 25.
...
ENDLOOP.
/n cada paso del loop% #6C7AB$P contiene el 4ndice del registro 2ue se est tratando. #i la
tabla interna est vac4a% el !lujo de control no entra al L))P../8&L))P #6C#+BR, IJ
F.
La adicin $87) (LOOP )T itab INTO 3a) permite recorrer la guardando el contenido de
cada registro en un rea de trabajo (@A).
Procesamiento de ni0eles de control en ta"las internas
/l procesamiento de niveles de control se permite dentro de un L))P de una tabla
interna. /sto signi!ica 2ue pueden agruparse secuencias de entradas de la tabla interna
segAn el contenido de ciertos campos.
Los niveles de control se !orman ordenando la tabla interna primero por su primer
columna% luego por la segunda% etc.
,ada cambio de color en una columna activa un evento A7 dentro del L))P de la tabla.
/l siguiente ejemplo muestra los di!erentes eventos A7 2ue se activan al recorrer la tabla0
LOOP AT itab.
AT FIRST.
"Esto se ejecuta cuando se ley el primer registro
ENDAT.
AT NEW col.
"Esto se ejecuta cuando se ley un nuevo valor en COL
ENDAT.
"Lo que no est dentro de ningn AT se ejecuta para todos los registros
AT END OF col.
"Esto se ejecuta cuando se lee el ltimo registro en COL antes de un
"cambio de valor.
Pgina 42 de 92
ENDAT.
AT LAST.
"Esto se ejecuta cuando se lee el ltimo registro de la tabla int.
ENDAT.
ENDLOOP.
&entro de un A7../8&A7% el 1eader line de la tabla interna solamente se carga con el valor
de la l4nea actual para los registros 2ue estn a la i"2uierda del campo clave del grupo
2ue se est evaluando. Los campos a la i"2uierda del mismo se llenan con K3K.
4so de S45 para calcular totales y su"totales en un e0ento A63
&entro de un evento A7% puede usarse la sentencia #+( para calcular los totales de los
campos num9ricos de la tabla interna. Los registros 2ue se van a totali"ar dependen del
evento en el 2ue se inclua el #+(.
/j0
LOOP AT itab.
AT END OF col1.
SUM. "Totales por COL1
ENDAT.
...
AT LAST.
SUM. "Totales de la tabla interna
ENDAT.
ENDLOOP.
Los totales se almacenan en el 1eader line% en los campos de tipo num9rico.
(odi!icacin de registros de tablas internas.
Sentencia escripcin
()&$B6 (odi!ica el contenido de un registro de la tabla interna.
@R$7/ .. 7) (odi!ica el contenido de un registro de la tabla interna.
&/L/7/ Borra un registro de la tabla interna.
/j0
5 +so de &RITE..TO
WRITE 'Contenido nuevo' TO itab INDEX 3.
5 +so de MODI@A
MODIFY itab INDEX 3. "El valor de los campos modificados est en el header
line
MODIFY itab FROM wa INDEX 2. "WA tiene la estructura de ITAB y contiene los
valores
" modificados.
LOOP AT itab.
... "Modificar el header line
MODIFY itab.
ENDLOOP.
5 Borrar una l7nea de la tabla interna
DELETE itab INDEX 4.
Pgina 43 de 92
DELETE itab WHERE col1 > 20.
LOOP AT itab.
DELETE itab.
ENDLOOP.
5 Borrar las entradas du$licadas de itab
DELETE ADJACENT DUPLICATES FROM itab.
DELETE ADJACENT DUPLICATES FROM itab COMPARING col1.
DELETE ADJACENT DUPLICATES FROM itab COMPARING ALL FIELDS.
/n todos los casos% #6C#+BR, es F si la tabla interna pudo ser borrada/modi!icada. /n
caso contrario es IJ F.
!rdenamiento de registros de una ta"la interna
#e usa la sentencia #)R7.
SORT !ita*% Y*0 >$ .. >nZ. G O#1ena 'a ta*'a inte#na.
SORT itab. "Ordena por la clave estndar de ITAB en forma ascendente.
SORT itab BY col1 col2. "Ordena por COL1 y COL2 en forma ascendente.
* Se puede especificar si el criterio es ascendente o descendente:
SORT itab BY col2 ASCENDING col3 DESCENDING.
eterminacin de la cantidad de entradas de una ta"la interna
4ESCRI3E TA3LE !ita*% LI.ES !"a#%.
La variable :AR debe ser de tipo num9rico% en ella se almacena la cantidad de entradas
de la tabla interna $7AB.
Comparacin de ta"las internas
Las tablas internas pueden usarse como operandos en e'presiones lgicas (con
operadores /*% 8/% L7% L/% ;7% ;/). ,abe recordar 2ue si las tablas tienen 1eader line
1a 2ue usar ^_ para re!erirse a las table lines.
/l primer criterio al comparar tablas internas es la cantidad de entradas. +na tabla ser
maor 2ue otra si tiene ms entradas. #i las tablas son iguales en cantidad de entradas se
continAa la comparacin registro a registro. La comparacin para en cuanto se encuentra
un componente de la tabla 2ue es distinto entre las dos. /n ese caso devuelve el
resultado de la comparacin entre sos componentes.
Pgina 44 de 92
.III.2ensajes
Los mensajes se gestionan desde la transaccin #/D>. Los mensajes se agrupan por
clases de mensaje ((/##A;/ $&). La misma agrupa mensajes 2ue tengan la misma
unidad !uncional.
La clase de mensaje se de!ine luego en los programas ABAP mediante la sentencia
R/P)R7 (clusula (/##A;/C$&).
Recordar 2ue los mensajes se invocan con la sentencia (/##A;/.
8ro. (ensaje
7e'to mensaje
:ariables de mensaje
8o necesita te'to e'plicativo
#i se 2uiere asociar un te'to e'plicativo a un mensaje% se 1ace posicionandose en el
mismo con el botn
.
Pgina 45 de 92
.I!. Control e(terno del flujo de un programa
/l !lujo de un programa ABAP puede controlarse e'ternamente% a trav9s de e'entos. ,ada
sentencia de evento marca el inicio de un blo2ue de proceso.
+n blo2ue de proceso est compuesto por todas las sentencias entre dos palabras clave
de evento o entre una palabra clave de evento la sentencia B)R( (sentencia de inicio
de subrutina).
7oda sentencia escrita entre la sentencia R/P)R7 la primer palabra clave de evento o
una subrutina (sentencia B)R() es automticamente aQadida al evento por de!ecto0
#7AR7C)BC#/L/,7$)8.
#i el evento #7AR7C)BC#/L/,7$)8 e'iste% dic1as l4neas se insertan al principio del
mismo.
7oda sentencia entre una sentencia /8&B)R( (cierre de subrutina) una palabra clave
de evento% o entre una sentencia /8&B)R( el !inal del programa no !orman parte de
ningAn blo2ue de proceso% por lo tanto no se ejecutan.
%0entos principales
PA.ABBA C.AD% %D%/6!
$8$7$AL$VA7$)8 #e procesa antes de 2ue apare"ca la pantalla de
seleccin.
A7 #/L/,7$)8C
#,R//8
#e procesa mientras la pantalla de seleccin est activa.
#7AR7C)BC#/L/,7$)8 #e procesa despu9s de la pantalla de seleccin.
;/7 Punto de control entre un report una base de datos
lgica. #e ejecuta cuando se leeron registros de una
tabla de la B& lgica.
/8&C)BC#/L/,7$)8 #e activa luego de procesar todos los eventos ;/7
(cuando a se 1an le4do todos los registros de la B&
lgica).
/jemplos0
INITIALIZATION.
AT SELECTION-SCREEN.
* Si hay error habilitar solamente el parmetro indicado para cargar
datos
AT SELECTION-SCREEN ON parm.
* Para chequear los valores cargados en un select-options
AT SELECTION-SCREEN ON END OF s_bukrs.
* Si hay error habilitar solamente los campos radiobutton del grupo
RAD1 para cargar datos
AT SELECTION-SCREEN ON RADIOBUTTON GROUP rad1.
Pgina 46 de 92
* Si hay error habilitar solamente los campos que pertenecen al bloque
indicado
AT SELECTION-SCREEN ON BLOCK bloque-sel.
START-OF-SELECTION.
GET kna1.
* Obtener solamente determinados campos de la BD Lgica
GET kna1 FIELDS kunnr.
* Procesar el nodo de BD Lgica cuando ya se procesaron sus subordinados
GET kna1 LATE.
END-OF-SELECTION.
%0entos 7ue se procesan en la salida de datos
PALABRA ,LA:/ /:/87)
7)PC)BCPA;/ #e active cuando el programa procesa la primera sentencia de
escritura de una nueva pgina del in!orme.
/8&C)BCPA;/ #e active cuando el programa procesa la Altima sentencia de
escritura de cada pgina del in!orme.
/j0
TOP-OF-PAGE.
END-OF-PAGE.
%0entos 7ue se procesan despu8s de la salida principal de un programa
PALABRA ,LA:/ /:/87)
A7 +#/RC,)((A8& #e active cuando se selecciona una !uncin (menA% pulsador)% o se
introduce un comando en el campo de comandos.
A7 L$8/C#/L/,7$)8 #e activa cuando se selecciona una l4nea de la salida principal.
A7 PBnn #e activa cuando se presiona una tecla de !uncin (PB> .. PB?G).
A"andono de "lo7ues de proceso
#7)P0 /n un evento ;/7 termina el procesamiento de la B& lgica pasa al evento
/8&C)BC#/L/,7$)8.
/j0
...
START-OF-SELECTION.
WRITE: Prueba STOP.
GET KNA1.
WRITE KNA1-KUNNR.
STOP.
END-OF-SELECTION.
WRITE: / Fin del programa.
Pgina 47 de 92
/l programa imprime el nro. del primer cliente luego SBin de programaT.
/P$70 7ermina la ejecucin del evento.
/n un evento ;/7 termina el procesamiento de la B& lgica. 8o ejecuta el evento /8&C
)BC#/L/,7$)8.
/n #7AR7C)BC#/L/,7$)8 !inali"a la ejecucin del programa% mostrando la pantalla de
salida.
/j0
...
START-OF-SELECTION.
WRITE: Prueba STOP.
GET KNA1.
WRITE KNA1-KUNNR.
EXIT.
END-OF-SELECTION.
WRITE: / Fin del programa.
/l programa imprime solamente el nro. del primer cliente (no imprime KBin del
programaK).
,E/,N .e2$Clo,/0 /l evento continAa procesndose si se cumple la e'presin lgica
.e2$Clo,/.
/n caso contrario !inali"a la ejecucin del evento pero no el programa% sino 2ue se
continAa con el siguiente registro recuperado de la B& lgica.
/j0
...
GET bkpf.
CHECK bkpf-budat BETWEEN 20020301 AND 20020305.
R/`/,70 Binali"a la ejecucin del evento para el registro de la B& lgica 2ue se est
tratando% pasando al siguiente registro.
/j0
...
GET kna1.
IF kna1-kunnr ge 0001002000.
REJECT.
ENDIF.
Pgina 48 de 92
.!. Programas interacti1os
ABAP permite crear listados interactivos. +n listado interactivo ampl4a el t4pico listado
clsico con !uncionalidades tales como seleccionar l4neas% reali"ar entradas% introducir
comandos% etc.
Los programas 2ue generan listados interactivos trabajan con ciertos campos del sistema.
Los ms utili"ados son los siguientes.
:ariable #igni!icado
#6CL#$8&
andice del listado creado. /n el listado principal tiene valor F% se incrementa
en > por cada listado secundario. ,uando se abandona un listado secundario
para ir al anterior la variable disminue en >.
#6CL$#7$ 8ivel del listado desde el cual el evento (seleccin de l4nea) !ue activado. /n
general% #6CL$#7$ < #6CL#$8& b >.
#6CL$LL6 8ro. (absoluto) de la l4nea desde la cual !ue activado el evento.
#6CL$#/L ,ontenido de la l4nea seleccionada
#6C,+R)@ 8Amero de l4nea de la ventana en la cual se posicion el cursor al activar el
evento (empie"a en >).
#6C,+,)L 8Amero de columna en la ventana en la cual se activ el evento (empie"a en
>).
#6C,PA;/ 8ro. &e pgina en la cual se activ el evento.
#6C+,)(( ,digo de !uncin activado.
#6CPBN/6 #tatus actual de la inter!a" de usuario ((enu Painter).
Los eventos relacionados con los programas interactivos son los siguientes.
Palabra clave /vento
A7 +#/RC,)((A8& #e active cuando se selecciona una !uncin (menA% pulsador)% o se
introduce un comando en el campo de comandos.
A7 L$8/C#/L/,7$)8 #e activa cuando se selecciona una l4nea de la salida principal.
A7 PBnn #e activa cuando se presiona una tecla de !uncin (PB> .. PB?G).
7)PC)BCPA;/
&+R$8; L$8/C
#/L/,7$)8
/s como el 7)PC)BCPA;/ pero se activa cuando se imprimen los
listados secundarios.
/j0
REPORT ZTEST.
WRITE Listado principal.
AT LINE-SELECTION.
WRITE: Listado secundario, Nivel:, SY-LSIND.
AT USER-COMMAND.
CASE SY-UCOMM.
WHEN FUN1.
...
WHEN FUN2.
...
Pgina 49 de 92
ENDCASE.
AT PF5.
WRITE Puls F5.
AT PF12.
WRITE Puls F12.
TOP-OF-PAGE DURING LINE-SELECTION.
CASE SY-LSIND.
WHEN 1.
WRITE Listado secundario 1.
WHEN 2.
WRITE Listado secundario 2.
ENDCASE.
ULINE.
Las sentencias relacionadas con los programas interactivos son las siguientes0
#entencia escripcin
(/##A;/ Activa un mensaje
#/7 PBC#7A7+# &e!ine el cdigo de status% para 2ue el sistema active la
inter!a" de usuario correspondiente ((enu Painter).
#/7 7$7L/BAR &e!ine el t4tulo de pantalla.
#/7 +#/RC,)((A8& Activa un comando (por lo tanto activa el evento A7 +#/RC
,)((A8&).
@$8&)@ &e!ine una ventana con !ormato de pantalla.
E$&/ Retiene el contenido de un campo% cargndolo con el valor de
la l4nea seleccionada en cada A7 L$8/C#/L/,7$)8.
;/7 ,+R#)R )btiene el nombre del campo en el cual se encuentra
posicionado el cursor.
#/7 ,+R#)R Posiciona el cursor en un campo determinado de la pantalla.
&/#,R$B/ L$#7 )btiene los atributos de un listado.
#,R)LL L$#7 Reali"a un despla"amiento del listado.
R/A& L$8/ Lee una l4nea del listado.
R/A& ,+RR/87 L$8/ Lee la l4nea actual del listado.
()&$B6 L$8/ (odi!ica el contenido de una l4nea
()&$B6 ,+RR/87 L$8/ (odi!ica el contenido de la l4nea actual.
(/##A;/0 Los mensajes se guardan en la tabla T!DD se mantienen a trav9s de la
transaccin SEE!. Ea Z clases de mensajes0
A (Abend)
/ (/rror)
$ (in!o)
# (#tatus)
@ (@arning)
P (/'it)
/j0
Pgina 50 de 92
REPORT ZTEST MESSAGE-ID Z1.
MESSAGE E001.
REPORT ZTEST.
MESSAGE I002(Z1).
5 Inclu7r 'ariables del $ro,rama en el mensa>e
MESSAGE A003(Z1) WITH var1 var2.
#/7 PBC#7A7+#0 &e!ine el cdigo de status% para 2ue el sistema active la inter!a" de
usuario correspondiente. /ste cdigo de status debe 1aberse de!inido en el (enu Painter.
/j0
SET PF-STATUS TEST.
* Usar un PF-STATUS excluyendo funciones
SET PF-STATUS TEST EXCLUDING FC1.
SET PF-STATUS TEST EXCLUDING itab.
#/7 7$7L/BAR0 &e!ine el t4tulo de pantalla. /l mismo debe 1aberse creado desde (enu
Painter (Lista t4tulos).
/j0
SET TITLEBAR TST
SET TITLEBAR TS2 WITH var1.
#/7 +#/RC,)((A8&0 Activa un comando (por lo tanto activa tambi9n el evento A7
+#/RC,)((A8&).
/j0
SET USER-COMMAND COMD.
@$8&)@0 (uestra la lista secundaria como una ventana modal (se generan dos
ventanas% la de la lista principal la de la secundaria).
/j0
* Ventana que empieza en la columna 5 y lnea 7.
WINDOW STARTING AT 5 7.
* Ventana que empieza en la columna 1 y termina en la 79, y empieza en
la fila 15 hasta la * 23.
WINDOW STARTING AT 1 15
ENDING AT 79 23.
E$&/ !ield0 ,uando se imprime el listado en pantalla% al emplear la sentencia E$&/ sobre
un campo se retiene el contenido del campo para cada l4nea de salida. ,uando el usuario
selecciona una l4nea del listado% (ield se carga automticamente con el valor 2ue tiene en
la l4nea seleccionada.
/j0
GET kna1.
WRITE: kna1-kunnr, kna1-name1.
HIDE: kna1-kunnr, kna1-pstlz.
Pgina 51 de 92
...
AT LINE-SELECTION.
WRITE: Se seleccion el cliente, kna1-kunnr.
WRITE: El C.P. es:, kna1-pstlz.
;/7 ,+R#)R0 )btiene el nombre del campo en el cual se encuentra posicionado el
cursor.
/j0
DATA v_var(20) TYPE C.
...
AT LINE-SELECTION.
GET CURSOR FIELD v_var.
#/7 ,+R#)R0 Posiciona el cursor en un campo determinado de pantalla.
/j0
DATA v_var(5) TYPE C VALUE CAMPO.
DATA campo(3) TYPE C.
...
AT LINE-SELECTION.
SET CURSOR FIELD v_var LINE SY-LILLI.
&/#,R$B/ L$#70 )btiene los atributos de un listado.
/j0
5 Obtener la cantidad de l7neas del listado
DESCRIBE LIST NUMBER OF LINES lin.
5 Obtener la cantidad de $;,inas del listado
DESCRIBE LIST NUMBER OF PAGES n.

5 Obtener el nro. de $;,ina de la l7nea seleccionada
DESCRIBE LIST LINE lin PAGE pag.
#,R)LL L$#70 Reali"a un despla"amiento del listado. /l campo #6C#+BR, tiene valor F
cuando el despla"amiento se reali" con 9'ito.
/j0
* Ir a la primer pgina del listado
SCROLL LIST TO FIRST PAGE.
* Ir a la ltima pgina del listado
SCROLL LIST TO LAST PAGE.
* Ir a una pgina determinada del listado
SCROLL LIST TO PAGE pag.
* Mostrar el listado a partir de una columna determinada
SCROLL LIST TO COLUMN col.
* Avanzar en el listado (equivalente a PgDn)
SCROLL LIST FORWARD.
Pgina 52 de 92
* Retroceder en el listado (equivalente a PgUp)
SCROLL LIST BACKWARD.
* Mostrar el listado desde la columna 1 de la lista
SCROLL LIST LEFT.
* Hacer scroll hasta que est visible el borde derecho del listado
SCROLL LIST RIGHT.
R/A& L$8/0 Lee una l4nea del listado% 2uedando el contenido de la misma en #6CL$#/L.
/j0
AT LINE-SELECTION.
READ LINE SY-LILLI.
WRITE SY-LISEL.
R/A& ,+RR/87 L$8/0 Lee la l4nea actualdel listado (la seleccionada)% 2uedando el
contenido de la misma en #6CL$#/L.
/j0
AT LINE-SELECTION.
READ CURRENT LINE.
WRITE SY-LISEL.
()&$B6 L$8/0 (odi!ica el contenido de una l4nea del listado.
/j0
* Modificar el formato de una lnea
AT LINE-SELECTION.
MODIFY LINE SY-LILLI LINE FORMAT COLOR 6.
* Modificar el contenido de una lnea
WRITE: 'Valor:', var.
AT LINE-SELECTION.
* Se modifica el contenido de VAR.
ADD 1 TO var.
* Y se modifica el contenido de SY-LISEL
SY-LISEL(2) = '**'.
MODIFY LINE SY-LILLY FIELD VALUE var.
()&$B6 ,+R/87 L$8/0 (odi!ica el contenido de la l4nea del listado seleccionada
actualmente.
/j0
AT LINE-SELECTION.
MODIFY CURRENT LINE LNE FORMAT INVERSE.
Pgina 53 de 92
.!I. 2odulari3acin de un programa
Las t9cnicas de modulari"acin 2ue se presentarn permiten 2ue la lectura
mantenimiento de los programas sean ms !ciles.
5odulari9acin en declaracin de datos3
Sentencia escripcin
$8,L+&/ #7R+,7+R/ $nclue una estructura del diccionario de datos.
/j0
* Definir un registro con la estructura de KNA1
DATA BEGIN OF reg.
INCLUDE STRUCTURE kna1.
DATA END OF reg.
* Definir un registro con la estructura de KNA1 mas otros campos
DATA BEGIN OF struc,
var,
fecha LIKE SY-DATUM.
INCLUDE STRUCTURE kna1.
DATA END OF STRUC.
6ransacciones
Las siguientes sentencias permiten acceder a transacciones desde un programa ABAP.
Sentencia escripcin
,ALL 7RA8#A,7$)8 Llama a una transaccin sin abandonar el proceso actual.
L/A:/ 7) 7RA8#A,7$)8 Llama a una transaccin abandonando el proceso actual.
,ALL 7RA8#A,7$)80 Llama a una transaccin. ,uando 9sta termina de ejecutarse% el
control vuelve al programa 2ue reali" el call transaction.
* Forma bsica
CALL TRANSACTION FB02.
* Si quiero completar los datos de la pantalla inicial directamente
desde el programa, y
* saltear la primer pantalla de la transaccin invocada.
SET PARAMETER ID BUK FIELD 0100.
SET PARAMETER ID BLN FIELD v_belnr.
SET PARAMETER ID GJR FIELD 2002.
CALL TRANSACTION FB02 AND SKIP FIRST SCREEN.
* Definir desde el programa todo el pantalleo de la transaccin a
invocar
CALL TRANSACTION FB02 USING itab.
* En este ltimo caso se pueden agregar las siguientes opciones:
CALL TRANSACTION FB02 USING itab
MODE A
UPDATE S
Pgina 54 de 92
MESSAGES INTO msg_tab.
/stas opciones signi!ican0
MODE0 Borma de visuali"acin de la transaccin0
SAT0 :isible (de!ault).
S/T0 #olo errores.
S8T0 $nvisible.
+PD)TE0 (9todo de actuali"acin 2ue se va a usar.
SAT0 +pdate asincrnico (de!ault). /l proceso env4a el re2uest del update a
otro
proceso% no espera 2ue 9ste termine.
S#T0 +pdate sincrnico. /l proceso env4a el re2uest del update a otro
proceso% espera 2ue 9ste termine antes de continuar.
SLT0 +pdate local. /l mismo .or- process reali"a el update. )bviamente el
proceso
espera 2ue !inali"e el update.
MESS)ES INTO0 &evuelve los mensajes de la transaccin en una tabla interna%
2ue debe
de!inirse como B&,(#;,)LL.
L/A:/ 7) 7RA8#A,7$)80 Llama a una transaccin. La transaccin actual se !inali"a.
5 @orma b;sica
LEAVE TO TRANSACTION FB02.
5 Si 8uiero com$letar los datos de la $antalla inicial directamente desde el
$ro,rama: 6
5 saltear la $rimer $antalla de la transacci-n in'ocada.
SET PARAMETER ID BUK FIELD 0100.
SET PARAMETER ID BLN FIELD v_belnr.
SET PARAMETER ID GJR FIELD 2002.
LEAVE TO TRANSACTION FB02 AND SKIP FIRST SCREEN.
La variable del sistema #6C7,)&/ tiene en cada proceso el cdigo de transaccin actual.
Programas
Sentencia escripcin
$8,L+&/ $nclue cdigo de otro programa.
#+B($7 /jecuta un programa.
L/A:/ PR);RA( Abandona el programa actual.
$8,L+&/0 ;eneralmente se utili"a para separar la declaracin de datos% el proceso las
subrutinas de un programa. #upongamos 2ue de!inimos todos los datos de un programa
VR/P)R7 en un programa (tipo include) llamado V&A7)#. A su ve" creamos otro
programa VR+7$8A# (tambi9n de tipo include) donde guardamos todas las subrutinas
2ue usa el programa VR/P)R7. La estructura de VR/P)R7 2uedar4a as40
Pgina 55 de 92
REPORT zreport.
INCLUDE zdatos.
<proceso principal>
INCLUDE zrutinas.
#+B($70 /jecuta un programa desde al actual. #i no se especi!ica lo contrario% el control
pasa al programa submitido (no vuelve al llamador).
5 @orma b;sica
SUBMIT zreport.
5 Si se desea 8ue al terminar de e>ecutarse el $ro,rama submitido el control
SUBMIT zreport AND RETURN.
5 Submitir un re$orte cu6o nombre est; en una 'ariable VCPROCN)ME
SUBMIT (v_prog_name).
5 Submitir un re$orte $as;ndole los $ar;metros de selecci-n
SUBMIT zreport WITH bukrs = v_bukrs
WITH monat IN s_monat.
************************************************************************
* Si no quiero que el reporte submitido imprima su salida en pantalla,
* sino que la guarde
* en memoria para usarla luego desde el programa llamador.
DATA BEGIN OF itab OCCURS 0.
INCLUDE STRUCTURE ABAPLIST.
DATA END OF itab.
SUBMIT zreport EXPORTING LIST TO MEMORY AND RETURN.
* Para leer el listado generado...
CALL FUNCTION LIST_FROM_MEMORY
TABLES
LISTOBJECT = itab.
* Imprimirlo
CALL FUNCTION WRITE_LIST
TABLES
LISTOBJECT = itab.
************************************************************************
Submitir un programa como proceso de fondo
SUBMIT zreport USER sy-uname VIA JOB job_name NUMBER job_numb.
LEA5E PROGRAM: A*an1ona 'a eecuciIn 1e' )#o?#a(a actua'.
IF sy-uname <> USR01.
LEAVE PROGRAM.
ENDIF.
5dulos de funcin
#on subrutinas e'ternas especiales centrali"adas en una librer4a. /l sistema provee
numerosos mdulos de !uncin prede!inidos 2ue pueden ser utili"ados por los programas
ABAP. 7ambi9n el sistema permite al cliente crear sus propios mdulos de !uncin. La
Pgina 56 de 92
principal di!erencia entre un mdulo de !uncin una subrutina es la inter!a" de!inida para
pasar recibir datos en un mdulo de !uncin. 7ambi9n se soporta el manejo de
e'cepciones.
Sentencia escripcin
,ALL B+8,7$)8 Reali"a una llamada a un mdulo de !uncin
RA$#/ Activa una e'cepcin. #olamente puede ser usada dentro de la
de!inicin de un mdulo de !uncin.
/j0
* Invocar a una funcin. SY-SUBRC contiene el cdigo de retorno (si
termin OK es 0).
CALL FUNCTION 'STRING_SPLIT'
EXPORTING
DELIMITER = ':'
STRING = var_1
IMPORTING
HEAD = var_2
TAIL = var_3
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.
* Activar una excepcin desde un mdulo de funcin
FUNCTION Z_DIVIDE.
...
IF DIVISOR = 0.
RAISE DIVISOIN_ZERO.
ENDIF.
...
ENDFUNCTION.
Su"rutinas
Las subrutinas son mdulos de programa 2ue pueden ser llamados desde programas
ABAP. (ediante las subrutinas es posible escribir solamente una ve" partes de un
programa 2ue se ejecutan en !orma repetitiva.
Sentencia escripcin
B)R( .. /8&B)R( &e!inicin de una subrutina
P/RB)R( Llamada a una subrutina
B)R( .. /8&B)R(0 La sinta'is de la de!inicin de una subrutina es la siguiente0
FORM subrutina USING parm_1 .. parm_n
CHANGING par_1 .. par_n
TABLES itab STRUCTURE estructura_1
itabn STRUCTURE estructura_n.
+#$8;0 #e utili"an como parmetros de entrada a la subrutina.
,EA8;$8;0 #e utili"an como parmetros de salida de la subrutina.
7ABL/#0 #on tablas internas (pueden ser parmetros de entrada o salida).
/j0
* Llamado bsico a una subrutina
PERFORM f_rutina USING dato CHANGING retorno.
Pgina 57 de 92
...
FORM f_rutina USING p_dato
CHANGING p_retorno.
p_retorno = p_dato * 2.
ENDFORM.
* Llamado a subrutinas que estn en otros programas.
PERFORM f_rutina(zrutinas) USING dato CHANGING retono.
* Otra forma de llamar a una subrutina en otro programa
v_rutina = 'F_RUTINA'.
v_programa = 'ZRUTINAS'.
PERFORM (v_rutina) IN PROGRAM (v_programa)
USING dato
CHANGING retorno.
5acroinstrucciones
+na macroinstruccin es la de!inicin de una sentencia interna en un programa.
Sentencia escripcin
&/B$8/ .. /8&C)BC
&/B$8$7$)8
&e!inicin de una macroinstruccin. La ejecucin de la
misma se reali"a con el nombre de 9sta.
/j0
* Definir una macroinstruccin que realiza una operacin aritmtica
DATA resultado TYPE I.
...
DEFINE operacin.
resultado = &1 &2 &3.
WRITE resultado.
END-OF-DEFINITION.
...
* Invocar a la macroinstruccin
operacion 4 + 3.
operacion 2 ** 7.
#e pueden de!inir macros globales% 2ue pueden ser utili"adas por todos los programas.
Las mismas se llaman macros R(A,% se encuentran an la tabla 6B5AC.
Salida de procesos
Para abandonar el !lujo de alguno de los procesos anteriormente vistos se utili"an las
siguientes setencias.
Sentencia escripcin
L/A:/ Abandona el proceso iniciado por un ,ALL 7RA8#A,7$)8 o #+B($7 ..
A8& R/7+R8. /l control se devuelve donde se reali" la llamada.
/P$7 Abandona una subrutina o cual2uier unidad de modulari"acin en !orma
incondicional.
,E/,N Abandona una subrutina o cual2uier unidad de modulari"acin en !orma
condicional.
Pgina 58 de 92
/j0
* Salir del programa o mdulo de funcin si VALOR = 0.
IF valor = 0.
LEAVE.
ENDIF.
* Salir de una subrutina si VALOR = 0.
IF valor = 0.
EXIT.
ENDIF.
* Salida condicional de una subrutina.
PERFORM divide USING num1 num2 CHANGING result.
...
FORM divide USING p_1 p_2 CHANGING p_res.
CHECK p_2 NE 0.
p_res = p_1 / p_2.
ENDFORM.
Pgina 59 de 92
.!II. De#ugging de un programa
La 1erramienta de depuracin (debu,,er) permite ejecutar paso a paso una
transaccin o programa ABAP. #e puede ver el contenido de campos o tablas
internas% as4 como crear puntos de ruptura dinmicos (3atc1$oint).
La transaccin de depuracin se puede activar a trav9s de0
Las sentencias BR/AN BR/ANCP)$87.
$ntroduciendo 5/1= en el campo de comandos ()NO,)&/) de cual2uier programa o
transaccin pulsando $87R).
,on brea-Cpoints e'ternos al programa. &esde el editor ABAP% posicionando el
cursor en la l4nea en la 2ue se 2uiere !ijar a trav9s de 5+tilidades CJ Brea-points
CJ Bijar/borrar= (o directamente botn ).
La siguiente pantalla muestra la transaccin de depuracin0
Programa de
,ontrol.
Programa 2ue se est
ejecutando
8Amero de l4nea del programa
Pr'ima sentencia 2ue se va a
ejecutar
Brea-Cpoint !ijado
:er el contenido de una tabla
interna
:ariables ingresadas para ver
su contenido
:alor de campos del sistema
Pgina 60 de 92
(odi!icar valor de campo o variable
Pgina 61 de 92
Pantallas del de"ugger
/n la parte superior de la pantalla de la transaccin de depuracin se encuentran los
botones 2ue permiten pasar a las distintas pantallas del debugger.
7ABLA0 Permite visuali"ar el contenido de una tabla interna.
BR/ANP)$87#0 Lista de brea-points activos para el programa.
@A7,EP)$87#0 Lista de brea-points condicionales (3atc1$oints).
LLA(A&A#0 Resumen del !lujo de proceso (llamadas reali"adas% eventos% etc. 2ue se
ejecutaron 1asta llegar al punto de ejecucin actual).
R/#+(/80 Lista de los blo2ues de proceso del programa actual.
)P,$)8/#0 )pciones de depuracin.
:atc;points
Los .atc1points son brea-pionts opcionales. /l sistema evalAa si un campo determinado
cambi su valor% si se da esto% se produce un brea-point en la sentencia posterior al
cambio de valor.
Los .atc1points se crean con el botn .
Aparece la siguiente pantalla0
:ariable a evaluar
,omparador lgico (si no se
pone nada se activa cuando
cambia el valor).
:alor o variable contra el 2ue
se compara
%jecucin paso a paso en el de"ugger
Los siguientes botones permiten 1acer el seguimiento paso a paso del programa.
>) PA#) A PA#) (B\)0 /jecuta el programa paso a paso.
?) /`/,+7AR (BZ)0 /jecuta paso a paso% pero no entra a una subrutina% mdulo de
!uncin% etc.
3) R/7)R8AR (B[)0 :uelve al evento% subrutina% etc 2ue invoc al mdulo 2ue se est
ejecutando.
G) ,)87$8+AR (BU)0 #igue ejecutando 1asta el siguiente brea-point% .atc1point o 1asta
2ue termine el programa.
Sentencias de depuracin
Pgina 62 de 92
Sentencia escripcin
BR/AN Activa el debugging de un programa para un usuario
determinado.
BR/ANCP)$87 Activa el debugging de un programa.
/j0
* Activa el debugger para todo usuario
BREAK-POINT.
* Activa el debugger para el usuario USR01
BREAK usr01.
5emoria SAP y memoria ABAP
La memoria #AP (memoria global) est disponible para el usuario durante todo el ciclo de
vida de su sesin. /s decir 2ue sus contenidos se mantienen ms all de la duracin de
una transaccin.
/l contenido de la memoria ABAP permanece durante el transcurso de una sesin e'terna
(()&)) durante el ciclo de vida de un proceso (por ejemplo% transaccin). 8o es
compartida entre dos o ms modos.
%<S en memoria SAP
Sentencia escripcin
#/7 PARA(/7/R Actuali"a un parmetro de memoria.
;/7 PARA(/7/R Recupera un parmetro de memoria.
#/7 PARA(/7/R0 ;uarda un valor en la memoria #AP. ,ual2uier valor e'istente en la
memoria #AP con el mismo $& es sobreescrito. /l $& puede tener 1asta ?F caracteres.
/j0
v_sociedad = 0900.
SET PARAMETER ID BUK FIELD v_sociedad.
;/7 PARA(/7/R0 Recupera un valor de la memoria #AP. #i se pudo encontrar en la
memoria #AP un valor con el $& especi!icado% se setea SA-S+BRC F D. /n caso contrario
SY-SUBRC = 4.
/j0
GET PARAMETER ID BLN FIELD v_nro_doc.
%<S en memoria ABAP
Sentencia escripcin
/PP)R7 7) (/()R6 /'porta datos a la memoria ABAP.
$(P)R7 BR)( (/()R6 Recupera datos de la memoria ABAP.
BR// (/()R6 Libera la memoria ABAP.
/PP)R7 7) (/()R60 ;uarda datos en clusters de la memoria ABAP. /stos datos
pueden ser variables% estructuras% tablas internas% etc.). ,ada /PP)R7 7) (/()R6
sobreescribe la memoria ABAP para el $& indicado.
$(P)R7 BR)( (/()R60 $mporta objetos de datos de un cluster de datos de la memoria
ABAP. #i se pudo encontrar en la memoria ABAP un cluster de datos con el $&
especi!icado% se setea SA-S+BRC < F. /n caso contrario SA-S+BRC < G.
Pgina 63 de 92
/j0
DATA v_valor TYPE I.
DATA struct LIKE bkpf.
DATA itab LIKE kna1 OCCURS 0 WITH HEADER LINE.
DATA itab2 LIKE knb1 OCCURS 0 WITH HEADER LINE.
...
5 E2$ortar los datos a memoria
EXPORT v_valor struct itab TO MEMORY ID VALORES.
EXPORT itab_knb1 = itab2 TO MEMORY ID VALORES2.
SUBMIT ZTEST1.
5 En el $ro,rama GTEST! se leen los datos de la memoria )B)P.
DATA struct LIKE bkpf.
DATA v_valor TYPE I.
DATA itab3 LIKE kna1 OCCURS 0 WITH HEADER LINE.
IMPORT struct v_valor FROM MEMORY ID VALORES.
IMPORT itab = itab3 FROM MEMORY ID VALORES.
%<S en clusters de "ase de datos
+n cluster de datos es un conjunto de varios objetos de datos% 2ue pueden ser campos
elementales% estructuras o tablas internas
Adems del almacenamiento de clusters en memoria% se pueden almacenar en arc1ivos
especiales de la base de datos. Los clusters de base de datos% adems de tener $& como
los de memoria% estn divididos en reas.
Sentencia escripcin
/PP)R7 7) &A7ABA#/ /'porta un cluster a un arc1ivo de la base de datos.
$(P)R7 BR)( &A7ABA#/ $mporta un cluster de un arc1ivo de la base de datos.
&/L/7/ BR)( &A7ABA#/ Borra un cluster de un arc1ivo de la base de datos.
Para todos los casos (lectura% escritura% insercin) se setea #6C#+BR, al igual 2ue la
lectura/escritura de clusters en memoria.
/j0
* En los ejemplos siguientes vamos a trabajar con el cluster INDX. Cada cluster
tiene una tabla
* asociada con el mismo nombre (en este caso INDX) que guarda datos del cluster,
* pero no permite ver los valores almacenados en el mismo.
DATA: BEGIN OF tabla OCCURS 0,
col1 TYPE I,
col2 TYPE I,
END OF tabla.
...
* Exportar datos al archivo de base de datos. Se exporta al cluster INDX, y al
rea HK
EXPORT tabla TO DATABASE indx(hk) ID Tabla.
...
* Importar datos del cluster de base de datos.
IMPORT tabla FROM DATABASE indx(hk) ID Tabla.
* Importar datos del cluster de nmina (HR).
DATA: rt LIKE pc207 OCCURS 0 WITH HEADER LINE.
Pgina 64 de 92
rx_key LIKE pc200.
rx_key-pernr = pernr-pernr.
rx_key-seqno = rgdir-seqnr.
IMPORT rt FROM DATABASE pcl2(ar) ID rx_key.
* Borrar datos de un cluster de base de datos
DELETE FROM DATABASE indx(hk) ID Tabla.
* Acceso a un cluster a travs de la tabla de base de datos
TABLES indx.
SELECT * FROM indx WHERE relid = HK
AND usera = SY-UNAME.
DELETE FROM DATABASE indx(hk) ID indx-srtfd.
IF SY-SUBRC = 0.
WRITE: / Borrado exitoso.
ENDIF.
ENDSELECT.
Pgina 65 de 92
%<S en arc;i0os externos
#AP permite trabajar con arc1ivos secuenciales locali"ados tanto en el servidor de
aplicacin como en el servidor de presentacin.
#ervidor de aplicacin
Las sentencias 2ue permiten trabajar con arc1ivos en el servidor de aplicacin son0
Sentencia escripcin
)P/8 &A7A#/7 Abre un arc1ivo del servidor de aplicacin.
7RA8#B/R 7rans!iere un registro al arc1ivo del servidor de aplicacin.
R/A& &A7A#/7 Lee un registro del arc1ivo del servidor de aplicacin.
&/L/7/ &A7A#/7 Borra un arc1ivo del servidor de aplicacin.
,L)#/ &A7A#/7 ,ierra un arc1ivo del servidor de aplicacin.
)P/8 &A7A#/70 Las siguientes opciones se utili"an para especi!icar la !orma en 2ue se
va a abrir el arc1ivo0
B)R $8P+70 Abre el arc1ivo para lectura
B)R )+7P+70 Abre el arc1ivo para escritura (si ten4a algAn contenido lo sobreescibe). #i
el arc1ivo no e'iste lo crea.
B)R APP/8&$8;0 Abre el arc1ivo para escritura (si ten4a algAn contenido% lo mantiene
agrega lo nuevo al !inal). #i el arc1ivo no e'iste lo crea.
$8 7/P7 ()&/0 Los contenidos del arc1ivo se estructuran en l4neas. ,ada R/A&
&A7A#/7 o 7RA8#B/R leen o escriben una l4nea del arc1ivo.
$8 B$8AR6 ()&/0 Los contenidos del arc1ivo no se estructuran en l4neas.
/l resultado de )P/8 &A7A#/7 puede comprobarse veri!icando el valor de #6C#+BR,
(si es F signi!ica 2ue el arc1ivo se abri correctamente).
/j0
* Escritura de un archivo de texto
PARAMETERS p_file(80) TYPE C.
DATA registro LIKE bkpf.
...
OPEN DATASET p_file FOR OUTPUT IN TEXT MODE. "abrir el archivo
IF SY-SUBRC = 0.
...
TRANSFER registro TO p_file.
* graba un registro (lnea) en el archivo
...
CLOSE DATASET p_file. "cerrar el archivo
ENDIF.
* Lectura del archivo de texto
OPEN DATASET p_file FOR INPUT IN TEXT MODE. "abrir el archivo
IF SY-SUBRC = 0.
DO.
READ DATASET p_file INTO registro. "Leer un registro
IF SY-SUBRC <> 0.
EXIT. "Salir si ya no hay registros en el archivo
ENDIF.
ENDDO.
CLOSE DATASET p_file. "cerrar el archivo
Pgina 66 de 92
ENDIF.
* Borrar un archivo
DELETE DATASET p_file.
Ser0idor de presentacin
Para trabajar con arc1ivos de la P, local% el sistema no o!rece sentencias ABAP sino una
serie de mdulos de !uncin.
5dulo de funcin escripcin
&)@8L)A& ,rea un arc1ivo en el servidor de presentacin% ,)8 dilogo con el
usuario.
@#O&)@8L)A& ,rea un arc1ivo en el servidor de presentacin% #$8 dilogo con el
usuario.
+PL)A& Lee un arc1ivo del servidor de presentacin% ,)8 dilogo con el
usuario. /l contenido del arc1ivo se guarda en una tabla interna.
@#O+PL)A& Lee un arc1ivo del servidor de presentacin% #$8 dilogo con el
usuario. /l contenido del arc1ivo se guarda en una tabla interna.
/j0
* Bajar el contenido de la tabla interna ITAB a un archivo de la PC.
CALL FUNCTION 'DOWNLOAD'
EXPORTING
FILENAME = 'c:\temp\arch.txt'
FILETYPE = 'ASC'
TABLES
DATA_TAB = itab
EXCEPTIONS
INVALID_FILESIZE = 1
INVALID_TABLE_WIDTH = 2
INVALID_TYPE = 3.
IF SY-SUBRC <> 0.
WRITE 'EROR'.
ENDIF.
* Levantar un archivo de la PC en la tabla interna ITAB
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = 'c:\temp\arch.txt'
FILETYPE = 'ASC'
TABLES
DATA_TAB = itab
EXCEPTIONS
CONVERSION_ERROR = 1
FILE_OPEN_ERROR = 2
FILE_READ_ERROR = 3
INVALID_TABLE_WIDTH = 4
INVALID_TYPE = 5.
IF SY-SUBRC <> 0.
WRITE 'EROR'.
ENDIF.
LOOP AT itab.
...
ENDLOOP.
Pgina 67 de 92
.!III. C5e6ueos de *utori3acin
/l sistema de sutori"aciones de R/3 est !ormado por los siguientes elementos0
,lase de )bjeto0 Agrupan objetos de autori"acin !uncionalmente relacionados. /j0
La clase de objeto MMCE agrupa los objetos de autori"acin de compras ((().
)bjeto0 +n objeto de autori"acin es una de!inicin de autori"acin compuesta por
campos de autori"acin. /j0 el objeto PCORIN veri!ica varios campos de
autori"acin para el acceso a los datos de los empleados.
,ampo0 +n campo de autori"acin es el elemento m4nimo de autori"acin. /s un
concepto sobre el 2ue se va a evaluar una autori"acin. /j0 /l campo de
autori"acin &ER*S es el 2ue contiene el valor de uno o ms centros en ((.
Autori"acin0 /s una instancia de un objeto de autori"acin. 7iene valores
particulares para cada uno de los campos de autori"acin. /j0 La autori"acin T-
D!HHED!IDD es una instancia del objeto V@/RN# para los centros F>>F% F>?F
F>DF.
Per!il0 +n per!il est compuesto por autori"aciones de uno o ms objetos de
autori"acin. A un usuario se le asignan una serie de per!iles de autori"acin. /j0 el
per!il T-D!HHED!? contiene autori"aciones de compras ((().
Los objetos de autori"acin pueden visuali"arse desde la transaccin #+?> (entrando por
clase de objeto) o bien pueden buscarse por0
0erramientas -/ esti-n -/ )ctualiJaci-n de usuarios -/ Sistemas de in(ormaci-n -/
Ob>etos de autoriJaci-n -/ Ob>etos de autoriJaci-n se,Kn criterios de selecci-n
com$le>os.
&entro de un programa ABAP pueden controlarse las autori"aciones del sistema% para
esto se utili"a la sentencia )+T0ORITA-C0EC*.
/j0
authority-check object 'P_ORGIN'
id 'INFTY' dummy
i1 6S-3TY6 1u((0
i1 6A-T<C6 >ie'1 6M6
i1 6PERSA6 >ie'1 "CTe#Fs
i1 6PERSG6 1u((0
i1 6PERS,6 1u((0
i1 654S,$6 1u((0.
if SY_SUBRC <> 0.
Write No tiene autorizacion.
endif.
/ste ejemplo c1e2uea 2ue el usuario tenga autori"acin para el objeto SPO)R;$8T% campo
SA+7E,T (valor S(T) el campo SP/R#AT (valor contenido en :O@/RN#). 8o valida
ninguno de los dems campos del objeto (por eso les asigna &+((6).
Los objetos de autori"acin devuelven #6C#+BR, < F si el usuario est autori"ado. /n
caso contrario devuelven #6C#+BR, IJ F.
Pgina 68 de 92
.I.. Procesos Bac8ground
,on los mdulos de !uncin 2ue el sistema proporciona para los procesos en bac-ground%
se pueden plani!icar gestionar jobs desde un programa ABAP.
Bsicamente 1a dos m9todos para lan"ar procesos bac-ground desde un programa0
58todo ")sico
/st compuesto por dos mdulos de !uncin 2ue simpli!ican la generacin la gestin de
los procesos bac-ground0
(dulo de !uncin &escripcin
BPO`)B:AR$A87O#,E/&+L/ Plani!ica un job de un solo paso.
BPO`)B:AR$A87O):/R:$/@ Presenta un listado de jobs en el 2ue se pueden ejecutar
!unciones de gestin.
/j0
AP'ani>ica# un o* con no(*#e 6MICNO36, Oue eecuta e' )#o?#a(a
6WPROGRAMA6
AE' (I1u'o 1e >unciIn )#esenta una 'ista 1e "a#iantes a' usua#io.
E' (is(o 1e*e#J se'ecciona# una.
CALL FUNCTION 'BP_JOBVARIANT_SCHEDULE'
EXPORTING
TITLE_NAME = 'Planificacion Job'
JOB_NAME = 'MI_JOB'
PROG_NAME = 'ZPROGRAMA'
ECEPTIONS
NO_SUCH_REPORT = 1.
A Most#a# 'ista1o con 'os o*s con no(*#e 6MICNO36 Oue
A )'ani>iOuen e' )#o?#a(a 6WPROGRAMA6
CALL FUNCTION 'BP_JOBVARIANT_OVERVIEW'
EXPORTING
TITLE_NAME = 'Planificacion Job'
JOB_NAME = 'MI_JOB'
PROG_NAME = 'ZPROGRAMA'
ECEPTIONS
NO_SUCH_REPORT = 1.
Restricciones de este m9todo0
>) /l job tendr un solo paso.
?) /l mdulo de !uncin usa valores por de!ecto para todas las opciones de
procesamiento.
3) #e restringen las opciones de plani!icacin de inicio del job.
G) Las opciones se piden interactivamente% al usuario.
Pgina 69 de 92
58todo manual
Para generar procesos de !ondo paso a paso se utili"an los siguientes mdulos de
!uncin0
5dulo de funcin escripcin
`)BO)P/8 ,rea un job
`)BO#+B($7 AQade pasos a un job
`)BO,L)#/ Plani!ica el job previamente de!inido
/j0
* Crear un job llamado 'MI_JOB'
CALL FUNCTION 'JOB_OPEN'
EXPORTING
JOBNAME = 'MI_JOB'
IMPORTING
JOBCOUNT = v_id
EXCEPTIONS
CANT_CREATE_JOB = 01
INVALID_JOB_DATA = 02
JOBNAME_MISSING = 03
OTHERS = 99.
IF SY-SUBRC <> 0.
* Procesar error
ENDIF.
* Aadir un paso a un job, dicho paso ejecuta el programa 'ZPROGRAMA',
con la variante
* 'VARIANTE_1'
CALL FUNCTION 'JOB_SUBMIT'
EXPORTING
AUTHCKNAM = SY-UNAME " Usuario
JOBCOUNT = v_id "Valor devuelto por JOB_OPEN
JOBNAME = 'MI_JOB' "Valor pasado a JOB_OPEN
REPORT = 'ZPROGRAMA' " Reporte a ejecutar
VARIANT = 'VARIANTE_1' " Variante a usar
PRIPARAMS = USER_PRINT_PARAMS " Opciones de impresin
EXCEPTIONS
BAD_PRIPARAMS = 01
INVALID_JOBDATA = 02
JOBNAME_MISSING = 03
JOB_NOTEX = 04
JOB_SUBMIT_FAILED = 05
LOCK_FAILED = 06
PROGRAM_MISSING = 07
PROG_ABAP_AND_EXTPG_SET = 08
OTHERS = 99.
IF SY-SUBRC <> 0.
* Procesar error
ENDIF.
Pgina 70 de 92
$(P)R7A87/0 Recordar 2ue a un job creado con `)BO)P/8 se le puede agregar un
paso 1aciendo #+B($7..:$AC`)B de un programa.
* Una vez que se agregaron todos los pasos al job, se llama a la funcin
JOB_CLOSE, que lo
* cierra y planifica.
* INICIO INMEDIATO:
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
JOBCOUNT = v_id " Nro. de job
JOBNAME = 'MI_JOB' " nombre.
STRTIMMED = 'X' " Inicio inmediato (si el usr. tiene autorizacin)
IMPORTING
JOB_WAS_RELEASED = JOB_RELEASED " Si se liber el job (adems de
" planificarse)
EXCEPTIONS
INVALID_STARTDATE = 01
JOBNAME_MISSING = 02
JOB_CLOSE_FAILED = 03
JOB_NOSTEPS = 04
JOB_NOTEX = 05
LOCK_FAILED = 06
OTHERS = 99.
IF SY-SUBRC <> 0.
* Procesar error
ENDIF.
* INICIO PLANIFICADO
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
JOBCOUNT = v_id " nro job
JOBNAME = 'MI_JOB' " nombre.
SDLSTRTDT = STARTDATE " Fecha inicio
SDLSTRTTM = STARTTIME " Hora inicio
LASTSTRTDT = LASTSTARTDATE " Opcional: no iniciar despus de...
LASTSTRTTM = LASTSTARTTIME " Opcional: no iniciar despus de...
PRDMONTHS = '1' " Indicador periodicidad: mensual
PRDWEEKS = '1' " semanal
PRDDAYS = '1' " diario
PRDHOURS = '1' " hora
PRDMINS = '1' " Minuto
STARTDATE_RESTRICTION = BTC_DONT_PROCESS_ON_HOLIDAY
" No procesar si no es da hbil. Otras opciones disponibles:
" BTC_PROCESS_BEFORE_HOLIDAY
" BTC_PROCESS_AFTER_HOLIDAY
CALENDAR_ID = '01' " ID del calendario R/3 (opcional si ni se
"especific lo anterior)
TARGETSYSTEM = 'hs0011' " Opcional: nombre del host
IMPORTING
Pgina 71 de 92
JOB_WAS_RELEASED = JOB_RELEASED " Si se liber el job (adems de
" planificarse)
EXCEPTIONS
INVALID_STARTDATE = 01
JOBNAME_MISSING = 02
JOB_CLOSE_FAILED = 03
JOB_NOSTEPS = 04
JOB_NOTEX = 05
LOCK_FAILED = 06
OTHERS = 99.
IF SY-SUBRC <> 0.
* Procesar error
ENDIF.
Pgina 72 de 92
... Procesos Batc5 Input
/l concepto de Batc1 $nput consiste en la actuali"acin de la base de datos a trav9s de
las transacciones del sistema en !orma automtica. Los m9todos Batc1 $nput o!recen las
siguientes ventajas0
#in intervencin0 8o se re2uiere intervencin manual durante la trans!erencia de
datos.
$ntegridad de datos0 +n batc1 input introduce los datos al sistema #AP de la misma
!orma en 2ue lo 1ar4a un usuario% introduciendo los datos manualmente% a trav9s de
las transacciones #AP. 7odos los controles c1e2ueos de la transaccin tambi9n
estn presentes en la trans!erencia de datos con Batc1 $nput.
Para reali"ar un batc1 input el sistema o!rece los siguientes m9todos0
(9todo 5Batc1 $nput clsico=0 +n programa ABAP lee los datos e'ternos genera
una sesin (juego de datos) de Batc1 $nput. Luego de generarla 1a 2ue procesarla
desde la transaccin #(3\ (#istema CJ #ervicios CJ Batc1 $nput CJ ,arpetas).
(9todo 5,all transaction using=0 /ste m9todo utili"a la sentencia 5,all transaction=
para ejecutar la transaccin. 8o genera juego de datos% las transacciones son
ejecutadas online.
7odos los m9todos Batc1 $nput se apoan en tablas internas con la estructura B&,&A7A.
/structura B&,&A7A
,A(P) 7$P) L)8;$7+& #$;8$B$,A&)
PB!FBA5 CGAB # /om"re del module+pool CprogramaA de la
transaccin3
H/PB! /45C ' /om"re del dynpro de la transaccin3
H/B%F>/ CGAB & >nicio de datos de un dynpro3
I/A5 CGAB ,5 /om"re de campo3
IDA. CGAB #2 Dalor de campo3
/sta estructura se utili"a de la siguiente manera0
$denti!icacin del dnpro0 Lo primero 2ue se 1ace es identi!icar el dnpro sobre el cual
vamos a cargar datos. Para esto se inserta un registro en la tabla B&,&A7A con la
in!ormacin en los campos PR);RA( (nombre de programa)% &68PR) (nAmero de
dnpro) &68B/;$8 < SPT (comien"a una nueva dnpro). Los campos B8A( B:AL
deben estar en blanco.
/j0
CLEAR TABLA.
TABLA-PROGRAM = SAPMS38M.
TABLA-DYNPRO = 0100.
TABLA-DYNBEGIN = X.
APPEND TABLA.
$ntroduccin de valores de un campo0 &espu9s de registrar los valores del dnpro% se
especi!ican los valores de los campos 2ue se 2uieren cargar en pantalla% generando
entradas en la tabla B&,&A7A con los campos B8A( (nombre de campo) B:AL (valor).
Pgina 73 de 92
/j0
CLEAR TABLA.
TABLA-FNAM = BKPF-BLDAT.
TABLA-FVAL = sy-datum.
APPEND TABLA.
/jecucin de una !uncin0 Para ejecutar una !uncin en una transaccin 1a 2ue introducir
el cdigo de !uncin en el campo de comandos. Para esto se genera una entrada en la
tabla B&,&A7A con el campo B8A( con valor SB&,O)N,)&/T (para indicar 2ue es un
comando) el campo B:AL con el cdigo de comando a ejecutar.
Pgina 74 de 92
/j0
CLEAR TABLA.
TABLA-FNAM = BDC_OKCODE.
TABLA-FVAL = /11.
APPEND TABLA.
,ampos especiales (bucles)0 Para poder especi!icar un campo en un bucle (por ejemplo
en una grilla con datos) 1a 2ue especi!icar en B8A( el nombre de campo seguido del
sub4ndice entre par9ntesis.
/j0
CLEAR TABLA.
TABLA-FNAM = Q0391-LGART(04).
TABLA-FVAL = 7B01.
APPEND TABLA.
Posicionamiento del cursor0 Para posicionar el cursor en un campo determinado% se
genera una entrada en B&,7AB con B8A( < SB&,O,+R#)RT B:AL con el nombre de
campo donde se desea situar el cursor.
/j0
CLEAR TABLA.
TABLA-FNAM = BDC_CURSOR.
TABLA-FVAL = BKPF-BLDAT.
APPEND TABLA.
58todo =Batc; >nput Cl)sico?
/ste m9todo crea sesiones (juegos de datos) de batc1 input. Para ello se utili"an los
siguientes mdulos de !uncin0
(c&+L) &/ B+8,$c8 #$;8$B$,A&)
BC_!P%/_FB!4P Crear un juego de datos de Batc; >nput
BC_>/S%B6 >nsertar una transaccin en el juego de datos de Batc;
>nput3 6oda la informacin correspondiente a la ejecucin
de la transaccin estar) contenida en una ta"la interna
con estructura BCA6A3
BC_C.!S%_FB!4P Cerrar un juego de datos de Batc; >nput3
%j:
< Crear un juego de datos Batc5 Input
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT " Mandante
GROUP = 'FACTURAS' " Nombre J.Datos
HOLDDATE = v_fecha " Fecha de bloqueo (opcional)
KEEP = 'X' " Mantener J.datos procesado (opcional)
USER = sy-uname " Usuario
propietario de sesin
EXCEPTIONS
CLIENT_INVALID = 1
DESTINATION_INVALID = 2
GROUP_INVALID = 3
GROUP_IS_LOCKED = 4
HOLDDATE_INVALID = 5
INTERNAL_ERROR = 6
Pgina 75 de 92
QUEUE_ERROR = 7
RUNNING = 8
SYSTEM_LOCK_ERROR = 9
USER_INVALID = 10
OTHERS = 11
.
* Ahora hay que llenar la tabla interna.
REFRESH tabla.
* Primer pantalla
clear tabla.
tabla-program = SAPMS38M.
tabla-dynpro = 0100.
tabla-dynbegin = X.
append tabla.
* Campo de la primer pantalla
clear tabla.
tabla-fnam = RF02K-EKORG.
tabla-fval = v_ekorg. `Podra ir un literal
append tabla.
* Comando de la primer pantalla
clear tabla.
tabla-fnam = BDC_OKCODE.
tabla-fval = P+.
append tabla.
* Siguiente pantalla
clear tabla.
tabla-program = SAPMS38M.
tabla-dynpro = 0200.
tabla-dynbegin = X.
append tabla.
* Comando de la segunda pantalla
clear tabla.
tabla-fnam = BDC_OKCODE.
tabla-fval = /11.
append tabla.
* Insertar una transaccin en el juego de datos
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = 'FB01' `Transaccin
TABLES
DYNPROTAB = tabla `Tabla interna (BDCDATA)
EXCEPTIONS
INTERNAL_ERROR = 1
NOT_OPEN = 2
QUEUE_ERROR = 3
TCODE_INVALID = 4
PRINTING_INVALID = 5
POSTING_INVALID = 6
OTHERS = 7
.
Pgina 76 de 92
* Cerrar in juego de datos Batch Input
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
NOT_OPEN = 1
QUEUE_ERROR = 2
OTHERS = 3.
(9todo 5,ALL 7RA8#A,7$)8 using=
/ste m9todo es el visto en la sentencia ,ALL 7RA8#A,7$)8. /n +#$8; se le pasa la
tabla interna con estructura B&,&A7A (la misma 2ue en el 5batc1 input clsico=).
/j0
CALL TRANSACTION SU01
USING TABLA `Tabla con formato BDCDATA
MODE N `No visible
MESSAGES INTO msgtab. `Tabla interna con los mensajes
Programas est)ndar de Batc; >nput
/'isten transacciones estndar 2ue son bastante complejas. Reali"ar un batc1 input con
ellas supondr4a un gran es!uer"o. Por ejemplo% la transaccin BBF> permite contabili"ar
documentos de !inan"as (B$). Las dnpros 2ue se presentan en cada caso son en !uncin
de los indicadores de operacin cuentas de maor utili"adas.
Para solucionar este problema #AP provee programas estndar de Batc1 $nput. /stos
programas leen los datos de un arc1ivo secuencial en un !ormato especial% de manera
2ue lo 2ue 2ueda por 1acer es un programa 2ue lea los datos a levantar% los grabe en un
arc1ivo con este !ormato especial ejecutar el programa estndar.
/j0
RFBIBL00 (crea documentos FI),
RFBIDE00 (Crea y modifica deudores)
RMMMBIM0 (Crea/modifica materiales)
%jecutar un juego de datos desde el programa ABAP
+na ve" 2ue generamos un juego de datos desde el programa ABAP% 9ste 2ueda listo
para procesar manualmente desde la transaccin #(3\. #i se desea 2ue el programa a
ejecute el juego de datos% puede 1acerse 1aciendo un #+B($7 del programa
R#B&,#+B% 2ue procesa juegos de datos en bac-ground.
/j0
SUBMIT RSBDCSUB
WITH MAPPE EQ v_sesion `Nombre j. datos
WITH VON EQ sy-datum `Fecha de creacin
WITH Z_VERARB EQ 'X' `Status: NUEVO
WITH FEHLER EQ ' ' `Status: ERRONEO
AND RETURN.
Pgina 77 de 92
6ransaccin gra"adora de "atc;+input
(ediante la transaccin #E&B se puede grabar una sesin Batc1 $nput% de manera de
poder ver los nombres de campos dnpros 2ue intervienen. /sa grabacin se puede
crear un programa o un mdulo de !uncin para procesar el Batc1 $nput de la !orma en la
2ue se grab en la grabadora e Batc1 $nput.
Para iniciar una grabacin nueva0
;rabacin nueva
,rear un programa en base a una
grabacin
/jercicio0
,rear un programa 2ue genere un batc1 input para la transaccin
SB,O;L)BALO#BL;EO/&$7T. La misma modi!ica el precio de los vuelos. Leer el arc1ivo
del servidor de aplicacin.
Los campos a completar son0
Pantalla >0
SFLIG<T-CARRI4 &co()a[Pa aR#ea+
SFLIG<T-CO..I4 &n#o 1e "ue'o+
SFLIG<T-FL4ATE &>ecBa 1e "ue'o+
Ente# &CI1i?o 1e co(an1o LD+.
Pantalla ?0
SFLIG<T-PRICE &)#ecio 1e' "ue'o+
G#a*a# &CI1i?o 1e co(an1o SA5E+.
Pgina 78 de 92
..I. 9ser '(its
Las +ser /'its son !unciones 2ue #AP proporciona dentro de sus transacciones estndar%
2ue permiten ampliar la !uncionalidad de dic1as transacciones sin modi!icar los
programas estndar de #AP.
/sto es lo 2ue en #AP se denominan )m$liaciones% por2ue se ampl4a la !uncionalidad del
sistema.
La gran ventaja es 2ue se tiene la seguridad de 2ue las ampliaciones al estndar no se
van a sobreescribir por la aplicacin de parc1es o upgrades al sistema.
Cmo s8 si una transaccin est)ndar tiene asociada un 4ser %xit@
Ea varias !ormas de buscar un user e'it en la transaccin estndar0
Buscar en el cdigo del programa la sentencia0
C)LL C+STOMER-@+NCTION L222L.
&ic1a sentencia es la 2ue invoca la user e'it si est activa.
Buscar por clase de desarrollo0 en la transaccin ,()&% entrar por menA
+tilidades -/ )m$liaciones S)P. $ngresar la clase dedesarrollo de la transaccin
estndar ejecutar.
Buscar por jerar2u4a de aplicaciones0 acceder a 0erramientas -/ &or4benc1
)B)P-/ Resumen-/
Merar8u7a de )$licaciones. Pararse en la rama correspondiente al mdulo al 2ue
pertenece la transaccin estndar (por ejemplo0 L) bLog4stica generalC)
marcarla. #eleccionar el botn W#istema de in!ormacinW en el rbol de
in!ormes 2ue aparece . &esplegar la rama Ent. -/ T9cnicas E2it -/ E2its de
Cliente -/ )m$liaciones ejecutar.
+na ve" encontrada la +ser /'it adecuada% 1a 2ue codi!icarla0
Acceder a la transaccin ,()&% desde a2u4 1a 2ue crear un Pro6ecto.

Pgina 79 de 92
+na ve" creado seleccionar el radiobutton 5Asignacin ampliaciones cliente= pulsar
5(odi!icar=.
$ngresar el nombre del /'it 2ue se va a usar% pulsar 5,omponentes=.
Eaciendo doble clic- en el nombre del mdulo de !uncin% nos lleva al mdulo de !uncin
2ue contiene un $nclude. &entro de ese include debemos ingresar el cdigo de nuestra
user e'it. Luego de esto EA6 *+/ A,7$:AR /L PR)6/,7) para 2ue !uncione el /P$7.
Pgina 80 de 92
..II.:ield '(its
Los Bield /'its son validaciones particulares 2ue se aplican a un campo de pantalla
determinado. A di!erencia de las user e'its% puede crearse un !ield e'it 2ue actAe sobre
cual2uier campo de cual2uier transaccin de dilogo% pero actAa solamente sobre el valor
de ese campo% es decir 2ue en el momento de ejecutarlo desconoce el valor de el resto de
los campos ingresados en la transaccin.
Los !ield e'its se de!inen sobre /L/(/87)# &/ &A7)#% nosotros decimos en 2ue
programa/pantalla se va a activar.
Para crear/modi!icar/visuali"ar un !ield e'it% debe ejecutarse el porgrama R#()&PRB.
Al ejecutarlo (sin indicar parmetros de seleccin) vemos la siguiente pantalla0
Para crear un !ield e'it% 1a 2ue ejecutar la opcin de menA E2it Cam$o -/ Crear.
Pgina 81 de 92
,argar el elemento de datos sobre el cual se 2uiere crear el !ield e'it% pulsar =,ontinuar=.
8os lleva a la transaccin #/3[% donde nos propone el nombre del mdulo de !uncin 2ue
se va a crear. /n dic1o mdulo de !uncin se va a codi!icar el !ield e'it.
/ste mdulo de !uncin tiene un parmetro $8P+7 de entrada un parmetro )+7P+7
de salida. Lo m4mimo 2ue debe tener esta !uncin es )+7P+7 < $8P+7% para 2ue el valor
ingresado se siga viendo en pantalla luego de ejecutarse.
;rabar activar la !uncin. :olver a la pantalla de !ield e'its.
+na ve" creado el !ield e'it% 1a 2ue asignarlo al programa/dnpro sobre el cual 2ueremos
2ue se ejecute. Para esto lo marcamos pulsamos 5Asignar prog./dnpro=.
/n 5/'it,amp=% se pone el nAmero de !ield e'it. /sto solamente es necesario si para un
mismo elemento de datos 2ueremos crear !ield e'its di!erentes en distintos
programas/dnpros.
Para terminar% marcar el !ield e'it acceder al menA E2it Cam$o -/ )cti'ar.
Pgina 82 de 92
..III.Introduccin a la programacin de transacciones
+na transaccin es un programa 2ue permite al usuario comunicarse con el sistema. /st
compuesta por0
,digo de transaccin0 #e de!ine desde #/D3% asociando el cdigo a un module
pool un dnpro inicial.
&npro0 ,onjunto !ormado por una pantalla una lgica de proceso (de!inidas con
#creen Painter C#/\>C) un menA (&e!inido con (enu Painter C#/G>C).
(odule Pool0 Programa 2ue contiene mdulos (porciones de cdigo).
,uando el usuario ejecuta una transaccin% el sistema presenta el primer dnpro de!inido
para la misma. A partir de ese momento el !lujo de pantallas depender de las acciones
reali"adas por el usuario de la codi!icacin de la transaccin.
/n la programacin de dilogo no se utili"a @R$7/. /l sistema compara los nombres de
las variables del module pool con los nombres de los campos de pantalla. #i son iguales%
reali"a la trans!erencia entre pantalla programa viceversa. /sto sucede antes
despu9s de mostrar la pantalla.
Al de!inir una dnpro con el #creen Painter% una de las cosas 2ue se de!inen es la lgica
de proceso. /n la lgica de proceso se controla 2u9 se va a ejecutar antes de mostrar la
pantalla (PR),/## B/B)R/ )+7P+7 CPB)C) 2u9 se va a ejecutar despu9s 2ue el
usuario ingres valores /o activ comandos en la misma (PR),/## AB7/R $8P+7
CPA$C).
/n la lgica de proceso de una dnpro solamente se pueden usar las siguientes
sentencias0
Sentencia escripcin
PR),/## B/B)R/
)+7P+7
&e!ine el blo2ue de proceso PB).
PR),/## AB7/R $8P+7 &e!ine el blo2ue de proceso PA$.
()&+L/ Llama a un mdulo del programa module pool.
B$/L& :alida campos en la pantalla.
,EA$8../8&,EA$8 Agrupa campos de pantalla. #i se activa un mensaje en un
blo2ue ,EA$8../8&,EA$8% todos los campos de!inidos
dentro de ese blo2ue estarn disponibles para entrada de
datos.
,ALL #+B#,R//8 Reali"a llamadas a una subscreen.
/j0
* Lgica de proceso de una pantalla. Antes de mostrarse, ejecuta el
mdulo INICIAR y
* luego de que el usuario invoc un comando o puls ENTER, ejecuta el
mdulo
* VALIDAR. Si el usuario activa un comando de salida, se llama al mdulo
SALIR
PROCESS BEFORE OUTPUT.
MODULE iniciar.
Pgina 83 de 92
PROCESS AFTER INPUT.
MODULE validar.
MODULE salir AT EXIT COMMAND.
* Validacin de campos individuales de pantalla. El campo SEXO solamente
acepta
* valores M o F, y para el campo VALOR se cre un mdulo de
validacin.
FIELD sexo VALUES (V , H).
FIELD valor MODULE valida_valor.
* Validar campos en forma agrupada. Si el mdulo invocado produce un
error, los tres campos quedan disponibles para reingresar datos.
CHAIN.
FIELD BKPF-BLDAT.
FIELD BKPF-BUDAT.
FIELD BKPF-MONAT.
MODULE PERIODE_PRUEFEN.
ENDCHAIN.
* Mostrar una subscreen en la dynpro actual.
CALL SUBSCREEN ADR INCLUDING 'SAPLFDCB' 0100.
/n el module pool pueden usarse las sentencias ABAP conocidas% para reali"ar la lgica
de proceso de la transaccin% pero siempre dentro de un mdulo. /s decir 2ue un
programa module pool solamente contiene mdulos de proceso.
Adems pueden usarse las siguientes sentencias0
Sentencia escripcin
()&+L/../8&()&+L/ &e!inicin de un mdulo.
/j0
MODULE inicializar OUTPUT.
SET PF-STATUS 'STAT'.
ENDMODULE.
Sentencia escripcin
L))P A7 #,R//8 Reali"a un loop de lectura de los campos de pantalla.
()&$B6 #,R//8 (odi!ica los atributos de un campo de pantalla.
La tabla interna #,R//8 guarda todos los objetos de la dnpro sus atributos. /s
posible modi!icarlos dinmicamente mediante la sentencia L))P A7 #,R//8. &entro de
la estructura de esta tabla #,R//8 podemos ver/modi!icar0
SCREEN-LENGHT
SCREEN-NAME
SCREEN-INPUT
SCREEN-OUTPUT
SCREEN-REQUIRED
SCREEN-INTENSIFIED
SCREEN-INVISIBLE
SCREEN-ACTIVE
Pgina 84 de 92
Asignando valor KFK a algAn atributo% se lo desactiva. ,on K>K se activa.
/j0
LOOP AT SCREEN.
IF SCREEN-NAME = 'CLIENTE'
SCREEN-INPUT = 0.
ENDIF.
ENDLOOP.
Sentencia escripcin
,ALL #,R//8 Llama a un dnpro en una transaccin.
#/7 #,R//8 /stablece el siguiente dnpro a mostrar.
L/A:/ #,R//8 Abandona el dnpro actual dispara el 2ue se 1aa establecido.
L/A:/ 7) #,R//8 Abandona el dnpro actual lan"a el indicado. /s como la
combinacin de #/7 #,R//8 L/A:/ #,R//8.
/j0
CALL SCREEN 0100.
SET SCREEN 0300.
LEAVE SCREEN.
LEAVE TO SCREEN 0200.
Pgina 85 de 92
..I!.:ield S;m#ols
Ea veces 2ue en el programa 2ue se est desarrollando se presenta la problemtica de
2ue el nombre de campo 2ue se tiene 2ue utili"ar no se conoce 1asta el momento de
ejecucin. /n estos casos se usan los B$/L&C#6(B)L#.
+n !ield smbol es un 5puntero= a un campo e'istente. 8o tiene reservado espacio !4sico%
a 2ue apunta a otro campo e'istente% 2ue puede ser cual2uier objeto de datos ABAP
(variables% estructuras% campos de estructuras) o cual2uier tabla o estructura de!inida en
el diccionario de datos.
eclaracin de field sym"ols
La !orma bsica de declarar un !ield smbol es0
FIELD-SYMBOLS <campo>. `Field symbol de cualquier tipo
7ambi9n puede de!inirse un !ield smbol de un tipo determinado (con 76P/ o L$N/ como
cual2uier variable)0
/j0
FIELD-SYMBOLS <fecha> TYPE N.
Procesamiento de field sym"ols
Antes de poder utili"ar un !ield smbol% 1a 2ue asignarle un objeto de datos (variable%
campo de estructura% etc.). /ste objeto de datos debe ser conocido para el programa en el
momento de la asignacin.
Luego de la asignacin el !ield smbol pasa a 5apuntar= al objeto especi!icado% de manera
2ue tiene su mismo valor cambia cuando cambia el objeto de datos original.
Luego de un A##$;8% el !ield smbol 1ereda el tipo ( por lo tanto las caracter4sticas) del
objeto de datos 2ue se le asign.
Sentencia escripcin
A##$;8 Asigna un objeto de datos a un !ield smbol.
+8A##$;8 &esasigna el objeto de datos del !ield smbol. /l !ield smbol a1ora no apunta
a nada.
/j0
*** Asignacin esttica
DATA: fecha LIKE SY-DATUM.
FIELD-SYMBOLS <fs>.
Fecha = SY-DATUM.
ASSIGN fecha TO <fs>. `Ahora el field symbol apunta a
FECHA
WRITE <fs>. `Imprime la fecha del da.
*** Asignacin dinmica. Ahora tenemos en una variable tipo C un
nombre de campo.
DATA V_SUB(2) TYPE N.
DATA V_CAMPO(10) TYPE C.
DATA salida LIKE pa0008-bet01.
FIELD-SYMBOLS <campo>.
Pgina 86 de 92
...
CONCATENATE 'PA0008-BET' v_sub INTO v_campo.
ASSIGN (v_campo) TO <campo>. `Asigna a <campo>
el valor de PA0008-BETxx
IF SY-SUBRC eq 0. `Si existe el campo
MOVE <campo> TO salida.
ENDIF.
*** Ejemplo del uso de UNASSIGN
UNASSIGN <campo>. `<campo> ahora no apunta a
nada
*** Otros ejemplos del uso de field symbols - OFFSETS
FIELD-SYMBOLS <fs>.
DATA texto(15) TYPE C.
...
ASSIGN texto+5(10) TO <fs>. `Asigna especificando un offset.
<fs> tiene longitud 10
...
ASSIGN texto+5 TO <fs>. `ERROR de proteccin de memoria. <fs> TIENE
LONGITUD 15
...
ASSIGN texto+5(*)TO <fs>. `Evito el error anterior, con *
hago que no se pase la long.
*** Otros ejemplos del uso de field symbols - ASIGNAR CON TIPOS
DATA fecha(8) TYPE C value 20020315.
FIELD SYMBOLS <fs>.
...
ASSIGN fecha TO <FS>.
WRITE <FS>. `Imprime 20020315 (<FS> es texto)
ASSIGN fecha TO <FS> type 'D'.
WRITE <FS>. `Imprime 15032002 (<FS> es fecha -D-+
Pgina 87 de 92
..!."ransacciones del 'ntorno de Desarrollo
A continuacin se detallan las principales transacciones del entorno de programacin
ABAP. Algunas de ellas a !ueron vistas durante el desarrollo del curso0
#/3U0 /ditor ABAP.
#/\>0 #creen Painter C &iseQo lgica de proceso de d6n$ros.
#/G>0 (enu Painter C &e!inicin de status de programas.
#/>>0 &iccionario ABAP C &e!inicin de tablas% 'istas% estructuras% elementos de datos%
dominios% a6udas $ara bKs8ueda% ob>etos de blo8ueo.
#/3[0 Bibliteca de !unciones C &e!inicin de mdulos de !uncin.
#/3Z0 ;estin de bases de datos l-,icas.
#(3\0 ;estin de juegos de datos batc1 in$ut.
#(3[0 ;estin de >obs.
#/D>0 ;estin de mensa>es.
,()&0 ;estin de proectos de ampliacin C &esde a2u4 se crean los user-e2its.
)tras transacciones aAn no !ueron vistas en detalle0
#/>Z0 &ata bro.ser C Permite ver el contenido de cual2uier tabla de base de datos.
#/UF0 Bro.ser de repositor C &e!inicin de Clases de desarrollo% ,ru$os de (unciones.
#/3D0 /ditor split screen C Permite comparar dos programas.
#/D30 ;estin de transacciones C Permite crear transacciones para los module pool% as4
como asignar cdigos de transacin a los reportes.
#/G30 (enAs de mbito C Permite tratar la estructura del menA #AP% agregando/2uitando
o modi!icando componentes.
#/3F0 Anlisis de tiempo de ejecucin. Permite evaluar los tiempos de ejecucin de un
programa o una transacin. /l anlisis puede limitarse a accesos a base de datos%
llamadas a mdulos de !uncin% subrutinas% etc% generando luego un reporte del mismo.
#(?>0 #stem Log. Permite ver el log con los mensajes del sistema 2ue se producen. /n
el log pueden aparecer errores 2ue se producen en la ejecucin de los programas ABAP%
cone'iones descone'iones de usuarios% etc.
#7F\0 #*L 7race C Permite anali"ar las sentencias relacionadas con el acceso a bases de
datos por parte del usuario.
#7??0 Anlisis dumps C Permite ver el log de los dumps (cancelaciones) 2ue ocurrieron en
el sistema.
#/Z>0 &ocumentacin C Permite asociar un te'to de documentacin a los objetos del
sistema (programas% elementos de datos% mensajes% etc.).
#/Z30 7raductor C Permite convertir te'tos de un idioma a otro.
#7(#0 #istema de transporte C Permite transportar gestionar rdenes de 3or4benc1
customiJin,.
#/U>0 `erar2u4a de aplicacin C Permite consultar los componentes de un mdulo. /stos
componentes son objetos del diccionario% programas% transacciones% grupos de !unciones%
bases de datos lgicas% etc.
Pgina 88 de 92
..!I. Creacin de 2dulos de :uncin
La transaccin desde la cual se crea un mdulo de !uncin es S%,7. La primer pantalla
pide un nombre de mdulo de !uncin. Los mdulos de !uncin del cliente deben
comen"ar con KVK o K6K.
+na ve" 2ue se ingresa el nombre del mdulo de !uncin% se presiona K,rearK aparece la
siguiente pantalla0
#e pide (en !orma obligatoria) ingresar un grupo de !unciones. ,ada mdulo de !uncin
tiene 2ue !ormar parte de un grupo de !unciones. Puede usarse uno e'istente o crear uno
nuevo (desde la pantalla anterior). A su ve" debe ingresarse en K7e'to BreveK una
descripcin del mdulo de !uncin 2ue se va a crear.
Luego 1acer clic- en K;rabarK. #e pide clase de desarrollo orden de transporte (si la
clase de desarrollo no es Kd7(PK).
Pgina 89 de 92
/n la pantalla de atributos del mdulo de !uncin se ven las propiedades del mismo%
puede determinarse el tipo de mdulo de !uncin (normal% de acceso remoto CRB,C% etc.).
Pgina 90 de 92
Las siguientes pantallas permiten de!inir la inter!ase del mdulo de !uncin% es decir sus
parmetros de entrada ($(P)R7)% sus parmetros de salida (/PP)R7) las tablas
internas% 2ue pueden ser tanto parmetros de entrada como de salida (7ABL/#). 7ambi9n
pueden de!inirse e'cepciones (/P,/P7$)8#) 2ue son eventos de error 2ue dispara el
mdulo de !uncin es capturable por el programa 2ue lo invoc (a trav9s de la sentencia
RA$#/).
Pgina 91 de 92
Binalmente% la Altima pantalla es la 2ue permite de!inir el cdigo !uente% el cual se inclue
entre las sentencias B+8,7$)8 /8&B+8,7$)8.
/l mdulo de !uncin debe activarse para poder ser utili"ado.
Pgina 92 de 92

Potrebbero piacerti anche