Escolar Documentos
Profissional Documentos
Cultura Documentos
PROGRAMACIN
ABAP4
- VERSIN 1.0 2014
-2-
Fecha de Preparacin:
Fecha de Aprobacin:
Fecha de Aprobacin:
Fecha Efectiva:
20.10.2014
25.11.2014
25.11.2014
01.12.2014
OBJETIVO
04
ALCANCE
04
1. Nomenclatura de OTs
05
06
3. Objeto de Autorizacin
08
4. Grupo de Autorizacin
08
08
6. Objeto de Prueba
09
10
10
11
12
13
14
15
15
16
17
20
20
21
21
21
21
22
22
23
24
29
32
34
35
36
ANEXOS
48
49
TABLA DE PARMETROS
GUIAS
G1. Acumular OTs
G2. Uso de SU24: Cmo asociar Tx con Objeto de autorizacin
IMAGENES
-3-
53
ALCANCE
Este estndar de desarrollo abarca a todos los Consultores ABAP de Grupo Romero y a los proveedores de
desarrollo de aplicaciones ABAP.
-4-
:
:
:
:
:
:
:
Nota:
- Si a la OT creada se le acumula una OT predecesora, se coloca como notacin un (*) antes del nmero de
versin que le corresponde.
- Si la OT predecesora fue pasada a PRD, y se continan con ajustes al mismo requerimiento, se sube el
nivel de la OT y se vuelve a empezar de 00 (Ejemplo: 1 00, 2 00, 3 00, etc).
- Para ver cmo acumular OTs, revisar seccin ANEXOS -> GUIAS -> G1.
Ejm:
Md Cod. Actividad
MM
SOP_000019
Actividad
SOPORTE VARIAS
Cod.Tarea
ID OD
TEP-000002
PYH_000049
Actividad
Proyecto Impulso UNI
Cod.Tarea
ID OD
TEP-000001
Actividad
WMS Ampliacin de
la capacidad de
almacenamiento
Descripcin (Tarea)
Ajuste Reporte Pedido de Compras
00 EIZARRA
01 EIZARRA
E.Izarra
-> OT inicial
-> No acumul OT anterior
Descripcin (Tarea)
Reporte de Clientes
Funcional
M.Villanueva
00 MV -> OT inicial
* 01 MV -> Acumul la OT anterior
Cod.Tarea
ID OD
TEP-000001
Descripcin (Tarea)
Ubicacin para traslados
-5-
Funcional
Funcional
I.Delgado
-> OT inicial
-> Acumul la OT anterior
-> Acumul la OT anterior
-> OT anterior se pas a PRD
-> Acumul la OT anterior
-> OT anterior se pas a PRD
NNN
- INSERT
:
Insertar
- REPLACE
:
Modificar
- DELETE
:
Comentar
Nmero correlativo de 3 dgitos
Modelo ejemplo:
CASO1: Agregar varias lneas de cdigo
*{ INSERT @001
*----------------------------------------------------------------------*
*
Form TEXTO_EXP
*----------------------------------------------------------------------*
FORM TEXTO_EXP USING PI_ASNUM.
DATA: LS_ASNUM TYPE ASMD-ASNUM,
LS_TDNAME TYPE THEAD-TDNAME.
REFRESH GDT_LINES.
CLEAR GDT_LINES.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = PI_ASNUM
IMPORTING
OUTPUT = LS_ASNUM.
LS_TDNAME = LS_ASNUM.
CALL FUNCTION 'READ_TEXT'
EXPORTING
ID
= GC_ID
LANGUAGE = SY-LANGU
NAME
= LS_TDNAME
OBJECT
= GC_OBJECT
TABLES
LINES
= GDT_LINES
EXCEPTIONS
NOT_FOUND = 4.
IF SY-SUBRC <> 0.
MESSAGE S006 WITH TEXT-003 PI_ASNUM TEXT-004.
ENDIF.
ENDFORM.
*} INSERT @001
"TEXTO_EXP
-6-
TYPE ICON-ID.
"INSERT @001
-7-
4. Grupo de Autorizacin
Toda tabla Z creada debe ser asociada a un grupo de autorizacin, segn lo solicitado en el requerimiento
respectivo. Esto con el objetivo de restringir el acceso a la data de dicha tabla. Adicionalmente toda tx de
mantenimiento creada para una tabla Z debe validar un objeto de autorizacin. Existir para ello un
programa nico por mdulo para la validacin de objeto de autorizacin a tablas Z.
Descripcin
Uso genrico
Business Warehouse
Controlling
Servicio al Cliente
Finanzas
Recursos Humanos
Materiales
Mantenimiento
Produccin
Gestin de Proyectos
Calidad
Ventas y Distribucin
Gestin de Almacenes
-8-
-9-
- 10 -
T001-BUKRS,
C LENGTH 3,
N,
BKPF-BUDAT.
"Adicionar
"Adicionar
"Adicionar
"Adicionar
comentario
comentario
comentario
comentario
* Tipos
TYPES: GTY_MARC TYPE MARC.
TYPES: BEGIN OF GTY_MAKT,
MATNR TYPE MAKT-MATNR,
MAKTX TYPE MAKT-MAKTX,
END OF GTY_MAKT.
*Tipo tabla
TYPES: GTYT_MARC
"Standard
GTYD_MARC
"Hashed
GTYH_MARC
"Sorted
GTYS_MARC
*Tablas internas
DATA: GT_MARC
"Standard
- 11 -
TYPE GTYD_MARC,
GHT_MARC
TYPE GTYH_MARC,
GST_MARC
TYPE GTYS_MARC.
"Hashed
"Sorted
* Estructuras
DATA: BEGIN OF GWA_XXXX,
BUKRS TYPE BKPF-BUKRS, "Sociedad
BELNR TYPE BSEG-BELNR, "Fecha de contabilizacin
END OF GWA_XXXX.
DATA: GWA_MARC
LIKE LINE OF GT_MARC. "Agregar comentario
* Rangos
DATA: GR_BUKRS
GWA_BUKRS
* Field symbols
FIELD-SYMBOLS: <GWA_MARC> LIKE LINE OF GDT_MARC,
<GS_MATNR> TYPE MARA-MATNR.
* Fields groups
FIELD-GROUPS: FG_HEADER, "Agregar comentario
FG_DETALLE. "Agregar comentario
Donde:
Las primeras lneas de este bloque deben utilizarse para la declaracin de las tablas y estructura de datos
utilizada por el programa. Cada tabla declarada debe tener a su derecha el comentario sobre la descripcin
breve de la misma.
La segunda seccin del bloque se utilizar para la declaracin de constantes.
La tercera seccin del bloque se utilizar para la declaracin de variables globales. Esto incluye campos,
tablas internas, estructuras, etc. en la forma y orden en que se muestra en el ejemplo de arriba.
Cada objeto adicionado debe comentarse.
Nota:
Debe tratarse en lo posible, definir las variables haciendo referencia a campos definidos en el diccionario de
datos, mediante la utilizacin de TYPE.
La sentencia OCCURS todava se permite por razones de compatibilidad con versiones ms antiguas. Sin
embargo, se recomienda que solamente se utilice las nuevas versiones de las definiciones de tablas. Esto
facilita reutilizar el cdigo en un contexto de Objetos ABAP.
Se recomienda (en la medida de lo posible) el uso de FIELD-SYMBOLS para modificar una tabla interna, en
vez de usar lneas de cabeceras (_WA_XXXX), por motivos de performance.
- 12 -
P_ALV
P_REL
P_ALM_R
P_STCK
Donde:
Deben posicionarse los distintos PARAMETERS y SELECT-OPTIONS, de acuerdo a la posicin en la que
se desea aparezcan en la pantalla.
Debe comentarse cada parmetro declarado.
Este tipo de variables deben ser utilizadas como alternativa para evitar los HARD_CODES
- 13 -
Donde:
Toda validacin que se realice sobre los parmetros de entrada debe efectuarse utilizando estos eventos.
De esta manera, se enviarn los mensajes de error o informacin sobre la pantalla de seleccin,
posibilitando de esa manera que el usuario corrija el error segn corresponda.
Pueden crearse subrutinas del tipo PERFORM para agrupar las validaciones correspondientes a un evento
de este tipo y de esa manera mejorar la modularizacin del programa, facilitando los probables cambios
posteriores.
El evento INITIALIZATION debe utilizarse para cargar previamente a su utilizacin las variables deseadas.
Podr crearse una subrutina para agrupar todas las inicializaciones y modular el programa.
La rutina principal del programa siempre debe comenzar con el evento START-OF-SELECTION.
Comentar el bloque principal del programa, indicando en el caso de utilizar una BDL, cul es la pantalla de
seleccin que utiliza, as como tambin incluir todo comentario de inters sobre la funcionalidad de la rutina.
Los datos ledos deben almacenarse en una tabla interna para despus de realizada la seleccin controlar
que se haya efectuado con xito.
Pueden crearse subrutinas del tipo PERFORM para agrupar el cdigo y de esa manera mejorar la
modularizacin del programa, facilitando la lectura y los probables cambios posteriores.
- 14 -
Una vez verificado que el programa tiene datos para trabajar, debe codificarse en una subrutina todo lo que
haga falta para complementar los datos seleccionados, ordenarlos, etc.
Por ultimo, se crear una subrutina adicional donde se codificarn las sentencias necesarias para emitir el
reporte. (WRITE, ALV, etc.)
Donde:
No es necesaria la codificacin de la totalidad de los eventos sino solamente los estrictamente necesarios.
No tienen un orden establecido.
- 15 -
"INICIALIZACION
*----------------------------------------------------------------------*
* Form SUBRUTINA
*----------------------------------------------------------------------*
* Documentar aqu la funcionalidad de la subrutina
*
*----------------------------------------------------------------------*
* --> p1 documentar parmetros de entrada
* <-- p2 documentar parmetros de salida
*----------------------------------------------------------------------*
FORM SUBRUTINA USING PI_PAR1 PI_PAR2.
DATA: LD_CAMPO1 TYPE D. "Adicionar comentario
.
.
.
ENDFORM. " SUBRUTINA
Donde:
Debe respetarse el formato mostrado en el ejemplo de arriba. Este formato se obtiene automticamente en
el momento de creacin del PERFORM, haciendo doble clic sobre el nombre de la sub-rutina.
En el encabezado de la sub-rutina debe comentarse la funcionalidad principal de la misma, as como
tambin cada uno de los parmetros pasados, comentando su contenido.
- 16 -
TABLA INTERNA
ESTRUCTURA
mbito
PARMETRO DE
ENTRADA
SELECT-OPTIONS
BLOCKS
SELECTION
SCREEN
Ejemplo
gt_<nombre tabla>
gdt_<nombre tabla>
gst_<nombre tabla>
ght_<nombre tabla>
lt_<nombre tabla>
ldt_<nombre tabla>
lst_<nombre tabla>
lht_<nombre tabla>
st_<nombre tabla>
sdt_<nombre tabla>
sst_<nombre tabla>
sht_<nombre tabla>
gwa_<nombre estructura >
lwa_<nombre estructura >
swa_<nombre estructura>
gs_<nombre variable>
gn_<nombre variable>
gd_<nombre variable>
gh_<nombre variable>
gx_<nombre variable>
gi_<nombre variable>
gp_<nombre variable>
gf_<nombre variable>
g_<nombre variable>
ls_<nombre variable>
ln_<nombre variable>
ld_<nombre variable>
lh_<nombre variable>
lx_<nombre variable>
li_<nombre variable>
lp_<nombre variable>
lf_<nombre variable>
l_<nombre variable>
ss_<nombre variable>
sn_<nombre variable>
sd_<nombre variable>
sh_<nombre variable>
sx_<nombre variable>
si_<nombre variable>
sp_<nombre variable>
sf_<nombre variable>
s_<nombre variable>
pi_<nombre variable>
po_<nombre variable>
pt_<nombre variable>
gt_makt
gdt_makt
gst_makt
ght_makt
lt_makt
ldt_makt
lst_makt
lht_makt
st_makt
sdt_makt
sst_makt
sht_makt
gwa_mara
lwa_mara
swa_mara
gs_texto
gn_num3
gd_budat
gt_uzeit
gx_byte
gi_edad
gp_total
gf_total
g_monto
ls_texto
ln_num3
ld_budat
lt_uzeit
lx_byte
li_edad
lp_total
lf_total
l_monto
ss_texto
sn_num3
sd_budat
st_uzeit
sx_byte
si_edad
sp_total
sf_total
s_monto
pi_menge
po_meins
pt_ekpo
sin mbito
sin tipo
p_<nombre parmetro>
p_ bukrs
sin mbito
sin tipo
s_<nombre select-option>
s_bukrs
sin mbito
sin tipo
b_01
local
static
PARMETROS
(de una rutina FORM)
Valor
sin tipo
estndar
sorted
hashed
sin tipo
estndar
sorted
hashed
sin tipo
estndar
sorted
hashed
sin tipo
sin tipo
sin tipo
C
caracter
N
cadena numrica
D
fecha
T
hora
X
byte (hexadecimal)
I
entero
P
numero empaquetado
F
numero punto flotante
otro
C
caracter
N
cadena numrica
D
fecha
T
hora
X
byte (hexadecimal)
I
entero
P
numero empaquetado
F
numero punto flotante
otro
C
caracter
N
cadena numrica
D
fecha
T
hora
X
byte (hexadecimal)
I
entero
P
numero empaquetado
F
numero punto flotante
otro
using
sin
changing
tipo
tables
global
global
global
global
local
local
local
local
static
static
static
static
global
local
static
global
VARIABLE
Tipo Dato
sin mbito
- 17 -
RANGOS
global
sin tipo
gr_<nombre rango>
gr_bukrs
local
sin tipo
lr_<nombre rango>
lr_bukrs
static
sin tipo
sr_<nombre rango>
sr_bukrs
global
sin tipo
gc_<nombre constante>
gc_edad_max
local
sin tipo
lc_<nombre constante>
lc_edad_max
global
g<tipo>_<nombre
apuntado>
del
objeto
<gs_matnr>
<gwa_makt>
local
l<tipo>_<nombre
apuntado>
del
objeto
<ls_matnr>
<lwa_makt>
imprime_reporte
CONSTANTES
FIELD SYMBOL
SUBRUTINAS
sin mbito
sin tipo
<nombre subrutina>
El uso de using changing y
tables
depender
de
la
necesidad de la misma por
contar con variables globales.
MACROS
sin mbito
sin tipo
<nombre macro>
llena_fieldcat
global
sin tipo
gty_<nombre tipo>
gty_mara
local
sin tipo
lty_<nombre tipo>
lty_mara
sin tipo
gtyt_makt
estndar
gtyd_makt
sorted
gtys_makt
hashed
gtyh_makt
sin tipo
ltyt_makt
estndar
ltyd_makt
sorted
ltys_makt
hashed
ltyh_makt
global
sin tipo
gcl_<nombre objeto>
gcl_reporte
local
sin tipo
lcl_<nombre objeto>
lcl_reporte
global
sin tipo
go_<nombre objeto>
go_alv
local
sin tipo
lo_<nombre objeto>
lo_alv
static
sin tipo
so_<nombre objeto>
so_alv
parmetro
IP_<nombre parmetro>
ip_matnr
estructura
IW_<nombre estructura>
iw_makt
tabla
IT_<nombre de la tabla>
it_ekpo
parmetro
EP_<nombre parmetro>
ep_matnr
estructura
EW_<nombre estructura>
ew_makt
tabla
ET_<nombre de la tabla>
et_ekpo
parmetro
MP_<nombre parmetro>
mp_matnr
estructura
MW_<nombre estructura>
mw_makt
TIPOS
global
TIPOS TABLA
local
CLASES
OBJETOS
PARMETROS DE
MDULO DE
FUNCIONES
global
importing
global
importing
global
importing
global
exporting
global
exporting
global
exporting
global
modify
global
modify
- 18 -
PARMETROS DE
MTODOS
DE
CLASES
global
modify
tabla
MT_<nombre de la tabla>
mt_ekpo
tables
tabla
T_<nombre de la tabla>
t_datos
parmetro
IP_<nombre parmetro>
ip_matnr
estructura
IW_<nombre estructura>
iw_makt
tabla
IT_<nombre de la tabla>
it_ekpo
clase
IC_<nombre de la clase>
ic_reloj
parmetro
EP_<nombre parmetro>
ep_matnr
estructura
EW_<nombre estructura>
ew_makt
tabla
ET_<nombre de la tabla>
et_ekpo
clase
EC_<nombre de la clase>
ec_reloj
parmetro
CP_<nombre parmetro>
cp_matnr
estructura
CW_<nombre estructura>
cw_makt
tabla
CT_<nombre de la tabla>
ct_ekpo
clase
CC_<nombre de la clase>
cc_reloj
parmetro
RP_<nombre parmetro>
rp_matnr
estructura
RW_<nombre estructura>
rw_makt
tabla
RT_<nombre de la tabla>
rt_ekpo
clase
RC_<nombre de la clase>
rc_reloj
global
importing
global
importing
global
importing
global
importing
global
exporting
global
exporting
global
exporting
global
exporting
global
changing
global
changing
global
changing
global
changing
global
returning
global
returning
global
returning
global
returning
- 19 -
ZMSTNNNN_SEL
ZMSTNNNN_MAI
ZMSTNNNN_F01
ZMSTNNNN_O01
ZMSTNNNN_I01
ZMSTNNNN_CLA
Contiene
Todas las declaraciones iniciales. Ejm: tablas, estructuras, variables, Type-Pools,
table Controls, etc. Adicionalmente se puede utilizar para la definicin de los
mtodos de una clase.
Los parmetros de seleccin.
El proceso principal y los eventos. Ejm: INITIALIZATION. START-OFSELECTION, AT SELECTION SCREEN, etc.
Las subrutinas del programa.
Process Before Output. Los modules output.
Process After Input. Los modules input.
La implementacin de todos los mtodos de una clase.
- 20 -
9.6. Pantallas
En el diseo de pantallas se debe tratar de mantener siempre los estndares de diseo empleados por
SAP, para ello, se debe respetar lo siguiente:
Todos los textos de los campos deben figurar en letras minsculas.
Tratar de aprovechar las referencias a los campos del diccionario de datos.
Utilizar FRAMES para enmarcar campos relacionados.
Ubicar los campos de tal manera que facilite su llenado por parte del usuario
- 21 -
->
->
->
Status: 0100
Status: 0100
Status: 0300
->
->
->
Ttulo: 0100
Ttulo: 0200
Ttulo: 0300
Como se observa el Status 0200 no se ha tomado, en caso, a futuro la Dynpro 0200 necesite poseer su
propio status.
Elementos de Dynpros
Para el diseo de una dynpro es necesario el uso de elementos de dynpros, para los cules usaremos la
siguiente nomenclatura para los nombres de campo, dependiendo del elemento a utilizar:
Elemento
Campo de Texto
Campo Entrada/Salida
CheckBox
Radio Button
PushButton
Marco
Control de TabStrip
rea SubScreen
Table Control
Custom Control
Status Icon
Nomenclatura
TF_<nombre campo texto>
PF_<nombre campo entrada/salida>
CB_<nombre CheckBox>
RB_<nombre Radio Button>
PB_<nombre Push Button>
GB_<nombre Marco>
SC_<nombre TabStrip>
SA_<nombre Subscreen Area>
TC_<nombre Table Control>
CC_<nombre Custom Control>
SI_<nombre Status Icon>
Nota:
Como es conocido, estos elementos pueden ser obtenidos tambin va referencia ya sea del Diccionario de
datos o tambin de las variables que posee el programa, en dicho caso el nombre del objeto cargado en la
dynpro se mantendr con el nombre que se coloca automticamente al jalar el objeto con la referencia
determinada. Adems es posible indicar un nombre de campo precedido por un '*' cuando se trata de la
misma referencia al Diccionario de datos ABAP/4.
- 22 -
Nota:
Las secciones no utilizadas de los patrones, se eliminan del programa.
Ejemplo: Si uso el patrn TOP, y no voy a usar constantes, borramos esa seccin de nuestro programa (no
la comentamos).
- 23 -
Ejemplos
Incorrecto:
LOOP AT GT_KNA1 INTO GWA_KNA1.
CLEAR GT_KNA1.
..
ENDLOOP.
Correcto:
LOOP AT GT_KNA1 INTO GWA_KNA1.
CLEAR GWA_KNA1.
..
ENDLOOP.
CLEAR GT_KNA1.
Incorrecto:
INSERT TABLE GT_BKPF.
COLLECT GT_BKPF.
READ TABLE GT_BKPF
MODIFY TABLE GT_BKPF
MODIFY GT_BKPF WHERE
DELETE TABLE GT_BKPF.
LOOP ATGT_BKPF
- 24 -
Correcto:
INITIALIZATION.
...
AT SELECTION-SCREEN.
...
START-OF-SELECTION.
PERFORM cargar_datos.
PERFORM procesar_datos.
PERFORM imprimir_datos.
END-OF-SELECTION.
ENDFORM
FORM imprimir_datos.
ENDFORM
- 25 -
Correcto:
*------------------------------------------------------*
Toda Subrutina tambin debe tener un encabezado * Form GUARDAR_ULTIMA_EJECUCION
conteniendo una breve descripcin de su *------------------------------------------------------*
funcionalidad y los parmetros de entrada y salida.
* Lee la tabla ZZLRT donde la ltima Fecha y
* hora de ejecucin del programa es guardada
Una Subrutina deber tener solo un proceso *------------------------------------------------------*
principal. En caso de que haya ms de un proceso, *
PI_JOBID
cdigo interno de JOB
entonces deber ser dividida en mltiples * PO_STATUS resultado proceso
Subrutinas.
*------------------------------------------------------*
FORM GUARDAR_ULTIMA_EJECUCION USING PI_JOBID
Subrutinas que podran ser utilizadas en otros
CHANGING PO_STATUS.
programas debern ser colocadas en un Function
Module.
ENDFORM.
Los parmetros de entrada de una subrutina
debern ser definidos utilizando la palabra clave
USING, y debern pasarse por valor (palabra clave
USING VALUE(var) en todos los casos en que
pueda utilizarse un literal en la llamada PERFORM.
Los parmetros de salida de una subrutina debern
ser definidos utilizando la palabra clave CHANGING.
Anidamiento
Correcto:
Las estructuras IF-ENDIF, LOOP-ENDLOOP, CASE ln_var:
CASE-ENDCASE, DO-ENDDO, etc. no debern WHEN 01.
presentar una extensin excesiva en cuanto a la
PERFORM procesar_opcion_01.
longitud de lneas ni a profundidad (anidamiento).
WHEN 02.
PERFORM procesar_opcion_02.
Se deber llegar a un equilibrio de estas WHEN 01.
caractersticas utilizando subrutinas. Para esto se
PERFORM procesar_opcion_03.
debe estructurar el mdulo teniendo en cuenta los WHEN OTHERS
conceptos de cohesin y acoplamiento.
PERFORM procesar_opcion_otros.
ENCASE.
Comandos
Incorrecto:
START-OF-SELECTION.
SELECT matnr werks lgort labst FROM mara
Cada comando deber comenzar en una nueva
INTO TABLE gt_stock_mat
lnea para una mejor visualizacin del cdigo. De
WHERE matnr in s_matnr.
esta forma, permitir un mejor mantenimiento del
IF sy-subrc NE 0. MESSAGE E001. ENDIF.
cdigo (borrado, comentario y debugging).
END-OF-SELECTION.
Para mantener los programas estructurados,
deberemos indentar los diferentes niveles de
Correcto:
jerarqua con 2 espacios.
START-OF-SELECTION.
SELECT matnr werks lgort labst FROM mara
El PRETTY PRINTER podr ser utilizado para
INTO TABLE gt_stock_mat
indentar automticamente los comandos.
WHERE matnr in s_matnr.
IF sy-subrc NE 0.
Comandos largos debern ser particionados en
MESSAGE E001.
varias lneas e indentados por la primera lnea para
ENDIF.
permitir una mejor visualizacin.
END-OF-SELECTION.
PERFORM IMPRIMIR_TOTALES.
Agrupacin de Variables Globales
Siempre que se utilicen variables relacionadas entre
s, debern declararse como campos de una
estructura y no como variables sueltas.
Como las tres variables estn relacionadas porque definen un nro. de asiento
que se necesitar tratar en el programa:
- 26 -
debern
ser
Correcto:
REPORT xxx MESSAGE-ID ZMM01.
IF sy-subrc NE 0.
MESSAGE E001.
ENDIF.
- 27 -
- 28 -
10.2. Performance
Consideraciones
Ejemplos
- 29 -
lt_stock_mat_nostock[] = lt_stock_mat[].
DELETE lt_stock_mat WHERE labst = 0.
Primero intente acceder por la clave primaria DELETE lt_stock_mat_nostock[] WHERE labst <> 0
completa o por algn ndice completo. De no ser
posible, acceda parcialmente por la clave primaria o
ndice, utilizando los campos en el orden establecido Si se necesita imprimir el nombre del cliente en la factura con t_facturas-kunnr
para la clave o ndice.
(cd. cliente) y t_facturas-name1 (nombre cliente)
Incorrecto:
LOOP AT T_FACTURAS.
SELECT NAME1 FROM KNA1 INTO T_FACTURAS-NAME1
MODIFY T_FACTURAS.
ENDLOOP.
Correcto:
TYPES: BEGIN OF lty_clientes,
kunnr TYPE kunnr, "CD. CLIENTE
name1 TYPE name1, "NOMBRE CLIENTE
END OF lty_clientes.
DATA: lt_clientes TYPE STANDARD TABLE OF lty_clientes.
DATA: lwa_clientes LIKE LINE OF lt_clientes.
* GENERAR MAESTRO DE CLIENTES
IF NOT lt_facturas[] IS INITIAL.
SELECT kunnr name1 FROM kna1
INTO TABLE lt_clientes
FOR ALL ENTRIES IN lt_facturas
WHERE kunrr = lt_facturas-kunnr.
ENDIF.
* BUSCAR NOMBRE DE CLIENTE POR CADA CLIENTE CON FACTURAS
LOOP AT lt_facturas ASSIGNING <lwa_facturas>.
READ TABLE lt_clientes INTO lwa_clientes
WITH KEY kunnr = <lwa_facturas>-kunnr.
IF sy-subrc EQ 0.
<lwa_facturas>-kunnr = lwa_clientes_aux-kunnr.
ENDIF.
ENDLOOP.
Performance memoria dinmica.
TABLAS INTERNAS
La manera ms eficiente de buscar un nico registro
en una tabla interna del tipo standard es utilizando el
Correcto:
comando: READ TABLE ... WITH BINARY
SORT GT_TABLA1 BY CAMPO1 ASCENDING.
SEARCH. Debiendo estar ordenada la tabla Interna.
LOOP AT GT_TABLA1.
SORT
ENDLOOP.
El SORT de una tabla Interna, es ms eficiente si los
campos son especificados.
Siempre identificar si un SORT es ascending o
descending y especificar la clusula BY <fields>.
Caso contrario todos los campos sern clasificados.
Incorrecto:
LOOP AT ITAB.
CHECK T_ABC = KVAL.
...
ENDLOOP.
LOOP...WHERE
El comando LOOP .... WHERE es ms eficiente que
Correcto:
el comando LOOP / CHECK, pues evala la
LOOP AT GT_ABC INTO GWA_ABC WHERE K = GS_VAL.
condicin internamente.
ENDLOOP.
Siempre usar los comandos CLEAR/ REFRESH
despus de finalizar un LOOP, cuando los datos no
deban ser reutilizados.
Incorrecto:
LOOP AT GT_VBAK INTO GWA_VBAK.
APPEND GWA_VBAK TO GT_AUX.
Si dos tablas tienen la misma estructura, es ms
ENDLOOP.
eficiente copiar el contenido de una a otra
directamente y no a travs de un LOOP.
Correcto:
GT_AUX[] = GT_VBAK[].
Sin embargo, si GT_AUX no est vaca y no debe de ser sobre-escrito entonces
use:
- 30 -
Correcto:
SORT GT_TAB BY K.
DELETE ADJACENT DUPLICATES FROM GT_TAB COMPARING K.
Incorrecto:
LOOP AT GT_TAB.
LI_LINEAS = LI_LINEAS + 1.
ENDLOOP.
Correcto:
DESCRIBE TABLE GT_TAB LINES LI_LINEAS.
Correcto:
IF NOT GT_TAB1[] IS INITIAL.
SELECT FIELD1 FIELD2 FROM TABLE INTO TABLE GT_TAB2
FOR ALL ENTRIES IN GT_TAB1
WHERE FIELD3 EQ GT_TAB1-FIELD3
AND FIELD4 IN S_FIELD.
ENDIF.
Incorrecto:
LOOP AT GT_TAB1.
LOOP AT GT_TAB2 WHERE K = GT_TAB1-K.
...
ENDLOOP.
ENDLOOP.
- 31 -
Ejemplos
Modularizacin
Los
programas
deben
modularizados completamente.
estar
Correcto:
START-OF-SELECTION.
PERFORM buscar_datos.
PERFORM calcular_porcentajes.
PERFORM grabar_log.
END-OF-SELECTION.
PERFORM imprimir_reporte.
La modularizacin se establece durante
PERFORM download_archivo.
el diseo; implica comprender la
complejidad total del programa y dividirla
FORM buscar_datos.
en partes ( mdulos). Cada modulo o
...
rutina ejecutar solo una accin principal
ENDFORM.
o proceso.
FORM calcular_porcentajes.
A travs de la modularizacin se divide
Recomendable:
- 32 -
- 33 -
- 34 -
Verificar que las OTs no presenten cruce de versiones en la comparacin de la OT de DEV versus PRD
(no debemos pasar cambios u objetos que no estn relacionados con el requerimiento de la OT
cambios no aprobados).
Verificar que las OTs estn acumulando todas las versiones anteriores.
Verificar que la OT a pasar sea la ms actualizada del requerimiento (versin final).
Revisar que se cumpla la nomenclatura de los objetos nuevos.
Revisar validaciones crticas: FOR ALL ENTRIES con tabla interna llena, READ TABLE con verificacin
de SY-SUBRC EQ 0, FIELD SYMBOL con verificacin de asignacin previo a su invocacin, etc.
Revisar consultas crticas que puedan afectar performance: SELECT SINGLES dentro de LOOPs,
LOOPs anidados, SELECT sin llave o ndice, etc.
Ejecutar la tx SLIN o Verificacin ampliada de los programas, revisar slo los puntos que puedan
resultar crticos.
Revisar que no se pase cdigo nuevo comentado (evitar que cdigo nuevo que hemos desechado
pase a PRD).
Verificar que todos los cambios estn encerrados en marcas y tengan un encabezado de creacin
modificacin.
Verificar que si son programas nuevos deben validar un objeto de autorizacin y deben estar
registrados en la SU24.
Verificar que si son tablas Z deben estar asociados a un grupo de autorizacin.
Verificar que datos organizacionales datos crticos no pasen por cdigo duro sino por tabla de
constantes.
Revisar posibles dependencias (por ejemplo pasar una funcin cuyo grupo de funciones an no est en
PRD).
- 35 -
:
:
:
:
Nota:
El numeral [NNNN] debe ser el mismo en el nombre del programa y en la transaccin (sin el 0 inicial), por lo
que ser utilizado slo una vez. Ejemplo, si el programa es ZMMR0023, la transaccin respectiva es
ZMMR023.
Si se encontrara algn espacio en los correlativos de txs, utilizar dichos espacios para las nuevas txs a
crear. Ejm: Si en el sistema existe la tx ZFIP001, ZFIP003, ZFIP004..., utilizar el nombre ZFIP002 como
nueva tx a crear.
Transaccin Copia Estndar
Las txs copias de un estndar deben evitarse y validarse con el Supervisor ABAP, en su lugar debe
buscarse la forma de ampliar la tx estndar. Slo en caso aplicara y se aprobara la creacin de la copia, los
nombres de estos objetos tendrn la siguiente forma Z[TX_ORI], donde TX_ORIG es el nombre de la tx
Original. Ejm: ZQA33.
PROGRAMA
Los nombres de estos objetos tendrn la siguiente forma Z[MS][T][NNNN]
Donde:
Z
MS
T
NNNN
:
:
:
:
Ejm: ZFIR0001
INCLUDE
Los nombres de estos objetos tendrn la siguiente forma Z[MS][T][NNNN]_XXX
Include
ZMSTNNNN_TOP
ZMSTNNNN_SEL
ZMSTNNNN_MAI
ZMSTNNNN_F01
ZMSTNNNN_O01
ZMSTNNNN_I01
ZMSTNNNN_CLA
Contiene
Todas las declaraciones iniciales.
Los parmetros de seleccin iniciales.
El proceso principal y los eventos.
Las subrutinas del programa.
Process Before Output.
Process After Input.
Implementacin de todos los mtodos de una clase.
- 36 -
:
:
:
:
:
:
:
:
Ejm: ZMMCE_RESERVAS01
ENHANCEMENT IMPLEMENTATION
Los nombres de estos objetos tendrn la siguiente forma Z[MS]EI_TTTT_[XX]
Donde:
Z
MS
EI
TTTT
XX
:
:
:
:
:
Ejm: ZSDEI_VF04_OCULTAR_BOTON
Nota:
Si el enhancement afecta a ms de una transaccin y las transacciones slo variaran por un caracter,
reemplazar el carcter diferente por una X. Si todos los caracteres de las txs fueran diferentes, colocar las
txs ms importantes y mencionar el resto como para de la descripcin del enhancement.
Ejm:
=> ZSDEI_VA0X_SAVE_POPUP
=> ZMMEI_MIGO_MB01_VALIDA
- 37 -
:
:
:
:
Ejm: ZCOT_MATCOSTO
Nota:
Se debe definir la Categora de Ampliacin antes de activar la tabla.
Para acceder: ingresar a la tabla en la Tx. SE11, ir al men Detalles -> Categora de Ampliacin.
Por seguridad se debe asociar un grupo de autorizacin para toda tabla Z (Ver punto 4 del presente
Manual).
CAMPO DE TABLA
El nombre que llevarn los diferentes campos que conforman una tabla de base de datos, estar asignado
de la siguiente forma, dependiendo el caso en que se encuentre:
De ser un campo que hace referencia a un tipo de dato existente en SAP, se mantendr el mismo
nombre de campo usado por la nomenclatura estndar de SAP.
Ejemplo: Sociedad -> BUKRS
De ser un campo creado segn la situacin del negocio o cliente, el nombre del campo estar asignado
por un nombre adecuado seleccionado bajo el criterio del consultor responsable, tomando un tamao
recomendado de 5 caracteres.
Ejemplo:
Alimentos
-> ALMTS.
Tienda de Textiles -> TDATL.
INDICE DE TABLA
Los ndices que sean necesarios crear, para la optimizacin en el acceso de lectura a las tablas de bases
de datos tendrn la siguiente forma Z[NN]
Donde:
Z
:
NN
:
Ejm: Z01.
Nota:
Al crear el ndice Z por la tx SE11, se debe elegir la opcin Crear ndice extensin.
- 38 -
:
:
:
:
Ejm: ZMMV_MATCENTRO
VISTA APPEND
Los nombres de estos objetos tendrn la siguiente forma ZZ[MS]V_[XX]
VISTA AYUDA
Los nombres de estos objetos tendrn la siguiente forma Z[MS]VH_[XX]
CLUSTER DE VISTA
Los nombres de estos objetos tendrn la siguiente forma Z[MS]VC_[XX]
ESTRUCTURA
Los nombres de estos objetos tendrn la siguiente forma Z[MS]S_[XX]
Donde:
Z
MS
S
X...X
:
:
:
:
Ejm: ZWMS_STOCKMAT
Nota:
Se debe definir la Categora de Ampliacin antes de activar la estructura.
ESTRUCTURA APPEND
Los nombres de estos objetos tendrn la siguiente forma ZZ[MS]S_[XX]
Los nombres de los campos debern empezar con ZZ.
TIPO TABLA
Los nombres de estos objetos tendrn la siguiente forma Z[MS]TT_[X...X]
Donde:
Z
MS
TT
X...X
:
:
:
:
Ejm: ZMMTT_RESERVAS.
- 39 -
Ejm: ZE_BANCO
DOMINIO
Los nombres de estos objetos tendrn la siguiente forma ZD_[CCCC][NNN][_D]
Donde:
Z
D
CCCC
NNN
D
:
:
:
:
:
Ejm:
ZD_CHAR255 Almacena un texto de 255 caracteres
ZD_DEC15_2 Almacena un nmero de longitud 15 y 2 decimales.
Los dominios que tuvieran mbito de valores tendrn la siguiente forma ZD_AV[XXX]
Donde:
Z
D
AV
XXX
:
:
:
:
ID PARAMETRO SET/GET
Los ID de parmetro sirven para llenar un campo con los valores propuestos de la memoria SAP. Estos
iniciarn con el prefijo Z, seguido de una abreviatura del parmetro que va a representar, recomendable 3
caracteres.
Ejm: ZRET
- 40 -
Ejm: ZH_USERS
OBJETO DE BLOQUEO
Los nombres de estos objetos tendrn la siguiente EZ_[X...X]
Donde:
E
:
Z
:
X...X :
Ejm: EZ_ZSDT_BLOCK
SAPSCRIPT
Los nombres de estos objetos tendrn la siguiente forma Z[MS]SS_[XX]
Donde:
Z
MS
SS
XX
:
:
:
:
Ejm: ZSDSS_ADUANA
ESTILO (SAPSCRIPT)
Los nombres de estos objetos tendrn la siguiente forma ZST_[NNN]
Donde:
Z
:
ST
:
NNN :
Ejm: ZST_001
SMARTFORM
Los nombres de estos objetos tendrn la siguiente forma Z[MS]SF_[XX]
Donde:
Z
MS
SF
XX
:
:
:
:
Ejm: ZSDSF_ADUANA
- 41 -
:
:
:
:
Ejm: ZSDST_ADUANA
GRUPO DE FUNCIONES
Los nombres de estos objetos tendrn la siguiente forma Z[MS]GF_[X...X]
Donde:
Z
MS
GF
X...X
:
:
:
:
Ejm: ZHRGF_PERSONAL
Nota:
Los grupo de funciones correspondientes a la vista de actualizacin de una tabla o vista Z, debern llevar el
mismo nombre que la tabla o vista relacionada.
Los field exits sern agrupados en un grupo de funciones nico por mdulo.
previamente coordinado con el Supervisor ABAP.
FUNCION
Los nombres de estos objetos tendrn la siguiente forma Z[MS]F_[X...X]
Donde:
Z
MS
F
X...X
:
:
:
:
Ejm: ZFIF_VERPAGOS
- 42 -
El GF a tomar ser
:
:
:
:
Ejm: ZSDRFC_TIPODOC
APLICACION BSP
Los nombres de estos objetos tendrn la siguiente forma Z[MS]BSP_[X...X]
Donde:
Z
MS
BSP
X...X
:
:
:
:
Ejm: ZMMBSP_LIBERA_OC
IMPLEMENTACION BADI
Los nombres de estos objetos tendrn la siguiente forma Z[X...X][N]
Donde:
Z
:
X...X :
N
:
Ejm: ZME_PROCESS_PO_CUST.
CLASE E INTERFASE
La nomenclatura de una clase o de una interfase puede constar de caracteres alfanumricos y del carcter
especial de subrayado (_) y de la barra (/). La barra (/) sirve para delimitar el prefijo del mbito de nombres
del resto del denominador. La clase o interfase no puede empezar con una cifra.
Clase
Interfase
Z[MS]CL_[XX]
Z[MS]IF_[XX]
Donde:
Z
MS
CL/IF
X...X
:
:
:
:
- 43 -
Ejm: ZBO_CRM
ENTERPRISE SERVICE
Los nombres de estos objetos tendrn la siguiente forma Z[MS][WS_[XX]
Donde:
Z
MS
WS
X...X
:
:
:
:
Ejm: ZSDWS_SCE_PEDIDOS
Ejm: ZSD001
:
:
:
:
Ejm: ZSDGU_VENTAS
- 44 -
:
:
:
:
Ejm: ZSDIS_DOC_VENTAS
QUERY
Los nombres de estos objetos tendrn la siguiente forma Z[MS]Q_[X...X]
Donde:
Z
MS
Q
X...X
:
:
:
:
Ejm: ZSDQ_ENTREGAS
PROYECTO (LSMW)
Los nombres de estos objetos tendrn la siguiente forma ZP_[X...X]
Donde:
Z
:
P
:
X...X :
Ejm: ZP_RANSA
:
:
:
:
Ejm: ZMMSP_PEDIDOS
- 45 -
:
:
:
:
Ejm: ZMMO_ME21N_01
CLASE DE DESARROLLO
Los nombres de estos objetos tendrn la siguiente forma Z[MS]
Donde:
Z
:
MS
:
Ejm:
Paquete mdulo PP:
ZPP
OBJETO DE AUTORIZACION
Con la finalidad de mantener la seguridad de accesos y permisos respectivos a las transacciones, ser
necesaria la creacin de objetos de autorizacin, los cuales tendrn la siguiente forma: Z[MS]_[XX]
Donde:
Z
:
MS
:
X...X :
Ejm: ZMM_WERKS
Nota:
Considerar el campo ACTIVIDAD (ACTVT) para una mejor restriccin.
CLASE DE MENSAJE
Los nombres de las clases de mensaje tienen la siguiente forma Z[MS][NN]
Donde:
Z
:
MS
:
NN
:
Ejm: ZPP01
Nota:
Preferentemente usar una clase por mdulo
- 46 -
VARIANTE
El texto es libre
GRUPO TIPO
Los nombres de estos objetos tendrn la siguiente forma Z[MS][NN]
Donde:
Z
:
MS
:
NN
:
Ejm: ZWM01
- 47 -
Descripcin
Uso genrico
Business Warehouse
Customer Relationship Management
Controlling
Servicio al Cliente
Finanzas
Recursos Humanos
Materiales
Mantenimiento
Produccin
Gestin de Proyectos
Calidad
Ventas y Distribucin
Gestin de Almacenes
Reporte
M
Mantenimiento de tablas
Vlido slo para transaccin:
A
Actualizacin
Q
Query
Descripcin
En ellos se encuentran los programas que manejan Batch Input,
Call Transaction, etc
Para el caso de un programa que presente una serie de procesos
o realice actividades particulares.
Estos programas se caracterizan por realizar ms de una
actividad de las mencionadas en un mismo programa.
Para todos aquellos programas que impliquen una seleccin de
datos y un listado en pantalla.
Procesos exclusivos al mantenimiento o carga inicial de una tabla
Transaccin de actualizacin de tabla.
Transaccin creada para query
Descripcin
String
Campo moneda, almacenado como DEC
Campo para fecha (AAAAMMDD), almacenado como CHAR (8)
Campo clculo o de importe con coma y signo +/Cifra coma flotante con 8 byte de exactitud
Entero
String slo con cifras
Campo cantidad, apunta a campo unidades con formato UNIT
Campo hora (HHMMSS), almacenado como CHAR (6)
Clave de unidades para campos QUAN
- 48 -
ID
C
D
P
F
I
N
Q
T
U
4. Al abrir la OT, se ver la OT acumulada en la seccin Lista de objetos tomada, y se podrn ver
todos los objetos importados en nuestra OT.
- 49 -
- 50 -
- 51 -
- 52 -
- 53 -
IMAGEN 10.4.c
- 54 -