Estándares de Desarrollo ABAP Crystalis Consulting Chile 01/01/2007 Version 1.2 Página: 1 de 50 1. Estándares para
Views 159 Downloads 1 File size 316KB
Estándares de Desarrollo ABAP
Crystalis Consulting Chile
01/01/2007
Version 1.2
Página: 1 de 50
1. Estándares para objetos SAP..............7 1.1 Convenciones generales.........................................................................................7 1.1.1 Primeras Letras..........................................................................................7 1.1.2 Modulo SAP..................................................................................................7 1.1.3 Tabla de Función técnica del programa............................................8 1.1.4 Código de Sociedad/País.........................................................................8 1.2 Estándares para Programas..................................................................................8 1.2.1 Reportes........................................................................................................8 1.2.2 Module Pools y Dynpros..........................................................................9 1.3 Estándares para Formularios.............................................................................11 1.3.1 SAPScript Form.........................................................................................11 1.3.2 SAPScript Standard Text.......................................................................11 1.3.3 SAPScript Style.........................................................................................12 1.3.4 SAPScript Text ID.....................................................................................12 1.3.5 SmartForm.................................................................................................12 1.3.6 Smartform Graphic.................................................................................13 1.3.7 SmartStyle.................................................................................................13 1.3.8 SmartForm Text Module........................................................................14 1.4 Estándares para Funciones.................................................................................14 1.4.1 Grupos de Funciones..............................................................................14 1.4.2 Módulos de Funciones...........................................................................14 1.5 Estándares para BAdI’s......................................................................................15 1.5.1 Business Add-In Implementation Class...........................................15 1.5.2 Business Add-In Implementation Name..........................................16 1.6 Estándares para CATT’s.....................................................................................16 1.6.1 Módulos de Test.......................................................................................16 1.6.2 Procedimientos.........................................................................................16 1.6.3 Casos de Test............................................................................................17 1.6.4 Catálogos de Test....................................................................................17 1.6.5 Planes de Test...........................................................................................17 1.7 Estándares para Diccionario de Datos...............................................................19 1.7.1 Tablas...........................................................................................................19
01/01/2005
Version 1.1
Página: 2 de 50
1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.7 1.7.8
Vistas...........................................................................................................19 Estructuras.................................................................................................19 Dominios.....................................................................................................20 Elementos de Datos...............................................................................20 Campos.......................................................................................................21 Ayuda de Búsqueda................................................................................21 Objetos de Bloqueo................................................................................22
1.8 Workflows.............................................................................................................22 1.8.1 Workflow /Business Objects................................................................22 1.9 Otros......................................................................................................................23 1.9.1 Ordenes de Transporte..........................................................................23 1.9.2 Estándares para Clases de Desarrollo/Paquetes.........................23 1.9.3 Estándares para Transacciones.........................................................24
2. Buenas prácticas de programación....26 2.1 Estructura de Programa......................................................................................26 2.1.1 Programa Base...............................................................................................26 2.1.2 Orden del código............................................................................................27 2.1.3 Modificaciones al codigo...............................................................................28 2.1.4 Comentarios...................................................................................................29 2.1.5 Formateo de Código.......................................................................................29 2.1.6 Nombres de variables.....................................................................................29 2.1.6.1 Estándares de Tablas Internas........................................................................29 2.1.6.2 Nombres de variable de programa.................................................................30 2.1.6.3 Flags.....................................................................................................30 2.1.6.4 Constantes.........................................................................................31 2.1.6.5 Estructuras.........................................................................................31 2.1.6.6 Variables de Trabajo.......................................................................31 2.1.6.7 Variables de Parámetro.................................................................32 2.1.6.8 Variables Select-options...............................................................32 2.1.6.9 Variables Ranges.............................................................................32 2.2
Actualizaciones de Datos.....................................................................................33
2.3
Subrutinas y módulos de función.......................................................................33
2.4
Comprobación de Autorización..........................................................................34
2.5
Objetos de Bloqueo..............................................................................................34
01/01/2005
Version 1.1
Página: 3 de 50
2.6
Debugging.............................................................................................................34
2.7
Mantenimiento / Corrección de código existente en producción.....................34
2.8
Chequeo de SY-SUBRC.......................................................................................34
2.9
Sentencia DATA...................................................................................................35
2.10
Mensajes de “No hay datos”...............................................................................35
2.11
AT PFnn vs. AT USER-COMMAND.................................................................36
3. Guía de Performance y eficiencia.......37 3.1 Acceso de base de datos.......................................................................................37 3.1.1 Minimizando los "hits" y el tráfico de red.....................................................38 3.1.2 SELECT-OPTIONS.......................................................................................38 3.1.3 Evite usar NOT en la cláusula WHERE........................................................39 3.1.4 Evite la utilización de SELECT/ENDSELECTs............................................39 3.1.5 ORDER BY vs. SORTing..............................................................................39 3.1.6 Evite SELECT *............................................................................................39 3.1.7 SELECT SINGLE..........................................................................................39 3.1.8 Vista. Vs. Select anidados para Joins.............................................................39 3.1.9 Actualización por columnas o actualización por filas...................................40 3.1.10 Funciones agregadas......................................................................................41 3.2 Índices...................................................................................................................41 3.2.1 Diseño de índice.............................................................................................41 3.3 Tablas Internas.....................................................................................................42 3.3.1 Procesando registro por registro o LOOP AT................................................42 3.3.2 Cláusula OCCURS........................................................................................44 3.3.3 Leyendo un registro únicamente....................................................................44 3.3.4 Ordenamiento.................................................................................................45 3.3.5 Tabla Interna vs. Select – EndSelect..............................................................45 3.3.6 Cantidad de Entradas.....................................................................................45 3.3.7 Borrando Registros........................................................................................46 3.3.8 Copiado de Tablas Internas............................................................................46 3.3.9 Loop/Where vs. Loop/Check.........................................................................46 3.3.10 Internal Tables: vs. Field Groups...................................................................47 3.3.11 Internal Table Import.....................................................................................47 3.3.12 Cláusula INTO TABLE.................................................................................47 3.3.13.............................................................................................................................48 3.3.14 Manejando Múltiples Tablas Similares..........................................................48 01/01/2005
Version 1.1
Página: 4 de 50
3.3.15 WHERE excluye AT......................................................................................48 3.3.16 Cláusulas APPEND…SORTED....................................................................49 3.3.17.............................................................................................................................49 3.4 Lógica de Proceso.................................................................................................49 3.4.1 CHECK, EXIT, REJECT, y STOP................................................................49 3.4.2 CHECK..........................................................................................................49 3.4.3 IF’s anidados..................................................................................................49 3.4.4 Case vs. IF......................................................................................................49 3.4.5 WHILE vs. DO Loops...................................................................................50 3.4.6 Modularización..............................................................................................50 3.5 Manipulación de Texto........................................................................................51 3.5.1 Operadores de texto.......................................................................................51 3.5.2 Instrucción Shift … Left................................................................................51 3.5.3 Field Length...................................................................................................51 3.6 Misceláneos...........................................................................................................52 3.6.1 Código Limpio...............................................................................................52 3.6.2 MOVE-CORRESPONDING.........................................................................52 3.6.3 Elegir mejores tablas......................................................................................52 3.6.4 Tablas Cluster y Pool.....................................................................................52 3.6.5 Elementos de Texto........................................................................................53 3.6.6 AT Statements................................................................................................53 3.6.7 Tipos de Datos y Conversión de Tipos..........................................................53 3.6.8 WRITE...........................................................................................................54 3.6.9 Desalentado y Evitado...................................................................................54
01/01/2005
Version 1.1
Página: 5 de 50
Estándares y directivas de desarrollo – Buenas prácticas en la programación Este documento define los estándares y directivas sugeridas para nombrar objetos de desarrollo a generar en las implementaciones de SAP. Este es solamente un estándar de desarrollo y no implica la sustitución de estándares propios de la empresa cliente. Este documento es dinámico y será actualizado y corregido a medida que SAP libere versiones nuevas de su software o bien por un acuerdo entre el equipo de desarrolladores.
1.Estándares para objetos SAP 2.1 Convenciones generales 1.1.1
Primeras Letras
SAP reserva nombres para los clientes. Usando estos nombres nos aseguramos que nuestros objetos no van a ser sobrescritos por SAP en las futuras versiones. Todos los objetos del cliente requieren “Z” o “Y” en la primera posición. Nosotros tomaremos “Z” para los objetos transportables e “Y” para los objetos locales. 1.1.2 Modulo SAP Los desarrollos se agruparán por módulo estándar de SAP al que pertenece el objeto. que se corresponderán con los módulos estándares de SAP (Finanzas FI, Ventas SD, etc.). Se le asignaran los próximos dos caracteres a esta nomenclatura. Para los objetos Cross Application (que son para mas de un modulo) se utilizará CA. Si existiera un desarrollo específico que no se podría clasificar por Modulo SAP al que pertenece el objeto. se le solicitara al jefe del equipo de desarrollo que defina cual utilizar.
1.1.3
Tabla de Función técnica del programa Funcion Técnica
IN OU RP IX FO CI CT BI UT
1.1.4
Descripción
Interfaz de entrada Interfaz de salida Report Include Form Carga inicial Call transacction Batch Input Utility
Código de Sociedad/País
En caso de implementaciones globales, es conveniente acordar con el cliente una nomenclatura para diferenciarse del resto de las sociedades. Por ejemplo, para una sociedad de Chile se podría utilizar los caracteres ‘CL’ despues del carácter inicial, siendo: ZSD_CL_xxxxxxx
2.2 Estándares para Programas 1.1.1 Reportes Un programa ABAP puede ser un reporte, un programa de interfase o conversión, un programa para llamar a un formulario, etc. Los reportes pueden ser llamados por una transacción o por un Module Pool. En el caso que el desarrollador haya copiado un programa estándar de SAP para usar de base para el programa del cliente, se debe usar las convenciones de nombres estándar definidas en este documento. Las variables originales de SAP no tienen que ser renombradas. Pero cualquier nueva variable introducida en el programa debe llevar la nomenclatura sugerida. El desarrollador debe indicar comentarios para todos los cambios
en el programa, tanto para agregados o borrados de código. El documento principal debe hacer referencia al programa estándar SAP que se utilizo de copia. El largo máximo del nombre de un programa ABAP es de 40 caracteres. SAP requiere que la primera letra de los objetos comience con Z o Y, seguido por el módulo SAP al que pertenece el objeto. y la función técnica del programa. Los restantes caracteres son una descripción del desarrollo. Long.Ca Estándar Descripción mpo
40
Z AA _ XX _ xxxxxxx
Objeto del cliente Modulo SAP al que pertenece el objeto. Underscore Función técnica del programa (Según Tabla) Undersore Texto Libre
Ejemplo
ZSD_CI_CLIENTE S Carga inicial declientes
1.1.2 Module Pools y Dynpros El module pool es un programa ABAP que chequea y procesa la interfaz con el usuario en forma on line. Consiste principalmente de un programa principal y de programas INCLUDE y de pantallas. Estos agrupan los procesos que procesan datos comunes y parte de la lógica de proceso. Los nombres de los Module Pool deben tener un largo de 11 caracteres con el siguiente formato.
Long.C Estándar ampo 11
SAPM Z AA XXXX
Descripción
Ejemplo
Prefijo requerido de los Module Pools. Objeto del cliente Modulo SAP al que pertenece el objeto. Dos caracteres secuenciales (0-9 / A-Z)
SAPMZFI0001
Las pantallas de SAP son llamadas DYNPROS (Dynamic Programs). La identificación del screen painter consiste del nombre del Programa ABAP y un número de cuatro dígitos de la dynpro. El rango de número reservado para los desarrollos custom de programas estándar de SAP debe ser entre el 9000 y el 9999. Para dynpros custom de programas custom se debe iniciar con el screen 100 e ir incrementando las pantallas de a 100 para las subsiguientes pantallas y de a 10 para las subpantallas de estas pantallas. Un module pool consiste enteramente de programas INCLUDE que normalmente sigue la siguiente forma:
INCLUDE MZAAxxxxTOP INCLUDE MZAAxxxxO##
Contiene datos y declaraciones (Tablas, variables) Process Before Output (PBO) modules donde ## se incrementa de a 10.
INCLUDE MZAAxxxxI##
Process After Input (PAI) modules donde ## se incrementa de a 10.
INCLUDE MZAAxxxxF##
Subrutinas (FORM...ENDFORM) donde ## se incrementa de a 10.
INCLUDE MZAAxxxxH##
Process On Help-Request (POH) modules donde ## se incrementa de a 10. Process On Value-Request (POV) modules INCLUDE MZAAxxxxV## donde ## se incrementa de a 10.
2.3 Estándares para Formularios 1.1.3 SAPScript Form Long. Estándar Campo
16
Z AA _ X
Descripción
Ejemplo
Objeto del cliente Modulo SAP al que pertenece el objeto. Underscore Libre
ZSD_FACTURA_EXP
1.1.4 SAPScript Standard Text Long. Estándar Campo
32
Z ST AA _ X
Descripción
Ejemplo
Objeto del cliente ZSTFI_CONDICIONE Identifica al Objeto como S un SapScript Standard Text Modulo SAP al que pertenece el objeto. Underscore Libre
Nota: Los tres primerso caracteres (optativos) de la descripcion del objeto deberian ser el Código de Empresa/Sucursal. 1.1.5 SAPScript Style Long. Estándar Campo
8
Z _ X (6 Caracteres)
Descripción
Ejemplo
Objeto del cliente Underscore Libre
Z_ESTILO
1.1.6 SAPScript Text ID Long. Estándar Campo
4
Z AA N
Descripción
Ejemplo
Objeto del cliente Modulo SAP al que pertenece el objeto. Numero
ZFI1
1.1.7 SmartForm Long. Estándar Campo
30
Z SF AA _ X
Descripción
Ejemplo
Objeto del cliente Identifica al Objeto como un SmartForm Modulo SAP al que pertenece el objeto. Underscore Libre
ZSFFI_FACTURA
1.1.8 Smartform Graphic Long. Estándar Campo
30
Z FG AA _ X
Descripción
Ejemplo
Objeto del cliente Identifica al Objeto como un SmartForm Graphic Modulo SAP al que pertenece el objeto. Underscore Libre
ZFGFI_LOGO
Descripción
Ejemplo
Objeto del cliente Identifica al Objeto como un SmartForm Style Modulo SAP al que pertenece el objeto. Underscore Libre
ZFYFI_FACTURA
1.1.9 SmartStyle Long. Estándar Campo
30
Z FY AA _ X
1.1.10SmartForm Text Module Long. Estándar Campo
30
Z FX AA _ X
Descripción
Ejemplo
Objeto del cliente ZFXFI_NOTA Identifica al Objeto como un SmartForm Text Module Modulo SAP al que pertenece el objeto. Underscore Libre
2.4 Estándares para Funciones 2.4.1 Grupos de Funciones Un grupo de funciones es una colección de módulos de funciones y sus objetos asociados. Los Grupos de Funciones están contenidos en la librería de funciones que soportan la creación y modificación de las funciones. NOTA: Para los Grupos de Funciones utilizados en las Vistas de Actualización de Tablas puede utilizarse el nombre de la tabla como nombre del Grupo de Funciones. Long. Estándar Campo
26
Z AA _ X (19 caracteres)
Descripción
Ejemplo
Objeto del cliente Modulo SAP al que pertenece el objeto. Undersore Texto Libre
ZTX_IVA: grupo de funciones para el modulo SAP de Impuestos para las funciones de IVA.
2.4.2 Módulos de Funciones Los módulos de funciones son programas escritos en ABAP que forman unidades lógicas en grupos de función. Ellos pueden ser llamados por cualquier programa ABAP o por los mismos módulos de función. Ellos son manejados centralmente en la biblioteca de funciones (SE37).
Long. Estándar Campo
30
Z _ AA _ X (21 caracteres)
Descripción
Ejemplo
Objeto del cliente Underscore Modulo SAP al que pertenece el objeto. Undersore Texto Libre
Z_CA_CONVERT_TO_ JULIAN_DATE
Los módulos de función son agrupados juntos usando los grupos de funciones. Los módulos de función pueden estar asignados a uno y sólo un grupo de función. Los grupos de función suministrados por SAP nunca deberán ser usados para definir nuevos módulos de función. Los módulos de función son similares a los programas, la diferencia principal es que ellos pueden ser llamados usando llamadas RFC, pueden ser llamados desde y a través de programas, y no son típicamente construidos para reportes con criterios de selección.
2.5 Estándares para BAdI’s 2.5.1 Business Add-In Implementation Class Long. Estándar Campo
30
Z CL AA _ X
Descripción
Ejemplo
Objeto del cliente Identifica al Objeto Clase de BADI Modulo SAP al que pertenece el objeto. Underscore Libre
ZCLMM_PEDIDO
2.5.2 Business Add-In Implementation Name Long. Estándar Campo
30
Z IM AA _ X
Descripción
Ejemplo
Objeto del cliente Identifica al Objeto Implementacion de BADI Modulo SAP al que pertenece el objeto. Underscore Libre
ZIMMM_PEDIDO_GR ABAR
2.6 Estándares para CATT’s CATT: Computer Aided Test Tool, es una herramienta para crear manual o automaticamente casos de pruebas. 2.6.1 Módulos de Test Long. Estándar Campo
30
Z CM AA _ X
Descripción
Ejemplo
Objeto del cliente Identifica al Objeto CATT Modulo de Test Modulo SAP al que pertenece el objeto. Underscore Libre
ZCMMM_PEDIDO
2.6.2 Procedimientos Long. Estándar Campo
30
Z CP AA _ X
Descripción
Ejemplo
Objeto del cliente Identifica al Objeto CATT Procedimiento Modulo SAP al que pertenece el objeto. Underscore
ZCPMM_PEDIDO
Libre
2.6.3 Casos de Test Long. Estándar Campo
30
Z CT AA _ X
Descripción
Ejemplo
Objeto del cliente Identifica al Objeto CATT Caso de Test Modulo SAP al que pertenece el objeto. Underscore Libre
ZCTMM_PEDIDO
2.6.4 Catálogos de Test Long. Estándar Campo
30
Z CC AA _ X
Descripción
Ejemplo
Objeto del cliente Identifica al Objeto CATT Catalogo de Test Modulo SAP al que pertenece el objeto. Underscore Libre
ZCCMM_PEDIDO
2.6.5 Planes de Test Long. Estándar Campo
30
Z CL AA _ X
Descripción
Ejemplo
Objeto del cliente Identifica al Objeto CATT Planes de Test Modulo SAP al que pertenece el objeto. Underscore Libre
ZCLMM_PEDIDO
2.7 Estándares para Diccionario de Datos 1.1.11Tablas Se recomienda que todas las tablas sean definidas como tablas transparentes. Las pequeñas tablas pueden ser definidas como Pool Tables. Long. Estándar Campo
20
Z AA _ X
Descripción
Ejemplo
Objeto del cliente Modulo SAP al que pertenece el objeto Underscore Libre
ZFI_CODIGOS
1.1.12Vistas Las vistas son Tablas transparentes que consisten en una vista alterna o la combinación de múltiples Tablas, como una Tabla unida. Long. Estándar Campo
20
Z V AA _ X
Descripción
Ejemplo
Objeto del cliente Identifica al Objeto como una Vista Modulo SAP al que pertenece el objeto. Underscore Libre
ZVFI_CODIGOS
1.1.13Estructuras Esta sección contiene la información sobre las opciones disponibles para mantener estructuras. Las estructuras son construidas de casi el mismo modo que las Tablas, la única diferencia es que ninguna tabla de base de datos es generada de las estructuras. Por esta razón, los métodos para crear, corregir, y suprimir estructuras son en gran parte el mismo como
aquellos usados para las tablas. Long. Estándar Campo
20
Z S AA _ X
Descripción
Ejemplo
Objeto del cliente Identifica al Objeto como una Estructura Modulo SAP al que pertenece el objeto. Underscore Libre
ZSFI_CODIGOS
1.1.14Dominios Un Dominio define una variedad de valores. Un Dominio es asignado a un elemento de datos. Todos los campos de las tablas o componentes de estructura que usan este elemento de datos tienen esta variedad de valores. Long. Estándar Campo
30
ZZ _ X
Descripción
Ejemplo
Objeto del cliente Underscore Libre
ZZ_DOMINIO
1.1.15Elementos de Datos Un elemento de datos describe un tipo elemental o un tipo de referencia. Un tipo elemental es definido por el tipo de datos incorporado, longitud y posiblemente el número de posiciones decimales. Estos atributos de tipo pueden ser definidos directamente en el elemento de datos o copiados de un dominio.
Long. Estándar Campo
30
ZZ _ X
Descripción
Ejemplo
Objeto del cliente Underscore Libre
ZZ_ELEM_DAT
1.1.16Campos Campos de una tabla o de una estructura. El nombre de campo puede tener un máximo de 16 caracteres y puede contener letras, dígitos y underscore. El nombre del campo debe comenzar con una letra. Long. Estándar Campo
30
ZZ X
Descripción
Ejemplo
Objeto del cliente Libre
ZZ_CAMPO
1.1.17Ayuda de Búsqueda La ayuda de búsqueda (F4 ayuda) es una función estándar del Sistema R/3. El usuario puede mostrar la lista de todos los valores de entrada posibles para un campo de pantalla con la ayuda de búsqueda. Los valores de entrada posibles pueden ser realzados con información adicional. Este es importante sobre todo cuando el campo requiere la entrada de un campo clave. Este proceso estándar puede ser completamente definido creando una ayuda de búsqueda en el Diccionario ABAP. Esta ayuda de búsqueda sólo tiene que ser adjudicada a los campos de pantalla en los cuales ellos deberían estar disponibles. Long. Estándar Campo
30
Z HV _ AA _ X
Descripción
Ejemplo
Objeto del cliente Identifica al Objeto como Ayuda de Busqueda Undersscore Modulo SAP al que pertenece el objeto. Underscore Libre
ZHV_MM_AYUDA
1.1.18Objetos de Bloqueo Un objeto de bloqueo es una unión virtual de varias tablas SAP que sincroniza el acceso simultáneo de dos usuarios al mismo set
de datos ( Concepto de bloqueo SAP). La solicitud y/o la liberación de los bloqueos se realizan en la programación de las transacciones de diálogo mediante la llamada de determinados módulos de funciones que se generan automáticamente de la definición de los objetos de bloqueo. Estos objetos deben crearse explícitamente en el Dictionary ABAP. Para fijar bloqueos debe seguir los siguientes pasos: 1. Debe definir un objeto de bloqueo en el Dictionary ABAP cuyo nombre debería empezar con E. 2. Debe incluir los módulos de funciones para la solicitud y/o liberación de bloqueos en la programación de las transacciones de diálogo correspondientes. Los módulos se crearán automáticamente al activar el objeto de bloqueo. Long. Estándar Campo
16
E Z X
Descripción
Ejemplo
Pre fijo Objeto del cliente Nombre de tabla primaria
EZTFI_CODIGOS
2.8 Workflows 2.8.1 Workflow /Business Objects Long. Estándar Campo
30
Z BO AA _ X
Descripción
Ejemplo
Objeto del cliente Identifica al Objeto como Business Object Modulo SAP al que pertenece el objeto. Underscore Libre
ZBOSFI_CLIENTE
2.9 Otros. 1.1.19Ordenes de Transporte Los nombres de las órdenes de transporte deben seguir una nomenclatura para un mejor seguimiento y control. Estas
deberán ser creadas de acuerdo al siguiente formato (60 caracteres): Long. Camp Estándar o
60
AADD.MM.AAAAxxx
Descripción
Ejemplo
Modulo SAP al que pertenece el objeto. Fecha Identificador de Desarrollo Texto Libre
SD-EM1-00000001: CREACIÓN DE PEDIDO
1.1.20Estándares para Clases de Desarrollo/Paquetes La Clase de Desarrollo es un código para ligar un juego de objetos del ambiente de desarrollo que son mutuamente dependientes el uno al otro. El código de Clase de Desarrollo es usado entonces para corregir y transportar sus objetos de desarrollo juntos, como una unidad. Al comenzar un proyecto de inplementación se deben crear un paquete de desarrollo por módulo en la forma Z mas el id de mñodulo (ZMM, ZFI, ZSD, ZHR, etc.). En caso de necesitarse otras clases de desarrollo, seguiremos la siguiente nomenclatura. Long. Estándar Campo
10
Z AA NN
Descripción
Ejemplo
Objeto del cliente Modulo SAP al que pertenece el objeto. Números (0..9)
ZFI001
1.1.21Estándares para Transacciones Las transacciones forman la base del procesamiento de negocio de SAP. El código de transacción, cuando es llamado o ejecutado, lleva a la pantalla inicial del module pool. Es aquí donde los datos interactivos son presentados al usuario en manera 'de diálogo'. Los tipos de transacciones pueden ser: 1. Transacciones de Diálogo
En una transacción de diálogo, el flujo del programa es determinado por una secuencia de pantallas. Las pantallas que llaman dentro de una transacción deberían pertenecer a un programa solo ABAP, por lo general un Module Pool (Programa tipo M). 2. Transacciones de Informe En una transacción de informe, usted usa un código de transacción para comenzar un programa ejecutable (Programa tipo 1). Un programa ejecutable por lo general tiene tres pasos - entrada de datos (pantalla de selección), proceso de datos (a menudo usando una base de datos lógica), y salida de datos (lista). 3. Transacciones Orientadas a Objeto En una transacción OO, usted puede unir un código de transacción a un método de una clase de Objetos de ABAP. 4. Transacciones de Variante Las variantes de transacción permiten que se preestablezcan valores para campos en una transacción, ponga atributos de campos, o esconda pantallas enteras. 5. Transacciones de Parámetro Las transacciones de parámetro permiten preadjudicar valores a campos sobre la pantalla inicial de una transacción. Los códigos de transacción consisten en 20 caracteres. Nosotros solo tomaremos 7 Long. Estándar Campo
20
Z AA _ X(3 caracteres)
Descripción
Ejemplo
Objeto del cliente Modulo SAP al que pertenece el objeto. Underscore Texto Libre
ZFI_IVA
2.Buenas prácticas de programación El objetivo de esta sección es acercar a los integrantes de Crystalis Consulting Chile determinadas buenas prácticas para el desarrollo de programas en ABAP, con el fin de que tengan en cuenta algunas recomendaciones, herramientas y funciones, al momento de necesitar resolver las problemáticas del día a día en los distintos proyectos. De esta manera se intenta aunar criterios al momento de seleccionar una alternativa para el desarrollo de los programas. Se incluyen también consideraciones de performance para tener en cuenta a la hora de programar. Este documento está hecho en base a las experiencias de muchos de nosotros en distintos proyectos, documentación y recomendaciones de SAP. La idea es seguir “alimentando” este documento con los aportes que cada uno haga. Todos los comentarios, sugerencias, críticas y correcciones son bienvenidas.
2.10 Estructura de Programa 2.10.1
Programa Base.
Se recomiendan que la estructura de los programas y el orden de los componentes sigan el layout indicado:
*&--------------------------------------------------------------------*& Compañía : SDA Chile S.A. *& Autor : Crystalis Consulting Chile – Peperino Pómoro *& Funcional : Julieta D. Ortega *& Fecha : 27.09.2006 *& Vers. SAP : 640 *& Transporte : P12K907478 *& Objetivo : Este programa está basado en el standard RVADIN01 y su *& función es dar salida a las facturas hacia el *& Servicio de Impuestos Internos *&--------------------------------------------------------------------*&--------------------------------------------------------------------*& MODIFICACIONES *&--------------------------------------------------------------------*& Modificó : *& Fecha : *& Solicitó : *& Transporte : *& Objetivo :
*&--------------------------------------------------------------------*---------------------------------------------------------------------* INCLUDES UTILIZADOS *---------------------------------------------------------------------*---------------------------------------------------------------------* DECLARACIONES GLOBALES *---------------------------------------------------------------------*---------------------------------------------------------------------* SELECTION-SCREEN *---------------------------------------------------------------------*---------------------------------------------------------------------* INITIALIZATION *---------------------------------------------------------------------*---------------------------------------------------------------------* AT SELECTION-SCREEN *---------------------------------------------------------------------*---------------------------------------------------------------------* START-OF-SELECTION *---------------------------------------------------------------------*---------------------------------------------------------------------* END-OF-SELECTION *---------------------------------------------------------------------*---------------------------------------------------------------------* TOP-OF-PAGE *---------------------------------------------------------------------*********************************************************************** ************ RUTINAS LOCLAES ************** ***********************************************************************
2.10.2
Orden del código
Para mejorar la performance de un programa, se pueden dividir grandes programas ABAP, en varios programas pequeños, siempre que sea apropiado. Cuando los eventos (p.ej, END-OF-SELECTION, TOP-OF-PAGE, etc.) son usados en el código, ellos deberán aparecer en el orden que es usado generalmente por SAP en sus programas. Cualquier evento no necesario puede ser suprimido. Todas las subrutinas (FORM’s) serán colocadas después de todo el código que no sea subrutina, después de END-OF-SELECTION. Los forms deben ser colocados en el orden general de uso.
La declaración de los objetos debe seguir el siguiente orden: Constantes Estructuras del diccionario(TABLES) Includes Declaraciones de variables Tipos Tablas internas Variables estructuradas Variables simples Rangos Selection Screen
2.10.3
Modificaciones al codigo
Dentro del código del programa, comentar cada cambio (inserción, borrado). Indicar en el comentario la fecha, el ID de usuario y el numero de requerimiento. Ej: ***Inicio – (userid) – (fecha) – (Nro. Req.) *** *SELECT * FROM LFA1 * WHERE KUNNR EQ I_TAB-KUNNR. SELECT SINGLE * FROM LFA1 WHERE KUNNR EQ I_TAB-KUNNR. ***Fin – (userid) – (fecha) – (Nro. Req.) *** Esto aplica solo para pequeños cambios realizados una vez que el programa está en prooducción. Para desarrollos desde cero o grandes cambios, no deberían ser nombrados. Evitemos comentariar grandes trozos de códigos.
2.10.4
Comentarios
ABAP es de por si claro en su lenguaje, de cualquier modo, es prudente proveer a futuros programadores con documentación de propósitos, cambios, enhancements, adiciones y borrados. Explique el propósito, diseño, estructura y cualquier ayuda en la cabecera del programa. Mantener una log de modificaciones con el cambio mas viejo al principio. Una descripción general del
programa debe indicarse en la cabecera. Las declaraciones "comentadas" deben ser usadas para las siguientes condiciones: Antes de cada gran / pequeña sección de código. Para clarificar lógica compleja o confusa. En el encabezado de cada PERFORM para explicar brevemente el objetivo del mismo y sus parametros.
2.10.5
Formateo de Código
Sea prolijo con su programación, alinee código y deje renglones en blanco para separar secciones o sentencias diferentes. No programe varias sentencias en una misma línea, complican el debuging y el mantenimiento. -
Haga el uso del “Patrón” para añadir módulos de funciones y clases Utilizar el formato ‘Palabras claves en mayúsculas’ Utilizar la herramienta ‘Pritty printer’ para tabular y arreglar automáticamente todo el código. Usar la indentanción, siempre de dos espacios No superar las 72 columnas en el editor Agrupe sentencias, ciempre dejando las comas del lado derecho
2.10.6
Nombres de variables
2.10.6.1 Estándares de Tablas Internas Las tablas internas son definidas dentro de programas y usadas para sostener bloques de registros. Las tablas internas deberían tener un prefijo de variable "t_". Lo siguiente es un ejemplo de una variable de tabla interna: t_customer
2.10.6.2 Nombres de variable de programa El objetivo de esta sección es definir algunas pautas para la nomenclatura de variables de programas basadas en los tipos de las variables. Las variables de programa son definidas usando la declaración DATA. La declaración de parámetros mediante PARAMETER puede ser usada también para definir variables que son presentadas al usuario en la ejecución de los programas. Variables especiales para criterios de selección pueden ser
también definidas usando la instrucción SELECT-OPTIONS. Lo que sigue son los tipos variables a utilizarse: Banderas (Flags) Constantes Variables de Trabajo Parámetros Estructuras Variables Select-options Variables Ranges Underscores '_' deben ser usados para separar palabras o letras que definen una variable en vez de guiones. Los guiones '-' son usados para referirse a sub campos de un registro o estructura de datos. Se recomienda que variables del diccionario de datos sean usadas donde quiera que sea posible para la consistencia de datos y el chequeo de tipos. 2.1.1.1
Flags
Los flagas son variables que contienen sólo uno de dos valores. Estas variables serán definidas como CHAR de longitud 1. En todos los casos, los valores siguientes deben ser cumplidos: X para Sí Blanco para No Estos tipos variables deben de tener un prefijo 'f_'. Los siguientes son ejemplos de nombres variables para ser usados: f _eof f_continuar
2.1.1.2
Constantes
Las variables constantes no se cambian durante la ejecución de un programa. Estos tipos de variables deberán ser prefijados con 'k _ '. Lo siguiente es un ejemplo de nombres de constantes a ser usados: Ejemplo: k_pi LIKE bseg-dmbtr VALUE '3.1416'. 2.1.1.3
Estructuras
Las estructuras son un conjunto de campos que se unen para un propósito puntual. Ejemplo: El header line de una tabla interna. Lo siguiente es un ejemplo de nombres de Estructuras a ser usados: x_bseg 2.1.1.4
Variables de Trabajo
Las variables de trabajo son variables de propósito general. Estos son cualquier tipo variable que no puede ser definido en las categorías anteriores. Estas variables pueden contener valores alfanuméricos, numéricos, empaquetado, binario, fecha, tiempo, o valores hexadecimales. Los tipos variables de esta categoría deben ser prefijados con 'w_ ' para variables globales y 'l_ ' para variables locales o privadas. Lo siguiente es un ejemplo de nombres de variables de trabajo a ser usados: w_temp_salary_nb l_empl_adress_tx w_last
2.1.1.5
Variables de Parámetro
La variable de parámetros es usada para permitir la entrada de datos en la pantalla de selección antes de la ejecución de un programa. Estas variables tienen una longitud limitada de ocho (8) caracteres. Los tipos variables de esta categoría deberían ser prefijados con 'p_'. Lo siguiente es un ejemplo de nombres de Parámetros a ser usados: p_custom
p_fiscyr
2.1.1.6
Variables Select-options
Los SELECT-OPCION la declaración FOR generan una variable de programa a ser usada para los criterios de selección. Esta permite a un usuario en la pantalla de selección entrar un rango de selección. La variable generada es realmente una tabla del sistema auto generada que contiene -highvalue, -lowvalue, -signo, y -opción para el campo de la tabla seleccionada. Los tipos variables de esta categoría deberán ser prefijados con 's _ ' y tener una longitud limitada de 8 caracteres. Lo siguiente es un ejemplo de nombres de Parámetros a ser usados: s_lifnr s_bukrs 2.1.1.7
Variables Ranges
La instrucción RANGES: FOR generan una variable de programa usada para los criterios de selección muy parecido a los generados por SELECT-OPTIONS. La variable generada es realmente un Tabla Interna generada por el sistema que contiene -high-value, -lowvalue, -signo, y -opción para el campo de la tabla seleccionada. Los tipos variables de esta categoría deberían ser prefijados con 'r_' y tener una longitud limitada de ocho caracteres. Lo siguiente es un ejemplo de nombres de Parámetros a ser usados: r_lifnr r_bukrs
2.11 Actualizaciones de Datos Los tablas de base de datos de SAP sólo pueden ser actualizado por código proporcionado por SAP. Este puede ser por el uso de transacciones de SAP existentes o por el uso de batch data (BDC). Si una Tabla del cliente tiene que ser mantenida, deberá ser mantenido exclusivamente por programas on-line del cliente o por la trnasccion SM30 en caso que sea una tabla de customizing.
2.12 Subrutinas y módulos de función Cuando se llama a módulos de función, el grupo de función entero es cargado en memoria en tiempo de ejecución. Por lo tanto, se debe guardar el número de módulos de función dentro de un grupo de función a un mínimo. En cambio piense en usar subrutinas dentro de INCLUDE’s. Usar variables locales siempre que sea posible dentro de subrutinas para modularización. Sin embargo, las subrutinas usadas con gran frecuencia dentro de una llamada de programa deberían usar variables globales para eliminar el tiempo de creación de aquellas variables locales. Las subrutinas que deben ser llamadas por múltiples programas deberían ser creadas como módulos de función. Las subrutinas externas deberían ser también implementadas como Módulos de Función. No olvidar de dejar las exceptions de las funciones y su correspondiente chequeo para evitar dumps inecesarios en los progrmas (utilizar el patron para hacer las llamadas a las funciones.). Exceptuando que si la función dispara las excepciones usando MESSAGE xxxx RAISING (solo para este caso), en un module pool puede no ser necesario capturar las excepciones, dado que directamente se manda el mensaje de error y así no es necesario estar haciendo el chequeo del “sysubrc 0”.
2.13 Comprobación de Autorización La comprobación de autorización debería ser añadida en la definición de la transacción o en el programa. Los objetos de autorización pueden ser definidos en Menú del Workbench de ABAP seleccionando Desarrollo / Otras Herramientas / Obj. De Autorización / Objetos.
2.14 Objetos de Bloqueo
Los objetos de bloqueo deben ser usados cada vez que se actualice (insert/delete o update/modify) a una tabla, esto es para evitar problemas de concurrencia sobre las tablas. Los objetos de bloqueo deben ser creados como módulos de funciones (Enqueue / Dequeue) en un grupo de funciones del cliente.
2.15 Debugging Todo el código de debugging debe ser removido de los programas antes de ser liberados a Calidad y Producción. Esto incluye Break-Point y cualquier código agregado para testeo.
2.16 Mantenimiento / Corrección de código existente en producción. Cuando se cambie código de programas que estén en producción, estas modificaciones deben ser comentados en el bloque de modificaciones del programa.
2.17 Chequeo de SY-SUBRC SY-SUBRC es el código de retorno que nos sirve para diferenciar entre excepciones y código normal de proceso. Siempre se debe chequear SY-SUBRC con una instrucción IF o CASE inmediatamente después de una instrucción ABAP que puede alterar el mismo. Ejemplo de estas instrucciones son OPEN, READ, TRANSFER, SELECT, MODIFY, INSERT, LOOP AT, y CALL TRANSACTION. Ejemplo: SELECT belnr FROM BKPF INTO TABLE t_bkpf. IF sy-subrc 0. MESSAGE S000 WITH ‘No hay datos en la Base de Datos’(101). ELSE. PERFORM sub_next_step. ENDIF.
2.18 Sentencia DATA La definición de variables con la sentencia DATA debe estar en concordancia con la nomenclatura (2.1.1 Nombres de Variable de Programa). El parámetro LIKE en la sentencia DATA debe de ser usada siempre que sea posible, de esta forma nos aseguramos la consistencia de los campos con los definidos por SAP en los distintos programas. Inicialice todas las variables que apliquen en el evento INITIALIZATION usando el comando CLEAR. Siempre limpie las variables y estructuras especialmente en loops.
2.19 Mensajes de “No hay datos” Cuando se desarrollen reportes, recuerde de escribir un mensaje de error si no se han encontrados datos a listar. Ejemplo: SELECT belnr FROM BKPF INTO TABLE t_bkpf. IF sy-subrc 0. WRITE: / ‘No hay datos en la Base de Datos’(101). ENDIF.
2.20 AT PFnn vs. AT USER-COMMAND Cuando desarrolle reportes interactivos, use 'AT USER COMMAND' en vez de 'AT Pfnn' – SY-UCOMM valores tales como “SORT” y “NEXT” son mucho mas legibles que “PF05” y “PF06”. Ejemplo: AT PF05. SORT itab. AT PF06. LEAVE TO SCREEN 9100.
Es mucho menos legible que: AT USER-SELECTION. CASE SY-UCOMM.
WHEN ‘SORT’. SORT itab. WHEN ‘NEXT’. LEAVE TO SCREEN 9100. ENDCASE.
3. Guía de Performance y eficiencia. 2.21 Acceso de base de datos Siempre especifique sus condiciones en la cláusula WHERE en lugar de verificarlo con sentencias CHECK. El sistema de base de datos puede usar entonces un índice (si es posible) y la carga del sistemas se mejora considerablemente. Los contenidos de la Tabla entera se deben leer de los archivos de base de datos en los cache de DBMS y transferido sobre la red. Después de esto, la mayor parte de los datos son ordenados. En el segundo ejemplo, el DBMS leen exactamente los datos necesarios. Ejemplo: SELECT * FROM