Vous êtes sur la page 1sur 322

Curso programacin ABAP IV:

Temario y
material de soporte
Curso programacin ABAP IV Curso programacin ABAP IV
TEMARIO DE C!R"O
#$ I%TROD!CCIO%
1.1 QUE ES UN ERP
1.2 MODULOS DE SAP
1.3 CONCEPTO DE MANDANTE
1.4 USUARO Y PASS
1.5 MENU SAP, MENU USUARO, FAVORTOS, TRANSACCONES,
1.6 NTRODUCCN AL SSTEMA BASE
1.7 R/3 SAP PORTALS BW, ETC
&$ I%TROD!CCIO% A A PRO'RAMACI(%
2.1 DEFNCN DE DATOS (Tipos de datos, variables, constantes, estructuras,
rangos, field-symbols)
2.2 MODULARZACN ( Subrutinas y includes)
2.3 VARABLES DEL SSTEMA (SYST)
2.4 NSTRUCCONES BSCAS
2.4.1 Asignaciones ( "=, MOVE, MOVE-CORRESPONDNG, CLEAR,
OFFSET )
2.4.2 Operaciones condicionales (EQ, NE, GE, .., F, CASE, Op.
Condicionales Cadenas CS, CA. )
2.4.3 Iteracin )*ucles+ (DO, WHLE, CONTNUE, CHECK, EXT)
2.4.4 Aritm,ticas (SQRT, ADD, SUBTRACT, MULTPLY, DV, MOD)
2.4.5 Tratamiento de cadenas (CONCATENATE, SHFT,
CONDENSE, TRANSLATE, REPLACE, STRLEN)
2.4.6 -ormateo de .alores (WRTE TO, PACK, UNPACK)
2.4.7 Mensa/es )MESSAGE)
&$0$1 Comentarios de programas
2.5 TABLAS NTERNAS
&$2$# Declaracin
&$2$& Creacin de registros
&$2$3 ectura de registros
&$2$0 Modi4icacin de registros
&$2$2 Borrado de registros
&$2$5 Tratamiento de registros
2.6 TABLAS DCCONARO
&$5$# Declaracin
&$5$& Creacin de registros
&$5$3 "eleccin de datos )"EECT .er todas las opciones+
&$5$0 ectura de registros por cla.e
&$5$2 Modi4icacin de registros
&$5$5 Borrado de registros
&$5$6 Tratamiento de registros
2.7 DEBUGGNG
Pg. 2
Curso programacin ABAP IV Curso programacin ABAP IV
3$ DICCIO%ARIO
3.1 NTRODUCCN AL DCCONARO
3.2 DOMNO
3.3 ELEMENTO DE DATOS
3.4 TPOS DE TABLAS )transparentes7 estructuras7 .istas7 cluster8+
3.5 TABLAS (SE11)
3$2$# Creacin de ta*las
3$2$& Opciones t,cnicas
3$2$3 Estructuras append
3$2$0 9ndices
3$2$2 !tilidades *ase de datos
3$2$5 'eneracin actuali:acin de ta*las
3$2$6 Visuali:ar;Modi4icar contenido ta*las )"E#57 "E#5% y "M3<+
3$2$1 Cla.es E=ternas
3.6 ESTRUCTURAS
3.7 VSTAS
3.8 MATCHCODE )Ayudas de *>s?ueda+
3.9 OBJETOS DE BLOQUEO
0$ REPORT"
4.1 NTRODUCCN (PLANOS E NTERACTVOS)
4.2 EDTOR ABAP V (SE38, SE80)
4.2.1 Documentacin y estructuracin de un listado plano$
4.2.2 De4inicin de atri*utos de salida$
4.2.3 De4inicin de ta*las e=ternas$
4.2.4 Pantalla de seleccin$
4.2.5 Elementos de te=to
Smbolos de texto
Textos de seleccin
Ttulos y cabeceras
4.2.6 "entencias de salida de datos
4.2.7 Message
4.2.8 E.entos
INITIALIZATION
START-OF-SELETION
EN!-OF-SELETION
TO"-OF-"A#E
EN!-OF-"A#E
AT SELETION-SREEN
4.2.9 E.entos de rupturas de secuencia en ta*las internas
AT FIRST $ EN!AT
AT LAST $ EN!AT
AT NE% cam&o $ EN!AT
AT EN! OF cam&o $ EN!AT
Pg. 3
Curso programacin ABAP IV Curso programacin ABAP IV
ON 'AN#E OF cam&o $ EN!ON
4.2.10 Bases de datos lgicas
4.2.11 -IED@'RO!P"
4.2.12 Programacin de listados interacti.os
Introduccin
E(entos )AT LINE-SELETION* AT +SER-O,,AN!*
ASE S--+O,,* AT "Fn.
Sentencias de lectura y escritura de lneas (HDE, READ
LNE)
Niveles de listados anidados
Menu Painter
Screen Painter
4.3 ALV GRD
2$ PRO'RAMACI(% DE DIAO'O
5.1 NTRODUCCN
5.2 MODULE POOLS
2$&$# Introduccin
2$&$& Programa marco o principal
2$&$3 Atri*utos de la pantalla
2$&$0 DiseBo grC4ico
2$&$2 "tatus de pantalla )*arra men>s7 teclas 4uncin7 *arra
Derramientas7 *arra pulsadores7 8+
2$&$5 gica del proceso
"/O
"AI
"ROESS ON 'EL"-RE0+EST
"ROESS ON 1AL+E-RE0+EST
2$&$6 "entencias
SET "F-STAT+S
SET TITLE/AR
,O!+LE
LEA1E "RO#RA,
AT E2IT-O,,AN!
AT +RSOR-SELETION
,ESSA#E
FIEL!
'AIN$EN!'AIN
ON IN"+T
ON 'AIN-IN"+T
ON RE0+EST
ON 'AIN-RE0+EST
ET
2$&$1 Asignacin de transacciones )"EE3+
Pg. 4
Curso programacin ABAP IV Curso programacin ABAP IV
2$&$E Modi4icacin dinCmica de una pantalla )OOP AT "CREE%+
2$&$#< TABE CO%TRO F TAB"
2$&$## "ecuencia de proceso de pantallas )"ET "CREE%7 EAVE
"CREE%7 EAVE TO "CREE%7 CA "CREE%7 EAVE
PRO'RAM+
2$&$#& Procesamiento de listados en pantallas
5@-!%CIO%E"
6.1 NTRODUCCN
6.2 CREACN DE UN GRUPO DE FUNCONES
6.3 CREACN DE UNA FUNCN
6.4 PARMETROS DE UNA FUNCN
5$0$# Import
5$0$& E=port
5$0$3 CDanging
5$0$0 Ta*las
6.5 EXCEPCONES
6.6 DATOS GLOBALES
6.7 CDGO FUENTE
6.8 EJECUCN
6.9 RFCs y BAPs
6@AMADA" A PRO'RAMA" F 'E"TI(% DE MEMORIA
7.1 NTRODUCCN
7.2 PARMETROS DE MEMORA SAP (SET, GET, DATOS PROPOS)
7.3 SENTENCAS DE LLAMADAS A PROGRAMAS (SUBMT, CALL
TRANSACTON)
7.4 NTERCAMBO DE DATOS A TRAVS DE LA MEMORA ABAP/4
(EXPORT, MPORT, FREE MEMORY)
1@I%TER-A"E"
8.1 NTRODUCCN
8.2 TRATAMENTO DE FCHEROS
8.3 NSTRUCCONES
8.3.1 ectura;Escritura de 4icDeros 4Gsicos )'!IHDOIOAD7
'!IH!POAD+
8.3.2. ectura 4icDeros ser.idor
O"EN !ATASET
REA! !ATASET
TRANSFER
LOSE !ATASET
!ELETE !ATASET
8.3.3 EXPLORAR FCHEROS (AL11)
8.3.4 TRANSACCN FLE (FCHEROS LGCOS)
8.3.5 PROGRAMAS DE CARGA
Pg. 5
Curso programacin ABAP IV Curso programacin ABAP IV
8.3.6 BATCH NPUT
Introduccin
Grabadora )"JDB+$
BDC_OPEN_GROUP
BDC_INSERT
CLOSE_GROUP
Creacin de juegos de datos
Trataiento!Ejecucin de juegos de datos
C"LL TR"NS"CTION #OPCIONES$
DIRECT INPUT
8.3.7 LEGACY SYSTEM MGRATON WORKBENCH (LSMW)
E@-ORM!ARIO"
9.1 NTRODUCCN
9.2 ESTRUCTURA DE UN FORMULARO (PROG.MPRESN, FORMULARO)
9.3 EDTOR DEL FORMULARO (SE71)
E$3$# Ca*ecera
E$3$& PCginas
E$3$3 Ventanas
E$3$0 Ventana pCgina
E$3$2 -ormatos de pCrra4o
E$3$5 -ormatos caracteres
E$3$6 Elementos de te=to
9.4 SAPSCRPT
E$0$# Ca/as7 lGneas y som*reados
E$0$& Comandos de control
E$0$3 "Gm*olos "AP"cript
E$0$0 "Gm*olos del sistema
E$0$2 Campos generales de "AP"cript
E$0$5 Opciones de 4ormato de los sGm*olos
E$0$6 -ormularios en .arios idiomas
E$0$1 Inclusin de grC4icos
9.5 PROGRAMA DE MPRESN
E$2$# OPE%H-ORM
E$2$& IRITEH-ORM
E$2$3 CO"EH-ORM
E$2$0 ETC
9.6 SMARTFORMS
E$5$# Parametri:acin glo*al
E$5$& Paginas y .entanas )MAI%+
E$5$3 Elementos para control de 4lu/o
#<@PRO'RAMACI(% ORIE%TADA A OBKETO"
10.1 NTRODUCCN
10.2 CLASES Y OBJETOS
Pg. 6
Curso programacin ABAP IV Curso programacin ABAP IV
10.3 METODOS Y PROPEDADES
10.4 HERENCA
10.5 POLMORFSMO
10.6 TABLAS NTERNAS DE OBJETOS
10.7 EJEMPLOS
##@ AMPIACIO%E" "AP

11.1 CMOD y SMOD
11.2 USER EXT
11.3 BADS
#&@ RE"TO DE I%"TR!CCIO%E" ABAP
12.1 REPASO DE LAS NTRUCCONES ABAP
#3@ TABA" E"TA%DAR "AP
13.1 PRNCPALES TABLAS ESTANDAR SAP
#0@ TRA%"ACCIO%E" E"TA%DAR "AP
14.1 OBTENCN DE LA AYUDA TCNCA (F1)
14.2 TRACE DEL SSTEMA (ST05)
14.3 TRANSPORTE (SE10 y STMS)
14.4 ANALSS DE ERRORES (ST22)
14.5 SPOOL (SP01)
14.6 PROGRAMACN DE JOBS (SM37)
14.7 SXDA
14.8 EDTOR SPLT SCREEN (SE39)
14.9 OBJECT NAVGATOR (SE80)
14.10 MENS MBTO (SE43N)
14.11 QUERYS (SQ01, SQ2, SQ03)
14.12 WORKFLOW
14.13 VERFCACN AMPLADA
Pg. 7
Curso programacin ABAP IV Curso programacin ABAP IV
#$ Introduccin
#$# Lu, es un ERP
Un ERP (Enterprise Resource Planning) permite la integracin de los procesos
de negocio y sistemas para alcanzar una amplia eficiencia operacional de la
empresa. Adems mejora el funcionamiento de un negocio consolidando las
operaciones de una empresa en una nica base de datos, una sola aplicacin y
una nica interfaz de usuario.
#$& Mdulos de "AP
"AP (Systems Application Products in Data Processing) R/3 es un Enterprise
Resource Planning
Sus ventajas se resumen en las siguientes:
ntegracin
Flexibilidad
Procesamiento de datos en tiempo real
Diseado para todo tipo de negocio
Presenta una arquitectura de tres capas: Cliente, Servidor de aplicacin y Servidor de
Base de Datos
Se presentan en SAP diferentes mdulos. Los vemos con un esquema:
Pg. 8
Curso programacin ABAP IV Curso programacin ABAP IV
"ales and Distri*ution )"D+. Ventas y distribucin.
Da soporte a las tareas y actividades llevadas a cabo en ventas, entregas y
facturaciones.
Materials Management )MM+ Gestin de materiales.
Da soporte a la consecucin y funciones de inventario, como la compra, la
gerencia de inventario.
Production Planning )PP+
Se utiliza para planear y controlar las actividades de la fabricacin de una
empresa. Este mdulo incluye; las listas de material, encaminamientos, centros
de trabajo, ventas y la planificacin de operaciones, la planificacin de
exigencias material, el control de planta, rdenes de produccin, coste de
producto, etc.
Luality Management )LM+ Es un control de calidad y proporciona el control de
la fabricacin y la consecucin.
Plant Maintenance )PM+ Es un proceso de fabricacin de complejo donde el
equipo puede ser reconstruido y el mantenimiento de servicio proporcionado. El
Mantenimiento de Planta esta muy relacionado con PP.
Juman Resources )JR+$ Recursos Humanos es un sistema completo integrado
para apoyar la planificacin y el control de actividades de personal.
-inancial Accounting )-I+$ Finanzas. Diseado para direccin automatizada y
generacin de informes externos del libro de contabilidad general, cuentas por
cobrar, cuentas por pagar y otras cuentas del sublibro de contabilidad.
Pg. 9
Curso programacin ABAP IV Curso programacin ABAP IV
Controlling )CO+ Representa el flujo de coste de la empresa
#$3 Concepto de mandante
El concepto de mandante se refiere a diferentes escenarios de datos independientes
unos de otros con los que el sistema trabaja. Es simplemente un rea de trabajo dentro
de un ambiente SAP (produccin, integracin y desarrollo).
#$0 !suario y PassMord
#$2 Menu "AP7 Men> !suario7 -a.oritos transacciones
Men> de usuario
Pg. 10
Curso programacin ABAP IV Curso programacin ABAP IV
-a.oritos7 transacciones$
Pg. 11
Curso programacin ABAP IV Curso programacin ABAP IV
&$ Introduccin a la programacin
&$# De4inicin de datos
&$#$# Tipos de datos$
Los tipos de datos que se pueden utilizar en ABAP /4 son los siguientes:
Tipos ong$
por
De4ecto
ongitu
d
posi*le
Valor
inicia
l
Descripci
n
C 1 1-
32000
ESPACO
S
Texto
F 8 8 0.0E+00 Punto flotante
4 4 0 Entero
N 1 1-
32000
'0000' Texto
numrico
P 8 1-16 0 Nmero
Empaquetado
X 1 1-
29870
x'00' Hexadecimal
D 8 8 00000000 Fecha
YYYYMMDD
T 6 6 000000 Hora
HHMMSS
Pg. 12
Curso programacin ABAP IV Curso programacin ABAP IV
&$#$& Varia*les
Las variables se definen con la sentencia DATA.
DATA <variable>(longitud) TYPE <tipo> VALUE <valor>.
Si no se indica lo contrario las variables se definirn por defecto de tipo carcter (Texto)
con longitud 1.
DATA D_CARACTER. "Se crear una variable de texto con longitud 1
DATA D_CARACTER (8). "Se crear una variable de texto con longitud 8
Con la clusula TYPE podemos especificar el tipo de dato de las variables.
DATA: D_NUMERO_CAR (5) TYPE N,
D_NUMERO TYPE ,
D_FECHA TYPE D.
Utilizando el carcter ": detrs de una instruccin se encadenan varias ejecuciones de
la misma instruccin separadas por el carcter ",.
Con el parmetro VA!E podemos inicializar la variable con un valor distinto al que
tiene por defecto.
DATA D_CONTADOR TYPE VALUE 1.
Con la clusula INE podemos declarar una variable con los mismos atributos de
longitud y tipo que un campo del diccionario de datos o que otra variable definida
previamente.
DATA D_ACREEDOR LKE LFA1-LFNR.
&$#$3 Constantes
Las constantes se definen con la sentencia CO%"TA%T".
CONSTANTS <constante>(longitud) TYPE <tipo> VALUE <valor>.
Para la definicin de constantes se aplican las mismas reglas que para la definicin de
variables pero siempre hay que darle un valor inicial que no podr ser modificado
durante la ejecucin del programa.
CONSTANTS C_ACREEDOR LKE LFA1-LFNR VALUE 'JOSE'.
&$#$0 Estructuras
Una estructura es un conjunto de campos relacionados lgicamente y se define con la
sentencia DATA:
DATA: BEGN OF <estructura>,
.
Pg. 13
Curso programacin ABAP IV Curso programacin ABAP IV
END OF <estructura>.
DATA: BEGN OF R_PROVEEDOR,
CODGO LKE LFA1-LFNR,
NOMBRE LKE LFA1-NAME1,
CUDAD(20) LKE LFA1-ORT01,
FECHA TYPE D,
END OF R_PROVEEDOR.
Tambin se puede incluir en la definicin de una estructura la de una tabla del
diccionario de datos o una estructura definida previamente en el programa utilizando la
instruccin I%C!DE "TR!CT!RE.
DATA BEGN OF R_SOCEDADES OCCURS 10.
NCLUDE STRUCTURE T001.
DATA: CONTADOR(20) TYPE N,
END OF R_SOCEDADES.
Estas instrucciones crean una estructura con todos los campos de la tabla del
diccionario T001 y el campo CONTADOR como ltimo campo.
Para hacer referencia posteriormente a los campos de la estructura se especificar el
nombre de la estructura y del campo separados por un guin.
R_PROVEEDOR-NOMBRE = 'JOSE'.
&$#$2 Rangos
Los rangos son tablas internas con una estructura determinada que se utilizan para
almacenar rangos de valores para un tipo de campo y se definen con la sentencia
RA%'E":
RANGES: <rango> FOR <campo>.
La estructura de un rango se compone de los siguientes campos:
"I'%: Es un campo de tipo carcter de una posicin que indica si los valores
especificados en el rango se incluyen (valor ") o se excluyen (valor "E) del mismo.
OPTIO%: Es un campo de tipo carcter de dos posiciones que indica el operador
lgico que une los valores especificados en el rango.
OI: Valor inicial del rango. Este campo tiene el mismo tipo que el campo al
que hace referencia el rango.
JI'J: Valor final del rango. Este campo tiene el mismo tipo que el campo al que
hace referencia el rango.
Los rangos se utilizan para chequear valores vlidos en sentencias condicionales del
campo al que hace referencia. Si un rango no contiene ningn registro, asume que
cualquier valor del campo al que hace referencia es vlido.
TABLES: LFA1.
RANGES G_PROVEEDOR FOR LFA1-LFNR.
Pg. 14
Curso programacin ABAP IV Curso programacin ABAP IV
G_PROVEEDOR-SGN = ".
G_PROVEEDOR-OPTON = "BT. "Operador ENTRE
G_PROVEEDOR-LOW = "1.
G_PROVEEDOR-HGH = "9.
APPEND G_PROVEEDOR.
El rango creado hace referencia a los valores del campo LFA1-LFNR comprendidos
entre el valor "1 y "9 ambos inclusive.
&$#$5 -IED@"FMBO"
Los FELD-SMBOLS son campos simblicos que se pueden referenciar a un campo
concreto en tiempo de ejecucin del programa, y se definen con la sentencia -IED@
"FMBO":
FELD-SMBOLS <nombre>. "(los caracteres "< y "> se deben especificar).
Utilizando la sentencia ASSGN se asigna un campo al FELD-SYMBOL y, a partir de
ese momento, todas las operaciones que se realicen sobre el FELD-SYMBOL harn
referencia al campo asignado.
FELD-SYMBOLS: <CAMPO>.
DATA: D_CONTADOR_1 TYPE ,
D_CONTADOR_2 TYPE .
ASSGN D_CONTADOR_1 TO <CAMPO>.
<CAMPO> = <CAMPO> + 1.
ASSGN D_CONTADOR_2 TO <CAMPO>.
<CAMPO> = <CAMPO> + 2.
Despus de ejecutar las sentencias anteriores la variable D_CONTADOR_1 contendr
el valor "1 y la variable D_CONTADOR_2 contendr el valor "2.
&$& Modulari:acin
&$&$# "u*rutinas$
Las subrutinas son conjuntos de instrucciones que pueden ser llamadas desde el
programa en diversas ocasiones, evitando as su codificacin cada vez que se
necesiten ejecutar y dando adems mayor claridad al programa.

Para definir una subrutina se utilizan las sentencias -ORM y E%D-ORM, que se
especifican respectivamente al inicio y final de las instrucciones que forman la subrutina.
Para realizar una llamada a la misma se utiliza la sentencia PER-ORM.
PERFORM EJEMPLO. " Llamada a la subrutina
.
Pg. 15
Curso programacin ABAP IV Curso programacin ABAP IV
FORM EJEMPLO. " Definicin de subrutina
.
NSTRUCCONES ABAP.
.
ENDFORM.
El programa principal y la subrutina se podrn comunicar mediante parmetros que
pueden ser pasados por valor o por referencia, siendo recomendable especificar el tipo
de dato al definirlos.
El paso de parmetros por re4erencia se realiza de la siguiente
manera:
.
PERFORM <nombre> USNG parametro1 parametro2 ...
...
FORM <nombre> USNG parametro1 parametro2 ...
...
ENDFORM.
Los parmetros que son pasados a la subrutina en la llamada (ACTUALES) actualizan
el valor de los parmetros definidos en la subrutina (FORMALES).
DATA: D_NUMERO_1 TYPE VALUE 1,
D_NUMERO_2 TYPE VALUE 2.
PERFORM SUMAR USNG D_NUMERO_1 D_NUMERO_2.
FORM SUMAR USNG PS_NUMERO TYPE
PS_CANTDAD TYPE .
PS_NUMERO = PS_NUMERO + PS_CANTDAD.
ENDFORM.
Al finalizar la ejecucin de la subrutina las variables tendrn estos valores:
D_NUMERO_1 => 3
D_NUMERO_2 => 2
Pase de parmetros por .alor.
...
PERFORM <nombre> USNG parametro1 parametro2 ...
...
FORM <nombre> USNG VALUE(parametro1) VALUE(parametro2) ...
...
ENDFORM.
Los parmetros que son pasados a la subrutina en la llamada no se actualizan con el
valor de los parmetros definidos en la subrutina.
Pg. 16
Curso programacin ABAP IV Curso programacin ABAP IV
DATA: D_NUMERO_1 TYPE VALUE 1,
D_NUMERO_2 TYPE VALUE 2.
PERFORM SUMAR USNG D_NUMERO_1 D_NUMERO_2.
FORM SUMAR USNG PS_NUMERO TYPE
VALUE(PE_CANTDAD) TYPE .
PE_CANTDAD = 3.
PS_NUMERO = PS_NUMERO + PE_CANTDAD.
ENDFORM.
Al finalizar la ejecucin de la subrutina las variables tendrn estos valores:
D_NUMERO_1 => 4
D_NUMERO_2 => 2
Utilizando la clusula "TR!CT!RE se puede pasar como parmetro una estructura y
hacer referencia a sus campos en la subrutina.
DATA: BEGN OF R_PROV,
CODGO LKE LFA1-LFNR,
NOMBRE LKE LFA1-NAME1,
END OF R_PROV.
PERFORM NFORMAR_PROV USNG R_PROV.
FORM NFORMAR_PROV USNG PS_PROV STRUCTURE R_PROV.
PS_PROV-NOMBRE = 'JOSE'.
ENDFORM.
Tambin se puede pasar como parmetro una tabla interna por referencia con la
clusula TABE".
DATA: D_CONTADOR TYPE VALUE 1.
DATA: BEGN OF _PROV OCCURS 0,
CODGO LKE LFA1-LFNR,
NOMBRE LKE LFA1-NAME1,
END OF _PROV.
PERFORM NFORMAR_PROV TABLES _PROV
USNG D_CONTADOR.
FORM NFORMAR_PROV TABLES PS__PROV STRUCTURE _PROV
USNG VALUE(PE_CONTADOR).
PS__PROV-CODGO = PE_CONTADOR.
PS__PROV-NOMBRE = 'JOSE'.
APPEND PS__PROV. " nserta el registro en la tabla interna
Pg. 17
Curso programacin ABAP IV Curso programacin ABAP IV
ENDFORM.
Al finalizar la ejecucin de la subrutina se habr insertado el registro en la tabla interna
_PROV.
&$&$& Includes
Los NCLUDES son unos programas que contienen definiciones que pueden ser
utilizadas en otros programas insertando en estos la sentencia NCLUDE <nombre>.
Este tipo de programas no son ejecutables directamente, han de estar incluidos en otros
para que puedan ser ejecutado el cdigo que contienen.
&$3 Varia*les del sistema
&$3$# Ta*la "F"T
ABAP/4 tiene algunas variables internas que se van actualizando automticamente y
que pueden ser utilizadas en los programas. Estas variables se encuentran
almacenadas en la tabla del diccionario SYST y para acceder a ellas se les debe aadir
el prefijo "SY-".
&$3$& Varia*le "F@"!BRC
La variable ms importante es SY-SUBRC, que devuelve el resultado de la ejecucin de
las instruccines ABAP/4, siendo 0 el cdigo de retorno de una ejecucin correcta y
otros valores en caso de error (estos valores de error dependen de la instruccin ABAP
que se este ejecutando).

Varia*les del sistema mCs utili:adas$
CAMPO CONTENDO
ABCDE Alfabeto (A, B, C, D, ..)
COLNO Columna actual en la creacin de una lista
CPAGE N de la pgina actual
CPPROG Nombre del programa principal
CUCOL Posicin del cursor, columna
CURROW Posicin del cursor, lnea
DATUM Fecha del sistema
DBNAME Base de datos lgica usada en Report
DYNGR Grupo de dynpros al que pertenece la dynpro actual
DYNNR N de la pantalla actual
FDPOS Lugar de hallazgo de un string
FMKEY Men de teclas de funcin
NDEX Cantidad de ejecuciones del LOOP
LLL N de lnea en la lista actual
LNCT Cantidad de lneas de la lista
LNNO Lnea actual en la creacin de una lista
Pg. 18
Curso programacin ABAP IV Curso programacin ABAP IV
LNSZ Longitud de la lnea de una lista
LSEL Lnea seleccionada (Listado interactivo)
LST N de la lnea de la lista actual
LST ndice de seleccin de las listas
LOOPC Cantidad de lneas LOOP en Step-Loop de una Dynpro
LSND ndice de las listas secundarias
LSTAT nformacin del status por nivel de lista
MSGD dentificador del mensaje
MSGNO N del mensaje
MSGTY Tipo del mensaje (E, , W, .)
MSGV1 4 Variables en mensaje
PAGCT Lmite de columnas de la lista en la sentencia REPORT
PAGNO Pgina actual en creacin de lista
PFKEY Status actual de teclas de funcin
PRBG mpresin: portada de seleccin
PRMM mpresin: salida inmediata
PRREL mpresin: borrar tras salida
REPD Nombre del programa Abap / 4
SCOLS Total de columnas en la pantalla
SROWS Total de lneas en la pantalla
STACO Margen del listado, columna
STARO Margen del listado, lnea
STEP ndice del Step-Loop
STEPL N de la lnea Loop en Step de una Dynpro
SUBRC N del error al ejecutar una operacin
TABX Lnea actual de tabla interna
TCODE Cdigo de la transaccin actual
TFLL N actual de entradas en la tabla interna
TTLE Ttulo del programa Abap / 4
TLENG Tamao de la lnea de una tabla interna
TMAXL Cantidad mxima de entradas en tabla interna
TNAME Nombre de la tabla interna despus de un acceso
TOCCU Parmetros OCCURS en tabla interna
TTABC N de la ltima lnea de tabla interna leda
TVAR0 9 Variable de texto para elementos de texto de Abap / 4
UCOMM Entrada de funcin en campos comando (Pulsadores, .)
ULNE Lnea horizontal
UNAME Nombre del usuario
UZET Hora del sistema
VLNE Lnea vertical
WLL N de lnea en la ventana actual
WNCO Posicin del cursor en la ventana, columna
WND ndice de la lnea de la ventana actual
WNRO Posicin del cursor en la ventana, lnea
WNSL Lnea de la ventana seleccionada
WTTL ndicador para cabecera estndar de pgina
Pg. 19
Curso programacin ABAP IV Curso programacin ABAP IV
&$0 Instrucciones *Csicas$
&$0$# Asignacin
Existen diversas formas de asignar valores a una variable en ABAP/4:
Asignacin directa
Se asigna un valor a una variable directamente utilizando el operador "=.
<variable> = valor.
El valor se puede especificar como un literal, el contenido de una constante o el
contenido de una variable.
Sentencia MOVE$
Asigna un valor a una variable.
MOVE <valor> TO <variable>.
Sentencia MOVE-CORRESPONDNG.
Mueve el contenido de los campos de una estructura a los campos que tengan el mismo
nombre de otra estructura.
MOVE-CORRESPONDNG <estructura_origen> TO <estructura_destino>.
Sentencia CEAR$
nicializa el contenido de un campo a su valor inicial segn el tipo de dato (espacios en
el tipo carcter, cero en el tipo entero, etc.).
CLEAR <campo>.
OFFSETS.
Se puede hacer referencia parcial a una parte de un campo indicando el nmero de
posiciones que hay hasta la posicin en la que se comienza a referenciar utilizando el
operador '+', y la cantidad de posiciones que se referencian entre parntesis.
MOVE <campo1>+<posiciones>(longitud) TO <campo2>.
DATA: D_CARACTER_1(8) TYPE C VALUE 'ABCDEFGH',
D_CARACTER_2(4) TYPE C.
D_CARACTER_2 = D_CARACTER_1+2(4) .
Al ejecutar la sentencia de asignacin la variable D_CARACTER_2 tendr el valor
'CDEF'.
Pg. 20
Curso programacin ABAP IV Curso programacin ABAP IV
&$0$& Condicionales
Las sentencias condicionales permiten ejecutar una serie de instrucciones solamente
cuando se cumplan una serie de condiciones.
Operadores condicionales.
Las condiciones se construyen utilizando los siguientes operadores condicionales:
<valor> 1 EQ <valor2>.
La condicin se cumple si <valor1> es igual que <valor2>. (Tambin se puede utilizar el
carcter "= en lugar de "EQ).
<valor1> NE <valor2>.
La condicin se cumple si <valor1> es distinto que <valor2>. (Tambin se pueden
utilizar los caracteres "<> en lugar de "NE).
<valor1> GT <valor2>.
La condicin se cumple si <valor1> es mayor que <valor2>. Tambin se puede utilizar el
carcter "> en lugar de "GT).
<valor1> LT <valor2>.
La condicin se cumple si <valor1> es menor que <valor2>. Tambin se puede utilizar el
carcter "< en lugar de "LT).
<valor1> GE <valor2>.
La condicin se cumple si <valor1> es mayor o igual que <valor2>. Tambin se pueden
utilizar los caracteres ">= en lugar de "GE).
<valor1> LE <valor2>.
La condicin se cumple si <valor1> es menor o igual que <valor2>. Tambin se pueden
utilizar los caracteres "<= en lugar de "LE).
<valor1> BETWEEN <valor2> AND <valor3>.
La condicin se cumple si <valor1> est comprendido entre los valores <valor2> y
<valor3>.
<valor1> S NTAL.
La condicin se cumple si <valor1> tiene valor inicial segn el tipo de dato (espacios en
el tipo carcter, cero en el tipo entero, etc.).
<valor> N <rango>.
La condicin se cumple si <valor> tiene un valor comprendido en el rango <rango>.
Operadores lgicos.
Los operadores lgicos permiten combinar condiciones:
<condicin1> AND <condicin2> .
La condicin formada se cumple si las dos condiciones <condicin1> y <condicin2> se
cumplen.
<condicin1> OR <condicin2> .
La condicin formada se cumple si al menos una de las dos condiciones se cumple.
NOT <condicin>.
La condicin formada se cumple si la condicin <condicin> es falsa.

Sentencias I- <condicin> . E%DI-.
Las instrucciones delimitadas por las sentencias F y ENDF solamente se ejecutan si la
condicin especificada se cumple.
Pg. 21
Curso programacin ABAP IV Curso programacin ABAP IV
FORM ESCRBR USNG VALUE(PE_TEXTO)
VALUE(PE_ESCRBR).
F NOT PE_ESCRBR S NTAL.
* Se escribe el texto en la pantalla
WRTE PE_TEXTO.
ENDF.
ENDFORM.
Esta subrutina escribir por pantalla el texto recibido en el parmetro PE_TEXTO si se
recibe un valor distinto de espacios en el parmetro PE_ESCRBR (la sentencia de
escritura en pantalla WRTE se ver en el manual de reporting).

Sentencias CA"E <variable> . E%DCA"E.
Permiten ejecutar diferentes grupos de sentencias en funcin del valor contenido en
<variable>, delimitando las sentencias con la clusula WHEN <valor>.
El valor "OTHERS comprende todos los valores que no hayan sido especificados en las
anteriores clusulas WHEN.
FORM ESCRBR USNG VALUE(PE_TEXTO)
VALUE(PE_ALNEACON).
CONSTANTS: C_L_CENTRADO(1) TYPE C VALUE 'C',
C_L_ZQUERDA(1) TYPE C VALUE '',
C_L_DERECHA(1) TYPE C VALUE 'D'.
CASE PE_ALNEACON.
WHEN C_L_CENTRADO.
* Se escribe el texto en la pantalla centrado
WRTE PE_TEXTO CENTERED.
WHEN C_L_ZQUERDA.
* Se escribe el texto en la pantalla justificado a
* la izquierda
WRTE PE_TEXTO LEFT-JUSTFED.
WHEN C_L_DERECHA.
* Se escribe el texto en la pantalla justificado a
* derecha
WRTE PE_TEXTO RGHT-JUSTFED.
WHEN OTHERS.
* Se escribe el texto en la pantalla sin justificar
WRTE PE_TEXTO.
ENDCASE.
ENDFORM.
Pg. 22
Curso programacin ABAP IV Curso programacin ABAP IV
Esta subrutina escribir por pantalla el texto recibido en el parmetro PE_TEXTO segn
el valor recibido en el parmetro PE_ALNEACON:
Si se recibe el valor 'C' se escribe centrado.
Si se recibe el valor '' se escribe justificado a la izquierda.
Si se recibe el valor 'D' se escribe justificado a la derecha.
Si se recibe cualquier otro valor se escribe sin justificar.
Operadores condicionales para cadenas.
Utilizando los siguientes operadores se pueden construir condiciones especficas para
cadenas de texto:
<cadena1> CO <cadena2>.
La condicin se cumple si todos los caracteres contenidos en <cadena1>, incluyendo
espacios en blanco, existen en <cadena2>.
Si la condicin es cierta, la variable del sistema SY-FDPOS contendr la longitud de
<cadena1>, sino contendr el OFFSET del primer carcter de <cadena1> que no
existe en <cadena2>.
<cadena1> CN <cadena2>.
La condicin se cumple si alguno de los caracteres contenidos en <cadena1>,
incluyendo espacios en blanco, no existe en <cadena2>.
Si la condicin es cierta, la variable del sistema SY-FDPOS contendr el OFFSET del
primer carcter de <cadena1> que no existe en <cadena2>, sino contendr la longitud
de <cadena1>.
<cadena1> CA <cadena2>.
La condicin se cumple si alguno de los caracteres contenidos en <cadena1>,
incluyendo espacios en blanco, existe en <cadena2>.
Si la condicin es cierta, la variable del sistema SY-FDPOS contendr el OFFSET del
primer carcter de <cadena1> que existe en <cadena2>, sino contendr la longitud de
<cadena1>.
<cadena1> NA <cadena2>.
La condicin se cumple si ninguno de los caracteres contenidos en <cadena1>,
incluyendo espacios en blanco, existe en <cadena2>.
Si la condicin es cierta, la variable del sistema SY-FDPOS contendr la longitud de
<cadena1>, sino contendr el OFFSET del primer carcter de <cadena1> que existe
en <cadena2>.
<cadena1> CS <cadena2>.
La condicin se cumple si <cadena1> contiene <cadena2>.
Si la condicin es cierta, la variable del sistema SY-FDPOS contendr el OFFSET del
primer carcter de <cadena2> que existe en <cadena1>, sino contendr la longitud de
<cadena1>.
Pg. 23
Curso programacin ABAP IV Curso programacin ABAP IV
<cadena1> NS <cadena2>.
La condicin se cumple si <cadena1> no contiene <cadena2>.
Si la condicin es cierta, la variable del sistema SY-FDPOS contendr la longitud de
<cadena1>, sino contendr el OFFSET del primer carcter de <cadena2> que existe en
<cadena1>.
<cadena> CP <patrn>.
La condicin se cumple si <cadena> contiene el patrn de bsqueda <patrn>. Este
patrn permite utilizar el carcter "* para representar cualquier cadena de caracteres y
el carcter "+ para representar cualquier carcter.
Si la condicin es cierta, la variable del sistema SY-FDPOS contendr el OFFSET del
primer carcter de <cadena2> que existe en <cadena1>, sino contendr la longitud de
<cadena1>.
Ejemplos: La condicin 'Jose Luis Daz' CP 'Jose*Diaz' es verdadera y devuelve el valor
'0' en la variable SY-FDPOS.
La condicin 'JoseLuisDaz' CP 'Jose+Luis' es falsa y devuelve el valor '12' en la
variable SY-FDPOS.
<cadena> NP <patrn>.
La condicin se cumple si <cadena> no contiene el patrn de bsqueda <patrn>.
Si la condicin es cierta, la variable del sistema SY-FDPOS contendr la longitud de
<cadena1>, sino contendr el OFFSET del primer carcter de <cadena2> que existe en
<cadena1>.
&$0$3 Iteracin )*ucles+
Sentencias DO . E%DDO.
Ejecuta las sentencias delimitadas por DO y ENDDO hasta que se ejecute una
sentencia de salida como EXT.
DATA: D_CONTADOR TYPE .
DO.
D_CONTADOR = D_CONTADOR + 1.
F D_CONTADOR = 10.
EXT.
ENDF.
ENDDO.
Las sentencias del bucle DO se ejecutarn hasta que se ejecuta la sentencia EXT, que
finaliza la ejecucin del bucle despus de haber ejecutado las sentencias 10 veces. La
variable D_CONTADOR tendr el valor 10. La variable del sistema SY-NDEX contiene
el nmero de vueltas del bucle. Con la clusula TMES se puede especificar el nmero
mximo de vueltas del bucle.
Pg. 24
Curso programacin ABAP IV Curso programacin ABAP IV
DATA: D_CONTADOR TYPE .
DO 3 TMES.
D_CONTADOR = D_CONTADOR + 1.
F D_CONTADOR = 10.
EXT.
ENDF.
ENDDO.
Las sentencias del bucle DO se ejecutarn 3 veces y la variable D_CONTADOR tendr
el valor 3.
Sentencias IJIE <condicin> . E%DIJIE.
Ejecuta las sentencias delimitadas por WHLE y ENDWHLE hasta que no se cumpla la
condicin especificada o se ejecute una sentencia de salida como EXT.
DATA: D_CONTADOR TYPE .
WHLE D_CONTADOR < 10.
D_CONTADOR = D_CONTADOR + 1.
ENDWHLE.
Las sentencias del bucle WHLE se ejecutarn hasta que se deja de cumplir la
condicin cuando la variable D_CONTADOR alcanza el valor 10. La variable del sistema
SY-NDEX contiene el nmero de vueltas del bucle.
Sentencia CO%TI%!E.
Esta sentencia se utiliza dentro de un bucle y provoca que se finalice la vuelta actual sin
ejecutar las sentencias posteriores y se inicie la ejecucin de la siguiente vuelta del
bucle.
DATA: D_CONTADOR TYPE .,
D_NUMERO TYPE .
WHLE D_CONTADOR < 10.
D_CONTADOR = D_CONTADOR + 1.
F D_CONTADOR > 4.
CONTNUE.
ENDF.
D_NUMERO = D_CONTADOR.
ENDWHLE.
Las sentencias del bucle WHLE se ejecutarn 10 veces pero solamente se ejecuta la
asignacin a la variable D_NUMERO solo se ejecuta las 4 primeras vueltas. Al finalizar
Pg. 25
Curso programacin ABAP IV Curso programacin ABAP IV
la ejecucin del bucle la variable D_CONTADOR tendr el valor 10 y la variable
D_NUMERO el valor 4.
Sentencia CJECN <condicion>.
Esta sentencia, al igual que la sentencia CONTNUE, provoca el final de la ejecucin de
la vuelta actual en un bucle sin ejecutar las sentencias posteriores e iniciando la
ejecucin de la siguiente vuelta cuando no se cumpla la condicin especificada.
DATA: D_CONTADOR TYPE .,
D_NUMERO TYPE .
WHLE D_CONTADOR < 10.
D_CONTADOR = D_CONTADOR + 1.
CHECK D_CONTADOR < 5.
D_NUMERO = D_CONTADOR.
ENDWHLE.
Las sentencias del bucle WHLE se ejecutarn 10 veces pero solamente se ejecuta la
asignacin a la variable D_NUMERO solo se ejecuta las 4 primeras vueltas. Al finalizar
la ejecucin del bucle la variable D_CONTADOR tendr el valor 10 y la variable
D_NUMERO el valor 4. La ejecucin de esta sentencia fuera de un bucle finaliza
inmediatamente la ejecucin de la subrutina donde se ejecuta.
FORM SUMAR USNG PE_NUMERO_1 TYPE
PE_NUMERO_2 TYPE
PS_SUMA TYPE .
CHECK PE_NUMERO_1 > 0 AND
PE_NUMERO_2 > 0.
PS_SUMA = PE_NUMERO_1 + PE_NUMERO_2.
ENDFORM.
Esta subrutina solamente sumar nmeros positivos ya que si alguno de los nmeros
que recibe como parmetros es negativo se finaliza la ejecucin de la subrutina sin
ejecutar el resto de las sentencias.
Sentencia EXT.
Provoca la salida de un bucle o el final de la ejecucin de la subrutina donde se ejecuta.
&$0$0 Aritm,ticas
Sentencia SQRT.
Devuelve la raz cuadrada de un valor.
<campo> = SQRT( <valor> ).
Sentencia ADD.
Pg. 26
Curso programacin ABAP IV Curso programacin ABAP IV
Suma un valor al contenido de un campo.
ADD <valor> TO <campo>.
Tambin se puede utilizar el operador '+'.
<campo> = <campo> + <valor>.
Sentencia SUBTRACT.
Resta un valor al contenido de un campo.
SUBTRACT <valor> FROM <campo>.
Tambin se puede utilizar el operador '-'.
<campo> = <campo> - <valor>.
Sentencia MULTPLY.
Multiplica por un valor el contenido de un campo.
MULTPLY <campo> BY <valor>.
Tambin se puede utilizar el operador '*'.
<campo> = <campo> * <valor>.
Sentencia DV.
Devuelve el cociente de una divisin entera.
<campo> = <valor1> DV <valor2>.
El operador '/' devuelve el cociente con decimales.
<campo> = <valor1> / <valor2>.
Sentencia MOD.
Devuelve el resto de una divisin entera.
<campo> = <valor1> MOD <valor2>.
&$0$2 Tratamiento de cadenas
Sentencia CONCATENATE.
Concatena cadenas en un campo.
CONCATENATE <cadena1> <cadena2> NTO <campo>.
Con la clusula SEPARATED BY se puede especificar un separador entre las cadenas.
Sentencia SHFT.
Elimina caracteres por la izquierda de un campo.
SHFT <campo>.
Pg. 27
Curso programacin ABAP IV Curso programacin ABAP IV
DATA: D_CADENA(8) VALUE 'ABCDEFGH'.
SHFT D_CADENA.
La variable D_CADENA tendr el valor 'BCDEFGH '.
Con la clusula CRCULAR se provoca que los carcteres que se eliminan por la
izquierda se inserten por la derecha de la cadena.
DATA: D_CADENA(8) VALUE 'ABCDEFGH'.
SHFT D_CADENA CRCULAR.
La variable D_CADENA tendr el valor 'BCDEFGHA'.
Sentencia CONDENSE.
Elimina los espacios en blanco por la izquierda de una cadena y reduce los espacios
intermedios consecutivos a un solo espacio.
CONDENSE <campo>.
DATA: D_CADENA(25) VALUE ' JOSE LUS'.
CONDENSE D_CADENA.
La variable D_CADENA tendr el valor 'JOSE LUS'.
Con la clusula NO-GAPS se eliminan todos los espacios de la cadena.
Sentencia TRANSLATE.
Permite convertir a maysculas o minsculas una cadena con las clusulas TO UPPER
CASE y TO LOWER CASE.
TRASLATE <campo> TO UPPER/LOWER CASE.
Sentencia REPLACE.
Reemplaza una parte de una cadena por otra cadena.
REPLACE <subcadena> WTH <subcadena_nueva> NTO <campo>.
DATA: D_CADENA(10) VALUE 'JOSE LUS'.
REPLACE 'JOSE' WTH 'JUAN' NTO D_CADENA.
La variable D_CADENA tendr el valor 'JUAN LUS'.
Sentencia STRLEN.
Devuelve la longitud de una cadena sin tener en cuenta los espacios finales por la
derecha.
Pg. 28
Curso programacin ABAP IV Curso programacin ABAP IV
DATA: D_CADENA(25) VALUE 'JOSE LUS ',
D_LONGTUD TYPE .
D_LONGTUD = STRLEN( D_CADENA ).
La variable D_LONGTUD tendr el valor 9.
&$0$5 -ormateo de .alores
Sentencia WRTE TO.
Escribe un valor en un campo permitiendo formatearlo con diferentes opciones de
formato.
WRTE <valor> TO <campo> <opciones de formato>.
Sentencia PACK.
Almacena un valor en formato empaquetado en el campo especificado.
PACK <valor> TO campo.
Sentencia UNPACK.
Desempaqueta un valor y lo almacena con ceros a la izquierda en el campo
especificado.
UNPACK <valor> TO <campo>.
&$0$6 Mensa/es
En los programas ABAP se pueden mostrar mensajes creados previamente en una
clase de mensajes utilizando la instruccin ME""A'E.
MESSAGE <tipo>NNN(<clase>)
Existen los siguientes tipos de mensajes:
In4ormati.os (tipo "): Se visualiza el mensaje en una
ventana y continua la ejecucin del programa al pulsar la tecla NTRO.
O=ito (Success, tipo "S): Se visualiza el mensaje en la
barra de status en la siguiente pantalla y continua con la ejecucin del programa al
pulsar la tecla NTRO.
Error (Error, tipo "E): Se visualiza el mensaje en la barra
de status e interrumpe el programa en funcin del tipo de programa (listado, module
pool, etc.) al pulsar la tecla NTRO.
Ad.ertencia (Warning, tipo "W): Se visualiza el mensaje
en la barra de status y, si se pulsa la tecla ESCAPE permite realizar modificaciones en
funcin del tipo de programa, y si se pulsa la tecla NTRO continua con la ejecucin del
programa.
-inali:acin (Abend, tipo "A): Se visualiza el mensaje en
la barra de status y finaliza la ejecucin del programa al pulsar la tecla NTRO.
"alida (eXit, tipo "X): Finaliza la ejecucin del programa
provocando un error en tiempo de ejecucin (DUMB).
Pg. 29
Curso programacin ABAP IV Curso programacin ABAP IV
Para tratar los mensajes de una clase de mensajes se ejecuta la opcin de men
'Herramientas Workbench Abap/4 Desarrollo Entorno de programacin
Mensajes'.
&$0$1 Comentarios
En el cdigo de los programas se debern introducir comentarios que ayuden a
comprender su lgica de proceso y as facilitar su mantenimiento posterior. Existen dos
tipos de comentarios:
Comentario en lGnea: Al especificar el carcter " en una
lnea de programa, todos los literales que se escriban a su derecha hasta el final de la
lnea se considerarn comentarios.
Gnea de comentario: Al especificar el carcter * en la
primera posicin de una lnea de texto, todos los literales de la lnea se considerarn
comentarios.
&$2 Tratamiento de ta*las internas
Las tablas internas se almacenan en memoria y no en el diccionario de datos. Es
frecuente su utilizacin para almacenar datos seleccionados de las tablas de la base de
datos para procesarlos posteriormente, permitiendo ordenar dichos datos de diversas
formas y tenerlos disponibles en todo momento, evitando accesos a la base de datos
que penalizaran el rendimiento de los programas.
&$2$# Declaracin
Las tablas internas se declaran con la sentencia DATA.
DATA: BEGN OF <tabla> OCCURS n,
.
END OF <tabla>.
La clusula OCC!R" determina el nmero de registros de la tabla interna que se
almacenarn en memoria principal, no el tamao de la tabla, almacenndose el resto de
registros en un rea de paginacin. Hay que tener especial cuidado al establecer este
nmero porque si se define demasiado pequeo provoca un acceso ms lento a la tabla
y si es muy grande puede provocar que el rea de almacenamiento destinado por SAP
(ROLL AREA) se agote. Si no estamos seguros del nmero a especificar es
recomendable asignarle cero para indicar que lo gestione SAP.
Tambin se puede utilizar la instruccin I%C!DE "TR!CT!RE en la declaracin de
tablas internas de la misma forma que en las estructuras.
DATA: BEGN OF _PROVEEDORES OCCURS 0,
CODGO LKE LFA1-LFNR,
NOMBRE LKE LFA1-NAME1,
CUDAD LKE LFA1-ORT01,
Pg. 30
Curso programacin ABAP IV Curso programacin ABAP IV
FECHA TYPE D,
END OF _PROVEEDORES.
Al declarar una tabla interna se define automticamente una lnea de cabecera con la
estructura de la tabla. Esta lnea de cabecera es una estructura con el nombre de la
tabla interna que nos permite recuperar, modificar o borrar registros de la misma.
&$2$& Creacin de registros
La sentencia APPEND permite crear una entrada al final de una tabla interna con los
datos almacenados en la lnea de cabecera de la tabla. La variable del sistema SY-
TABX almacenar el ndice del nuevo registro creado.
FORM AADR_MATERAL USNG VALUE(PE_CODGO) LKE _MATERALES-
CODGO
VALUE(PE_NOMBRE) LKE _MATERALES-NOMBRE
VALUE(PE_CANTDAD) LKE _MATERALES-CANTDAD.
MOVE: PE_CODGO TO _MATERALES-CODGO,
PE_NOMBRE TO _MATERALES-NOMBRE,
PE_CANTDAD TO _MATERALES-CANTDAD.
APPEND _MATERALES.
ENFORM.
Esta subrutina crea entradas en la tabla de materiales con los datos recibidos como
parmetros.
La sentencia COLLECT permite crear entradas en una tabla interna acumulando el
contenido de los campos numricos (tipos P, o F).
Si no existe ningn registro en la tabla interna en el que coincidan los datos no
numricos almacenados en la lnea de cabecera, se aadir un nuevo registro en la
tabla, sino se acumular el contenido de los campos numricos almacenados en la lnea
de cabecera en el registro. La variable del sistema SY-TABX almacenar el ndice del
nuevo registro creado o del registro acumulado.

PERFORM ACUMULAR_MATERAL USNG '1'
'MATERAL'
10.
PERFORM ACUMULAR_MATERAL USNG '2'
'MATERAL'
20.
PERFORM ACUMULAR_MATERAL USNG '1'
'MATERAL'
5.
FORM ACUMULAR_MATERAL USNG VALUE(PE_CODGO) LKE _MATERALES-
CODGO
Pg. 31
Curso programacin ABAP IV Curso programacin ABAP IV
VALUE(PE_NOMBRE) LKE _MATERALES -NOMBRE
VALUE(PE_CANTDAD) LKE _MATERALES-CANTDAD.
MOVE: PE_CODGO TO _MATERALES-CODGO,
PE_NOMBRE TO _MATERALES-NOMBRE,
PE_CANTDAD TO _MATERALES-CANTDAD.
COLLECT _MATERALES.
ENDFORM.
Al finalizar la ejecucin la tabla de materiales almacenar las siguientes entradas:
CODI'O %OMBRE CA%TIDAD
1 MATERAL 15
2 MATERAL 20
&$2$3 ectura de registros
La sentencia READ TABLE permite leer un registro de una tabla interna especificando
un argumento de bsqueda con la clusula WTH KEY <campo1> = <valor1> <campo2>
= <valor2>.
Si se logra leer el registro se almacenar en la lnea de cabecera de la tabla, la variable
del sistema SY-SUBRC contendr el valor '0' y la variable SY-TABX el ndice del
registro ledo.
Si no se logra leer el registro la lnea de cabecera de la tabla no se modificar, la
variable del sistema SY-SUBRC contendr un valor distinto de '0' y la SY-TABX el valor
'0'.
READ TABLE _MATERALES WTH KEY CODGO = '1'.
La lnea de cabecera contendr los siguientes valores (en funcin de los registros
aadidos en el ejemplo anterior de creacin de registros):
CODI'O %OMBRE CA%TIDAD
1 MATERAL 15
La variable SY-SUBRC almacenar el valor '0'.
La variable SY-TABX almacenar el valor '1'.
&$2$0 Modi4icacin de registros
La sentencia MODFY permite modificar un registro de una tabla con los datos
almacenados en la lnea de cabecera especificando el ndice del registro con la clusula
NDEX.
Si se logra modificar el registro la variable del sistema SY-SUBRC contendr el valor '0'.
Pg. 32
Curso programacin ABAP IV Curso programacin ABAP IV
READ TABLE _MATERALES WTH KEY CODGO = '1'.
F SY-SUBRC = 0.
_MATERALES-CANTDAD = 25.
MODFY _MATERALES NDEX SY-TABX.
ELSE.
WRTE 'NO EXSTE EL MATERAL'.
ENDF.
El primer registro de la tabla se habr modificado con los valores almacenados en la
lnea de cabecera (en funcin de los registros utilizados en el ejemplo anterior de
creacin de registros):
CODI'O %OMBRE CA%TIDAD
1 MATERAL 25
La variable SY-SUBRC almacenar el valor '0'.
La variable SY-TABX almacenar el valor '1'.
Se pueden realizar modificaciones masivas en una tabla interna utilizando la clusula
TRANSPORTNG <campo1> <campo2> . WHERE <campo> = <valor>. El valor
almacenado en la lnea de cabecera de los campos especificados se modificar en
todos los registros que cumplan la condicin especificada.
CLEAR _MATERALES-CANTDAD.
MODFY TABLE _MATERALES
TRANSPORTNG CANTDAD
WHERE CODGO > '0'
AND CODGO < '101'.
Se modificar con el valor '0' el campo cantidad en todos los materiales de la tabla cuyo
cdigo este comprendido entre '1' y '100'.
&$2$2 Borrado de registros
La sentencia DELETE permite borrar un registro de una tabla interna especificando el
ndice del registro con la clusula NDEX.
Si se logra borrar el registro, la variable del sistema SY-SUBRC contendr el valor '0'.
READ TABLE _MATERALES WTH KEY CODGO = '1'.
F SY-SUBRC = 0.
DELETE _MATERALES NDEX SY-TABX.
ELSE.
WRTE 'NO EXSTE EL MATERAL'.
ENDF.
El registro del material con cdigo '1' se ha borrado de la tabla interna. La variable SY-
SUBRC almacenar el valor '0'.
Pg. 33
Curso programacin ABAP IV Curso programacin ABAP IV
Especificando una condicin de borrado con la clusula WHERE se borrarn todas las
entradas de la tabla interna que cumplan la condicin (est clusula es incompatible con
la clusula NDEX).
Tambin se pueden borrar todas las entradas de una tabla interna con la instruccin
RE-RE"J <tabla>
&$2$5 Tratamiento de registros
La sentencia LOOP . ENDLOOP permite tratar individualmente los registros de la tabla
interna, generando un bucle en el que se va informando cada registro en la lnea de
cabecera y ejecutando las instrucciones especificadas entre las dos sentencias en cada
vuelta.
Utilizando la clusula WHERE <condicion> se puede especificar una condicin para
tratar solamente una parte de los registros de la tabla.
FORM TOTALZAR_MATERALES USNG VALUE(PE_CODGO) LKE
_MATERALES-CODGO.
PS_CANTDAD LKE _MATERALES-CANTDAD.
CLEAR PS_CANTDAD.
LOOP AT _MATERALES WHERE CODGO = PE_CODGO.
PS_CANTDAD = PS_CANTDAD + _MATERALES-CANTDAD
ENDLOOP.
ENDFORM.
La sentencia "ORT ordena los registros de la tabla interna, se pueden especificar el
/los campo(s) por los que hay que ordenar as como el orden ascendente o
descendente.
SORT _MATERALES BY CODGO DESCENDNG.
Ordena los registros de la tabla interna por cdigo de material de forma descendente.
Por defecto, los registros de la tabla interna se ordenan de forma ascendente por la
clave por defecto, compuesta por los campos no numricos de la tabla.
La sentencia DE"CRIBE TABE nos permite obtener las caractersticas de la tabla
interna, entre ellas el nmero de registros que contiene la tabla utilizando la clusula
I%E" <variable> .
&$5 Tratamiento de ta*las del diccionario de datos
El diccionario de datos est perfectamente integrado con el entorno de desarrollo y
cualquier modificacin que se realice en una tabla del diccionario se reflejar
automticamente en los programas que la utilicen.
Pg. 34
Curso programacin ABAP IV Curso programacin ABAP IV
&$5$# Declaracin
Las tablas del diccionario de datos se declaran con la sentencia TABE".
TABLES: <tabla1>, <tabla2>.
Al declarar una tabla del diccionario se define automticamente una lnea de cabecera
con la estructura de la tabla. Esta lnea de cabecera es una estructura con el nombre de
la tabla que nos permite recuperar, modificar o borrar registros en la misma.
&$5$& Creacin de registros
La sentencia NSERT permite crear una entrada con los datos almacenados en la lnea
de cabecera de la tabla.
No se podr aadir un registro si ya existe uno en la tabla con la misma clave primaria o
con la misma clave de un ndice de valores nicos.
Si la insercin del registro es correcta la variable SY-SUBRC devolver '0' y si se
produce un error en la insercin porque ya existe un registro con la misma clave
devolver el valor '4'.
FORM AADR_MATERAL USNG VALUE(PE_CODGO) LKE _MATERALES-
CODGO
VALUE(PE_NOMBRE) LKE _MATERALES-NOMBRE
VALUE(PE_CANTDAD) LKE _MATERALES-CANTDAD.
MOVE: PE_CODGO TO MATERALES-CODGO,
PE_NOMBRE TO MATERALES-NOMBRE,
PE_CANTDAD TO MATERALES-CANTDAD.
NSERT MATERALES.
F SY-SUBRC <> 0.
WRTE 'ERROR'.
ENDF.
ENFORM.
Esta subrutina crea entradas en la tabla del diccionario MATERALES con los datos
recibidos como parmetros.
&$5$3 ectura de registros por cla.e
La sentencia SELECT con la clusula SNGLE permite leer un registro de una tabla del
diccionario de datos especificando su clave primaria como condicin de bsqueda.
SELECT SNGLE * FROM <TABLA>
WHERE <condiciones>.
Si se logra leer el registro, se almacenar en la lnea de cabecera de la tabla y la
variable del sistema SY-SUBRC contendr el valor '0', sino la variable del sistema SY-
Pg. 35
Curso programacin ABAP IV Curso programacin ABAP IV
SUBRC contendr un valor distinto de '0' y la lnea de cabecera de la tabla no se
modificar.
Si se especifica la clusula NTO, el registro ledo se almacenar en la estructura
especificada en lugar de almacenarse en la lnea de cabecera.
SELECT SNGLE * FROM <TABLA>
NTO <registro>
WHERE <condiciones>.
Se pueden recuperar campos especficos del registro enumerndolos en lugar de
especificar el carcter "*, siendo necesario en ese caso especificar la clusula NTO
con una estructura que coincida exactamente con los campos seleccionados o
enumerando los campos de destino (entre parntesis si son varios).
SELECT SNGLE <campo1> <campo2> FROM <TABLA>
NTO (<campo1>, <campo2>)
WHERE <condiciones>.
Si no se especifica la clave primaria completa de la tabla como condicin de bsqueda,
se leer el primer registro que cumpla la condicin.
SELECT SNGLE *
FROM MATERALES
WHERE CODGO = 1.
Se seleccionar en la cabecera de la tabla el registro del material que contenga el valor
"1 en el campo CODGO, que es el campo que forma la clave primaria de la tabla.
Se puede seleccionar un registro de una tabla y bloquearlo para que no pueda ser
modificado por otros procesos utilizando la clusula SNGLE FOR UPDATE y
especificando obligatoriamente la clave completa de la tabla como criterio de seleccin.
&$5$0 Modi4icacin de registros
La sentencia UPDATE permite modificar un registro de una tabla del diccionario con los
datos almacenados en la lnea de cabecera, no debiendo estar modificados los valores
de los campos clave de la tabla.
UPDATE <tabla>.
Utilizando la clusula SET se podrn especificar los campos que se van a modificar,
pudiendo modificar tambin los campos clave de la tabla y no teniendo en cuenta los
valores almacenados en la lnea de cabecera. Al utilizar esta clusula se deber tener
especial cuidado, ya que actualizar todos los registros de la tabla a menos que se
especifique la clusula WHERE para delimitar los registros que queremos modificar.
UPDATE <tabla> SET <campo1> = <valor1> <campo2> = <valor2>
WHERE <condiciones>.
Pg. 36
Curso programacin ABAP IV Curso programacin ABAP IV
Despus de ejecutar una sentencia UPDATE, la variable del sistema SY-SUBRC
contendr el valor "0 si se ha logrado modificar al menos un registro y la variable SY-
DBCNT contendr el nmero de registros que han sido modificados.
UPDATE MATERALES
SET CANTDAD = CANTDAD + 1
WHERE CODGO > 0
AND CODGO < 101.
Esta sentencia incrementa en una unidad el campo CANTDAD en todos los materiales
que tengan un valor comprendido entre 1 y 100 en el campo CODGO.
&$5$2 Borrado de registros
La sentencia DELETE permite borrar un registro de una tabla cuya calve primaria
coincida con la almacenada en la lnea de cabecera. Si se logra borrar el registro, la
variable del sistema SY-SUBRC contendr el valor '0'.
MATERALES-CODGO = '1'.
DELETE MATERALES.
Borrar el registro correspondiente al material cuyo cdigo es '1'.
Tambin se pueden borrar uno o ms registros de una tabla del diccionario
especificando una condicin de borrado.
DELETE <tabla> WHERE <condiciones>.
&$5$5 Tratamiento de registros
Las sentencias SELECT...ENDSELECT permiten tratar individualmente los registros de
una tabla del diccionario, generando un bucle en el que se va informando cada registro
en la lnea de cabecera y ejecutando las instrucciones especificadas entre las dos
sentencias en cada vuelta.
FORM TOTALZAR_MATERALES
USNG VALUE(PE_CODN) LKE Z_MATERALES-CODGO
VALUE(PE_CODFN) LKE Z_MATERALES-CODGO
PS_TOTAL LKE Z_MATERALES-CANTDAD.
SELECT * FROM Z_MATERALES
WHERE CODGO >= PE_CODN
AND CODGO <= PE_CODFN.
PS_TOTAL = PS_TOTAL + Z_MATERALES-CANTDAD.
ENDSELECT.
ENDFORM.
Pg. 37
Curso programacin ABAP IV Curso programacin ABAP IV
Esta subrutina totalizar en el parmetro de salida PS_TOTAL la cantidad de los
materiales almacenados en la tabla del diccionario Z_MATERALES, cuyo cdigo est
comprendido entre los recibidos en los parmetros de entrada PE_CODN y
PE_CODFN.
Cuando se van a tratar grandes cantidades de registros de una tabla del diccionario, es
preferible almacenar los registros en una tabla interna con la clusula NTO TABLE
<tabla_interna> y realizar un tratamiento posterior de dicha tabla. Esta clusula provoca
la realizacin de un slo acceso de lectura a la tabla del diccionario, en lugar de realizar
una lectura por cada registro recuperado, optimizndo as el tiempo de ejecucin del
programa. En este caso no se genera un bucle para el tratamiento de los registros, por
lo que no se utiliza la sentencia ENDSELECT.
La tabla interna especificada en la clusula NTO TABLE debe tener la misma
estructura que los campos recuperados de la tabla del diccionario, sino es as, se puede
utilizar en su lugar la clusula NTO CORRESPONDNG FELDS OF TABLE
<tabla_interna> para almacenar los valores recuperados de la tabla del diccionario en
los campos de la tabla interna que tengan el mismo nombre y tipo.
En un bucle SELECT...ENDSELECT no se puede ejecutar ninguna instruccin que
provoque una actualizacin de la base de datos (CALL SCREEN, CALL
TRANSACTON, MESSAGE, COMMT-WORK, etc), ya que se producira un error en
tiempo de ejecucin del programa. Al procesar los datos utilizando una tabla interna se
elimina esa limitacin.
DEBUGGNG (-ATA)
3$ Diccionario
El Diccionario de datos lo componen todas las definiciones de datos, tipos de datos as
como las tablas de la base de datos en la que se almacenan los datos.
El diccionario, lo componen todos los objetos tanto los Estndares como los
desarrollados a medida.
Para llegar al men de gestin del diccionario:
Ruta de acceso: (En el men principal de SAP) Herramientas Workbench ABAP4
DesarrolloDictionary (SE11).
Llegaremos a la pantalla principal del diccionario:
Pg. 38
Curso programacin ABAP IV Curso programacin ABAP IV
3$& Dominios$
Un dominio es el objeto que define las caractersticas tcnicas de un atributo. Mediante
el dominio se definen el tipo de datos, longitud, valores posibles, propiedades de salida
(Por pantalla, impresin.).
reacin 3 ,odi4icacin 3 1isuali5acin6
En el men diccionario, introducimos el nombre del Dominio de datos que vamos a
crear, en nuestro caso Z,ESES22, seleccionamos la opcin "Dominios. Pulsamos el
botn de Crear (El procedimiento es similar para visualizar
y modificar ), tambin podemos acceder a estas
opciones a travs del men 'Objeto Dict '
Llegaremos a la siguiente pantalla:
Pg. 39
Curso programacin ABAP IV Curso programacin ABAP IV
En la pestaa !e4inicin:
Descripcin *re.e: Descripcin del dominio a crear, ha de ser un texto explicativo del
dominio. En nuestro caso escribiremos 7,eses de A8o96
Tipo de datos: Seleccionaremos uno de los tipos existentes eligiendo el que mejor se
adapte a las caractersticas del objeto que estamos definiendo. En nuestro caso
seleccionaremos 7'AR9
Los tipos de datos existentes se pueden visualizar (F4) nos mostrar la siguiente
ventana:
Pg. 40
Curso programacin ABAP IV Curso programacin ABAP IV
ongitud: Se corresponder al tamao deseado. En nuestro caso &ondremos :;6
Los elementos del marco Atributos de salida, varan dependiendo del tipo datos
seleccionado as por ejemplo para el tipo CHAR tendremos la opcin de minsculas y
para un tipo CURR tendremos la opcin del signo.
ongitud de salida: Representa la longitud en la que se va a representar el valor a la
hora de imprimirse en un informe, visualizarse en una pantalla, etc. (!e<amos en (alores
&ro&uestos :;)
Rutina de con.ersin: Es una referencia a los procedimientos de conversin entre el
formato interno del dato y su representacin externa. (En blanco)
-lag de Min>sculas: Se permite la utilizacin de letras minsculas (No marcado).
En la pestaa de =mbito 1al:
Representa el rango de datos vlidos que puede tomar dicho atributo (El sistema realiza
comprobaciones automticas verificando que el valor introducido por pantalla est
dentro de los valores vlidos). Para definir estos valores (no siempre es necesario) hay
dos posibilidades:
- Que estos valores estn almacenados en una tabla, en cuyo caso introduciremos aqu
el nombre de la tabla.
- O bien fijar los valores directamente, bien valores individuales, bien rangos o intervalos
de valores.
Pg. 41
Curso programacin ABAP IV Curso programacin ABAP IV
Como vemos, podemos introducir valores fijos junto con su descripcin as como
introducir intervalos de valores introduciendo el lmite inferior y superior.
Una vez completados todos los campos deseados grabamos el dominio mediante la
opcin grabar (F11)
Cuando grabemos por primera vez (no as en las modificaciones) nos preguntar por la
clase de desarrollo a la que pertenece el objeto. La clase de desarrollo sirve para
agrupar objetos pertenecientes a una misma aplicacin y de esta manera poder
transportar los objetos. Utilizaremos la clase de desarrollo '$TMP' que es la
correspondiente a los objetos locales y pulsamos el botn de grabar o bien pulsamos
directamente el botn que asignar directamete la clase de sarrollo temporal
(Esto es extensible a todos los objetos posibles , dominios , elementos de datos ,
tablas , programas .) .
Una vez grabado el dominio, verificamos que no contiene errores para ello pulsamos el
botn de verificar (Ctrl. + F2), posteriormente ser necesario activarlo para poder
ser utilizado pulsaremos el botn de activar (Ctrl. + F3). (Es necesario activar los
objetos que se crean ya que hasta que no son activados no podrn ser utilizados en
otros objetos).
La modificacin de un dominio, se hace de manera similar, pondremos el nombre del
dominio a modificar y pulsaremos la opcin de modificar, una vez realizadas las
modificaciones oportunas a las caractersticas del dominio grabamos (F11),
verificamos (Ctrl. + F2) y activamos (Ctrol + F3).
(Crearemos los siguientes dominios:).
Dominio Tipo ong$ Descripcin
ZNLIE22 'AR :; N>mero de cliente
ZNO,/22 'AR ?; Nombre cliente
ZA"ELL22 'AR ?@ A&ellidos
ZNFAT22 'AR :; N>mero de 4actura
ZFE'A22 !ATS A FecBa
ZI,"NT22 +RR :C Im&orte
3$3 Elementos de datos$
Si el dominio representa la parte tcnica de un atributo, el elemento de datos representa
la parte funcional del atributo, es decir, su descripcin semntica.
reacin 3 ,odi4icacin 3 1isuali5acin6
En el men diccionario:
Pg. 42
Curso programacin ABAP IV Curso programacin ABAP IV
Seleccionamos la opcin "Tipo de Datos, introducimos el nombre del Elemento de
datos que vamos a crear, (en nuestro caso Z,ESFA22..
Pulsamos la opcin de Crear.
Seleccionamos la opcin 'Elem. Datos', llegaremos a la siguiente pantalla:
Descripcin *re.e: ntroduciremos una descripcin representativa del objeto. )7,es
de la 4actura9..
En la pestaa !e4inicin:
Opcin Ti&o elemental:
Dominio: Dominio al que hace referencia el elemento de datos. )Z,ESES22.6
Tipo Instalado: Tipo de datos y longitud con el mismo significado que el que se define
en los dominios.
ID parCmetro: Permite referenciar a un parmetro de memoria SAP. Ser til para
mostrar valores por defecto en pantallas, ya que este campo se completar con el valor
que tenga el parmetro de memoria SAP al mostrar la pantalla6 )En nuestro caso lo
de<amos en blanco6.
En la pestaa !enom6 am&o: Estos campos corresponden a la descripcin del objeto,
estos, son los textos que se mostrarn en los diferentes lugares donde se hagan
referencia al campo que utilicen el elemento de datos , por ejemplo en cabeceras de
Pg. 43
Curso programacin ABAP IV Curso programacin ABAP IV
informes al visualizar contenidos de tablas, en pantallas. El campo longitud representa
el espacio en el que se va a escribir el texto.
)En nuestro casoD ,es Fac6* ,es de 4actura* ,es de la 4actura6
En el cam&o lonEitud &ondremos los (alores &ro&uestosD :;* :@* ?;.6
Una vez completado, grabamos (F11), verificamos (Ctrl. + F2) y activamos
(Ctrl. + F3).
)rearemos los siEuientes elementos de datos D.
Elem$ Datos Dominio Descripcin
ZNLIE22 ZNLIE22 N>mero de cliente
ZNO,/22 ZNO,/22 Nombre cliente
ZA"EL:22 ZA"ELL22 "rimer A&ellido
ZA"EL?22 ZA"ELL22 SeEundo A&ellido
ZNFAT22 ZNFAT22 N>mero de 4actura
ZFE'A22 ZFE'A22 FecBa 4actura
ZI,"NT22 ZI,"NT22 Im&orte neto
3$0 Ta*las$
%&'&( Creacin de una tab)a&
Una tabla representa un conjunto de atributos de una entidad. Esta formada por campos
que se corresponden con cada uno de los atributos. Cada uno de ellos har referencia a
un elemento de datos.
Creacin / Modificacin / Visualizacin.
En el men diccionario introducimos el nombre de la tabla que vamos a crear, en
nuestro caso ZLIEN22, seleccionamos la opcin "Tablasy pulsamos la opcin de
Crear.
Pg. 44
Curso programacin ABAP IV Curso programacin ABAP IV
Descripcin *re.e: Descripcin significativa de la tabla. ),aestro de clientes.
Pestaa Atributos:
Clase de entrega: ndica quin es el responsable del mantenimiento de la tabla, si es
una tabla de parametrizacin,. ("ondremos de ti&o A )A&licacin..6
Permitida Actuali:acin ta*la: Habilita/ Deshabilita la posibilidad de que el contenido
de la tabla pueda ser modificado en la transaccin de visualizacin del contenido de la
tabla. (Si no se marca no se podrn modificar los registros de la tabla por esta
transaccin). ),arcamos con una 2.
Pestaa am&os:
%om*re campo: Nombre del campo.
Cla.e: ndica si el campo forma parte de la clave primaria de la tabla. Un campo o
conjunto de campos son clave en una tabla si determinan de forma unvoca un nico
registro de dicha tabla. Toda tabla tiene que tener clave primaria.
Tipo de datos: Nombre del elemento de datos que describe al campo. (*)
Tipo y longitud: Tipo de dato y longitud. (*)
Ta*la de Veri4icac$: En est tabla aparecer un '*' cuando el elemento de datos
introducido, haga referencia a un dominio que tenga una tabla de valores permitidos, o
bien cuando se asocie una clave externa (Visto ms adelante).
Descripcin *re.e: Descripcin del campo. (*)
Pg. 45
Curso programacin ABAP IV Curso programacin ABAP IV
(*) Podemos crear campos en la tabla que no necesariamente han de estar vinculados a
un elemento de datos, si no que directamente le podemos asignar un tipo, longitud y
descripcin. Mediante el botn de esta manera se
habilitan para entrada estos campos. Para volver a introducir tipos de datos pulsaremos
nuevamente esta opcin. (Aunque existe esta posibilidad, no es muy recomendable).
Pestaa am&os moneda3cantidad:
Ta*Re4 y Cpo Re4$: Solamente los tipos de datos de importe (CURR) y cantidad
(QUAN), necesitan ser referenciados a otros campos del diccionario. Para ellos es
obligatorio completar estos valores (tabla + campo). Estos campos de referencia
debern de ser del tipo Moneda (CUKY) para importes y Unidad (UNT) para cantidades
De esta forma, cuando se visualicen datos (en pantallas, pantallas de seleccin.)
sern formateados con el valor que contenga el campo al que han sido referenciados.
A8adimos a la tabla los cam&osD
Campo Cl$ Elem$ Datos Tipo ong Descripcin
,AN!T 2 ,AN!T ,andante
/+FRS 2 /+FRS Sociedad
NLIE 2 ZNLIE22 NG de identi4icacin cliente
NO,/R ZNO,/22 Nombre cliente
A"EL: ZA"EL:22 "rimer a&ellido
A"EL? ZA"EL?22 SeEundo a&ellido
FNAI !ATS A FecBa de nacimiento
Nota: El campo MANDT, mandante, se aade como un atributo en las tablas de esta
forma, se pueden tener varias colecciones de datos distintas segn el mandante. En las
selecciones, actualizaciones. de la tabla este campo es trasparente ya que tendr
siempre el valor indicado al iniciar la sesin en el sistema. (No es obligatorio definir el
mandante en todas las tablas aunque si es lo ms habitual).
OPCIO%E" TOC%ICA"
Una vez completados todos los campos, grabamos la tabla (F11). Posterioremente
ser necesario completar las definiciones tcnicas de la tabla para ello seleccionaremos
la opcin de men 'Pasar a Opciones tcnicas' o el botn . Aparecer
la siguiente pantalla , donde hay que completar los campos:
Pg. 46
Curso programacin ABAP IV Curso programacin ABAP IV
Clase Datos: Con la clase de datos se define de forma lgica el mbito fsico en la base
de datos en el que se grabar la tabla. Este lugar fsico donde se ubicar la tabla se
determinar en funcin del tipo de utilizacin de la tabla, es decir, predominio de
actualizaciones consultas.. Por ejemplo una tabla con datos maestros sufrir pocas
actualizaciones y muchas consultas. )"ara nuestro e<em&lo seleccionaremos A""L;.
CategorGa tamaBo: Determina el nmero aproximado de registros que va a albergar la
tabla. )Seleccionamos tama8o C.
Una vez completados, pulsamos el botn verificar (Ctrl. + F2) y grabamos botn
(F11). Volveremos a la pantalla inicial con el botn (F3) verificamos (Ctrl. + F2)
y activamos la tabla (Ctrl. + F3).
%&'&* +ndices&
Un ndice es la ordenacin de los registros de una tabla, por uno o varios de los campos
que la componen Por tanto la definicin de un ndice consisten en la enumeracin de los
campos que lo componen.
Para crear un ndice a una tabla, en la pantalla:
Pg. 47
Curso programacin ABAP IV Curso programacin ABAP IV
Pulsamos la opcin de men 'Pasar a ndices' o el botn
Si no hay ningn ndice creado para la tabla aparecer la siguiente ventana:
Al pulsar la opcin 'Si' aparecer la ventana donde nos pide un identificador para el
ndice6 )"ondremos Z;:).
Pg. 48
Curso programacin ABAP IV Curso programacin ABAP IV
A continuacin aparece la pantalla donde se introducen los campos que forman en
ndice.

Descripcin *re.e: Descripcin del ndice. )Hndice &or 4ecBa de nacimiento6.
Indice >nico ; no >nico: Si marcamos la opcin ndice nico haremos que el ndice sea
nico, es decir que no se podrn repetir entradas iguales en la tabla para los campos
que formen el ndice. En nuestro ejemplo si marcamos el ndice como nico no se
podrn insertar en la tabla dos clientes que nacieran el mismo da. ),arcamos el ndice
como no >nico.6
Campos: Campos que forman el ndice. Pondremos el nombre de los campos o bien
podemos seleccionarlos mediante el botn . )En nuestro caso
seleccionaremos los cam&os ,AN!T y FNAI.6
Cuando se han completado los datos grabamos (F11), verificamos (Ctrl. + F2) y
activamos (Ctrl. + F3).
Para modificar el ndice pulsaremos el botn nos mostrar una ventana con
los ndices existentes :
Pg. 49
Curso programacin ABAP IV Curso programacin ABAP IV
Podremos seleccionar uno de los existentes para modificarlo o crear uno nuevo
En general los ndices permiten acelerar las operaciones de consulta, pero en
contraposicin ralentizan las actualizaciones ya que cada actualizacin de alguno de los
registros de la tabla ha de actualizar el/los ndices de la misma. Por tanto a la hora de
crear ndices hay que valorar bien su utilidad y repercusiones.
Toda tabla est ordenada por los campos clave, luego hay un 'ndice' implcito por estos
campos, y no tendr sentido definir un ndice con los todos los campos clave. (En el
ejemplo sera absurdo definir un ndice con los campo MANDT, BUKRS y NCLE).
%&'&% ,isua)i-ar ! .odi/icar Contenido de tab)a&
Una vez que la tabla est definida, podemos almacenar informacin para ello dentro de
la pantalla de definicin de la tabla seleccionamos la opcin de men 'Utilidades
Contenido tablaRegistrar entradas' aparecer una pantalla en la que introducir cada
uno de los registros:
Pg. 50
Curso programacin ABAP IV Curso programacin ABAP IV
ntroducimos los datos y pulsamos (F11).
Para visualizar los registros de la tabla seleccionaremos la opcin de men
'UtilidadesContenido tabla Visualizar'.
Aparecera una pantalla de seleccin de la tabla donde se podrn indicar los criterios de
bsqueda.
Pg. 51
Curso programacin ABAP IV Curso programacin ABAP IV
Pulsando visualizaremos el contenido de la tabla en forma de listado.
Pg. 52
Curso programacin ABAP IV Curso programacin ABAP IV
Desde esta pantalla podremos, crear nuevas entradas y visualizar , modificar
y borrar ('Entrada en Tabla Borrar ') las existentes.
Existen otras formas de llegar a la visualizacin del contenido de una tabla sin pasar por
la transaccin del diccionario de datos.
Con la transaccin "E#5, indicaremos el nombre de la tabla y llegaremos directamente
a la pantalla de seleccin de datos de la tabla.
Con la transaccin "M3< (slo si hemos generado las vistas de dilogo de actualizacin
de la tabla).
%&'&' ,istas ! Di0)ogo de actua)i-acin& GENER"CION "CTU"LI1"CION DE
T"BL"S
Un dilogo de actualizacin de una tabla es un conjunto de programas cuya utilidad es
el mantenimiento del contenido de la tabla. Cuando creamos el dilogo sobre una tabla,
se generan estos programas de forma automtica.
Aunque no es estrictamente necesario crear este dilogo para mantener las tablas si es
muy aconsejable para aquellas tablas que el usuario mantiene ya que de esta forma se
puede controlar de manera sencilla la seguridad de la tabla. (Esta opcin es muy
utilizada en las tablas de parametrizacin, por ejemplo).
Pg. 53
Curso programacin ABAP IV Curso programacin ABAP IV
Para generar el dilogo, la tabla ha de estar activada. Una vez activada seleccionamos
la opcin de men 'Utilidades Generador Actualiz.Tab.' llegaremos a la siguiente
pantalla:
'rupo de autori:aciones: Mediante este campo, se puede controlar la seguridad sobre
el mantenimiento de la tabla, es decir, limitar los usuarios que puedan modificar el
contenido de la tabla. Solamente podrn realizar modificaciones aquellos usuarios que
tengan autorizacin sobre el grupo de autorizaciones indicado. Si deseamos no
controlar la autorizacin pondremos en este campo el valor por defecto '&NC&'. )En
nuestro caso &ondremos este (alor.6
'rupo de 4unciones: Es necesario indicar un grupo de funciones en el que se incluirn
las funciones, dynpros y dems objetos del dilogo de actualizacin. Aunque podemos
indicar aqu cualquier grupo de funciones ya existente, es conveniente indicar uno
nuevo o bien un grupo que contenga una funcionalidad similar, el dilogo de
actualizacin de otra tabla, por ejemplo. )En nuestro caso &ondremos Z#22.6
Tipo de actuali:acin: Marcar uno o dos niveles har que se generen una o dos
pantallas de mantenimiento. Si marcamos un nivel solamente se generar una pantalla
(imagen resumen) que muestra el contenido de todos los registros de la pantalla, si dos
niveles adems de la pantalla anterior (imagen resumen) se genera una segunda
(imagen sencilla) con el detalle de cada uno de los registros. )Seleccionamos dos
ni(eles.6
ImCgenes actuali:acin: Representan el nmero de dynpro que se asignar a cada
una de las dos pantallas que se generan. Podemos indicar dos nmeros de dynpro que
Pg. 54
Curso programacin ABAP IV Curso programacin ABAP IV
no existan en grupo de funciones elegido aunque existe una utilidad para que el sistema
elija de manera automtica estos valores para ello pulsamos el botn
nos llevar a la siguiente ventana
Con la primera opcin nos propondr unos nmeros no existentes. Las otras opciones
permiten visualizar los n todava libres y los ya asignados. Al seleccionar la primera
opcin volveremos a la pantalla anterior, donde se habrn informado los campos de la
imagen resumen y sencilla. Pulsamos el botn crear (Si el grupo de funciones
indicado no esta creado, nos pedir una clase de desarrollo. &ondremos
seleccionaremos ob<eto local). Grabamos (F11) y retornamos a la pantalla anterior
(F3).
Para introducir entradas y visualizar el contenido de la tabla seguiremos los mismos
pasos que en el apartado anterior. (Veremos como las pantallas han cambiado ya que
ahora se vern las pantallas de dilogo generadas)
%&'&2 C)a3es E4ternas&
Un campo de una tabla tiene asociada una clave externa cuando los valores posibles
que puede tomar el campo en dicha tabla, han de estar en otra tabla/s que llamaremos
tabla maestra.
1amos a crear la siEuiente tabla teniendo en cuenta las indicaciones Iue se detallan a
continuacin &ara los cam&os NLIE e I,"NT
Nombre tablaD ZFAT+22D
Campo Cl$ Elem$ Datos Tipo ong Descripcin
,AN!T 2 ,AN!T ,andante
/+FRS 2 /+FRS Sociedad
NFAT 2 ZNFAT 22 NG de 4actura
NLIE ZNLIE 22 N>mero de cliente
FE'A ZFE'A22 FecBa de la 4actura
,ESFA Z,ESFA22 ,es de la 4actura
I,"NT ZI,"NT22 Im&orte neto de la 4actura
,ONE! %AERS la(e de moneda
En esta tabla el cam&o NLIE tendrJ unos (alores limitados a los existentes en la tabla
maestro de clientes6 )No deberamos tener 4acturas de clientes Iue no existen. Para
Pg. 55
Curso programacin ABAP IV Curso programacin ABAP IV
asociar esta clave externa, situados sobre este campo seleccionamos la opcin de
men 'Pasar a Claves Externas' o botn nos aparecer la ventana:
Descripcin Bre.e: Descripcin de la clave externa. )"ondremos 7,aestro de clientes
7.6
Ta*la de .eri4icacin: Tabla maestra que contiene el campo con los valores vlidos
("ondremos ZLIEN22).
Una vez indicada la tabla, nos aparecer la ventana:
Seleccionamos la opcin 'Si' y no la pantalla se completar con los campos claves de la
tabla intoducida :
Pg. 56
Curso programacin ABAP IV Curso programacin ABAP IV
Cardinalidad: La cardinalidad entre dos tablas, representa el grado de la relacin entre
las mismas, es decir, cuantas ocurrencias de una tabla estn relacionadas con una
entrada de la otra. Por ejemplo en la relacin entre madres e hijos la cardinalidad ser 1
a N ya que una madre puede tener cero ms hijos pero un hijo tendr una y
solamente una madre. Por tanto introduciremos aqu los valores oportunos en funcin
de la relacin entre las tablas. (En nuestro caso seleccionaremos :D N ya Iue una un
cliente &uede tener (arias 4acturas* &ero una 4actura >nicamente &uede &ertenecer a un
cliente).
Una vez introducidos lo valores oportunos verificamos (Ctrl. + F2) validamos
. Podemos ver como se indica el valor de la tabla en la columna de tabla de
verificacin.
En esta tabla tenemos un campo MPNT que es de tipo importe (CURR) por tanto es
necesario referenciarlo. Para ello podemos seleccionar la pestaa 'Campos moneda /
Cantidad) e informar directamente los campo TabRef y CpoRef. o bien situados sobre el
campo hacemos Doble-Click (F2) aparecer la ventana donde tambin podemos indicar
estos datos
Ta*$ Re4erencia: Nombre de la tabla. )"ondremos ZFAT+22.6
Cpo$ Re4erencia: Campo de la tabla indicada. )"ondremos ,oned.6
De esta manera hemos referenciado el importe MPNT a la moneda MONED.
Pg. 57
Curso programacin ABAP IV Curso programacin ABAP IV
3$2 Estructuras$
Una estructura es similar a una tabla en cuanto a su definicin pero con la diferencia
que una estructura no puede albergar registros. Una estructura es simplemente la
definicin de una entidad.
Para crear una estructura, desde la pantalla de diccionario, seleccionamos la opcin
'Tipo de datos' ponemos el nombre de la estructura a crear )En nuestro caso
7Z!AT"ER229. y pulsamos crear, seleccionamos la opcin 'Estructura'. Llegaremos a la
pantalla:
Donde introduciremos los campos y su definicin, bien a travs del campo elemento de
datos o bien introduciendo el tipo, longitud y descripcin (Del mismo modo que en la
creacin de tablas). )Introduciremos* los cam&os Nombr* A&el:* A&el?* con sus
res&ecti(os elementos de datos ZNO,/R22* ZA"ELL226 En el texto &ondremos 7
!atos &ersonales9.6
3$5 Vistas$
Una vista es una particularizacin de una o varias tablas en la que se pueden
seleccionar uno o varios de los campos de las tabla/s.. Por ejemplo podemos realizar
una vista para seleccionar nicamente algunos campos de una tabla pero
principalmente utilizaremos vistas para obtener datos de tablas relacionadas. Bajo una
Pg. 58
Curso programacin ABAP IV Curso programacin ABAP IV
vista podemos 'unir 'dos o ms tablas y poder ver la interseccin entre dichas tablas
como si se tratar de una nica tabla.
Cuando se trata de una vista de ms de una tabla, es necesario definir las condiciones
por las que se unen las tablas, es decir, los campos de interseccin de las tablas. Las
vistas no contienen datos sino que los datos se obtienen en tiempo de ejecucin al
realizar consultas sobre ellas.
"or e<em&loD Si IuisiKramos (er todas las 4acturas de un cliente )Nombre y &rimer
a&ellido.* deberemos reali5ar una interseccin entre la tabla de clientes y la tabla de
4acturas &ara obtener una (ista con los cam&osD
Facturas3 liente6
Campo Descripcin
NFAT NG de 4actura
NLIE NG de cliente
NO,/R Nombre cliente
A"EL: "rimer a&ellido
I,"NT Im&orte Neto
,ONE!A ,oneda
rear3,odi4icar31isuali5ar.
En la pantalla principal del diccionario de datos ponemos el nombre de la vista a Crear
)7ZFALI229. seleccionamos 'Vistas' y pulsamos el botn crear. Seleccionaremos el tipo
'Vista de base de datos'. Llegaremos a la pantalla:
Pg. 59
Curso programacin ABAP IV Curso programacin ABAP IV
Ta*las: Seleccionaremos las tablas de las que se desee obtener informacin. )En
nuestro caso la tablas ZLIEN22 y ZFAT+22.6
Condiciones Koin: Definen los campos por los que se realiza la interseccin entre las
tablas seleccionadas. Para indicar las relaciones podemos utilizar el botn
o escribir directamente las relaciones.
)En nuestro casoD
ZLIEN22-,AN!T L ZFAT+22-,NA!T
ZLIEN22M/+FRS L ZFAT+22-/+FRS.
ZLIEN22MLIEN L ZFAT+22-LIEN.6
Campos Vista: Se seleccionan los campos deseados. Podemos renombrar el campo
en la vista ser el que pongamos en Campos Vista'. (Por defecto ser el nombre original
del campo seleccionado). (En nuestro caso NFAT* NLIE* I,"NT y ,ONE!A de la
tabla ZFAT+22 y NO,/R y A"EL: de la tabla ZLIEN22..
Para facilitar la seleccin de campos de una tabla, situados sobre la tabla pulsamos el
botn donde marcaremos los campos deseados , una vez seleccionados
aparecern automticamente en la pantalla. Una vez completada la vista grabamos
(F11), verificamos (Ctrl. + F2) y activamos (Ctrl. + F3).
Pg. 60
Curso programacin ABAP IV Curso programacin ABAP IV
Para ver el contenido de la vista seleccionamos el menu 'Utilidades Contenido'.
Aparecera la pantalla de seleccin de la vista de la misma forma que en la visualizacin
de los datos de una tabla.
3$6 MatcDcode$ )Ayudas para *>s?ueda+
Un matchcode es un instrumento de bsqueda de registros almacenados en el sistema.
Permite en pantallas de seleccin. filtrar la informacin existente por determinados
criterios para facilitar la bsqueda. Por ejemplo no sabemos el DN de una persona pero
si su nombre, mediante este, podremos obtener el DN.
rear3modi4icar31isuali5arD
En la pantalla principal del diccionario seleccionamos la opcin Matchcode (Ayudas de
bsqueda) introducimos el nombre del matchcode a crear, )Z22.* y pulsamos el botn
de crear, seleccionamos el tipo para ayuda elemental, llegaremos a la pantalla:
Descripcin *re.e: Descripcin del matchcode ("odremos 7/>sIueda de clientes9).
M,todo de seleccin: Nombre de tabla o vista del diccionario de datos de donde se
obtendrn los datos a mostrar en la ayuda. )"ondremos ZLIEN22.6
Pg. 61
Curso programacin ABAP IV Curso programacin ABAP IV
ParCm$Ayuda *us?: Formado por cada uno de los campos que se utilizarn para la
bsqueda.
IMP: Flag de parmetro EXPORT, este campo se utilizar como campo en el que
informar valores de condicin para la bsqueda de registros.
EPP: Flag de parmetro MPORT, este campo se utilizar como parmetro de salida, es
decir, se volcar el valor del registro seleccionado sobre el campo.
P$I: Posicin del campo para lista de aciertos, indica la posicin que ocupar el campo
en la ventana de ayuda donde se mostrarn los registros seleccionados. (Si se indica '0'
o Blanco, significar que el campo no se muestra en la lista de aciertos).
Po": Posicin del campo para la pantalla de condiciones de la seleccin.
V$s: Valor no modificable en la seleccin.
Valor Propuesta: Valor de propuesta para la seleccin.
)Seleccionaremos el cam&o NLIE* NO,/R y A"EL: como cam&os de la b>sIueda *
seleccionaremos el NO,/R y A"EL: como cam&os &ara condicin y NLIE como
&arJmetro E2"ORT. 6
A continuacin grabamos (F11), verificamos (Ctrl. + F2) y activamos (Ctrl. +
F3).
3$1 O*/etos de *lo?ueo$
Sirven para controlar la concurrencia de procesos sobre un mismo objeto, siempre
estn asociados a tablas del diccionario. Un objeto de bloqueo es un semforo sobre
una tabla.
Cuando se define un objeto de bloqueo se generan automticamente dos funciones que
controlan dicho semforo:
- ENQUEUE_Nombre: Controla la peticin de bloqueo sobre el objeto.
- DEQUEUE_Nombre: Controla la liberacin del bloqueo sobre el objeto.
Los argumentos con los que se defina el objeto de bloqueo permitirn que se controle la
totalidad de registros de la tabla, un conjunto de ellos un nico registro.
Bsicamente el funcionamiento es el siguiente:
Necesitamos que dos procesos no compartan un objeto de forma concurrente, por
ejemplo que dos usuarios no accedan a la misma transaccin simultneamente, lo que
haremos ser programar un objeto de bloqueo, y al inicio de la transaccin podremos la
llamada a la funcin ENQUEUE_XXXX si el recurso esta ya siendo utilizado
(encontramos semforo rojo), no podremos bloquearlo y podremos obrar en
consecuencia, mostrando un mensaje y terminar , mostrar una opcin de reintento. Si
se puede bloquear el objeto ser seal que no hay otro proceso utilizndolo (semforo
verde) por tanto el proceso puede continuar (pondr el semforo en rojo para otros
procesos), antes de terminar el proceso se deber llamar a la funcin DEQUEUE_XXXX
para liberar el objeto que se ha bloqueado (debe poner el semforo en verde para que
otros procesos puedan utilizarlo.
Para crear objetos de bloqueo, en la pantalla principal del diccionario de datos,
seleccionamos la opcin 'Objeto de bloqueo' )En nuestro caso* (amos a crear un ob<eto
Pg. 62
Curso programacin ABAP IV Curso programacin ABAP IV
de bloIueo &ara la tabla ZLIEN22* escribiremos EZLIEN22.6 Tras pulsar la opcin
de crear, nos aparecer la pantalla:
Descripcin *re.e: Descripcin del objeto de bloqueo. (/loIueo maestro
clientes.
En la pestaa Tablas.
%om*re: Nombre de la tabla (ZLIEN22 en nuestro caso.6
Modo de Blo?ueo: Modo en el que se realiza el bloqueo, lectura, escritura, )E.
En la pestaa "arJm6bloIueo.
ParCm$*lo?ueo: Corresponden a los parmetros del argumento de bloqueo.
)!e<amos los (alores &or de4ecto.
Una vez completados todos los campos, grabamos (F11)., verificamos (Ctrl. +
F2) y activamos (Ctrol + F3).
Pg. 63
Curso programacin ABAP IV Curso programacin ABAP IV

0$ Programacin de listados )REPORT"+
0$# Introduccin$
En el proceso de tratamiento de la informacin es necesario poder consultar los datos
almacenados en el sistema de una forma organizada, para realizar este tipo de
operaciones se utilizan programas tipo REPORT, con estos programas podemos
generar listados en los que mostrar dicha informacin. Estos listados pueden estar
orientados a visualizacin en pantalla y/o a impresora.
Podramos distinguir dos tipos de listados por su grado de interaccin con el usuario:
Reports planos: Orientados a visualizar informacin de una manera plana en nico
nivel. En este tipo de listados las opciones de usuario sobre el tratamiento de la
informacin es nula.
Reports interacti.os: Orientados a presentar informacin en varios niveles, es decir,
pudiendo acceder desde un nivel de informacin a otro nivel de ms detalle y as
sucesivamente. Las opciones de usuario para el tratamiento de la informacin son
amplias ya que se puede ir navegando a travs de los distintos niveles de detalle.
Por otra parte se da la necesidad de actualizar las bases de datos en las que no es
necesaria la intervencin directa del usuario, son los procesos que conocemos como
'procesos batch'. Estos programas tambin se realizan mediante programas tipo
REPORT pero lgicamente sin la parte de presentacin de datos por pantalla.
Por tanto con programas tipo REPORT podemos realizar listados para la visualizacin
de informacin as como programas de actualizacin masiva de datos. Estos programas
se realizan en un lenguaje de programacin propio de SAP, es el lenguaje ABAP/4.
0$& Editor ABAP;0
Para poder desarrollar los programas tenemos un editor de lenguaje ABAP/4. Este
editor nos permitir escribir, verificar y generar los programas. Hay varias maneras de
llegar al editor, el camino ms habitual para crear un nuevo programa del tipo
REPORT es (desde el men principal de SAP) Herramientas Workbench
ABAPDesarrollo Editor ABAP (SE38).
Llegaremos a la pantalla principal del editor de programas:
Pg. 64
Curso programacin ABAP IV Curso programacin ABAP IV
Desde esta pantalla podremos crear, visualizar, modificar y ejecutar (tambin podremos
ejecutar en DEBUG mediante la opcin , ya veremos su significado ms
adelante) los programas.
Para crear un programa, escribieremos el nombre del programa, seleccionaremos la
opcin 'Texto fuente' y seleccionaremos la opcin de crear . Nos
aparecer la siguiente pantalla donde se definen los atributos del programa.
Pg. 65
Curso programacin ABAP IV Curso programacin ABAP IV
TGtulo: Descripcin de la funcionalidad del programa. (En nuestro caso pondremos
'Listado de maestro de clientes').
Tipo: Determina el tipo de programa, tenemos los siguientes:
"roErama ON-LINE ):.: Programa ejecutable tanto de forma ON-LNE y en
fondo (BATCH)
"roErama Include )I.: Programa que contiene cdigo pero que no puede ser ejecutado
directamente si no que formar parte de otros programas ejecutable.
,odule &ool ),.: Contiene cdigo para controlar pantallas. Es necesario asociarle un
cdigo de transaccin para que pueda ser ejecutado.
#ru&o de 4unciones )F.: Contiene programas denominados funciones, que no se
pueden ejecutar directamente sino que tienen que ser llamados de otros programas.
"ool de Subrutinas )S.: Contiene cdigo compuesto por procedimientos, tampoco puede
ser ejecutado directamente sino que puede ser llamado desde otros programas.
)En nuestro caso &ondremos ti&o ON-LINE 7:9.6
Aplicacin: Mdulo al que pertenece el programa (F, HHRR.) )En nuestro caso
&ondremos un A&licacin !esconocida 7N9.
Una vez completado estos campos obligatorios pulsaremos el botn de grabar
(F11). Nos pedir, como en los objetos de diccionario una clase de desarrollo,
grabaremos como objeto local botn a continuacin pasaremos a la pantalla
del editor:
Pg. 66
Curso programacin ABAP IV Curso programacin ABAP IV
Vamos a ver las funciones bsicas del editor para poder escribir, verificar, generar los
programas.
Traer cdigo patrn$ Tenemos la posibilidad de insertar cdigo con un patrn
predefinido, para distintos elementos del lenguaje, sentencias como el WRTE, llamadas
a procedimientos, llamadas a funciones . para ello situados sobre la lnea de cdigo
donde deseemos incluir esta llamada pulsaremos el botn nos aparecer la
siguiente ventana en la que indicararemos el nombre del objeto a insertar:
Pg. 67
Curso programacin ABAP IV Curso programacin ABAP IV
Obtencin de ayuda sobre instrucciones$
Para obtener ayuda sobre una instruccin, pulsamos la tecla de ayuda 'F1'
Na(eEar a ob<eto6
Esta funcin, permite 'navegar' hasta el objeto seleccionado, estos objetos pueden ser
desde variables, procedimientos, smbolos de texto . definidos dentro del propio
programa hasta objetos definidos fuera del programa como pueden ser llamadas a
transacciones, funciones, includes .
Generalmente si el objeto al que pretendemos 'navegar' no existe, nos dar la
posibilidad de crearlo en ese momento.
1eri4icacin del &roErama6
Para comprobar que el programa no tiene errores de sintaxis utilizaremos el botn de
verificar (Ctrl. + F2).
Para verificar que no contiene errores de manera ampliada utilizaremos la opcin de
men 'ProgramaVerificarVerif. programa ampliada'. Nos llevar a la siguiente
pantalla, pulsaremos el botn para continiuar con la verificacin.
Pg. 68
Curso programacin ABAP IV Curso programacin ABAP IV
Para generar el programa seleccionaremos la opcin 'ProgramaGenerar' y lo
activaremos con la opcin 'Programa Activar' o (Ctrl. + F3).
E<ecucin del &roErama desde en editor6
Desde el editor, podemos ejecutar un programa. Para ello seleccionamos la opcin de l
men 'ProgramaVerificar' o (F8).
O&cin 7!E/+#96
Para poder depurar los programas, podemos ejecutarlos en modo 'DEBUG', es decir,
ejecutando el programa pero pasando por las lneas del cdigo escrito y viendo el
resultado de cada una de ellas de forma individual, de esta forma podemos comprobar
el efecto de cada una de las instrucciones escritas. Para poder ejecutar un programa en
modo 'DEBUG' desde el editor, ser necesario fijar un 'Breakpoint', es decir un punto de
ruptura. El punto de ruptura hace que la ejecucin del programa se detenga cuando
llega a la lnea de cdigo donde se encuentra y a partir de ese punto se puede ejecutar
en modo 'DEBUG'. Para fijar un 'Breakpoint' nos situamos el la lnea de cdigo deseada
y pulsamos el botn .
Pg. 69
Curso programacin ABAP IV Curso programacin ABAP IV
El aspecto de las pantallas del DEBUG es el siguiente:
El icono indica que en esa lnea de cdigo hay un breakpoint.
El icono indica la lne actual de programa (prxima instruccin a ejecutarse).
En la parte inferior (marco variables) podemos escribir el nombre de la variable de la
que se quiere conocer el valor en ese momento, en la parte de la derecha aparecer su
valor (En la pantalla tenemos el nombre de la variable SY-SUBR y su valor actual '0').
Una vez dentro del 'DEBUG' de un programa tenemos las siguientes opciones:
Doble-click(F2)Situados sobre una variable y pulsando este botn automticamente se
escribe en el marco variables para visualizar el valor actual de la variable.
Hace que se ejecute la lnea de programa actual. Si la lnea actual se trata de la
llamada a un procedimiento, funcin . navegar hasta la primera lnea ejecutable de
dicho procedimiento.
Ejecuta la lnea actual de programa, teniendo en cuenta que si se trata de la
llamada a un procedimiento . no navegar hasta el cdigo del procedimiento sino que
se ejecutar el procedimiento como si se tratar de una nica instruccin.
Continua con la ejecucin de instrucciones hasta que se encuentre con el
siguiente breakpoint. (Si no encuentra breakpoint continuar hasta el final).
Pg. 70
Curso programacin ABAP IV Curso programacin ABAP IV
Retorna al nivel superior de anidamiento del programa, es decir, si hemos
'navegado' con la opcin paso a paso dentro de un procedimiento, esta opcin har
que se ejecute el resto del procedimiento y regrese a la instruccin siguiente a la
llamada al procedimiento. (Si dentro del procedimiento existe algn breakpoint se parar
en l).
Permite visualizar el contenido de una tabla interna.
0$&$# Documentacin y estructuracin de un listado plano$
Es fundamental que los programas estn bien estructurados y documentados, de esta
manera haremos que su elaboracin y el posterior mantenimiento sean mucho ms
sencillos. La estructura bsica de un programa tipo REPORT es la siguiente (Esta
estructuracin puede variar dependiendo de los estndares particulares de cada
cliente):
Documentacin bsica del programa.
Sentencia REPORT.
Definicin de tablas diccionario.
Definicin de constantes.
Definicin de variables.
Definicin de estructuras.
Definicin de tablas internas.
Definicin de rangos.
Definicin de la pantalla de seleccin:
Parmetros
Select-options
Definicin de FELD-SYMBOLS.
Definicin de FELD-GROUPS.
Definicin de Eventos:
NCALZATON.
START-OF-SELECTON.
END-OF-SELECTON.
TOP-OF-PAGE.
END-OF-PAGE.
AT LNE-SELECTON.
AT USER-COMMAND.
AT PFN.
AT SELECTON-SECREEN.
ncludes.
Subrutinas.
Antes de la primera sentencia REPORT, se deber documentar el programa indicando:
Nombre del programa.
Descripcin de la funcionalidad del programa.
Fecha y autor del programa.
Deber tambin reservarse un espacio para el control de modificaciones del programa.
Pg. 71
Curso programacin ABAP IV Curso programacin ABAP IV
)En nuestro e<em&lo Iue (a a consistir en &roErama Iue muestra un listado de los
clientes existentes* con el siEuiente 4ormato.
C. Cliente Nombre Primer Apellido Segundo Apellido F.Nacimiento
2 ):;. 2 )?;. 2 )?@. 2 )?@. 22 ):;.
El &roErama darJ la &osibilidad de seleccionar clientes &or diEo de cliente* &or
nombre y &or 4ecBa de nacimiento de tal 4orma Iue solamente a&arecerJn en el listado
aIuellos clientes Iue cum&lan los criterios de seleccin indicados6
"ondremos como documentacin en la cabecera del &roEramaD
************************************************************************
* PROGRAMA: ZREPORXX
* DESCRPCON: Muestra un listado de los clientes existentes en el
* que se detalla en n de cliente junto con el nombre y
* apellidos.
* AUTOR: Nombre y Apellidos FECHA: 13/08/2001
*----------------------------------------------------------------------*
* CONTROL DE MODFCACONES
* FECHA. AUTOR. DESCRPCON MODFCACON.
************************************************************************
antes de la instruccin REPORT)
0$&$& De4inicin de atri*utos de salida$
Todos los programas de este tipo empiezan con la instruccin 'REPORT' de ah su
nombre. Esta instruccin adems de indicar el nombre e inicio del programa, permite
sealar algunos de los atributos del programa como el alto y el ancho de listado, la
clase de mensajes que utiliza etc.
Nota: Para obtener ayuda sobre una instruccin, situando el cursor sobre ella pulsamos
F1 nos saldr una pantalla de ayuda con la sintaxis y opciones de cada una de ellas.
Para la sentencia REPORT se muestra la ayuda:
Pg. 72
Curso programacin ABAP IV Curso programacin ABAP IV

En nuestro e<em&lo a8adiremos a la instruccin RE"ORT las siEuientes o&cionesD
REPORT zreporxx NO STANDARD PAGE HEADNG LNE-SZE 120 LNE-COUNT 80.
0$&$3 De4inicin de ta*las e=ternas$
Para utilizar tablas del diccionario de datos, es necesario hacer referencia a que tablas
del diccionario se va a acceder desde el programa. Para ello ser necesario indicar la
palabra clave TABLES seguida del nombre o nombres de las tablas empleadas.
En nuestro ejemplo pondremos:
TABLES: zclienxx.
0$&$0 Pantalla de seleccin$
La 'pantalla de seleccin' es una pantalla en la que se indican los parmetros del
programa. Estos parmetros van a utilizarse para 'filtrar' la informacin y procesar
solamente aquella que pase el dicho 'filtro', es decir, cumpla con los criterios de
seleccin.
En la pantalla de seleccin, podemos tener los siguientes elementos:
Pg. 73
Curso programacin ABAP IV Curso programacin ABAP IV
"arameters: Recogen nico valor, es decir, como criterio solamente se podr indicar un
nico valor. Para incluir parmetros de seleccin podremos la palabra clave
PARAMETERS seguida del nombre de parmetro y su tipo.
En nuestro e<em&lo* (amos a de4inir un &arJmetro &ara seleccionar &or Sociedad &ara
ello escribiremosD
PARAMETERS p_bukrs LKE zclienxx-bukrs OBLGATORY DEFAULT '0001'.
Select-o&tions: Recogen mltiples valores o un rango de valores, es decir, se pueden
indicar ms de un valor como criterio de seleccin. Se definen poniendo la palabra clave
SELECT-OPTONS seguida del nombre del rango de seleccin y el campo al que hace
referencia.
1amos a de4inir tres ranEos de seleccin uno &ara el nG de cliente* otro &ara el nombre
y otro &ara la 4ecBa de nacimiento* &ara ello escribiremosD
SELECT-OPTONS:
s_nclie FOR zclienxx-nclie, " N de cliente
s_nombr FOR zclienxx-nombr, " Nombre cliente
s_fnaci FOR zclienxx-fnaci. " Fecha de nacimiento
Si en este punto grabamos, verificamos, generamos y ejecutamos nuestro programa,
nicamente tendramos la pantalla de seleccin. Que en nuestro caso tendr el
siguiente aspecto:
Pg. 74
Curso programacin ABAP IV Curso programacin ABAP IV
Podemos hacer que la pantalla de seleccin tenga un aspecto ms elaborado para ello
tenemos la posibilidad de incluir marcos, saltos de lnea.Para conseguir estos efectos
utilizaremos la palabra clave SELECTON SCREEN.
En nuestro e<em&lo (amos a crear dos marcos uno Iue (a a incluir al &arJmetro
"O/+FRS y otro Iue (a a contener a los ranEos de seleccin SONLIEN* SONO,/R y
SOFNAI6 "ara ello incluiremos las siEuientes instrucciones* de tal 4orma Iue
tendremosD
SELECTON-SCREEN BEGN OF BLOCK bloq1 WTH FRAME TTLE text-001.
PARAMETERS p_bukrs LKE zclienxx-bukrs OBLGATORY DEFAULT '0001'.
SELECTON-SCREEN END OF BLOCK bloq1.
SELECTON-SCREEN BEGN OF BLOCK bloq2 WTH FRAME TTLE text-002.
SELECT-OPTONS:
s_nclie FOR zclienxx-nclie, " N de cliente
s_nombr FOR zclienxx-nombr, " Nombre cliente
s_fnaci FOR zclienxx-fnaci. " Fecha de nacimiento
SELECTON-SCREEN END OF BLOCK bloq2.
Conseguiremos que la pantalla tenga el siguiente aspecto:
Pg. 75
Curso programacin ABAP IV Curso programacin ABAP IV
Los marcos creados, no tienen texto esto es debido a que los smbolos de texto '001' y
'002' referenciados con la palabra clave TEXT, no estn definidos.
0$&$2 Elementos de te=to
Pasar a Elementos de textoSmbolos de texto' (tambin se puede acceder desde la
pantalla de acceso al editor seleccionando esta opcin). Llegaremos a la siguiente
pantalla:
Pg. 76
Curso programacin ABAP IV Curso programacin ABAP IV
'&*&2&( S5bo)os de te4to&
Son cadenas de texto que se pueden utilizar a lo largo del programa para diferentes
funciones. Para definir un smbolo de texto seleccionaremos la opcin de men la
opcin 'smbolos de texto' donde definimos los smbolos de texto. El n de smbolo
puede estar compuesto por letras o nmeros
Los campos LonD y LonM representan la longitud de la cadena introducida y la longitud
mxima de salida del texto respectivamente, una vez introducido el texto, igualaremos el
campo LonM con el valor de LonD.
En nuestro caso de4iniremos D
;;: !atos sociedad
;;? !atos cliente
+na (e5 introducidos los smbolos de texto Erabamos )F::.6
'&*&2&* Te4tos de se)eccin&
Son los textos que aparecern en la pantalla de seleccin en lugar del nombre del
parmetro. Si seleccionamos la pestaa 'Textos seleccin ', aparecern los parmetros
y rangos de seleccin definidos en el programa.
Pg. 77
Curso programacin ABAP IV Curso programacin ABAP IV
En nuestro caso a&arecerJ la &antalla en la Iue com&letaremos los siEuientes textos6
Sociedad* FecBa de nacimiento* N>mero cliente* Nombre cliente6 +na (e5 escritos los
textos de seleccin Erabamos )F::.6
'&*&2&% T5tu)os 6 cabeceras&
Finalmente si seleccionamos la pestaa ' Cabeceras lista ' tendremos
Ca*ecera de lista: Define el texto que aparecer al comienzo de cada pgina.
"ondremos 7lientes seleccionados96
Ca*ecera de columna: Define las lneas de cabecera de columna que aparecern en
cada una de las pginas, podemos definir hasta cuatro cabeceras de columna.
En nuestro e<em&lo* &ondremos 76 liente Nombre "rimer A&ellido SeEundo A&ellido
F6Nacimiento96 Reser(ando &ara cada cam&o la lonEitud de salida corres&ondiente6 +na
(e5 com&letados los ttulos y cabeceras Erabamos )F::. y (ol(emos al editor del
&roErama6
Las cabeceras de lista y de columna, no aparecern en el listado, si se aade la opcin
NO STANDARD PAGE-HAEDNG en los atributos de salida del listado (nstruccin
REPORT).
Pg. 78
Curso programacin ABAP IV Curso programacin ABAP IV
)SiEuiendo con el e<em&lo 6 Si e<ecutamos a continuacin el &roErama* (eremos Iue la
&antalla de seleccin a tomado el as&ecto siEuienteDD.
0$&$5 "entencias de salida de datos
Vamos a ver un resumen de las principales instrucciones para el formateo de datos por
pantalla.
%RITED
Nos permite escribir el contenido de una variable declarada con DATA, el
contenido de un registro de una tabla, el contenido de un FELD-SYMBOL, un
TEXT-SYMBOL o un literal en alguna posicin del listado Las opciones a aadir
a esta instruccin son:
... AT pl (posicin y longitud)
... options (formato de salida)
... ofmt (salida formateada para el campo)
... AS CHECKBOX
... AS SYMBOL
... AS CON
... AS LNE
666 "T !7)
Pg. 79
Curso programacin ABAP IV Curso programacin ABAP IV
Con el smbolo (/) podemos hacer que ejecute un salto de lnea. Con 'p'
se especifica la columna de la lnea actual en la que queremos que
empiece a escribir y con 'l 'la longitud mxima de lo que vamos a escribir.
Por ejemplo:
WRTE AT /5(15) 'Esto es una cadena'.
Resultado:
La posicin y longitud se pueden expresar directamente con constantes
numricas (en este caso la palabra clave AT se puede omitir) y tambin con
variables.
Si la longitud de salida es demasiado corta para el contenido de lo que se va a
escribir la salida se rellenar de 7N9 si se trata de tipos P, y F; en el resto de tipos
se trucar el contenido por la derecha.
&&& o7tions
Las opciones disponibles son:
... NO-ZERO
... NO-SGN
... DD/MM/YY
... MM/DD/YY
... DD/MM/YYYY
... MM/DD/YYYY
... DDMMYY
... MMDDYY
... CURRENCY w
... DECMALS d
... ROUND R
... UNT u
... EXPONENT e
... USNG EDT MASK mask
... UNDER g
... NO-GAP
... LEFT-JUSTFED
.. CENTERED
.. RGHT-JUSTFED
Por ejemplo para dar formato de salida a un importe con la moneda
correspondiente:
WRTE D_MPORTE CURRENCY D_MONEDA.
Pg. 80
Fila antes del WRITE
Est es !na "ad
Curso programacin ABAP IV Curso programacin ABAP IV
&&& o/t
La salida se escribir con los formatos de color, intensidad, etc. Las opciones
disponibles en este punto se detallarn ms adelante, dentro de la instruccin
FORMAT.
Por ejemplo:
DATA F.
WRTE F NVERSE COLOR 3.
Los formatos indicados nicamente aplican a la escritura de la instruccin actual.
666 AS 'EF/O2
Hace que el campo escrito tenga la forma de es una caja de seleccin.
La caja saldr marcada o no marcada en funcin del valor del campo.
(SPACE es no marcada y 'X 'es marcada). Para poder hacer la caja de
entrada/salida o solamente de salida aadiremos la opcin IN"+T
ON3OFF.
Por ejemplo:
DATA D_CAJA(1) TYPE C VALUE SPACE.
WRTE CAJA AS CHECKBOX. WRTE CAJA AS CHECKBOX NPUT
OF.
(Ser de entrada/salida, valor por defecto)
WRTE CAJA AS CHECKBOX NPUT OFF. (Ser slo de salida).
666 AS S-,/OL
Permite escribir smbolos predefinidos. Para poder acceder a ellos
ser necesario incluir en nuestro programa la biblioteca de smbolos.
Para ello incluiremos la sentencia NCLUDE <SYMBOL>. (para ver los
smbolos disponibles buscaremos a travs de la ayuda).
Por ejemplo, la sentencia:
WRTE: SYM_RGHT_HAND AS SYMBOL, '...apunta a la derecha'.
Tendra como efecto:
666 AS ION
Similar a la opcin anterior pero con la biblioteca de iconos. Par acceder
a ella incluiremos la sentencia INL+!E PIONQ. (Podemos ver los
iconos con la ayuda).
Por ejemplo:
WRTE: CON_GREEN_LGHT AS CON, '...Semforo verde'.
Tendra como efecto:
Pg. 81
Curso programacin ABAP IV Curso programacin ABAP IV
666 AS LINE
La forma de hacer lneas horizontales o verticales en un report y que
stas formen cuadrculas es escribir los caracteres SY-VLNE (lnea
vertical) y SY-ULNE (lnea horizontal). Son equivalentes los caracteres
''y '-'. La forma exacta en la que aparecen estos segmentos depende de
los caracteres adyacentes. Cuando tenemos un carcter de lnea en
una posicin vertical y otro horizontal en la posicin adyacente
automticamente se produce la unin de ambas. Si en la posicin
adyacente no hay otro carcter de lnea ese carcter permanece
inalterado.
En la mayora de los casos esta tcnica es suficiente para hacer
cuadrculas, pero hay veces en las que las uniones no se producen de la
forma en la que queremos. En esos casos ser necesario echar mano de
caracteres especiales como: LNE_TOP_LEFT_CORNER,
LNE_BOTTOM_MDDLE_CORNER que realizan esta operacin. Para
poder usar estos caracteres es necesario incluir NCLUDE <LNE>.
8OR."T&
Sirve para definir los atributos de salida de lo que se va a escribir en la pantalla.
A diferencia de la opcin 'ofmt' del la instruccin WRTE el efecto de esta
instruccin comprende todas las escrituras realizadas hasta la siguiente
sentencia FORMAT. (Los cambios de evento, START-OF-SELECTON, TOP-
OF-PAGE. provocan que se inicialicen todas las opciones ). Las posibles
opciones de la sentencia FORMAT son:
FORMAT
NTENSFED
ON/OFF
Esta opcin modifica el color de
fondo.
FORMAT NVERSE
ON/OFF
nvierte el color de fondo y el texto
escrito.
FORMAT NPUT
ON/OFF
Habilita o deshabilita para entrada
en los campos que se escriban a
continuacin.
FORMAT HOTSPOT
ON/OFF
Habilita o deshabilita el formato
del cursor cuando se site sobre
las lneas o palabras que se
escriban a continuacin tome
aspecto de mano .
FORMAT RESET nicializa todas las opciones de
formato. Esta instruccin equivale
a:
FORMAT COLOR OFF
NTENSFED OFF NVERSE OFF
HOTSPOT OFF NPUT OFF.
Pg. 82
Curso programacin ABAP IV Curso programacin ABAP IV
Ejemplo:
FORMAT COLOR COL_BACKGROUND ON.
WRTE F. " Se escribir en color BACK..
WRTE D. " Se escribir en color BACK..
FORMAT COLOR COL_BACKGROUND OFF.
WRTE F. " Se escribir en color normal
ULINE
Escribe una lnea horizontal en la lnea actual. Por defecto el tamao de la lnea
comprende todo el ancho del listado. Podemos seleccionar el mbito de la lnea
con aadiendo AT pl donde:
p Se corresponde con la
columna en la que
comienza la lnea.
l Se corresponde con la
longitud que tiene la
lnea.
Las siguientes instrucciones producen el mismo resultado:
-ULNE AT 3(10).
-WRTE AT 3(10) SY-ULNE.
SKP y POSTON
Estas dos instrucciones SKP y POSTON. Permiten situar el puntero de
escritura en una posicin determinada.
POSTON n Hace que el puntero se site en la columna n.
SKP n Hace que el puntero salte n lneas.
SKP TO LNE n Hace que el puntero se mueva a la lnea n del listado.
Las siguientes instrucciones producen un resultado equivalente a la instruccin
(WRTE AT /5(15) 'Esto es una cadena'.+
DATA CADENA TYPE C VALUE 'Esto es una cadena'.
SKP.
POSTON 5.
WRTE (15) CADENA.
NEW-LNE
Provoca una nueva lnea en el listado.
Mediante la opcin NO-SCROLLNG podemos hacer que la lnea permanezca
fija durante el desplazamiento (Scroll) horizontal. (El valor por defecto es que se
pueda desplazar por tanto la opcin SCROLLNG se suele omitir).
NEW-PAGE
Pg. 83
Curso programacin ABAP IV Curso programacin ABAP IV
Provoca una nueva pgina en el listado. Tiene varias opciones mediante las
cuales se puede determinar el tamao (n filas y n de columnas) de la nueva
pgina, si se imprime o no el ttulo..

RESERVE
Sirve para reservar un cierto n de lneas antes de un salto de pgina.
RESERVE n LNES. Si en la pgina actual no hay n lneas disponibles
entonces se provocar un salto de pgina.
De esta forma se puede asegurar que las n lneas escritas a continuacin
estarn en la misma pgina.
ME""A'E$
Sirve para mostrar un determinado mensaje de una clase (coleccin) de
mensajes. El mensaje puede ser mostrado en la barra de status, o en forma de
ventana, dependiendo del tipo de mensaje. Existen los siguientes tipos de
mensajes:
nformativos.
W De precaucin
E Error
A Terminacin
X De salida
S xito.
Con un mensaje de tipo '', se mostrar una ventana en la que visualiza el
contenido del mensaje y contina con la ejecucin del programa, con 'S' se
muestra el mensaje en la barra de status y continua el programa, con un tipo 'E'
se muestra un mensaje y puede terminar la ejecucin del programa, depende del
evento en el que este situado, un tipo 'W' en un listado tiene el mismo
significado, un mensaje tipo 'A' muestra el mensaje y termina el programa,
finalmente un tipo 'X' muestra aborta el programa provocando un 'DUMB'.
Para indicar un tipo u otro podemos usar la sintaxis:
MESSAGE TNNN(XX) with p1 p2 p3 p4.
Donde T representa el tipo de mensaje (, S, E.).
NNN representa el n de mensaje.
XX representa la clase de mensajes. (Podemos no indicar esta clase de
mensajes si se aade la opcin MESSAGE-D de la instruccin REPORT).
p1..p4 representan los parmetros del mensaje.
La definicin del mensaje dentro de la clase consiste en un texto indicativo del
mensaje junto a unos parmetros si los tiene:
Por ejemplo, podramos definir un mensaje con el nmero 001 de la clase ZZ
'El cliente '& 'No existe.
Pg. 84
Curso programacin ABAP IV Curso programacin ABAP IV
Llamaramos al mensaje con MESSAGE 001(ZZ) WTH D_NCLENTE.
Para hacerlo informativo y MESSAGE E001(ZZ) WTH D_NCLENTE.
Para hacerlo de tipo error.
0$&$6 E.entos
0$&$6$# I%ITIAIQATIO%
Se ejecuta antes de mostrarse la pantalla de seleccin. Normalmente se utiliza
para inicializar las variables de programa y las opciones de la pantalla de
seleccin.
0$&$6$& "TART@O-@"EECTIO%
Este evento se lanza cuando se procesa la instruccin RE"ORT666 En ese
momento se empieza a ejecutar el cdigo que se encuentra entre RE"ORT y la
palabra START-OF-SELETION. nmediatamente despus se procesa el bloque
contenido dentro de este evento.
En este evento se sitan las instrucciones de acceso a bases de datos una vez
terminada este cdigo se ejecuta el evento END-OF-SELECTON (Si est
definido).
(Siguiendo con nuestro ejemplo, vamos a realizar la seleccin de los clientes que
cumple los criterios definidos por los parmetros de seleccin. Los datos de
estos clientes los vamos a almacenar en una tabla interna.
Definimos la siguiente tabla interna que situaremos en la parte correspondiente
del programa.
* Tabla interna de datos a listar
DATA: BEGN OF _ZCLENXX OCCURS 0.
NCLUDE STRUCTURE ZCLENXX.
DATA: END OF _ZCLENXX.
Aadimos el evento START-OF-SELECTON en la parte del programa que le
corresponde con el siguiente cdigo:
START-OF-SELECTON.
* nicializamos la tabla interna.
REFRESH _ZCLENXX.
CLEAR _ZCLENXX.
* Seleccionamos los datos de los clientes que cumplen criterios
SELECT *
FROM ZCLENXX NTO TABLE _ZCLENXX
WHERE BUKRS = P_BUKRS
AND NCLE N S_NCLE
AND NOMBR N S_NOMBR
AND FNAC N S_FNAC.
* Comprobamos si no hay datos seleccionados en cuyo caso,
* escribiremos un texto que lo indique.
F NOT ( SY-SUBRC = 0 ).
WRTE / TEXT-003. " No hay datos para la seleccin indicada
ENDF.
Pg. 85
Curso programacin ABAP IV Curso programacin ABAP IV
0$&$6$3 E%D@O-@"EECTIO%$
El cdigo asociado a este evento se procesa cuando se termina la seleccin de datos
de tablas o bases de datos lgicas, es decir, cuando termina el evento START-OF-
SELECTON.
(En nuestro ejemplo escribiremos los datos de los clientes seleccionados, para ello
aadiremos el siguiente cdigo:
END-OF-SELECTON.
* Vamos a escribir el listado con los clientes seleccionados en la
* Tabla interna _ZCLENXX
LOOP AT _ZCLENXX.
WRTE: /1(10) _ZCLENXX-NCLE,
11(20) _ZCLENXX-NOMBR,
31(25) _ZCLENXX-APEL1,
56(25) _ZCLENXX-APEL2,
81(10) _ZCLENXX-FNAC.
ENDLOOP.
Si lleEado este &unto* e<ecutamos el &roErama* si Bay datos en la tabla maestro de
clientes y cum&len los criterios de seleccin a&arecerJ un listado alEo asD
Pg. 86
Curso programacin ABAP IV Curso programacin ABAP IV
0$&$6$0 TOP@O-@PA'E
Se ejecuta al inicio de cada nueva pgina.
Se suele utilizar para dar formato a la cabecera de pgina, cuando no se utilizan
las definidas en 'Ttulos y cabeceras'. (Se aade la opcin NO STANDARD
PAGE HEADNG).
Se le puede aadir la opcin DURNG LNE-SELECTON, este evento se
producir al inicio de una nueva pgina de un nivel de lista secundaria. (Reports
interactivos).
Se pueden tener por tanto dos eventos,
TOP-OF-PAGE que acta en el nivel inicial.
TOP-OF-PAGE DURNG LNE-SELECTON que acta en los de niveles
superiores.
0$&$6$2 E%D@O-@PA'E
Se ejecuta cuando una pgina finaliza bien porque no tiene ms lneas bien
porque se ejecuta la instruccin RESERVE n LNES. Este evento no se
ejecutar si el n de lneas de la pgina no est definido en la sentencia
REPORT, tampoco se ejecutar se fuerza una nueva pgina con NEW-PAGE.
Pg. 87
Curso programacin ABAP IV Curso programacin ABAP IV
0$&$6$5 AT "EECTIO%@"CREE%
Se utiliza para controlar la pantalla de seleccin.
Sus opciones permiten mostrar valores de ayuda en los campos de seleccin,
mostrar/ocultar campos de seleccin..
(En nuestro ejemplo, vamos a dar la posibilidad de mostrar los valores posibles para el
rango de seleccin nombre del cliente. De esta forma aparecer, al situarnos sobre el
campo, el botn de ayuda de valores posibles (F4), al pulsarlo mostrar una ventana
con los distintos nombres existentes en nuestra tabla.
Para ello aadiremos el siguiente cdigo:
* Valores posibles para el rango S_Nombre valor desde.
AT SELECTON-SCREEN ON VALUE-REQUEST FOR S_NOMBR-LOW.
* Llamada a la rutina que muestra los valores existentes
PERFORM VALORES_POSBLES_NOMBRE USNG S_NOMBR-LOW.

* Valores posibles para el rango S_Nombre valor hasta
AT SELECTON-SCREEN ON VALUE-REQUEST FOR S_NOMBR-HGH.
* Llamada a la rutina que muestra los valores existentes
PERFORM VALORES_POSBLES_NOMBRE USNG S_NOMBR-HGH.
Los rangos de seleccin tiene implcitos dos valores el mnimo y el mximo, para que
aparezca la ayuda en los dos es necesario aadir dos eventos, uno para cada valor. La
funcionalidad en ambos casos es la misma por tanto es susceptible de se introducida en
un nico procedimiento.
)En nuestro caso lo llamamos 1ALORESO"OSI/LESONO,/RE* (er el cdiEo
corres&ondiente en el listado com&leto del &roErama.6
Para implementar este procedimiento, nos hemos ayudado con una funcin
predefinida en el STANDARD. 'HELP_VALUES_GET_WTH_TABLE'. Esta funcin
permite mostrar datos en una ventana y seleccionar uno de ellos. Permite mostrar
informacin de ms de un campo, para ello en la tabla interna de definicin de campos
aadiremos tantas entradas como campos deseemos visualizar. Para indicar los valores
lo haremos de forma secuencial es decir, el la entrada uno, el valor para el campo 1 en
la entrada 2 el valor para el campo 2 .as hasta completar todos los campos, a
continuacin otra vez la entrada para el campo 1, campo 2 y as sucesivamente para
cada secuencia .
0$&$1 E/emplo de listado$
Vamos a dar otra apariencia a nuestro listado, para ello vamos a crear una cabecera
propia y no vamos a utilizar la definida en 'Ttulo y Cabeceras'. En primer lugar para
desactivar esta cabecera, aadiremos la opcin NO STANDARD PAGE HEADNG a la
instruccin REPORT. Por otra parte vamos a hacer que el campo correspondiente al n
de cliente permanezca fijo durante el desplazamiento horizontal por el informe. En la
Pg. 88
Curso programacin ABAP IV Curso programacin ABAP IV
pantalla de seleccin, vamos a utilizar el match code de bsqueda de clientes creado
'ZCXX'.
El cdigo resultante ser algo as:
************************************************************************
* PROGRAMA: ZREPORXX. *
* DESCRPCON: Muestra un listado de los clientes existentes en el *
* que se detalla en n de cliente junto con el nombre y *
* apellidos *
* AUTOR : MAD00 FECHA: 13/08/2001 *
*----------------------------------------------------------------------*
* CONTROL DE MODFCACONES *
* FECHA. AUTOR. DESCRPCON MODFCACON. *
************************************************************************
REPORT zreporxx NO STANDARD PAGE HEADNG LNE-SZE 120 LNE-COUNT 80.
************************************************************************
* Tablas del diccionario de datos *
************************************************************************
TABLES: zclienxx. " Maestro de clientes.
************************************************************************
* Definicin de constantes *
************************************************************************
CONSTANTS:
c_pos_nclie(3) TYPE n VALUE 1, " Posicin n cliente
c_pos_nombr(3) TYPE n VALUE 12, " Posicin nombre
c_pos_apel1(3) TYPE n VALUE 33, " Posicin apellido1
c_pos_apel2(3) TYPE n VALUE 59, " Posicin apellido2
c_pos_fnaci(3) TYPE n VALUE 85, " Posicin F. Nacimiento
c_pos_final(3) TYPE n VALUE 96, " Posicin final
c_ancho_total(3) TYPE n VALUE 96, " Ancho total del informe,
c_pos_titul(3) TYPE n VALUE 1, " Posicin ttulo,
c_pos_usuar(3) TYPE n VALUE 37, " Posicin usuario
c_pos_fecha(3) TYPE n VALUE 60, " Posicin fecha
c_pos_pagno(3) TYPE n VALUE 85. " Posicin n de pgina.
************************************************************************
* Tablas internas *
************************************************************************
* Tabla interna de datos a listar
DATA: BEGN OF i_zclienxx OCCURS 0.
NCLUDE STRUCTURE zclienxx.
DATA: END OF i_zclienxx.
************************************************************************
Pg. 89
Curso programacin ABAP IV Curso programacin ABAP IV
* Pantalla de seleccin *
************************************************************************
* Parmetros
SELECTON-SCREEN BEGN OF BLOCK bloq1 WTH FRAME TTLE text-001.
* Sociedad
PARAMETERS p_bukrs LKE zclienxx-bukrs OBLGATORY DEFAULT '0001'.
SELECTON-SCREEN END OF BLOCK bloq1.
* Rangos de seleccin
SELECTON-SCREEN BEGN OF BLOCK bloq2 WTH FRAME TTLE text-002.
SELECT-OPTONS:
* Aadimos el match-code para el cdigo de cliente
s_nclie FOR zclienxx-nclie MATCHCODE OBJECT zcxx, " N de cliente
s_nombr FOR zclienxx-nombr, " Nombre cliente
s_fnaci FOR zclienxx-fnaci. " Fecha de nacimiento
SELECTON-SCREEN END OF BLOCK bloq2.
************************************************************************
* Comienzo de seleccin *
************************************************************************
START-OF-SELECTON.
* nicializamos la tabla interna.
REFRESH i_zclienxx.
CLEAR i_zclienxx.
* Seleccionamos los datos de los clientes que cumplen criterios
SELECT *
FROM zclienxx NTO TABLE i_zclienxx
WHERE bukrs = p_bukrs
AND nclie N s_nclie
AND nombr N s_nombr
AND fnaci N s_fnaci.
* Comprobamos si no hay datos seleccionados en cuyo caso,
* escribiremos un texto que lo indique.
F NOT ( sy-subrc = 0 ).
WRTE / text-003. " No hay datos para la seleccin indicada
ENDF.
************************************************************************
Pg. 90
Curso programacin ABAP IV Curso programacin ABAP IV
* Final de la seleccin *
************************************************************************
END-OF-SELECTON.
* Vamos a escribir el listado con los clientes seleccionados en la
* tabla interna _ZCLENXX
LOOP AT i_zclienxx.
* Escribimos el n de cliente en color clave, el resto en otro color
FORMAT COLOR COL_KEY.
WRTE: AT /c_pos_nclie '|' NO-GAP, i_zclienxx-nclie.
FORMAT COLOR COL_NORMAL.
WRTE: AT c_pos_nombr '|' NO-GAP, i_zclienxx-nombr,
AT c_pos_apel1 '|' NO-GAP, i_zclienxx-apel1,
AT c_pos_apel2 '|' NO-GAP, i_zclienxx-apel2,
AT c_pos_fnaci '|' NO-GAP, i_zclienxx-fnaci,
AT c_pos_final '|' NO-GAP.
ENDLOOP.
* Si se han seleccionado datos, escribimos la lnea final.
F ( sy-subrc = 0 ).
ULNE AT /c_pos_nclie(c_ancho_total).
ENDF.
************************************************************************
* Cabecera de pgina *
************************************************************************
TOP-OF-PAGE.
* Hacemos que la lnea permanezca fija en el scroll horizontal
NEW-LNE NO-SCROLLNG.
* Activamos el color de cabecera
FORMAT COLOR COL_HEADNG NTENSFED OFF.
* Escribimos informacin de cabecera resaltando los valores
* Ttulo y sociedad
WRTE: AT c_pos_titul text-009.
WRTE p_bukrs NTENSFED ON.
* Usuario de creacin del informe
WRTE AT c_pos_usuar text-010.
WRTE sy-uname NTENSFED ON.
* Fecha de creacin
WRTE AT c_pos_fecha text-011.
WRTE sy-datum NTENSFED ON USNG EDT MASK '__/__/____'.
Pg. 91
Curso programacin ABAP IV Curso programacin ABAP IV
* N de pgina.
WRTE AT c_pos_pagno text-012.
WRTE sy-pagno NTENSFED ON.
* Fecha de creacin
WRTE AT c_pos_fecha text-011.
WRTE sy-datum NTENSFED ON.
* N de pgina.
WRTE AT c_pos_pagno text-012.
WRTE sy-pagno NTENSFED ON.
* Escribimos una lnea horizontal
ULNE AT /c_pos_nclie(c_ancho_total).
* Activamos el color de cabeceras intensificado
FORMAT COLOR COL_HEADNG NTENSFED ON.
* Escribimos la cabecera de la columnas separadas por el carcter '|'.
* Hacemos que la columna de n de cliente sea fija en el scroll horiz.
WRTE: AT /c_pos_nclie '|' NO-GAP, text-004.
* Hasta la columna hacemos fijo
SET LEFT SCROLL-BOUNDARY.
* Escribimos el detalle de cabecera de cliente
WRTE: AT /c_pos_nclie '|' NO-GAP, text-004,
AT c_pos_nombr '|' NO-GAP, text-005,
AT c_pos_apel1 '|' NO-GAP, text-006,
AT c_pos_apel2 '|' NO-GAP, text-007,
AT c_pos_fnaci '|' NO-GAP, text-008,
AT c_pos_final '|' NO-GAP.
* Escribimos una lnea horizontal
ULNE AT /c_pos_nclie(c_ancho_total).
************************************************************************
* Control de la pantalla de seleccin. *
************************************************************************
* Valores posibles para el rango S_Nombre valor desde.
AT SELECTON-SCREEN ON VALUE-REQUEST FOR s_nombr-low.
* Llamada a la rutina que muestra los valores existentes
PERFORM valores_posibles_nombre USNG s_nombr-low.
* Valores posibles para el rango S_Nombre valor hasta
AT SELECTON-SCREEN ON VALUE-REQUEST FOR s_nombr-high.
Pg. 92
Curso programacin ABAP IV Curso programacin ABAP IV
* Llamada a la rutina que muestra los valores existentes
PERFORM valores_posibles_nombre USNG s_nombr-high.
************************************************************************
* Rutinas adicionales. *
************************************************************************
*&---------------------------------------------------------------------*
*& Form VALORES_POSBLES_NOMBRE
*&---------------------------------------------------------------------*
* Muestra una ventana con los distintos nombres existentes en *
* la tabla maestro de clientes ZCLENXX. Dando la posibilidad de *
* seleccionar uno de ellos. Devuelve en el parmetro PS_NOMBR el *
* nombre seleccionado o vaco si no se realiza seleccin. *
*----------------------------------------------------------------------*
* -->PS_NOMBR Nombre seleccionado *
*----------------------------------------------------------------------*
FORM valores_posibles_nombre USNG ps_nombr LKE zclienxx-nombr.
************************************************************************
* Variables locales *
************************************************************************
* Tabla interna para almacenar los campos y atributos a visualizar.
DATA : BEGN OF i_fields OCCURS 1.
NCLUDE STRUCTURE help_value.
DATA: END OF i_fields.
* Tabla interna para almacenar el valor de campos a mostrar.
DATA : BEGN OF i_values OCCURS 0,
valor(20) TYPE c,
END OF i_values.
************************************************************************
* Proceso *
************************************************************************
* nsertamos en la tabla _FELDS los atributos del campo a mostrar
CLEAR i_fields.
i_fields-tabname = 'ZCLENXX'. " Nombre de la tabla
i_fields-fieldname = 'NOMBR'. " Nombre del campo
i_fields-selectflag = 'X'. " Valor seleccionable
APPEND i_fields.
* Seleccionamos los distintos nombres existentes en la tabla ZCLENXX
* y los almacenamos en la tabla de valores
SELECT DSTNCT nombr NTO zclienxx-nombr
FROM zclienxx
WHERE bukrs = p_bukrs.
i_values-valor = zclienxx-nombr.
Pg. 93
Curso programacin ABAP IV Curso programacin ABAP IV
APPEND i_values.
ENDSELECT.
* Llamamos a la funcin predefinida que muestra los datos
CALL FUNCTON 'HELP_VALUES_GET_WTH_TABLE'
* EXPORTNG
* CUCOL = 0
* CUROW = 0
* DSPLAY = ' '
* FELDNAME = ' '
* TABNAME = ' '
* NO_MARKNG_OF_CHECKVALUE = ' '
* TTLE_N_VALUES_LST = ' '
* TTEL = ' '
* SHOW_ALL_VALUES_AT_FRST_TME = ' '
* NO_CONVERSON = ' '
MPORTNG
select_value = ps_nombr
TABLES
fields = i_fields
valuetab = i_values
EXCEPTONS
field_not_in_ddic = 1
more_then_one_selectfield = 2
no_selectfield = 3
OTHERS = 4.
ENDFORM. " VALORES_POSBLES_NOMBRE
Ser necesario definir los smbolos de texto:
Pg. 94
Curso programacin ABAP IV Curso programacin ABAP IV
El listado tendr ahora el siguiente aspecto:
Pg. 95
Curso programacin ABAP IV Curso programacin ABAP IV
0$&$E E.entos de rupturas de secuencia en ta*las internas$
Para el tratamiento de los registros de una tabla interna con la instruccin LOOP-
ENDLOPP, podemos utilizar las siguientes instrucciones de control. Para que el
funcionamiento de los eventos AT NEW y AT END sea correcto, la tabla interna ha de
estar ordenada por los campos controlados.
AT -IR"T 8 E%DAT$
Este evento se ejecuta para el primer registro de la tabla interna, por tanto las
instrucciones escritas en este bloque nicamente se ejecutarn una vez. (Dentro
del evento, no estar disponible el valor de ningn campo de la tabla interna).
AT A"T 8 E%DAT
Este evento se ejecuta cuando se est procesando el ltimo registro de la tabla
interna, por tanto tambin sus instrucciones se ejecutarn una nica vez. (Dentro
del evento, no estar disponible el valor de ningn campo de la tabla interna).
AT %EI campo 8 E%DAT$
Este evento se ejecuta si el contenido de la cabecera de la tabla interna desde
el primer campo hasta el campo 'campo' incluido es distinta a la del paso
anterior, es decir, si cambia la 'subcabecera' formada por estos campos. (Dentro
Pg. 96
Curso programacin ABAP IV Curso programacin ABAP IV
del evento, estarn disponibles los valores de los campos de esta 'subcabecera',
el resto de campos, no estarn disponibles).
AT E%D O- campo 8 E%DAT$
Tiene el mismo funcionamiento que AT NEW salvo que se ejecuta cuando se
detecta que el siguiente registro no coincide con el registro actual. (Estarn
disponibles los valores de los campos formados por la 'subcabecera').
Dentro de estos eventos podemos utilizar la instruccin SUM, que lo que hace es sumar
todos los campo numricos de la tabla interna, es decir, acumula en el campo actual de
la tabla la suma de los registros tratados hasta la entrada en el evento.
O% CJA%'E O- campo 8 E%DO%$
Este evento se ejecuta cada vez que el valor del campo no coincide con el valor
anterior. (Este evento no exclusivo de las tablas internas, tambin se puede
utilizar en acceso a base datos lgicas, en SELECT. ENDSELECT,..).
Vamos a ver un ejemplo de utilizacin de estos eventos. Vamos a mostrar las facturas
de cada uno de los clientes, totalizando por moneda.
Para ello vamos a partir del programa anterior y haremos una copia, el nuevo programa
se llamar 'ZREPO1XX'.
Para hacer una copia de un programa, en la pantalla de acceso al editor de programas:
Pg. 97
Curso programacin ABAP IV Curso programacin ABAP IV
Pulsamos el botn copiar (Ctrol+F5), aparecer una ventana en la que escribiremos
el programa fuente y el programa destino. A continuacin aparecer otra ventana para
indicar que elementos se desean copiar, dejamos las opciones por defecto y pulsamos
la opcin de copiar (como objeto local).
Sobre el programa copia 'ZREPO1XX' haremos las siguientes modificaciones:
Aadiremos la tabla de facturas en la sentencia TABLES, crearemos una tabla interna
para almacenar los datos de las facturas, modificaremos el evento
END_OF_SELECTON para recuperar e imprimir las facturas y TOP-OF-PAGE para
escribir el detalle de segunda lnea de cabecera.
Es decir, el programa modificado ser algo as:
************************************************************************
* PROGRAMA: ZREPO1 XX. *
* DESCRPCON: Muestra un listado de los clientes existentes en el *
* que se detalla en n de cliente junto con el nombre y *
* apellidos, adems, muestra el detalle de cada una de *
Pg. 98
Curso programacin ABAP IV Curso programacin ABAP IV
* las facturas de los clientes totalizadas por moneda fac. *
* AUTOR : MAD00 FECHA: 13/08/2001 *
*----------------------------------------------------------------------*
* CONTROL DE MODFCACONES *
* FECHA. AUTOR. DESCRPCON MODFCACON. *
************************************************************************
REPORT zrepo1xx NO STANDARD PAGE HEADNG LNE-SZE 120 LNE-COUNT 80.
************************************************************************
* Tablas del diccionario de datos *
************************************************************************
TABLES: zclienxx, " Maestro de clientes.
zfactuxx. " Facturas
************************************************************************
* Definicin de constantes *
************************************************************************
CONSTANTS:
c_pos_nclie(3) TYPE n VALUE 1, " Posicin n cliente
c_pos_nombr(3) TYPE n VALUE 12, " Posicin nombre
c_pos_apel1(3) TYPE n VALUE 33, " Posicin apellido1
c_pos_apel2(3) TYPE n VALUE 59, " Posicin apellido2
c_pos_fnaci(3) TYPE n VALUE 85, " Posicin F. Nacimiento
c_pos_final(3) TYPE n VALUE 96, " Posicin final
c_ancho_total(3) TYPE n VALUE 96, " Ancho total del informe,
c_pos_titul(3) TYPE n VALUE 1, " Posicin ttulo,
c_pos_usuar(3) TYPE n VALUE 37, " Posicin usuario
c_pos_fecha(3) TYPE n VALUE 60, " Posicin fecha
c_pos_pagno(3) TYPE n VALUE 85, " Posicin n de pgina
c_pos_nfact(3) TYPE n VALUE 12, " Posicin n factura
c_pos_fefac(3) TYPE n VALUE 23, " Posicin fecha fact
c_pos_impnt(3) TYPE n VALUE 34, " Posicin importe neto
c_pos_moned(3) TYPE n VALUE 51, " Posicin moneda
c_pos_fifac(3) TYPE n VALUE 57, " Posicin final factura.
c_pos_total(3) TYPE n VALUE 21. " Poscin total moneda
************************************************************************
* Tablas internas *
************************************************************************
* Tabla interna de datos a listar
DATA: BEGN OF i_zclienxx OCCURS 0.
NCLUDE STRUCTURE zclienxx.
DATA: END OF i_zclienxx.
* Tabla interna con las facturas por cliente
DATA: BEGN OF i_factu OCCURS 5,
moneda LKE zfactuxx-moned, " Moneda de la factura
fecha LKE zfactuxx-fecha, " Fecha
impnt LKE zfactuxx-impnt, " mporte neto.
Pg. 99
Curso programacin ABAP IV Curso programacin ABAP IV
nfact LKE zfactuxx-nfact, " N de factura
END OF i_factu.
************************************************************************
* Pantalla de seleccin *
************************************************************************
* Parmetros
SELECTON-SCREEN BEGN OF BLOCK bloq1 WTH FRAME TTLE text-001.
PARAMETERS p_bukrs LKE zclienxx-bukrs OBLGATORY
DEFAULT '0001'. " Sociedad
SELECTON-SCREEN END OF BLOCK bloq1.
* Rangos de seleccin
SELECTON-SCREEN BEGN OF BLOCK bloq2 WTH FRAME TTLE text-002.
SELECT-OPTONS:
* Aadimos el match-code para el cdigo de cliente
s_nclie FOR zclienxx-nclie MATCHCODE OBJECT zcxx, " N de cliente
s_nombr FOR zclienxx-nombr, " Nombre cliente
s_fnaci FOR zclienxx-fnaci. " Fecha de nacimiento
SELECTON-SCREEN END OF BLOCK bloq2.
************************************************************************
* Comienzo de seleccin *
************************************************************************
START-OF-SELECTON.
* nicializamos la tabla interna.
REFRESH i_zclienxx.
CLEAR i_zclienxx.
* Seleccionamos los datos de los clientes que cumplen criterios
SELECT *
FROM zclienxx NTO TABLE i_zclienxx
WHERE bukrs = p_bukrs
AND nclie N s_nclie
AND nombr N s_nombr
AND fnaci N s_fnaci.
* Comprobamos si no hay datos seleccionados en cuyo caso,
* escribiremos un texto que lo indique.
F NOT ( sy-subrc = 0 ).
WRTE / text-003. " No hay datos para la seleccin indicada
ENDF.
************************************************************************
* Final de la seleccin *
************************************************************************
END-OF-SELECTON.
* Vamos a escribir el listado con los clientes seleccionados en la
* tabla interna _ZCLENXX y para cada uno de ellos sus facturas
LOOP AT i_zclienxx.
* Escribimos el n de cliente en color clave, el resto en otro color
FORMAT COLOR COL_KEY.
Pg. 100
Curso programacin ABAP IV Curso programacin ABAP IV
WRTE: AT /c_pos_nclie '|' NO-GAP, i_zclienxx-nclie.
FORMAT COLOR COL_NORMAL.
WRTE: AT c_pos_nombr '|' NO-GAP, i_zclienxx-nombr,
AT c_pos_apel1 '|' NO-GAP, i_zclienxx-apel1,
AT c_pos_apel2 '|' NO-GAP, i_zclienxx-apel2,
AT c_pos_fnaci '|' NO-GAP, i_zclienxx-fnaci,
AT c_pos_final '|' NO-GAP.
* nicializamos la tabla interna de facturas
REFRESH i_factu.
CLEAR i_factu.
* Recuperamos las facturas correspondientes al cliente
SELECT moned fecha impnt nfact NTO TABLE i_factu
FROM zfactuxx
WHERE bukrs = p_bukrs
AND nclie = i_zclienxx-nclie.
* Comprobamos que se han seleccionado facturas para el cliente
* si no es as pasamos al siguiente
CHECK ( sy-subrc = 0 ).
* Escribimos lnea de separacin
ULNE AT /c_pos_nclie(c_ancho_total).
* Ordenamos las facturas encontradas por moneda
SORT i_factu BY moneda fecha.
* Para cada una de las facturas encontradas
LOOP AT i_factu.
* Activamos color de detalle
FORMAT COLOR COL_POSTVE.
* Escribimos el detalle de la facutura
WRTE: AT /c_pos_nclie '|' NO-GAP,
AT c_pos_nfact '|' NO-GAP, i_factu-nfact,
AT c_pos_fefac '|' NO-GAP, i_factu-fecha,
AT c_pos_impnt '|' NO-GAP, i_factu-impnt CURRENCY
i_factu-moneda,
AT c_pos_moned '|' NO-GAP, i_factu-moneda,
AT c_pos_fifac '|' NO-GAP,
AT c_pos_final '|' NO-GAP.
* Si es la ltima entrada para la moneda actual
AT END OF moneda.
* Sumamos totales importes
SUM.
* Lnea de separacin
ULNE AT /c_pos_nclie(c_ancho_total).
* Activamos el color de totales
FORMAT COLOR COL_TOTAL.
WRTE: AT /c_pos_nclie '|' NO-GAP,
AT c_pos_total text-013,
i_factu-impnt CURRENCY i_factu-moneda NO-GAP,
i_factu-moneda,
AT c_pos_final '|' NO-GAP.
Pg. 101
Curso programacin ABAP IV Curso programacin ABAP IV
* Lnea de separacin
ULNE AT /c_pos_nclie(c_ancho_total).
ENDAT.
ENDLOOP.
ENDLOOP.
* Si se han seleccionado datos, escribimos la lnea final.
F ( sy-subrc = 0 ).
ULNE AT /c_pos_nclie(c_ancho_total).
ENDF.
************************************************************************
* Cabecera de pgina *
************************************************************************
TOP-OF-PAGE.
* Hacemos que la lnea permanezca fija en el scroll horizontal
NEW-LNE NO-SCROLLNG.
* Activamos el color de cabecera
FORMAT COLOR COL_HEADNG NTENSFED OFF.
* Escribimos informacin de cabecera resaltando los valores
* Ttulo y sociedad
WRTE: AT c_pos_titul text-009.
WRTE p_bukrs NTENSFED ON.
* Usuario de creacin del informe
WRTE AT c_pos_usuar text-010.
WRTE sy-uname NTENSFED ON.
* Fecha de creacin
WRTE AT c_pos_fecha text-011.
WRTE sy-datum NTENSFED ON USNG EDT MASK '__/__/____'.
* N de pgina.
WRTE AT c_pos_pagno text-012.
WRTE sy-pagno NTENSFED ON.
* Escribimos una lnea horizontal
ULNE AT /c_pos_nclie(c_ancho_total).
* Activamos el color de cabeceras intensificado
FORMAT COLOR COL_HEADNG NTENSFED ON.
* Escribimos la cabecera de la columnas separadas por el caracter '|'.
* Hacemos que la columna de n de cliente sea fija en el scroll horiz.
WRTE: AT /c_pos_nclie '|' NO-GAP, text-004.
* Hasta la columna hacemos fijo
SET LEFT SCROLL-BOUNDARY.
* Escribimos el detalle de cabecera de cliente
WRTE: AT c_pos_nombr '|' NO-GAP, text-005,
AT c_pos_apel1 '|' NO-GAP, text-006,
AT c_pos_apel2 '|' NO-GAP, text-007,
AT c_pos_fnaci '|' NO-GAP, text-008,
AT c_pos_final '|' NO-GAP.
* Escribimos una lnea horizontal
ULNE AT /c_pos_nclie(c_ancho_total).
Pg. 102
Curso programacin ABAP IV Curso programacin ABAP IV
* Escribimos el detalle de cabecera de facturas
WRTE: AT /c_pos_nclie '|' NO-GAP,
AT c_pos_nfact '|' NO-GAP, text-014,
AT c_pos_fefac '|' NO-GAP, text-015,
AT c_pos_impnt '|' NO-GAP, text-016,
AT c_pos_moned '|' NO-GAP, text-017,
AT c_pos_fifac '|' NO-GAP,
AT c_pos_final '|' NO-GAP.
* Escribimos una lnea horizontal
ULNE AT /c_pos_nclie(c_ancho_total).
************************************************************************
* Control de la pantalla de seleccin. *
************************************************************************
* Valores posibles para el rango S_Nombre valor desde.
AT SELECTON-SCREEN ON VALUE-REQUEST FOR s_nombr-low.
* Llamada a la rutina que muestra los valores existentes
PERFORM valores_posibles_nombre USNG s_nombr-low.
* Valores posibles para el rango S_Nombre valor hasta
AT SELECTON-SCREEN ON VALUE-REQUEST FOR s_nombr-high.
* Llamada a la rutina que muestra los valores existentes
PERFORM valores_posibles_nombre USNG s_nombr-high.
************************************************************************
* Rutinas adicionales. *
************************************************************************
*&---------------------------------------------------------------------*
*& Form VALORES_POSBLES_NOMBRE
*&---------------------------------------------------------------------*
* Muestra una ventana con los distintos nombres existentes en *
* la tabla maestro de clientes ZCLENXX. Dando la posibilidad de *
* seleccionar uno de ellos. Devuelve en el parmetro PS_NOMBR el *
* nombre seleccionado o vacio si no se realiza seleccin. *
*----------------------------------------------------------------------*
* -->PS_NOMBR Nombre seleccionado *
*----------------------------------------------------------------------*
FORM valores_posibles_nombre USNG ps_nombr LKE zclienxx-nombr.
************************************************************************
* Variables locales *
************************************************************************
* Tabla interna para almacenar los campos y atributos a visualizar.
DATA : BEGN OF i_fields OCCURS 1.
NCLUDE STRUCTURE help_value.
DATA: END OF i_fields.
* Tabla interna para almacenar el valor de campos a mostrar.
DATA : BEGN OF i_values OCCURS 0,
valor(20) TYPE c,
Pg. 103
Curso programacin ABAP IV Curso programacin ABAP IV
END OF i_values.
************************************************************************
* Proceso *
************************************************************************
* nsertamos en la tabla _FELDS los atributos del campo a mostrar
CLEAR i_fields.
i_fields-tabname = 'ZCLENXX'. " Nombre de la tabla
i_fields-fieldname = 'NOMBR'. " Nombre del campo
i_fields-selectflag = 'X'. " Valor seleccionable
APPEND i_fields.
* Seleccionamos los distintos nombres existentes en la tabla ZCLENXX
* y los almacenamos en la tabla de valores
SELECT DSTNCT nombr NTO zclienxx-nombr
FROM zclienxx
WHERE bukrs = p_bukrs.
i_values-valor = zclienxx-nombr.
APPEND i_values.
ENDSELECT.
* Llamamos a la funcin predefinida que muestra los datos
CALL FUNCTON 'HELP_VALUES_GET_WTH_TABLE'
* EXPORTNG
* CUCOL = 0
* CUROW = 0
* DSPLAY = ' '
* FELDNAME = ' '
* TABNAME = ' '
* NO_MARKNG_OF_CHECKVALUE = ' '
* TTLE_N_VALUES_LST = ' '
* TTEL = ' '
* SHOW_ALL_VALUES_AT_FRST_TME = ' '
* NO_CONVERSON = ' '
MPORTNG
select_value = ps_nombr
TABLES
fields = i_fields
valuetab = i_values
EXCEPTONS
field_not_in_ddic = 1
more_then_one_selectfield = 2
no_selectfield = 3
OTHERS = 4.
ENDFORM. " VALORES_POSBLES_NOMBRE
El Aspecto del listado es el siguiente:
Pg. 104
Curso programacin ABAP IV Curso programacin ABAP IV
0$&$#< Bases de datos lgicas$
Una base de datos lgica (DB) proporciona una visin lgica de las tablas fsicas,
pudiendo relacionar tablas entre si. Las bases de datos lgicas (LDB) son herramientas
en los que se definen los accesos a la informacin almacenada en las tablas del
diccionario as como las relaciones entre ellas, proporcionan por tanto, una visin lgica
de las tablas. Estn formadas por un conjunto de programas en los que se detallan las
tablas utilizadas, las relaciones entre ellas, los parmetros de acceso..
Las LDB simplifican la programacin de Reports ya que dentro de su lgica se pueden
encapsular los accesos de lectura, verificacin de autorizaciones, parmetros de
seleccin.etc. Por tanto se suelen utilizar si existen un conjunto elevado de programas
que utilizan la misma informacin de base de datos.
El principal inconveniente de la bases de datos lgica es su no especializacin, es decir,
las selecciones a las bases de datos son generales y por tanto sern normalmente ms
lentas que las selecciones especficas que se pueden realizar dentro de los reports.
Podemos crear nuestras propias bases se datos lgicas a travs del men
'Herramientas Workbench ABAP Desarrollo Entorno de programacin
Pg. 105
Curso programacin ABAP IV Curso programacin ABAP IV
Bases de datos lgicas' (SE36). La creacin de una base de datos lgica pasa por
definir:
Las tablas utilizadas y su relacin.
Los parmetros de seleccin sobre las tablas y sus textos. Con sus respectivos
match-code si proceden.
La cdificacin de las selecciones a las tablas dentro de los procedimientos PUT
que sern invocados cuando se ejecute la instruccin de lectura de LDB 'GET'.
La documentacin de la LDB.
A su vez, existen s bases de datos lgicas predefinidas que podemos utilizar en
nuestros programas, vamos a ver una de ellas. La estructura de la base de datos lgica
'KDF' es la siguiente:
E.ento 'ET$
GET permite obtener los datos de las tablas. El evento GET 'tablan' llamar al
procedimiento PUT 'tablan' codificado en el programa de la base de datos lgica.
La estructura de acceso a los datos desde los reports que utilicen esta base de
datos lgica ser algo as:
GET LFA1.
Sentencias.
GET LFB1.
Sentencias.
GET BSK.
...
El funcionamiento sera el siguiente, para cada uno de los registros encontrados
en la tabla LFA1 (que cumplan los criterios de seleccin), se procesaran los
registros de la tabla LFB1 y con cada uno de estos los de la tabla BSK y as
sucesivamente. Tiene dos opciones:
ATE: Hace que esta instruccin se ejecute una vez procesados todos los
registros.
-IED":Hace que solamente se recoja la informacin de los campos que se
indican a continuacin.
Si quisiramos hacer un listado con las partidas abiertas (facturas pendientes de
ser pagadas) de cada acreedor bastara realizar un REPORT en el que
indicsemos que utiliza la base de datos lgica KDF. Para ello en la pantalla
de atributos del programa indicaremos 'KD' en el campo 'Base de datos lgica' y
'F' en el campo 'de la aplicacin '.
El Report podra ser algo as:
************************************************************************
Pg. 106
Curso programacin ABAP IV Curso programacin ABAP IV
* PROGRAMA: ZREPO1XX. *
* DESCRPCON: Muestra un listado de las facturas pendientes *
* de pago de los acreedores existentes. *
* AUTOR : MAD00 FECHA: 20/08/2001 *
*----------------------------------------------------------------------*
* CONTROL DE MODFCACONES *
* FECHA. AUTOR. DESCRPCON MODFCACON. *
************************************************************************
REPORT zrepo1xx LNE-SZE 90.
************************************************************************
* Tablas de diccionario de datos
************************************************************************
TABLES: t001, " Maestro de sociedades
lfa1, " Maestro acreedores general
lfb1, " Maestro acreedores sociedad
bsik. " Partidas abiertas acreedor
************************************************************************
* Definicin de variables globales *
************************************************************************
DATA :d_dmbtr LKE bsik-dmbtr. " Total sociedad
************************************************************************
* Evento de comienzo de seleccin.
************************************************************************
START-OF-SELECTON.
* Obtenemos los datos de acreedores
GET lfa1.
FORMAT COLOR COL_KEY.
* Escribimos n y nombre del acreedor
WRTE: / lfa1-lifnr, " N de acreedor
lfa1-name1. " Nombre
* Obtenemos datos de sociedad
GET lfb1.
* Obtenemos la moneda de la sociedad
SELECT SNGLE waers NTO (t001-waers)
FROM t001
WHERE bukrs = lfb1-bukrs.
* Obtenemos los datos de las partidas abiertas de los acreedores.
GET bsik.
FORMAT COLOR COL_NORMAL.
* Obtenemos el signo en funcin del campo debe/haber
F ( bsik-shkzg = 'S' ).
bsik-wrbtr = bsik-wrbtr * -1.
bsik-dmbtr = bsik-dmbtr * -1.
ENDF.
* Escribimos los valores
WRTE: / bsik-bukrs, " Sociedad
Pg. 107
Curso programacin ABAP IV Curso programacin ABAP IV
bsik-belnr, " N doc.
bsik-zfbdt, " Fecha vencimiento
bsik-wrbtr CURRENCY bsik-waers, "mporte en mon. doc.
bsik-waers, " Moneda doc.
bsik-dmbtr CURRENCY t001-waers, " mporte moneda loc.
t001-waers. " Moneda local.
* Acumulamos el importe en moneda local
d_dmbtr = d_dmbtr + bsik-dmbtr.
* Cuando finaliza el tratamiento de cada sociedad
GET lfb1 LATE.
FORMAT COLOR COL_TOTAL.
* Escribimos el importe en moneda de la sociedad del saldo
* 'mporte total para la sociedad : XXXXX XXX'.
WRTE: text-001, d_dmbtr CURRENCY t001-waers, t001-waers.
* Fin de lnea e inicializacin de importe total sociedad
ULNE /.
CLEAR d_dmbtr.
Definiendo las cabeceras y textos oportunos, tendremos un listado con el
siguiente aspecto:
Pg. 108
Curso programacin ABAP IV Curso programacin ABAP IV
0$&$## -IED@'RO!P"$
Como su nombre indica, representa un conjunto de campos. Al definir un conjunto de
campos, nicamente se define el nombre del grupo, para incluir campos en el conjunto
ser necesario utilizar la instruccin NSERT.
Son tiles cuando hay que mostrar varias lneas de diferente tipo dentro de un mismo
informe, por ejemplo en caso anterior, mostramos lneas con datos de los proveedores
junto con sus documentos.
Relacionados con los Field-groups tenemos las siguientes instrucciones:
NSERT Permite aadir un campo a un conjunto de campos.
EXTRACT Permite volcar la informacin a los campos que forman el
conjunto. Formando un 'registro' con los campos de los que se compone el conjunto.
Cuando se define el conjunto especial HEADER, a cada uno de estos 'registros' se le
aaden los campos contenidos en l, formando un 'registro' compuesto por los campos
HEADER ms los del conjunto.
LOOP - ENDLOOP.
Con los ya conocidos eventos:
AT NEW f
AT END F
AT FST
AT LAST
Y el nuevo:
AT fg Donde fg sera un conjunto de campos, de tal modo que este evento
siempre se ejecutar cuando el tipo de registro actual del loop coincida con un
tipo de registro definido por los campos que componen el conjunto.
Vamos a generar un Report, que genera el mismo listado que en el ejemplo anterior
pero ayudndonos de FELD-GROUPS.
Vamos a definir tres conjuntos de campos,
HEADER: Con los campos LFA1-LFNR, BSK-BUKRS y BSK-BELNR.
DRECCON: Con los campos LFA1-NAME1, LFA1-STRAS, LFA1-PSTLZ y LFA1-
ORT01.
PARTDAS: BSK-DMBTR, BSK-WRBTR, BSK-SHKZG, BSK-WAERS.
Definir el HEADER implicar que los tipos de registros de DRECCON estn formados
por los campos:
LFA1-LFNR, BSK-BUKRS, BSK-BELNR, LFA1-NAME1, LFA1-STRAS, LFA1-PSTLZ,
LFA1-ORT01.
Y los registros PARTDAS estn compuestos por:
Pg. 109
Curso programacin ABAP IV Curso programacin ABAP IV
LFA1-LFNR, BSK-BUKRS, BSK-BELNR, BSK-DMBTR BSK-WRBTR BSK-SHKZG
BSK-WAERS.
De esta manera los campos del HEADER se convierten en campos claves para la
ordenacin.
El cdigo ser algo as
************************************************************************
* PROGRAMA: ZREPO2XX. *
* DESCRPCON: Muestra un listado de las facturas pendientes *
* de pago de los acreedores existentes. *
* AUTOR : MAD00 FECHA: 20/08/2001 *
*----------------------------------------------------------------------*
* CONTROL DE MODFCACONES *
* FECHA. AUTOR. DESCRPCON MODFCACON. *
************************************************************************
REPORT zrepo2xx LNE-SZE 75.
************************************************************************
* Tablas de diccionario de datos
************************************************************************
TABLES: t001, " Maestro de sociedades
lfa1, " Maestro acreedores general
lfb1, " Maestro acreedores sociedad
bsik. " Partidas abiertas acreedor
************************************************************************
* Definicin de variables globales *
************************************************************************
DATA :d_dmbtr LKE bsik-dmbtr. " Total sociedad
************************************************************************
* Definicin de FELD-GROUPS *
************************************************************************
* Definimos los conjuntos de campos
FELD-GROUPS : header, direccion, partidas.
* ncluimos los campos en cada uno de los conjuntos
NSERT lfa1-lifnr bsik-bukrs bsik-belnr NTO header.
NSERT lfa1-name1 lfa1-stras lfa1-pstlz lfa1-ort01 NTO direccion.
NSERT bsik-dmbtr bsik-wrbtr bsik-shkzg bsik-waers NTO partidas.
************************************************************************
* Evento de comienzo de seleccin.
Pg. 110
Curso programacin ABAP IV Curso programacin ABAP IV
************************************************************************
START-OF-SELECTON.
GET lfa1.
* Obtenemos los datos de los campos del conjunto direccin
EXTRACT direccion.
GET bsik.
* Obtenemos los datos de los campos del conjunto partidas
EXTRACT partidas.
************************************************************************
* Evento de comienzo final de seleccin
************************************************************************
END-OF-SELECTON.
* Ordenamos, ser por los campos de la cabecera, es decir,
* los campos del conjunto HEADER.
SORT.
* Recooremos todos los registros seleccionados
LOOP.
* Para los registros de tipo direccin
AT direccion.
* Activamos color
FORMAT COLOR COL_KEY.
* Escribimos datos del acreedor
WRTE: lfa1-lifnr,lfa1-name1, lfa1-stras, lfa1-pstlz, lfa1-ort01.
ENDAT.
* Para cada nueva sociedad
AT NEW bsik-bukrs.
* Seleccionamos la moneda de la sociedad para totalizar.
SELECT SNGLE waers NTO (t001-waers)
FROM t001
WHERE bukrs = bsik-bukrs.
ENDAT.
* Para cada tipo de registro de documentos
Pg. 111
Curso programacin ABAP IV Curso programacin ABAP IV
AT partidas.
FORMAT COLOR COL_NORMAL.
* Obtenemos el signo en funcin del campo debe/haber
F ( bsik-shkzg = 'S' ).
bsik-wrbtr = bsik-wrbtr * -1.
bsik-dmbtr = bsik-dmbtr * -1.
ENDF.
* Escribimos los valores
WRTE: / bsik-bukrs, " Sociedad
bsik-belnr, " N doc.
bsik-zfbdt, " Fecha vencimiento
bsik-wrbtr CURRENCY bsik-waers, "mporte en mon. doc.
bsik-waers, " Moneda doc.
bsik-dmbtr CURRENCY t001-waers, " mporte mon soc
t001-waers. " Moneda local.
* Acumulamos el importe en moneda local
d_dmbtr = d_dmbtr + bsik-dmbtr.
ENDAT.
* En la finalizacin de cada sociedad
AT END OF bsik-bukrs.
FORMAT COLOR COL_TOTAL.
* Escribimos total para la sociedad.
WRTE: / text-001,
bsik-bukrs, d_dmbtr CURRENCY t001-waers,
t001-waers.
ULNE /.
* nicializamos el total
CLEAR d_dmbtr.
ENDAT.
ENDLOOP.
)La salida de este &roErama es idKntica al anterior* sal(o Iue se muestran mJs datos
&ersonales del acreedor* direccin$.6
Pg. 112
Curso programacin ABAP IV Curso programacin ABAP IV
0$3 Programacin de listados interacti.os
0$3$# Introduccin$
Como hemos visto en el apartado anterior, mediante los listados planos
podemos mostrar informacin sin que el usuario acte sobre el informe,
nicamente se limita a indicar los parmetros de seleccin. Adems de mostrar
esta informacin podemos hacer que el usuario tenga opciones sobre el informe
para introducir datos, desglosar la informacin, seleccionar un conjunto de
registros..Todo esto se realiza dando al informe opciones de usuario.
0$3$& E.entos
Para manejar las opciones de usuario, disponemos de varios eventos en los cuales
podemos codificar cada una de las funciones del listado.
AT LNE-SELECTON
Este evento se ejecuta cada vez que se selecciona una lnea de la pantalla, para
seleccionar una lnea de un listado, existen varias formas, las ms habituales son
hacer Doble-click sobre la lnea, hacer Click sobre la lnea cuando nos aparece el
cursor con la forma de mano o situados sobre la lnea pulsar una tecla de funcin
generalmente (F2).
AT USER-COMMAND
Este evento se ejecuta cada vez que el usuario pulsa una opcin, bien a travs de un
men, bien a travs de un botn.
Cada opcin de usuario, lleva implcito un cdigo de comando, cuando se selecciona
una opcin, en la variable del sistema SY-UCOMM se almacena el cdigo de comando
asociado. Dentro de este evento, realizaremos tantos tratamientos como opciones
tengamos en el listado. Normalmente el esquema de programacin de este evento es
algo as:
CASE SY-UCOMM.
WHEN 'OPC1'.
* Tratamiento de la opcin 1
WHEN 'OPC2'.
* Tratamiento de la opcin 2.
..
WHEN 'OPCn'.
* Tratamiento de la opcin n.
Hay opciones que ya estn predefinidas en un informe, por ejemplo las opcin de
seleccionar una lnea del evento AT LNE-SELCTON que tiene el valor PCK, las
opciones de paginar (P+, P-, P++ y P--). .
AT PFn
Pg. 113
Curso programacin ABAP IV Curso programacin ABAP IV
'n' representa un nmero entre 0 y 99, por tanto podemos tener hasta 100 eventos
distintos cada uno 'gobernar' la tecla de funcin correspondiente.
Este evento se ejecuta cada vez que se ejecute la tecla de funcin n. Normalmente este
evento no se utiliza ya que las teclas de funcin van asociadas a comandos que se
pueden controlar en el evento AT USER-COMAND.
0$3$3 "entencias de lectura y escritura de lGneas
Para poder capturar la informacin de la lnea del listado seleccionada, tenemos las
instrucciones:
HDE:
Permite almacenar el valor de un campo en relacin con la lnea de escritura,
debe de indicarse a continuacin de la sentencia WRTE. De esta forma al seleccionar
la lnea, directamente el campo tomar el valor que tenga en la lnea. Para almacenar el
valor de un campo con HDE, no es necesario escribir el campo previamente con la
sentencia WRTE, es decir, se pueden almacenar campos que no se escriban en la
lnea del listado.
Por ejemplo:
WRTE D_NCLENTE, D_NOMBRE.
HDE D_NCLENTE.
Al seleccionar la lnea, en la variable D_NCLENTE tendremos el valor del N de
cliente.
READ LNE...
Lee el contenido de una lnea del informe y lo almacena sobre los campos indicados.
Tiene las siguientes variantes:
READ LNE lin.
READ LNE lin OF CURRENT PAGE.
READ LNE lin OF PAGE pag.
READ CURRENT LNE.
Para indicar los campos que desean ser ledos se aade
FELD VALUE f1 into g1 f2 into g2 . (Si el campo destino coincide con el origen, se
puede abreviar con FELD VALUE fi).
0$3$0 %i.eles de listados anidados$
Cada vez que se produce un evento de usuario y a continuacin, se escribe informacin
en la pantalla, se produce un nuevo nivel de lista, es decir, 'se escribe sobre una nueva
hoja que est sobre la anterior', la hoja anterior permanece y podremos volver a ella.
Pg. 114
#i$el 0
#i$el 1
#i$el 2
Curso programacin ABAP IV Curso programacin ABAP IV
El nivel de lista se controla con la variable SY-LSND.
De tal forma que esta ser incrementando despus de cada opcin de usurario, si tras
un evento de usuario queremos permanecer en el mismo nivel deberemos indicarlo
decrementando en uno esta variable. (SY-LSND = SY-LSND 1). Otra variable
relacionada con el nivel de lista es la variable SY-LST, que indica el nivel de lista
actual, normalmente vale SY-LSND 1.
0$3$2 E/emplo de listado interacti.o I$
Vamos a crear un listado interactivo, partiendo del listado de clientes, programa
'ZRE"OR22', haremos una copia de este programa y lo llamaremos 'ZRE"OC22'.
La primera modificacin consistir en escribir el campo nmero de cliente con la opcin
HOTSPOT para que sea sensible a un Click. Adems almacenaremos el valor con HDE
para que se recupere automticamente el valor del campo del cliente seleccionado.
Con el cliente seleccionado, vamos a mostrar un mensaje.
Para ello:
Dentro del evento END-OF-SELECTON.
Modificaremos la lnea donde escribimos el cdigo de cliente para activar la seleccin
con Click sobre este campo.
* Escribimos en modo Click.
WRTE: AT /C_POS_NCLE '|' NO-GAP, _ZCLENXX-NCLE HOTSPOT.
* Almacenamos el valor del campo
HDE _ZCLENXX-NCLE.
Despus de escribir todos los clientes, inicializamos la cabecera de la tabla
_ZCLENXX.
LEAR IOZLIEN226
Aadimos el evento de seleccin de lneas con el siguiente cdigo.
AT LNE-SELECTON.
* Comprobamos si es una lnea vlida, es decir el campo est informado
F ( _ZCLENXX-NCLE S NTAL ).
MESSAGE E000(38) WTH TEXT-013.
* Si se ha seleccionado una lnea vlida.
Pg. 115
Curso programacin ABAP IV Curso programacin ABAP IV
ELSE.
MESSAGE 000(38) WTH TEXT -014 _ZCLENXX-NCLE.
ENDF.
* nicializamos el contenido del campo.
CLEAR _ZCLENXX-NCLE.
Utilizamos la clase de mensajes 38 y el mensaje 000 que no tiene texto, solamente
parmetros. Como parmetros pasamos los textos correspondientes que son:
TEXT-013 -- 'Lnea no vlida'.
TEXT-014 --'Cliente seleccionado: '.
Podemos comprobar como con un Click sobre el campo NCLE se muestra el mensaje,
pero se necesita un Doble-click para conseguir el mismo efecto en el resto de la lnea.
Vamos a complicar nuestro listado de tal forma que, en lugar de mostrar un mensaje
con el cliente seleccionado, muestre en un nivel superior otro listado con las facturas del
cliente.
Para ello tendremos que realizar las siguientes modificaciones:
Dentro del evento AT LNE-SELECTON.
* Comprobamos si es una lnea vlida, es decir el campo est informado
F ( _ZCLENXX-NCLE S NTAL ).
MESSAGE E000(38) WTH TEXT-013.
* Si se ha seleccionado una lnea vlida.
ELSE.
* Llamamos al procedimiento para mostrar las facturas del cliente.
PERFORM MOSTRAR_FACTURAS_CLENTE USNG _ZCLENXX-NCLE.
ENDF.
* nicializamos el contenido del campo.
CLEAR _ZCLENXX-NCLE.
Por otra parte ser necesario aadir un nuevo evento TOP-OF-PAGE DURNG LNE-
SELECTON para escribir la cabecera de pgina del detalle de las facturas.
TOP-OF-PAGE DURNG LNE-SELECTON.
* Escribimos una lnea horizontal
ULNE AT /C_POS_NFACT(C_ANCHO_FAC).
* Activamos color de cabecera
FORMAT COLOR COL_HEADNG.
* Escribimos el detalle de la cabecera de factura.
WRTE: AT /C_POS_NFACT '|' NO-GAP, TEXT-017,
AT C_POS_FEFAC '|' NO-GAP, TEXT-018,
AT C_POS_MESFA '|' NO-GAP, TEXT-019,
AT C_POS_MPNT '|' NO-GAP, TEXT-020,
AT C_POS_MONED '|' NO-GAP, TEXT-021,
AT C_POS_FFAC '|' NO-GAP.
Pg. 116
Curso programacin ABAP IV Curso programacin ABAP IV
* Escribimos una lnea horizontal
ULNE AT /C_POS_NFACT(C_ANCHO_FAC).
El cdigo correspondiente al procedimiento MOSTRAR_FACTURAS_CLENTE ser
algo as:
*&---------------------------------------------------------------------*
*& Form MOSTRAR_FACTURAS_CLENTE
*&---------------------------------------------------------------------*
* Selecciona las facturas correspondientes al cliente recibido *
* como parmetro y las muestra en pantalla. *
* Si no se seleccionan facturas, se muestra el mensaje correspondiente
*----------------------------------------------------------------------*
* -->PE_CLENX -- N de cliente. *
*----------------------------------------------------------------------*
FORM MOSTRAR_FACTURAS_CLENTE USNG VALUE(PE_NCLE) LKE
ZCLENXX-NCLE.

************************************************************************
* Variables locales *
************************************************************************
* Tabla interna para almacenar las facturas del cliente
DATA: BEGN OF _ZFACTUXX OCCURS 0.
NCLUDE STRUCTURE ZFACTUXX.
DATA: END OF _ZFACTUXX.
************************************************************************
* Proceso *
************************************************************************

* Seleccionamos las facturas del cliente para la sociedad indicada
SELECT *
FROM ZFACTUXX NTO TABLE _ZFACTUXX
WHERE BUKRS = P_BUKRS
AND NCLE = PE_NCLE.
* Si se han seleccionado facturas
F ( SY-SUBRC = 0 ).
* Activamos color de detalle
FORMAT COLOR COL_NORMAL.

* Para cada una de las facturas seleccionadas
LOOP AT _ZFACTUXX.
* Escribimos los datos de las facturas.
WRTE: AT /C_POS_NFACT '|' NO-GAP, _ZFACTUXX-NFACT,
AT C_POS_FEFAC '|' NO-GAP, _ZFACTUXX-FECHA,
AT C_POS_MESFA '|' NO-GAP, _ZFACTUXX-MES,
AT C_POS_MPNT '|' NO-GAP, _ZFACTUXX-MPNT CURRENCY
_ZFACTUXX-MONEDA,
AT C_POS_MONED '|' NO-GAP, _ZFACTUXX-MONEDA,
Pg. 117
Curso programacin ABAP IV Curso programacin ABAP IV
AT C_POS_FFAC '|' NO-GAP.
ENDLOOP.
* Escribimos lnea final
ULNE AT /C_POS_NFACT(C_ANCHO_FAC).
* Si no se han seleccionado
ELSE.
* Mostramos mensaje de informacin con
* 'No existen facturas para el cliente:'xxx 'para la sociedad:' xxx
MESSAGE 000(38) WTH TEXT-015 PE_NCLE TEXT-016 P_BUKRS.
ENDF.
ENDFORM. " MOSTRAR_FACTURAS_CLENTE
El listado con las facturas del cliente tendr el siguiente aspecto:
El siguiente paso a realizar va a consistir en mostrar el detalle de una factura, cuando
sea seleccionada en el listado, mostrando los datos de la factura, del cliente y
calculando el VA correspondiente (Suponemos valor fijo 16%). El formato de impresin
debe ser:
Pg. 118
Curso programacin ABAP IV Curso programacin ABAP IV
FACTURA N xxxxxxxxxx
Cliente: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Fecha: dd.mm.aaaa
Mes facturacin: xxxxxxxxxx
Moneda: xxxxx
mporte Neto : xxxxxxxxxxxxxxxx
mporte VA : xxxxxxxxxxxxxxxx
Total Factura: xxxxxxxxxxxxxxxx
Para conseguir esto realizaremos las siguientes modificaciones en el programa:
Dentro del evento AT-LNE SELECTON ser necesario distinguir el nivel de detalle en
el que nos encontramos para actuar de un modo u otro, es decir, mostrando la lista de
facturas, si estamos en el nivel 0 o mostrando el detalle de la factura si estamos en el
nivel 1. Mediante la variable del sistema SY-LST podemos saber en todo momento en
que nivel de lista nos encontramos.
Del mismo modo tendremos que controlar en el evento TOP-OF-PAGE DURNG LNE-
SELECTON para escribir o no la cabecera de listado, ya que en el detalle de factura,
no vamos a escribir ninguna cabecera de pgina.
Otra modificacin importante que debemos realizar es hacer global la tabla interna de
facturas _ZFACTUXX, hasta ahora local al procedimiento,
MOSTRAR_FACTURAS_CLENTE, de este modo podremos almacenar su valor con
HDE inmediatamente despus de su escritura y este podr ser recuperado con
posterioridad en el evento AT LNE-SELECTON.
Finalmente crearemos un nuevo procedimiento MOSTRAR_DETALLE_FACTURA para
escribir el detalle de la factura seleccionada, recuperando los datos de la factura del
cliente correspondiente y calculando los importes de VA y Total factura.
El cdigo del programa resultante se muestra a continuacin:
************************************************************************
* PROGRAMA: ZREPO3XX. *
* DESCRPCON: Muestra un listado de los clientes existentes en el *
* que se detalla en n de cliente junto con el nombre y *
* apellidos. As mismo se podrn visualizar las facturas *
* de un cliente y tambin el detalle de las mismas. *
* AUTOR: MAD00 FECHA: 13/08/2001 *
Pg. 119
Curso programacin ABAP IV Curso programacin ABAP IV
*----------------------------------------------------------------------*
* CONTROL DE MODFCACONES *
* FECHA. AUTOR. DESCRPCON MODFCACON. *
************************************************************************
REPORT ZREPO3XX NO STANDARD PAGE HEADNG LNE-SZE 120 LNE-COUNT
80.
************************************************************************
* Tablas del diccionario de datos *
************************************************************************
TABLES: ZCLENXX, " Maestro de clientes.
ZFACTUXX. " Facturas clientes
************************************************************************
* Definicin de constantes *
************************************************************************
CONSTANTS:
* Constantes posiciones clientes
C_POS_NCLE(3) TYPE N VALUE 1, " Posicin n cliente
C_POS_NOMBR(3) TYPE N VALUE 12, " Posicin nombre
C_POS_APEL1(3) TYPE N VALUE 33, " Posicin apellido1
C_POS_APEL2(3) TYPE N VALUE 59, " Posicin apellido2
C_POS_FNAC(3) TYPE N VALUE 85, " Posicin F. Nacimiento
C_POS_FNAL(3) TYPE N VALUE 96, " Posicin final
C_ANCHO_TOTAL(3) TYPE N VALUE 96, " Ancho total del informe,
C_POS_TTUL(3) TYPE N VALUE 1, " Posicin ttulo,
C_POS_USUAR(3) TYPE N VALUE 37, " Posicin usuario
C_POS_FECHA(3) TYPE N VALUE 60, " Posicin fecha
C_POS_PAGNO(3) TYPE N VALUE 85, " Posicin n de pgina
* Constantes posiciones facturas.
C_POS_NFACT(3) TYPE N VALUE 1, " Posicin N de factura
C_POS_FEFAC(3) TYPE N VALUE 12, " Posicin Fecha
C_POS_MESFA(3) TYPE N VALUE 23, " Posicin Mes
C_POS_MPNT(3) TYPE N VALUE 34, " Posicin mporte
C_POS_MONED(3) TYPE N VALUE 51, " Poscicin moneda
C_POS_FFAC(3) TYPE N VALUE 57, " Posicin final factura.
C_ANCHO_FAC(3) TYPE N VALUE 57, " Ancho detalle factura.
* Constantes de posiciones de detalle de factura
C_POS_D_NC(3) TYPE N VALUE 1, " Posicin inicial
C_POS_D_FNAL(3) TYPE N VALUE 80, " Posicin final
C_POS_D_NFACT(3) TYPE N VALUE 20, " Posicon nfactura
C_POS_D_MPOR(3) TYPE N VALUE 20. " Posicin importes
************************************************************************
* Tablas internas *
************************************************************************
* Tabla interna de datos a listar
Pg. 120
Curso programacin ABAP IV Curso programacin ABAP IV
DATA: BEGN OF _ZCLENXX OCCURS 0.
NCLUDE STRUCTURE ZCLENXX.
DATA: END OF _ZCLENXX.
* Tabla interna con datos de facturas
DATA: BEGN OF _ZFACTUXX OCCURS 0.
NCLUDE STRUCTURE ZFACTUXX.
DATA: END OF _ZFACTUXX.
************************************************************************
* Pantalla de seleccin *
************************************************************************
* Parmetros
SELECTON-SCREEN BEGN OF BLOCK BLOQ1 WTH FRAME TTLE TEXT-001.
PARAMETERS P_BUKRS LKE ZCLENXX-BUKRS OBLGATORY
DEFAULT '0001'. " Sociedad
SELECTON-SCREEN END OF BLOCK BLOQ1.
* Rangos de seleccin
SELECTON-SCREEN BEGN OF BLOCK BLOQ2 WTH FRAME TTLE TEXT-002.
SELECT-OPTONS:
* Aadimos el match-code para el cdigo de cliente
S_NCLE FOR ZCLENXX-NCLE MATCHCODE OBJECT ZCXX, " N de cliente
S_NOMBR FOR ZCLENXX-NOMBR, " Nombre cliente
S_FNAC FOR ZCLENXX-FNAC. " Fecha de nacimiento
SELECTON-SCREEN END OF BLOCK BLOQ2.
************************************************************************
* Comienzo de seleccin *
************************************************************************
START-OF-SELECTON.
* nicializamos la tabla interna.
REFRESH _ZCLENXX.
CLEAR _ZCLENXX.
* Seleccionamos los datos de los clientes que cumplen criterios
SELECT *
FROM ZCLENXX NTO TABLE _ZCLENXX
WHERE BUKRS = P_BUKRS
AND NCLE N S_NCLE
AND NOMBR N S_NOMBR
AND FNAC N S_FNAC.
* Comprobamos si no hay datos seleccionados en cuyo caso,
* escribiremos un texto que lo indique.
F NOT ( SY-SUBRC = 0 ).
WRTE / TEXT-003. " No hay datos para la seleccin indicada
ENDF.
************************************************************************
* Final de la seleccin *
************************************************************************
END-OF-SELECTON.
Pg. 121
Curso programacin ABAP IV Curso programacin ABAP IV
* Vamos a escribir el listado con los clientes seleccionados en la
* tabla interna _ZCLENXX
LOOP AT _ZCLENXX.
* Escribimos el n de cliente en color clave, el resto en otro color
FORMAT COLOR COL_KEY.
* Escribimos en modo Click.
WRTE: AT /C_POS_NCLE '|' NO-GAP, _ZCLENXX-NCLE HOTSPOT.
* Almacenamos el valor del campo
HDE _ZCLENXX-NCLE.
FORMAT COLOR COL_NORMAL.
WRTE: AT C_POS_NOMBR '|' NO-GAP, _ZCLENXX-NOMBR,
AT C_POS_APEL1 '|' NO-GAP, _ZCLENXX-APEL1,
AT C_POS_APEL2 '|' NO-GAP, _ZCLENXX-APEL2,
AT C_POS_FNAC '|' NO-GAP, _ZCLENXX-FNAC,
AT C_POS_FNAL '|' NO-GAP.
ENDLOOP.
* Si se han seleccionado datos, escribimos la lnea final.
F ( SY-SUBRC = 0 ).
ULNE AT /C_POS_NCLE(C_ANCHO_TOTAL).
ENDF.
* nicializamos el valor de la cabecera de la tabla
CLEAR _ZCLENXX.
************************************************************************
* Cabecera de pgina *
************************************************************************
TOP-OF-PAGE.
* Hacemos que la lnea permanezca fija en el scroll horizontal
NEW-LNE NO-SCROLLNG.
* Activamos el color de cabecera
FORMAT COLOR COL_HEADNG NTENSFED OFF.
* Escribimos informacin de cabecera resaltando los valores
* Ttulo y sociedad
WRTE: AT C_POS_TTUL TEXT-009.
WRTE P_BUKRS NTENSFED ON.
* Usuario de creacin del informe
WRTE AT C_POS_USUAR TEXT-010.
WRTE SY-UNAME NTENSFED ON.
* Fecha de creacin
WRTE AT C_POS_FECHA TEXT-011.
WRTE SY-DATUM NTENSFED ON USNG EDT MASK '__/__/____'.
* N de pgina.
WRTE AT C_POS_PAGNO TEXT-012.
WRTE SY-PAGNO NTENSFED ON.
* Escribimos una lnea horizontal
ULNE AT /C_POS_NCLE(C_ANCHO_TOTAL).
* Activamos el color de cabeceras intensificado
FORMAT COLOR COL_HEADNG NTENSFED ON.
Pg. 122
Curso programacin ABAP IV Curso programacin ABAP IV
* Escribimos la cabecera de la columnas separadas por el caracter '|'.
* Hacemos que la columna de n de cliente sea fija en el scroll horiz.
WRTE: AT /C_POS_NCLE '|' NO-GAP, TEXT-004.
* Hasta la columna hacemos fijo
SET LEFT SCROLL-BOUNDARY.
* Escribimos el detalle de cabecera de cliente
WRTE: AT C_POS_NOMBR '|' NO-GAP, TEXT-005,
AT C_POS_APEL1 '|' NO-GAP, TEXT-006,
AT C_POS_APEL2 '|' NO-GAP, TEXT-007,
AT C_POS_FNAC '|' NO-GAP, TEXT-008,
AT C_POS_FNAL '|' NO-GAP.
* Escribimos una lnea horizontal
ULNE AT /C_POS_NCLE(C_ANCHO_TOTAL).
************************************************************************
* Cabecera de pgina durante la seleccin *
************************************************************************
TOP-OF-PAGE DURNG LNE-SELECTON.
* Comprobamos el nivel de listado para determinar la cabecera
CASE SY-LST.
* Si nivel 0. Activar cabecera facturas
WHEN 0.
* Escribimos una lnea horizontal
ULNE AT /C_POS_NFACT(C_ANCHO_FAC).
* Activamos color de cabecera
FORMAT COLOR COL_HEADNG.
* Escribimos el detalle de la cabecera de factura.
WRTE: AT /C_POS_NFACT '|' NO-GAP, TEXT-017,
AT C_POS_FEFAC '|' NO-GAP, TEXT-018,
AT C_POS_MESFA '|' NO-GAP, TEXT-019,
AT C_POS_MPNT '|' NO-GAP, TEXT-020,
AT C_POS_MONED '|' NO-GAP, TEXT-021,
AT C_POS_FFAC '|' NO-GAP.
* Escribimos una lnea horizontal
ULNE AT /C_POS_NFACT(C_ANCHO_FAC).
* Si nivel 1. No escribimos cabecera.
WHEN 1.
ENDCASE.
************************************************************************
* Evento de seleccin de lnea *
************************************************************************
AT LNE-SELECTON.
* En funcin del nivel de lista en el que nos encontremos
CASE SY-LST.
* Si nivel 0, mostrar facturas cliente
WHEN 0.
* Comprobamos si es una lnea vlida,
Pg. 123
Curso programacin ABAP IV Curso programacin ABAP IV
* es decir el campo de cdigo de cliente est informado
F ( _ZCLENXX-NCLE S NTAL ).
MESSAGE E000(38) WTH TEXT-013.
* Si se ha seleccionado un lnea vlida.
ELSE.
* Llamamos al procedimiento para mostrar las facturas del cliente.
PERFORM MOSTRAR_FACTURAS_CLENTE USNG _ZCLENXX-NCLE.
ENDF.
* nicializamos el contenido del campo.
CLEAR _ZCLENXX-NCLE.
* Si nivel 1, mostrar detalle de factura
WHEN 1.
* Comprobamos si es una lnea vlida, nfact informado
F ( _ZFACTUXX-NFACT S NTAL ).
MESSAGE E000(38) WTH TEXT-013.
* Si se ha seleccionado una lnea vlida
ELSE.
* Mostramos el detalle de factura.
PERFORM MOSTRAR_DETALLE_FACTURA USNG _ZFACTUXX-NFACT.
* nicializamos el contenido del campo.
CLEAR _ZFACTUXX-NFACT.
ENDF.
ENDCASE.
************************************************************************
* Control de la pantalla de seleccin. *
************************************************************************
* Valores posibles para el rango S_Nombre valor desde.
AT SELECTON-SCREEN ON VALUE-REQUEST FOR S_NOMBR-LOW.
* Llamada a la rutina que muestra los valores existentes
PERFORM VALORES_POSBLES_NOMBRE USNG S_NOMBR-LOW.
* Valores posibles para el rango S_Nombre valor hasta
AT SELECTON-SCREEN ON VALUE-REQUEST FOR S_NOMBR-HGH.
* Llamada a la rutina que muestra los valores existentes
PERFORM VALORES_POSBLES_NOMBRE USNG S_NOMBR-HGH.
************************************************************************
* Rutinas adicionales. *
************************************************************************
*&---------------------------------------------------------------------*
*& Form VALORES_POSBLES_NOMBRE
*&---------------------------------------------------------------------*
* Muestra una ventana con los distintos nombres existentes en *
* la tabla maestro de clientes ZCLENXX. Dando la posibilidad de *
* seleccionar uno de ellos. Devuelve en el parmetro PS_NOMBR el *
Pg. 124
Curso programacin ABAP IV Curso programacin ABAP IV
* nombre seleccionado o vacio si no se realiza seleccin. *
*----------------------------------------------------------------------*
* -->PS_NOMBR Nombre seleccionado *
*----------------------------------------------------------------------*
FORM VALORES_POSBLES_NOMBRE USNG PS_NOMBR LKE ZCLENXX-
NOMBR.
************************************************************************
* Variables locales *
************************************************************************
* Tabla interna para almacenar los campos y atributos a visualizar.
DATA : BEGN OF _FELDS OCCURS 1.
NCLUDE STRUCTURE HELP_VALUE.
DATA: END OF _FELDS.
* Tabla interna para almacenar el valor de campos a mostrar.
DATA : BEGN OF _VALUES OCCURS 0,
VALOR(20) TYPE C,
END OF _VALUES.
************************************************************************
* Proceso *
************************************************************************
* nsertamos en la tabla _FELDS los atributos del campo a mostrar
CLEAR _FELDS.
_FELDS-TABNAME = 'ZCLENXX'. " Nombre de la tabla
_FELDS-FELDNAME = 'NOMBR'. " Nombre del campo
_FELDS-SELECTFLAG = 'X'. " Valor seleccionable
APPEND _FELDS.
* Seleccionamos los distintos nombres existentes en la tabla ZCLENXX
* y los almacenamos en la tabla de valores
SELECT DSTNCT NOMBR NTO ZCLENXX-NOMBR
FROM ZCLENXX
WHERE BUKRS = P_BUKRS.
_VALUES-VALOR = ZCLENXX-NOMBR.
APPEND _VALUES.
ENDSELECT.
* Llamamos a la funcin predefinida que muestra los datos
CALL FUNCTON 'HELP_VALUES_GET_WTH_TABLE'
* EXPORTNG
* CUCOL = 0
* CUROW = 0
* DSPLAY = ' '
* FELDNAME = ' '
* TABNAME = ' '
* NO_MARKNG_OF_CHECKVALUE = ' '
* TTLE_N_VALUES_LST = ' '
* TTEL = ' '
Pg. 125
Curso programacin ABAP IV Curso programacin ABAP IV
* SHOW_ALL_VALUES_AT_FRST_TME = ' '
* NO_CONVERSON = ' '
MPORTNG
SELECT_VALUE = PS_NOMBR
TABLES
FELDS = _FELDS
VALUETAB = _VALUES
EXCEPTONS
FELD_NOT_N_DDC = 1
MORE_THEN_ONE_SELECTFELD = 2
NO_SELECTFELD = 3
OTHERS = 4.
ENDFORM. " VALORES_POSBLES_NOMBRE
*&---------------------------------------------------------------------*
*& Form MOSTRAR_FACTURAS_CLENTE
*&---------------------------------------------------------------------*
* Selecciona las facturas correspondientes al cliente recibido *
* como parmetro y las muestra en pantalla. *
* Si no se seleccionan facturas, se muestra el mensaje correspondiente
*----------------------------------------------------------------------*
* -->PE_CLENX -- N de cliente. *
*----------------------------------------------------------------------*
FORM MOSTRAR_FACTURAS_CLENTE USNG VALUE(PE_NCLE) LKE
ZCLENXX-NCLE.
************************************************************************
* Proceso *
************************************************************************
* Seleccionamos las facturas del cliente para la sociedad indicada
SELECT *
FROM ZFACTUXX NTO TABLE _ZFACTUXX
WHERE BUKRS = P_BUKRS
AND NCLE = PE_NCLE.
* Si se han seleccionado facturas
F ( SY-SUBRC = 0 ).
* Activamos color de detalle
FORMAT COLOR COL_NORMAL.
* Para cada una de las facturas seleccionadas
LOOP AT _ZFACTUXX.
* Escribimos los datos de las facturas.
WRTE: AT /C_POS_NFACT '|' NO-GAP, _ZFACTUXX-NFACT.
* Almacenamos el valor del n de factura.
HDE _ZFACTUXX-NFACT.
WRTE: AT C_POS_FEFAC '|' NO-GAP, _ZFACTUXX-FECHA,
AT C_POS_MESFA '|' NO-GAP, _ZFACTUXX-MESFA,
Pg. 126
Curso programacin ABAP IV Curso programacin ABAP IV
AT C_POS_MPNT '|' NO-GAP, _ZFACTUXX-MPNT CURRENCY
_ZFACTUXX-MONED,
AT C_POS_MONED '|' NO-GAP, _ZFACTUXX-MONED,
AT C_POS_FFAC '|' NO-GAP.
ENDLOOP.
* Escribimos lne final
ULNE AT /C_POS_NFACT(C_ANCHO_FAC).
* Si no se han seleccionado
ELSE.
* Mostramos mensaje de informacin con
* 'No existen facturas para el cliente:'xxx 'para la sociedad:' xxx
MESSAGE 000(38) WTH TEXT-015 PE_NCLE TEXT-016 P_BUKRS.
ENDF.
ENDFORM. " MOSTRAR_FACTURAS_CLENTE
*&---------------------------------------------------------------------*
*& Form MOSTRAR_DETALLE_FACTURA
*&---------------------------------------------------------------------*
* Muestra el detalle de una factura, mostrando el cliente *
* al que pertenece y calculando el VA correspondiente a la misma *
* su poniendo un tipo de VA fijo del 16 %. *
*----------------------------------------------------------------------*
* --> PE_NFACT Cdigo de factura *
*----------------------------------------------------------------------*
FORM MOSTRAR_DETALLE_FACTURA USNG VALUE(PE_NFACT) LKE
ZFACTUXX-NFACT.
************************************************************************
* Definicin de variables locales *
************************************************************************
DATA: D_NOMBRE_CLENTE(70) TYPE C, " Nombre completo
D_MPOR_VA LKE ZFACTUXX-MPNT, " mporte del VA
D_MPOR_TOTAL LKE ZFACTUXX-MPNT. " mporte total
************************************************************************
* Proceso *
************************************************************************
* Obtenemos los datos de la factura para ello leemos de la tabla interna
READ TABLE _ZFACTUXX WTH KEY NFACT = PE_NFACT.
* Comprobamos que existe
CHECK ( SY-SUBRC = 0 ).
* Obtenemos los datos necesarios del cliente
SELECT SNGLE NOMBR APEL1 APEL2
FROM ZCLENXX NTO (ZCLENXX-NOMBR, ZCLENXX-APEL1, ZCLENXX-APEL2)
WHERE BUKRS = P_BUKRS
AND NCLE = _ZFACTUXX-NCLE.
* Comprobamos que existe.
Pg. 127
Curso programacin ABAP IV Curso programacin ABAP IV
CHECK ( SY-SUBRC = 0 ).
* Escribimos los datos en la forma adecuada
ULNE AT /C_POS_D_NC(C_POS_D_FNAL).
* N de factura.
WRTE: AT /C_POS_D_NC '|',
AT C_POS_D_NFACT TEXT-022, _ZFACTUXX-NFACT,
AT C_POS_D_FNAL '|' NO-GAP.
* Formamos el nombre completo del cliente del cliente
CONCATENATE ZCLENXX-NOMBR ZCLENXX-APEL1 ZCLENXX-APEL2
NTO D_NOMBRE_CLENTE SEPARATED BY SPACE.
* Nombre del cliente
WRTE: AT /C_POS_D_NC '|',TEXT-023, D_NOMBRE_CLENTE,
AT C_POS_D_FNAL '|' NO-GAP.
* Fecha de factura
WRTE: AT /C_POS_D_NC '|', TEXT-024, _ZFACTUXX-FECHA,
AT C_POS_D_FNAL '|' NO-GAP.
* Mes de la factura.
WRTE: AT /C_POS_D_NC '|', TEXT-025, _ZFACTUXX-MESFA,
AT C_POS_D_FNAL '|' NO-GAP.
* Moneda de la factura.
WRTE: AT /C_POS_D_NC '|', TEXT-026, _ZFACTUXX-MONED,
AT C_POS_D_FNAL '|' NO-GAP.
* mporte neto:
WRTE: AT /C_POS_D_NC '|',
AT C_POS_D_MPOR TEXT-027,
_ZFACTUXX-MPNT CURRENCY _ZFACTUXX-MONED,
AT C_POS_D_FNAL '|' NO-GAP.
* Calculamos el importe de VA. (16 %).
D_MPOR_VA = ( _ZFACTUXX-MPNT * 16 ) / 100.
WRTE: AT /C_POS_D_NC '|',
AT C_POS_D_MPOR TEXT-028,
D_MPOR_VA CURRENCY _ZFACTUXX-MONED,
AT C_POS_D_FNAL '|' NO-GAP.
* Calculamos el importe total
D_MPOR_TOTAL = _ZFACTUXX-MPNT + D_MPOR_VA.
WRTE: AT /C_POS_D_NC '|',
AT C_POS_D_MPOR TEXT-029,
D_MPOR_TOTAL CURRENCY _ZFACTUXX-MONED,
AT C_POS_D_FNAL '|' NO-GAP.
* Mostramos lnea final
ULNE AT /C_POS_D_NC(C_POS_D_FNAL).
ENDFORM. " MOSTRAR_DETALLE_FACTURA
0$3$5 E/emplo de listado interacti.o II$
Pg. 128
Curso programacin ABAP IV Curso programacin ABAP IV
Vamos a ver otro ejemplo de listado interactivo, es este caso va a consistir en mostrar
un listado con los clientes existentes y poder marcar y desmarcar algunos de ellos para
su posterior tratamiento.
Para ello vamos a realizar una copia del programa anterior 'ZRE"OC22' a la que
llamaremos 'ZRE"OR22 'y sobre este realizaremos las siguientes modificaciones:
En la tabla interna _ZCLENXX, ser necesario aadir un nuevo campo (CHAR 1) para
poder ser usado como campo para marcar y desmarcar. Para ello definiremos la tabla
del siguiente modo:
* Tabla interna de datos a listar
DATA: BEGN OF _ZCLENXX OCCURS 0.
DATA MARCA(1) TYPE C. " Campo para marcar
NCLUDE STRUCTURE ZCLENXX.
DATA: END OF _ZCLENXX.
Al incluir un nuevo campo en la tabla tendremos que tenerlo en cuenta en la instruccin
SELECT (de acceso a la tabla ZCLENXX) ya que ahora la instruccin habr que
realizar el siguiente cambio.
FROM ZCLENXX NTO TABLE _ZCLENXX.
Por
FROM ZCLENXX NTO CORRESPONDNG FELDS OF TABLE _ZCLENXX.
Si no hiciramos esto, estaramos recuperando la informacin pero el valor se volcara
de forma errnea sobre los campos.
Tambin modificaremos el evento TOP-OF-PAGE para ajustar la cabecera al nuevo
campo. (Deberemos cambiar tambin el valor de las constantes para llevar el listado
dos posiciones a la derecha para abrir hueco al campo Marca).
Ser necesario adems escribir el campo en el listado en forma de casilla de seleccin
y de entrada para que pueda ser marcado y desmarcado. Para ello modificamos el
evento END-OF-SELECTON al que aadiremos:
* Escribimos el campo MARCA en forma de casilla de seleccin
* y con los atributos de campo de entrada.
WRTE: AT /C_POS_NC '|' NO-GAP,
_ZCLENXX-MARCA AS CHECKBOX NPUT ON.
Con la inclusin de estos cambios el listado tendr el siguiente aspecto:
Pg. 129
Curso programacin ABAP IV Curso programacin ABAP IV
El siguiente paso ser dar la posibilidad de mostrar una ventana con las facturas con
los clientes seleccionados, mediante la opcin de un botn en la barra de pulsadores.
Para crear opciones de usuario, bien como botones el la barra de pulsadores, bien
como opciones de men en la barra de mens, es necesario definir un STATUS.
Existen cuatro tipos de STATUS dependiendo de su utilizacin:
Dynpro
Ventana de dilogo
Lista
Lista en Ventana de dialogo
Los dos primeros se utilizan en pantallas (Programacin de dialogo que se ver en
captulos posteriores).
Los dos siguientes se utilizan en la programacin de listados interactivos. El tipo lista es
el que se utiliza normalmente en los listados a pantalla completa, quedando la lista en
ventana de dilogo para los listados en ventanas. No obstante podemos utilizar un tipo
Lista en una ventana y viceversa.
Pg. 130
Curso programacin ABAP IV Curso programacin ABAP IV
Vamos a crear un STATUS tipo lista al que llamaremos 'S;;' para ello escribimos la
instruccin para activar el STATUS, en nuestro caso, la situaremos al comienzo del
evento END-OF-SELECTON
SET PF-STATUS 'S00'.
Esta instruccin provocar que se llame al STATUS S00 en lugar de al STATUS por
defecto que se llamaba hasta ahora.
Usamos la utilidad del editor de navegar al objeto haciendo Doble-Click sobre l , nos
saldr una ventana indicando que el Status no existe, pero nos da la posibilidad de
crearlo, nos aparecer la siguiente ventana donde deberemos indicar los atributos del
STATUS, pondremos 'Listado clientes9 en texto breve y seleccionaremos el tipo 7Lista9.
Pulsamos continuar, llegaremos a la siguiente pantalla de para la definicin de
STATUS:
Pg. 131
Curso programacin ABAP IV Curso programacin ABAP IV
Por defecto, aparecen todas las opciones existentes en los listados (En los ejemplos
anteriores tenamos ya estas opciones sin crear nuestro propio STATUS), podemos
eliminar estas opciones, borrando el cdigo de comando correspondiente de la barra de
smbolos. (En nuestro caso no (amos a eliminar ninEuna).
Creamos nuestro botn facturas, para ello, escribimos el cdigo de comando que vamos
a asociar al botn en el primer hueco disponible de la barra de pulsadores, pondremos
'FAT' al pulsar ENTER nos saldr una ventana para elegir la tecla de funcin asociada
al comando, seleccionaremos 'F@', a continuacin nos saldr la siguiente ventana:
Pg. 132
Curso programacin ABAP IV Curso programacin ABAP IV
Donde pondremos el texto que mostrar el botn, '1isuali5ar Facturas' en nuestro caso.
Tras aceptar tendremos nuestro primer botn.
Aprovechamos para incluir dos nuevos botones, un botn que nos servir para marcar a
todos los clientes del listado y otro que permita desmarcarlos. Estos botones van a tener
la particularidad de que van a tener asociado un cono.
Vamos a crear el botn 'MARCAR' al que le asociaremos el CONO ( ). Para ello, nos
situamos en la primera tecla de funcin de libre definicin, que este libre (las veremos
haciendo un avance de pgina) en nuestro caso ('FS'), seleccionamos la opcin del
men 'TratarnsertarFuncin con cono (Ctrl. + F10), nos aparecer una ventana
donde pondremos el cdigo de comando asociado ',AR' en nuestro caso, nos llevar
a la siguiente ventana:
Pg. 133
Curso programacin ABAP IV Curso programacin ABAP IV
ICO%O: Es en nombre del icono, que se mostrar. (En nuestro seleccionaremos
el icono 'IONOSELETOALL' ( )).
LuicRIn4o; Te=to men>: Es el texto de informacin que se mostrar en la ventana
de ayuda que sale al situarse sobre un botn. (En nuestro caso pondremos ',arcar
todos'.)
Te=to Icono: Corresponde al texto que tendr el botn adems del icono. (En nuestro
caso lo dejamos en blanco).
Tras pulsar aceptar aparecer la opcin en la lnea correspondiente, ('F6' en nuestro
caso.
Repetimos el proceso para el botn 'DESMARCAR' asocindole a la tecla de funcin
'FT', el comando 'DESM', el CONO 'IONO!ESELETOALL9 ( ) y el texto de ayuda
'!esmarcar todos'.
Una vez definidos ambas comandos, escribiremos, MARC y DESM en la barra de
pulsadores. Junto a ellos aadiremos el comando predefinido 'PCK' correspondiente a
la seleccin de lneas (Este es el que hasta ahora se activa al hacer Click y Doble-Click)
de esta manera queda ms claro en que listados est disponible la opcin de seleccin.
A continuacin grabaremos y activaremos el STATUS.
Pg. 134
Curso programacin ABAP IV Curso programacin ABAP IV
Ser necesario definirse un nuevo STATUS con las siguientes propiedades:
"<#: Ser de tipo lista en ventana de dilogo, ser el que activemos cuando llamemos
a la ventana donde mostrar las facturas de los clientes.
Tendr las opciones que se crean por defecto ms la opcin 'PCK' que
aadiremos a la barra de pulsadores.
Para el listado de detalle de factura, no ser necesario definirse ningn STATUS ya que
utilizaremos el STATUS estndar, activndolo con 'SET PF-STATUS SPACE'.
De vuelta al cdigo del programa ya tendremos un nuevo STATUS con las opciones
disponibles. Ahora falta realizar el tratamiento de dichas opciones. Este tratamiento se
realiza en el evento AT USER-COMMAND, en el que hay que controlar:
Visualizar facturas:
Para visualizar las facturas de los clientes seleccionados, ser necesario, hacer dos
cosas.
En primer lugar, leer las marcas del listado, es decir, ver que clientes estn marcados
en pantalla, actualizaremos el campo marca en la tabla interna _ZCLENTES. Esta
tarea se realiza dentro del procedimiento 'LEER_MARCAS_LSTADO'.
Por otra parte ser necesario mostrar las facturas de aquellos clientes seleccionados,
es decir, de aquellos clientes que tengan el campo marca activado. Esto se hace dentro
del procedimiento 'MOSTRAR_FACTURAS_CLENTES' en el que se activa el STATUS
'S01' correspondiente al listado de facturas y se activa el listado en forma de ventana
utilizando la instruccin II%DOI "TARTI%' AT8 E%DI%' AT8 En la llamada al
STATUS, eliminamos la opcin de seleccin para impedir que se muestre el detalle de
la factura. Posteriormente se llama al procedimiento, ya existente,
'MOSTRAR_FACTURAS_CLENTE' para mostrar las facturas de cada cliente
seleccionado.
Marcar todos los clientes.
Para marcar y visualizar en el listado las marcas, es necesario:
Por una parte modificar el campo MARCA de todos los clientes de la tabla interna
_ZCLENXX para ponerles a 'X', utilizamos para ello el procedimiento
'MARCAR_DESMARCAR' al que le pasamos como parmetro el valor 'X'.
Una vez modificado este campo ser necesario 'refrescar' el listado, para ello,
tendremos que escribir de nuevo el listado con los clientes, permaneciendo en el mismo
nivel de lista, esto lo controlamos descontando uno a la variable SY-LSND.

Desmarcar todos los clientes.
El procedimiento para desmarcar los clientes es similar, a diferencia de que
actualizamos el campo marca con el valor SPACE.
Cambiamos el modo de controlar los niveles de lista, utilizaremos la variable SY-PFKEY
que nos indica el STATUS actual, en funcin de este, mostraremos una cabecera u otra
un listado u otro, en los eventos AT LNE-SELECTON, AT TOP-PAGE DURNG LNE-
SELECTON.
Pg. 135
Curso programacin ABAP IV Curso programacin ABAP IV
El listado completo del programa ser algo as:
************************************************************************
* PROGRAMA: ZREPO4XX. *
* DESCRPCON: Muestra un listado de los clientes existentes en el *
* que se detalla en n de cliente junto con el nombre y *
* apellidos . As mismo se podrn visualizar las facturas *
* de un cliente/s y tambin el detalle de las mismas. *
* AUTOR : Nombre y Apellidos FECHA: 13/08/2001 *
*----------------------------------------------------------------------*
* CONTROL DE MODFCACONES *
* FECHA. AUTOR. DESCRPCON MODFCACON. *
************************************************************************
REPORT ZREPO4XX NO STANDARD PAGE HEADNG LNE-SZE 120 LNE-COUNT
80.
************************************************************************
* Tablas del diccionario de datos *
************************************************************************
TABLES: ZCLENXX, " Maestro de clientes.
ZFACTUXX. " Facturas clientes
************************************************************************
* Definicin de constantes *
************************************************************************
CONSTANTS:
* Constantes posiciones clientes
C_POS_NC(3) TYPE N VALUE 1, " Posicin de inicio
C_POS_NCLE(3) TYPE N VALUE 3, " Posicin n cliente
C_POS_NOMBR(3) TYPE N VALUE 14, " Posicin nombre
C_POS_APEL1(3) TYPE N VALUE 35, " Posicin apellido1
C_POS_APEL2(3) TYPE N VALUE 61, " Posicin apellido2
C_POS_FNAC(3) TYPE N VALUE 87, " Posicin F. Nacimiento
C_POS_FNAL(3) TYPE N VALUE 98, " Posicin final
C_ANCHO_TOTAL(3) TYPE N VALUE 98, " Ancho total del informe,
C_POS_TTUL(3) TYPE N VALUE 1, " Posicin ttulo,
C_POS_USUAR(3) TYPE N VALUE 37, " Posicin usuario
C_POS_FECHA(3) TYPE N VALUE 60, " Posicin fecha
C_POS_PAGNO(3) TYPE N VALUE 85, " Posicin n de pgina
* Constantes posiciones facturas.
C_POS_NFACT(3) TYPE N VALUE 1, " Posicin N de factura
C_POS_FEFAC(3) TYPE N VALUE 12, " Posicin Fecha
C_POS_MESFA(3) TYPE N VALUE 23, " Posicin Mes
C_POS_MPNT(3) TYPE N VALUE 34, " Posicin mporte
C_POS_MONED(3) TYPE N VALUE 51, " Poscicin moneda
C_POS_FFAC(3) TYPE N VALUE 57, " Posicin final factura.
C_ANCHO_FAC(3) TYPE N VALUE 57, " Ancho detalle factura.
Pg. 136
Curso programacin ABAP IV Curso programacin ABAP IV
* Constantes de posiciones de detalle de factura
C_POS_D_NC(3) TYPE N VALUE 1, " Posicin inicial
C_POS_D_FNAL(3) TYPE N VALUE 80, " Posicin final
C_POS_D_NFACT(3) TYPE N VALUE 20, " Posicon nfactura
C_POS_D_MPOR(3) TYPE N VALUE 20. " Posicin importes
************************************************************************
* Tablas internas *
************************************************************************
* Tabla interna de datos a listar de clientes
DATA: BEGN OF _ZCLENXX OCCURS 0.
DATA MARCA(1) TYPE C. " Campo para marcar
NCLUDE STRUCTURE ZCLENXX.
DATA: END OF _ZCLENXX.
* Tabla interna con datos de facturas
DATA: BEGN OF _ZFACTUXX OCCURS 0.
NCLUDE STRUCTURE ZFACTUXX.
DATA: END OF _ZFACTUXX.
************************************************************************
* Pantalla de seleccin *
************************************************************************
* Parmetros
SELECTON-SCREEN BEGN OF BLOCK BLOQ1 WTH FRAME TTLE TEXT-001.
PARAMETERS P_BUKRS LKE ZCLENXX-BUKRS OBLGATORY
DEFAULT '0001'. " Sociedad
SELECTON-SCREEN END OF BLOCK BLOQ1.
* Rangos de seleccin
SELECTON-SCREEN BEGN OF BLOCK BLOQ2 WTH FRAME TTLE TEXT-002.
SELECT-OPTONS:
* Aadimos el match-code para el cdigo de cliente
S_NCLE FOR ZCLENXX-NCLE MATCHCODE OBJECT ZCXX, " N de cliente
S_NOMBR FOR ZCLENXX-NOMBR, " Nombre cliente
S_FNAC FOR ZCLENXX-FNAC. " Fecha de nacimiento
SELECTON-SCREEN END OF BLOCK BLOQ2.
************************************************************************
* Comienzo de seleccin *
************************************************************************
START-OF-SELECTON.
* nicializamos la tabla interna.
REFRESH _ZCLENXX.
CLEAR _ZCLENXX.
* Seleccionamos los datos de los clientes que cumplen criterios
SELECT *
FROM ZCLENXX NTO CORRESPONDNG FELDS OF TABLE _ZCLENXX
Pg. 137
Curso programacin ABAP IV Curso programacin ABAP IV
WHERE BUKRS = P_BUKRS
AND NCLE N S_NCLE
AND NOMBR N S_NOMBR
AND FNAC N S_FNAC.
* Comprobamos si no hay datos seleccionados en cuyo caso,
* escribiremos un texto que lo indique.
F NOT ( SY-SUBRC = 0 ).
WRTE / TEXT-003. " No hay datos para la seleccin indicada
ENDF.
************************************************************************
* Final de la seleccin *
************************************************************************
END-OF-SELECTON.
* Activamos el status de listado de clientes
SET PF-STATUS 'S00'.
* Llamamos al procedimiento que muestra el listado de clientes
PERFORM MOSTRAR_CLENTES.
************************************************************************
* Cabecera de pgina *
************************************************************************
TOP-OF-PAGE.
* Llamamos al proce. que escribe la cabecera del listado de clientes
PERFORM MOSTRAR_CABECERA_CLENTES.
************************************************************************
* Cabecera de pgina durante la seleccin *
************************************************************************
TOP-OF-PAGE DURNG LNE-SELECTON.
* Comprobamos el STATUS activo en funcin del cual mostraremos la
* cabecera correspondiente
CASE SY-PFKEY.
* Si status S00, activa cabecera clientes
WHEN 'S00'.
* Llamamos al proce. que escribe cabecera de clientes
PERFORM MOSTRAR_CABECERA_CLENTES.
* Si status S01, actvivamos cabecera facturas
WHEN 'S01'.
* Escribimos una lnea horizontal
ULNE AT /C_POS_NFACT(C_ANCHO_FAC).
* Activamos color de cabecera
FORMAT COLOR COL_HEADNG.
* Escribimos el detalle de la cabecera de factura.
WRTE: AT /C_POS_NFACT '|' NO-GAP, TEXT-017,
AT C_POS_FEFAC '|' NO-GAP, TEXT-018,
AT C_POS_MESFA '|' NO-GAP, TEXT-019,
AT C_POS_MPNT '|' NO-GAP, TEXT-020,
Pg. 138
Curso programacin ABAP IV Curso programacin ABAP IV
AT C_POS_MONED '|' NO-GAP, TEXT-021,
AT C_POS_FFAC '|' NO-GAP.
* Escribimos una lnea horizontal
ULNE AT /C_POS_NFACT(C_ANCHO_FAC).
ENDCASE.
************************************************************************
* Evento de seleccin de lnea *
************************************************************************
AT LNE-SELECTON.
* En funcin del STATUS existente
CASE SY-PFKEY.
* Si Listado de clientes 'S00'.
WHEN 'S00'.
* Comprobamos si es una lnea vlida,
* es decir el campo de cdigo de cliente est informado
F ( _ZCLENXX-NCLE S NTAL ).
MESSAGE E000(38) WTH TEXT-013.
* Si se ha seleccionado un lnea vlida.
ELSE.
* Activamos el STATUS del listado de facturas
SET PF-STATUS 'S01'.
* Llamamos al procedimiento para mostrar las facturas del cliente.
PERFORM MOSTRAR_FACTURAS_CLENTE USNG _ZCLENXX-NCLE.
ENDF.
* nicializamos el contenido del campo.
CLEAR _ZCLENXX-NCLE.
* Si listado de facturas 'S01'.
WHEN 'S01'.
* Comprobamos si es una lnea vlida, nfact informado
F ( _ZFACTUXX-NFACT S NTAL ).
MESSAGE E000(38) WTH TEXT-013.
* Si se ha seleccionado una lnea vlida
ELSE.
* Activamos el STATUS por defecto.
SET PF-STATUS SPACE.
* Mostramos el detalle de factura.
PERFORM MOSTRAR_DETALLE_FACTURA USNG _ZFACTUXX-NFACT.
* nicializamos el contenido del campo.
CLEAR _ZFACTUXX-NFACT.
ENDF.
ENDCASE.
************************************************************************
* Evento de comandos de usuario *
************************************************************************
AT USER-COMMAND.
Pg. 139
Curso programacin ABAP IV Curso programacin ABAP IV
* En funcin del comando seleccionado
CASE SY-UCOMM.
* Si opcin facturas
WHEN 'FACT'.
* Leemos los clientes seleccionados
PERFORM LEER_MARCAS_LSTADO.
* Mostramos las facturas de los clientes
PERFORM MOSTRAR_FACTURAS_CLENTES.
* Si opcin de marcar todos los clientes
WHEN 'MARC'.
* Marcamos a todos los cliente desmarcados
PERFORM MARCAR_DESMARCAR USNG 'X'.
* Mantenemos el mismo nivel de lista actual
SY-LSND = SY-LSND - 1.
* Reescribimos el listado en los nuevos valores actualizados
PERFORM MOSTRAR_CLENTES.
* Si opcin de desmarcar todos los clientes.
WHEN 'DESM'.
* Desmarcamos a todos los clientes marcados
PERFORM MARCAR_DESMARCAR USNG SPACE.
* Mantenemos el mismo nivel de lista actual
SY-LSND = SY-LSND - 1.
* Reescribimos el listado en los nuevos valores actualizados
PERFORM MOSTRAR_CLENTES.
ENDCASE.
************************************************************************
* Control de la pantalla de seleccin. *
************************************************************************
* Valores posibles para el rango S_Nombre valor desde.
AT SELECTON-SCREEN ON VALUE-REQUEST FOR S_NOMBR-LOW.
* Llamada a la rutina que muestra los valores existentes
PERFORM VALORES_POSBLES_NOMBRE USNG S_NOMBR-LOW.
* Valores posibles para el rango S_Nombre valor hasta
AT SELECTON-SCREEN ON VALUE-REQUEST FOR S_NOMBR-HGH.
* Llamada a la rutina que muestra los valores existentes
PERFORM VALORES_POSBLES_NOMBRE USNG S_NOMBR-HGH.
************************************************************************
* Rutinas adicionales. *
************************************************************************
*&---------------------------------------------------------------------*
*& Form VALORES_POSBLES_NOMBRE
*&---------------------------------------------------------------------*
* Muestra una ventana con los distintos nombres existentes en *
* la tabla maestro de clientes ZCLENXX. Dando la posibilidad de *
* seleccionar uno de ellos. Devuelve en el parmetro PS_NOMBR el *
Pg. 140
Curso programacin ABAP IV Curso programacin ABAP IV
* nombre seleccionado o vacio si no se realiza seleccin. *
*----------------------------------------------------------------------*
* -->PS_NOMBR Nombre seleccionado *
*----------------------------------------------------------------------*
FORM VALORES_POSBLES_NOMBRE USNG PS_NOMBR LKE ZCLENXX-
NOMBR.
************************************************************************
* Variables locales *
************************************************************************
* Tabla interna para almacenar los campos y atributos a visualizar.
DATA : BEGN OF _FELDS OCCURS 1.
NCLUDE STRUCTURE HELP_VALUE.
DATA: END OF _FELDS.
* Tabla interna para almacenar el valor de campos a mostrar.
DATA : BEGN OF _VALUES OCCURS 0,
VALOR(20) TYPE C,
END OF _VALUES.
************************************************************************
* Proceso *
************************************************************************
* nsertamos en la tabla _FELDS los atributos del campo a mostrar
CLEAR _FELDS.
_FELDS-TABNAME = 'ZCLENXX'. " Nombre de la tabla
_FELDS-FELDNAME = 'NOMBR'. " Nombre del campo
_FELDS-SELECTFLAG = 'X'. " Valor seleccionable
APPEND _FELDS.
* Seleccionamos los distintos nombres existentes en la tabla ZCLENXX
* y los almacenamos en la tabla de valores
SELECT DSTNCT NOMBR NTO ZCLENXX-NOMBR
FROM ZCLENXX
WHERE BUKRS = P_BUKRS.
_VALUES-VALOR = ZCLENXX-NOMBR.
APPEND _VALUES.
ENDSELECT.
* Llamamos a la funcin predefinida que muestra los datos
CALL FUNCTON 'HELP_VALUES_GET_WTH_TABLE'
* EXPORTNG
* CUCOL = 0
* CUROW = 0
* DSPLAY = ' '
* FELDNAME = ' '
* TABNAME = ' '
* NO_MARKNG_OF_CHECKVALUE = ' '
* TTLE_N_VALUES_LST = ' '
* TTEL = ' '
Pg. 141
Curso programacin ABAP IV Curso programacin ABAP IV
* SHOW_ALL_VALUES_AT_FRST_TME = ' '
* NO_CONVERSON = ' '
MPORTNG
SELECT_VALUE = PS_NOMBR
TABLES
FELDS = _FELDS
VALUETAB = _VALUES
EXCEPTONS
FELD_NOT_N_DDC = 1
MORE_THEN_ONE_SELECTFELD = 2
NO_SELECTFELD = 3
OTHERS = 4.
ENDFORM. " VALORES_POSBLES_NOMBRE
*&---------------------------------------------------------------------*
*& Form MOSTRAR_FACTURAS_CLENTE
*&---------------------------------------------------------------------*
* Selecciona las facturas correspondientes al cliente recibido *
* como parmetro y las muestra en pantalla. *
* Si no se seleccionan facturas, se muestra el mensaje correspondiente
*----------------------------------------------------------------------*
* -->PE_CLENX -- N de cliente. *
*----------------------------------------------------------------------*
FORM MOSTRAR_FACTURAS_CLENTE USNG VALUE(PE_NCLE) LKE
ZCLENXX-NCLE.
************************************************************************
* Proceso *
************************************************************************
* Seleccionamos las facturas del cliente para la sociedad indicada
SELECT *
FROM ZFACTUXX NTO TABLE _ZFACTUXX
WHERE BUKRS = P_BUKRS
AND NCLE = PE_NCLE.
* Si se han seleccionado facturas
F ( SY-SUBRC = 0 ).
* Activamos color de detalle
FORMAT COLOR COL_NORMAL.
* Para cada una de las facturas seleccionadas
LOOP AT _ZFACTUXX.
* Escribimos los datos de las facturas.
WRTE: AT /C_POS_NFACT '|' NO-GAP, _ZFACTUXX-NFACT.
* Almacenamos el valor del n de factura.
HDE _ZFACTUXX-NFACT.
WRTE: AT C_POS_FEFAC '|' NO-GAP, _ZFACTUXX-FECHA,
AT C_POS_MESFA '|' NO-GAP, _ZFACTUXX-MESFA,
Pg. 142
Curso programacin ABAP IV Curso programacin ABAP IV
AT S_MPNT '|' NO-GAP, _ZFACTUXX-MPNT
CURRENCY _ZFACTUXX-MONED,
AT C_POS_MONED '|' NO-GAP, _ZFACTUXX-MONED,
AT C_POS_FFAC '|' NO-GAP.
ENDLOOP.
* Escribimos lnea final
ULNE AT /C_POS_NFACT(C_ANCHO_FAC).
* Si no se han seleccionado
ELSE.
* Mostramos mensaje de Status con
* 'No existen facturas para el cliente:'xxx 'para la sociedad:' xxx
MESSAGE S000(38) WTH TEXT-015 PE_NCLE TEXT-016 P_BUKRS.
ENDF.
ENDFORM. " MOSTRAR_FACTURAS_CLENTE
*&---------------------------------------------------------------------*
*& Form MOSTRAR_DETALLE_FACTURA
*&---------------------------------------------------------------------*
* Muestra el detalle de una factura, mostrando el cliente *
* al que pertenece y calculando el VA correspondiente a la misma *
* su poniendo un tipo de VA fijo del 16 %. *
*----------------------------------------------------------------------*
* --> PE_NFACT Cdigo de factura *
*----------------------------------------------------------------------*
FORM MOSTRAR_DETALLE_FACTURA USNG VALUE(PE_NFACT) LKE
ZFACTUXX-NFACT.
************************************************************************
* Definicin de variables locales *
************************************************************************
DATA: D_NOMBRE_CLENTE(70) TYPE C, " Nombre completo
D_MPOR_VA LKE ZFACTUXX-MPNT, " mporte del VA
D_MPOR_TOTAL LKE ZFACTUXX-MPNT. " mporte total
************************************************************************
* Proceso *
************************************************************************
* Obtenemos los datos de la factura para ello leemos de la tabla interna
READ TABLE _ZFACTUXX WTH KEY NFACT = PE_NFACT.
* Comprobamos que existe
CHECK ( SY-SUBRC = 0 ).
* Obtenemos los datos necesarios del cliente
SELECT SNGLE NOMBR APEL1 APEL2
FROM ZCLENXX NTO (ZCLENXX-NOMBR, ZCLENXX-APEL1, ZCLENXX-APEL2)
WHERE BUKRS = P_BUKRS
AND NCLE = _ZFACTUXX-NCLE.
* Comprobamos que existe.
Pg. 143
Curso programacin ABAP IV Curso programacin ABAP IV
CHECK ( SY-SUBRC = 0 ).
* Escribimos los datos en la forma adecuada
ULNE AT /C_POS_D_NC(C_POS_D_FNAL).
* N de factura.
WRTE: AT /C_POS_D_NC '|',
AT C_POS_D_NFACT TEXT-022, _ZFACTUXX-NFACT,
AT C_POS_D_FNAL '|' NO-GAP.
* Formamos el nombre completo del cliente del cliente
CONCATENATE ZCLENXX-NOMBR ZCLENXX-APEL1 ZCLENXX-APEL2
NTO D_NOMBRE_CLENTE SEPARATED BY SPACE.
* Nombre del cliente
WRTE: AT /C_POS_D_NC '|',TEXT-023, D_NOMBRE_CLENTE,
AT C_POS_D_FNAL '|' NO-GAP.
* Fecha de factura
WRTE: AT /C_POS_D_NC '|', TEXT-024, _ZFACTUXX-FECHA,
AT C_POS_D_FNAL '|' NO-GAP.
* Mes de la factura.
WRTE: AT /C_POS_D_NC '|', TEXT-025, _ZFACTUXX-MESFA,
AT C_POS_D_FNAL '|' NO-GAP.
* Moneda de la factura.
WRTE: AT /C_POS_D_NC '|', TEXT-026, _ZFACTUXX-MONED,
AT C_POS_D_FNAL '|' NO-GAP.
* mporte neto:
WRTE: AT /C_POS_D_NC '|',
AT C_POS_D_MPOR TEXT-027,
_ZFACTUXX-MPNT CURRENCY _ZFACTUXX-MONED,
AT C_POS_D_FNAL '|' NO-GAP.
* Calculamos el importe de VA. (16 %).
D_MPOR_VA = ( _ZFACTUXX-MPNT * 16 ) / 100.
WRTE: AT /C_POS_D_NC '|',
AT C_POS_D_MPOR TEXT-028,
D_MPOR_VA CURRENCY _ZFACTUXX-MONED,
AT C_POS_D_FNAL '|' NO-GAP.
* Calculamos el importe total
D_MPOR_TOTAL = _ZFACTUXX-MPNT + D_MPOR_VA.
WRTE: AT /C_POS_D_NC '|',
AT C_POS_D_MPOR TEXT-029,
D_MPOR_TOTAL CURRENCY _ZFACTUXX-MONED,
AT C_POS_D_FNAL '|' NO-GAP.
* Mostramos lnea final
ULNE AT /C_POS_D_NC(C_POS_D_FNAL).
ENDFORM. " MOSTRAR_DETALLE_FACTURA
*&---------------------------------------------------------------------*
*& Form LEER_MARCAS_LSTADO
*&---------------------------------------------------------------------*
* Actualiza el campo MARCA de la tabla interna _ZCLENXX con el *
Pg. 144
Curso programacin ABAP IV Curso programacin ABAP IV
* valor actual en el informe. *
*----------------------------------------------------------------------*
FORM LEER_MARCAS_LSTADO.
************************************************************************
* Definicin de variables locales
*
************************************************************************
DATA: L_LNEA LKE SY-NDEX, " N de lnea de pantalla
L_MARCA(1) TYPE C, " Marca de pantalla
L_NCLE LKE ZCLENXX-NCLE. " Cliente de pantalla
************************************************************************
* Proceso *
************************************************************************
* nicializamos el contador de lneas
L_LNEA = 0.
* Leemos las lneas todas las lneas de pantalla
DO.
* ncrementamos el contador de lneas
L_LNEA = L_LNEA + 1.
* Leemos la lnea correspondiente
READ LNE L_LNEA FELD VALUE _ZCLENXX-MARCA NTO L_MARCA
_ZCLENXX-NCLE NTO L_NCLE.
* Si no hay error en la lectura
F ( SY-SUBRC = 0 ).
* Comprobamos si es una lnea de detalle
CHECK NOT ( L_NCLE S NTAL ).
* Leemos la entrada de la tabla correspondiente
READ TABLE _ZCLENXX WTH KEY NCLE = L_NCLE BNARY SEARCH.
* Si no hay error
CHECK ( SY-SUBRC = 0 ).
* Comprobamos si el campo marca es distinto al de la tabla
F ( _ZCLENXX-MARCA <> L_MARCA ).
* Modificamos la entrada con el valor de pantalla
_ZCLENXX-MARCA = L_MARCA.
MODFY _ZCLENXX NDEX SY-TABX.
ENDF.
* Si hay error en la lectura significar final de lista, terminamos
ELSE.
EXT.
ENDF.
ENDDO.
ENDFORM. " LEER_MARCAS_LSTADO
*&---------------------------------------------------------------------*
*& Form MOSTRAR_FACTURAS_CLENTES
*&---------------------------------------------------------------------*
* Muestra las facturas de los clientes seleccionados, es decir *
Pg. 145
Curso programacin ABAP IV Curso programacin ABAP IV
* de los que tengan el campo MARCA de la tabla interna _ZCLENXX *
* un valor 'X'. Para ello llama al procedimiento de mostrar *
* facturas de un cliente.
*----------------------------------------------------------------------*
FORM MOSTRAR_FACTURAS_CLENTES.
************************************************************************
* Proceso *
************************************************************************
* Activamos el STATUS para la ventana, eliminando la opcin
* de seleccionar para impedir navegar al detalle de factura.
SET PF-STATUS 'S01' EXCLUDNG 'PCK'.
* Abrimos una ventana para mostrar las facturas
WNDOW STARTNG AT 10 5 ENDNG AT 68 20.
* Para cada uno de los clientes seleccionados
LOOP AT _ZCLENXX
WHERE MARCA = 'X'.
* Con cada uno de los clientes llamamos al procedimiento,
* que muestra las facturas de un cliente
PERFORM MOSTRAR_FACTURAS_CLENTE USNG _ZCLENXX-NCLE.
ENDLOOP.
ENDFORM. " MOSTRAR_FACTURAS_CLENTES
*&---------------------------------------------------------------------*
*& Form MARCAR_DESMARCAR
*&---------------------------------------------------------------------*
* Actualizar el campo marca de todos los registros de la tabla *
* interna _ZCLENXX con el valor indicado en el parmetro. *
*----------------------------------------------------------------------*
* -->PE_MARCA Valor para marcar ('X' / SPACE) *
*----------------------------------------------------------------------*
FORM MARCAR_DESMARCAR USNG VALUE(PE_MARCA) TYPE C.
************************************************************************
* Proceso *
************************************************************************
* Actualizamos cada uno de los registros de la tabla interna que
* sean distinto al valor al que actualizar.
LOOP AT _ZCLENXX
WHERE MARCA <> PE_MARCA.
* Actualizamos el valor
_ZCLENXX-MARCA = PE_MARCA.
* Modificamos el registro.
MODFY _ZCLENXX.
ENDLOOP.
ENDFORM. " MARCAR_DESMARCAR
*&---------------------------------------------------------------------*
*& Form MOSTRAR_CLENTES
*&---------------------------------------------------------------------*
* Lista los clientes seleccionados por pantalla, es decir, los *
* clientes seleccionados en la tabla interna _ZCLENXX *
Pg. 146
Curso programacin ABAP IV Curso programacin ABAP IV
*----------------------------------------------------------------------*
FORM MOSTRAR_CLENTES.
************************************************************************
* Proceso *
************************************************************************
* Vamos a escribir el listado con los clientes seleccionados en la
* tabla interna _ZCLENXX
LOOP AT _ZCLENXX.
* Escribimos el campo MARCA en forma de casilla de seleccin
* y con los atributos de campo de entrada.
WRTE: AT /C_POS_NC '|' NO-GAP,
_ZCLENXX-MARCA AS CHECKBOX NPUT ON.
* Escribimos el n de cliente en color clave, el resto en otro color
FORMAT COLOR COL_KEY.
* Escribimos en modo Click.
WRTE: AT C_POS_NCLE '|' NO-GAP, _ZCLENXX-NCLE HOTSPOT.
* Almacenamos el valor del campo
HDE _ZCLENXX-NCLE.
FORMAT COLOR COL_NORMAL.
WRTE: AT C_POS_NOMBR '|' NO-GAP, _ZCLENXX-NOMBR,
AT C_POS_APEL1 '|' NO-GAP, _ZCLENXX-APEL1,
AT C_POS_APEL2 '|' NO-GAP, _ZCLENXX-APEL2,
AT C_POS_FNAC '|' NO-GAP, _ZCLENXX-FNAC,
AT C_POS_FNAL '|' NO-GAP.
ENDLOOP.
* Si se han seleccionado datos, escribimos la lnea final.
F ( SY-SUBRC = 0 ).
ULNE AT /C_POS_NC(C_ANCHO_TOTAL).
ENDF.
* nicializamos el valor de la cabecera de la tabla
CLEAR _ZCLENXX.
ENDFORM. " MOSTRAR_CLENTES
*&---------------------------------------------------------------------*
*& Form MOSTRAR_CABECERA_CLENTES
*&---------------------------------------------------------------------*
* Muestra la cabecera del listado de los clientes existentes *
*----------------------------------------------------------------------*
FORM MOSTRAR_CABECERA_CLENTES.
************************************************************************
* Proceso *
************************************************************************
* Hacemos que la lnea permanezca fija en el scroll horizontal
NEW-LNE NO-SCROLLNG.
Pg. 147
Curso programacin ABAP IV Curso programacin ABAP IV
* Activamos el color de cabecera
FORMAT COLOR COL_HEADNG NTENSFED OFF.
* Escribimos informacin de cabecera resaltando los valores
* Ttulo y sociedad
WRTE: AT C_POS_TTUL TEXT-009.
WRTE P_BUKRS NTENSFED ON.
* Usuario de creacin del informe
WRTE AT C_POS_USUAR TEXT-010.
WRTE SY-UNAME NTENSFED ON.
* Fecha de creacin
WRTE AT C_POS_FECHA TEXT-011.
WRTE SY-DATUM NTENSFED ON USNG EDT MASK '__/__/____'.
* N de pgina.
WRTE AT C_POS_PAGNO TEXT-012.
WRTE SY-PAGNO NTENSFED ON.
* Escribimos una lnea horizontal
ULNE AT /C_POS_NC(C_ANCHO_TOTAL).
* Activamos el color de cabeceras intensificado
FORMAT COLOR COL_HEADNG NTENSFED ON.
* Escribimos un espacio en blanco para el campo de marca
WRTE AT /C_POS_NC '|'.
* Escribimos la cabecera de las columnas separadas por el carcter '|'.
* Hacemos que hasta la columna de n.cli. sea fija en el scroll horiz.
WRTE: AT C_POS_NCLE '|' NO-GAP, TEXT-004.
* Hasta la columna hacemos fijo
SET LEFT SCROLL-BOUNDARY.
* Escribimos el detalle de cabecera de cliente
WRTE: AT C_POS_NOMBR '|' NO-GAP, TEXT-005,
AT C_POS_APEL1 '|' NO-GAP, TEXT-006,
AT C_POS_APEL2 '|' NO-GAP, TEXT-007,
AT C_POS_FNAC '|' NO-GAP, TEXT-008,
AT C_POS_FNAL '|' NO-GAP.
* Escribimos una lnea horizontal
ULNE AT /C_POS_NC(C_ANCHO_TOTAL).
ENDFORM. " MOSTRAR_CABECERA_CLENTES
2$ Programacin de diClogo$
2&( Introduccin
Los programas de dilogo estn orientados al intercambio dinmico de
informacin entre el usuario y el sistema. Un programa de dilogo necesita
necesitan.
2&* .odu)e Poo)
Pg. 148
Curso programacin ABAP IV Curso programacin ABAP IV
Un Module Pool consta de los siguientes elementos:
Un programa marco que contiene las definiciones de objetos
globales, las subrutinas y los mdulos de las pantallas. Estos datos suelen estar
definidos en programas del tipo NCLUDE que son incluidos en el programa
marco.
Una o varias pantallas (DYNPROS) que se componen de una
definicin grfica de los campos de entrada y salida que van a utilizar, y una
lgica de proceso que define los procesos que se van a ejecutar antes de la
visualizacin de la pantalla (PBO) y despus de la seleccin de una de las
funciones que muestre la pantalla (PA).
Uno o varios STATUS que definen las funciones disponibles de
cada pantalla en la barra de mens, la barra de smbolos y la barra de
pulsadores del sistema.
Una o varias transacciones que debern especificar la pantalla
inicial que ejecutan. Al ejecutar una transaccin del Module Pool se lanza la
pantalla asociada y, trs la ejecucin de una funcin por parte del usuario, se
realizan los procesos asociados a dicha funcin y se lanza una nueva pantalla
(que puede ser la misma) hasta que se ejecute una funcin que finalice la
ejecucin del Module Pool.
A lo largo del tema se realizar un ejemplo prctico de un Module Pool que
permitir dar altas y visualizar el contenido de la tabla de clientes ZCLENXX
creada en el tema del diccionario de datos. Las referencias a este ejemplo
prctico aparecern en cursiva. La pantalla se podr ir probando con la opcin
'Probar' del Screen Painter como se explicar ms adelante. Es importante tener
en cuenta que despus de realizar cambios en la lgica de proceso de una
pantalla o en el cdigo del programa se debern generar los objetos modificados
antes de ejecutar la pantalla, ya que sino no se tendrn en cuenta las
modificaciones.
2$&$# Programa marco
El programa marco se crea desde el editor ABAP/4.
Ruta de acceso: (En el men principal de SAP) Herramientas Workbench
ABAPDesarrollo Editor ABAP(SE38).
Los programas de tipo Module Pool deben comenzar con el literal '"APMQ'.
E<em&lo &rJcticoD Se crearJ el &roErama SA",Z/226
Al seleccionar la opcin 'Crear' aparecer la pantalla de
atributos del programa.
Pg. 149
Curso programacin ABAP IV Curso programacin ABAP IV
TGtulo: Descripcin de la funcionalidad del Module Pool.
E<6 Altas y consultas de clientes6
Tipo: Determina el tipo de programa .
Ej. 'M' (Modulepool).
Aplicacin: Mdulo al que pertenece el programa (F , HHRR .).
E<6 7N9 )"ara todas las a&licaciones.6
Grabamos el programa como objeto local. Se crear la cabecera de programa ,
salimos del editor.
El programa se ha creado sin ninguna sentencia, pero al crear las pantallas se irn
creando automticamente una serie de programas de tipo NCLUDE (que
comenzarn con los cinco ltimos caracteres del programa marco) que se aadirn
automticamente a nuestro programa a travs de las sentencias NCLUDE:
MZBXXTOP: Contendr las definiciones globales del
programa.
MZBXXO<#: Contendr los mdulos PBO de las pantallas.
MZBXXI<#: Contendr los mdulos PA de las pantallas.
MZBXX-<#: Contendr las subrutinas del programa. Si
nuestro programa no contiene subrutinas, este NCLUDE no estar presente.
2$&$& Atri*utos de una pantalla
Para crear las pantallas del Module Pool se utiliza el SCREEN PANTER.
Ruta de acceso: (En el men principal de SAP) Herramientas Workbench ABAP
Desarrollo nterfase usuario Screen painter (SE51).
Pg. 150
Curso programacin ABAP IV Curso programacin ABAP IV

En la pantalla inicial se deber especificar el nombre del programa marco y el
nmero de la pantalla. Desde esta pantalla se pueden crear, modificar o visualizar
todas las partes de una pantalla marcando las distintas opciones de objetos
parciales.
E<6 Se crearJ la &antalla 7U;;;9 en el &roErama SA",Z/22 marcando la o&cin6
Esta &antalla &ermitirJ dar altas en la tabla ZLIEN226
Al marcar la casilla 'Atributos dynpro' y seleccionar la opcin 'Crear'
aparecer la pantalla para establecer los atributos de la
pantalla.
Pg. 151
Curso programacin ABAP IV Curso programacin ABAP IV
Descripcin *re.e: Descripcin de la funcionalidad de la pantalla.
E<6 7Altas de clientes96
Tipo dynpro: Determina el tipo de la pantalla.
Existen los siguientes tipos:
Normal: Parametrizacin por defecto.
Subscreen (Dynpro de include): Este atributo
identifica a una pantalla que forma parte de otra pantalla.
Ventana de dilogo modal: Este tipo de pantallas
no tienen barra de mens ni la posibilidad de entradas en el campo de comandos.
Dynpro seleccin (vent. Dilogo modal): Esta
opcin es de utilizacin interna de SAP para las pantallas de seleccin generadas
automticamente.
Ej. 'Normal'.
Otros atri*utos :
Dynpro siguiente: ndica el nmero de la pantalla
que se ejecutar automticamente al finalizar la ejecucin de la actual si no se
controla especficamente desde la lgica de proceso, presentando por defecto el
nmero de la pantalla actual. El valor '0' finalizar la transaccin.
Pg. 152
Curso programacin ABAP IV Curso programacin ABAP IV
Posicin cursor: En este atributo se puede
especificar el nombre del campo en el que aparecer el cursor al ejecutar la
pantalla. Si est en blanco aparecer en el primero.
Gpo dynpros: Este atributo permite asignar la
pantalla a un grupo de pantallas para poder realizar modificaciones uniformes sobre
ellas.
Lineas/Columnas: ndica las lneas y columnas
ocupadas y el nmero de lneas y columnas de la pantalla.
Una vez finalizada la introduccin de atributos se grabarn con el botn (F11).
2$&$3 DiseBo grC4ico
Desde la definicin de atributos del dynpro seleccionaremos el botn
desde la pantalla de atributos de pantalla aparecerer la pantalla del editor donde se
definir el aspecto de la pantalla.
La opcin de men Pasar aCampos Dict/programa o botn permite
insertar en la pantalla campos referenciados al diccionario de datos o a variables
definidas en el programa.
Pg. 153
Curso programacin ABAP IV Curso programacin ABAP IV
Ej.: Se crearn los campos donde se podrn introducir los valores que se darn de
alta en la tabla de clientes.
%om$ Ta*la ; campo: En este campo se debe informar el nombre de la variable o
del campo de tabla que vamos a incluir en la pantalla. Si se especifica el nombre de
una tabla aparecern todos los campos de la misma pudiendo seleccionarlos
posteriormente.
Ej.: 'ZCLENXX.
Preseleccin: Permite seleccionar el texto explicativo que acompaar al campo
del diccionario y especificar si se crear como campo de entrada/salida.
Ej.: Palabra clave 'Mediano' y Msc. Ed. 'S'.
Si se va a insertar una variable definida en el programa se pulsar el botn
y si es un campo de una tabla del diccionario se pulsar el
botn .
E<6D 7Traer de !ict696
Posteriormente se seleccionar la casilla que aparece a la izquierda del campo que
se desea insertar y se pulsa el botn .
E<6D Se seleccionarJn todos6
Una vez recuperado el campo falta posicionarlo en pantalla haciendo doble click en
la posicin en la que debe aparecer. (En algunos casos aparece siempre pegado al
margen izquierdo debido a las opciones de usuario que se tengan definidas,
pudiendo moverse posteriormente como se explicar ms adelante).
Pg. 154
Curso programacin ABAP IV Curso programacin ABAP IV
Si se ha insertado un campo del diccionario con palabra clave, se crearn dos
campos en la pantalla, uno de texto con la palabra clave, y otro de entrada y salida
para visualizar o modificar los datos del campo.
E<6D La &antalla IuedarJ de la siEuiente 4ormaD
Para mover o borrar los elementos de la pantalla se debern seleccionar
posicionando el cursor en uno de ellos y pulsando el botn (o haciendo
doble click sobre el mismo). Aparecer seleccionado el campo y se podr
seleccionar un bloque posicionando el cursor en el ltimo campo que se quiera
seleccionar y pulsando el botn (o haciendo doble click sobre el mismo).
Una vez que esten seleccionados los campos se podrn borrar pulsando el botn de
borrar bloque , o mover posicionando el cursor en la posicin deseada y
pulsando el botn de desplazar .
La opcin de men TratarCrear elemento. nos permite aadir a la pantalla los
elementos que necesitemos en la posicin del cursor. Los elemento posibles son los
siguientes:
Pg. 155
Curso programacin ABAP IV Curso programacin ABAP IV
Palabra clave/Texto: Crea literales informativos en la pantalla. . Tambin
se pueden crear escribiendo el texto directamente en la pantalla separando las
palabras con el carcter "_ y pulsando Enter.
Esquema/entrada: Crea campos de entrada/salida.
Casilla seleccin: Crea un campo de entrada de longitud 1 que se puede
activar o desactivar en la pantalla. Se podr comprobar en el programa si la
casilla ha sido seleccionada chequeando si la variable asociada contiene el valor
'X' (seleccionada) o est vaca (no seleccionada).
Botn seleccin: Crea un campo con las mismas caractersticas que la
casilla de seleccin con la particularidad de que al agrupar varios botones de
seleccin, solo se puede seleccionar uno de ellos en la pantalla. Para agrupar
botones de seleccin se deber posicionar el cursor encima del primero y pulsar
el botn , despus se posicionar el cursor en el ltimo y se
pulsar el botn regresando al editor.
Pulsador: Crea un botn en la pantalla.
Marco: Crea un recuadro en la pantalla para agrupar campos
visualmente. Para delimitar el mbito del marco se deber posicionar el cursor
en la posicin final del marco y pulsar el botn .
Table control: Crea una tabla que permite tratar valores almacenados en
una tabla.
Subscreen: Crea una subpantalla.
Al crear los elementos se presentar la pantalla de atributos del elemento.
Pg. 156
Curso programacin ABAP IV Curso programacin ABAP IV
Dependiendo del tipo de elemento habra atributos que se encuentren desactivados.
El significado de los principales atributos es el siguiente:
Nom.campo: Nombre del campo/variable asociado al elemento de
pantalla. Es obligatorio en todos los elementos salvo en campos de texto y en los
marcos.
Txt.campo: Texto de salida asociado al campo. En las casillas y botones
de seleccin se activa este atributo la segunda vez que aparece la pantalla de
atributos.
con: Permite asignar un icono al campo informando su nombre. Para
seleccionar uno de los disponibles se puede utilizar el matchcode asociado al
atributo .
LongDef.: Longitud del elemento de pantalla.
Campo entrada: Al activar este atributo la pantalla permitir introducir
datos en el campo.
Campo salidas: Al estar marcado este atributo se visualizar el contenido
del campo en la pantalla.
Solo salida: Al activar este atributo, el campo de pantalla no admitir
entradas y se visualizar su contenido como un literal.
Entrada oblig.: Al activar este atributo el campo se definir de entrada
obligatoria, mostrndose un mensaje de error si no se le asigna ningn valor.
Pg. 157
Curso programacin ABAP IV Curso programacin ABAP IV
Resaltado: Al activar este atributo el contenido del campo se visualizar
resaltado en la pantalla.
nvisible: Al activar este atributo el los valores introducidos o visualizados
en el campo no sern visibles.
Ayuda de bsqueda: Se puede asociar un objeto Matchcode al campo
informando su nombre en este atributo.
Campo referencia: Este atributo solamente afecta a los campos de tipo
CURR (importe de moneda) o QUAN (cantidad). Se especificar la moneda o
unidad en la que se formatern los valores almacenados en el campo.
Una vez especificados los atributos del elemento se finaliza la pantalla pulsando el
botn .
Ej.: Marcar el atributo 'Entrada oblig' en los campos 'ZCLENXX-BUKRS',
'ZCLENXX-NOMBR', 'ZCLENXX-APEL1', 'ZCLENXX-APEL2' para establecerlos
de entrada obligatoria posicionando el cursor sobre ellos y pulsando el botn
.
rear los siEuientes elementos en la &antallaD
+n cam&o de texto con el texto de cam&o 7Fec6 Nacimiento9 &osicionada
delante del cam&o ZLIEN22-NAI como texto ex&licatico del cam&o6
+n marco con el texto de cam&o 7liente9 Iue rodee a todos los cam&os
de &antalla &ara aEru&ar los cam&os de entrada Iue se (an a dar de alta6
+n botn de seleccin con el nombre de cam&o 7!O"ARTI+LAR9 y
texto de cam&o 7"articular9Iue indicarJ Iue el cliente es un &articular si se
selecciona6
+n botn de seleccin con el nombre de cam&o 7!OE,"RESA9 y texto
de cam&o 7Em&resa9 Iue indicarJ Iue el cliente es una em&resa si se
selecciona6
Se crea un Eru&o ErJ4ico con los dos botones de seleccin como se Ba
descrito anteriormente en la creacin de botones de seleccin* &udiendo eleEir
una de las dos o&ciones anteriores seE>n sea el ti&o de cliente Iue se (a a dar
de alta6
+na casilla de seleccin con el nombre de cam&o 7!OA+TO,ATIO9 y
texto de cam&o 7Numeracin automJtica9Iue indicarJ Iue el n>mero de cliente
se debe in4ormar automJticamente si se selecciona6
+n marco con el texto de cam&o 7O&ciones9 Iue rodee a los nue(os
cam&os de &antalla creados &ara aEru&ar las o&ciones de entrada6
+n &ulsador con el nombre de cam&o 7!OALTA9* texto de cam&o 7Alta de
cliente9* Icono 7IONOREATE9 y dFunc 7ALTA9 Iue &ro(ocarJ el alta de los
datos introducidos al ser &ulsado6
Pg. 158
Curso programacin ABAP IV Curso programacin ABAP IV
Pulsando el botn aparecer una pantalla con todos los campos definidos
en la pantalla. Estos campos deben estar declarados en el NCLUDE MZXXXTOP
del programa marco (excepto los literales y los marcos).
Al final de la lista de campos aparece un campo vaco que se utiliza para asignarle
una variable en la que se almacenar el cdigo de funcin seleccionado por el
usuario en la pantalla. Esta variable debe tener la misma estructura que la variable
del sistema SY-UCOMM, que tambin almacena dicho cdigo de funcin
automticamente.
E<6D Se asiEnarJ la (ariable !OOFO!E al cam&o de &antalla Iue recibe el cdiEo
de 4uncin seleccionado &or el usuario6
Pg. 159
Curso programacin ABAP IV Curso programacin ABAP IV
!e4iniremos la (ariable automJticamente &ulsando doble clicV sobre ella )sobre el
literal !OOFO!E.6 El sistema detectarJ Iue el mdulo a>n no Ba sido creado y
nos &ro&ondrJ su creacin6
Al ace&tar la creacin de la (ariable a&arecerJ una &antalla en la Iue marcaremos
la o&cin 7cam&o de datos Elobal9 )indicando Iue se trata de una (ariable Elobal. e
in4ormaremos 7,Z/22TO"9 en el cam&o donde se indica el Include3"roErama
donde se (a a de4inir la (ariable6
Pg. 160
Curso programacin ABAP IV Curso programacin ABAP IV
Al &ulsar el botn de ace&tar* el sistema detecta Iue el INL+!E es&eci4icado no
existe y nos &ro&one su creacin )creando la sentencia INL+!E corres&ondiente
en el &roErama marco.6
!es&uKs de &ulsar el botn de ace&tar asiEnaremos la estructura del cam&o S--
+O,, a la (ariable creada y documentaremos su 4uncionalidad6
Se de4inirJn tambiKn las (ariables asociadas a la casilla de seleccin y los botones
de seleccin como ti&o 'AR de lonEitud : y la tabla ZLIEN226
Pg. 161
Curso programacin ABAP IV Curso programacin ABAP IV
Se finalizar grabando el cdigo y regresando a la lista de campos .
2$&$0 "tatus de pantalla
Despus de realizar el diseo grfico de una pantalla se debe crear un STATUS que
definir las funciones que tendr disponibles la pantalla en las barras de mens, de
herramientas del sistema y de pulsadores.
Para crear los Status de pantalla del Module Pool se utiliza el MENU PANTER.
Ruta de acceso: (En el men principal de SAP) Herramientas Workbench ABAP
Desarrollonterfase de usuario Menu painter (SE41).
Pg. 162
Curso programacin ABAP IV Curso programacin ABAP IV
En la pantalla inicial se deber especificar el nombre del programa marco y el del
Status que se va a crear. Desde esta pantalla se pueden crear, modificar o visualizar
todas las partes de un Status marcando las distintas opciones de objetos parciales.
Ej. Se crear el Status 'STA_9000' en el programa SAPMZBXX marcando la opcin
'Status' y pulsando el botn de crear . Este Status definir las
opciones que tendr disponible la pantalla '9000' de altas de clientes.
Al crear un status aparece una pantalla para definir sus atributos.
Pg. 163
Curso programacin ABAP IV Curso programacin ABAP IV
Pulsando el botn de aceptar aparecer la pantalla de actualizacin de Status donde
definiremos el men, los smbolos y los pulsadores de la pantalla.
Barra de men>s$
Para definir el men informaremos la descripcin del mismo en el campo 'Barra
mens'. (E<6D 7,en> de altas de clientes9., y el texto de las opciones de men en los
campos que aparecen vacos debajo de la descripcin (E6D 7O&ciones9).
Para informar las opciones de cada una de las opciones del men , haremos Doble-
Click sobre cada una de ellas. Una vez desplegado se crearn las funciones que
contendr la opcin de men informando el cdigo de funcin asociado (primer
campo) y la descripcin que aparecer (segundo campo).
E<6D rearemos la 4uncin 7ALTA9-7Alta de cliente9 y 7E2IT9-7Finali5ar9 Iue reali5arJn
un alta o 4inali5arJn la e<ecucin de la &antalla res&ecti(amente al ser
seleccionadas6
Pg. 164
Curso programacin ABAP IV Curso programacin ABAP IV
Se puede crear un submen informando el campo de descripcin y dejando vaco el
campo del cdigo de funcin asociado, desplegndolo posteriormente de la misma
forma que las opciones de men normales.
Para borrar una funcin de un men se debe borrar el cdigo de funcin asociado y
la descripcin.
Barra de teclas de 4uncin$
Barra de herramientas.
Sirve para definir las opciones de la barra de herramientas estandar que van a estar
disponibles.
En nuestro caso , asociaremos 'BACK' , 'EXT' y 'CANC'.
Para crear pulsadores se debern informar los cdigos de funcin asociados en los
campos de cuatro caracteres de la barra de pulsadores.
E<6D rearemos un &ulsador &ara borrar el (alor de los cam&os de &antalla
in4ormando el cdiEo de 4uncin 7/ORR9 en el &rimer cam&o de &ulsadores6
Teclas de funcin disponible.
Para asociar una tecla de funcin a una funcin del Status se informar el cdigo de
funcin en el campo correspondiente a la tecla de funcin deseada en 'Definicin
recomendada teclas func.' o 'Tecla funcin de libre defin.'.
Pg. 165
Curso programacin ABAP IV Curso programacin ABAP IV
E<6D Se asocia el cdiEo de 4uncin de altas de clientes 7ALTA9 a la tecla de 4uncin
FA y el cdiEo de 4uncin de borrado de datos 7/ORR9 a la tecla de 4uncin SBi4t-F?
con el texto 7/orrar 9 y se &ulsa Enter6
Para eliminar un pulsador se borrar el cdigo de funcin asociado.
Barra de pulsadores$
Definiremos las opciones de la barra de pulsadores que tendr la pantalla, para ello
definimos , los cdigos de funcin indicado en el apartado de lista de funciones.(En
nuestro caso indicaremos u >nico botn corres&ondiente a la o&cin de borrar.6
Otro componente necesario para la composicin de pantallas es la definicin de
ttulos de pantalla. Para crear / visualizar los ttulos en el men de acceso al MENU
PANTER seleccionamos la opcin 'Lista de ttulos' y seleccionamos la opcin de
crear , nos aparecer la siguiente pantalla donde informar el nombre y descripcin
del ttulo.
Pg. 166
Curso programacin ABAP IV Curso programacin ABAP IV
E<6D rearemos el ttulo ;;: 7Altas de clientes96
Nos aseguramos de activar tanto el estatus definido comoel ttulo. ( ).
2$&$2 gica de proceso
Las instrucciones ABAP/4 que se ejecutarn antes de visualizar una pantalla o
cuando el usuario selecciona una funcin de la pantalla se definen en la lgica de
proceso.
La programacin de la lgica de proceso se estructura en cuatro eventos de
pantalla:
PROCE"" BE-ORE O!TP!T: Sentencias que se
procesan antes de la visualizacin de la pantalla.
PROCE"" A-TER I%P!T: Sentencias que se
ejecutan despus de que el usuario haya seleccionado una funcin de la pantalla.
PROCE"" O% JEP@REL!E"T: Sentencias que
se ejecutan cuando el usuario presiona la tecla de funcin F1 (Ayuda) en un campo
de la pantalla.
PROCE"" O% VA!E@REL!E"T: Sentencias
que se ejecutan cuando el usuario presiona la tecla de funcin F4 (Entradas
posibles) en un campo de la pantalla.
Para crear/modificar la lgica de proceso de una pantalla se seleccionar la opcin
'Lgica proceso' y se pulsar el botn de modificar en la pantalla
inicial del Screen Painter.
Por defecto se crean los eventos PROCESS BEFORE OUTPUT (PBO) y PROCESS
AFTER NPUT (PA).
Pg. 167
Curso programacin ABAP IV Curso programacin ABAP IV
Las pantallas deben tener asignado un ttulo y un Status que definen el ttulo , los
mens,la barra de herramientas estandar y pulsadores que tendrn activos. Para
realizar la asignacin se utilizarn las siguientes sentencias dentro de un mdulo en
el evento PBO, ya que no se pueden utilizar directamente en la lgica de proceso de
la pantalla:
SET PF-STATUS <nombre>: Asigna un
Status a la pantalla pudiendo excluir funciones con la clusula EXCLUDNG.
SET TTLEBAR <nmero>: Asigna un ttulo
a la pantalla.
Para provocar el final de la ejecucin de un Module Pool se utiliza la sentencia
LEAVE PROGRAM.
Las sentencias que se pueden utilizar directamente en la lgica de proceso de una
pantalla son las siguientes:
Sentencia ,O!+LE6
Las sentencias de la lgica de proceso se suelen estructurarse en mdulos
delimitados por las sentencias MODULE y ENDMODULE. Estos mdulos se
Pg. 168
Curso programacin ABAP IV Curso programacin ABAP IV
almacenan en programas NCLUDE creados con el editor ABAP/4 y en ellos se
pueden utilizar todas las sentencias ABAP/4.
Para ejecutar los mdulos desde la lgica de proceso del editor Screen Painter se
utiliza la sentencia MODULE <nombre>.
Para crear un mdulo desde la lgica de proceso se crea la sentencia de llamada y
se realiza un Doble-click sobre el nombre del mdulo para que el sistema lo cree
automticamente en el programa NCLUDE correspondiente, que tambin ser
creado si es necesario.
Ej.: Crearemos el mdulo 'STATUS_9000' (que aparece por defecto en el evento
PBO de la lgica de proceso) para asignar un Status y un ttulo a la pantalla. Se
borra el asterisco que aparece al inicio de la lnea, se graba la lgica de proceso
pulsando el icono de grabar y se hace doble click sobre el literal
'STATUS_9000'.
El sistema detectarJ Iue el mdulo a>n no Ba sido creado y nos &ro&ondrJ su
creacin6
Al ace&tar la creacin del mdulo* el sistema nos &ro&ondrJ la creacin de un
INL+!E nue(o en el Iue se almacenarJn todos los mdulos "/O Iue se creen en
el module &ool6
Al ace&tar la creacin del include* el sistema crearJ automJticamente la sentencia
INL+!E PnombreQ en el &roErama marco6
!es&uKs de &ulsar el botn de ace&tar documentaremos la 4uncionalidad del
mdulo en el editor A/A"3R y eliminamos el asterisco de las dos sentencias Iue
a&arecen &or de4ecto asiEnando el Status 7STAOU;;;9 y el ttulo 7;;:9 )creados
anteriormente en el ,enu "ainter.6
Pg. 169
Curso programacin ABAP IV Curso programacin ABAP IV
Al 4inali5ar se ErabarJ el cdiEo* se reEresarJ a la lEica de &roceso de la &antalla y
se crearJ un nue(o modulo "/O 7INIIALIZAROU;;;9 )creando la llamada con la
sentencia ,O!+LE des&uKs de la llamada al mdulo 7STAT+SOU;;;9 y Baciendo
!oble- licV sobre el nombre.* Iue iniciali5arJ el cam&o de sociedad con el (alor &or
de4ecto 7;;;:96
*&------------------------------------------------------------------------------------------*
*& Module NCALZAR_9000 OUTPUT
*&------------------------------------------------------------------------------------------*
* nicializa los campos de la pantalla de altas de clientes.
*---------------------------------------------------------------------------------------------*
,O!+LE INIIALIZAROU;;; O+T"+T6
* Se establece el valor por defecto de la sociedad si no est informada
IF ZLIEN22-/+FRS IS INITIAL6
ZLIEN22-/+FRS L O/+FRS6
EN!IF6

EN!,O!+LE6 W INIIALIZAROU;;; O+T"+T
La constante O/+FRS se deberJ de4inir en el INL+!E ,Z/22TO" con la
estructura del cam&o ZLIEN22-/+FRS y el (alor 7;;;:9 de la siEuiente 4ormaD
Pg. 170
Curso programacin ABAP IV Curso programacin ABAP IV
**************************************************************************************
* Definicin de constantes
**************************************************************************************
ONSTANTSD O/+FRS LIFE ZLIEN22-/+FRS W Sociedad &or de4ecto
1AL+E X;;;:X6
Se crearJ un nue(o modulo "AI 7+SEROO,,AN!OU;;;9Iue a&arece &or de4ecto
en el e(ento "AI )IuitJndole el asterisco* Baciendo doble clicV sobre el nombre y
creando el nue(o INL+!E 7,Z/22I;:9 &ara los mdulos "AI.* Iue e<ecutarJ las
sentencias asociadas a la 4uncin de &antalla seleccionada &or el usuario6
*&-----------------------------------------------------------------------------------------------*
*& Module USER_COMMAND_9000 NPUT
*&-----------------------------------------------------------------------------------------------*
* Ejecuta las sentencias asociadas al cdigo de funcin devuelto por
* la pantalla de altas de clientes.
*---------------------------------------------------------------------------------------------------*
,O!+LE +SEROO,,AN!OU;;; IN"+T6

ASE !OOFO!E6
%'EN XALTAX6 W Alta de cliente
"ERFOR, ALTAOLIENTE6
%'EN X/ORRX6 W /orrado de datos de cliente
"ERFOR, /ORRARO!ATOS6
EN!ASE6
* Se inicializa el valor de retorno de la pantalla
LEAR !OOFO!E6

EN!,O!+LE6 W +SEROO,,AN!OU;;; IN"+T
Se creara la subrutina 7ALTAOLIENTE9 )Baciendo doble clicV sobre el nombre y
creando el nue(o INL+!E 7,Z/22F;:9 &ara las subrutinas.* Iue crearJ una
entrada en la tabla de clientes con los datos introducidos en los cam&os de &antalla6

*&-----------------------------------------------------------------------------------------------*
*& Form ALTA_CLENTE
*&-----------------------------------------------------------------------------------------------*
* Aade una entrada a la tabla de clientes ZCLENXX con los datos
* introducidos por pantalla.
*---------------------------------------------------------------------------------------------------*
FOR, ALTAOLIENTE6

N Se com&rueba Iue el numero de cliente se in4orma correctamente
"ERFOR, N+,EROOLIENTE6

N Se a8ade el reEistro de cabecera* ya in4ormado con los datos del
Pg. 171
Curso programacin ABAP IV Curso programacin ABAP IV
N nue(o cliente* a la tabla de clientes6
INSERT ZLIEN226

N Se com&rueba Iue la insercin se Ba reali5ado correctamente6
IF S--S+/R PQ X;X6
N Error al insertar el reEistro
,ESSA#E E;;;)CA. %IT' TE2T-;;:6
ELSE6
N El cliente Ba sido dado de alta
,ESSA#E S;;;)CA. %IT' TE2T-;;?6
EN!IF6

EN!FOR,6 W ALTAOLIENTE
Se crearJ la subrutina 7N+,EROOLIENTE9* Iue com&rueba Iue el n>mero de
cliente se in4orma correctamente y lo rellena con ceros a la i5Iuierda6
NY-----------------------------------------------------------------------------------------------N
NY Form N+,EROOLIENTE
NY-----------------------------------------------------------------------------------------------N
N om&rueba Iue el n>mero de cliente se in4orma correctamente
N---------------------------------------------------------------------------------------------------N
FOR, N+,EROOLIENTE6
!ATAD LONLIE LIFE ZLIEN22-NLIE6 W N>mero de cliente6

IF ZLIEN22-NLIE IS INITIAL6
N N>meracin automJticaD Se selecciona el >ltimo n>mero de cliente
N dado de alta
SELET NLIE INTO ZLIEN22-NLIE
FRO, ZLIEN22
%'ERE /+FRS L ZLIEN22-/+FRS6
EN!SELET6

IF S--S+/R L ;6
N Se in4orma el n>mero de cliente con el &osterior al seleccionado
ZLIEN22-NLIE L ZLIEN22-NLIE Z :6
ELSE6
N No existen clientes dados de alta* se iniciali5a el n>mero
ZLIEN22-NLIE L :6
EN!IF6

ELSE6

N Numeracin manualD Se com&rueba si ya existe un cliente dado de alta
N con el n>mero introducido
SELET SIN#LE NLIE INTO LONLIE
FRO, ZLIEN22
%'ERE /+FRS L ZLIEN22-/+FRS
Pg. 172
Curso programacin ABAP IV Curso programacin ABAP IV
AN! NLIE L ZLIEN22-NLIE6

IF S--S+/R L ;6
N Se iniciali5a el cdiEo de 4uncin de la &antalla &ara Iue no se
N (uel(a a e<ecutar el alta al &ulsar ENTER des&uKs del error6
LEAR !OOFO!E6
N ErrorD El n>mero de cliente ya existe6
,ESSA#E E;;;)CA. %IT' TE2T-;;C6
EN!IF6

EN!IF6
N Se rellena el n>mero de cliente con ceros &or la i5Iuierda
+N"AF ZLIEN22-NLIE TO ZLIEN22-NLIE6

EN!FOR,6 W N+,EROOLIENTE
Se crearJn los elemento de texto TE2T-;;: y TE2T-;;? en el &roErama marco con
los textos 7Error al insertar el reEistro9 y 7El cliente Ba sido dado de alta9
res&ecti(amente6
Se crearJ la subrutina 7/ORRARO!ATOS9* Iue borrarJ los datos de los cam&os de
&antalla6
NY-----------------------------------------------------------------------------------------------N
NY Form /ORRARO!ATOS
NY-----------------------------------------------------------------------------------------------N
N /orra los datos de los cam&os de &antalla6
N---------------------------------------------------------------------------------------------------N
FOR, /ORRARO!ATOS6

N Se borran los datos del cliente6
LEARD ZLIEN226

N Se establecen los (alores &or de4ecto de las o&ciones de cliente
!O"ARTI+LAR L X2X6 W Se marca la o&cin de &articular &or de4ecto
LEARD !OE,"RESA*
!OA+TO,ATIO6

EN!FOR,6 W /ORRARO!ATOS
La sentencia MODULE dispone las siguientes clusulas, que solo tienen sentido en
el evento PA, que condicionan su ejecucin al tipo de funcin seleccionado en la
pantalla:
AT EXT-COMMAND: Provoca que
solamente se ejecute el mdulo cuando se seleccione una funcin de pantalla del
tipo 'E' (Comando Exit). Al seleccionar una funcin de este tipo, el sistema no
ejecutar los mdulos que no tengan esta clusula y tampoco ejecutar chequeos
Pg. 173
Curso programacin ABAP IV Curso programacin ABAP IV
como los que realiza con los campos de entrada obligatoria, pasando directamente a
ejecutar los mdulos que tengan la clusula AT EXT-COMMAND. Esta clusula se
suele utilizar para los mdulos que controlan las funciones de salida de las
pantallas, permitiendo finalizar su ejecucin sin realizar ninguna verificacin sobre
los valores que contengan sus campos.
AT CURSOR-SELECTON: Provoca
que solamente se ejecute el mdulo cuando se ejecute sobre un campo una funcin
de seleccin asociada a la tecla de funcin F2 o se haga doble click sobre l.
E<6D Se crearJ el mdulo "AI 7SALIROU;;;9 con la clJusula AT E2IT-O,,AN!*
Iue 4inali5arJ la e<ecucin del &roErama cuando se seleccione una 4uncin del ti&o
7E9 )omando Exit.6
NY-----------------------------------------------------------------------------------------------N
NY ,odule SALIROU;;; IN"+T
NY-----------------------------------------------------------------------------------------------N
N E<ecuta las sentencias asociadas a los cdiEo de 4uncin del ti&o
N E2IT O,,AN! en la &antalla U;;;6
N---------------------------------------------------------------------------------------------------N
,O!+LE SALIROU;;; IN"+T6

ASE !OOFO!E6
N ReEresar* Finali5ar y ancelar
%'EN X/AFX OR XE2ITX OR XANX6
LEA1E "RO#RA,6
EN!ASE6
EN!,O!+LE6 W SALIROU;;; IN"+T
Se modi4ican las 4unciones 7/AF9* 7E2IT9 y 7AN9 del Status 7STAOU;;;9 desde la
o&cin de men> 7"asar aLista 4unciones9 del ,enu "ainter* estableciKndolas de
ti&o 7E9 )omando Exit.* Erabando y acti(ando el Status6
El envo de un mensaje dentro de un mdulo provocar diferentes efectos en el
programa dependiendo del tipo de mensaje:
Mensaje de error (tipo 'E'): El
sistema volver a presentar inmediatamente la pantalla sin procesar el evento PBO
y mostrar el mensaje sin permitir realizar entradas en ningn campo. Al seleccionar
una funcin de pantalla se volver a procesar directamente el mdulo que contiene
el error a no ser que se seleccione una funcin del tipo 'E', en cuyo caso se
ejecutarn los mdulos que tengan la clusula AT EXT-COMMAND.
Mensaje de advertencia (tipo 'W'): El
sistema volver a presentar inmediatamente la pantalla sin procesar el evento PBO
y mostrar el mensaje sin permitir realizar entradas en ningn campo. Si se pulsa
Enter seguir con la ejecucin del programa desde el punto donde se ha enviado el
mensaje, sino se comportar como un mensaje de error y volver a procesar
directamente el mdulo que contiene el error.
Pg. 174
Curso programacin ABAP IV Curso programacin ABAP IV
Mensaje informativo (tipo ''): Se
detiene el proceso de la pantalla y se muestra el mensaje en una pantalla de
dilogo. Al presionar Enter se continua con el proceso en la sentencia siguiente al
envo del mensaje.
Mensaje de suceso (tipo 'S'): El
mensaje se mostrar en la siguiente pantalla que se procese.
Mensaje de cancelacin (tipo 'A'):
Se detiene el proceso de la pantalla y se muestra el mensaje en una pantalla de
dilogo. Al presionar Enter finaliza la ejecucin del programa.
Sentencia FIEL!6
Esta sentencia permite asociar la ejecucin de un mdulo a un campo de pantalla
permitiendo utilizar las siguientes clusulas (que solamente tienen sentido en el
evento PA) con la sentencia MODULE:
ON NPUT: Provoca que solamente
se ejecute el mdulo si el campo asociado contiene un valor distinto al inicial en
funcin del tipo de dato (por ejemplo espacios en los campos de tipo carcter).
ON REQUEST: Provoca que
solamente se ejecute el mdulo si el campo asociado ha sido modificado.
ON -NPUT: Provoca que solamente
se ejecute el mdulo si el campo asociado contiene el valor '*' y adems tiene activo
el atributo de campo '* Entry'.
Al mostrar un mensaje de error o advertencia dentro de un mdulo asociado a un
campo de pantalla, el sistema volver a presentar inmediatamente la pantalla sin
procesar el evento PBO y mostrar el mensaje permitiendo eliminar el error
modificando el valor del campo sin permitir modificar ningn otro campo.
E<6D Se crearJ el modulo "AI 7'E0+EAROSOIE!A!9 asociado al cam&o
7ZLIEN22-/+FRS9 al inicio del e(ento "AI* Iue cBeIuearJ Iue la sociedad
introducida existe en la tabla standard de sociedades 7T;;:9 siem&re Iue se
modi4iIue su (alor6 Se deberJ declarar la tabla de sociedades 7T;;:9 en el INL+!E
7,Z/22TO"96
LEica de &rocesoD
"ROESS AFTER IN"+T6
N BeIueo de la sociedad
FIEL! ZLIEN22-/+FRS
,O!+LE 'E0+EAROSOIE!A! ON RE0+EST6
Include ,Z/22I;:D
NY-----------------------------------------------------------------------------------------------N
NY ,odule 'E0+EAROSOIE!A! IN"+T
NY-----------------------------------------------------------------------------------------------N
N BeIuea Iue la sociedad introducida existe en la tabla de sociedades6
N---------------------------------------------------------------------------------------------------N
,O!+LE 'E0+EAROSOIE!A! IN"+T6

Pg. 175
Curso programacin ABAP IV Curso programacin ABAP IV
N Se selecciona la sociedad en la tabla de sociedades
SELET SIN#LE N FRO, T;;:
%'ERE /+FRS L ZLIEN22-/+FRS6

IF S--S+/R PQ ;6
N ErrorD La sociedad Y no estJ &re(ista6
,ESSA#E E:S@)F@. %IT' ZLIEN22-/+FRS6
EN!IF6

EN!,O!+LE6 W 'E0+EAROSOIE!A! IN"+T
Include ,Z/22TO"D
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N !e4inicin de tablas
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
TA/LESD ZLIEN22* W ,aestro de clientes
T;;:6 W Sociedades
El transporte de los valores introducidos en los campos de pantalla se actualizan en
las variables asociadas del programa al inicio del evento PA, excepto los campos
que tienen asociada una sentencia FELD. En este caso su contenido no se
actualiza con el introducido en la pantalla hasta que se ejecute la sentencia FELD
correspondiente. Por este motivo no se deber utilizar el valor de un campo que
tenga una sentencia FELD asociada, en sentencias del programa que se ejecuten
antes que sta, ya que se estara utilizando el valor antiguo del campo.
Sentencias 'AIN $ EN!'AIN6
Estas sentencias permiten agrupar varias sentencias FELD asociando la ejecucin
de un mdulo a varios campos y permitiendo utilizar las siguientes clusulas con la
sentencia MODULE:
ON NPUT: Solamente se ejecuta el
mdulo si todos los campos asociados contienen un valor distinto al inicial en
funcin del tipo de dato
ON CHAN-NPUT: Solamente se
ejecuta el mdulo si alguno de los campos asociados contiene un valor distinto al
inicial en funcin del tipo de dato.
ON REQUEST: Solamente se
ejecuta el mdulo si todos los campos asociados han sido modificados.
ON CHAN-REQUEST: Solamente
se ejecuta el mdulo si algn campo asociado ha sido modificado.
E<6D Se crearJ el modulo "AI 7'E0+EAROA+TO,ATIO9 asociado a los cam&os
7ZLIEN22-NLIE9 y 7!OA+TO,ATIO9 llamJndolo des&uKs del mdulo
7'E0+EAROSOIE!A!9* Iue cBeIuearJ Iue no estK in4ormado el numero de
cliente si estJ marcado el 4laE de numeracin automJtica y Iue obliEarJ a in4ormarlo
en caso contrario6
LEica de &rocesoD
Pg. 176
Curso programacin ABAP IV Curso programacin ABAP IV
N BeIueo de numeracin automJtica de clientes
'AIN6
FIEL!D ZLIEN22-NLIE*
!OA+TO,ATIO ,O!+LE 'E0+EAROA+TO,ATIO6
EN!'AIN6
Include ,Z/22I;:D
NY-----------------------------------------------------------------------------------------------N
NY ,odule 'E0+EAROA+TO,ATIO IN"+T
NY-----------------------------------------------------------------------------------------------N
N BeIuea Iue el numero de cliente y el 4laE de numeracin automJtica
N no estan in4ormados o (acos simultJneamente6
N---------------------------------------------------------------------------------------------------N
,O!+LE 'E0+EAROA+TO,ATIO IN"+T6

IF !OA+TO,ATIO IS INITIAL6
N FlaE de numeracin automJtica desmarcado
IF ZLIEN22-NLIE IS INITIAL6
N N>mero de cliente no in4ormado
N ErrorD In4orme el n>mero de cliente o marIue el 4laE de num6 aut6
,ESSA#E E;;;)CA. %IT' TE2T-;;R TE2T-;;@6
EN!IF6
ELSE6
N FlaE de numeracin automJtica marcado
IF NOT ZLIEN22-NLIE IS INITIAL6
N N>mero de cliente in4ormado
N ErrorD /orre el n>mero de cliente o desmarIue el 4laE de num6 aut6
,ESSA#E E;;;)CA. %IT' TE2T-;;S TE2T-;;@6
EN!IF6
EN!IF6

EN!,O!+LE6 W 'E0+EAROA+TO,ATIO IN"+T
Se crearJn los elementos de texto TE2T-;;R* TE2T-;;@ y TE2T-;;S en el
&roErama marco con los textos 7In4orme el n>mero de cliente o marIue el 4laE9* 7de
numeracin automJtica9* 7/orre el n>mero de cliente o desmarIue el 4laE9
res&ecti(amente6
E<6D Se crearJ el modulo "AI 7'E0+EAROTI"OOLIENTE9 asociado a los cam&os
7ZLIEN22-FNAI* 7!O"ARTI+LAR9 y 7!OE,"RESA9 llamJndolo des&uKs del
mdulo 7'E0+EAROA+TO,ATIO9* Iue cBeIuearJ Iue la 4ecBa de nacimiento
estJ in4ormada si el cliente es un &articular y Iue no lo estJ si es una em&resa6
LEica de &rocesoD
N BeIueo de ti&o de cliente
'AIN6
FIEL!D ZLIEN22-FNAI*
!O"ARTI+LAR*
Pg. 177
Curso programacin ABAP IV Curso programacin ABAP IV
!OE,"RESA ,O!+LE 'E0+EAROTI"OOLIENTE6
EN!'AIN6
Include ,Z/22I;:D
NY-----------------------------------------------------------------------------------------------N
NY ,odule 'E0+EAROTI"OOLIENTE IN"+T
NY-----------------------------------------------------------------------------------------------N
N BeIuea Iue la 4ecBa de nacimiento estJ in4ormada si el cliente es un
N &articular y Iue no lo estJ si es una em&resa6
N---------------------------------------------------------------------------------------------------N
,O!+LE 'E0+EAROTI"OOLIENTE IN"+T6

IF !OE,"RESA IS INITIAL6
N liente ti&o &articular
IF ZLIEN22-FNAI IS INITIAL6
N FecBa de nacimiento de cliente no in4ormada
N ErrorD Los &articulares deben tener in4ormada la 46 de nacimiento
,ESSA#E E;;;)CA. %IT' TE2T-;;T TE2T-;;A6
EN!IF6
ELSEIF NOT ZLIEN22-FNAI IS INITIAL6
N liente ti&o em&resa con la 4ecBa de nacimiento in4ormada
N ErrorD Las em&resas no deben tener in4ormada la 46 de nacimiento
,ESSA#E E;;;)CA. %IT' TE2T-;;U TE2T-;;A6
EN!IF6

EN!,O!+LE6 W 'E0+EAROTI"OOLIENTE IN"+T
Se crearJn los elementos de texto TE2T-;;T* TE2T-;;A y TE2T-;;U en el
&roErama marco con los textos 7Los &articulares deben tener in4ormada9* 7la 4ecBa de
nacimiento9* 7Las em&resas no deben tener in4ormada9 res&ecti(amente6
2$&$5 Transacciones
Se deber crear al menos una transaccin para ejecutar un Module Pool desde la
opcin del men principal de SAP 'Herramientas Workbench ABAP
DesarrolloMs herramientasTransacciones' (SE93).
E<6D Se crea la transaccin 7Z/229 Iue e<ecutarJ la &antalla de altas de clientes6
Pg. 178
Curso programacin ABAP IV Curso programacin ABAP IV
Se informar el cdigo de la transaccin y, al pulsar el icono de crear , se
presentar una pantalla en la que se seleccionar el tipo de transaccin
'Transaccin dilogo'.
Se introducen los datos de la transaccin en la siguiente pantalla.
Pg. 179
Curso programacin ABAP IV Curso programacin ABAP IV
Te=to transaccin: Definicin funcional de la transaccin.
E<6D Alta de clientes6
Programa: Nombre del programa marco del Module Pool que ejecutar la
transaccin.
E<6D 7SA",Z/2296
%S dynpro: Nmero de la pantalla inicial del Module Pool que ejecutar la
transaccin.
E<6D 7U;;;96
O*/eto autori:acin: Permite asignar un objeto de autorizacin a la transaccin.
Se finalizar pulsando el icono de grabar y seleccionando la opcin de objeto
local.
E<6D E<ecutar la &antalla de alta de clientes e<ecutando la transaccin 7Z/229 desde
la lnea de comandos del sistema6
2$&$6 Modi4icacin dinCmica de una pantalla
La definicin grfica de una pantalla se puede modificar dinmicamente durante su
ejecucin utilizando la tabla SCREEN, una tabla interna del sistema en la que se
almacenan automticamente los atributos de los campos de una pantalla en tiempo
de ejecucin.
Pg. 180
Curso programacin ABAP IV Curso programacin ABAP IV
Los atributos de un campo de pantalla se pueden modificar directamente sobre el
registro correspondiente de la tabla SCREEN en el evento PBO.
Los campos que componen la tabla son los siguientes:
SCREEN-NAME: Nombre del campo.
SCREEN-GROUP1: Grupo de modificacin
1.
SCREEN-GROUP2: Grupo de modificacin
2.
SCREEN-GROUP3: Grupo de modificacin
3.
SCREEN-GROUP4: Grupo de modificacin
4.
SCREEN-REQURED: Atributo de campo
obligatorio.
SCREEN-NPUT: Atributo de campo de
entrada.
SCREEN-OUTPUT: Atributo de campo de
salida.
SCREEN-NTENSFED: Atributo de campo
resaltado.
SCREEN-NVSBLE: Atributo de campo
invisible.
SCREEN-LENGTH: Longitud del campo.
SCREEN-ACTVE: Este campo est
reservado para uso interno del sistema.
SCREEN-DSPLAY_3D
SCREEN-VALUE_HELP
SCREEN-REQUEST
Para activar o desactivar atributos se asignar el valor '0' (desactivado) o '1'
(activado).
Se pueden realizar modificaciones conjuntas de varios campos agrupndolos con el
mismo valor en uno de los cuatro atributos de grupo.
E[6D Se modi4icarJ la &antalla de altas de clientes e(itando Iue se muestre el botn
de altas Basta Iue no se cBeIueen los datos de &antalla &ulsando ENTER* y una
(e5 cBeIueados no se &odrJn modi4icar6
Se marcarJ el atributo 7In(isible9 del cam&o de &antalla !OALTA en el editor ErJ4ico
SREEN "AINTER6
Pg. 181
Curso programacin ABAP IV Curso programacin ABAP IV
Se in4ormarJ el &rimer cam&o del atributo 7#ru&os9 con el literal 7LI9 en el editor
ErJ4ico SREEN "AINTER en los siEuientes cam&osD 7ZLIEN22-/+FRS9*
7ZLIEN22-NLIE9* 7ZLIEN22-NO,/R9* 7ZLIEN22-A"EL:9* 7ZLIEN22-A"EL?9*
7ZLIEN22-FNAI9* 7!O"ARTI+LAR9* 7!OE,"RESA9 y 7!OA+TO,ATIO96 En las
casillas y botones de seleccin Bay Iue tener cuidado en escoEer el cam&o de
entrada de lonEitud : y no el literal descri&ti(o6
Pg. 182
Curso programacin ABAP IV Curso programacin ABAP IV
Se asignar el cdigo de funcin 'ENTE' con el texto 'Chequear datos' al smbolo
enter del STA_9000 en el Menu Painter.
Pg. 183
Curso programacin ABAP IV Curso programacin ABAP IV
Se de4inirJ la (ariable Elobal !OLIENTEOORRETO de ti&o carJcter y lonEitud :6
Include ,Z/22TO"D
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N !e4inicin de (ariables
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
!ATAD !OOFO!E LIFE S--+O,,* W diEo de 4uncin de &antalla
!O"ARTI+LAR):. T-"E * W FlaE de cliente &articular
!OE,"RESA):. T-"E * W FlaE de em&resa
!OA+TO,ATIO):. T-"E * W FlaE de numeracin automJtica
!OLIENTEOORRETO):. ty&e c6 W FlaE de cliente correcto
Se incluye el tratamiento del cdiEo de 4uncin 7ENTE9 en el mdulo "AI
7+SEROO,,AN!OU;;;9 acti(ando el 4laE de cliente correcto* ya Iue si se Ba
lleEado a e<ecutar este mdulo siEni4ica Iue no se Ba lan5ado ninE>n mensa<e de
error en los mdulos de (eri4icacin &re(ios y los datos cBeIueados son correctos6
ASE !OOFO!E6
%'EN XALTAX6 W Alta de cliente
"ERFOR, ALTAOLIENTE6
%'EN X/ORRX6 W /orrado de datos de cliente
"ERFOR, /ORRARO!ATOS6
Pg. 184
Curso programacin ABAP IV Curso programacin ABAP IV
%'EN XENTEX6 W BeIuear datos de cliente
!OLIENTEOORRETO L X2X6
EN!ASE6
Se modi4ica la subrutina 7/ORRARO!ATOS9 &ara Iue inicialice tambiKn el contenido
del 4laE de cliente correcto6
N Se borran los datos del cliente6
LEARD ZLIEN22*
!OLIENTEOORRETO6
Se modi4ica la subrutina 7ALTAOLIENTE9 &ara Iue borre los datos del cliente
des&uKs de reali5ar un alta correcta reali5ando una llamada a la subrutina
7/ORRARO!ATOS96
N El cliente Ba sido dado de alta
,ESSA#E S;;;)CA. %IT' TE2T-;;?6
N Se iniciali5an los datos del cliente des&uKs del alta
"ERFOR, /ORRARO!ATOS6
EN!IF6
Se crearJ el mdulo "/O 7,O!IFIARO"ANTALLAOU;;;9 llamado al inicio del
e(ento "/O* Iue desacti(arJ la entrada de los cam&os del cliente y mostrarJ el
botn de altas si estJ marcado el 4laE de cliente correcto* y BarJ lo contrario si no
estJ marcado6
LEica de &rocesoD
"ROESS /EFORE O+T"+T6
N ,odi4icacin de atributos de &antalla
,O!+LE ,O!IFIARO"ANTALLAOU;;;6
Include ,Z/22O;:D
NY-----------------------------------------------------------------------------------------------N
NY ,odule ,O!IFIARO"ANTALLAOU;;; O+T"+T
NY-----------------------------------------------------------------------------------------------N
N ,odi4ica los atributos de los cam&os de la &antalla de altas
N---------------------------------------------------------------------------------------------------N
,O!+LE ,O!IFIARO"ANTALLAOU;;; O+T"+T6

LOO" AT SREEN6

IF SREEN-NA,E L X!OALTAX6
N Solamente se (isuali5arJ el botn de altas si estJ marcado el 4laE
N de cliente correcto6
IF !OLIENTEOORRETO IS INITIAL6
SREEN-IN1ISI/LE L :6
ELSE6
SREEN-IN1ISI/LE L ;6
Pg. 185
Curso programacin ABAP IV Curso programacin ABAP IV
EN!IF6
EN!IF6
IF SREEN-#RO+": L XLIX6
N Los cam&os de entrada aEru&ados con el literal XLIX en el Eru&o :
N solo &ermitirJn entradas si estJ desmarcado el 4laE de cliente
N correcto
IF !OLIENTEOORRETO IS INITIAL6
SREEN-IN"+T L :6
ELSE6
SREEN-IN"+T L ;6
EN!IF6

EN!IF6

N Se actuali5an las modi4icaciones en la tabla SREEN
,O!IF- SREEN6

EN!LOO"6

EN!,O!+LE6 W ,O!IFIARO"ANTALLAOU;;; O+T"+T
2$&$1 Ta*le Control
En una pantalla se pueden editar datos en una tabla utilizando el objeto TABLE
CONTROL.
E<6D Se crea la &antalla 7U:;;9en el &roErama SA",Z/22 con el texto bre(e
71isuali5acin de clientes9* ti&o normal y dyn&ro siEuiente 7U:;;9* Iue editarJ los
clientes dados de alta en la tabla ZLIEN22 en un TA/LE ONTROL6
Se asiEna la (ariable 7!OOFO!E9 en la lista de cam&os del editor ErJ4ico* al
cam&o de ti&o OF Iue contiene el cdiEo de 4uncin seleccionado en la &antalla6
Se crea el Status 7STAOU:;;9 con el texto 71isuali5acin de clientes9 y ti&o 7!yn&ro9
con el cdiEo de 4uncin 'EXT' en el smbolo de finalizar , y el ttulo '002' con el
texto 'Visualizacin de clientes'.
Se crea el mdulo "/O 7STAT+SOU:;;9 en el Iue se asiEna el Status 7STAOU:;;9 y
el ttulo 7;;?9 a la &antalla6
NY-----------------------------------------------------------------------------------------------N
NY ,odule STAT+SOU:;; O+T"+T
NY-----------------------------------------------------------------------------------------------N
N Establece el Status y el ttulo de la &antalla de (isuali5acin de
N clientes6
N---------------------------------------------------------------------------------------------------N
Pg. 186
Curso programacin ABAP IV Curso programacin ABAP IV
,O!+LE STAT+SOU:;; O+T"+T6
SET "F-STAT+S XSTAOU:;;X6
SET TITLE/AR X;;?X6

EN!,O!+LE6 W STAT+SOU:;; O+T"+T
Se crea el mdulo "AI 7+SEROO,,AN!OU:;;9 Iue e<ecutarJ las sentencias
asociadas a la 4uncin seleccionada en la &antalla6
NY-----------------------------------------------------------------------------------------------N
NY ,odule +SEROO,,AN!OU:;; IN"+T
NY-----------------------------------------------------------------------------------------------N
N E<ecuta las sentencias asociadas al cdiEo de 4uncin de(uelto &or
N la &antalla de (isuali5acin de clientes6
N---------------------------------------------------------------------------------------------------N
,O!+LE +SEROO,,AN!OU:;; IN"+T6

ASE !OOFO!E6
%'EN XE2ITX6 W Finali5ar
N Se 4inali5a la e<ecucin del &roErama
LEA1E "RO#RA,6
EN!ASE6

EN!,O!+LE6 W +SEROO,,AN!OU:;; IN"+T
Se de4ine la tabla interna IOLIENTES en el Include de de4iniciones Elobales del
&roErama* con la estructura de la tabla ZLIEN22 y un cam&o caracter de lonEitud
:* &ara almacenar los clientes Iue se (an a (isuali5ar en el TA/LE ONTROL6
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N !e4inicin de tablas internas
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N Tabla interna de clientes
!ATAD /E#IN OF IOLIENTES O+RS ;6
INL+!E STR+T+RE ZLIEN226
!ATAD ,ARA*
EN! OF IOLIENTES6
Para crear un TABLE CONTROL ejecutaremos la opcin de men 'TratarCrear
elementoTable control' desde el editor grfico del SCREEN PANTER.
Pg. 187
Curso programacin ABAP IV Curso programacin ABAP IV
Se deber especificar la posicin final del TABLE CONTROL pulsando el botn
o haciendo doble click. Se informarn sus atributos en la ventana que
aparece a continuacin.
Pg. 188
Curso programacin ABAP IV Curso programacin ABAP IV
%om*re: Nombre de la variable asociada al TABLE CONTROL. Esta variable ser
un control de tipo TABLEVEW.
Ej.: 'TC_CLENTES'.
"tributos genera)es9
Lneas separ.: Permite incluir lneas de
separacin horizontales y verticales entre los campos del TABLE CONTROL.
E<6D Se acti(an las o&ciones 71ertical9 y 7'ori5ontal96
Con Tt.: Permite aadir un ttulo al TABLE
CONTROL en la lnea superior, asocindole una variable en la que se informar el
literal.
Con cabeceras columnas: Permite aadir
una lnea de cabecera con las descripciones de las columnas.
Ej.: Marcado.
Posib. De configurar: Permite la posibilidad
de configurar la secuencia y el ancho de las columnas en tiempo de ejecucin
utilizando el icono que aparece en el TABLE CONTROL.
Posibi)idad de arcar9
Lneas: Especifica el nmero de lneas que
se pueden marcar al mismo tiempo.
E<6D 7sim&le96
Columnas: Especifica el nmero de
columnas que se pueden marcar al mismo tiempo.
Pg. 189
Curso programacin ABAP IV Curso programacin ABAP IV
E<6D 7sin96
Con columna marca: Al activar esta opcin
se incluye una columna de marcadores para poder seleccionar lneas, al inicio del
TABLE CONTROL. Se deber especificar un campo asociado que deber estar
definido como caracter de longitud 1. Esta opcin es incompatible con la seleccin
'Sin posibilidad de marcar lneas'.
E<6D marcado y asociado al cam&o IOLIENTES-,ARA6
Ctd. Columnas fijas: Especifica el nmero
de columnas, comenzando por la izquierda, que permanecern fijas en el TABLE
CONTROL. Las columnas fijas no se podrn mover con el ratn ni se desplazarn al
paginar horizontalmente.
A continuacin se debern crear los campos que van a componer el TABLE
CONTROL pulsando el botn .
En la siguiente pantalla , tendremos que indicar el nombre de los campos que lo
componen.
Pg. 190
Curso programacin ABAP IV Curso programacin ABAP IV
Se pueden insertar campos asociados a varibles ya definidas en el programa o
campos del diccionario de datos seleccionndolos con el botn
y crendolos con el botn de pegar . Se pueden especificar los ttulos de las
columnas en las que aparecern los campos pulsando el botn
sobre el campo 'Ttulo para columna tabla' correspondiente,
seleccionando el tipo de campo 'Texto/Palabra clave' e informando el literal en el
atributo 'Txt. Campo'.
E<6D Se insertan todos los cam&os de la tabla interna IOLIENTES menos el
mandante )IOLIENTES-,AN!T. y el 4laE de cliente marcado
)IOLIENTESO,ARA. utili5ando el botn 6
Se in4orman los ttulos de los cam&os con los literales 7Soc69* 7N>mero9* 7Nombre9*
7"rimer a&ellido9* 7SeEundo a&ellido9 y 7FecBa nac69
Pg. 191
Curso programacin ABAP IV Curso programacin ABAP IV
Con el botn se pueden modificar los atributos de los campos
que componen el TABLE CONTROL, posicionando el cursor en el campo
correspondiente antes de pulsarlo.
E<6D Se desmarca el atributo 7am&o entrada9 en todos los cam&os del TA/LE
ONTROL &ara e(itar Iue se &ueda modi4icar su contenido6
Se finaliza la insercin de campos del TABLE CONTROL pulsando el botn
Una vez terminada la definicin grfica se define el control asociado al TABLE
CONTROL en el include de definiciones globales del programa utilizando la
sentencia CONTROL <nombre> TYPE TABLEVEW.
E<6D Se de4ine el control 7TOLIENTES9 en el Include 7,Z/22TO"9 con la siEuiente
sentenciaD
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N !e4inicin de controles
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
ONTROLSD TOLIENTES T-"E TA/LE1IE% +SIN# SREEN U:;;6
El control definido tendr la siguiente campos:
FXED_COLS: Nmero de columnas fijas.
LNES: Nmero de lneas que contienen
datos.
TOP_LNE: Primera lnea visualizada en
pantalla.
CURRENT_LNE: Lnea actual (dentro de
un bucle LOOP . ENDLOOP).
LEFT_COL: Primera columna desplazable.
LNE_SEL_MODE: ndicador de seleccin
de lneas (0 = sin, 1 = simple, 2 = mltiple).
COL_SEL_MODE: ndicador de seleccin
de columnas (0 = sin, 1 = simple, 2 = mltiple).
LNE_SELECTOR: Flag de utilizacin de
columna marca.
V_SCROLL: Flag de barra de scroll vertical.
H_GRD: Flag de lneas de separacin
horizontal.
V_GRD: Flag de lneas de separacin
vertical.
COLS: Campo de tipo CXTAB_COLUMN
que contiene un registro por cada columna del TABLE CONTROL con los siguientes
campos:
SCREEN: Atributos de pantalla con
la misma estructura que la tabla interna del sistema SCREEN.
NDEX: Posicin de la columna.
SELECTED: Flag de columna
marcada.
Pg. 192
Curso programacin ABAP IV Curso programacin ABAP IV
VSLENGTH: Ancho visible de la
columna.
NVSBLE: ndicador de columna
invisible.
En la lgica de proceso se debe tratar el TABLE CONTROL en los eventos PBO y
PA con las instrucciones LOOP y ENDLOOP. El tratamiento se puede realizar de
dos formas:
Con tabla interna.
Los campos que componen el TABLE CONTROL hacen referencia a los campos de
una tabla interna que contiene los datos que se van a editar.
En el evento PBO se carga el TABLE CONTROL con las instrucciones LOOP y
ENDLOOP de la siguiente forma:
LOOP AT <tabla_interna> WTH CONTROL <control>
CURSOR <ndice>.
.
ENDLOOP.
Cada vuelta del bucle LOOP se corresponde con una lnea del TABLE CONTROL
que se informa automticamente con los valores contenidos en el registro de la tabla
interna.

El ndice especificado en la clusula CURSOR se actualiza automticamente con el
nmero de lnea del TABLE CONTROL que se est tratando. Se puede utilizar como
ndice el campo CURRENT_LNE del TABLE CONTROL.
E<6D Se crea el mdulo "/O 7INFOR,AROLIENTES9* llamado des&uKs del mdulo
7STAT+SOU:;;9* Iue carEarJ la tabla interna de clientes con los datos de la tabla
ZLIEN226
NY-----------------------------------------------------------------------------------------------N
NY ,odule INFOR,AROLIENTES O+T"+T
NY-----------------------------------------------------------------------------------------------N
N arEa los reEistro de clientes de la tabla ZLIEN22 en la tabla
N interna de clientes6
N---------------------------------------------------------------------------------------------------N
,O!+LE INFOR,AROLIENTES O+T"+T6
!ATAD LOLINEAS T-"E I6 W ontador de reEistros de clientes

N Se com&rueba si la tabla interna de clientes tiene reEistros
!ESRI/E TA/LE IOLIENTES LINES LOLINEAS6

N Si estJ (aca se carEa con los datos de la tabla de clientes
IF LOLINEAS IS INITIAL6
Pg. 193
Curso programacin ABAP IV Curso programacin ABAP IV
SELET N INTO TA/LE IOLIENTES
FRO, ZLIEN226

N Se ordenan los reEistros
SORT IOLIENTES6

EN!IF6

EN!,O!+LE6 W INFOR,AROLIENTES O+T"+T
Se carEarJn los datos de la tabla interna IOLIENTES en el TA/LE ONTROL
TOLIENTES en el e(ento "/O de la lEica de &roceso des&uKs de la llamada al
mdulo 7INFOR,AROLIENTES96
"ROESS /EFORE O+T"+T6
N Establecimiento de STAT+S de &antalla
,O!+LE STAT+SOU:;;6
N arEa de datos en la tabla interna de clientes
,O!+LE INFOR,AROLIENTES6
N Se carEan los datos de clientes en el TA/LE ONTROL
LOO" AT IOLIENTES
%IT' ONTROL TOLIENTES
+RSOR TOLIENTES-+RRENTOLINE6
EN!LOO"6
En el evento PA se leen las lneas del TABLE CONTROL con las instrucciones
LOOP y ENDLOOP de la siguiente forma:
LOOP AT <tabla_interna>.
.
MODULE <modulo>.
.
ENDLOOP.
En cada vuelta del bucle LOOP se informa el contenido de una lnea del TABLE
CONTROL en la cabecera de la tabla interna.
E<6D Se crean las sentencias LOO" y EN!LOO" en el e(ento "AI antes de e<ecutar
el mdulo 7+SEROO,,AN!OU:;;9* aunIue no se reali5a ninE>n tratamiento con
los datos del TA/LE ONTROL6
"ROESS AFTER IN"+T6
N Se accede a los datos del TA/LE ONTROL
LOO" AT IOLIENTES6
EN!LOO"6
N ontrol de 4unciones de usuario
,O!+LE +SEROO,,AN!OU:;;6
Pg. 194
Curso programacin ABAP IV Curso programacin ABAP IV
Sin tabla interna.
En el evento PBO se carga el TABLE CONTROL con las instrucciones LOOP y
ENDLOOP de la siguiente forma:
LOOP WTH CONTROL <control>.
.
MODULE <modulo>.
.
ENDLOOP.
Cada vuelta del bucle LOOP se corresponde con una lnea del TABLE CONTROL,
debiendo asignar el contenido a sus campos en un mdulo. Los campos de un
TABLE CONTROL se referencian igual que los de una tabla interna (control-campo).
Se puede finalizar la introduccin de lneas en el TABLE CONTROL con la sentencia
EXT FROM STEP-LOOP, que provoca la salida del bucle LOOP.

En el evento PA se leen las lneas del TABLE CONTROL con las instrucciones
LOOP y ENDLOOP de la siguiente forma:
LOOP WTH CONTROL <control>.
.
MODULE <modulo>.
.
ENDLOOP.
En cada vuelta del bucle LOOP se puede acceder al contenido de una lnea del
TABLE CONTROL en un mdulo.
Es obligatorio especificar las sentencias LOOP y ENDLOOP en los eventos PBO y
PA siempre que exista un TABLE CONTROL en la pantalla.
Dentro de un bucle LOOP . ENDLOOP la variable del sistema SY-LOOPC contiene
el nmero de lneas table control que se visualizan simultneamente en la pantalla, y
la variable SY-STEPL contiene el nmero de lnea que se est tratando.
Se puede determinar la lnea del TABLE CONTROL en la que est posicionado el
cursor con la instruccin GET CURSOR LNE <variable>.
E<6D Se crea la transaccin 7Z229* Iue e<ecutarJ la &antalla de (isuali5acin de
clientes* con el ti&o 7Transaccin de diJloEo9* el texto 71isuali5acin de clientes9* el
&roErama 7SA",Z/229 y la &antalla 7U:;;96
Se e<ecuta la &antalla de (isuali5acin de clientes e<ecutando la transaccin 7Z229
desde la lnea de comandos del sistema
Pg. 195
Curso programacin ABAP IV Curso programacin ABAP IV
2$&$E "ecuencia de proceso de pantallas
Despus de procesarse el evento PA de una pantalla se ejecutar la pantalla
especificada en el atributo 'Pantalla siguiente'.
Se puede modificar dinmicamente la secuencia de ejecucin de las pantallas en el
programa utilizando las siguientes sentencias:
SET SCREEN.
La sentencia 'SET SCREEN <pantalla>' modifica temporalmente el valor del atributo
'Dynpro siguiente'. La siguiente vez que se ejecute la pantalla el atributo tendr su
valor original.
LEAVE SCREEN.
Esta sentencia finaliza la ejecucin de la pantalla y provoca la ejecucin de la
pantalla especificada en el atributo 'Dynpro siguiente'.
LEAVE TO SCREEN.
La sentencia 'LEAVE TO SCREEN <pantalla>' finaliza la ejecucin de la pantalla y
provoca la ejecucin de la pantalla especificada sin tener en cuenta el atributo
'Dynpro siguiente'.
CALL SCREEN.
La sentencia 'CALL SCREEN <pantalla>' ejecuta la pantalla especificada. Al finalizar
la ejecucin de la pantalla especificada (con la sentencia 'LEAVE TO SCREEN 0' o
Pg. 196
P%"ess
P&'
(is!ali)a"i*n de
+antalla
P%"ess
P,I
Pantalla 1
-
P%"ess
P&'
(is!ali)a"i*n de
+antalla
P%"ess
P,I
Pantalla 2
Curso programacin ABAP IV Curso programacin ABAP IV
si finaliza su ejecucin y no tiene informado el atributo 'Dynpro siguiente') se
continuar ejecutando la pantalla que realiz la llamada en la siguiente instruccin a
la sentencia de llamada.
Con las clusulas 'STARTNG AT <columna> <fila>' y 'ENDNG AT <columna>
<fila>' se puede especificar el tamao de la pantalla indicando las coordenadas
iniciales y finales respectivamente. Al realizar una llamada a una pantalla con estas
clusulas, el sistema asumir que la pantalla llamada es de dilogo modal.
LEAVE PROGRAM.
Esta sentencia finaliza inmediatamente la ejecucin del programa.
E<6DSe incluirJ un &ulsador en la &antalla de altas de clientes &ara e<ecutar la
&antalla de (isuali5acin de clientes6
Se incluye un &ulsador en la barra de &ulsadores el Status 7STAOU;;;9 con el cdiEo
de 4uncin 71IS+9 de ti&o 7E9 )omando Exit. y el texto 71isuali5ar clientes9 asociado
a la tecla de 4uncin 7F@96
Pg. 197
Curso programacin ABAP IV Curso programacin ABAP IV
Se modi4ica el establecimiento del Status de la &antalla de altas en el mdulo
7STAT+SOU;;;9 &ara Iue no muestre el botn de 1isuali5acin de clientes si estJ
marcado el 4laE de cliente correcto6
,O!+LE STAT+SOU;;; O+T"+T6

N Solamente a&arecerJ el botn de (isuali5acin de clientes cuando no se
N Bayan introducido datos correctos de un cliente
IF !OLIENTEOORRETO IS INITIAL6
SET "F-STAT+S XSTAOU;;;X6
ELSE6
SET "F-STAT+S XSTAOU;;;X E2L+!IN# X1IS+X6
EN!IF6

SET TITLE/AR X;;:X6

EN!,O!+LE6 W STAT+SOU;;; O+T"+T
Se a8ade el &rocesamiento del cdiEo de 4uncin 71IS+9 en el mdulo "AI
7SALIROU;;;9* reali5ando una llamada a la &antalla 7U:;;9 en caso de Iue se
selecciones la 4uncin 71isuali5ar clientes96
%'EN X1IS+X6 W 1isuali5ar clientes
N Se e<ecuta la &antalla de (isuali5acin de clientes
ALL SREEN XU:;;X6
Se acti(a el smbolo de reEresar en el Status 7STAOU:;;9 con el cdiEo de 4uncin
7/AF96
Se a8ade el &rocesamiento del cdiEo de 4uncin 7/AF9 en el mdulo "AI
7+SEROO,,AN!OU:;;9* reEresando a la &antalla anterior en caso de Iue se
selecciones la 4uncin 7ReEresar96
%'EN X/AFX6 W ReEresar
N Se reEresa a la &antalla anterior
LEA1E TO SREEN ;6
Se ejecuta la pantalla de visualizacin de clientes desde la pantalla de altas de
clientes pulsando el botn .
2$&$#< Procesamiento de listados en pantallas
Se puede procesar un listado desde una pantalla utilizando la sentencia LEAVE TO
LST PROCESSNG, pudiendo utilizar desde ese momento las sentencias y eventos
ABAP/4 asociados a los listados. Se ejecutarn todos los mdulos PA de la pantalla
antes de que se visualice el listado.
Pg. 198
Curso programacin ABAP IV Curso programacin ABAP IV
Se puede establecer un Status creado a medida para el listado o asignar el Status
estndar para listados con la sentencia SET PF-STATUS SPACE.
Al finalizar el procesamiento del listado, al pulsar el smbolo de regresar en el listado
o mediante la sentencia LEAVE LST-PROCESSNG en el programa, se continua
ejecutando la siguiente pantalla. Con la clusula AND RETURN TO SCREEN de la
sentencia LEAVE TO LST-PROCESSNG se puede especificar la pantalla que se
ejecutar al finalizar el listado.
E<6D Se mostrarJ un listado con las 4acturas del cliente Iue tenEa marcada la casilla
de seleccin del TA/LE ONTROL de la &antalla de (isuali5acin de clientes al
&ulsar ENTER6
Se de4ine la tabla de 4acturas ZLIEN22 en el Include ,Z/22TO"6
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N !e4inicin de tablas
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
TA/LESD ZLIEN22* W ,aestro de clientes
T;;:* W Sociedades
ZFAT+226 W Facturas de clientes
Se de4ine las (ariables !O/+FRSOSEL y !ONLIOSEL en el Include ,Z/22TO"
con la estructura de los cam&os ZLIEN22-/+FRS y ZLIEN22-NLIE
res&ecti(amente &ara almacenar la sociedad y el n>mero de cliente del cliente
seleccionado en el TA/LE ONTROL de clientes6
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N !e4inicin de (ariables
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
!ATAD !OOFO!E LIFE S--+O,,* W diEo de 4uncin de &antalla
!O"ARTI+LAR):. T-"E * W FlaE de cliente &articular
!OE,"RESA):. T-"E * W FlaE de em&resa
!OA+TO,ATIO):. T-"E * W FlaE de numeracin automJtica
!OLIENTEOORRETO):. T-"E * W FlaE de cliente correcto
!O/+FRSOSEL LIFE ZLIEN22-/+FRS* W Sociedad de cliente selec6
!ONLIEOSEL LIFE ZLIEN22-NLIE6 W liente seleccionado
Se crea el mdulo 7LIENTEOSELEIONA!O9 asociado al cam&o de &antalla
7IOLIENTESO,ARA9 Iue se e<ecutarJ dentro del bucle LOO" $ EN!LOO" del
e(ento "AI de la &antalla de (isuali5acin de clientes* almacenando la sociedad y el
n>mero de cliente en las (ariables corres&ondientes cuando se trate una lnea del
table control en la Iue el cam&o ,ARA este acti(o6
LEica de &rocesoD
N Se accede a los datos del TA/LE ONTROL
LOO" AT IOLIENTES6
Pg. 199
Curso programacin ABAP IV Curso programacin ABAP IV
FIEL! IOLIENTES-,ARA
,O!+LE LIENTEOSELEIONA!O ON IN"+T6
EN!LOO"6
Include ,Z/22I;:D
NY-----------------------------------------------------------------------------------------------N
NY ,odule LIENTEOSELEIONA!O IN"+T
NY-----------------------------------------------------------------------------------------------N
N In4orma la sociedad y el n>mero del cliente seleccionado en el TA/LE
N ONTROL de clientes en las (ariables corres&ondientes6
N---------------------------------------------------------------------------------------------------N
,O!+LE LIENTEOSELEIONA!O IN"+T6

!O/+FRSOSEL L IOLIENTES-/+FRS6
!ONLIEOSEL L IOLIENTES-NLIE6

EN!,O!+LE6 W LIENTEOSELEIONA!O IN"+T
Se a8ade el &rocesamiento del resto de cdiEos de 4uncin no tratados )en este
caso se &rocesa la tecla ENTER. en el mdulo "AI 7+SEROO,,AN!OU:;;9 Iue
e<ecutarJ la subrutina 7LISTA!OOFAT+RAS96
%'EN OT'ERS6
"ERFOR, LISTA!OOFAT+RAS6
EN!ASE6
Se crea la subrutina 7LISTA!OOFAT+RAS9* Iue mostrarJ un listado con las
4acturas del cliente seleccionado en el TA/LE ONTROL de clientes6
NY-----------------------------------------------------------------------------------------------N
NY Form LISTA!OOFAT+RAS
NY-----------------------------------------------------------------------------------------------N
N 1isuali5a un listado con las 4acturas del cliente seleccionado6
N---------------------------------------------------------------------------------------------------N
FOR, LISTA!OOFAT+RAS6

N Se com&rueba Iue se Ba seleccionado un cliente
'EF NOT !ONLIEOSEL IS INITIAL6
N Se &asa al modo de &roceso de listados
LEA1E TO LIST-"ROESSIN#6
N Se establece el Status estJndar de listados
SET "F-STAT+S S"AE6
N Se escriben las 4acturas corres&ondientes al cliente seleccionado
SELET N FRO, ZFAT+22
%'ERE /+FRS L !O/+FRSOSEL
AN! NLIE L !ONLIEOSEL6
%RITED 3 ZFAT+22-NFAT*
ZFAT+22-I,"NT +RREN- ZFAT+22-,ONE!A*
Pg. 200
Curso programacin ABAP IV Curso programacin ABAP IV
ZFAT+22-,ONE!A6
EN!SELET6
N Se com&rueba si se Ba escrito alEuna 4actura
IF S--S+/R PQ ;6
N ErrorD No existen 4acturas &ara el cliente seleccionado
,ESSA#E S;;;)CA. %IT' TE2T-;:;6
EN!IF6
N Se iniciali5an los datos del cliente seleccionado
LEARD !O/+FRSOSEL*
!ONLIEOSEL6

EN!FOR,6 W LISTA!OOFAT+RAS
Se crea el elemento de texto TE2T-;:; con el texto 7No existen 4acturas &ara el
cliente seleccionado96
Se crea el include ,Z/22F;? en el &roErama marco SA",Z/22 con el texto
7Include de e(entos de listado del &roErama SA",Z/229* ti&o 7I9 y a&licacin 7N9* Iue
contendrJ los e(entos de listado del &roErama6
"RO#RA, SA",Z/226

INL+!E ,Z/22TO"6

INL+!E ,Z/22O;:6

INL+!E ,Z/22I;:6

INL+!E ,Z/22F;:6

INL+!E ,Z/22F;?6
Se crea el e(ento TO"-OF-"A#E en el Include ,Z/22F;?* Iue escribirJ las
cabeceras del listado de 4acturas6
N---------------------------------------------------------------------------------------------------N
N INL+!E ,Z/22F;? N
N---------------------------------------------------------------------------------------------------N
TO"-OF-"A#E6
N Se escribe el n>mero del cliente seleccionado
%RITED XlienteDX*
!ONLIEOSEL6
+LINE6
N Se escriben las cabeceras de columna
%RITED ):;. XFacturaX*
):S. XIm&orteX RI#'T-[+STIFIE!*
X,onedaX6
SFI"6
Pg. 201
Curso programacin ABAP IV Curso programacin ABAP IV
Se establece el literal 7Listado de 4acturas9 como 7abecera de lista9 en los
elementos de texto del &roErama marco SA",Z/226
Se e<ecuta el listado de 4acturas seleccionando un cliente en el TA/LE ONTROL
de la &antalla de (isuali5acin de clientes y &ulsando la tecla ENTER6
Se puede procesar un listado en una ventana de dilogo llamando a la pantalla con
las clusulas STARTNG AT y ENDNG AT. La pantalla deber ejecutar la sentencia
SUPPRESS DALOG en el evento PBO para evitar que se visualice, y la sentencia
LEAVE TO LST-PROCESSNG AND RETURN TO SCREEN 0 para iniciar el
procesamiento del listado y volver a la pantalla que realiz la llamada al finalizar el
mismo.
5$ Mdulos de -unciones
:&( Introduccin
Los mdulos de funciones son objetos que realizan operaciones que pueden ser
utilizadas en varios programas. Al crear un mdulo de funcin con el cdigo que realiza
una operacin, se evita tener que repetirlo en todos los programas que realicen esa
Pg. 202
Curso programacin ABAP IV Curso programacin ABAP IV
operacin aadiendo en ellos una llamada al mdulo de funcin. Adems de evitar que
se repita el mismo cdigo en diferentes programas, se facilita el mantenimiento del
proceso, ya que las modificaciones que se realicen en un mdulo de funcin afectan a
todos los programas que lo utilicen.
SAP dispone de un gran nmero de mdulos de funcin predefinidos que se pueden
utilizar en nuestros programas, a las que se aadirn los que se desarrollen a medida.
Los mdulos de funcin pertenecen a grupos de funciones, que los agrupan segn su
funcionalidad. Los mdulos de funciones de un mismo grupo de funciones comparten
las definiciones de datos globales.
:&* Creacin de un gru7o de /unciones&
Para crear un grupo de funcin iremos por la opcin de men del OBJET NAVGATOR
Ruta de acceso: ( En el men principal de SAP ) 'Herramientas Workbench ABAP4
Resumen Object Navigator ( SE80).
Seleccionaremos 'Grupo de funciones' , pondremos el nombre del grupo de funciones a
Crear
E< 7Z2296
Aparecer una ventana el la que definir los atributos del grupo de funciones.
'rupo de 4unciones:Nombre del grupo de funciones.
Te=to *re.e: Descripcin del grupo de funciones.
Ej: 'Asignacin de nmeros'.
Respnsa*le: Usuario responsable del grupo de funciones.
:&% Datos de gestin
Los mdulos de funcin se mantienen utilizando la biblioteca de funciones.
Ruta de acceso: ( En el men principal de SAP ) 'Herramientas Workbench ABAP4-
DesarrolloBiblioteca funciones' (SE37).
Pg. 203
Curso programacin ABAP IV Curso programacin ABAP IV
Desde esta pantalla se pueden crear, modificar o visualizar todas las partes de un
mdulo de funcin marcando las distintas opciones de objetos parciales.
E<6D Se crearJ una 4uncin Iue recibirJ como &arJmetro de entrada una sociedad y
de(ol(erJ como &arJmetro de salida el &rimer n>mero de cliente desocu&ado en la tabla
de clientes ZLIEN22 &ara esa sociedad6
Para crear un mdulo de funcin se deber especificar el nombre en la pantalla inicial y
pulsar el botn de crear con la opcin 'Gestin' activada.
E<6D 7ZOO/TENERON+,EROOLIENTEO2296
Aparecer una pantalla en la que se debe indicar el grupo de funciones a la que
pertenece el mdulo de funcin junto con su la descripcin de la funcin.
E<6D 7Z22966
7 !e(uel(e un n>mero de cliente libre96
Pg. 204
Curso programacin ABAP IV Curso programacin ABAP IV
Una vez especificado el grupo de funcin se debern informar los datos de gestin del
mdulo de funcin.
Clasi4icacin:
Aplicacin: Mdulo al que pertenece el programa ( F , HHRR . ).
E<6D 7N9 ,ultia&licacin6
Texto breve: Descripcin de la funcionalidad del mdulo de funcin.
E<6D 7!eterminacin de n>mero de cliente96

-orma e/ec$:
Normal: Mdulo de funcin normal.
Apoyo Remote Function Call: Funciones de jecucin remota. Estas funciones
pueden ser ejecutadas desde otros sistemas externos a SAP.
Actualizable: Funciones de actualizacin asncrona. Se puede especificar el
modo de tratamiento de la tarea de actualizacin (nicio inmediato, inicio
inmediato sin actualizacin posterior, inico retardado o lanzamiento colectivo.
E<6D 7Normal96
Al finalizar la introduccin de los datos de gestin se deber grabar el mdulo de
funcin.
:&' Par0etros de )a /uncin&
5$0$# ParCmetros Import$
Deberemos indicar la lista de parmetros de entrada de la funcin:
Pg. 205
Curso programacin ABAP IV Curso programacin ABAP IV
ParCmetro:Nombre de los parmetros de entrada.
Tipi4icacin: Tipo de dato del parmetro.
Tipo Re4$ Tipo de referencia ( Solo se indicar una de estas dos ltimas ).
Valor Propuesto: Valor por defecto cuando se declara como opcional.
-lag opc$ ndicador de parmetro no obligatorio.
-lag$ Tras$ ndicacin de que el parmetro se recibe por valor/referencia.
5$0$& ParCmetros de salida ) E=port+$
Son los parmetros de salida de funcin.
5$0$3 ParCmetros ) cDanging +:
Parmetros de entrada y salida del mdulo de funcin. Estos parmetros devuelven el
valor de salida al finalizar la ejecucin del mdulo de funcin sin errores, manteniendo el
valor de entrada en caso contrario.
E<6D Se crea el &arJmetro im&ort 7/+FRS9 con el cam&o de re4erencia 7ZLIEN22-
/+FRS9 &ara recibir la sociedad del cliente* y el &arJmetro ex&ort 7NLIE9 con el cam&o
de re4erencia 7ZLIEN22-NLIE9 &ara de(ol(er el n>mero de cliente6
Pg. 206
Curso programacin ABAP IV Curso programacin ABAP IV
:&2 Tab)as
Adems de los parmetros de entrada y salida definidos anteriormente, tambin se
pueden traspasar tablas por referencia en la llamada al mdulo de funcin.
ParCmetro ta*la: Nombre del parmetro de tabla.
Tipi4icain : Tipo de datos de la tabla
Tipo re4$: Estructura de referencia del diccionario de datos para especificar la
estructura del parmetro de tabla.
Opcional: Si se activa este flag no ser obligatorio informar el parmetro de
tabla en la llamada al mdulo de funcin.
:&: E4ce7ciones
Las excepciones son una serie de errores predefinidos en los mdulos de funcin que
pueden devolver como valor de retorno de su ejecucin en la variable del sistema SY-
SUBRC.
E=cepcin: Se indicar un nombre descriptivo para cada posible error
predefinido que va a poder retornar el mdulo de funcin. La posicin en la tabla
Pg. 207
Curso programacin ABAP IV Curso programacin ABAP IV
de excepciones se corresponder con el valor que devolver en la variable SY-
SUBRC (la primera excepcin definida devolver 1, la siguiente 2, etc.).
Por defecto siempre existe la excepcin 'OTHERS', aunque aparezca definida, que se
utiliza para devolver un error genrico y devuelve en la variable SY-SUBRC el valor
siguiente al de la ltima excepcin creada.
E<6D Se crea la exce&cin 7SOIE!A!OINE2ISTENTE9 Iue serJ de(uelta cuando la
sociedad in4ormada en el &arJmetro de entrada corres&ondiente no exista en la tabla
estJndar de sociedades6
Para devolver una excepcin desde el cdigo del modulo de funcin se utiliza la
sentencia RASE <excepcin>, finalizando as la ejecucin de la funcin y devolviendo
el cdigo asociado a la excepcin en la variable SY-SUBRC. En caso de devolver una
excepcin no se actualiza el valor de salida de los parmetros CHANGNG.
Con la clusula RASNG de la instruccin MESSAGE se puede dar la posibilidad de
que el mdulo de funcin trate el error mostrando el mensaje de error especificado o
que devuelva la excepcin correspondiente sin mostrar el mensaje de error, en funcin
de si se especifica la clusula 'EXCEPTONS' en su llamada. Si no se expecifica la
clusula, el mdulo de funcin mostrar los mensajes de error que tengan la clusula
'RASNG', finalizando as la ejecucin del programa que realiza la llamada, en caso
contrario se devolvern las excepciones asociadas a los mensajes traspasando el
control de los errores al programa que realiza la llamada al mdulo de funcin.
:&; Datos g)oba)es
Las definiciones globales de datos son compartidas por todos los mdulos de funcin de
un grupo de funciones. Las definiciones de objetos globales se mantienen a travs de la
opcin de men 'Pasar a Datos globales'.
Nota: Las definiciones globales y el texto fuente del mdulo de funcin se codifican
realmente en el editor ABAP/4 utilizando los mismos comandos que en la codificacin
de listados.
E<6D Se de4ine la tabla estJndar de sociedades 7T;;:9 en la Iue se cBeIuearJ Iue la
sociedad recibida como &arJmetro es correcta* y la tabla de clientes 7ZLIEN229 &ara
seleccionar los n>meros de cliente existentes6
Include LZLITO"D
F+NTION-"OOL ZLI6 W,ESSA#E-I! 66
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N !e4inicin de tablas
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
TA/LESD T;;:* W Sociedades
ZLIEN226 W lientes
Pg. 208
Curso programacin ABAP IV Curso programacin ABAP IV
Los parmetros definidos en el mdulo de funcin son locales, por lo tanto solo son
visibles en el cuerpo principal de la funcin. Para que puedan ser utilizados en las
subrutinas, sin necesidad de pasarlos como parmetros, se debern globalizar
utilizando la opcin de men 'TratarnterfaseGlobalizar parm.' en la pantalla de
mantenimiento de parmetros de entrada/salida. Para eliminar la globalizacin se utiliza
la opcin de men 'TratarnterfaseLocalizar parm.'.
:&< Cdigo /uente
Al crear una subrutina, haciendo doble click sobre el nombre en la llamada, el sistema
propondr la creacin de un nclude que contendr todas las subrutinas del grupo de
funciones.
Al finalizar la introduccin del texto fuente se deber grabar, verificar y activar el mdulo
de funcin.
E<6D Se crea la subrutina 7'E0+EAROSOIE!A!9 en un nue(o Include LZLIF;:
&asJndole como &arJmetro de entrada el &arJmetro de sociedad* Iue cBeIuearJ Iue la
sociedad existe en la tabla estandar de sociedades* de(ol(iendo la exce&cin
7SOIE!A!OINE2ISTENTE9 en caso contrario6
Se crea la subrutina 7SELEIONARON+,EROOLIENTE9 &asJndole como &arJmetro
de entrada el &arJmetro de sociedad* Iue de(ol(erJ como &arJmetro de salida el &rimer
n>mero de cliente desocu&ado &ara la sociedad indicada6

Include LZLI+;:D
F+NTION ZOO/TENERON+,EROOLIENTE6
NW----------------------------------------------------------------------
NWNXInter4ase local
NW I,"ORTIN#
NW 1AL+E)/+FRS. LIFE ZLIEN22-/+FRS
NW E2"ORTIN#
NW 1AL+E)NLIE. LIFE ZLIEN22-NLIE
NW E2E"TIONS
NW SOIE!A!OINE2ISTENTE
NW----------------------------------------------------------------------

N Se cBeIuea la sociedad
"ERFOR, 'E0+EAROSOIE!A! +SIN# /+FRS6
N Se selecciona el n>mero de cliente &ara la sociedad
"ERFOR, SELEIONARON+,EROOLIENTE +SIN# /+FRS NLIE6

EN!F+NTION6
Include LZLIF;:D
N-------------------------------------------------------------------
Pg. 209
Curso programacin ABAP IV Curso programacin ABAP IV
NNNINL+!E LZLIF;: 6
N-------------------------------------------------------------------
NY---------------------------------------------------------------------N
NY Form 'E0+EAROSOIE!A!
NY---------------------------------------------------------------------N
N BeIuea Iue la sociedad recibida como &arJmetro existe en la tabla
N de sociedades6
N----------------------------------------------------------------------N
N --Q "EO/+FRS Sociedad
N----------------------------------------------------------------------N
FOR, 'E0+EAROSOIE!A! +SIN# 1AL+E)"EO/+FRS. LIFE ZLIEN22-
/+FRS6

N Se selecciona la sociedad en la tabla de sociedades
SELET SIN#LE /+FRS INTO T;;:-/+FRS
FRO, T;;:
%'ERE /+FRS L "EO/+FRS6
N Si no se Ba seleccionado se de(uel(e la exce&cin SOIE!A!OINE2ISTENTE
IF S--S+/R PQ ;6
RAISE SOIE!A!OINE2ISTENTE6
EN!IF6

EN!FOR,6 W 'E0+EAROSOIE!A!
NY---------------------------------------------------------------------N
NY Form SELEIONARON+,EROOLIENTE
NY---------------------------------------------------------------------N
N !e(uel(e en el &arJmetro de salida "SOLIE el &rimer n>mero de cliente
N desocu&ado en la tabla de clientes &ara la sociedad es&eci4icada en el
N &arJmetro de entrada "EO/+FRS6
N----------------------------------------------------------------------N
N --Q"EO/+FRS Sociedad
N --Q"SONLIE N>mero de cliente N
N----------------------------------------------------------------------N
FOR, SELEIONARON+,EROOLIENTE
+SIN# 1AL+E)"EO/+FRS. LIFE ZLIEN22-/+FRS
"SONLIE LIFE ZLIEN22-NLIE6

N Se selecciona el nG mayor existente en la tabla

SELET ,A2) NLIE .
FRO, ZLIEN22 INTO )ZLIEN22-NLIE.
%'ERE /+FRS L "EO/+FRS6
N Si se encuentra (alor mJximo
IF ) S--S+/R L ; .6
"SONLIE L ZLIEN22-NLIE Z :6
N Si no se encuentra (alor mJximo
"SONLIE L :6
Pg. 210
Curso programacin ABAP IV Curso programacin ABAP IV
EN!IF6
N om&letamos con ceros &or la I5I6
+N"AF "SONLIE6

EN!FOR,6 W SELEIONARON+,EROOLIENTE
:&= Ejecucin
Para ejecutar un mdulo de funcin desde la biblioteca de funciones se utiliza la opcin
de men 'UtilidadesEntorno test' (F8) de la biblioteca de funciones o pulsando el
botn en la pantalla inicial.
E<6D E<ecutar la 4uncin 7ZOO/TENERON+,EROOLIENTEO229 desde la biblioteca de
4unciones6
Para ejecutar un mdulo de funcin desde un programa se utiliza la sentencia CALL
FUNCTON <funcin>. Para que el sistema nos proponga la sentencia de la llamada a
una funcin con todos sus parmetros desde el editor ABAP/4 utilizaremos el botn
, marcando la opcin 'CALL FUNCTON' y especificando el nombre de la
funcin.
Nota: Los campos que se utilizan en la llamada a un mdulo de funcin deben ser del
mismo tipo que los parmetros a los que hacen referencia (definidos en el mdulo de
funcin), sino se pueden producir errores en la ejecucin del programa.
6$ lamadas a programas y utili:acin de la memoria$
;&( Introduccin
Para intercambiar datos entre diferentes programas se puede utilizar la memoria SAP y
la memoria ABAP/4.
o Memoria SAP.
Es un rea de memoria especfica para cada usuario que se utiliza para
almacenar valores que son retenidos durante toda la sesin del usuario.
o Memoria ABAP/4.
Los valores almacenados en la memoria ABAP/4 solamente son retenidos
durante la ejecucin de un programa. Esta memoria es utilizada para la
transferencia de datos entre dos programa cuando uno de ellos realiza una
llamada al otro.
;&* Par0etros de eoria S"P
En la memoria SAP se pueden almacenar valores asociados a un identificador de tres
caracteres, que se mantienen disponibles hasta que finalice la sesin.
En los campos de las pantallas existen tres atributos relacionados con los parmetros
de memoria:
Pg. 211
Curso programacin ABAP IV Curso programacin ABAP IV
o d-parm.: dentificador de parmetro para los valores del campo en la
memoria SAP. Si el campo est referenciado al diccionario de datos, se
informar con el identificador asociado al dominio del campo del diccionario.
o SET Parm.: Al activar este atributo, el sistema almacenar en la
memoria SAP el valor que contiene al campo bajo el identificador asociado.
o GET Parm.: Al activar este atributo, el campo se inicializar con el valor
definido en la memoria SAP bajo el identificador asociado en lugar de utilizar el
valor inicial en funcin del tipo de dato del campo.
Desde un programa se pueden almacenar y recuperar datos de la memoria SAP con las
siguientes sentencias:
o SET PARAMETER.
La sentencia SET PARAMETER D <identificador> FELD <campo> almacena el
valor del campo en la memoria SAP asociado al identificador especificado.
o GET PARAMETER.
La sentencia GET PARAMETER D <identificador> FELD <campo> almacena el
valor asociado al identificador en la memoria SAP en el campo especificado.
Los parmetros de memoria se inicializan al comenzar una sesin con los valores
almacenados en los parmetros de usuario, que se mantienen desde la opcin de men
'SistemaValores prefijadosDatos propios' (SU3).
Pg. 212
Curso programacin ABAP IV Curso programacin ABAP IV
o dp: dentificador de parmetro.
o Valor parmetro: Valor asociado al identificador.
;&% Sentencias de ))aada a 7rograas
Para realizar llamadas a otros programas desde un programa se utilizan las siguientes
sentencias:
o SUBMT <listado> AND RETURN: Realiza una llamada a un listado. Si
no se especifica la clusula 'AND RETURN' finalizar el programa actual y se
ejecutar el listado sin regresar al programa actual.
o CALL TRANSACTON <transaccin>: Realiza una llamada a una
transaccin.
E<6DSe incluirJ un &ulsador en la &antalla de altas de clientes &ara e<ecutar el listado de
(isuali5acin de 4acturas de clientes6
Se incluye un &ulsador en la barra de &ulsadores el Status 7STAOU;;;9 con el cdiEo de
4uncin 7FAT9 de ti&o 7E9 )omando Exit. y el texto 71isuali5ar clientes9 asociado a la
tecla de 4uncin 7FS96
Pg. 213
Curso programacin ABAP IV Curso programacin ABAP IV
Se a8ade el &rocesamiento del cdiEo de 4uncin 7FAT9 en el mdulo "AI
7SALIROU;;;9* reali5ando una llamada al listado 7ZRE"O:229 en caso de Iue se
selecciones la 4uncin 71isuali5ar 4acturas9
%'EN XFATX6 W 1isuali5ar 4acturas
N Se e<ecuta el listado de 4acturas de clientes
S+/,IT ZRE"O:22 AN! RET+RN6
Se ejecuta el listado de facturas de clientes desde la pantalla de altas de clientes
pulsando el botn .
;&' Intercabio de datos a tra3>s de )a eoria "B"P!'
Al realizar una llamada a un programa desde otro programa, se pueden intercambiar
datos a travs de la memoria ABAP/4 utilizando las siguientes sentencias:
o EXPORT <objeto> TO MEMORY D <identificador>.
Almacena el objeto en la memoria ABAP/4 asociado al identificador
especificado, que puede tener una longitud de 32 caracteres. Cada vez que se
exportan datos bajo un mismo identificador se sobreescriben los anteriores.
o MPORT <objeto> FROM MEMORY D <identificador>.
Recupera el objeto asociado al identificador especificado de la memoria
ABAP/4.
o FREE MEMORY D <identificador>.
Libera de la memoria ABAP/4 los datos almacenados bajo el identificador
especificado. Si no se especifica la clusula 'D' se liberar toda la memoria
ABAP/4.
1$ Inter4aces
<&( Introduccin&
Podemos definir el concepto de interfase como el nexo de unin entre dos sistemas
diferentes. Por tanto queda claro que este concepto no es exclusivo de los sistemas de
informacin sino que abarca un espectro ms grande.
Si focalizamos nuestra atencin en los sistemas de informacin , podemos darnos
cuenta rpidamente , que dentro de una empresa existen diferentes entornos que
necesitan comunicarse, necesitan interactuar.
Un claro ejemplo de necesidad de comunicacin es la existente entre el entono SAP y
el resto de aplicaciones existentes dentro de una empresa.
Pg. 214
Curso programacin ABAP IV Curso programacin ABAP IV
Podramos hacer varias clasificaciones de interfases:
o En cuanto a su naturaleza :
Basadas en ficheros.
El intercambio de la informacin se realiza a travs de ficheros. As el
sistema origen elabora el fichero , con un determinado formato, y se lo
enva al sistema destino que lo procesa.
Basadas en funciones RFC (Remote Function Call).
El intercambio de informacin se realiza a travs de aplicaciones que
unen virtualmente los sistemas y ponen a disposicin los datos del
sistema origen en el sistema destino.
o En cuanto a su modo de ejecucin:
On-line.
Podemos decir que una interfase es on-line cuando el proceso que la
controla es on-line . Normalmente las funciones de naturaleza RFC ,
sern on-line.
Batch.
Una interfase es Batch cuando , el proceso que la controla es BATCH.
Las interfases basadas en ficheros irn asociadas a procesos batch.
Pg. 215
.iste/a %igen
Fi"0..
.iste/a 1estin
Fi"0-
FTP2 Inte%net2-
.iste/a %igen .iste/a 1estin
.e%$i"i 3iddel4a%e.
F!n"i*n RF5 6.,P7

F!n"i*n RF5 6.,P7

Curso programacin ABAP IV Curso programacin ABAP IV
<&* Trataiento de /ic?eros&
1$&$# Instrucciones *Csicas$
Para poder trabajar con ficheros que se encuentren en el servidor de aplicacin,
tenemos las siguientes instrucciones bsicas:
OPEN DATASET nfich .
Abre un fichero para su tratamiento, si no se aade ninguna opcin abre
el fichero para lectura en modo binario.
Las principales opciones son:
.. FOR OUTPUT Abre el fichero para escritura. Si el fichero
existe lo borra y lo crea nuevamente.
.. FOR NPUT Abre el fichero para lectura.
.. FOR APPENDNG.
Abre un fichero para escritura si el fichero no existe se crea. Si ya
existe, se comenzar a escribir al final del fichero.
..N BNARY MODE.
Abre el fichero en modo binario , es decir, la informacin se
tratar por bloques. De tal modo que en cada lectura se leern
/escribirn n caracteres.
..N TEXT MODE.
Abre el fichero en modo texto, es decir, la informacin se tratara
lnea a lnea. Cada lectura/escritura procesar una lnea del
fichero.
..MESSAGE d_mes
Almacena en 'd_mes' el mensaje devuelto por el sistema
operativo.
..AT POSTON d_pos.
Sita el puntero de escritura en la posicin d_pos (bytes) desde el
inicio del fichero. (Esta opcin , no tiene sentido emplearla para
tratamientos en modo texto).
.. TYPE Permite definir atributos del fichero.
.. FLTER Permite ejecutar comandos propios del
sistema operativo.
READ DATASET nfich NTO wa.
Lee un bloque de informacin del fichero:
Si el fichero se abre en modo TEXTO:
Se lee una lnea completa de tal forma que si el campo 'wa' es de
menor tamao que la lnea , se perder su contendido , en caso contrario
se completar con blancos. El puntero de lectura se situar al comienzo
de la lnea siguiente.
Si el fichero se abre en modo BNARO:
Pg. 216
Curso programacin ABAP IV Curso programacin ABAP IV
Se lee del fichero tantos bytes como tamao tenga el campo 'wa'.
TRANSFER wa TO nfich.
Escribe el contenido del campo WA en el fichero abierto para escritura.
Si en modo texto:
Escribe una lnea completa.
Si en modo binario:
Escribe tantos bytes como tenga el campo 'wa'.
CLOSE DATASET nfich.
Cierra un fichero abierto para lectura o escritura.
DELETE DATASET nfich.
Borra el fichero nfich.

1$&$& Creacin de 4icDeros$
Vamos a ver un ejemplo de como leer y escribir registros en un fichero.
El ejemplo va a consistir en volcar a un fichero, nuestra tabla maestro de clientes
con todos sus campos.
La estructura del fichero ser as:
Campo Tipo Long. Descripcin
BUKRS CHAR 4 Sociedad
NCLE CHAR 10 Nmero de cliente
NOMBR CHAR 20 Nombre cliente
APEL1 CHAR 25 Primer apellido
APEL2 CHAR 25 Segundo apellido
FNAC DATS 8 Fecha de
nacimiento
Crearemos un programa tipo 'REPORT' que llamaremos 'ZINTER22'.
Como parmetros de seleccin pondremos la sociedad obligatoria y como rango de
seleccin el n de cliente.
Aadiremos un nuevo parmetro obligatorio que representar el nombre del fichero.
El fichero que vamos a crear va a ser en modo texto.
El cdigo del programa ser algo as:
Pg. 217
Curso programacin ABAP IV Curso programacin ABAP IV
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N "RO#RA,AD ZINTER22 N
N !ESRI"IOND 1uelca los reEistros seleccionado de la tabla N
N maestro de clientes ZLIEN22 a un 4icBero de texto6 N
N A+TOR D ,A!;; FE'AD ?A3;A3?;;: N
N----------------------------------------------------------------------N
N ONTROL !E ,O!IFIAIONES N
N FE'A6 A+TOR6 !ESRI"ION ,O!IFIAION6 N
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
RE"ORT ZINTER226
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N Tablas del diccionario de datos N
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
TA/LESD ZLIEN226 W ,aestro de clientes6

NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N Tablas internas N
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N Tabla interna de seleccin de clientes
!ATAD /E#IN OF IOZLIEN22 O+RS ;*
/+FRS LIFE ZLIEN22-/+FRS* WSociedad
NLIE LIFE ZLIEN22-NLIE* WN>mero de cliente
NO,/R LIFE ZLIEN22-NO,/R* WNombre cliente
A"EL: LIFE ZLIEN22-A"EL:* W"rimer a&ellido
A"EL? LIFE ZLIEN22-A"EL?* WSeEundo a&ellido
FNAI LIFE ZLIEN22-FNAI* WFecBa de nacimiento
EN! OF IOZLIEN226
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N !e4inicin de (ariables Elobales N
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
!ATA D!O,ERROR):;;. T-"E 6 W ,ensa<e de error

NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N "antalla de seleccin N
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N "arJmetros
SELETION-SREEN /E#IN OF /LOF /LO0: %IT' FRA,E TITLE TE2T-;;:6
"ARA,ETERS "O/+FRS LIFE ZLIEN22-/+FRS O/LI#ATOR-
!EFA+LT X;;;:X6 W Sociedad
SELET-O"TIONSD
SONLIE FOR ZLIEN22-NLIE6 W NG de cliente
SELETION-SREEN EN! OF /LOF /LO0:6
N "arJmetro nombre de 4icBero destino6
SELETION-SREEN /E#IN OF /LOF /LO0? %IT' FRA,E TITLE TE2T-;;?6
N Nombre del 4icBero )acti(amos min>sculas &ermitidas.6
"ARA,ETERS "ONFI')@;. T-"E O/LI#ATOR- !EFA+LT
73usr3sa&3tm&35clienxx6dat9 LO%ER ASE
6
Pg. 218
Curso programacin ABAP IV Curso programacin ABAP IV
SELETION-SREEN EN! OF /LOF /LO0?6

NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N omien5o de seleccin N
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
START-OF-SELETION6
N Seleccionamos los datos de los clientes Iue cum&len criterios
SELET N
FRO, ZLIEN22 INTO ORRES"ON!IN# FIEL!S OF TA/LE IOZLIEN22
%'ERE /+FRS L "O/+FRS
AN! NLIE IN SONLIE6
N om&robamos si Bay datos seleccionados en cuyo caso *
N crearemos el 4icBero
IF ) S--S+/R L ; .6
N Abrimos el 4icBero &ara escritura en modo texto
O"EN !ATASET "ONFI' FOR O+T"+T IN TE2T ,O!E ,ESSA#E !O,ERROR6
N om&robamos si no Bubo error
IF ) S--S+/R L ; .6
N "ara cada uno de los reEistros seleccionados
LOO" AT IOZLIEN226
N Escribimos en el 4icBero
TRANSFER IOZLIEN22 TO "ONFI'6
EN!LOO"6
N erramos el 4icBero
LOSE !ATASET "ONFI'6
N ,ostramos mensa<e XFicBero creado con KxitoX6
,ESSA#E I;;;)CA. %IT' TE2T-;;C6
N Si Bay error * mostramos el mensa<e* con un mensa<e de error
ELSE6
,ESSA#E E;;;)CA. %IT' !O,ERROR6
EN!IF6
N Si no Bay datos seleccionados6
ELSE6
N ,ostramos mensa<e XNo se seleccionaron datosX6
,ESSA#E E;;;)CA. %IT' TE2T-;;R6
EN!IF6
1$&$3 ectura de -icDeros$
Vamos a continuacin a realizar un programa (ZNTER1XX) que muestre un
listado con el contenido de un fichero. Dando la posibilidad de borrar el fichero
una vez procesado.
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N "RO#RA,AD ZINTE:22 N
N !ESRI"IOND ,uestra un listado con el contenido de un 4icBero N
N A+TOR D ,A!;; FE'AD ?A3;A3?;;: N
N----------------------------------------------------------------------N
Pg. 219
Curso programacin ABAP IV Curso programacin ABAP IV
N ONTROL !E ,O!IFIAIONES N
N FE'A6 A+TOR6 !ESRI"ION ,O!IFIAION6 N
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
RE"ORT ZINTE:22 NO STAN!AR! "A#E 'EA!IN#6

NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N !e4inicin de (ariables Elobales N
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
!ATA D!O,ERROR):;;. T-"E * W ,ensa<e de error
!OLINEA)?@@. T-"E 6 W Lnea de 4icBero6

NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N "antalla de seleccin N
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

N "arJmetro nombre de 4icBero
SELETION-SREEN /E#IN OF /LOF /LO0? %IT' FRA,E TITLE TE2T-
;;?6
N Nombre del 4icBero )acti(amos min>sculas &ermitidas.6
"ARA,ETERSD "ONFI')@;. T-"E O/LI#ATOR- !EFA+LT
X3usr3sa&3tm&35clienxx6datX LO%ER ASE*
"O!ELETE AS 'EF/O26 W FlaE de borrado 4icBero
SELETION-SREEN EN! OF /LOF /LO0?6

NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N omien5o de seleccin N
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
START-OF-SELETION6
N Abrimos el 4icBero &ara lectura en modo texto6
O"EN !ATASET "ONFI' FOR IN"+T IN TE2T ,O!E ,ESSA#E
!O,ERROR6
N om&robamos si no Bubo error
IF ) S--S+/R L ; .6
N Leemos el &rimer reEistro del 4icBero
REA! !ATASET "ONFI' INTO !OLINEA6
N ,ientras no Baya error de lectura
%'ILE ) S--S+/R L ; .6
N Escribimos la lnea leda
%RITE 3 !OLINEA6
N Leemos el siEuiente reEistro
REA! !ATASET "ONFI' INTO !OLINEA6
EN!%'ILE6
N +na (e5 &rocesado el 4icBero* borramos el 4icBero si estJ
N marcado el 4laE de borrado
'EF NOT ) "O!ELETE IS INITIAL .6
!ELETE !ATASET "ONFI'6
N om&robamos si se &udo borrar
IF ) S--S+/R L ; .6
Pg. 220
Curso programacin ABAP IV Curso programacin ABAP IV
N ,ostramos mensa<e de XFicBero borradoX6
,ESSA#E S;;;)CA. %IT' TE2T-;;@6
EN!IF6
N Si Bay error * mostramos el mensa<e* con un mensa<e de error
ELSE6
,ESSA#E E;;;)CA. %IT' !O,ERROR6
EN!IF6
1$&$0 E=plorar 4icDeros$
Para poder visualizar los ficheros existentes en el servidor de aplicacin
disponemos de la transaccin estandar AL11 que nos permite explorar el
contenido del directorio /usr/sap.
Pg. 221
Curso programacin ABAP IV Curso programacin ABAP IV
Haciendo doble-click sobre el directorio a explorar 73usr3sa&3tm&' en nuestro
caso podremos visualizar los ficheros existentes as como el contenido de los
mismos.
Nota: Esta es una herramienta bastante limitada ya que nicamente nos dejar
visualizar el contenido de esta ruta (/usr/sap) , normalmente dispondremos de
otras herramientas para poder visualizar y tratar ficheros en el servidor de
aplicacin.
<&% Batc? In7ut &
1$3$# Introduccin$
En captulos anteriores , hemos visto como se introducen datos, que actualizan las
bases de datos, a travs de pantallas o dynpros que se llaman dentro de una
transaccin . ntroducimos los datos , navegando por cada una de las pantallas
completando los datos en los campos y pulsando las opciones oportunas (pantalla
siguiente , grabar .). En todo este proceso , es necesario la intervencin de un
usuario.
El sistema Batch nput o BDC (Batch Data Communication) para introducir datos en la
base de datos de SAP tiene las siguientes caractersticas:
Puede procesar grandes volmenes de datos.
Se puede planificar y ejecutar como proceso de fondo o
como proceso on-line.
Se puede procesar sin la intervencin de un usuario.
Permite usar transacciones como si los datos se
introdujeran de forma manual, pero realizando idnticas comprobaciones de
integridad, autorizaciones.
En este sistema de introduccin de datos , es necesario tener un fichero especial que
llamaremos 'Juego de datos' en el que se tiene perfectamente estructurada la
siguiente informacin:
Por una parte la informacin especifica a introducir .
Por otra parte los comandos , pantallas, nombres de
campo . en las que introducir la informacin.
Estos juegos de datos tienen siempre la misma forma definida en la estructura
estndar 'BDCDATA' :
Pg. 222
Curso programacin ABAP IV Curso programacin ABAP IV
Construir el 'Juego de datos' consiste en ir aadiendo registros secuencialmente , en
los que se definen las secuencias de pantalla necesarias y datos para lograr su
almacenamiento en las tablas SAP.
Tendremos dos tipos de registros (aunque con la misma estructura).
Registros de dentificacin de programa y dynpro.
En este tipo de registros , se detalla el nombre del programa y n de dynpro que va a
contener los campos y los valores que van a tomar los registros siguientes.
Registros de campos y valores .
Este tipo de registros , contienen el nombre de los campos del dynpro as como los
datos especficos que se deben 'introducir' en ellos. Un registro especial dentro de
este tipo es el que contiene el valor del comando de dynpro. BDC_OKCODE.
La secuencia de registros BDC ser algo as:
Pg. 223
Curso programacin ABAP IV Curso programacin ABAP IV
Para almacenar estos registros en un fichero especial al que denominamos 'Juego de
datos ' disponemos de tres funciones estndares que nos facilitan esta tarea:
BDCHOPE%H'RO!P.
Nos permite abrir la sesin para la creacin del juego de datos y que ste se almacene
en la cola de juegos de datos pendientes.
Los parmetros principales son:
GROUP: Nombre con el que se almacenar el juego de datos.
USER: Usuario con el que se ejecutar el juego de datos.
HOLDDATE: Fecha a partir de la cual el juego de datos puede ser ejecutado.
KEEP: Flag de indicador de borrado del juego de datos tras su ejecucin con xito. (' '
permanece , 'X' no se borra).

BDCHI%"ERT.
Permite incluir los registros al juego de datos a travs de una tabla interna.
Hay que indicar los parmetros.
TCODE: Cdigo de transaccin a ejecutar.
DYNPROTAB:Tabla interna que contiene los registros.
CO"EH'RO!P.
Cierra el Juego de datos.
PROGRAM DYNPRO DYNBEGN FNAM FVAL
Programa1 1ddd X
Campo1d Valor campo1d
Campo2d Valor campo 2d
BDC_OKCODE Comando
Programa2 2ccc X
Campo 1c Valor campo 1c
Campo 2c Valor campo 2c
BDC_OKCODE Comando
..
Programa n Njjj X
Campo 1c Valor campo 1c
Campo 2c Valor campo 2c
BDC_OKCODE Comando
Pg. 224
Curso programacin ABAP IV Curso programacin ABAP IV
Una vez creado el fichero BDC o 'Juego de datos', este quedar almacenado para su
posterior tratamiento: Ejecucin , borrado . .
Para saber el nombre del programa ,dynpro , nombre de los campos .. con los que
debemos completar la tabla DBC tenemos dos posibilidades:
Obtener el nombre de los campos mediante la
ayuda on-line disponible en todas las pantallas.
Para obtener los datos de un campo , situados sobre el campo de pantalla pulsaremos
'F1', nos saldr una ventana mostrando la descripcin del campo , esta ventana tiene
una opcin pulsndolo nos aperecera una ventana con este aspecto:
Donde se muestra informacin sobre el programa , nombre del campo .
Utilizar la utilidad de 'grabar' una transaccin.
Podemos acceder a ella a travs del men Sistema (Existir en todos los mens)
seguiremos la ruta:
ServiciosBatch nput Grabadora (SHDB).
Llegaremos a la siguiente pantalla :
Pg. 225
Curso programacin ABAP IV Curso programacin ABAP IV
En esta pantalla podremos crear grabaciones , visualizar existentes, .... .
Para crear una nueva , pulsamremos el botn deberemos indicar un
nombre para la grabacin 'ALTAS' e indicaremos el cdigo de la transaccin 'ZBXX' . A
continuacin pulsaremos el botn nos saldr la
transaccin preparada par introducir los datos, introduciremos los datos
correspondientes (del mismo modo que si estubiramos en la transaccin directamente)
al finalizar nos saldr una pantalla con el siguiente aspecto:
Pg. 226
Curso programacin ABAP IV Curso programacin ABAP IV
Donde podremos visualizar el nombre del programa , campos , comandos .
1$3$& Creacin del /uego de datos$
Suponemos el siguiente caso. Tenemos que dar de alta a todos los clientes en nuestra
tabla maestro de clientes ZCLENXX , para ello , disponemos:
De la transaccin 'Z/229)alta de clientes que creamos en captulos anteriores).
Tenemos la informacin de los clientes almacenada en un fichero
'/usr/sap/tmp/zclienxx.dat'. (Cuya estructura es la que vimos en el apartado anterior).
Vamos a crear un programa 'ZINTE?22'que lea los datos del fichero y elabore un juego
de datos para dar de alta clientes .
El nombre del juego de datos y el nombre del fichero , sern parmetros del programa.
El cdigo del programa ser algo as:
************************************************************************
* PROGRAMA: ZNTE2XX *
Pg. 227
Curso programacin ABAP IV Curso programacin ABAP IV
* DESCRPCON: Genera un Juego de datos de Alta de clientes , con *
* los datos de los clientes que lee de un fichero. *
* AUTOR : MAD00 FECHA: 28/08/2001 *
*----------------------------------------------------------------------*
* CONTROL DE MODFCACONES *
* FECHA. AUTOR. DESCRPCON MODFCACON. *
************************************************************************
REPORT ZNTE2XX NO STANDARD PAGE HEADNG.
************************************************************************
* Tablas del diccionario de datos *
************************************************************************
TABLES: ZCLENXX. " Maestro de clientes.
************************************************************************
* Definicin de tablas internas *
************************************************************************
* Tabla interna para almacenar los registros del fichero
DATA: BEGN OF _ZCLENXX OCCURS 0,
BUKRS LKE ZCLENXX-BUKRS, "Sociedad
NCLE LKE ZCLENXX-NCLE, "Nmero de cliente
NOMBR LKE ZCLENXX-NOMBR, "Nombre cliente
APEL1 LKE ZCLENXX-APEL1, "Primer apellido
APEL2 LKE ZCLENXX-APEL2, "Segundo apellido
FNAC LKE ZCLENXX-FNAC, "Fecha de nacimiento
END OF _ZCLENXX.
* Tabla interna para almacenar los registros del juego de datos
DATA: BEGN OF _BDCTAB OCCURS 0.
NCLUDE STRUCTURE BDCDATA.
DATA: END OF _BDCTAB.
************************************************************************
* Definicin de variables globales *
************************************************************************
DATA :D_MERROR(100) TYPE C. " Mensaje de error
************************************************************************
* Pantalla de seleccin *
************************************************************************

* Parmetro nombre de fichero
SELECTON-SCREEN BEGN OF BLOCK BLOQ2 WTH FRAME TTLE TEXT-002.
* Parmetros
PARAMETERS:
* Nombre del fichero (activamos minsculas permitidas).
P_NFCH(50) TYPE C OBLGATORY DEFAULT '/usr/sap/tmp/zclienxx.dat'
LOWER CASE,
* Nombre del juego datos
P_JDATOS(12) TYPE C OBLGATORY DEFAULT 'ZCLENXX'.

SELECTON-SCREEN END OF BLOCK BLOQ2.
************************************************************************
Pg. 228
Curso programacin ABAP IV Curso programacin ABAP IV
* Comienzo de seleccin *
************************************************************************
START-OF-SELECTON.
* Abrimos el fichero para lectura en modo texto.
OPEN DATASET P_NFCH FOR NPUT N TEXT MODE MESSAGE D_MERROR.
* Comprobamos si no hubo error
F ( SY-SUBRC = 0 ).
* nicializamos la tabla interna
REFRESH _ZCLENXX.
CLEAR _ZCLENXX.
* Leemos el primer registro del fichero sobre la tabla interna
READ DATASET P_NFCH NTO _ZCLENXX.
* Mientras no haya error de lectura
WHLE ( SY-SUBRC = 0 ).
* Aadimos el registro ledo a la tabla interna
APPEND _ZCLENXX.
* nicializamos la cabecera
CLEAR _ZCLENXX.
* Leemos el siguiente registro
READ DATASET P_NFCH NTO _ZCLENXX.
ENDWHLE.
* Creamos el juego de datos con el contenido de la tabla _ZCLENXX
PERFORM CREAR_JUEGO_DATOS.
* Mostramos mensaje de 'Juego de datos creado'.
MESSAGE 000(38) WTH TEXT-003 P_JDATOS.
* Si hay error , mostramos el mensaje, con un mensaje de error
ELSE.
MESSAGE E000(38) WTH D_MERROR.
ENDF.
***********************************************************************
Rutinas adicionales. *
***********************************************************************
*&---------------------------------------------------------------------*
*& Form CREAR_JUEGO_DATOS
*&---------------------------------------------------------------------*
* Crea un juego de datos con el nombre indicado por el parmetro *
* P_JDATOS, para la transaccin ZBXX con el contenido de la *
* tabla interna _ZCLENXX. *
*----------------------------------------------------------------------*
FORM CREAR_JUEGO_DATOS.

************************************************************************
*Definicin de variables locales *
************************************************************************

DATA: L_FNAC(10) TYPE C. " Formateo de fecha para pantalla.
************************************************************************
* Proceso *
Pg. 229
Curso programacin ABAP IV Curso programacin ABAP IV
************************************************************************

* Comprobamos que la tabla interna _ZCLENXX tiene registros
CHECK NOT ( _ZCLENXX[] S NTAL ).
* Abrimos el juego de datos.
CALL FUNCTON 'BDC_OPEN_GROUP'
EXPORTNG
* CLENT = SY-MANDT
* DEST = FLLER8
GROUP = P_JDATOS
* HOLDDATE = FLLER8
KEEP = ' '
USER = SY-UNAME
* RECORD = FLLER1
* MPORTNG
* QD =
EXCEPTONS
CLENT_NVALD = 1
DESTNATON_NVALD = 2
GROUP_NVALD = 3
GROUP_S_LOCKED = 4
HOLDDATE_NVALD = 5
NTERNAL_ERROR = 6
QUEUE_ERROR = 7
RUNNNG = 8
SYSTEM_LOCK_ERROR = 9
USER_NVALD = 10
OTHERS = 11.
* Continuamos si no hay eror
CHECK ( SY-SUBRC = 0 ).
* Completamos la tabla BDC de la forma oportuna
LOOP AT _ZCLENXX.
* Formateamos el campo fecha para salida (dd.mm.aaaa)
* en la pantalla no podemos indicar el formato interno (aaaammdd)
WRTE _ZCLENXX-FNAC TO L_FNAC.
* Completamos la pantalla inicial con los datos del cliente actual
PERFORM BDC_NSERT USNG:
'X' 'SAPMZBXX' '9000',
' ' 'ZCLENXX-BUKRS' _ZCLENXX-BUKRS,
' ' 'ZCLENXX-NCLE' _ZCLENXX-NCLE,
' ' 'ZCLENXX-NOMBR' _ZCLENXX-NOMBR,
' ' 'ZCLENXX-APEL1' _ZCLENXX-APEL1,
' ' 'ZCLENXX-APEL2' _ZCLENXX-APEL2,
' ' 'ZCLENXX-FNAC' L_FNAC,
' ' 'D_PARTCULAR' 'X',
' ' 'BDC_OKCODE' 'ENTE',
* En la pantalla inicial (con datos introducidos) damos alta
'X' 'SAPMZBXX' '9000',
Pg. 230
Curso programacin ABAP IV Curso programacin ABAP IV
' ' 'BDC_OKCODE' 'ALTA'.
ENDLOOP.
* ntroducimos el cdigo de fin de transaccin despus del
* ltimo cliente
PERFORM BDC_NSERT USNG:
* En la pantalla inicial (abandonamos la transaccin).
'X' 'SAPMZBXX' '9000',
' ' 'BDC_OKCODE' '/ECANC'.
* Una vez completado la transaccin , la incluimos en el J.datos
CALL FUNCTON 'BDC_NSERT'
EXPORTNG
TCODE = 'ZBXX'
* POST_LOCAL = NOVBLOCAL
* PRNTNG = NOPRNT
TABLES
DYNPROTAB = _BDCTAB
EXCEPTONS
NTERNAL_ERROR = 1
NOT_OPEN = 2
QUEUE_ERROR = 3
TCODE_NVALD = 4
PRNTNG_NVALD = 5
POSTNG_NVALD = 6
OTHERS = 7.
* Comprobamos si hubo error, mostramos mensaje de error
F ( SY-SUBRC <> 0 ).
MESSAGE E000(38) WTH SY-SUBRC.
ENDF.
* Una vez completado el Juego de datos , lo cerramos
CALL FUNCTON 'BDC_CLOSE_GROUP'
EXCEPTONS
NOT_OPEN = 1
QUEUE_ERROR = 2
OTHERS = 3.
ENDFORM. " CREAR_JUEGO_DATOS
*&---------------------------------------------------------------------*
*& Form BDC_NSERT
*&---------------------------------------------------------------------*
* nserta en la tabla interna global _BDCTAB los campos recibido *
* Distinguiendo si se trata de un registro de dynpro o de un registro *
* de campo. *
*----------------------------------------------------------------------*
* -->PE_DYNBEGN Flag de pantalla/ campo *
* -->PE_FNAM Nombre de programa / campo *
* -->PE_FVAL Valor pantalla / campo *
*----------------------------------------------------------------------*
FORM BDC_NSERT USNG VALUE(PE_DYNBEGN)
VALUE(PE_FNAM)
Pg. 231
Curso programacin ABAP IV Curso programacin ABAP IV
VALUE(PE_FVAL).
* Proceso *
************************************************************************
* ncializamos la cabecera de la tabla
CLEAR _BDCTAB.
* nformamos el flag de pantalla
_BDCTAB-DYNBEGN = PE_DYNBEGN.
* En funcin si es o no pantalla
F ( PE_DYNBEGN = 'X' ).
_BDCTAB-PROGRAM = PE_FNAM.
_BDCTAB-DYNPRO = PE_FVAL.
* Si se trata de un campo
ELSE.
_BDCTAB-FNAM = PE_FNAM.
_BDCTAB-FVAL = PE_FVAL.
ENDF.
* nsertamos el registro en la tabla interna
APPEND _BDCTAB.
ENDFORM. " BDC_NSERT
#$3$3 Tratamiento de un /uego de datos$
Ya hemos generado un juego de datos , que estar almacenado en algn lugar del
sistema, vamos a ver ahora como visualizan, procesan, borran .
En el men Sistema (Existir en todos los mens) seguiremos la ruta:
ServiciosBatch nput Carpetas (SM35).
Llegaremos a la siguiente pantalla:
Pg. 232
Curso programacin ABAP IV Curso programacin ABAP IV
Donde podremos seleccionar los juegos de datos , por nombre y fecha de creacin as
como por su Status de proceso....
Para ver nuestro juego de datos pondremos el nombre dado (ZLIEN22.6
Aparecer nuestro juego de datos, en esta pantalla , podremos realizar las siguientes
funciones:
Dentro del men 'Juego de datos'.
Ejecutar Juego de datos (F8).
Nos permite ejecutar el juego de datos ofreciendo varias posibilidades de ejecucin a
travs de la ventana:
Pg. 233
Curso programacin ABAP IV Curso programacin ABAP IV
Ejecutar visible: Se visualizan las pantallas por las que va pasando proceso
detenindose en cada una de ellas hasta que se pulse enter.
Visualizar slo errores nicamente se visualizar la secuencia de pantallas
cuando se encuentre un error .
Ejecutar nvisible: Tendr el mismo efecto que la opcin 'Procesar en Fondo'
Procesar en Fondo (F5).
Ejecuta el juego de datos en un proceso en fondo (Batch). Para ello genera un JOB con
el mismo nombre del juego de datos.(Podremos indicar el nombre de la mquina en la
que queremos que se ejecute).
Borrar (Shift + F2).
Borra el juego de datos.
Dentro del men 'Pasar a' (o botones):
Anlisis juego datos.
Permite visualizar el contenido, pudiendo visualizar el nombre de las pantallas as como
su contenido.
Estadsticas.
Una vez ejecutado el juego de datos , muestra un informe con las transacciones
correctas , errneas .
Log.
Muestra un informe con el log de la ejecucin , se crearn tantos logs como ejecuciones
del juego de datos se realicen.
Ejecutaremos el juego de datos. A continuacin comprobamos que las entradas se han
dado de alta en la tabla.
1$0 Call transaction.
La filosofa del Call Transaction es idntica a la del juego de datos , se trata de
crear un conjunto de registros de pantallas y de datos para una transaccin
Pg. 234
Curso programacin ABAP IV Curso programacin ABAP IV
determinada con la misma estructura que para el juego de datos que se ejecuta
de forma inmediata.
Las principales diferencias son:
No se genera un juego de datos que se almacena en forma de fichero
especial.
La ejecucin es inmediata.
No se pueden incluir datos para dos transacciones distintas.
Por tanto para introducir datos mediante Call Transaction solamente
necesitaremos completar la tabla de registros _BDCTAB del mismo modo que en
un Batch nput, una vez completada llamaremos a su ejecucin mediante la
instruccin:
CALL TRANSACTON tcod.
Tiene las siguientes opciones:
.. AND SKP FRST SCREEN.
Permite saltar la primera pantalla de la transaccin , esto ser til para
determinadas transacciones que la pantalla inicial sea informativa o no se
recojan datos.
..USNG itab
Permite indicar la tabla interna que contendr los registros con la estructura
BDCDATA.
... MODE mode
Permite sealar el modo de llamada los valores posibles son:
- 'A' Visualizando las pantallas.
- 'E' Visualizar pantallas slo si hay error.
-'N' No visualizar pantallas.
... UPDATE upd
Permite sealar la manera en que se actualizarn los datos en las tablas
los valores posibles son:
'A' Actualizacin asncrona.
'S' Actualizacin sncrona.
... MESSAGES NTO messtab
Permite recoger en la tabla interna 'messtab' los mensajes que se
procuzcan durante la ejecucin de la transaccin.
Vamos a modificar nuestro programa anterior 'ZINTE?22' para que de la
posibilidad de introducir los datos ledos del fichero bien generando un juego de
datos o bien ejecutando Call transaction.
Para ello realizaremos las siguientes modificaciones:
Pg. 235
Curso programacin ABAP IV Curso programacin ABAP IV
En primer lugar , definiremos dos casillas de seleccin que den la posibilidad de
seleccionar un mtodo u otro. (Si se selecciona juego de datos , el parmetro que
indica el nombre del juego de datos a crear ser obligatorio).
El cdigo resultante ser algo as:
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N "RO#RA,AD ZINTE?22 N
N !ESRI"IOND on los datos de los clientes ledos de un 4icBero N
N da la &osibilidad de crear un <ueEo de datos o carEar N
N directamente los datos con all transaction6 N
N A+TOR D ,A!;; FE'AD ?A3;A3?;;: N
N----------------------------------------------------------------------N
N ONTROL !E ,O!IFIAIONES N
N FE'A6 A+TOR6 !ESRI"ION ,O!IFIAION6 N
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
RE"ORT ZINTE?22 NO STAN!AR! "A#E 'EA!IN#6
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N Tablas del diccionario de datos N
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
TA/LESD ZLIEN226 W ,aestro de clientes6
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N !e4inicin de tablas internas N
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N Tabla interna &ara almacenar los reEistros del 4icBero
!ATAD /E#IN OF IOZLIEN22 O+RS ;*
/+FRS LIFE ZLIEN22-/+FRS* WSociedad
NLIE LIFE ZLIEN22-NLIE* WN>mero de cliente
NO,/R LIFE ZLIEN22-NO,/R* WNombre cliente
A"EL: LIFE ZLIEN22-A"EL:* W"rimer a&ellido
A"EL? LIFE ZLIEN22-A"EL?* WSeEundo a&ellido
FNAI LIFE ZLIEN22-FNAI* WFecBa de nacimiento
EN! OF IOZLIEN226
N Tabla interna &ara almacenar los reEistros del <ueEo de datos
!ATAD /E#IN OF IO/!TA/ O+RS ;6
INL+!E STR+T+RE /!!ATA6
!ATAD EN! OF IO/!TA/6
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N !e4inicin de (ariables Elobales N
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
!ATA D!O,ERROR):;;. T-"E 6 W ,ensa<e de error
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N "antalla de seleccin N
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N "arJmetro nombre de 4icBero
Pg. 236
Curso programacin ABAP IV Curso programacin ABAP IV
SELETION-SREEN /E#IN OF /LOF /LO0: %IT' FRA,E TITLE TE2T-
;;:6
N "arJmetros
"ARA,ETERSD
N Nombre del 4icBero )acti(amos min>sculas &ermitidas.6
"ONFI')@;. T-"E O/LI#ATOR- !EFA+LT X3usr3sa&3tm&35clienxx6datX
LO%ER ASE6
SELETION-SREEN EN! OF /LOF /LO0:6
SELETION-SREEN /E#IN OF /LOF /LO0? %IT' FRA,E TITLE TE2T-
;;?6
"ARA,ETERSD
N FlaE de crear <ueEo de datos
"O[!FL RA!IO/+TTON #RO+" ;;:*
N Nombre del <ueEo de datos6
"O[!ATOS):?. T-"E !EFA+LT XZLIEN22X6
SELETION-SREEN SFI" :6
"ARA,ETERS
N FlaE de call transaction6
"OTFL RA!IO/+TTON #RO+" ;;:6
SELETION-SREEN EN! OF /LOF /LO0?6
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N omien5o de seleccin N
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
START-OF-SELETION6
N Abrimos el 4icBero &ara lectura en modo texto6
O"EN !ATASET "ONFI' FOR IN"+T IN TE2T ,O!E ,ESSA#E
!O,ERROR6
N om&robamos si no Bubo error
IF ) S--S+/R L ; .6
N Iniciali5amos la tabla interna
REFRES' IOZLIEN226
LEAR IOZLIEN226
N Leemos el &rimer reEistro del 4icBero sobre la tabla interna
REA! !ATASET "ONFI' INTO IOZLIEN226
N ,ientras no Baya error de lectura
%'ILE ) S--S+/R L ; .6
N A8adimos el reEistro ledo a la tabla interna
A""EN! IOZLIEN226
N Iniciali5amos la cabecera
LEAR IOZLIEN226
N Leemos el siEuiente reEistro
REA! !ATASET "ONFI' INTO IOZLIEN226
EN!%'ILE6
N om&robamos Iue se Ban almacenado datos en la tabla interna
'EF NOT ) IOZLIEN22\] IS INITIAL .6
N En 4uncin de la o&cin seleccionada )[ueEo datos o call.6
Pg. 237
Curso programacin ABAP IV Curso programacin ABAP IV
IF NOT ) "O[!FL IS INITIAL .6
N reamos el <ueEo de datos con el contenido de la tabla IOZLIEN22
"ERFOR, REARO[+E#OO!ATOS6
N ,ostramos mensa<e de X[ueEo de datos creadoX6
,ESSA#E I;;;)CA. %IT' TE2T-;;C "O[!ATOS6
N En caso contrario se Ba seleccionado all
ELSE6
N om&letamos la tabla interna IO/!TA/
"ERFOR, O,"LETARO/!TA/6
N Llamamos a la transaccin en modo sincrono y no (isuali5acin
ALL TRANSATION XZ/22X +SIN# IO/!TA/ ,O!E XNX +"!ATE XSX6
N om&robamos el (alor de retorno
IF ) S--S+/R L ; .6
N ,ostramos mensa<e de datos almacenados
,ESSA#E I;;;)CA. %IT' TE2T-;;R6
EN!IF6
EN!IF6
N Si Bay error * mostramos el mensa<e* con un mensa<e de error
ELSE6
,ESSA#E E;;;)CA. %IT' !O,ERROR6
EN!IF6
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N ontrol de la &antalla de seleccin6 N
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N ontrol de la salida de la &antalla de seleccin
AT SELETION-SREEN O+T"+T6
N Si esta seleccionada la o&cin de <ueEo de datos
N Bacemos Iue la entrada &ara el &arJmetro "O[!ATOS sea obliEatoria6
IF NOT ) "O[!FL IS INITIAL .6
N Recorremos todos los elementos de la &antalla6
LOO" AT SREEN6
N Al &arJmetro "O[!ATOS le Bacemos obliEatorio
'EF SREEN-NA,E L X"O[!ATOSX6
SREEN-RE0+IRE! L X:X6
,O!IF- SREEN6
EN!LOO"6
EN!IF6
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N Rutinas adicionales6 N
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NY---------------------------------------------------------------------N
NY Form REARO[+E#OO!ATOS
NY---------------------------------------------------------------------N
N rea un <ueEo de datos con el nombre indicado &or el &arJmetro N
N "O[!ATOS* &ara la transaccin Z/22 con el contenido de la N
Pg. 238
Curso programacin ABAP IV Curso programacin ABAP IV
N tabla interna IOZLIEN226 N
N----------------------------------------------------------------------N
FOR, REARO[+E#OO!ATOS6
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N "roceso N
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N Abrimos el <ueEo de datos6
ALL F+NTION X/!OO"ENO#RO+"X
E2"ORTIN#
N LIENT L S--,AN!T
N !EST L FILLERA
#RO+" L "O[!ATOS
N 'OL!!ATE L FILLERA
FEE" L X X
+SER L S--+NA,E
N REOR! L FILLER:
N I,"ORTIN#
N 0I! L
E2E"TIONS
LIENTOIN1ALI! L :
!ESTINATIONOIN1ALI! L ?
#RO+"OIN1ALI! L C
#RO+"OISOLOFE! L R
'OL!!ATEOIN1ALI! L @
INTERNALOERROR L S
0+E+EOERROR L T
R+NNIN# L A
S-STE,OLOFOERROR L U
+SEROIN1ALI! L :;
OT'ERS L ::6
N ontinuamos si no Bay eror
'EF ) S--S+/R L ; .6
N om&letamos la tabla /! de la 4orma o&ortuna
"ERFOR, O,"LETARO/!TA/6
N +na (e5 com&letado la transaccin * la incluimos en el [6datos
ALL F+NTION X/!OINSERTX
E2"ORTIN#
TO!E L XZ/22X
N "OSTOLOAL L NO1/LOAL
N "RINTIN# L NO"RINT
TA/LES
!-N"ROTA/ L IO/!TA/
E2E"TIONS
INTERNALOERROR L :
NOTOO"EN L ?
Pg. 239
Curso programacin ABAP IV Curso programacin ABAP IV
0+E+EOERROR L C
TO!EOIN1ALI! L R
"RINTIN#OIN1ALI! L @
"OSTIN#OIN1ALI! L S
OT'ERS L T6
N om&robamos si Bubo error* mostramos mensa<e de error
IF ) S--S+/R PQ ; .6
,ESSA#E E;;;)CA. %IT' S--S+/R6
EN!IF6
N +na (e5 com&letado el [ueEo de datos * lo cerramos
ALL F+NTION X/!OLOSEO#RO+"X
E2E"TIONS
NOTOO"EN L :
0+E+EOERROR L ?
OT'ERS L C6
EN!FOR,6 W REARO[+E#OO!ATOS
NY---------------------------------------------------------------------N
NY Form O,"LETARO/!TA/
NY---------------------------------------------------------------------N
N om&leta la tabla interna IO/!TA/ con los datos necesarios N
N &ara llamar a la transaccin Z/22 existentes en la tabla interna N
N IOZLIEN226 N
N----------------------------------------------------------------------N
FOR, O,"LETARO/!TA/6
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N !e4inicin de (ariables locales N
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
!ATAD LOFNAI):;. T-"E 6 W Formateo de 4ecBa &ara &antalla
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N "roceso N
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N Iniciali5amos la tabla interna /!
REFRES' IO/!TA/6
N om&letamos la tabla /! de la 4orma o&ortuna
LOO" AT IOZLIEN226
N Formateamos el cam&o 4ecBa &ara salida )dd6mm6aaaa.
N en la &antalla no &odemos indicar el 4ormato interno )aaaammdd.
%RITE IOZLIEN22-FNAI TO LOFNAI6
N om&letamos la &antalla inicial con los datos del cliente actual
"ERFOR, /!OINSERT +SIN#D
X2X XSA",Z/22X XU;;;X*
X X XZLIEN22-/+FRSX IOZLIEN22-/+FRS*
X X XZLIEN22-NLIEX IOZLIEN22-NLIE*
X X XZLIEN22-NO,/RX IOZLIEN22-NO,/R*
X X XZLIEN22-A"EL:X IOZLIEN22-A"EL:*
X X XZLIEN22-A"EL?X IOZLIEN22-A"EL?*
Pg. 240
Curso programacin ABAP IV Curso programacin ABAP IV
X X XZLIEN22-FNAIX LOFNAI*
X X X!O"ARTI+LARX X2X*
X X X/!OOFO!EX XENTEX*
N En la &antalla inicial )con datos introducidos. damos alta
X2X XSA",Z/22X XU;;;X*
X X X/!OOFO!EX XALTAX6
EN!LOO"6
N Introducimos el cdiEo de 4in de transaccin des&uKs del
N >ltimo cliente
"ERFOR, /!OINSERT +SIN#D
N En la &antalla inicial )abandonamos la transaccin.6
X2X XSA",Z/22X XU;;;X*
X X X/!OOFO!EX X3/AFX6
EN!FOR,6 W O,"LETARO/!TA/
NY---------------------------------------------------------------------N
NY Form /!OINSERT
NY---------------------------------------------------------------------N
N Inserta en la tabla interna Elobal IO/!TA/ los cam&os recibido N
N !istinEuiendo si se trata de un reEistro de dyn&ro o de un reEistro N
N de cam&o6 N
N----------------------------------------------------------------------N
N --Q"EO!-N/E#IN FlaE de &antalla3 cam&o N
N --Q"EOFNA, Nombre de &roErama 3 cam&o N
N --Q"EOF1AL 1alor &antalla 3 cam&o N
N----------------------------------------------------------------------N
FOR, /!OINSERT +SIN# 1AL+E)"EO!-N/E#IN.
1AL+E)"EOFNA,.
1AL+E)"EOF1AL.6
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N "roceso N
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N Inciali5amos la cabecera de la tabla
LEAR IO/!TA/6
N In4ormamos el 4laE de &antalla
IO/!TA/-!-N/E#IN L "EO!-N/E#IN6
N En 4uncin si es o no &antalla
IF ) "EO!-N/E#IN L X2X .6
IO/!TA/-"RO#RA, L "EOFNA,6
IO/!TA/-!-N"RO L "EOF1AL6
N Si se trata de un cam&o
ELSE6
IO/!TA/-FNA, L "EOFNA,6
IO/!TA/-F1AL L "EOF1AL6
EN!IF6
N Insertamos el reEistro en la tabla interna
Pg. 241
Curso programacin ABAP IV Curso programacin ABAP IV
A""EN! IO/!TA/6
EN!FOR,6 W /!OINSERT
1$2 Direct Input.
Del mismo modo que la carga de datos en el sistema a travs de Batch input o
Call transaction utilizan la interfaz de pantallas , el sistema Direct nput utiliza una
interfaz especial propia. Esta interfaz especial consiste en un conjunto de
programas que actualizan las bases de datos sin necesidad de que los datos se
introduzcan por pantalla, estos programas toman los datos , normalmente, de un
fichero con la estructura esperada por el programa.
La carga de datos mediante programas de carga 'Direct nput' es mucho ms
rpida que la carga de dato mediante Batch nput o Call Transaction. Esto es
debido, entre otras razonas , a que durante la carga de los datos , aunque se
realizan los mismos chequeos de autorizaciones, integridad . , se evita la lgica
de las pantallas .
Existen programas de carga Direct nput predefinidos para determinados mdulos
de SAP. La transaccin 'SXDA_OLD' permite ver estos programas.
1$5 -icDeros locales$
Hasta ahora , siempre hemos trabajado con ficheros que se encontraban en
servidor de aplicacin SAP. Vamos a ver como trabajar con ficheros locales ,
entendiendo como tales aquellos que se encuentran dentro del terminal. (Bien en
una unidad de disco, disco de red .).
Existen dos funciones estndares que nos permiten importar y exportar datos a
ficheros locales:
WS_DOWNLOAD Para volcar a fichero.
WS_UPLOAD Para leer de fichero.
Vamos a ver con un ejemplo como utilizar estas funciones.
El ejemplo va a consistir en un programa que vuelque el contenido de la tabla
ZCLENXX a un fichero local .
El cdigo de programa ser algo as:
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N "RO#RA,AD ZINTEC22 N
N !ESRI"IOND /a<a los datos de la tabla ZLIEN22 a un 4icBero local N
N N
N A+TOR D ,A!;; FE'AD ?A3;A3?;;: N
N----------------------------------------------------------------------N
N ONTROL !E ,O!IFIAIONES N
Pg. 242
Curso programacin ABAP IV Curso programacin ABAP IV
N FE'A6 A+TOR6 !ESRI"ION ,O!IFIAION6 N
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
RE"ORT ZINTEC2 NO STAN!AR! "A#E 'EA!IN#6
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N Tablas del diccionario de datos N
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
TA/LESD ZLIEN226 W ,aestro de clientes6
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N !e4inicin de tablas internas N
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N Tabla interna &ara almacenar los reEistros del 4icBero
!ATAD /E#IN OF IOZLIEN22 O+RS ;*
/+FRS LIFE ZLIEN22-/+FRS* WSociedad
NLIE LIFE ZLIEN22-NLIE* WN>mero de cliente
NO,/R LIFE ZLIEN22-NO,/R* WNombre cliente
A"EL: LIFE ZLIEN22-A"EL:* W"rimer a&ellido
A"EL? LIFE ZLIEN22-A"EL?* WSeEundo a&ellido
FNAI LIFE ZLIEN22-FNAI* WFecBa de nacimiento
EN! OF IOZLIEN226
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N "antalla de seleccin N
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N "arJmetro nombre de 4icBero
SELETION-SREEN /E#IN OF /LOF /LO0: %IT' FRA,E TITLE TE2T-
;;:6
N "arJmetros
"ARA,ETERSD
N Sociedad
"O/+FRS LIFE ZLIEN22-/+FRS O/LI#ATOR- !EFA+LT X;;;:X*
N Nombre del 4icBero local )acti(amos min>sculas &ermitidas.6
"ONFI'):?A. T-"E O/LI#ATOR- !EFA+LT XD^5clienxx6datX
LO%ER ASE6
SELETION-SREEN EN! OF /LOF /LO0:6
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N omien5o de seleccin N
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
START-OF-SELETION6
N Seleccionamos los datos de la tabla
SELET N
FRO, ZLIEN22 INTO ORRES"ON!IN# FIEL!S OF TA/LE IOZLIEN22
%'ERE /+FRS L "O/+FRS6
N om&robamos Iue se seleccionarn datos
'EF ) S--S+/R L ; .6
N 1olcamos el contenido de la tabla interna al 4icBero local
ALL F+NTION X%SO!O%NLOA!X
E2"ORTIN#
Pg. 243
Curso programacin ABAP IV Curso programacin ABAP IV
N /INOFILESIZE L X X
N O!E"A#E L X X
FILENA,E L "ONFI'
FILET-"E L XASX
N ,O!E L X X
N %F:ONOFOR,AT L X X
N %F:ONOSIZE L X X
N %F:OTOFOR,AT L X X
N %F:OTOSIZE L X X
N OLOSELET L X X
N OLOSELET,ASF L X X
N NOOA+T'O'EF L X X
N I,"ORTIN#
N FILELEN#T' L
TA/LES
!ATAOTA/ L IOZLIEN22
N FIEL!NA,ES L
E2E"TIONS
FILEOO"ENOERROR L :
FILEO%RITEOERROR L ?
IN1ALI!OFILESIZE L C
IN1ALI!OTA/LEO%I!T' L R
IN1ALI!OT-"E L @
NOO/AT' L S
+NFNO%NOERROR L T
OT'ERS L A6
N ,ostramos mensa<e de 4icBero creado
,ESSA#E I;;;)CA. %IT' TE2T-;;:6
1$6 egacy "ystem Migration IorR*encD
Se ejecuta a travs de la transaccin LSMW. Esta herramienta permite realizar
migraciones de datos de sistemas externos a R/3, fundamentalmente cargas de datos e
interfases.
Con la LSMW los datos se pueden cargar de 4 formas diferentes:
Batch nput/Direct nput.
Grabacin de un Batch nput.
BAP
DOCs
Para realizar una carga utilizando cualquier mtodo de los anteriores, es necesario
definir el tipo de objeto a cargar.
Al crear un nuevo Proyecto se deben introducir los siguientes datos:
Proyecto (de tipo CHAR de 10 caracteres).
Pg. 244
Curso programacin ABAP IV Curso programacin ABAP IV
Subproyecto (de tipo CHAR de 10 caracteres).
Objeto (de tipo CHAR de 10 caracteres).
La primera vez que se entra en la transaccin y antes de definir los datos que van a ser
cargados, aparece una pantalla que indica los pasos que se deben definir.
Finalmente se muestran estos pasos se en la imagen siguiente:
Pg. 245
Curso programacin ABAP IV Curso programacin ABAP IV
E$ -ormularios
E$# Introduccin
Las empresas necesitan imprimir habitualmente informes, facturas, pedidos, etc.
con un formato predefinido. Estos documentos pueden contener textos que se
mantienen constantes entre documentos, pero tambin puede haber datos
variables. En muchas ocasiones la creacin de estos documentos se produce en
masa creando mltiples copias de un mismo tipo de documento pero con
propiedades distintas. De esta forma, la creacin de los documentos como
facturas, pedidos etc. se puede realizar de forma automtica. SAPscript resuelve
todos estos problemas con una plataforma comn.
La creacin de los documentos implica a varios elementos. Desde el punto de
vista del programador SAPscript se puede dividir en formularios y programas de
control de formularios. En realidad estn implicados tambin el diccionario de
SAP y el composer (un elemento que crea el formulario a partir de los elementos
y de los requisitos del programa de control) Los formularios especifican la
apariencia del texto en el documento (forman la plantilla del documento) y el
programa de control especifica que valores contendrn los campos del
formulario. De esta forma, para cambiar la apariencia de un documento slo es
necesario cambiar el formulario. Por el contrario, si se desea cambiar el
contenido del documento es necesario cambiar los elementos de texto as como
el programa de control del formulario.
El programa de control del formulario controla la salida del documento hacia la
impresora, fax, pantalla, nmero de copias... Este programa selecciona los datos
que se van a mostrar en el formulario del diccionario de ABAP o de las entradas
del usuario, as como el formulario controlando los textos que se deben imprimir,
su secuencia y frecuencia.
La apariencia final del documento depende de la interaccin del programa de
control con el formulario. El programa de control inicializa y finaliza el proceso de
impresin, transfiriendo los comandos de SAPscript al composer. El composer
formatea el documento a partir de la informacin del diseo del formulario
especificado en el programa de control. Si el documento contiene variables, el
composer reemplaza el contenido de estas en su posicin (fecha, hora...)
Ejemplo de una factura:
Pg. 246
Curso programacin ABAP IV Curso programacin ABAP IV
E$& Editores de 4ormularios
E$&$# Editor 'rC4ico
Si entramos al editor de texto, seleccionando primero una ventana y
pulsando luego en Elementos de texto veremos la siguiente pantalla:
Pg. 247
#/8%e de la $entana
en la 9!e se de:ine el
ele/ent de te;t.
Curso programacin ABAP IV Curso programacin ABAP IV
En el campo de Tipo de Prrafo podemos escoger entre los formato de
prrafo que hemos definido en dicha ventana al igual que en el campo de
Formato de Carcter podemos escoger entre los formatos de carcter
que nos hemos definido.
Para introducir comandos, smbolos, elemento de textos, etc. dentro del
formulario en el men Tratar Comando nsertar Comando nos
permite insertar dicha informacin adicional.
Pg. 248
Ti+ de +%%a: F%/at de 5a%"te%
Curso programacin ABAP IV Curso programacin ABAP IV
E$&$& Editor Al4anum,rico
Para pasar al editor de texto alfanumrico, desde el men Pasar
seleccionar la opcin de Cambiar editor.
Pg. 249
Curso programacin ABAP IV Curso programacin ABAP IV
A diferencia del editor grfico en el tipo de prrafo a parte de tener
nuestro formato de prrafo definido anteriormente tambin podemos
informar si la lnea en cuestin es un comando, comentario, etc.
Pg. 250
#/8%e de la $entana
en la 9!e se de:ine el
ele/ent de te;t.
Ti+ de +%%a:
Curso programacin ABAP IV Curso programacin ABAP IV
E$3 Estructura de un 4ormulario
Para acceder al editor de formularios se sigue la ruta Herramientas -> mprimir
formularios->SAPscript-> Formulario, o directamente con la transaccin SE71.
Pg. 251
Curso programacin ABAP IV Curso programacin ABAP IV
Accederemos a continuacin a la pantalla Form Painter. Podemos crear un
nuevo formulario, editar uno ya existente o modificarlo.
Nota: En el caso de no mostrar esta pantalla significar que estamos usando
Form Painter grfico. Es igual que el modo alfanumrico pero ms visual. No
obstante aqu seguiremos el modo alfanumrico accediendo por el men-
>Opciones->Form Painter y desmarcando el flag de modo grfico.
Un formulario especifica la disposicin de los siguientes elementos en las
pginas de un documento:
Cabecera
Pginas
Ventanas
Ventana pgina
Formatos de prrafo
Formatos caracteres
Elementos de texto
E$3$# Ca*ecera
La cabecera de un formulario consiste en atributos globales del
formulario. Estos pueden ser datos de Eestin (Nombre del formulario,
Pg. 252
Curso programacin ABAP IV Curso programacin ABAP IV
descripcin, clase de desarrollo...) y &arametri5aciones bJsicas (formato
de pgina, fuente por defecto, prrafo por defecto...). Cuando se crea un
formulario, se accede directamente a la cabecera, la cual sirve para
definir los datos generales del formulario.
!atos de Eestin
Est ventana esta conformada por dos subdivisiones, info gestin y
atributos idioma.
nfo gestin:
Formulario: El nombre de un formulario no deber tener
ms de 16 posiciones y slo debern utilizarse letras
maysculas y cifras, comenzando siempre por una letra.
Significado: Descripcin breve del formulario
Atributos idioma:
Se define el idioma principal y si el formulario podr ser
traducido a otros idiomas, o solo podr mostrarse en el idioma
original.
Pg. 253
Curso programacin ABAP IV Curso programacin ABAP IV
"arametri5aciones bJsicas
En la ventana de parametrizaciones bsicas se distinguen dos divisiones,
una conformada por la configuracin de la pgina y la otra con los valores
propuestos para el formato del texto
Con4igurar pCgina:
Formato de pgina: ndica el tamao del papel.
Formato hoja: ndica la orientacin del papel.
Lneas/pulg: ndica la cantidad de lneas de impresin por pulgada.
Carcter/pulg: ndica la cantidad de caracteres de impresin por pulgada.
Pgina inicial: Primera pgina que se va ha imprimir de nuestro formulario.
Valores propuesta p$ 4ormatear te=to: Se especifican los valores tomados por
defecto.
Prrafo por defecto: Si se indica '*' para el prrafo en el editor SAPscript, el
sistema tomar el prrafo default para editar el texto.
Tabulaciones: Distancia entre las tabulaciones en un formulario.
Familia fonts, altura font...: Definen el formato de carcter por defecto.
Pg. 254
Curso programacin ABAP IV Curso programacin ABAP IV
E$3$& PCginas
Representan las distintas pginas del documento. Estas suelen tener distinto
aspecto unas de otras, la primera pgina de un fax contiene informacin distinta
a la que se mostrara en las pginas siguientes. Para cada formulario se ha de
definir al menos una pgina. En este apartado daremos una descripcin a la
pgina, indicaremos cual es la pgina siguiente y cmo se actualiza el contador
de pginas, as como los atributos de impresin como son el modo de impresin
(Por defecto, SYMPLEX, DUPLEX o TRPLEX) y el nombre del recurso que ser
la bandeja de la impresora de donde tomar el papel (TRY01, TRY02, TRY03).
E$3$3 Ventanas
Las ventanas representan reas que se posicionarn sobre las pginas. En ellas
pondremos el prrafo por defecto, el nombre de la ventana, su significado y el
tipo de ventana.
Pg. 255
Curso programacin ABAP IV Curso programacin ABAP IV
Hay 4 tipos de ventanas:
MAN: Es la ventana principal en la que se escribir el texto variable, como
podra ser el cuerpo de una carta. Esta ventana puede extenderse a ms de una
pgina.
VAR: Es una ventana cuyo contenido puede variar. Estas ventanas deben
definirse en cada pgina.
CONST: Define una ventana cuyo contenido no cambia.
GRAPH: Define una ventana con una imagen grfica.
E$3$0 Ventana pCgina
En este apartado, se especifica la posicin y tamao de las ventanas en cada pgina.
Para aadir pgina, se realiza por medio del botn derecho del ratn en la opcin crear
elemento.
Pg. 256
Curso programacin ABAP IV Curso programacin ABAP IV
E$3$2 -ormatos de pCrra4os
Los formatos de prrafos definen las caractersticas de estos, esta pantalla esta
dividida en dos partes. En la zona superior se muestra una lista con todos los
formatos de prrafo para el formulario, observndose las caractersticas
generales de cada prrafo.
Los atributos de cada prrafo estn divididos en 4 partes:
Pg. 257
Curso programacin ABAP IV Curso programacin ABAP IV
Para la creacin de un nuevo prrafo se aade en la casilla de prrafo en la
zona de atributos se aade el nombre que le identificara con uno o dos
caracteres
!atos estJndar
Se define las caractersticas propias del prrafo, como mrgenes, sangra y
alineacin.
Prrafo: Define el nombre con el cual se identificara con posterioridad las distintas
caractersticas del prrafo creado.
Significado: Breve descripcin identificativa del prrafo.
Margen izquierdo y derecho: Distancia con la ventana que contenga el prrafo.
Pg. 258
Curso programacin ABAP IV Curso programacin ABAP IV
Sangra 1 lnea: Sangra.
Esp. anterior / posterior: Espacio de comienzo con respecto al prrafo anterior /
posterior.
Alineacin: Alineacin del prrafo.
nterlineado: Espacio entre cada lnea.
!atos de Fuentes
Contiene las caractersticas de la fuente as como su formato.
Familia: fuente que se usar en el prrafo.
Altura: Tamao de la fuente a utilizar
Negrita, cursiva y subrayado: Como indica el titulo permite la opcin de que el
prrafo este formateado con alguna de estas caractersticas si se marca la opcin
"On quedarn activadas, si se selecciona la opcin "Conser se usara el valor que
tena el texto anterior.
!atos de tabuladores
Aqu se definen las distintas posiciones de tabulacin que necesitemos para cada
prrafo.
Le deberemos indicar una posicin, ya sea en centmetros (CM), caracteres (CH),
milmetros (MM), puntos (PT) y un tipo de alineacin: izquierda (LEFT), derecha
(RGHT), centrado (CENTER), al signo (SGN) o a la coma decimal (DECMAL)
!atos de esIuema
Es posible definir numeracin y marcas automticas de forma que podamos
estructurar texto en captulos, subcaptulos y secciones.
Pg. 259
Curso programacin ABAP IV Curso programacin ABAP IV
El signo fijo ser el carcter que se antepondr siempre al prrafo, si el signo es '_'
est se convertir en espacio en blanco.
E$3$5 -ormatos de caracteres
Dentro de cualquier prrafo es posible cambiar el tipo de letra para uno o ms
caracteres.
Atributos estJndar
Formato carct.: Nombre con un mximo de dos letras con el cual se identificara
el tipo de formato de carcter creado.
Signific.: Breve descripcin que defina el formato de caracteres.
Pg. 260
Curso programacin ABAP IV Curso programacin ABAP IV
Cd. Barras: Se introduce el cdigo numrico de barras para la posterior
visualizacin del mismo.
Ln. Unida, oculto, superndice, subndice: Se especifican las distintas opciones
que tendr el formato de caracteres. "Conser conservara los parmetros
especificados en el texto anterior.
Atributos 4ont
Contiene los datos de la fuente que se usara en el formato de carcter.
Las caractersticas en los atributos Font son los mismos que para los formatos
de prrafo.
E$3$6 Elementos de te=to
Los elementos de texto son componentes individuales de una ventana. Puede
haber ms de un elemento de texto por ventana y se distinguen dos tipos. Los
elementos de texto pueden contener variables e instrucciones de control
SAPscript. Para acceder a ellos nos situamos en la pantalla de Ventana Pagina,
seleccionamos la ventana donde queremos insertar los elementos de texto y
pulsamos el botn de Elementos de texto (F9).
El programa de impresin accede a los elementos de texto por nombre, los
formatea e imprime en la ventana correspondiente.
E$0 "AP"cript
E$0$# Ca/as7 lGneas y som*reados
Se pueden dibujar cajas y lneas en SAPScript mediante los siguientes
comandos:
BOX: Dibuja una caja o una lnea.
POSTON: Especifica el punto inicial de una caja o lnea
SZE: Especifica la anchura o altura de una caja.
Pg. 261
Curso programacin ABAP IV Curso programacin ABAP IV
Ejemplo:
Creamos una nueva ventana de tipo CONST de idnticas proporciones que la
ventana MAN que dibuje una caja que rodee las dos columnas de la ventana
MAN del ejemplo.
/: BOX XPOS '0.5' CM WDTH 8 CM HEGHT 15 CM FRAME 10 TW.
/: BOX XPOS '8.5' CM WDTH 8 CM HEGHT 15 CM FRAME 10 TW.
E$0$& Comandos de control
SAPScript dispone de una serie de comandos que permiten obtener un control
total sobre el texto. Estos comandos son introducidos en el editor de textos igual
que una lnea normal excepto que el deberemos seleccionar el prrafo /:
NEW-PAGE: Provoca el salto automtico de pgina
PROTECT ENDPROTECT: Se asegura que el texto introducido entre estos
dos comandos aparezca siempre en una misma pgina.
NEW-WNDOW: Llama automticamente a la siguiente ventana MAN definida
en una misma pgina.
DEFNE: Permite crear una constante con un valor dado.
SET DATE MASK: Define el formato de los campos fecha.
SET TME MASK: Define el formato de los campos hora.
SET COUNTRY: Define el formato de ciertos campos como el punto para los
millares adaptados a un pas especfico.
SET SGN: ndica la posicin del signo.
RESET: nicializa el contador de un prrafo con numeracin.
NCLUDE: nserta el contenido de otro texto en el texto actual.
STYLE: Cambia el contenido del estilo actual del texto.
ADDRESS ENDADDRESS: Formatea una direccin de acuerdo con las
convenciones postales del pas definido por el parmetro COUNTRY.
TOP ENDTOP: Especifica lneas de texto que siempre aparecern en la parte
superior de la ventana MAN.
BOTTOM ENDBOTTOM: Especifica lneas de texto que aparecern en la parte
inferior de la ventana MAN.
F ENDF: Permite especificar que lneas debera imprimirse cuando se
cumplan ciertas condiciones.
CASE: Cubre el caso de mltiples comandos F anidados.
PERFORM: Permite llamar una rutina de un programa ABAP
PRNT-CONTROL: Llama directamente ciertas funciones de la impresora.
BOX, POSTON, LNE: Dibuja lneas y cajas.
HEX ENDHEX: Enva a la impresora rdenes en el lenguaje que utiliza la
impresora.
SUMMNG: Acumula un valor total para un smbolo de programa.
Pg. 262
Curso programacin ABAP IV Curso programacin ABAP IV
E$0$3 "Gm*olos "AP"cript
La informacin variable se introduce en los formularios SAPScript mediante
"smbolos o variables que SAP reconoce porque van rodeadas de '&'. Ej.:
&symbol&.
Smbolos del sistema: variable como fecha, hora.
Smbolos de programa: variables almacenas en aplicaciones SAP como campos
del diccionario de datos o variables globales de los programas.
Smbolos estndar definidos en la tabla TTDTG: El valor de estos smbolos es
dependiente del lenguaje y puede contener hasta 60 caracteres. SAP mantiene
esta tabla con valores estndar.
Smbolos de texto: Aquellos que no corresponden a los tipos de smbolos
definidos anteriormente. Son definidos por el usuario en el editor de texto,
eligiendo ncluir -> Smbolos ->Texto. O bien definindolos con el comando
NCLUDE.
E$0$0 "Gm*olos del sistema
&DATE& Fecha del sistema. Se imprimir de
acuerdo al tipo de SET DATE MASK
definida anteriormente.
&DAY& Da del sistema.
&MONTH& Mes
&YEAR& Ao
&NAME_OF_DAY& Nombre del da de la semana del
recogido en el SET DATE MASK.
&NAME_OF_MONTH& Nombre del mes
&TME& Hora segn el formato especificado en
el SET TME MASK.
&HOURS& Hora
&MNUTES& Minuto
&SECONDS& Segundo
&PAGE& Nmero de la pgina actual
&NEXTPAGE& Nmero de la pgina siguiente a la
actual
&DEVCE& Tipo del dispositivo de salida
(PRNTER, SCREEN, TELEX, ABAP).
&SPACE& Espacio.
&ULNE& Lnea de subrayado
&VLNE& Lnea vertical
E$0$2 Campos generales de "AP"cript
&SAPSCRPT-SUBRC& Recibe un valore despus de ejecutar un comando
NCLUDE. (0 si lo encuentra, 4 si no).
&SAPSCRPT-DRVER& Nombre del dispositivo de salida (POST, HPL2,
PRES).
&SAPSCRPT-FORMPAGES& N total de pginas del form.
Pg. 263
Curso programacin ABAP IV Curso programacin ABAP IV
&SAPSCRPT-JOBPAGES& N total de pginas de todos los formularios
contenido en la peticin de impresin actual.
&SAPSCRPT_CONTER_X& (x = 0.9) Representan 10 variables de contador
que se puede utilizar en el texto y formularios para cualquier propsito.
E$0$5 Opciones de 4ormato de los sGm*olos
Desplazamiento &symbol+offset&
Longitud de salida &symbol(length)&
Omisin del signo &symbol(S)&
Mostrar el signo por la izquierda &symbol(<)&
Mostrar el signo por la derecha &symbol(>)&
Omitir los ceros iniciales &symbol(Z)&
Comprimir los espacios &symbol(C)&
Nmero de decimales &symbol(.2)&
Omitir el indicador de miles &symbol(T)&
Especificar exponente &symbol(E2)&
Alinear a la derecha &symbol(8R)&
Rellenar de caracteres &symbol(Ff)&
Suprimir valores iniciales &symbol()&
gnorar rutinas de conversin &symbol(K)&
Cambiar valor de un contador &SAPSCRPT_COUNTER_X(+)&
Textos precedentes &'pre-text'symbol'post-text'&
E$0$6 -ormularios en .arios idiomas
Una vez tenemos creado el formulario en un idioma padre, podemos crearlo en
otros idiomas. Para ello en la pantalla de mantenimiento de formularios,
seleccionamos el formulario que acabamos de crear, seleccionamos el nuevo
lenguaje del formulario y seleccionamos crear. Veremos que trabajamos con una
copia del formulario anterior en el que lo nico que deberemos hacer ser
traducir los textos y adaptar el formulario, si fuera necesario, a las peculiaridades
del nuevo idioma.
Para llamar al formulario en distintos idiomas se realiza mediante la funcin de
abrir formulario, indicando el idioma requerido. Si el formulario no existiera en
ese idioma, se abrir el formulario en el idioma padre.
CALL FUNCTON 'OPEN_FORM'
EXPORTNG
FORM = 'Z_PRUEBA'
LANGUAGE = P_DOMA
OPTONS = TCPO
DEVCE = 'PRNTER'
DALOG = 'X'
EXCEPTONS
OTHERS = 1.
Pg. 264
Curso programacin ABAP IV Curso programacin ABAP IV
E$0$1 Inclusin de grC4icos
Para incluir grficos en un formulario, primero este debe estar grabado en SAP
en formato TFF, BMP o en forma de elemento de texto. Luego se incluye en la
ventana deseada a travs del men ncluir -> Funcin grfica y seleccionando el
grfico. Esto generar una lnea de comando como la siguiente:
BTMAP DES_LOGO OBJECT GRAPHCS D BMAP TYPE BMON DP 300
E$2 Programa de impresin del 4ormulario
Una vez finalizado el diseo del formulario es necesario crear un programa que
gestione la impresin del mismo. Para ello hay una serie de funciones Standard
de SAP que gestionan todos los parmetros de salida. De todas ellas, las ms
relevantes son:
OPEN_FORM
WRTE_FORM
CLOSE_FORM
OPEN_FORM: Este modulo de funcin abre un formulario para su impresin.
Esta funcin ha de ejecutarse antes que cualquier otra funcin que acte sobre
el formulario (WRTE_FORM, START_FORM, CONTROL_FORM...). Cada vez
que se utiliza la funcin OPEN_FORM es necesario cerrar el formulario
(CLOSE_FORM) para que este se imprima. Dentro de un mismo programa
puede haber varios pares de llamadas a las funciones OPEN_FORM y
CLOSE_FORM.
CLOSE_FORM: Cierra un formulario abierto previamente con la funcin
OPEN_FORM.
WRTE_FORM: El sistema muestra un elemento de texto determinado del
formulario. El elemento de texto se especifica en el parmetro exportado
ELEMENT. En el parmetro WNDOW se puede especificar el nombre de la
ventana de salida.
Estructura TCPO representa los parmetros de control del formato de salida.
Esta estructura se puede utilizar en los mdulos de funcin PRNT_TEXT y
OPEN_FORM en el parmetro OPTONS.
TDPAGESLCT SAPscript: seleccionar pgina de impresin
TDPREVEW SAPscript: habilitar vista previa
TDNOPREV SAPscript: deshabilitar vista previa
TDNOPRNT SAPscript: deshabilitar impresin desde vista
previa
TDTTLE SAPscript: Ttulo de la pantalla de seleccin
TDPROGRAM SAPscript: nombre del programa de smbolos
de sustitucin
Pg. 265
Curso programacin ABAP IV Curso programacin ABAP IV
TDTEST SAPscript: visualizacin previa
TDEXT SAPscript: volver inmediatamente despus de
la impresin
TDGETOTF SAPscript: valor de retorno te la tabla OTF, no
hay impresin
TDSCRNPOS SAPscript: posicin del OTF en la pantalla
TDDEST Spool: nombre del dispositivo de salida
TDPRNTE Spool: nombre del tipo de dispositivo
TDCOPES Spool: numero de copias
TDNEWD Spool: nueva peticin
TDMMED Spool: peticin de impresin inmediata
TDDELETE Spool: borrar peticin despus de la impresin
TDLFETME Spool: tiempo de retencin de la peticin
TDDATASET Spool: identificacin de la peticin
TDSUFFX1 Spool: primer sufijo de la peticin
TDSUFFX2 Spool: segundo sufijo de la peticin
TDAUTORTY Spool: autorizacin para la peticin
TDARMOD Spool: modo de archivo
TDCOVER Spool: imprimir portada
TDCOVTTLE Spool: portada: ttulo
TDRECEVER Spool: portada: nombre del destinatario
TDDVSON Spool: portada: nombre de la divisin
TDSCHEDULE SAPcomm: tipo del tiempo de envo estimado
TDSENDDATE SAPcomm: fecha de envo solicitada
TDSENDTME SAPcomm: hora de envo solicitada
TDTELELAND SAPcomm: cdigo del pas destinatario
TDTELENUM SAPcomm: nmero de marcacin
E/emplo de 4ormulario
-ormulario
--------------------------------------------------------------------------------
Formulario ZPRUEBA
--------------------------------------------------------------------------------
Significado Formulario de prueba
Atributos std.
Pgina inicial PRCPAL
Prrafo defecto DF
Tabulaciones 1,00 CM
Formato pgina DNA4
Formato hoja Formato vertical
Lneas/pulg. 6,00
Carcter/pulg. 10,00
Pg. 266
Curso programacin ABAP IV Curso programacin ABAP IV
Atributos font
Familia fonts COURER
Altura font 12,0 Punto
Negrita no
Cursiva no
Subrayado no
--------------------------------------------------------------------------------
Carcteres Atributos
--------------------------------------------------------------------------------
DF Normal
Atributos std.
Marca no
Atributos font
Familia fonts HELVE
Altura font 10,0 Punto
NG Negrita
Atributos std.
Marca no
Atributos font
Familia fonts HELVE
Altura font 10,0 Punto
Negrita s
--------------------------------------------------------------------------------
Prrafos Atributos
--------------------------------------------------------------------------------
AD Direccin propia
Atributos std.
nterlineado 0.50 LN
Alineacin Alin.derecha
Atributos font
Familia fonts HELVE
Altura font 8,0 Punto
DF Prrafo por defecto
Atributos std.
nterlineado 1.00 LN
Alineacin alin.izq.
Atributos font
Familia fonts HELVE
Altura font 10,0 Punto
NG Negrita
Pg. 267
Curso programacin ABAP IV Curso programacin ABAP IV
Atributos std.
nterlineado 1.00 LN
Alineacin alin.izq.
Atributos font
Familia fonts HELVE
Altura font 10,0 Punto
Negrita s
--------------------------------------------------------------------------------
Ventanas Atributos
--------------------------------------------------------------------------------
ADDRESS Direccin
Tipo ventana VAR
Prr.p.defecto DF
CONTROL Ventana de control
Tipo ventana VAR
Prr.p.defecto DF
D_FSCAL Datos fiscales
Tipo ventana VAR
Prr.p.defecto DF
FACTURA Datos Factura
Tipo ventana VAR
Prr.p.defecto DF
LOGO Ventana de logo
Tipo ventana CONST
Prr.p.defecto DF
MAN Ventana princ.
Tipo ventana MAN
Prr.p.defecto DF
MARCO marco de la ventana main
Tipo ventana CONST
Prr.p.defecto DF
MY_ADD Direccin propia
Tipo ventana CONST
Prr.p.defecto AD
PAGO Forma de pago
Tipo ventana VAR
Prr.p.defecto DF
Pg. 268
Curso programacin ABAP IV Curso programacin ABAP IV
--------------------------------------------------------------------------------
Pginas Atributos
--------------------------------------------------------------------------------
PRCPAL Primera pgina
Atributos std.
Pg.subsiguiente SEGUNDA
Atributos impresin
Modo impresin S
Contad.pg.
Modo NC
Tipo numeracin cifras rabes
Ventana pgina
MAN Margen izqdo. 1.25 CM
Margen superior 8.89 CM
Ancho ventana 18.27 CM
Altura ventana 12.47 CM
ADDRESS Margen izqdo. 10.49 CM
Margen superior 3.95 CM
Ancho ventana 9.14 CM
Altura ventana 1.98 CM
CONTROL Margen izqdo. 16.50 CM
Margen superior 22.00 CM
Ancho ventana 3.25 CM
Altura ventana 3.00 CM
D_FSCAL Margen izqdo. 1.25 CM
Margen superior 3.95 CM
Ancho ventana 8.89 CM
Altura ventana 1.98 CM
FACTURA Margen izqdo. 1.25 CM
Margen superior 6.91 CM
Ancho ventana 18.40 CM
Altura ventana 1.48 CM
LOGO Margen izqdo. 1.25 CM
Margen superior 1.25 CM
Ancho ventana 1.25 CM
Altura ventana 1.25 CM
MARCO Margen izqdo. 1.20 CM
Margen superior 8.84 CM
Ancho ventana 18.27 CM
Altura ventana 12.47 CM
MY_ADD Margen izqdo. 10.50 CM
Margen superior 1.25 CM
Ancho ventana 9.25 CM
Altura ventana 2.75 CM
PAGO Margen izqdo. 1.25 CM
Margen superior 22.00 CM
Ancho ventana 14.70 CM
Pg. 269
Curso programacin ABAP IV Curso programacin ABAP IV
Altura ventana 3.00 CM
SEGUNDA Pgina segunda y siguientes
Atributos std.
Pg.subsiguiente SEGUNDA
Contad.pg.
Modo NC
Tipo numeracin cifras rabes
Ventana pgina
MAN Margen izqdo. 1.25 CM
Margen superior 11.50 CM
Ancho ventana 18.27 CM
Altura ventana 10.00 CM
--------------------------------------------------------------------------------
Elementos texto para ventanas:
--------------------------------------------------------------------------------
ADDRESS
* <ng>DRECCN POSTAL</>
/: ADDRESS
* &CALLE&
* &CUDAD&
* &PAS&
/: ENDADDRESS
*
CONTROL
* <ng>CONTROL</>
*
D_FSCAL
* <ng>DATOS FSCALES</>
* &C_NF&
* &N_RESERVA&
FACTURA
NG NFACTURA,,COD CLENTE,,NOMBRE,, ,, ,,FECHA PEDDO,,FECHA
FACTURA
DF &CABECERA-NUMERO_FACTURA&,,&CABECERA-
DCLENTE&,,&CABECERA-DESCRPCON&
,,&cabecera-fecha_pedido&,,&Cabecera-fecha_factura&
LOGO
*
/: BTMAP DES_LOGO OBJECT GRAPHCS D BMAP TYPE BMON DP 300
*
Pg. 270
Curso programacin ABAP IV Curso programacin ABAP IV
MAN
Elemento TEM_HEADER
NG POSCON,,CONCEPTO,, ,, ,, ,, ,, ,, ,, ,, CANTDAD,, ,,PRECO
Elemento DATOS
DF &i_posicion-posicion&,, ,,&i_posicion-concepto(50)&,,
&i_posicion-cantidad&,, ,, &_POSCON-PRECO(5)&
Elemento PUBLCDAD
/: PROTECT
NG ************************************************************************
NG &C_MENSAJE&
NG ************************************************************************
/: ENDPROTECT
Elemento TOTAL
DF
DF
DF ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, SUBTOTAL,, &SUBTOTAL&
DF ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, VA,, ,, ,, &VA&
NG ,, ,, ,, ,, ,, ,, ,, ,, ,, ,,TOTAL,, &TOTAL&
MARCO
/: BOX XPOS 0 CM WDTH '16.57' CM HEGHT '12.47' CM FRAME 10 TW.
MY_ADD
AD DES Holding AG
AD Neurottstrasse 16
AD Waldorf, 69190
AD Germany
PAGO
* FORMA DE PAGO
Programa de control
REPORT zform .
************************************************************************
* VARABLES
************************************************************************
DATA BEGN OF itcpo.
NCLUDE STRUCTURE itcpo. "SAPscript Salida interfase
DATA END OF itcpo.
DATA: c_nif(10) TYPE c VALUE '12345678-Z',
c_mensaje(74) TYPE c,
n_reserva(5) TYPE n VALUE '12345',
Pg. 271
Curso programacin ABAP IV Curso programacin ABAP IV
total(10),
subtotal(10),
iva(10).
c_mensaje =
'Nueva lnea de productos !'.
DATA: BEGN OF cabecera,
numero_factura(10) TYPE c VALUE '0025698094',
idcliente(10) TYPE c VALUE '5556981254',
descripcion(50) TYPE c VALUE 'Mario Lopez Alvarez',
fecha_pedido LKE sy-datum VALUE '20030210',
fecha_factura LKE sy-datum VALUE '20030214',
END OF cabecera.
DATA: BEGN OF i_posicion OCCURS 0,
posicion(3) TYPE c,
concepto(50) TYPE c,
cantidad TYPE i,
precio(5) TYPE c,
END OF i_posicion.
* Variables para comunicarnos con el formulario
DATA: calle(40),
ciudad(20),
pais(20).
* Configuracin de la impresora
PERFORM configurar_impresora.
* Abrimos el formulario
CALL FUNCTON 'OPEN_FORM'
EXPORTNG
form = 'ZPRUEBA'
* LANGUAGE = P_DOMA
options = itcpo
device = 'PRNTER'
* DALOG = 'X'
dialog = space " Sin dilogo
EXCEPTONS
OTHERS = 1.
F sy-subrc NE 0.
WRTE /'error al abrir formulario'.
STOP.
ENDF.
Pg. 272
Curso programacin ABAP IV Curso programacin ABAP IV
* Carga el contenido de las variables
PERFORM llenar_variables.
* Muestra el cuerpo del formulario
PERFORM mostrar_cuerpo_form.
CALL FUNCTON 'WRTE_FORM'
EXPORTNG
window = 'MARCO'
EXCEPTONS
OTHERS = 1.
* mprimimos la ventana direccin
calle = 'C/ Modesto Lafuente 23'.
ciudad = '28003, Madrid'.
pais = 'SPAN'.
CALL FUNCTON 'WRTE_FORM'
EXPORTNG
window = 'ADDRESS'
EXCEPTONS
OTHERS = 1.
F sy-subrc NE 0.
WRTE /'error al escribir en ventana DRECCON'.
STOP.
ENDF.
CALL FUNCTON 'CLOSE_FORM'.
*&---------------------------------------------------------------------*
*& Form CONFGURAR_MPRESORA
*&---------------------------------------------------------------------*
* Configura los atributos de la impresora
*----------------------------------------------------------------------*
* --> p1
* <-- p2
*----------------------------------------------------------------------*
FORM configurar_impresora.
itcpo-tdpageslct = space. "Todas las pginas
itcpo-tdnewid = 'X'. "Crea nuevo spool
itcpo-tdcopies = 1. "1 copia
itcpo-tddest = 'LP01'. "Nombre de la impresora
itcpo-tdpreview = 'X'. " Visualizacin previa
itcpo-tdcover = space. "No portada
itcpo-tdimmed = 'X'. "mprime inmediatamente
itcpo-tddelete = 'X'. "Borra despus de imprimir
Pg. 273
Curso programacin ABAP IV Curso programacin ABAP IV
itcpo-tdcovtitle = 'Ejemplo Formularios'.
itcpo-tdtitle = 'Ejemplo Formularios'.
ENDFORM. " CONFGURAR_MPRESORA
*&---------------------------------------------------------------------*
*& Form LLENAR_VARABLES
*&---------------------------------------------------------------------*
* Da valores a las variables que se mostrarn en el formulario
*----------------------------------------------------------------------*
* --> p1
* <-- p2
*----------------------------------------------------------------------*
FORM llenar_variables.
* Llena la tabla interna de posiciones
i_posicion-posicion = '1'.
i_posicion-concepto = 'Papel fotocopiadora (2500 hojas)'.
i_posicion-cantidad = 5.
i_posicion-precio = ' 8.50'.
APPEND i_posicion.
i_posicion-posicion = '2'.
i_posicion-concepto = 'Boligrafo tinta azul'.
i_posicion-cantidad = 100.
i_posicion-precio = '50.00'.
APPEND i_posicion.
i_posicion-posicion = '3'.
i_posicion-concepto = 'Portaminas 0.5'.
i_posicion-cantidad = 50.
i_posicion-precio = '99.35'.
APPEND i_posicion.
i_posicion-posicion = '4'.
i_posicion-concepto = 'Caja grapas (500)'.
i_posicion-cantidad = 25.
i_posicion-precio = '12.50'.
APPEND i_posicion.
i_posicion-posicion = '5'.
i_posicion-concepto = 'Hojas transparencias'.
i_posicion-cantidad = 15.
i_posicion-precio = '90.50'.
APPEND i_posicion.
* TOTALES
total = '302.59 Euros'.
Pg. 274
Curso programacin ABAP IV Curso programacin ABAP IV
iva = ' 41.74'.
subtotal = '250.85 Euros'.
ENDFORM. " LLENAR_POSCONES
*&---------------------------------------------------------------------*
*& Form mostrar_cuerpo_form
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM mostrar_cuerpo_form .
* mprimos la ventana principal
CALL FUNCTON 'WRTE_FORM'
EXPORTNG
window = 'MAN'
element = 'TEM_HEADER'
EXCEPTONS
OTHERS = 1.
* Muestra las posiciones
LOOP AT i_posicion.
CALL FUNCTON 'WRTE_FORM'
EXPORTNG
window = 'MAN'
element = 'DATOS'
EXCEPTONS
OTHERS = 1.
ENDLOOP.
* Muestra los totales
CALL FUNCTON 'WRTE_FORM'
EXPORTNG
window = 'MAN'
element = 'TOTAL'
EXCEPTONS
OTHERS = 1.
* mprime la zona de publicidad
CALL FUNCTON 'WRTE_FORM'
EXPORTNG
window = 'MAN'
element = 'PUBLCDAD'
EXCEPTONS
OTHERS = 1.
Pg. 275
Curso programacin ABAP IV Curso programacin ABAP IV
ENDFORM. " mostrar_cuerpo_form
E$6$ "mart4orms
Se trata de una herramienta utilizada para la impresin y envo de informes e
informacin tabulada y formateada a travs de fax o correo electrnico.
Para el tratamiento de los formularios creados con SMARTFORMS se utilizan dos
transacciones:
Una transaccin para definir el estilo del formulario llamada SMARTSTYLES en
la cual se definen los tipos de prrafos, tipos de caracteres, las fuentes que se
van a usar, el tamao que tendrn, las tabulaciones, ...
La pantalla que aparece al invocar a la transaccin SMARTSTYLES es la
siguiente:
A continuacin se muestra la pantalla de modificacin de un estilo elegido en la
transaccin SMARTSTYLES.
Pg. 276
Curso programacin ABAP IV Curso programacin ABAP IV
La transaccin para crear el formulario es la SMARTFORMS en la cual se
definen las ventanas y su contenido. El estilo utilizado por el formulario es el
creado con la transaccin SMARTSTYLES.
La pantalla que aparece al invocar a la transaccin se muestra a continuacin.
En ella se introduce el formulario que se desea editar, crear o visualizar.
Pg. 277
Curso programacin ABAP IV Curso programacin ABAP IV
A continuacin se muestra una pantalla con la visualizacin de un formulario
tomado como ejemplo:
Pg. 278
Curso programacin ABAP IV Curso programacin ABAP IV
#<$ Programacin orientada a o*/etos
#<$# Introduccin
La programacin orientada a objetos es un mtodo de desarrollo de software basado en
el comportamiento real de los objetos en el mundo real. Se pretende desarrollar
componentes de software que se comporten como los objetos reales a los que
representan.
La orientacin a objetos es una tcnica usada en muchos lenguajes de programacin
los cuale comparten una terminologa usada universalmente.
En esta seccin se realizar una primera visin de conjunto de estos trminos para en
secciones posteriores adentrarse en la implementacin de estos conceptos en el
lenguaje ABAP.
#<$& Clases y o*/etos
O*/eto
Un objeto es nicamente una porcin de cdigo fuente que contiene datos y
proporciona servicios. Los datos constituyen los atributos del objeto. Los servicios que
Pg. 279
Curso programacin ABAP IV Curso programacin ABAP IV
proporciona el objeto se conocen como mKtodos y se asemejan en su funcionamiento a
las funciones. Normalmente los mtodos operan con los
datos &ri(ados del objeto, esto es, con datos que son slo (isibles para los mtodos del
objeto. De esta manera, los atributos de un objeto no pueden ser cambiados
directamente por el usuario del objeto, slo pueden ser cambiados por los mtodos de
ese objeto. As se garantiza la consistencia interna del objeto.
Uno de sus principales objetivos es el suministar al desarrollador de software una forma
de trabajo en la cual poder examinar un problema real y poder proporcionar una
solucin individualizada al problema. En el entorno de los negocios podran ser objetos
las entidades liente, Factura, etcetera.
TCmo crear o*/etosU
Antes de crear un objeto de una clase es necesario declarar una variable referenciada
con la referencia a la clase. Una vez que se ha declarado la referencia <obj> a la clase
<class>, se puede crear el objeto usando la sentencia CREATE OBKECT Vcre4W. Esta
sentencia crea una instancia de la clase <class>, y la variable referenciada <cref>
contiene la referencia al objeto.
Acceder a los componentes de un o*/eto
Los programas slo pueden acceder a los componentes de las instancias usando las
referencias de las variables referenciadas. La sintaxis es la siguiente, siendo ref la
variable referenciada:
~ Para acceder al atributo attr: re4@Wattr$
~ Para llamar al mtodo meth: CA METJOD re4@WmetD$
Para los componentes estticos (independientes de instancia, slo dependientes de
clase) se puede usar tanto el nombre de la clase como la variable referenciada.
Tambin es posible acceder a los componentes estticos de una clase antes de que un
objeto de la clase haya sido creado. La sintaxis, siendo class la clase es la siguiente:
~ Para acceder al atributo esttico attr: class@Wattr$
~ Para llamar al mtodo esttico meth: CA METJOD class@WmetD$
Dentro de una clase se puede acceder tambin a los componentes individuales
mediante la referencia a s mismo ME:
~ Para acceder al atributo attr en la propia clase: me@Wattr$
~ Para llamar al mtodo meth en la propia clase:
CA METJOD me@WmetD$
Clases
Una clase es una entidad terica que describe el comportamiento de un objeto. Desde
un punto de vista meramente tcnico, un objeto es una instancia en tiempo de ejecucin
de una clase. En principio se pueden crear cualquier nmero de objetos basados en una
Pg. 280
Curso programacin ABAP IV Curso programacin ABAP IV
nica clase. Cada instancia de una clase (objeto) tiene su propia identidad y su propio
conjunto de valores para sus atributos. Dentro de un programa un objeto es identificado
por su referencia, la cual le proporciona un nombre que define inequivocamente al
objeto y permite acceder a sus mtodos y atributos.
Las clases son las plantillas de los objetos. A la inversa, podemos decir que el tipo de
un objeto es el mismo que el de su clase. Una clase es la descripcin abstracta de un
objeto. Tambin podemos decir que una clase es un conjunto de instrucciones que
tienen como objetivo construir un objeto. Los atributos de los objetos estn definidos por
los componentes de la clase (atributos, mtodos y eventos), que son los que describen
y controlan el comportamiento de los objetos.
#<$&$# Clases locales y glo*ales
Las clases en ABAP Objects se pueden declarar bien globalmente o bien localmente.
Las clases globales se definen en el generador de clases (transaccin SE24) en el
ABAP Workbench. Estas clases son almacenadas en class pools en la librera de clases
en el R/3 Repository. Todos los programas ABAP en un sistema R/3 pueden acceder a
las clases globales. Las clases locales se definen en un programa ABAP.
Las clases locales y sus interfaces slo pueden ser invocadas desde el programa en el
que se han definido.
Cuando se usa una clase en un programa ABAP el sistema busca primero una clase
local con el nombre especificado. Si no encuentra ninguna entonces busca una clase
global. A parte de la cuestin de la visibilidad, no hay ninguna diferencia entre usar una
clase global o una clase local.
Definicin de una clase local
Una definicin completa de una clase constar de una parte declarativa en la que se
definen los componentes, y si es necesario una parte de implementacin en la que se
implementan estos componentes.
La parte declarativa de una clase est comprendida entre las sentencias:
CA"" VclassW DE-I%ITIO%$
8
E%DCA""$
La parte declarativa contiene la declaracin de todos los componentes de la clase
(atributos, mtodos y eventos). Cuando se definen clases locales, la parte declarativa
pertenece a los datos globales del programa, por tanto se habr de situar al principio del
programa.
Si se declaran mtodos en la parte declarativa de una clase, se deber escribir tambin
su parte de implementacin. sta es la que va includa entre las siguientes sentencias:
CA"" VclassW IMPEME%TATIO%$
8
E%DCA""$
Pg. 281
Curso programacin ABAP IV Curso programacin ABAP IV
La parte de implementacin contiene la implementacin de todos los mtodos de la
clase. Esta parte acta como un bloque, esto quiere decir que cualquier seccin de
cdigo que no forme parte del bloque no ser accesible.
#<$3 M,todos y atri*utos
M,todos
Los mtodos son procedimientos internos de una clase que definen el comportamiento
de un objeto. Los mtodos pueden acceder a todos los atributos de una clase. Esto les
permite cambiar el contenido de los atributos de un objeto. Los mtodos poseen
tambin una interface con parmetros que les permite recibir valores cuando son
invocados y devolver valores despus de la llamada. Los atributos privados de una
clase slo pueden ser cambiados por mtodos de la misma clase.
La definicin y la interface de un mtodo son similares a las de los mdulos de
funciones. Un mtodo se define en la parte declarativa de la clase y se implementa en la
parte de implementacin usando las sentencias:
METJOD VmetDW$
8
E%DMETJOD$
Se pueden declarar tipos de datos locales y objetos en los mtodos de la misma
manera que en cualquier otro procedimiento ABAP (subrutinas y mdulos de funciones).
Los mtodos se pueden llamar mediante la sentencia CA METJOD.
~ Mtodos dependientes de instancia Estos mtodos se declaran usando la
sentencia METJOD".
Pueden acceder a todos los atributos de una clase, y pueden desencadenar todos los
eventos de una clase.
~ Mtodos estticos o independientes de instancia Estos mtodos se declaran
usando la sentencia CA""@METJOD". Slo pueden acceder a los atributos estticos
y desencadenar eventos estticos.
~ Mtodos especiales Adems de los mtodos normales que se pueden llamar
con la sentencia CA METJOD, hay dos mtodos especiales llamados
CO%"TR!CTOR y CA""HCO%"TR!CTOR que son automticamente llamados
cuando se crea un objeto (CONSTRUCTOR) o cuando se accede por primera vez a los
componentes de la clase (CLASS_CONSTRUCTOR).
Atri*utos
Los atributos son los campos de datos internos de una clase y pueden tener cualquier
tipo de datos ABAP.
El estado de un objeto viene determinado por el contenido de sus atributos. Un tipo de
atributos son las variables referenciadas. Estas variables permiten crear y acceder a los
Pg. 282
Curso programacin ABAP IV Curso programacin ABAP IV
objetos, de manera que si se definen en una clase permiten acceder a otros objetos
desde dentro de la clase.
~ Atributos dependientes de instancia. El contenido de estos atributos es
especfico de cada objeto. Se declaran usando la sentencia DATA.
~ Atributos estticos El contenido de los atributos estticos define el estado
de la clase y es vlido para todas las instancias la clase. Los atributos estticos existen
slo una vez para la clase. Se declaran usando la sentencia CA""@DATA. Son
accesibles desde todo el entorno de ejecucin de la clase. Todos los objetos de una
clase pueden acceder a sus atributos estticos. Si se cambia un atributo esttico en un
objeto, el cambio es visible en todos los dems objetos de la clase.
Ejemplo de declaracin e implementacin de una clase
CA"" CHCO%TADOR DE-I%ITIO%$
P!BIC "ECTIO%$
METJOD": -IKARHCO%TADOR IMPORTI%' VA!E)-IKARHVAOR+ TFPE I7
I%CREME%TARHCO%TADOR7
OBTE%ERHCO%TADOR EPPORTI%'
VA!E)OBTE%ERHVAOR+ TFPE I$
PRIVATE "ECTIO%$
DATA CO%T TFPE I$
E%DCA""$
CA"" CHCO%TADOR IMPEME%TATIO%$
METJOD -IKARHCO%TADOR$
CO%T X -IKARHVAOR$
E%DMETJOD$
METJOD I%CREME%TARHCO%TADOR$
ADD # TO CO%T$
E%DMETJOD$
METJOD OBTE%ERHCO%TADOR$
OBTE%ERHVAOR X CO%T$
E%DMETJOD$
E%DCA""$
#<$0 Jerencia
La herencia permite crear una nueva clase a partir de una nueva existente heredando la
nueva clase sus propiedades. Esto se realiza aadiendo la adicin I%JERITI%' -ROM
a la sentencia de definicin de la clase:
CA"" Vsu*classW DE-I%ITIO% I%JERITI%' -ROM VsuperclassW$
Pg. 283
Curso programacin ABAP IV Curso programacin ABAP IV
La nueva clase Vsu*classW hereda todos los componentes de la clase ya existente
VsuperclaseW.
La nueva clase se conoce como la subclase de la clase de la que procede. La clase
original se conoce como la superclase de la nueva clase. Si no se aade ninguna
declaracin a la subclase, esta contiene los mismos componentes que la superclase. De
cualquier manera, slo los componentes pblicos y privados de la superclase son
visibles en la subclase. Aunque los componentes privados de la superclase existen en la
subclase, no son visibles.
Se pueden declarar componentes privados en una subclase que tengan los mismos
nombres que componentes privados de la superclase. Cada clase trabaja con sus
propios componentes privados. Los mtodos que una subclase hereda de una
superclase usan los atributos privados de la superclase y no ningn componente
privado de la subclase con el mismo nombre.
El nodo raz de todos los rboles de herencia en ABAP Objects es la clase predefinida
vaca OBKECT. Esta es la ms general de todas las clases posibles ya que no contiene
ni atributos ni mtodos. Cuando se define una nueva clase no se tiene que especificar
explcitamente esta clase como superclase, esta relacin est definida implcitamente.
Rede4inicin de m,todos
Todas las subclases contienen los componentes de todas las clases existentes entre
ellas mismas y el nodo raiz del rbol de herencia. La visibilidad de un componente no
puede ser cambiada nunca. En cambio se puede usar la adicin REDE-I%ITIO% en la
sentencia METJOD" para redefinir un mtodo pblico o
protegido dependiente de instancia en una subclase y hacer que realice una funcin
ms especializada.
Cuando se redefine un mtodo no se puede cambiar su interface, el mtodo mantiene el
mismo nombre y la misma interface de parmetros, pero tiene una nueva
implementacin. La declaracin y la implementacin de un mtodo en una superclase
no se ven afectadas cuando se redefine un mtodo en una subclase. La implementacin
de la redefinicin en la subclase 'oculta' la implementacin original en la superclase.
Clases y m,todos a*stractos y 4inales
Las adiciones AB"TRACT y -I%A en las sentencias METJOD" y CA"" permiten
definir mtodos o clases abstractos y finales.
Un mtodo abstracto se define en una clase abstracta y no puede ser implementado en
esa clase, tiene que ser implementado en una subclase de la clase. Las clases
abstractas no pueden ser instanciadas.
Un mtodo final no puede ser redefinido en una subclase. Las clases finales no pueden
tener subclases, son las que finalizan el rbol de herencia.
Jerencia: Visin de con/unto
Pg. 284
Curso programacin ABAP IV Curso programacin ABAP IV
La subclase c2 deriva de la superclase c1. En lo ms alto del rbol de herencia est la
clase OBKECT.
Pg. 285
Curso programacin ABAP IV Curso programacin ABAP IV
La herencia simple consiste en que cada clase slo deriva directamente de una
superclase, pero puede tener varias subclases directas. La clase vaca OBJECT es el
nodo raz de cada rbol de herencia en ABAP Objects
Este grfico muestra cmo variables referenciadas con referencia a una superclase
pueden apuntar a objetos de sus subclases. Tenemos una instancia de la clase 3. Las
variables referenciadas a clases cref1, cref2 y cref3 tienen el tipo de las clases 1, 2 y 3
respectivamente. Las tres variables referenciadas pueden apuntar a la clase 3, pero la
variable cref1 slo puede acceder a los componentes pblicos de la clase 1, cref2
Pg. 286
Curso programacin ABAP IV Curso programacin ABAP IV
puede acceder a los componentes pblicos de las clases 1 y 2, y cref3 puede acceder a
los componentes pblicos de todas las clases.
#<$2 Polimor4ismo
El polimorfismo quiere decir que mtodos que se llaman exactamente igual pueden
comportarse de manera distinta en clases diferentes. La orientacin a objetos tiene
unas estructuras llamadas interfaces que permiten acceder a mtodos con el mismo
nombre en diferentes clases.
Dentro de cada clase particular se puede redifinir el mtodo obteniendo distintos
mtodos con el mismo nombre. Asi es que un mtodo no se define exactamente con su
nombre, si no con su nombre y el nombre de la clase a la que pertenece.
Si se redefine un mtodo dependiente de instancia en una o ms subclases, se puede
usar una nica variable referenciada para llamar a las diferentes implementaciones de
los mtodos, dependiendo de la posicin en el rbol de herencia del objeto
referenciado. Este concepto de que diferentes clases pueden tener la misma interface y
por lo tanto se puede acceder a ellas usando variables referenciadas con un nico tipo
se llama polimorfismo
#<$5 Ta*las internas de o*/etos
#<$6 E/emplos
Eje7)o9 Co crear 6 usar una c)ase&
En este ejemplo veremos cmo crear y usar una instancia de la clase c_counter
DATA cre4# TFPE RE- TO cHcontador$
Creamos una variable cre4# que es referenciada a la clase cHcontador. Esta variable
puede contener referencias a todas las instancias de la clase cHcontador. La clase
cHcontador debe ser conocida
para el programa en el momento en que la sentencia data tiene lugar. Por tanto la clase
cHcontador debe estar o bien declarada localmente antes de la sentencia data o bien
globalmente con el constructor de clases.
Despus de esta sentencia el contenido de cre4# es initial, o sea la referencia no
apunta a ninguna instancia.
DATA cre4# TFPE RE- TO cHcontador$
CREATE OBKECT cre4#$
La sentencia CREATE OBKECT crea un objeto (instancia) de la clase cHcontador. La
referencia en la variable referenciada cre4# apunta a este objeto.
La instancia de la clase cHcontador se llama cHcontadorV#W debido a que as es como
se visualizan los contenidos de la variable de objeto en el debugger despus de que la
sentencia CREATE OBKECT haya sido ejecutada. Este nombre es slo usado
internamente por el programa y no aparece
nunca en el propio programa ABAP.
Pg. 287
Curso programacin ABAP IV Curso programacin ABAP IV
DATA cre4# TFPE RE- TO cHcontador$
DATA numero TFPE i VA!E 2$
CREATE OBKECT cre4#$
CA METJOD cre4#@W4i/arHcontador
EPPORTI%' 4i/arH.alor X numero$
DO 3 TIME"$
CA METJOD cre4#@WincrementarHcontador$
E%DDO$
CA METJOD cre4#@Wo*tenerHcontador
IMPORTI%' o*tenerH.alor X numero$
El programa ABAP puede acceder a los componentes pblicos de los objetos usando la
variable referenciada cre4#, lo cual en este caso se corresponde a llamar a los mtodos
pblicos de la clase cHcontador. Despus que el programa haya sido ejecutado la
variable numero y el atributo privado del objeto cont tienen ambos el valor 8.
Podemos tambin manejar varias instancias de la misma clase.
DATA cre4# TFPE RE- TO cHcontador$
DATA cre4& TFPE RE- TO cHcontador$
DATA cre43 INE cre4#$
As creamos tres variables referenciadas a la clase cHcontador. Todas ellas contienen
el valor initial.
DATA cre4# TFPE RE- TO cHcontador$
DATA cre4& TFPE RE- TO cHcontador$
DATA cre43 INE cre4#$
CREATE OBKECT cre4#7 cre4&7 cre43$
El sistema crea tres objetos de la clase a partir de las tres variables referenciadas a la
clase. Las referencias en las tres variables apuntan a cada uno de los objetos.
nternamente las instancias se llaman cHcontador V#W, cHcontador V&W, y cHcontador
V3W. El nmero se asigna en el orden en que son creadas.
DATA cre4# TFPE RE- TO cHcontador$
DATA cre4& TFPE RE- TO cHcontador$
DATA cre43 INE cre4#$
DATA numero# TFPE i VA!E 2$
DATA numero& TFPE i VA!E <$
DATA numero3 TFPE i VA!E &$
CREATE OBKECT cre4#7 cre4&7 cre43$
CA METJOD: cre4#@W4i/arHcontador
EPPORTI%' 4i/arH.alor X numero#7
cre4&@W4i/arHcontador
EPPORTI%' 4i/arH.alor X numero&7
8
CA METJOD cre4&@WincrementarHcontador$
Pg. 288
Curso programacin ABAP IV Curso programacin ABAP IV
8
CA METJOD cre4#@WincrementarHcontador$
8
CA METJOD: cre4#@Wo*tenerHcontador
IMPORTI%' o*tenerH.alor X numero#7
cre4&@Wo*tenerHcontador
IMPORTI%' o*tenerH.alor X numero&7
8
El programa ABAP usa las variables referenciadas para acceder a los objetos, en este
caso a los mtodos publicos de la clase cHcontador.
Cada objeto tiene su propia identidad y su propio estado, ya que el atributo privado
dependiende de instancia cont tiene distintos valores en cada objeto. El programa
administra varios contadores.
DATA cre4# TFPE RE- TO cHcontador$
DATA cre4& TFPE RE- TO cHcontador$
DATA cre43 INE cre4#$
CREATE OBKECT cre4#7 cre4&$
Ahora declaramos tres variables referenciadas para la clase cHcontador y se crean dos
objetos para la clase. Las referencias en las variables referenciadas cre4# y cre4&
apuntan a cada uno de los objetos.
La referencia cre43 se mantiene initial.
DATA cre4# TFPE RE- TO cHcontador$
DATA cre4& TFPE RE- TO cHcontador$
DATA cre43 INE cre4#$
CREATE OBKECT cre4#7 cre4&$
MOVE cre4& TO cre43$
Despus de la sentencia MOVE, cre43 contiene la misma referencia que cre4& y ambas
referencias apuntan al objeto cHcontadorV&W. Un usuario puede usar cualquiera de
ellas para acceder al objeto.

DATA cre4# TFPE RE- TO cHcontador$
DATA cre4& TFPE RE- TO cHcontador$
DATA cre43 INE cre4#$
CREATE OBKECT cre4#7 cre4&$
MOVE cre4& TO cre43$
CEAR cre4&$
La sentencia CEAR reinicializa la referencia de cre4& al valor initial. En este momento
la variable referenciada cre4& contiene el mismo valor que inmediatamente despus de
su declaracin y ya no apunta a ningn objeto.
Pg. 289
Curso programacin ABAP IV Curso programacin ABAP IV
DATA cre4# TFPE RE- TO cHcontador$
DATA cre4& TFPE RE- TO cHcontador$
DATA cre43 INE cre4#$
CREATE OBKECT cre4#7 cre4&$
MOVE cre4& TO cre43$
CEAR cre4&$
cre43 X cre4#$
La referencia en cre43 ahora apunta al objeto cHcontadorV#W. Ya no hay referencias
apuntando al objeto cHcontadorV&W el cual es automticamente borrado, con lo cual el
nombre interno cHcontadorV&W est libre de nuevo.
##@ AMPIACIO%E" "AP
11.1 CMOD y SMOD
Utilizamos las transacciones CMOD y SMOD para para gestionar las user
exits. Antes de implemetar una exit es necesario crear un proyecto a travs
de la transaccin CMOD.
Si queremos por tanto crear una exit, vemos cmo creamos el proyecto en la
CMOD$ Lo veremos con capturas de pantallas.
Especificamos un nombre de proyecto, en este caso el CMOD
Pg. 290
Curso programacin ABAP IV Curso programacin ABAP IV
Damos al proyecto una descripcin y lo guardamos. Ahora necesitaremos
aadir nuestra ampliacin , para ello deberemos pulsar el botn "Asignacin
de ampliacin o "Enhacement assignments.
Aadimos la ampliacin "SZRS0003 y guardamos. Ahora presionamos el
botn "Componentes para ver las posibles modificaciones de esta
ampliacin.
De la lista de componentes mostrada abajo, podemos ver que contamos con
una nica user exit. Adems podemos apreciar que el el proyecto an no
est activado, esto nos lo indica el icono rojo, que cambiar a verde cuando
activemos el proyecto.
Para iplementar nuestra exit deberemos hacer doble clic sobre la exit. Esto
nos lleva a la transaccin de visualizacin funciones SE37, en la que
podemos ver que hay una nica lnea dentro de la funcin, es un incluye
Pg. 291
Curso programacin ABAP IV Curso programacin ABAP IV
Este incluye comienza con "Z (espacio reservado al usuario), lo que nos
permite mantener nuestro cdigo separado del de sap. Haemos doble click
sobre en incluye lo que nos lleva al editor de programas ABAP (SE38).
Una vez aqu ya podremos implementar nuestra ampliacin.
11.2 USER EXT
Lugares predeterminados en el cdigo estndar de SAP que permiten al
usuario introducir funcionalidades adicionales que SAP puede no proporciona en
dicho cdigo estndar. Esto perimte al programador adaptar SAP a los
requerimientos especficos de su proyecto, sin tener que modificar el cdigo de
los programas estndar.
11.3 BADS
Las BADIYs )Bussiness Ad@ins+ son unas herramienta de programacin ABAP
orientada a objetos que se utilizan en SAP para implementar validaciones y
ampliaciones en el cdigo standard de SAP en versiones a partir de la 4.6c
Es decir sirven para acomodar los requerimientos especficos de un cliente a las
transacciones estndar de sap.
El cdigo generado por SAP en sus transacciones estndar (para realizar un
pedido.) no se puede modificar (salvo para implementar un parche de SAP), ya
que se perdera el soporte que este ofrece a su producto. Pero supongamos que
cuando se termina de hacer un pedido de compra por medio de la transaccin
ME21N necesito guardar ciertos datos de este pedido en una tabla ZPEDDOS
que ha sido creada previamente.
Pues para esto estn las ampliaciones (BAD's, user exits, field exits) que al fin y
al cabo no son ms que fragmentos de cdigo que me permite SAP meter dentro
de su cdigo estndar para realizar ciertas operaciones a medida, en este caso
meter la informacin que necesito en una tabla cuando se crea el pedido en
concreto.
Pg. 292
Curso programacin ABAP IV Curso programacin ABAP IV
Bsicamente cumplen la misma funcin que las !"ER EPIT" y las -IED EPIT"
amen de algunas diferencias que se exponen a continuacin.
Di4erencia entre BADI y las !"ER EPIT"
BADI se puede utilizar todas las veces que quieras, donde las users exits
solo se pueden usar una sola vez. Ejemplo: Si se asigna una user-exit a un
proyecto usando la transaccin CMOD, entonces no se puede asignar a
ningn otro proyecto. Es decir varios programadores pueden implementar la
misma BAD independientemente.
Las BAD's son mucho ms moldeables a las necesidades del programador
en cuanto a que se pueden definir los puntos de salida, junto con la lgica de
programacin que necesitemos. Es decir posee todas las propiedades de una
programacin orientada a objetos
#&@ RE"TO DE I%"TR!CCIO%E" ABAP
C: \ Document s and
Set t ings\ rdemiguel\ My Document s\ Cursos Formacin ABAP\ NSTRUCC ONES ABAP.pdf
#3@ TABA" E"TA%DAR "AP
TABA" DE DATO"
A continuacin se detalla el nombre de las tablas SAP ms utilizadas, clasificadas por
mdulos
FI
AGKO 5!entas "/+ensadas
AVIK 5a8e"e%a de a$is
AVIP Ps. de a$is
AVIR .!8+si"i*n de a$is
AVIT 5a8e"e%a de a$is< te;t de li8%e de:ini"i*n 3aest%s
BKPF 5a8e"e%a de d"!/ent +a%a 5nta8il.
BSAD 5nt.< =ndi"e se". +a%a de!d%es 6+a%tidas "/+ensadas7
BSAK 5nt.< =ndi"e se". +a%a a"%eed%es 6+a%tidas "/+ensadas7
BSAS 5nt.< =ndi"e se"!nda%i +a%a "tas. /a>% 6+a%tidas "/+ensadas7
BNKA 3aest% de 8an"
BSBM 5a/+s de $al%a"i*n del d"!/ent
BSBW 5a/+s de $al%a"i*n del d"!/ent
BSEC .eg/. de d"!/ent +a%a dats 5P1
BSED .eg/. de d"!/ent ? "a/+s de e:e"ts
Pg. 293
Curso programacin ABAP IV Curso programacin ABAP IV
BSEG .eg/. de d"!/ent de 5nta8ilidad
BSES 1ats de "nt%l de d"!/ent
BSET 1ats de "nt%l de seg/ de d"!/ent
BSID 5nt.< =ndi"e se"!nda%i de de!d%es
BSIK 5nt.< =ndi"e se"!nda%i de a"%eed%es
BSIP @ndi"e +a%a $e%i:i"a"i*n de d"!/ents d8les de a"%eed%es
BSIS 5nt.< =ndi"e se"!nda%i "tas./a>%
BVOR '+e%a"ines "nta8les /!ltis"iedades
PAR Fi"0e% de /edi de +ag
PCEC 50e9!es +%en!/e%ads
PNBK #ti:i". P%e$ia n!e$s dats 8an"a%is de %egs.
REG!" 1ats de +ag del +%g%a/a de +ags
REG!P Psi". t%atadas del +%g%a/a de +ags
SD
TVDC Pla)s de ent%ega< 5lases
VBAG 1"!/ent $entas< Fe"0a +a%a %e+a%ts en +lanes de ent%ega
VBAK 1"!/ent de $entas< 1ats de "a8e"e%a
VBAP 1"!/ent de $entas< 1ats de +si"i*n
VBE" Aist%ial %e+a%ts ent%ega
VBEP 1"!/ent de $entas< 1ats de %e+a%t
VBKD 1"!/ent de $entas< 1ats "/e%"iales
VB#B 1". de $entas< 1ats %d.?ent%ega
VBSN Estads de /di:i"a"i*n +. +l.?ent%egas
VBSP 1"!/ent R( +si"i*n +a%a eBe"!ta% est%!"t!%a de a%t="!l
VBFA Fl!B de d"!/ents de $entas
VBPA 1"!/ent 5/e%"ial< Inte%l"!t%
VEDA 1ats "nt%a"t!ales
V#PKM Planes ent%ega +a%a /at.de "liente
#IKP 1"."/e%"ial< Ent%ega ? 1ats de "a8e"e%a
#IPS 1"."/e%"ial< Ent%ega ? 1ats de +si"i*n
VB!P 1"!/ent "/e%"ial< .tat!s de +si"i*n
VB!K 1"!/ent "/e%"ial< .tat!s "a8e"e%a > dats gesti*n
VBRK 1"."/e%"ial< Fa"t!%a< 1ats de "a8e"e%a
VBRP 1". 5/e%"ial< Fa"t!%a< 1ats de +si"i*n
VTTK 5a8. T%ans+%te
VTTP Psi"i*n de t%ans+%te
VTTS Eta+a de t%ans+%te
CO
COSP '8Bet 5'< Ttales de "stes "nta8ili)a"ines e;te%nas
COBK '8Bet 5'< 5a8e"e%a de d"!/ent
COEP '8Bet 5'< Pa%tida indi$id!al +% +e%=ds
CSKS 3aest% de "ent%s de "st
CSKB 5lases de 5sts
CK"S 5a8e"e%a "l"!l de "stes !nita%i 6"nt%l C s!/as7
CKIS Psi"ines del 55DE(is. 1etallada "stes del +%d!"t
COKP '8Bet 5'< 5a8e"e%a del d"!/ent
COE$ '8Bet 5'< +a%tida ind. +% aF
CSKA 5lases de "ste 6dats de+endientes del +lan "tas7
CSKB 5lases de "ste 6dats de+endientes de la s"iedad 5'7
CA
A!SP (al%es +%+. de las "a%a"te%=sti"as
CABS Res!ltad e$al!a"i*n estad. de ,D.P
K#A" 1ats "a8e"e%a "lase
K#AT 5lases< Te;ts e;+li"ati$s
KSM# 5a%a"te%=sti"as de "lases
Pg. 294
Curso programacin ABAP IV Curso programacin ABAP IV
KSSK Ta8la de asigna"i*n< '8Bet a "lase
CABN 5a%a"te%=sti"a
CAWN (al%es de "a%a"te%=sti"as
TC#A 5ateg%=as "lase
TC#AO (a%is 8Bets en !na "ateg%=a de "lase
TC#AT Te;ts "ateg%=as de "lase
TC#C .tat!s de "lasi:i"a"i*n
TC#D 1ats "a%a"te%=st. de n%/a
TC#G G%!+s de "lases
TC#O 5a/+s "la$e de 8Bets
CD"DR 5a8e"e%a en el d"!/ent de /di:i"a"i*n
CDPOS Psi"ines en el d"!/ent de /di:i"a"i*n
KONV 5ndi"ines 61ats +e%a"i*n7 ?? 6P%e"is de las :a"t!%as7
ST%" .,Ps"%i+t 5a8e"e%a :i"0e% te;t
ST%# .,Ps"%i+t H=neas del :i"0e% de te;t
MM
EKKO 5a8e"e%a de d"!/ent de "/+%as
EKPO Psi"ines de d"!/ent de "/+%as
EBNA .li"it!d de +edid
MKPF 5a8e"e%a de d"!/ents de /ate%iales
MSEG Psi"ines de d"!/ent de /ate%iales
MARA 3aest% /ate%iales gene%al
MARC 3ate%iales +% "ent%
MARD ,l/a"In +% "ent%
ABEW (al%a"ines de ls /ate%iales
EKKN I/+!ta"i*n en d"!/ents de "/+%a
MARM Dnidad de /edida
EINA Regist% in: de "/+%as< 1ats gene%ales
RBKP 5a8e"e%a d"!/ent :a"t!%a %e"i8ida
PP
AFF# .e"!en"ia %den de t%a8aB
AFKO 1ats "a8e"e%a %den +a%a *%denes P5P
AFPO Psi"i*n de %den
AFVC '+e%a"i*n de %den
FAPW @ndi"e de "ent% de +%d!""i*n E s!/inist% +a%a %den :a8%i"a"i*n
CRCA ,signa"i*n de "a+a"idad al +!est de t%a8aB
CRCO ,signa"i*n de +!est de t%a8aB a "ent% de "ste
CR"D 5a8e"e%a del +!est de t%a8aB
CR"" 1ats "a8e"e%a Be%a%9!=a
CR"S Je%a%9!=a Est%!"t!%a
CRID Re"!%ss de +%d!""i*n Entidades
CRT% P!est de t%a8aB E 1en/ina"i*n 8%e$e del /edi a!;ilia% :a8%i".
KAKT 1en/ina"i*n de la "a+a"idad
KAKO 5a+a"idad seg/ent de "a8e"e%a
MAP# ,signa"i*n de 0Bas de %!ta +a%a /ate%iales
P#AS ABa de %!ta ? .ele""i*n de +si"ines
P#F" ABa de %!ta ? 3edis a!;ilia%es de :a8%i"a"i*n
P#F# .e"!en"ias 0Ba de %!ta
P#KO ABa de %!ta 5a8e"e%a
P#K& AR!ta< "a8."ent%al
P#M& ,signa"i*n de +si"ines de lista /ate%iales a +e%a"ines
P#PO ABa de %!ta +e%a"i*n
KAPA 5a+a"idad ? (al%es del t!%n
KAPE 5a+a"idad asigna"i*n !nidad de 8ase
KA& 5a+a"idad ? Inte%$al de :e%ta
PS
Pg. 295
Curso programacin ABAP IV Curso programacin ABAP IV
AFAB G%a: ? %ela"ines de %dena"i*n
AFRV Pl de nti:i"a"ines
NPT% Te;ts P. 6g%a:7
P#AB Plan ? %ela"ines de asigna"i*n
P#T% Te;ts P3. 6g%a: estnda%7
PR"I Plan de est%.de +%>e"ts2 a%"s 6indi"ad% de Be%a%9!=as7
PR"IS PEP estnda%2 a%"s 6+!nte% Be%a%9!=a7
PRO$ 1e:ini"i*n del +%>e"t
PRO$S 1e:ini"i*n de +%>e"t estnda%
PRPS Ele/ent PEP 6ele/.de +lan est%!"t.+%>e"t7 dats /aest%s
PRPSS Ele/ent PEP estnda% 6Ele/ent PEP7 1ats /aest%s
PRTE Fe"0as de +%g%a/a"i*n +si"i*n de +%>e"t
PRTP .!8+%>e"ts
PRT% Te;ts P3. 6PEP7
PRT%S Te;ts P. 6PEP estnda%7
PSERB 1ats de 0e%en"ia< siste/a de +%>e"ts
#FINF In:%/a"ines ent%ega siste/a de +%>e"ts
#FINF% ,sign.in:%/a"ines ent%ega +a%a 8Bets siste/a +%>e"ts
M#ST Ait
M#T% 1en/ina"i*n de eta+a
MSET .et eta+as estnda%
N"PRO$ Aist%ial de nK/e%s ? 1e:ini"i*n de +%>e"t
N"PRPS Re%g. 0ist%ial de nK/e%s ? Ele/ents PEP
NPT% Te;ts P. 6g%a:7
('@ TR"NS"CCIONES EST"ND"R S"P
#0$# O*tencin de la ayuda t,cnica )-#+
En este apartado explicaremos la manera de obtener los datos tcnicos de cualquier
campo que apareczca en una pantalla de SAP deteminada.
Por ejemplo, entramos en la transaccin XK01, utilizada para la creacin de
proveedores.
Pg. 296
Curso programacin ABAP IV Curso programacin ABAP IV
maginemos que queremos conocer los datos tcnicos del campo Acreedor. Nos
posicionaramos con el ratn en el campo y pulsaramos la tecla de funcin -#$
La siguiente pantalla que aparece es el Performace Assistant. Ah podemos encontrar,
entre otra informacin, los datos tcnicos del campo, pulsando el botn que aparece
sealado en la captura de pantalla que mostramos a continuacin (nformacin tcnica).
gualmente, aparecer una breve descripcin del campo que estamos explorando.
Pg. 297
Curso programacin ABAP IV Curso programacin ABAP IV
Al pulsar sobre este botn, la pantalla que se nos presenta es la siguiente:
Pg. 298
Curso programacin ABAP IV Curso programacin ABAP IV
Aqu encontramos datos tcnicos referentes al campo y a la pantalla en la que est
incluido, los analizamos:
Datos dynpro
Datos referentes a la pantalla.
- Programa: El nombre del programa estndar que invoca a la pantalla
- N imagen: El nmero de pantalla.
Datos GU
Datos referentes a la interfaz grfica
- Programa: El nombre del programa estndar que invoca a la pantalla
- Status: Estado.
Datos Campo
Datos referentes al campo que hemos seleccionado
- Estruct: La estructura que contiene el campo. Existen casos en los que aparece
directamente la tabla a la que pertenece, en lugar de la estructura.
- Nombre del campo: Nombre tcnico del campo
- Elemento de datos: Tipo de elemento de datos del campo en cuestin
- D parmetro: D al que est vinculado ese campo.
Denominacin campo para batch input
El nombre del campo en cuestin en la tabla BDC-data generada tras hacer un
batch input.
#0$& Trace del "istema )"T<2+
La transaccin ST05 nos permite generar una traza del sistema. Es decir, visualiza
todas las acciones que se dan lugar en el sistema, desde un momento determinado
(cuando activamos la traza) hasta otro (cuando la desactivamos).
La captura de pantalla nos muestra la pantalla que se presenta cuando entramos a la
transaccin ST05. A esta transaccin podremos acceder de dos maneras distintas:
Directamente ST05
Por men: Sistema Utilidades Traza de rendimiento
De las dos maneras el resultado es el mismo:
Pg. 299
Curso programacin ABAP IV Curso programacin ABAP IV
Pulsaremos el botn "ACTVATE TRACE, para activar la traza.
A continuacin llevaremos a cabo la accin que queremos analizar mediante la traza.
Entrar a una transaccin, realizar una grabacin..
Una vez realizadas las acciones que queremos analizar, pulsaremos el botn
"DEACTVATE TRACE.
Para visualizar la traza, deberemos pulsar el botn "DSPLAY TRACE, y aparecer una
pantalla como la que se muestra a continuacin:
Pg. 300
Curso programacin ABAP IV Curso programacin ABAP IV
En ella podemos ver todos los accesos que se han llevado a cabo en el sistema
mientras hemos creado a un proveedor, a travs de la transaccin XK01.
#0$3 Transporte )se#< y "TM"+
Las transacciones SE10 y STMS se utilizan por ejemplo, cuando se quiere ejecutar el
programa que hayamos creado en un mandante distinto al mandante en el que lo
estamos desarrollando.
La transaccin SE10 permite liberar las rdenes de transporte en la que se encuentre
el programa que vamos a probar. No se podr transportar ninguna orden que no haya
sido liberada anteriormente.
La transaccin STMS es la que se encarga del transporte de las rdenes desde el
mandante fuente al mandante destino.
Las capturas de pantalla siguientes nos muetran su funcionamiento:
Pg. 301
Curso programacin ABAP IV Curso programacin ABAP IV
A la hora de liberar las rdenes es importante que seleccionemos el tipo de orden que
vamos a liberar, si es de workbench o de customzing, y si est o no liberada. Es decir, si
vamos a liberarla, debemos seleccionar la opcin "Modificable y deseleccionar la
opcin "Liberadas, y aparecern todas las rdenes que no estn liberadas. A
continuacin pulsamos el botn "Visual.
Pg. 302
Curso programacin ABAP IV Curso programacin ABAP IV
Se selecciona la orden que se quiere liberar y se pulsa el botn "Liberar directamente.
Tambin se puede utilizar la tecla de funcin -E.
La transaccin STMS se utiliza para tranportar las rdenes de un mandante a otro. A
continuacin vemos su funcionamiento con las capturas de pantalla.
sta es la pantalla que se nos presenta al entrar en la transaccin "TM"$ Pulsaremos
sobre el botn para al listado de los sistemas desde y a los que podemos tranportar
la orden.
Pg. 303
Curso programacin ABAP IV Curso programacin ABAP IV
Listado de sistemas:
Seleccionamos el sistema al que queramos tranportar nuestra orden, la que acabamos
de liberar. En nuestro caso seleccionaremos GE, visualizndose lo siguiente:
Pg. 304
Curso programacin ABAP IV Curso programacin ABAP IV
La orden que seleccionemos deber estr pendiente de transportar, es decir con el
smbolo . La seleccionamos y pulsamos el botn que es el que transporta la
orden al mandante destino que le indiquemos.
#0$0 AnClisis de errores )"T&&+
La transaccin ST22 permite visualizar los errores en tiempo de ejecucin que se hayan
producido desde un momento determinado a otro.
A continuacin vemos el fucionamiento a travs de las capturas de pantalla.
Al entrar en la transaccin ST22 visualizaremos lo siguiente:
Pg. 305
Curso programacin ABAP IV Curso programacin ABAP IV
Se presentan dos opciones:
Los errores de ejecucin que se han producido hoy o ayer. Si pulsamos sobre
cualquiera de los dos botones obtenemos un listado con los errores en tiempo de
ejecucin de hoy y ayer respectivamente. A la derecha de los botones se
muestra un nmero que representa el nmero de errores.
Otra opcin es la de inspeccionar los errores que se han producido en un da
determinado, a una hora especfica, por un usuario concreto, etc. Para ello
completaremos los campos del cuadro Seleccin propia, y pulsaremos el botn
"niciar propia seleccin para visualizar los errores.
Ejemplo de listado de errores:
Pg. 306
Curso programacin ABAP IV Curso programacin ABAP IV
#0$2 "pool )"P<#+
La transaccin SP01 nos permite hacer una seleccin de las rdes de SPOOL. Para
verlo, seleccionaremos la orden que queremos visualizar y pulsaremos el botn
Pg. 307
Curso programacin ABAP IV Curso programacin ABAP IV
#0$5 Programacin de /o*s
Tras haber definido un job utilizando la transaccin SM36, podemos ejecutarlo
medianate la transaccin SM37. Esta transaccin nos permite programar un job para su
ejecucin. La seleccin del job puede ser simple o ampliada.
Lo vemos a continuacin en las capturas de pantalla.
Pg. 308
Curso programacin ABAP IV Curso programacin ABAP IV
En el campo que est etiquetado con "Job, deberemos especificar el job que vamos a
ejecutar, es decir, el que vamos a programar.
En el cuadro "Condicin de inicio del job, informamos del momento en el que queremos
que se ejecute nuestro job. Podemos proporcinar un rango de fechas y de horas. Si
queremos que el job se ejecute slo tras la ejecucin de un evento, entonces
deberemos seleccionar el evento en la opcin "O tras evento.
Podemos hacer una programacin del job ms ampliada. Para ello deberemos pulsar el
botn "Seleccin de job ampliada, con lo que se mostrar la siguiente pantalla.
Pg. 309
Curso programacin ABAP IV Curso programacin ABAP IV
Aqu aparecen ms opciones para definir la programacin del job. No slo podremos
seleccionar si el job se quiere ejecutar tras un evento determinado, sino que tambin se
presenta la opcin de ejecutarlo tras la ejecuin de otro job o en forma de opracin.
Tambin se puede determinar si se quiere que el job se ejecute peridicamente. Para
ello pulsaremos sobre la pestaa "Perodo. En ella encontraremos las siguientes
opciones:
Pg. 310
Curso programacin ABAP IV Curso programacin ABAP IV
De esta manera podemos determinar el perodo con el que queremos que se ejecute
nuestro job.
#0$6 "PDA
#0$1 Editor split "creen )"E3E+
El editor Split Screen (SE39), nos permite comparar programas. Es especialmente
interesante cuando se emplea para comparar sistemas remotos, y poder determinar que
los cdigos fuente sean correctos.
Se presentan dos opciones:
Comparacin de programas dentro del mismo sistema:
Pg. 311
Curso programacin ABAP IV Curso programacin ABAP IV
Se deben especificar los programas que deben compararse, y no aparece opcin para
indicar el sistema.
Comparacin de programas que estn en sistemas remotos (en integracin y en
desarrollo, por ejemplo). Para ello deberemos pulsar el botn "Comparacin de
sistemas, mostrndosenos la siguiente pantalla:
Pg. 312
Curso programacin ABAP IV Curso programacin ABAP IV
Compararemos el programa que se encuentra en el sistema en el que estamos en ese
momento, con el que especifiquemos en el campo Destino RFC.
Al pulsar el botn visualizar obtendremos lo siguiente:
Pg. 313
Curso programacin ABAP IV Curso programacin ABAP IV
#0$E O*/ect %a.igator )"E1<+
La transaccin SE80 nos lleva a object navigator, que constituye un navegador de SAP.
Nos permite ver y editar los objetos de SAP, packages, tablas, rdenes de transporte,
programas, etc.
Pg. 314
Curso programacin ABAP IV Curso programacin ABAP IV
#0$#< Men>s de Cm*ito )"E03%+
La transaccin SE43N, nos permite crear editar y visualizar un men de mbito. A
continuacin vamos a visualizar un men de mbito que ya ha sido creado:
El men de mbito QREE"TR!CT!RACIO%H"OCIETARIA$
Pg. 315
Curso programacin ABAP IV Curso programacin ABAP IV
Este men crea un enlace a cada uno de los programas que han de ejecutarse para
realizar las cargas y descargas que se llevan a cabo en una reestructuracin societaria
Para aadir un nodo a la misma altura del nodo raz deberemos pulsar el botn ,
como se muestra a continuacin:
Pg. 316
Curso programacin ABAP IV Curso programacin ABAP IV
Y obtendremos lo siguiente:
Si queremos crear un subnodo deberemos pulsar el botn , obteniendo lo que a
continuacin nos presenta la captura de pantalla:
Al pulsar cualquiera de lo dos botones se nos mostrar una ventana en la que
deberemos especificar el nombre que queremos que tenga el nodo o subnodo nuevo
que queremos agregar al men de mbito.
#0$## Lueries )s?<#7 s?<&7 s?<3+
La transaccin SQ01 nos sirve para definir las queries. A una query siempre se le
asigna un grupo de usuarios que la va a utilizar, y un info set, en el que se determinan
las tablas y la seleccin de campos de la query.
La transaccin para definir una query es "L<#, y se muestra a continuacin:
Pg. 317
Curso programacin ABAP IV Curso programacin ABAP IV
La transaccin "L<& permite definir el in4o set7 la conexin de tablas y la seleccin de
campos.
Podemos especificar un info set para modificarlo, visualizarlo o bien crearlo.
La transaccin "L<3 permite crear los grupos de usuarios que van a tener acceso a esa
query.
Pg. 318
Curso programacin ABAP IV Curso programacin ABAP IV
#0$#& IorR4loM
Se trata de una herramienta que se utiliza para facilitar, automatizar y encadenar las
tareas preestablecidas en los procedimientos de trabajo de cada usuario, es decir,
automatiza los procesos de negocio de una empresa.
En concreto gua en la realizacin de una serie de tareas mediante mensajes en su
nbox a los usuarios autorizados para realizarlas.
La transaccin para editar WORKFLOWS es "IDD. La pantalla para crear
WORKFLOWS y por tanto reflejar el flujo de actividades es la siguiente:
Pg. 319
Curso programacin ABAP IV Curso programacin ABAP IV
#0$#3 Veri4icacin ampliada
La transaccin es "I%. Esta transaccin nos permite verificar el programa de manera
ms exhaustiva. En este caso la verificacin no se limita exclusivamente a los errores
sintcticos, sino que adems realiza las verificaciones que podemos ver detalladas en la
siguiente captura de pantalla.
Pg. 320
Curso programacin ABAP IV Curso programacin ABAP IV
Al pulsar el botn "Estndar vemos un listado de los errores que el sistema ha
encintrado. Muestra el nmero de errores que existen en el cdigo para cada punto.
Estos errores no son detectables cuando se verifica el cdigo normalmente, es decir
pulsando el botn (verificacin de cdigo).
Pg. 321
Curso programacin ABAP IV Curso programacin ABAP IV
Pg. 322

Vous aimerez peut-être aussi