Você está na página 1de 54

ESTNDARES DE

PROGRAMACIN
ABAP4
- VERSIN 1.0 2014

Sistemas - rea de Codificacin


------------------------------------------------------------------------------------------------------------------------------------------------

Gua rpida de nomenclaturas


y mejores prcticas en ABAP

Control de Cambios del Documento


Preparado por:
Revisado y aprobado por:

Vernica Briceo Vsquez


Luis Alba Vera
Ruth Novoa La Torre
Versin 1.0

-2-

Fecha de Preparacin:
Fecha de Aprobacin:
Fecha de Aprobacin:
Fecha Efectiva:

20.10.2014
25.11.2014
25.11.2014
01.12.2014

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------INDICE

OBJETIVO

04

ALCANCE

04

1. Nomenclatura de OTs

05

2. Marca para modificaciones

06

3. Objeto de Autorizacin

08

4. Grupo de Autorizacin

08

5. Paquete - Clase de desarrollo

08

6. Objeto de Prueba

09

7. ESTRUCTURA PARA PROGRAMAS


7.1.
Comentarios
7.2.
Cabecera del programa
7.3.
Declaracin de datos globales
7.4.
Declaracin de campos de pantalla
7.5.
Validacin de campos de pantalla e inicializacin
7.6.
Rutina principal del programa
7.7.
Tratamiento de los datos obtenidos
7.8.
Eventos de control
7.9.
Subrutinas internas

10
10
11
12
13
14
15
15
16

8. Convencin para nombres internos ABAP4/SAP

17

9. RECOMENDACIONES GENERALES SOBRE FORMATO


9.1.
Subrutinas (FORMS)
9.2.
Programas INCLUDE
9.3.
Cabeceras de listados
9.4.
Textos de seleccin
9.5.
Smbolos de texto
9.6.
Pantallas
9.7.
Dynpros, Status y Ttulos
9.8.
Status GUI
9.9.
Patrones

20
20
21
21
21
21
22
22
23

10. ASEGURAMIENTO DE CALIDAD EN DESARROLLOS ABAP


10.1. Codificacin y Presentacin
10.2. Performance
10.3. Modularizacin y reutilizacin
10.4. Verificacin Ampliada
10.5. Puntos a revisar en una OT previo al pase a PRD

24
29
32
34
35

11. NOMENCLATURA DE OBJETOS DE REPOSITORIO SAP

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

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------OBJETIVO
Contar con un marco referencial para uniformizar la nomenclatura a utilizar en los desarrollos ABAP,
permitiendo una identificacin rpida, precisa y oportuna durante la etapa de desarrollo y mantenimiento,
adems de contar con pautas y recomendaciones para conseguir programas ptimos.

ALCANCE
Este estndar de desarrollo abarca a todos los Consultores ABAP de Grupo Romero y a los proveedores de
desarrollo de aplicaciones ABAP.

-4-

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------1. Nomenclatura de OTs
Las rdenes de transporte deben ser nombradas de acuerdo a la siguiente nomenclatura:
<Tipo>-<Mdulo> <Cdigo Actividad> <Objeto Principal> <Descripcin> <Versin> <Funcional>
Donde:
Tipo
Mdulo
Cdigo Actividad
Objeto Principal
Descripcin
Versin
Funcional

:
:
:
:
:
:
:

CU (Customizing), WB (Workbench), TC (Transporte de Copias)


CO, FI, MM, SD, etc.
Cdigo de actividad registrada en PMO
Transaccin u objeto principal modificado
Texto descriptivo
Cuando se maneja ms de una OT relacionada. Comenzar con 00.
Siglas de funcional responsable o solicitante

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

WB-MM SOP_000019 ZMMR001 Ajuste Rep Ped compras


WB-MM SOP_000019 ZMMR001 Ajuste Rep Ped compras
Md Cod. Actividad
SD

PYH_000049

Actividad
Proyecto Impulso UNI

Cod.Tarea

ID OD

TEP-000001

WB-SD PYH_000049 ZSDR001 Reporte de Clientes


WB-SD PYH_000049 ZSDR001 Reporte de Clientes
Md Cod. Actividad
WM PYP_000032

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

WB-WM PYP_000032 ZWMP001 Ubicacin para traslados


00 ID
WB-WM PYP_000032 ZWMP001 Ubicacin para traslados * 01 ID
WB-WM PYP_000032 ZWMP001 Ubicacin para traslados * 02 ID
WB-WM PYP_000032 ZWMP001 Ubicacin para traslados 1 00 ID
WB-WM PYP_000032 ZWMP001 Ubicacin para traslados * 1 01 ID
WB-WM PYP_000032 ZWMP001 Ubicacin para traslados 2 00 ID

-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

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------2. Marca para modificaciones
Las marcas de modificacin deben ser nombradas de acuerdo a la siguiente nomenclatura:
<Accin> @<NNN>
Donde:
Accin

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-

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------CASO2: Modificar varias lneas de cdigo
*{ REPLACE @001
*&---------------------------------------------------------------------*
*&
Form GET_FILE
*&---------------------------------------------------------------------*
FORM GET_FILE CHANGING PO_FILE TYPE STRING.
DATA: LDT_FILE_TABLE TYPE STANDARD TABLE OF FILE_TABLE,
LS_FILE_FILTER TYPE STRING,
LI_RC
TYPE I.
LS_FILE_FILTER = CL_GUI_FRONTEND_SERVICES=>FILETYPE_EXCEL.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
WINDOW_TITLE
= 'Abrir en ...'
FILE_FILTER
= LS_FILE_FILTER
DEFAULT_FILENAME = PO_FILE
INITIAL_DIRECTORY = '/'
CHANGING
FILE_TABLE
= LDT_FILE_TABLE
RC
= LI_RC.
IF SY-SUBRC EQ 0 AND LI_RC EQ 1.
READ TABLE LDT_FILE_TABLE INDEX 1 INTO PO_FILE.
ENDIF.
ENDFORM.
" GET_FILE
*} REPLACE @001
CASO3: Eliminar/Comentar varias lneas de cdigo
*{ DELETE @001
**&---------------------------------------------------------------------*
**&
Module STATUS_0100 OUTPUT
**&---------------------------------------------------------------------*
**
text
**----------------------------------------------------------------------*
*MODULE status_0100 OUTPUT.
* SET PF-STATUS '0100'.
* SET TITLEBAR '0100'.
*ENDMODULE.
" STATUS_0100 OUTPUT
*} DELETE @001
CASO4: Agregar una lnea de cdigo
DATA: GS_ID

TYPE ICON-ID.

"INSERT @001

CASO5: Modificar una lnea de cdigo


REFRESH GT_LINES. "REPLACE @001
CASO6: Eliminar/Comentar una lnea de cdigo
*

CHECK NOT GHT_BSEG[] IS INITIAL. "DELETE @001

-7-

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------3. Objeto de Autorizacin
Todo desarrollo debe contar con la validacin de uno o varios objetos de autorizacin segn lo solicitado en
el requerimiento respectivo. Esto con el objetivo de restringir la informacin a mostrar o procesar.
Asimismo la transaccin con su respectivo objeto de autorizacin debe registrarse en la tx SU24 a fin de
llevar un mejor control.
Ejm:
*----------------------------------------------------------------------*
* VALIDACION DE PARAMETROS DE PANTALLA
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
AUTHORITY-CHECK OBJECT 'ZMM_WERKS'
ID 'TCODE' FIELD SY-TCODE
ID 'WERKS' FIELD P_WERKS
ID 'ACTVT' FIELD '03'. "visualizar
IF SY-SUBRC NE 0.
MESSAGE E000 WITH TEXT-E01 P_WERKS.
ENDIF.
Nota:
- Considerar el campo actividad en la validacin, la actividad a validar debe ir acorde a la funcin principal
del programa (crear, modificar, visualizar, borrar, imprimir, contabilizar, etc).
- Para ver cmo asociar Tx con O.A. en SU24, revisar seccin ANEXOS -> GUIAS -> G2.

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.

5. Paquete - Clase de desarrollo


Todo objeto de repositorio Z vlido para PRD, debe crearse haciendo referencia a un paquete de desarrollo.
La asignacin estar relacionada con el mdulo SAP al que pertenece.
Ejm:
Paquete
ZBC
ZBW
ZCO
ZCS
ZFI
ZHR
ZMM
ZPM
ZPP
ZPS
ZQM
ZSD
ZWM

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-

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------6. Objetos de Prueba
Los objetos creados para pruebas que no sean necesarios para el ambiente PRD, deben ser creados como
objetos locales y el nombre debe empezar con Y.

-9-

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------7. ESTRUCTURA PARA PROGRAMAS
7.1. Comentarios
Todo programa desarrollado debe incluir comentarios, con el propsito de facilitar a futuros programadores
una mejor comprensin del cdigo desarrollado y disminuir el impacto que representa para esta persona la
modificacin de un cdigo no propio. Todo comentario debe estar en letra minscula, adems debe ser
claro y conciso, dando una idea general de la funcin que realiza esa seccin de cdigo en el programa.

7.2. Cabecera del programa


La cabecera de un programa ABAP deber respetar el siguiente formato:
*&---------------------------------------------------------------------*
*& Actividad...:
*
*& Mdulo.....:
*
*& Funcional..:
*
*& Autor......:
*
*& Fecha......:
*
*& Descripcin:
*
*&---------------------------------------------------------------------*
*& MODIFICACIONES
*
*&---------------------------------------------------------------------*
*& Actividad:
*
*& Marca....:
*
*& Funcional:
*
*& Autor....:
*
*& Fecha....:
*
*& Motivo...:
*
*&---------------------------------------------------------------------*
REPORT ZMSTNNNN MESSAGE-ID Z0
LINE-SIZE 132 LINE-COUNT 65
NO STANDARD PAGE HEADING.
Las primeras lneas del programa deben ser destinadas al nombre del programa, clase de mensaje, tamao
del reporte de salida, etc.
Nota:
El ttulo MODIFICACIONES, slo se coloca la primera vez que se va a hacer una modificacin al programa,
los encabezados se colocan todas las veces que se hagan modificaciones.
Ejm:
*&---------------------------------------------------------------------*
*& Actividad..: PYH_000052 Facturacin Electrnica Chile Salmofood
*
*& Mdulo.....: SD
*
*& Funcional..: Christian Torres
*
*& Autor......: Ana Perez
*
*& Fecha......: 01.09.2014
*
*& Descripcin: Flujo de facturas de ventas
*
*&---------------------------------------------------------------------*
*& MODIFICACIONES
*
*&---------------------------------------------------------------------*
*& Actividad: PYH_000052 Facturacin Electrnica Chile Salmofood
*
*& Marca....: @001
*
*& Funcional: Christian Torres
*
*& Autor....: Roberto Sanchez
*
*& Fecha....: 02.10.2014
*
*& Motivo...: Agregar fecha de creacin de documento
*

- 10 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------*&---------------------------------------------------------------------*
*& Actividad: PYH_000052 Facturacin Electrnica Chile Salmofood
*
*& Marca....: @002
*
*& Funcional: Maria Campos
*
*& Autor....: Ana Perez
*
*& Fecha....: 15.10.2014
*
*& Motivo...: Enviar reporte por correo
*
*&---------------------------------------------------------------------*

7.3. Declaracin de datos globales


Esta seccin se debe utilizar para la declaracin de todas las constantes y variables globales utilizadas en el
programa. La declaracin de datos debe respetar el siguiente formato:
Modelo ejemplo:
*----------------------------------------------------------------------*
* DECLARACION DE TABLAS
*
*----------------------------------------------------------------------*
TABLES: T001W, "Centros/Sucursales
MBEW, "Valoracin de material
MSEG. "Segmento doc.material
*----------------------------------------------------------------------*
* CONSTANTES
*
*----------------------------------------------------------------------*
CONSTANTS: GC_SOBKZ TYPE QBEW-SOBKZ VALUE 'Q',
GC_XXXXX TYPE C LENGTH 10 VALUE 'OTROS',
GC_WERKS TYPE T001W-WERKS VALUE '105A'.
*----------------------------------------------------------------------*
* DECLARACION DE VARIABLES
*
*----------------------------------------------------------------------*
TYPE-POOLS: SLIS. "Agregar comentario
* Campos globales
DATA: GS_BUKRS TYPE
GS_CAMPO2 TYPE
GN_CAMPO3 TYPE
GD_BUDAT TYPE

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

TYPE TABLE OF MARC,


TYPE STANDARD TABLE OF GTY_MARC,
TYPE HASHED TABLE OF GTY_MARC WITH UNIQUE KEY MATNR WERKS,
TYPE SORTED TABLE OF GTY_MARC WITH NON-UNIQUE KEY MATNR.

TYPE TABLE OF GTY_MARC,

- 11 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------GDT_MARC

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

TYPE RANGE OF BKPF-BUKRS, "rango de sociedades


LIKE LINE OF GR_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.

7.4. Declaracin de campos de pantalla


Esta seccin se debe utilizar para la declaracin de todos los campos que se mostrarn en la pantalla de
inicio del programa y que permiten la seleccin de la informacin (PARAMETERS, SELECT-OPTIONS,
ETC).
No debe crearse un programa sin al menos un parmetro de seleccin. Esto posibilitar que al ejecutar el
programa se muestre primero una pantalla de seleccin, con el ttulo del programa y los campos de

- 12 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------seleccin, evitando que el usuario ejecute el programa por error. La declaracin de parmetros de pantalla
debe respetar el siguiente formato:
Modelo ejemplo:
*----------------------------------------------------------------------*
* DISEO PANTALLA DE SELECCION
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK B_01 WITH FRAME TITLE TEXT-B01.
PARAMETERS:
P_BUKRS TYPE T001-BUKRS OBLIGATORY DEFAULT '10',
P_WERKS TYPE T001W-WERKS MEMORY ID WRK OBLIGATORY.
SELECT-OPTIONS: S_BKLAS FOR MBEW-BKLAS NO INTERVALS NO-EXTENSION,
S_MATNR FOR MSEG-MATNR.
SELECTION-SCREEN END OF BLOCK B_01.
SELECTION-SCREEN BEGIN OF BLOCK B_02 WITH FRAME TITLE TEXT-B02.
PARAMETERS:
P_LFMON TYPE MBEW-LFMON OBLIGATORY,
P_LFGJA TYPE MBEW-LFGJA OBLIGATORY,
P_WAERS TYPE T001-WAERS OBLIGATORY.
SELECTION-SCREEN END OF BLOCK B_02.
PARAMETERS:

P_ALV
P_REL
P_ALM_R
P_STCK

RADIOBUTTON GROUP G1 DEFAULT 'X',


RADIOBUTTON GROUP G1,
AS CHECKBOX,
AS CHECKBOX DEFAULT 'X'.

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

7.5. Validacin de campos de pantalla e inicializacin


En esta seccin del programa se deben efectuar las validaciones de todos los campos de la pantalla de
seleccin y realizar las inicializaciones de variables si corresponde. El formato es el que se muestra a
continuacin:
*----------------------------------------------------------------------*
* INICIALIZACION
*----------------------------------------------------------------------*
INITIALIZATION.
PERFORM INICIALIZACION.
*----------------------------------------------------------------------*
* VALIDACION DE PARAMETROS DE PANTALLA
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_WAERS.
PERFORM HELP_WAERS USING P_WAERS.
AT SELECTION-SCREEN ON BLOCK B_01.
AT SELECTION-SCREEN ON P_BUKRS.

- 13 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------AT SELECTION-SCREEN.

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.

7.6. Rutina principal del programa


Esta seccin del programa representa el cuerpo principal de cdigo y debe utilizarse para la extraccin de la
informacin en las bases de datos o en su defecto codificar el nudo del desarrollo.
El formato es el que se muestra a continuacin:
*----------------------------------------------------------------------*
* START-OF-SELECTION
*----------------------------------------------------------------------*
* BDL: Base de datos lgica utilizada N pantalla
*----------------------------------------------------------------------*
START-OF-SELECTION.
* Realizar aqu todos los procesos necesarios para recuperar la
* informacin de la bases de datos, ya sea utilizando una BDL o no.
* Tratar de agrupar cdigo en subrutinas.
* La informacin debe tratar de almacenarse en tablas internas.
GET BKPF.
GET BSEG.
GET BKPF LATE.
CLEAR GWA_XXXX.
MOVE-CORRESPONDING BKPF TO GWA_XXXX.
MOVE-CORRESPONDING BSEG TO GWA_XXXX.
APPEND GWA_XXXX TO GDT_XXXX.
* Si no usas BDL incluir aqu mtodos o subrutinas
GO_APLICACION->GET_DATOS( IMPORTING EDT_DATA = GDT_DATA ).
PERFORM ALV.

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 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------7.7. Tratamiento de los datos obtenidos
Esta seccin del programa debe ser utilizada para codificar el tratamiento de los datos obtenidos en la
seccin anterior. El formato es el que se muestra a continuacin:
*----------------------------------------------------------------------*
* FIN DE SELECCION DE DATOS
*----------------------------------------------------------------------*
END-OF-SELECTION.
* Debe verificarse que la bsqueda de la informacin en las
* bases de datos fue exitosa. Si esto no fuera as, deber terminarse
* el programa enviando un mensaje de aviso al usuario, para que revise
* la seleccin efectuada
IF GDT_XXXX[] IS INITIAL.
MESSAGE S000(ZXX) DISPLAY LIKE 'E'.
STOP.
ENDIF.
* en esta seccin debe codificarse la parte del proceso referida a
* la generacin de la salida, ya sea un reporte, un call transaction o
* o alguna otra funcionalidad.
* Debe tratar de agruparse el cdigo en subrutinas.
PERFORM SUBRUTINA USING GS_CAMPO1 GI_CAMPO2.
PERFORM DATOS.

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.)

7.8. Eventos de control


Esta seccin del programa debe ser utilizada para codificar todos los posibles eventos de control, que son
aquellos que se disparan una vez generada la salida. El formato es el que se muestra a continuacin:
*----------------------------------------------------------------------*
* EVENTOS DE CONTROL
*----------------------------------------------------------------------*
TOP-OF-PAGE.
END-OF-PAGE.
TOP-OF-PAGE DURING LINE-SELECTION.
AT LINE-SELECTION.
AT PFNN.
AT USER-COMMAND.

Donde:
No es necesaria la codificacin de la totalidad de los eventos sino solamente los estrictamente necesarios.
No tienen un orden establecido.

- 15 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------7.9. Subrutinas internas
Es la ltima seccin del programa. Deben codificarse en esta todas las subrutinas internas que son
llamadas en el programa. El formato es el que se muestra a continuacin:
*----------------------------------------------------------------------*
* SUBRUTINAS
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* Form INICIALIZACION
*----------------------------------------------------------------------*
* Documentar aqu la funcionalidad de la subrutina
*
*----------------------------------------------------------------------*
FORM INICIALIZACION.
ENDFORM.

"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 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------8. Convencin para nombres internos ABAP4/SAP
Se detalla a continuacin la nomenclatura que debe respetarse en la codificacin de programas ABAP. Se
recomienda incluir dentro del nombre (en la parte libre) el mismo nombre de variable que el campo de SAP.
Ej.: GS_BUKRS
Objeto de
programacin

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_<nombre del bloque>

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 -

Sistemas - rea de Codificacin


------------------------------------------------------------------------------------------------------------------------------------------------

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_<nombre tipo tabla>

gtyt_makt

estndar

gtyd_<nombre tipo tabla>

gtyd_makt

sorted

gtys_<nombre tipo tabla>

gtys_makt

hashed

gtyh_<nombre tipo tabla>

gtyh_makt

sin tipo

ltyt_<nombre tipo tabla>

ltyt_makt

estndar

ltyd_<nombre tipo tabla>

ltyd_makt

sorted

ltys_<nombre tipo tabla>

ltys_makt

hashed

ltyh_<nombre tipo tabla>

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 -

Sistemas - rea de Codificacin


------------------------------------------------------------------------------------------------------------------------------------------------

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 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------9. RECOMENDACIONES GENERALES SOBRE FORMATO
En los puntos siguientes se detallan las normas generales que rigen para el formato del entorno de
desarrollo y que pueden formar parte de un programa ABAP.

9.1. Subrutinas (FORMS)


Las subrutinas internas en el programa ABAP deben utilizarse en los siguientes casos:
Para englobar partes de cdigo compleja y extensa.
Para hacer ms legible el programa y brindar una mayor facilidad de mantenimiento.
Para definir un proceso una sola vez en el programa, el cual es llamado desde diferentes lugares dentro
del mismo programa ABAP
Los FORMS deben respetar el siguiente formato:
La cantidad de lneas de cdigo no debe tener ms de una pgina de longitud en promedio.
Su nombre y el nombre de los parmetros deben respetar lo descrito anteriormente en la Convencin
para nombres internos ABAP/4
Debe incluir comentarios sobre la funcionalidad principal y parmetros de entrada y salida.

9.2. Programas INCLUDE


Los programas INCLUDE (tipo I en sus atributos), pueden utilizarse en los siguientes casos:
Para estructurar programas con muchas lneas de cdigo.
Para generar cdigo re-utilizable en otros programas.
Para definir FORMS utilizables por otros programas (Ejemplo: Rutinas de programas BATCH-INPUT).
Si existe un gran nmero de declaracin de data necesaria como parte del programa, debe separarse las
declaraciones dentro de un INCLUDE. El nombre del include debe ser el mismo del programa con el sufijo
TOP. Los siguientes includes debern ser utilizados en los programas a implementarse.
Include
ZMSTNNNN_TOP

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.

La codificacin de INCLUDE debe respetar los convenios de nombres internos y estndares de


programacin descritos en los puntos anteriores. Los nombres de los includes tienen como prefijo el nombre
del programa, cuya nomenclatura ser tratada ms adelante.

- 20 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------9.3. Cabeceras de listados
Todos los programas ABAP desarrollados que emitan un reporte (Report List WRITE), deben mantener el
siguiente formato de salida:
*----------------------------------------------------------------------------------------------------------------------------------------------XXXXXXXXXXXXXXXXXXXX (1)
XXXXXXXXXXXXXXXXXXXXXXXXXX (2)
99/99/9999 (3)
XXXXXXXX (4)
XXXXXXXXXXXXXXXX (5)
Pag.: 9999 (6)
XXXXXXX (7)
XXXXXXXXXXXXXXXXXX (7)
XXXXXXXXX (7)
XXXXXXXX (7)
*----------------------------------------------------------------------------------------------------------------------------------------------Donde:
(1) Nombre de la sociedad. Corresponde al campo T001-BUKRS.
(2) Ttulo del reporte. Debe mostrarse en letra mayscula.
(3) Fecha de emisin del reporte. Mostrar en formato DD/MM/AAAA.
(4) Nombre del reporte. Corresponde al campo de sistema SY-REPID.
(5) Subttulo del listado. Es opcional y en caso de utilizarse debe ser mostrado en letra mayscula.
(6) Nmero de pgina.
(7) Cabeceras de columnas. Mostrar en letras maysculas.
Estos campos en la cabecera del reporte deben figurar siempre, independientemente de si se utilizan los
ttulos standard de los elementos de texto o si se los codifica manualmente mediante el evento TOP-OFPAGE.

9.4. Textos de seleccin


Los textos de seleccin correspondientes a los PARAMETERS y SELECT-OPTIONS declarados en el
programa deben ser incorporados en letra minscula.

9.5. Smbolos de texto


Podrn utilizarse en letra minscula o mayscula dependiendo del lugar donde se mostrar, de acuerdo a
las normas que figuran en este documento. Deben ser utilizados en todas las sentencias WRITE, evitando
colocar en las mismas literales.

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 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------9.7. Dynpros, Status y Ttulos
Para la creacin de cada uno de estos objetos, la nomenclatura a seguir ser nmeros correlativos de 4
dgitos con intervalos de 100 en 100, es decir, 0100, 0200, etc., guardando asociacin entre los 3 objetos
mediante el mismo nmero de codificacin.
Por ejemplo a la dynpro 0100 est asociada el status 0100 y el ttulo 0100.
De darse el caso que dos dynpros estn reutilizando algn objeto en particular, se debe, mantener la
integracin en cdigo de los tres objetos, es decir,
Dynpro: 0100
Dynpro: 0200
Dynpro: 0300

->
->
->

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.

9.8. Status GUI


En su diseo debe tenerse en cuenta lo siguiente:
Utilizar hasta donde sea posible los defaults propuestos por SAP en lo que respecta a las funciones y
mens.
Los ttulos de la superficie deben ser completados en minscula y deben ser llamados igual que la
superficie.
En toda superficie debe asegurarse que figuren las funciones de BACK, CANCEL y EXIT
El texto de los pulsadores creados debe estar en letra minscula.

- 22 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------9.9. Patrones
Se llevar a cabo el manejo de patrones, para mantener una misma organizacin en el diseo de nuestros
programas. Para hacer uso de ello, dentro del editor ABAP, hacer clic en MODELO, clic en Otro patrn e
ingresar uno de los siguientes valores:
PAT_GEN: Plantilla de encabezado inicial
PAT_TOP: Plantilla de declaraciones globales.
PAT_SEL: Plantilla de parmetros de seleccin.
PAT_MAI: Plantilla de validaciones y eventos del programa principal.
PAT_MOD: Plantilla de encabezado para modificaciones

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 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------10. ASEGURAMIENTO DE CALIDAD EN DESARROLLOS ABAP
En los puntos siguientes se detallan algunas recomendaciones a tomar en cuenta en la programacin.
10.1. Codificacin y Presentacin
Consideraciones

Ejemplos

Nuevas formas de declarar las sentencias en ABAP ECC6.0


Incorrecto:
No usar LIKE como referencia a tipos de diccionario, DATA: GWA_KNA1 LIKE KNA1.
Correcto:
usar TYPE.
DATA: GWA_KNA1 TYPE KNA1.
Incorrecto:
TYPES: GS_X,
Se debe de especificar la longitud de la variable que
GP_Y TYPE P.
Correcto:
se est definiendo.
TYPES: GS_X TYPE C LENGTH 1,
GP_Y TYPE P LENGTH 8 DECIMALS 0.
Incorrecto:
Los parmetros que se pasan a un mtodo debe
METHODS METH IMPORTING P1 EXPORTING P2.
tener asignado un tipo, si no se sabe qu tipo va a
Correcto:
tener asignado se declara como type ANY.
METHODS METH IMPORTING P1 TYPE ANY EXPORTING P2 TYPE ANY.
Incorrecto:
CALL FUNCTION FUN IMPORTING P = SY-SUBRC.
No est permitido transferir directamente los campos
Correcto:
del sistema como parmetro, sino a travs de una
DATA: LI_SUBRC TYPE SY-SUBRC.
variable.
LI_SUBRC = SY-SUBRC.
CALL FUNCTION FUN IMPORTING P = LI_SUBRC.
Incorrecto:
La sentencia TABLES no est permitido en ABAP
TABLES: BKPF.
objects, porque es ambigua. Una forma de
Correcto:
referenciarlo es a travs de un work area.
DATA: GWA_BKPF TYPE BKPF.
Incorrecto:
No est permitido el uso de Field-Symbols si es que
FIELD-SYMBOLS: <G_VALUE>.
no tiene un tipo de asignacin. En ABAP objects la
Correcto:
adicin type al field-symbols es obligatorio.
FIELD-SYMBOLS: <G_VALUE> TYPE ANY.
Incorrecto:
RANGES: GR_VKORG FOR KNA1-VKORG.
El uso de RANGES no est permitido.
Correcto:
DATA: GR_VKORG TYPE RANGE OF KNA1-VKORG.
Incorrecto:
DATA: BEGIN OF GT_KNA1 OCCURS 0,
KUNNR TYPE KNA1-KUNNR,
NAME1 TYPE KNA1-NAME1,
La declaracin con OCCURS no est permitida.
END OF GT_KNA1.
Si se requiere memoria inicial se puede especificar Correcto:
agregando la sentencia INITIAL SIZE.
TYPES: BEGIN OF GTY_KNA1 ,
KUNNR TYPE KNA1-KUNNR,
NAME1 TYPE KNA1-NAME1,
END OF GTY_KNA1.
DATA: GDT_KNA1 TYPE STANDARD TABLE OF GTY_KNA1 INITIAL SIZE 0.

Si utilizas work areas para hacer LOOP a la tabla


interna, no est permitido hacer CLEAR dentro del
LOOP, ya que esta borrara todo el contenido de la
tabla interna.

Las siguientes sentencias en relacin con las tablas


internas estn prohibidas ya que no est permitido
trabajar directamente con la cabecera de la tabla
interna; por el contrario ahora se utilizan work areas
o field-symbols.

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 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------APPEND GT_BKPF
INSERT GT_BKPF
MODIFY GT_BKPF
Correcto:
INSERT GWA_BKPF INTO TABLE GT_BKPF.
COLLECT GWA_BKPF INTO GT_BKPF.
READ TABLE GT_BKPF INTO GWA_BKPF/ ASSIGNING <G_BKPF>...
MODIFY TABLE GT_BKPF FROM GWA_BKPF
MODIFY GT_BKPF FROM GWA_BKPF WHERE
DELETE TABLE GT_BKPF FROM GWA_BKPF.
LOOP AT GT_BKPF INTO GWA_BKPF/ASSIGNING <G_BKPF>
APPEND GWA_BKPF TO GT_BKPF
INSERT GWA_BKPF
MODIFY GWA_BKPF
Incorrecto:
SELECT FROM VBAK.
INSERT VBAK.
UPDATE VBAK.
DELETE VBAK.
MODIFY VABK.
Correcto:
Las siguientes sentencias en relacin con el acceso
DATA: GWA_VBAK TYPE VBAK.
a la base de datos estn prohibidas.
SELECT FROM VBAK INTO GWA_VBAK .
Se debe de trabajar utilizando work areas.
INSERT VBAK FROM GWA_VBAK.
OR INSERT INTO VBAK VALUES GWA_VBAK.
UPDATE VBAK FROM GWA_VBAK.
OR UPDATE VBAK SET . . .
DELETE VBAK FROM GWA_VBAK.
OR DELETE FROM VBAK WHERE
MODIFY VBAK FROM GWA_VBAK.
Valores Fijos (HARDCODE)
Incorrecto:
SELECT * FROM marc WHERE werks EQ 5000
IF vbfa-vbtyp_n EQ J
w_cost = mbew-strps * 1.2.
Los valores no deben ser fijados en el cdigo fuente. Correcto: Para evitar fijar valores, se pueden utilizar parmetros de seleccin o
la tabla de constantes. Cuando no es posible evitar fijar valores, utilizarlos como
La existencia de valores fijos dentro del programa constantes globales.
dificulta
su
mantenimiento,
portabilidad
y
CONSTANTS: gc_constante TYPE n LENGTH 4 VALUE 1234.
reutilizacin.
DATA: gn_global TYPE n LENGTH 4, ...
Adems, demuestra desprolijidad en el diseo.
IF wn_global NE gc_constante ..
Excepciones:
Programas de conversin que sern utilizados solo una vez.
Eventos

Los eventos (END-OF-SELECTION, TOP-OFPAGE, etc.) debern aparecer, en lo posible, en el


cdigo, en el orden en que sern utilizados. Si algn
evento no estuviese siendo utilizado, deber ser
retirado.

Correcto:
INITIALIZATION.
...
AT SELECTION-SCREEN.
...
START-OF-SELECTION.
PERFORM cargar_datos.
PERFORM procesar_datos.
PERFORM imprimir_datos.

END-OF-SELECTION.

Todas las Subrutinas (FORMs) sern colocadas FORM cargar_datos.


despus del cdigo principal en un INCLUDE de
FORMs. Los FORMs debern ser colocados, en lo ENDFORM
posible, en el orden en que sern llamados.
FORM procesar_datos.

ENDFORM
FORM imprimir_datos.

ENDFORM

- 25 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------Subrutinas (FORM)
El nombre de la subrutina deber ser descriptivo, y
comenzar con un verbo en infinitivo + el objeto.
Por ejemplo:
PERFORM buscar_proveedor.
PERFORM grabar_pedido.
PERFORM calcular_iva_factura.

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 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------Incorrecto:
Esto permite simplificar el desarrollo al poder
manejarlas como una nica estructura (asignaciones DATA:
con move-corresponding, inicializacin, pase de
LS_BUKRS_AUX LIKE BKPF-BUKRS, "SOCIEDAD
parmetros, etc.).
LS_BELNR_AUX LIKE BKPF-BELNR, "DOCUMENTO SAP
LN_GJAHR_AUX LIKE BKPF-GJAHR. "EJERCICIO
Correcto:
TYPES: BEGIN OF LTY_ASIENTO_AUX,
BUKRS TYPE BKPF-BUKRS, "SOCIEDAD
BELNR TYPE BKPF-BELNR, "DOCUMENTO SAP
GJAHR TYPE BKPF-GJAHR, "EJERCICIO
END OF LTY_ASIENTO_AUX.
DATA: LWA_ASIENTO_AUX TYPE LTY_ASIENTO_AUX.
MOVE (asignaciones)
Incorrecto:
TYPES: BEGIN OF LTY_STOCK,
MATNR TYPE MATNR, " CDIGO
WERKS TYPE WERKS, " CENTRO
LGORT TYPE LGORT, " ALMACN
LABST TYPE LABST, " STOCK
END OF LTY_STOCK.
DATA: lt_stock_mat TYPE lty_stock OCCURS 0 WITH HEADER LINE.
DATA: lwa_stock_mat LIKE mard.
...
READ TABLE lt_stock_mat INDEX 1.
IF sy-subrc EQ 0.
Utilizar sentencia MOVE en vez de MOVE- MOVE-CORRESPONDING LT_STOCK_MAT TO LWA_STOCK_MAT...
CORRESPONDING siempre que sea posible.
ENDIF.
...
En la definicin de datos se debe de usar type en
vez de like, tambin se debe evitar los OCCURS 0, Correcto:
with header line y trabajar con work reas, field TYPES: BEGIN OF LTY_STOCK,
symbols.
MATNR TYPE MATNR, " CDIGO
WERKS TYPE WERKS, " CENTRO
LGORT TYPE LGORT, " ALMACN
LABST TYPE LABST, " STOCK
END OF LTY_STOCK.
DATA: LT_STOCK_MAT TYPE STANDARD TABLE OF LTY_STOCK.
DATA: LWA_STOCK LIKE LINE OF LT_STOCK_MAT.
DATA: LWA_STOCK_MAT TYPE MARD.
...
READ TABLE LT_STOCK_MAT INTO LWA_STOCK INDEX 1.
IF SY-SUBRC EQ 0.
MOVE: lwa_stock-matnr to lwa_stock_mat-matnr,
lwa_stock-werks to lwa_stock_mat-werks,
lwa_stock-lgort to lwa_stock_mat-lgort,
lwa_stock-labst to lwa_stock_mat-labst.
ENDIF.
Mensajes
Incorrecto:
IF sy-subrc NE 0.
WRITE: 'Error en la bsqueda'.
ENDIF.
Todos los mensajes de error
implementados va MESSAGE IDs.

debern

ser

Correcto:
REPORT xxx MESSAGE-ID ZMM01.

IF sy-subrc NE 0.
MESSAGE E001.
ENDIF.

PARAMETROS / SELECTION SCREEN


Evite utilizar valores DEFAULT en los campos parameter / selection screen. Es preferible utilizar variantes.
Incluya Ayuda de Bsqueda (MATCHCODES) cuando sea conveniente.
Separe los grupos de parmetros relacionados en BLOCKS (frame) cuando sea conveniente.
Siempre reemplace el nombre que genera por default el parmetro en pantalla por un texto descriptivo (TEXTO DE SELECCIN).

- 27 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------Textos (Literales)
Incorrecto:
FORM titular_columnas.
WRITE 'Nro.Cliente' to lwa_titulos-col01.
WRITE 'Razn Social' to lwa_titulos-col02.
WRITE 'CUIT'
to lwa_titulos-col03.
Para todos los textos utilizados a lo largo del ENDFORM.
programa, utilice TEXT ELEMENTs.
Correcto:
FORM titular_columnas.
WRITE text-001 to lwa_titulos-col01.
WRITE text-002 to lwa_titulos-col02.
WRITE text-003 to lwa_titulos-col03.
ENDFORM.
Cdigo Muerto
No debe dejarse cdigo muerto injustificado en los
programas, ya que es desprolijo y dificulta el
* Se reemplaza el parmetro de salida por una variable auxiliar tipo N.
seguimiento y el debugging.
CALL FUNCTION CONVERSION_EXIT_ALPHA_OUTPUT
EXPORTING
Cuando est justificado, dejar indicado con
input = t_stock_mat-matnr
comentario el motivo.
IMPORTING
*
output = t_stock_mat-matnr. DELETE @001
En el caso de modificaciones al programa original,
output = ln_matnr_aux. INSERT @001
dejar comentado el cdigo reemplazado/corregido,
con la correspondiente referencia de modificacin.
Comentarios (1)
Todo el programa debe estar comentado, para facilidad de seguimiento, interpretacin, mantenimiento y documentacin.
Los comentarios tienen sentido cuando explican y clarifican cada parte de la lgica del programa, no la exacta descripcin de lo que
hacen los comandos.
Los comentarios debern estar en minscula. Puede comenzarse con mayscula cada frase.
El nivel de comentarios debe ser congruente en todo el programa. Evitar caer en la prctica de comentar todo el programa al final, una
vez codificado. Esto genera que los comentarios no sean claros, se pierde la idea global del programa, y es proclive a errores.
Adems, el resultado es pobre, porque se comenta solo para cumplir y se pierde el objetivo de ayudar a entender el desarrollo del
programa, as como tambin luego su mantenimiento y documentacin.
Comentarios (2)
Correcto:
* Definicin de Tablas
TABLES: mara.
" Maestro de materiales
* Definicin de constantes
CONSTANTS: gc_long TYPE i VALUE 70. " Long. lnea sep.
* Declaracin de Tipos
Deben comentarse todas las variables declaradas a TYPES: begin of gty_stockmat,
la derecha de la variable con .
matkl type matkl, " Grupo de Artculos
matnr type matnr, " Numero de Material
maktx type maktx, " Descripcin del Material
labst type labst, " Stock Libre
end of gty_stockmat.
* Definicin de variables globales
DATA: gi_lines type i. " Cant. reg. encontrados
Writes
Incorrecto:
WRITE T_LOG-NETWR.

Cuando se lista un campo numrico que presentaba


decimales es necesario especificarlos por medio de
Correcto:
una variable, adems de indicar la moneda si
DATA: L_WAERK TYPE VBRK-WAERK.
guarda valores monetarios.
WRITE LWA_LOG-NETWR CURRENCY L_WAERK UNIT 3.

- 28 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------Estructuras
Incorrecto:
DATA: BEGIN OF GT_BDCTAB OCCURS 0.
INCLUDE STRUCTURE BDCDATA.
No incluir una estructura de una tabla como parte de DATA: END OF GT_BDCTAB.
la definicin de una segunda tabla.
Correcto:
TYPES: GTY_BDCDATA TYPE BDCDATA.
DATA: GDT_BDCTAB TYPE STANDARD TABLE OF GTY_BDCDATA.

10.2. Performance
Consideraciones

Ejemplos

Consultas a Base de Datos (SELECTS)


Incorrecto:
Siempre que precise buscar solo una lnea de una SELECT matnr werks lgort labst FROM mard
Tabla o View, use SELECT SINGLE * en lugar de INTO CORRESPONDING FIELDS OF TABLE lt_stock_mat
SELECT *. ( SELECT SINGLE * accede una vez a WHERE matnr IN s_matnr.
la base de datos )
EXIT.
ENDSELECT.
Especifique siempre los campos de la seleccin en
lugar de usar SELECT *
Correcto:
SELECT SINGLE matnr werks lgort labst FROM mard
Al disear una tabla Z, trate de evitar que tenga
INTO lwa_stock_mat
muchos ndices.
WHERE matnr IN s_matnr.
Siempre especifique las condiciones en la clusula Incorrecto:
WHERE en lugar de testearlas con el comando SELECT * FROM mard
CHECK.
INTO CORRESPONDING FIELDS OF TABLE lt_stock_mat
WHERE matnr IN s_matnr.
Evite utilizar ORDER BY, a menos que exista un
ndice en estos campos.
Correcto:
SELECT matnr werks lgort labst
Utilice las funciones de clculo (MAX, SUM, MIN....)
FROM mard
en el comando SELECT en lugar de calcular los
INTO TABLE lt_stock_mat
valores aparte. Esto minimiza el volumen de WHERE matnr IN s_matnr.
transferencia de datos y utiliza los algoritmos
optimizados de la base de datos.
Incorrecto:
Siempre testear SY-SUBRC despus de un l_msgnr_max = -1.
SELECT MSGNR FROM T100 INTO LWA-MSGNR
acceso a la Base de Datos.
WHERE ARBGB EQ 00
SELECT (para Transparent y Pool Tables): la IF LWA-MSGNR > l_msgnr_max.
l_msgnr_max = LWA-MSGNR.
clusula WHERE debe contener, preferentemente,
los campos claves y dems campos que puedan ENDIF.
ENDSELECT.
restringir la consulta.
SELECT (para Cluster Tables): solo los campos Correcto:
claves deben ser especificados en la clusula SELECT MAX (MSGNR) FROM T100 INTO l_msgnr_max
WHERE. Los dems deben ser chequeados a WHERE ARBGB EQ 00
travs del comando CHECK.
Incorrecto:
Evite
siempre
utilizar
ciclos
SELECT
SELECT matnr werks lgort labst
FROM mard
ENDSELECT. Es preferible realizar un SELECT
INTO lt_stock_mat
INTO TABLE <tabla interna> y un LOOP AT <tabla
interna> - ENDLOOP trabajando conjuntamente con WHERE matnr IN s_matnr.
el work rea. Esto optimiza el acceso a la base de
IF lt_stock_mat-labst NE 0.
datos y evita problemas de debugg en algunas
APPEND lt_stock_mat.
versiones de SAP R/3. En general, reduce el tiempo
ELSE.
de procesamiento en los debugg.
APPEND lt_stock_mat_nostock.
ENDIF.
Evitar siempre reiterar el acceso a un mismo registro
ENDSELECT.
en la base de datos, as sea con un select single.
El uso de los primeros n campos de un ndice en la Correcto:
clusula WHERE de un SELECT, proporciona una SELECT matnr werks lgort labst
FROM mard
bsqueda ms rpida.
INTO TABLE lt_stock_mat
Es importante utilizar la clusula WHERE en el WHERE matnr IN s_matnr.
comando SELECT. Siempre que la clave primaria

- 29 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------no pueda ser utilizada, los ndices podrn ayudar.

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.

En caso de tener que repetir bsquedas sobre


ENDLOOP.
tablas, es conveniente seleccionar los datos una
sola vez sobre una tabla interna, y trabajar sobre
SORT GT_TABLA2 BY CAMPO1 ASCENDING.
ella las veces que sea necesario.
LOOP AT GT_TABLA2.

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 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------APPEND LINES OF GT_VBAK TO GT_AUX.
Incorrecto:
GWA-DATE = SY-DATUM.
Si se desea modificar un campo de una tabla MODIFY GT_ITAB FROM GWA INDEX 1.
interna, es ms eficiente modificarlo especificando el
Correcto:
campo.
GWA-DATE = SY-DATUM.
MODIFY GT_ITAB FROM GWA INDEX 1 TRANSPORTING DATE.
Incorrecto:
READ TABLE GT_TAB INDEX 1 INTO GWA_PREV_LINE.
LOOP AT GT_TAB FROM 2 INTO GWA.
IF GWA = GWA_PREV_LINE.
DELETE GT_TAB.
Para borrar entradas duplicadas dentro de una tabla ELSE.
interna es mejor ordenar la tabla y borrar los
GWA_PREV_LINE = GWA.
duplicados y no hacerlos dentro de un LOOP.
ENDIF.
ENDLOOP.

Se debe evitar el LOOP para averiguar el nmero de


registros de una tabla.

Se deben evitar los SELECT anidados mientras dan


lugar a un volumen grande de accesos de base de
datos (dependientes en el tamao de tablas).
En lugar de ello utilizar FOR ALL ENTRES.

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.

En ocasiones tenemos tablas internas muy pesadas


y debemos de recorrer una dentro de otra,
suponiendo que contamos con dos tablas internas
Correcto:
gt_tab1 en donde hay m entradas y gt_tab2 donde
LI_INDX = 1.
hay n entradas, el nmero de vueltas sera m x n.
LOOP AT GT_TAB1 INTO LWA_TAB1.
Incluso, aunque hayamos puesto la clusula
READ TABLE GT_TAB2 WITH KEY K = GT_TAB1-K
WHERE.
BINARY SEARCH TRANSPORTING NO FIELDS.
IF SY-SUBRC EQ 0.
En estos casos, donde adems ambas tablas
LI_INDX = SY-TABIX.
tengan los mismos campos clave, se recomienda
LOOP AT GT_TAB2 INTO LWA_TAB2 FROM LI_INDX.
usar un ndice interno para empezar la bsqueda en
IF LWA_TAB2-K <> LWA_TAB1-K.
la segunda tabla, de esta forma se reducir el
EXIT.
nmero de vueltas.
ENDIF.
" ...
ENDLOOP.
ENDIF.
ENDLOOP.
Incorrecto:
* Tabla GT_TAB tiene 100 entradas.
Siempre que sea posible, utilice operaciones con
LOOP AT GT_TAB.
arreglos en lugar de operaciones sobre una fila. La
INSERT INTO VERI_CLNT VALUES GT_TAB.
frecuente comunicacin entre el programa de
ENDLOOP.
aplicacin y el sistema de la base de datos produce
Correcto:
una considerable baja en la performance.
* Tabla GT_TAB tiene 100 entradas.
INSERT VERI_CLNT FROM TABLE GT_TAB.
Incorrecto:
READ TABLE GT_TAB WITH KEY k = X.
Si la tabla interna tiene muchas entradas, en una
bsqueda lineal a travs de todas las entradas el
Correcto:
tiempo consumido es bastante largo. Trate de
SORT GT_TAB BY K.
mantener la tabla ordenada y usar bsqueda binaria.
..
READ TABLE GT_TAB INTO LWA_TAB WITH KEY k = X BINARY SEARCH.

- 31 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------10.3. Modularizacin y reutilizacin
Consideraciones

Ejemplos

Modularizacin
Los
programas
deben
modularizados completamente.

estar

Esto significa que el programa principal


consistir de una serie de subrutinas
(mdulos), las cuales resumirn los
procesos principales del programa.
A su vez, cada, subrutina, se dividir en
forma coherente y balanceada en nuevas
subrutinas, que dividirn nuevamente el
mdulo
en
subprocesos.
Y
as
sucesivamente.

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

un problema grande en problemas


ENDFORM.
pequeos.

Facilita la compresin y el seguimiento, y


es clave para el mantenimiento de un
programa.
Los
programas
correctamente
modularizados y parametrizados facilitan
su reutilizacin
Parametrizacin de mdulos
Solamente se debern declarar variables
globales
cuando
realmente
este
justificado.

Recomendable:

Nunca debern declararse variables


DATA: gwa_stock_mat TYPE mard.
globales que solo sean utilizadas luego
dentro de algn mdulo.
START-OF-SELECTION.
PERFORM buscar_datos_stock changing gwa_stock_mat.
Utilizar pase de parmetros entre
PERFORM imprimir_datos_stock using gwa_stock_mat.
mdulos. (USING, CHAGING, TABLES).
En este caso la variable gwa_stock_mat es global, si bien dentro de las rutinas la variable
Incluso cuando no fuera necesario el
esta dentro de su mbito de incumbencia y podra ser referenciada, colocar el parmetro
pase de parmetros desde el punto de
clarifica el seguimiento, se observa entonces que el form BUSCAR_DATOS_STOCK
vista tcnico, siempre es recomendable
modificar esa variable, y el form IMPRIMIR_DATOS_STOCK la utilizar.
indicarlo, de manera que sea ms claro
entender que la subrutina llamada, utiliza
o modifica cierta variable.
Balanceo de la estructura de un programa
Incorrecto:
START-OF-SELECTION.
PERFORM CARGAR_DATOS TABLES GT_DATA.
PERFORM IMPRIMIR_CABECERA TABLES GT_DATA.
PERFORM IMPRIMIR_DETALLE TABLES GT_DATA.
Los programas se debern estructurar de
Correcto:
manera que idnticos niveles de la
START-OF-SELECTION.
estructura conserven el mismo nivel
PERFORM CARGAR_DATOS TABLES GT_DATA.
funcional.
PERFORM IMPRIMIR_DATOS TABLES GT_DATA.
FORM IMPRIME_DATOS TABLES PT_DATA.
PERFORM IMPRIMIR_CABECERA TABLES GT_DATA.
PERFORM IMPRIMIR_DETALLE TABLES GT_DATA.
ENDFORM.

- 32 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------Reutilizacin
Se deber tener en cuenta al momento
del
diseo
del
programa,
qu
componentes del mismo podrn ser
reutilizados en desarrollos similares.
Para esto debe estar el desarrollo
correctamente
modularizado
y Recomendable:
parametrizado.
Tipos reutilizables, grabarlos en TYPE-POOLS.
Rutinas sin parmetros son muy difciles
de reutilizar.
Definiciones de variables reutilizables, grabarlos en INCLUDES
La reutilizacin mejora los tiempos de Rutinas (FORMs) reutilizables, grabarlos en ROUTINES-POOL o INCLUDES.
desarrollo, simplifica el proceso y evita
reinventar la rueda constantemente.
Rutinas (FORMs) reutilizables, con parmetros de entrada y salida, grabarlos en
MODULOS DE FUNCIONES.
Es fundamental tener en cuenta todos las
dems
reglas
y
estndares
de
codificacin en ABAP para poder
convertir un programa o parte del mismo
en material reutilizable y aprovechable.
Un
programa
con
errores
de
performance, o de codificacin,
no
puede ser reutilizado.
Un programa no modularizado o no
parametrizado o con harcoding, no puede
ser reutilizado.
Un programa mal presentado o
desprolijo, es muy difcil analizarlo para
determinar su reutilizacin potencial.

- 33 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------10.4. Verificacin Ampliada
Antes de transportar un programa al ambiente QAS, se debe verificar la sintaxis del mismo utilizando la
herramienta Verificacin Ampliada.
Se puede acceder a esta herramienta a travs de las siguientes opciones:
A travs de la tx SLIN
A travs del mismo programa, haciendo clic derecho en el programa -> Men "Verificar" -> Opcin
"Verificacin Ampliada".
Al ingresar, aparecer una pantalla con unas opciones marcadas por defecto, marcar adicionalmente las
opciones: Cadenas caracteres y Sentencias obsoletas. Presionar F8.
Con esta herramienta se podr verificar si el programa contiene errores o advertencias en las diferentes
secciones y componentes del mismo.
Nota: Ver imgenes: 10.4.a y 10.4.b.

Existe adems otra herramienta similar llamada CODE INSPECTOR.


El Inspector de cdigo es una herramienta para el control de objetos de repositorio que evala rendimiento,
seguridad, sintaxis, y adhesin a nombre de convenciones.
Se puede acceder a esta herramienta a travs de la siguiente opcin:
Clic derecho en el programa -> Men "Verificar" -> Opcin "Code Inspector".
Nota: Ver imagen: 10.4.c.

- 34 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------10.5. Puntos a revisar en una OT WB previo al pase a PRD
El objetivo de este punto es asegurar que los desarrollos a transportar a PRD: cumplan los estndares,
sean programas seguros, se eviten errores tcnicos en PRD y sean programas giles.

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 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------11. NOMENCLATURA DE OBJETOS DE REPOSITORIO SAP
TRANSACCION
Los nombres de estos objetos tendrn la siguiente forma Z[MS][T][NNN]
Donde:
Z
MS
T
NNN

:
:
:
:

Por definicin SAP


Mdulo SAP (Ver tabla 1)
Tipo de Programa (ver tabla 2)
Correlativo numrico

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

:
:
:
:

Por definicin SAP


Mdulo SAP (ver tabla 1)
Tipo de programa (ver tabla 2)
Correlativo numrico

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 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------INCLUDE GENRICO
Si se crea un include con rutinas generales que va a ser utilizado por cualquier programa, se utilizar la
siguiente forma Z[MS][IN_[XX]
Donde:
Z
MS
IN
XX

:
:
:
:

Por definicin SAP


Mdulo SAP (ver tabla 1)
Constante
Descripcin literal

Ejm: Include global de Macros ZBCIN_MACRO

COMPOSITE ENHANCEMENT IMPLEMENTATION


Los nombres de estos objetos tendrn la siguiente forma Z[MS]CE_[XX]
Donde:
Z
MS
CE
XX

:
:
:
:

Por definicin SAP


Mdulo SAP (ver tabla 1)
Constante
Descripcin literal

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

:
:
:
:
:

Por definicin SAP


Mdulo SAP (ver tabla 1)
Constante
Cdigo de transaccin que se est ampliando
Descripcin literal

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:

Si afecta a VA01, VA02 y VA03


Si afecta a MIGO y MB01

=> ZSDEI_VA0X_SAVE_POPUP
=> ZMMEI_MIGO_MB01_VALIDA

- 37 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------TABLA
Los nombres de estos objetos tendrn la siguiente forma Z[MS]T_[XX]
Donde:
Z
MS
T
X...X

:
:
:
:

Por definicin SAP


Mdulo SAP (ver tabla 1)
Constante
Descripcin literal

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
:

Por definicin SAP


Secuencia numrica de 2 caracteres.

Ejm: Z01.
Nota:
Al crear el ndice Z por la tx SE11, se debe elegir la opcin Crear ndice extensin.

- 38 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------VISTA
Los nombres de estos objetos tendrn la siguiente forma Z[MS]V_[XX]
Donde:
Z
MS
V
X...X

:
:
:
:

Por definicin SAP


Mdulo SAP (ver tabla 1)
Constante
Descripcin literal

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

:
:
:
:

Por definicin SAP


Mdulo SAP (ver tabla 1)
Constante
Descripcin literal

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

:
:
:
:

Por definicin SAP


Mdulo SAP (ver tabla 1)
Constante
Descripcin literal

Ejm: ZMMTT_RESERVAS.

- 39 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------ELEMENTO DE DATO
Los nombres de estos objetos tendrn la siguiente forma ZE_[XX]
Donde:
Z
:
E
:
XX :

Por definicin SAP


Constante
Descripcin literal

Ejm: ZE_BANCO

DOMINIO
Los nombres de estos objetos tendrn la siguiente forma ZD_[CCCC][NNN][_D]
Donde:
Z
D
CCCC
NNN
D

:
:
:
:
:

Por definicin SAP


Constante
Tipo de formato del campo (ver tabla 3)
Longitud del campo
Opcional: Nmero de decimales

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

:
:
:
:

Por definicin SAP


Constante
Constante
Descripcin literal

Ejm: ZD_AVMES contiene los meses del ao


Nota:
Considerar que slo se debe crear un dominio Z, si en caso no existiera un dominio estndar con el mismo
tipo y longitud.

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 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------AYUDA DE BSQUEDA
Los nombres de estos objetos tendrn la siguiente forma ZH_[XX]
Donde:
Z
:
H
:
XX :

Por definicin SAP


Constante
Descripcin literal

Ejm: ZH_USERS

OBJETO DE BLOQUEO
Los nombres de estos objetos tendrn la siguiente EZ_[X...X]
Donde:
E
:
Z
:
X...X :

Prefijo Obligatorio SAP


Por definicin SAP
Descripcin literal, de preferencia tabla relacionada a bloquear

Ejm: EZ_ZSDT_BLOCK

SAPSCRIPT
Los nombres de estos objetos tendrn la siguiente forma Z[MS]SS_[XX]
Donde:
Z
MS
SS
XX

:
:
:
:

Por definicin SAP


Mdulo SAP (ver tabla 1)
Constante
Descripcin literal

Ejm: ZSDSS_ADUANA

ESTILO (SAPSCRIPT)
Los nombres de estos objetos tendrn la siguiente forma ZST_[NNN]
Donde:
Z
:
ST
:
NNN :

Por definicin SAP


Constante
Correlativo de 3 dgitos

Ejm: ZST_001

SMARTFORM
Los nombres de estos objetos tendrn la siguiente forma Z[MS]SF_[XX]
Donde:
Z
MS
SF
XX

:
:
:
:

Por definicin SAP


Mdulo SAP (ver tabla 1)
Constante
Descripcin literal

Ejm: ZSDSF_ADUANA

- 41 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------ESTILO (SMARTFORM)
Los nombres de estos objetos tendrn la siguiente forma ZST_[XX]
Donde:
Z
MS
ST
XX

:
:
:
:

Por definicin SAP


Mdulo SAP (ver tabla 1)
Constante
Nombre de Smartform

Ejm: ZSDST_ADUANA

MDULO DE TEXTO (SMARTFORM)


Los nombres de estos objetos tendrn la siguiente forma ZMT_[XX]
Donde:
Z
:
MT
:
XX :

Por definicin SAP


Constante
Descripcin literal

GRUPO DE FUNCIONES
Los nombres de estos objetos tendrn la siguiente forma Z[MS]GF_[X...X]
Donde:
Z
MS
GF
X...X

:
:
:
:

Por definicin de SAP


Mdulo SAP (ver tabla 1)
Constante
Descripcin literal

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

:
:
:
:

Por definicin de SAP


Mdulo SAP (ver tabla 1)
Constante
Descripcin literal

Ejm: ZFIF_VERPAGOS

- 42 -

El GF a tomar ser

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------RFC
Los nombres de estos objetos tendrn la siguiente forma Z[MS]RFC_[XX]
Donde:
Z
MS
RFC
X...X

:
:
:
:

Por definicin de SAP


Mdulo SAP (ver tabla 1)
Constante
Descripcin literal

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

:
:
:
:

Por definicin SAP


Mdulo SAP (ver tabla 1)
Constante
Descripcin literal

Ejm: ZMMBSP_LIBERA_OC

IMPLEMENTACION BADI
Los nombres de estos objetos tendrn la siguiente forma Z[X...X][N]
Donde:
Z
:
X...X :
N
:

Por definicin SAP


Descripcin literal, de preferencia nombre de definicin
Opcional: correlativo numrico de 1 dgito

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

Por definicin SAP


Mdulo SAP (ver tabla 1)
Constante
Descripcin literal

:
:
:
:

- 43 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------BUSINESS OBJECT
Los nombres de estos objetos tendrn la siguiente forma ZBO_[XX]
Donde:
Z
:
BO
:
X...X :

Por definicin SAP


Constante
Descripcin literal

Ejm: ZBO_CRM

ENTERPRISE SERVICE
Los nombres de estos objetos tendrn la siguiente forma Z[MS][WS_[XX]
Donde:
Z
MS
WS
X...X

:
:
:
:

Por definicin SAP


Mdulo SAP (Ver tabla 1)
Constante
Descripcin literal

Ejm: ZSDWS_SCE_PEDIDOS

OBJETO DE AMPLIACION (CMOD)


Los nombres de estos objetos tendrn la siguiente forma Z[MS][NNN]
Donde:
Z
:
MS
:
NNN :

Por definicin SAP


Mdulo SAP (Ver tabla 1)
Correlativo numrico

Ejm: ZSD001

GRUPO DE USUARIO (QUERY)


Los nombres de estos objetos tendrn la siguiente forma Z[MS]GU_[X...X]
Donde:
Z
MS
GU
X...X

:
:
:
:

Por definicin SAP


Mdulo SAP (ver tabla 1)
Constante
Descripcin literal

Ejm: ZSDGU_VENTAS

- 44 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------INFOSET (QUERY)
Los nombres de estos objetos tendrn la siguiente forma Z[MS]IS_[X...X]
Donde:
Z
MS
IS
X...X

:
:
:
:

Por definicin SAP


Mdulo SAP (ver tabla 1)
Constante
Descripcin literal

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

:
:
:
:

Por definicin SAP


Mdulo SAP (ver tabla 1)
Constante
Descripcin literal

Ejm: ZSDQ_ENTREGAS

PROYECTO (LSMW)
Los nombres de estos objetos tendrn la siguiente forma ZP_[X...X]
Donde:
Z
:
P
:
X...X :

Por definicin SAP


Constante
Descripcin literal

Ejm: ZP_RANSA

SUB PROYECTO (LSMW)


Los nombres de estos objetos tendrn la siguiente forma Z[MS]SP_[X...X]
Donde:
Z
MS
SP
X...X

:
:
:
:

Por definicin SAP


Mdulo SAP (ver tabla 1)
Constante
Descripcin literal

Ejm: ZMMSP_PEDIDOS

- 45 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------OBJETO (LSMW)
Los nombres de estos objetos tendrn la siguiente forma Z[MS]O_[X...X]
Donde:
Z
MS
O
X...X

:
:
:
:

Por definicin SAP


Mdulo SAP (ver tabla 1)
Constante
Descripcin literal

Ejm: ZMMO_ME21N_01

CLASE DE DESARROLLO
Los nombres de estos objetos tendrn la siguiente forma Z[MS]
Donde:
Z
:
MS
:

Por definicin SAP


Mdulo SAP (ver tabla 1)

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 :

Por definicin de SAP


Mdulo SAP (ver tabla 1)
Descripcin literal (De preferencia colocar campo a validar)

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
:

Por definicin SAP


Mdulo SAP (ver tabla 1)
Correlativo de 2 dgitos

Ejm: ZPP01
Nota:
Preferentemente usar una clase por mdulo

- 46 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------NUMEROS DE MENSAJE
Los nmeros de mensajes consta de 3 caracteres numricos: [NNN]
Donde:
NNN :

Nmero de intervalo ( 001 999 )

VARIANTE
El texto es libre

GRUPO TIPO
Los nombres de estos objetos tendrn la siguiente forma Z[MS][NN]
Donde:
Z
:
MS
:
NN
:

Por definicin SAP


Mdulo SAP (Ver tabla 1)
Correlativo numrico

Ejm: ZWM01

- 47 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------ANEXOS
TABLA DE PARMETROS
TABLA 1. MDULOS
Aplicacin
BC
BW
CRM
CO
CS
FI
HR
MM
PM
PP
PS
QM
SD
WM

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

TABLA 2. TIPO DE PROGRAMA / TRANSACCIN


Cdigo Denominacin
Vlido para programa transaccin:
B
Batch
P

Procesos y otros desarrollos

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

TABLA 3. TIPO DE FORMATO


Cdigo
CHAR
CURR
DATS
DEC
FLTP
INT
NUMC
QUAN
TIMS
UNIT

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

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------GUIAS
G1. Acumular OTs
1. En Tx SE10, colocar cursor en la OT generada. La nueva OT debe tener la misma descripcin que
la OT anterior, y slo debe aumentarse la versin de acuerdo a las indicaciones dadas en el punto 1
del presente Manual.
2. Presionar botn mostrado en la imagen, o presionar CTRL + F11.

3. Ingresar OT predecesora en el popup y dar enter

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 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------G2. Uso de SU24: Cmo asociar Tx con Objeto de autorizacin

1. Entrar a la Tx. SU24


2. Ingresar cdigo de transaccin Z desarrollado y dar clic en botn Ejecutar

3. Clic en botn Modificar

4. Clic en Aadir Objeto de Autorizacin

5. Ingresar objeto de autorizacin que se est validando en el programa y Enter

- 50 -

Sistemas - rea de Codificacin


------------------------------------------------------------------------------------------------------------------------------------------------

6. Ingresamos las actividades que se validan desde el programa y grabamos

- 51 -

Sistemas - rea de Codificacin


------------------------------------------------------------------------------------------------------------------------------------------------

7. Finalmente grabar, asignarlo a la OT de nuestro desarrollo y listo.

- 52 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------IMGENES
IMAGEN 10.4.a

- 53 -

Sistemas - rea de Codificacin


-----------------------------------------------------------------------------------------------------------------------------------------------IMAGEN 10.4.b

IMAGEN 10.4.c

- 54 -

Você também pode gostar