Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Metodologa y Estndares
de Desarrollo
I. Control De Actualizaciones
II. Introduccin
III. Objetivo
IV. Alcance
V. Metodologa de Desarrollo
1. Estndares Generales
1.1. Un Comando Por Lnea
1.2. Cdigo Fuente Indentado
1.3. Nombramiento De Variables
1.4. Cdigo reutilizable
1.5. Paso De Parmetros En Subrutinas
1.6. Manejo De Textos
1.7. Uso De Userids En Programas
1.8. Uso De Mensajes
1.9. Uso de un Programa Estndar SAP como Plantilla de Desarrollo.
1.10. Uso de Tablas.
1.11. Uso de Variantes.
1.12. Uso de Parmetros de Seleccin.
1.13. Uso de Eventos.
4. Estndares De Documentacin
5. Estndares De Rendimiento/Performance
05 de Septiembre de
2005 Juan Carlos Uribe 1.0 No existe documento anterior
II. Introduccin
Este documento fue creado para establecer una metodologa de desarrollo que
permita abordar los diferentes desarrollos teniendo en cuenta la arquitectura
del sistema o mdulo, as como la metodologa especfica a usar dependiendo
del desarrollo. Se han distinguido dos escenarios de desarrollo los cuales se
atacarn con metodologas diferentes: Desarrollo De Ajustes de
Personalizacin/Localizacin, y de Extensiones Puntuales de Funcionalidad, y
Desarrollo de Mdulos Complementarios a la funcionalidad Estndar de SAP y
Para Ampliaciones Significativas de Funcionalidad.
Los estndares han sido elaborados junto con varias plantillas de desarrollo,
con el fin de garantizar la estructura mnima por tipo de desarrollo, as como
para maximizar tiempos de desarrollo.
Iii. Objetivo
El documento define:
Todo el equipo de desarrollo (tanto senior como junior) debe seguir y cumplir
juiciosamente lo dispuesto en este documento.
Iv. Alcance
V. Metodologa
Para el desarrollo de los requerimientos ABAP de los proyectos SAP se han
identificado dos metodologas a aplicar segn el caso las cuales se describirn
a continuacin.
Las especificaciones tcnicas deben mostrar las entradas y las salidas del
proceso y la lgica de programa.
Para identificar que tablas deben ser usadas como una fuente de informacin,
el Desarrollador debe usar siguientes recursos:
Los programas similares o las funciones deben ser usados para reducir el
tiempo de desarrollo y de depuracin.
A. Programas
B. Tablas
C. Elementos de datos
D. Dominios
E. Estructuras
F. Objetos de bloqueo
G. Documentos de cambio
H. Mdulos de funcin
I. Pantallas
J. Ayudas de bsqueda
K. SAPscript => juegos de disposicin
L. Includes
M. Transacciones
N. Rangos de Nmero
O. Objetos de Seguridad
P. Mensajes
Q. Mens de rea
Si nuevos objetos deben ser desarrollados, hay que usar las convenciones de
nombramiento descritas adelante en este documento.
Nombre de la tabla
ndices
Nmero Estimado de filas/registros
Patrn de crecimiento
Frecuencia de acceso
Almacenado en un buffer o no almacenado en un buffer.
1. 3. Fase de Codificacin
Esta metodologa est compuesta de las siguientes fases donde cada fase
consta de las etapas de Levantamiento de requerimientos de informacin,
Anlisis, Diseo, Implementacin, y Pruebas.
Dentro del proyecto esta fase se cubre por la consultora funcional que es la
que entrega los requerimientos de desarrollo junto con las especificaciones
funcionales requeridas, producto del anlisis de los procesos de negocio y de la
respectiva especificacin de personalizacin/parametrizacin/localizacin del
desarrollo.
Con base en los casos de uso se proceder a realizar las etapas de anlisis y
de diseo de la solucin.
1. Modelo de Datos,
2. Relaciones,
3. Componentes de software (como Middleware, ADS, BRF) ,
4. Entradas,
5. Salidas, y
6. Plataforma tecnolgica.
1. Tipos,
2. Tablas Transparentes,
3. Tablas Z,
4. Estructuras,
5. Vistas,
6. Objetos,
7. Mtodos,
8. Funciones,
9. BADIs,
10. BAPIs,
11. Reglas,
12. Eventos,
13. Diccionario de datos actualizado.
14. Programa.
A partir de la Arquitectura del Sistema se sigue con la definicin del Plan del
Proyecto a travs del ajuste del listado inicial de requerimientos, incluyendo los
desarrollos que apoyaran la construccin de los requerimientos funcionales del
sistema, y de la actualizacin de la hoja de programacin y seguimiento del
proyecto. Lo anterior causar una reasignacin de recursos de desarrollo.
1. Estndares Generales
Los nombres de los campos de una tabla o de un segmento de SAP son escritos con
guin con un '-', y se usa ' _' (guin bajo) para separar las palabras para variables
especficas de programa. Siempre que posible, el parmetro LIKE debe ser usado para
definir campos de trabajo.
DATA: MAT_DT LIKE SY-DATUM,
DAYS TYPE I,
HOLD_ACCTNO LIKE sg-field1,
GROSSAMT(10) TYPE P DECIMALS 2,
GROSS_PERCENT(3) TYPE P DECIMALS 2,
NET%(3) TYPE P DECIMALS 2.
Algunos tipos variables deben ser prefijados con una prefijo especifico:
Ejemplos de subrutina:
FORM CALCULATE_MATURITY_DATE.
MAT_DT = SY-DATUM + DAYS.
ENDFORM.
Tal procedimiento debe ser adoptado para eliminar grupos de cdigo redundante.
Tambin, cuando deben ser pasados los posibles parmetros a y desde subrutinas, es
ms fcil entender y se reduce la necesidad de utilizar ms variables globales.
Una subrutina debe realizar apenas un proceso. Si existiera una subrutina que realice
mas de un proceso, entonces debe evaluarse se debe dividirla en varias subrutinas. El
nombre de una subrutina debe ser mnemnico.
Siempre use las declaraciones TYPE y LIKE cuando especifique los parmetros
formales de una subrutina. Este es un estilo de programacin bueno, ya que esto
permite que el compilador ABAP genere el cdigo ms eficiente (que puede aumentar la
interpretacin hasta un factor de dos). Por ejemplo:
form <subroutine> tables p_tab1 like <tab1>[]
using p_param1 like <data>
p_param2 like <dd-field>
p_param3 like <dd-structure>
p_param4 type <standard data type>
p_param5 type <user defined data type>
....
endform.
Los archivos INCLUDE no pueden definir sus propios Elementos de Texto. Todos los
Elementos de Texto a los cuales ellos se refieren deben ser definidos en el programa
principal que invoca el archivo INCLUDE. Por lo tanto, si se requiere que un archivo
INCLUDE pueda ser invocado por ms de un programa principal, el texto constante que
es usado dentro del archivo INCLUDE debe ser definido con la declaracin de
CONSTANTES.
En casos adicionales a los archivos INCLUDE, el texto constante que es impreso en un
informe puede ser almacenado como Smbolos de Texto.
Hay dos caminos que usted puede hacer referencias a estos Smbolos de Texto,
TEXTO-XXX o USING '...' (xxx). Aqu, el xxx significa un nmero de 3 dgitos, y ... para
el texto del Smbolo de Texto.
La primera forma requiere que usted por separado defina un Smbolo de Texto para el
nmero xxx. Si xxx no es un Smbolo de Texto definido, la salida es vaca.
La segunda forma mejora la legibilidad del programa. El texto entre comillas debe
corresponder al texto almacenado como el valor del Smbolo de Texto. Excepcin: Si no
hay ningn texto salvado bajo el nmero xxx, se usa el texto entre comillas.
Ejemplo:
El smbolo de texto el nmero 001 tiene el texto 'Por favor entre su nombre':
WRITE: / TEXT-001,
/ 'Por favor entre su nombre'(001),
/ 'Cual es su nombre?'(001).
En este ejemplo todos tienen la misma salida: "por favor entre en su nombre".
En el Editor ABAP, se pueden comparar los textos usados en el programa con los textos
almacenados como Smbolos de Texto eligiendo "Goto-> elementos de Texto-> smbolos
de Texto".
1.8. Mensajes
En vez de usar el mensaje s999 con 'Su trabajo ha sido salvado!'", se debe usar el
mensaje s001.
Accin en
Tipo Descripcin Accin On-line
Background
I Informativo Presione ENTER para CONTINUAR Ninguna
W Advertencia Correccin posible Ninguna
Terminacin de
E Error Correccin requerida
Programa
Terminacin Terminacin de
A Se abort la Transaccin
anormal Programa
S xito Mensaje en pantalla subsecuente Ninguna
Note que todos los mensajes son registrados en fondo por el sistema de procesamiento
de fondo.
Ejemplo:
Siempre que fuera posible, evite cargar tablas internas con mas de 1000 registros.
Tablas internas con un nmero muy grande de registros perjudican a nivel general el
performance del sistema.
Cuando defina tablas internas usando el comando like, utilice la opcin with header
line, sino en ese caso SAP no creara el header line automticamente.
Ejemplo:
if w_vbfa-vbtyp_n = `J`
w_custo = mbew-strps * `1.2`.
Evite tambin el uso del default para atribuir valores iniciales a los parmetros o en
las pantallas de selecciones. Esos valores pueden cambiar en el futuro. De preferencia
a la creacin de variantes para fijar esos valores.
Ejemplo:
Ejemplo:
START-OF-SELECTION.
* inicia el procesamiento de la interface
PERFORM PROCESS_INTERFACE_OUTBOUND.
2. Estndares De Desarrollo De Tablas
2.1. Definicin
de Dominios
2.2. Definicin
de Elementos de
Datos
Para cada
elementos de datos
se debe definir:
Para definir
el contenido
de la tabla
se debe
definir la
estructura
de registro
de la tabla
incluyendo
los campos
necesarios
para
construir la
llave y para
almacenar
la
informacin
requerida..
Para cada
dominio de
datos se
debe definir:
La nica excepcin a esta regla podra ser ciertas tablas de infraestructura que podran ser
definidas. Sin embargo, stos no seran tablas de aplicacin (de lgica de negocio).
Si el flag "Tab. Maint. Allowed" esta activo o sea si esta en 'X', se permite el mantenimiento
con el Navegador de Datos (Transaccin SE16).
Si este flag est puesto y si el usuario tiene la autorizacin necesaria, los datos en la tabla
pueden ser cambiados.
Si los archivos de datos de la tabla slo pueden ser mantenidos por el programa o
mantenimiento desde vista de tabla (Transaccin SM30), no se debe poner este flag.
Cmo sern aadidas, cambiadas, o suprimidas las entradas para esta tabla?
Las entradas en esta tabla son dependientes de entradas en otra tabla o viceversa? Es
esto necesario para consistencia lgica?
De ser as, una tabla de control debe ser usada para asegurar esta consistencia, o el
mantenimiento slo debe ser hecho va una aplicacin expresamente desarrollada para
asegurar esta relacin.
Solo pueden tener acceso las personas que usan la tabla va una transaccin.
Es esta tabla uno de varias que tienen exigencias IDNTICAS de control de acceso, y que:
Comnmente consultadas por un mismo grupo de usuarios?
Comnmente mantenida por el mismo grupo de usuarios?
Con esta informacin usted puede establecer una matriz que define
Las agrupaciones de las tablas,
Los tipos del acceso necesario,
Los grupos de las personas que tienen cada tipo del acceso.
En ningn caso un programa debe actualizar directamente tablas ENTREGADAS POR SAP
usando los comandos INSERT, UPDATE, O DELETE.
Las tablas entregadas por SAP comienzan con todas las letras diferentes de Y y Z, y ellas slo
deben ser actualizados usando una transaccin de SAP.
Para automatizar actualizaciones de una tabla va un programa, puede usar el comando CALL
TRANSACTION (u opcionalmente crear un BDC que usa funciones suministradas de la SAP, o
a travs del uso de BAPIs).
Para aplicaciones que requieren la programacin de dilogo, la Gua de Estilo de SAP debe ser
usada como una base para el desarrollo. La utilizacin de esta gua para diseo de pantalla y
ergonoma asegurar la consistencia en las transacciones desarrolladas.
La Gua de Estilo de SAP est disponible en la documentacin de ayuda usando el siguiente
camino de men: Help -> R/3 Library -> BC-Basis Components -> ABAP Workbench (BC-DWB)
-> BC-> SAP Style Guide.
La transaccin de demostracin BIBS debe ser usada como gua para el Screen Painter.
La transaccin de demostracin LIBS debe usada como guas para salida de lista.
4. Estndares De Documentacin
Para el siguiente ejemplo de CASE, cada valor posible debe ser documentado:
case <variable>.
when 'Y'. "Explicar que significa Y
...
when 'H'. "explicar que significa H
...
endcase.
***********************************************************************
* Nombre: (nombre_reporte)
* Descripcin:
* Fecha (MM/DD/AAAA):
* Autor:
* Transaccin (si aplica):
* Requerido por:
***********************************************************************
* HISTORIAL DE CAMBIOS
***********************************************************************
* Descripcin:
*
* Fecha:
* Autor:
* Solicitado por:
**********************************************************************
Dependiendo del tipo de desarrollo, el encabezado del cdigo se debe documentar indicando
lo siguiente:
ELEMENTO DESCRIPCION
Alcance Local/Nacional/Internacional
Cada una de las siguientes secciones del desarrollo debe ser documentada y
en lo posible estas secciones deben ir en el orden dado a continuacin:
Tablas
Parmetros y Opciones de Seleccin
Declaracin de Estructuras, Tablas y de Variables de Trabajo (DATA)
Constantes
Inicializaciones
Verificaciones de Opciones de Seleccin
Lgica de solucin (EJ. START OF SELECTION)
Eventos de pgina
Lgica de navegacin (Ej: Comandos de usuario, Lneas de seleccin)
Formas (Rutinas de programa).
Ejemplo:
**************************************************************
*** Tablas del Diccionrio de Datos
**************************************************************
tables: MARA. Breve descripcin de la tabla
Ejemplo:
**************************************************************
*** Definicin de Constantes
**************************************************************
constants: c_constante type n. Descripcin de la constante
Ejemplo:
**************************************************************
*** Definicin de Tipos
**************************************************************
types: werks_TYPE. Breve descripcin del tipo
Media lnea de comentario debe ser utilizada para describir cada uno de los
parmetros y de las opciones de seleccin.
Ejemplo:
**************************************************************
*** Definicin de la Pantalla de Selecciones
**************************************************************
parameters: p_param(8) type c. Descripcin del parmetro
select-option so_name for mara-matnr. Descripcin del campo
Media lnea de comentario debe ser utilizada para describir cada una de las
variables.
Ejemplo:
**************************************************************
*** Definicin de las Variables
**************************************************************
data: w_var1 type n, Descripcin de la variable global
Ejemplo:
**************************************************************
*** Evento: At Selection Screen
**************************************************************
At selection-screen.
...
************ Fin del Evento At Selection Screen **************
Todas las secuencias de comandos deben ser comentadas por 3 asteriscos en el inicio de la
lnea precediendo el texto de comentario. Adems de eso debe existir una lnea en blanco
antecediendo el comentario
Ejemplo:
<lnea en Blanco>
*** Lee el registro
read dataset pc_file into gw_record.
En el caso que un determinado texto sea muy utilizado a lo largo de un programa, utilice TEXT
ELEMENT:
Ejemplos:
correcto: write: /TEXT-001. "Nmero total de registros:.
incorrecto: write: / Nmero total de registros:.
Ejemplo:
*** Busca los datos del reporte.
perform buscar_datos.
*************************************************************
*** Form:
*** Descripcin:
*** Parmetros de Entrada:
*** Parmetros de Salida:
*************************************************************
1. Modelo de Datos,
2. Relaciones,
3. Componentes de software (como Middleware, ADS, BRF) ,
4. Entradas,
5. Salidas, y
6. Plataforma tecnolgica.
1. Tipos,
2. Tablas Transparentes,
3. Tablas Z,
4. Estructuras,
5. Vistas,
6. Objetos,
7. Mtodos,
8. Funciones,
9. BADIs,
10. BAPIs,
11. Reglas,
12. Eventos,
13. Diccionario de datos actualizado,
14. Programas.
ELEMENTO DESCRIPCION
ELEMENTO DESCRIPCION
5. Estndares De Rendimiento
Elija la base de datos lgica ms eficiente posible. Estudie los criterios de seleccin y qu
ndices secundarios son usados para aquella vista. Provea los criterios de seleccin
apropiados para limitar el nmero de registros ledos. Obligue a los usuarios a proveer los
criterios de seleccin evaluando los criterios de seleccin entrados en la pantalla de
seleccin durante en la pantalla de PANTALLA DE SELECCIN. Finalmente, cuando
sea posible aproveche los matchcodes para aumentar la velocidad.
5.3. Uso de subrutinas
Para una modularizacin, la decisin de ejecutar una subrutina debe ser tomada antes de
que la subrutina sea llamada. Por ejemplo:
Esto es mejor:
IF f1 NE 0.
PERFORM sub1.
ENDIF.
FORM sub1.
...
ENDFORM.
Que esto:
PERFORM sub1.
FORM sub1.
IF f1 NE 0.
...
ENDIF.
ENDFORM.
5.4. Declaraciones IF
Ejemplo - IF...ELSEIF...ENDIF :
IF (most likely to be true).
ELSEIF (less likely to be true).
ELSEIF (least likely to be true).
ENDIF.
Ejemplo - AND:
IF (least likely to be true) AND
(most likely to be true).
ENDIF.
Ejemplo - OR:
IF (most likely to be true) OR
(least likely to be true).
es mejor que
Usando la declaracin SELECT, estudie la llave y siempre que sea posible proporcione la
mayor parte de la parte extrema izquierda de la llave. Si la llave entera puede ser
calificada, utilice un SELECT SINGLE y no un SELECT solamente. Si slo est
interesado en la primera fila o slo desea que una sola fila sea devuelta, usando SELECT
SINGLE se puede aumentar la interpretacin hasta tres veces.
En vez de este:
Use este:
La seleccin de datos en una tabla interna usando un LOOP contra un ciclo SELECT-
ENDSELECT, dar una mejora de interpretacin de al menos 2 veces.
Despus de que los datos han sido puestos en la tabla interna, entonces se puede realizar
el procesamiento a nivel de registro.
loop at <itab>
<do the row-level processing here>
endloop.
En vez de utilizar:
Usar SELECT into <itab> para almacenar las filas necesarias en una tabla interna,
entonces
Clasificar las filas por los campos llave,
Use READ TABLE WITH KEY ... BINARY SEARCH en lugar de SELECT SINGLE. Note
que esto slo tiene sentido cuando la tabla que usted almacena en una tabla interna no es
demasiado grande (esta decisin debe ser tomada segn el caso).
Cuando lee un solo registro en una tabla interna, el READ TABLE WITH KEY no es un
READ directo. Este significa que si los datos no son clasificados segn la llave, el sistema
debe leer secuencialmente la tabla. Por lo tanto, usted debe:
ORDENAR la tabla
Usar READ TABLE WITH KEY BINARY SEARCH para un rendimiento mejor.
Por ejemplo :
es ms eficiente que
SORT ITAB.
Para averiguar cuantas entradas estn en una tabla interna use DESCRIBE.
es ms eficiente que
LOOP AT ITAB.
CNTLNS = CNTLNS + 1.
ENDLOOP.
es ms eficiente que
IF FLD CP '* #'.
ENDIF.
FLDLEN = SY-FDPOS.
Desde el release 4.0, OPEN SQL permite ambos inner y outer table joins. Los SELECTs
anidados pueden ser usados para llevar a cabo la misma seleccin.
Use este:
form select_good.
data: t_vbak like vbak occurs 0 with header line.
data: t_vbap like vbap occurs 0 with header line.
select * from vbak into table t_vbak up to 200 rows.
select * from vbap
for all entries in t_vbak
where vbeln = t_vbak-vbeln.
...
endselect.
endform.
En vez de este:
form select_bad.
select * from vbak up to 200 rows.
select * from vbap where vbeln = vbak-vbeln.
...
endselect.
endselect.
endform.
Aunque usando "SELECT...FOR ALL ENTRIES IN..." es generalmente muy rpido, hay
que tener en cuenta lo siguiente:
En primer lugar, la SAP automticamente quita cualquier duplicado del resto de los
archivos recuperados. Por lo tanto, si usted desea asegurar que ninguno registros
calificados son desechados, la lista de registros del INNER SELECT debe ser diseada
para asegurar que los registros recuperados no contendrn duplicados (normalmente, este
significara incluir en la lista de campos recuperados todos aquellos campos que
comprenden la llave primaria de aquella tabla).
En segundo lugar, si utiliza "SELECT ... FROM <database table> FOR ALL ENTRIES IN
TABLE <itab>" y la tabla interna <itab> esta vaca, entonces todas las filas de <la tabla de
base de datos> sern recuperadas.
En tercer lugar, si la tabla interna que suministra los criterios de seleccin (es decir tabla
interna <itab> en el ejemplo "...FOR ALL ENTRIES IN TABLE <itab> ") contiene un
nmero grande de entradas, puede generar degradacin del rendimiento.
En lugar de usar:
En lugar de:
<tab> = <tab_wa>.
append <tab> (modify <tab>).
Y tambin use:
En lugar de:
Use esto:
<tab2>[] = <tab1>[]. (if <tab2> is empty)
En vez de esto:
loop at <tab1>.
append <tab1> to <tab2>.
endloop.
Sin embargo, si <tab2> no esta vaca y no debe ser sobrescrita, entonces se debe usar:
Posicin Uso
1 'Z'
Abreviacin de nombre de
2-3
aplicacin
4-16 Caracteres Descriptivos
Los programas que no sern migrados para Produccin deben comenzar con "Y".
As mismo, SAP con regularidad actualiza las convenciones recomendadas para los rangos de
nombre de cliente para todos los objetos de desarrollo. Para objetos no incluidos en esta gua,
por favor consulte el documento CREADO POR SAP, y localizado en la nota SAP OSS #16466.
En el release de R/3 3.0F, los nombres de un programa ABAP estaban limitados con 8
caracteres. Desde el release de R/3 4.6C, los nombres de programas ABAP pueden ahora
tener una longitud de hasta 40 caracteres.
Para todos los objetos y documentos de desarrollo se utilizar la siguiente convencin de
nombres:
ZMMSS_NN_texto
Posicin Uso
LETRA OBJETO
PG Programa
IN Incluye
FM Mdulo de Funcin
RP Reportes
BI Batch Input
SQ SAP Query
WF WorkFlow
SF Smartform
SS Sapscript
AF AfobeForm
BS BSP
FG Grupo de Funciones
TX Transaccin
EF Documento de Especificacin Funcional
ET Documento de Especificacin Tcnica
DT Documento de Documentacin Tcnica
Si el programa ABAP est siendo creado como un INCLUDE de datos globales o un INCLUDE
de subrutina, este debe ser formatea como sigue:
Posicin Uso
Las clases de desarrollo slo deben ser creadas cuando un nuevo proyecto especfico requiere
que todos los componentes sean unidos para objetivos organizativos.
Zmm
Todos los objetos creados durante el desarrollo de alguna aplicacin, deben ser
asignados a la clase de desarrollo de acuerdo al Mdulo SAP al que
pertenecen.
Posicin Uso
Posicin Uso
6 'I' para mdulos PAI, 'O' para mdulos PBO, 'F' para
subrutinas
Titlebar 3 Zxx
x: Abierto
Domains 10 ZDxxxxxxxx
X: Abierto
Las clases y sus subclases dependientes comparten el mismo espacio de nombres que
afectan:
Constantes (CONSTANTS) ,
Variables (DATA, CLASS-DATA) ,
Mtodos (METHODS, CLASS-METHODS) y
Eventos (EVENTS, CLASS-EVENTS).
SAP no ha decidido todava si permite maysculas o minsculas para nombres internos (para
separar palabras individuales - como en JAVA). Por lo tanto, para separar palabras individuales
todava tenemos que usar el carcter subrayar.
<method name>
El nombre del mtodo debe comenzar con un verbo.
Nombre de mtodo
GET_STATUS, CREATE_ORDER,
DETERMINE_PRICE
<event name>
Los nombres de eventos deben ser como estos:
<Sustantivo>_<Participio del verbo>.
Evento
BUTTON_PUSHED,
COMPANY_CODE_CHANGED,
BUSINESS_PARTNER_PRINTED
<type name>_ty
Definicin de Tipo de
INTERNAL_TYPE_TY,
Clase Local
TREE_LIST_TY
<variable name>
Para evitar confusiones con nombres de mtodos, se
debe evitar usar verbos al comienzo durante el
Definicin de Datos nombramiento de variables dentro de una clase
(Variable) (CLASS-DATA, DATA).
Ejemplos:
LINE_COUNT, MARK_PRINTED,
MARK_CHANGED, STATUS
C_<constant name>
C_MAX_LINE,
Definicin de
C_DEFAULT_STATUS,
datos(Constantes)
C_DEFAULT_WIDTH,
C_MAX_ROWS
6.7.4. Convenciones De Objetos De Metodo
SET_<attribute name>,
GET_<attribute name>
Se deben prefijar todos los atributos de acceso
Atributos de acceso
con GET_ o con SET segn el caso.
GET_STATUS,
SET_USE_COUNT
ON_<event name>
Para mtodos que tratan con un evento, se debe
Mtodos que tratan con comenzar el nombre con ON_ seguido del nombre
un Evento del evento relevante.
ON_BUTTON_PUSHED,
ON_BUSINESS_PARTNER_PRINTED
AS_<new Type>
Mtodos que realizan
AS_STRING,
conversiones de tipo
AS_ISOCODE
Mtodos que devuelven
un valor booleano
Estos mtodos no pueden
retornar ninguna
EXCEPCION. IS_<adjective>
Recomendacin: El valor IS_OPEN, IS_EMPTY,
booleano puede ser IS_ACTIVE
representado por
ESPACIO/"X" para
Falso/Verdadero..
Mtodos de Verificacin
Estos mtodos difieren de
los
CHECK_<objective>
IS_<adjective>" por su
CHECK_AUTHORIZATION,
habilidad para retornar
CHECK_PROCESS_DATE
excepciones.
Los parmetros son nombrados desde el punto de vista de los mtodos, que los pusieron en
prctica:
El trabajo del desarrollador es ms fcil cuando estn disponibles los estndares para el
nombramiento de excepciones. Lo siguiente es una tabla de excepciones ms significativas, y
que tambin pueden ser usadas genricamente.
(Ejemplo: ...NOT_FOUND podra usarse como DATE_NOT_FOUND)
EXCEPCIN SIGNIFICADO
ACTION NOT
La accin solicitada o el solicitado OK-Code soportado
SUPPORTED
Esta EXCEPCIN puede ser colocada si se requiere
que el usuario seleccione lo que pasa despus en un
CANCELLED
mtodo (por ejemplo: Lista de Seleccin) y l/ella
selecciona "Anular".
EXISTING Un nuevo objeto ya existe en la base de datos.
Los mtodos no se pueden ejecutar debido al estado
de ejecucin. Esta excepcin es usada sobretodo para
FAILED casos donde el estado de ejecucin est
temporalmente en una situacin que no permite que
las tareas del mtodo sean realizadas.
Una sub funcin del mtodo no puede ser ejecutada
debido al estado de ejecucin (OPEN_FAILED,
..._FAILED
CLOSE_FAILED, SELECTION_FAILED,
AUTHORIZATION_FAILED)
FOREIGN_LOCK Otros usuarios bloquean los datos.
El objeto de datos en la base de datos es
INCONSISTENT
inconsistente.
El sub-object de datos de un objeto en la bases de
..._INCONSISTENT
datos es inconsistente.
El objeto de datos entrado no es correcto. (e.g.
INVALID
Company Code is not available)
Los datos dados del subobjeto de un objeto no son
..._INVALID
correctos.
El ltimo recurso. Si todo lo dems falla y el error no
INTERNAL_ERROR
puede manejarse, se debe aplicar esta EXCEPCIN.
NOT_AUTHORIZED El usuario no tiene la autorizacin para esta accin.
El objeto solicitado no esta correctamente
NOT_CUSTOMIZED
personalizado.
El subobjeto del objeto solicitado no esta
..._NOT_CUSTOMIZED
correctamente personalizado.
NOT_FOUND El objeto solicitado no ha sido encontrado.
El subobjeto del objeto solicitado no ha sido
..._NOT_FOUND
encontrado.
La combinacin de parmetros de entrada no es
NOT_QUALIFIED suficiente para permitir que funciones del mtodo
fueran realizadas.
..._NOT_QUALIFIED Un parmetro especfico del mtodo no es calificado
NUMBER_ERROR Error en la provisin de nmeros.
Esta excepcin puede ser puesta cuando el Basis
SYSTEM_ERROR
System registra un cdigo de error inesperado.
La siguiente lista de comprobacin fue desarrollada por la SAP para examinar rpidamente los
problemas de rendimiento ms comunes.
Las instrucciones CHECK Para campos de tabla estn embebidas en un cliclo SELECT ...
ENDSELECT?
Se hacen SELECTS sobre campos no llave usando un ndice de la base de datos, o esta
la tabla almacenada en un buffer?
Cree un ndice para la tabla en el diccionario de datos o almacene tablas en un buffer si ellos
son slo ledos o muy ledos.
Convierta SELECTs anidados a database views, a DB joins (v4.0), o a SELECT xxx FOR ALL
ENTRIES IN ITAB.
Hay SELECTs sin condicin WHERE contra tables que crecen constantemente(BSEG,
MKPF, VBAK)?
Haga buffer de las tablas de datos maestros almacenando los datos en una tabla interna y
llenando la tabla usando el mtodo READ TABLE ... BINARY SEARCH.
El programa esta usando la tcnica SELECT ... APPEND ITAB ... ENDSELECT para llenar
tablas internas?
Cambie el procesamiento para leer los datos inmediatamente en una tabla interna. (SELECT
VBELN AUART ... INTO TABLE T_VBAK ...).
El programa esta hacienda clculos que podran hacerse va las funciones SUM, AVG,
MIN, o MAX de la sentencia SELECT?
Se estn procesando las tablas internas usando la tcnica READ TABLE itab WITH
KEY ... BINARY SEARCH?
Este seguro que el programa utiliza la sentencia COMMIT WORK cuando una o ms unidades
de trabajo (LUWs) han sido procesadas.
Despus de un tiempo, tanto cdigo comentado puede acumularse haciendo difcil de leer el
programa - es decir el cdigo comentado acumulado puede ser confuso ms que provechoso.
(El cdigo que alguna vez fue activo debe llevarse generalmente como cdigo comentado en
al menos un transporte antes de que realmente sea suprimido, pero este no es una exigencia
absoluta.)
Si, a juicio del desarrollador, el cdigo comentado es confuso ms bien que provechoso, el viejo
cdigo puede ser suprimido si se cumplen TODAS las siguientes cuatro condiciones:
2. Usted aade el texto a la historia de revisiones del programa, especificando las lneas que
suprimi, por qu las suprimi, y el transporte liberado; y se debe citar tambin el ltimo
transporte en el cual este cdigo estaba activo.
2. Grupos De Autorizacin
4. Uso De Fechas
Los formatos preferidos para representar una fecha en un informe impreso son MM/DD/YYYY o
DD-Mon-YYYY (donde "el MM" es un nmero de dos dgitos del mes, "DD" es un nmero de
dos dgitos del da dentro del mes, y "YYYY" es un ao de cuatro dgitos, y "Mon" es la
abreviatura de tres letras del nombre del mes).
En cualquier caso, el uso de un ao de 4 dgitos es una exigencia. (El formato preferido para
fechas en entrada es YYYYMMDD.)
Siempre que una fecha sea escrita o leda, el campo de ao debe contener cuatro dgitos. La
nica excepcin a este estndar es cuando se lee desde o se escribe a archivos externos,
donde la restriccin de ao 2000 en el sistema externo puede ser diferente. Sin embargo, hasta
en este caso, es deseable asignar cuatro dgitos para el ao en la disposicin de archivo.
Muchos programas leen archivos de entrada o producen extractos del R/3 y requieren nombres
detallados de archivo de datos y estados de error (ms all de la capacidad del planificador de
trabajo Job Scheduler estndar de R/3).
La tabla ZJOBRUN2 fue creada para proporcionar un registro comn para el estado de
trabajo. Todos los programas que tienen que consultar el estado de trabajo deben leer / escribir
archivos a / desde esta tabla. Los nuevos programas no deben usar archivos de texto fuera del
sistema R/3 u otras tablas cliente para este fin.
ZJOBRUN2
Table
Esta seccin trata del mtodo "recomendado" para comunicar la informacin de un proceso de
primer plano a un proceso de fondo.
En algunos casos es se requiere tener un programa interactivo que carga datos (por ejemplo
leyendo un archivo en la mquina de escritorio, u otros leyndolos por otros medios como la
entrada de usuario o una seleccin controlada por entrada de usuario) y pasa datos a un
trabajo de fondo para un procesamiento adicional. Hay varios caminos a travs de los cuales la
informacin podra ser pasada. Un mtodo es hacer que el programa interactivo escriba un
archivo que el trabajo de fondo leer. Lo anterior ya no se recomienda.
Los dos primeros mtodos asumen que el trabajo interactivo (primer plano) crea y llama el
trabajo de fondo y puede pasar parmetros al trabajo de fondo por la inclusin de los valores de
parmetro en el comando SUBMIT.
Si hay datos muy pequeos, hacer que el trabajo de primer plano use el comando SUBMIT de
pasar los datos actuales por parmetros de pantalla de seleccin u opciones de seleccin
cuando cree el trabajo de fondo.
Si hay ms datos, hacer que el trabajo de primer plano lo exporte a la tabla INDX en la base de
datos y con el comando SUBMIT se pasa la llave ID con un parmetro de pantalla de seleccin
cuando se cree el trabajo de fondo.
En algunos casos especiales, podra ser mejor crear una nueva tabla cliente y hacer que el
trabajo de primer plano cargue los datos en la tabla cliente, desde la cual el trabajo de fondo lo
recuperar.
En el trabajo de primer plano, se asume que se tiene definida una tabla interna llamada "t_itab",
junto con la carga de datos. La tabla interna el "t_itab" tiene exactamente la misma definicin
en el fondo trabajo.
TABLES INDX.
DATA key like INDX-SRTFD.
EXPORT t_itab TO DATABASE INDX(ar) ID key.
donde "t_itab" es el nombre de su tabla interna, el "ar" es una constante de dos caracteres de
su eleccin, "key" es una variable que contiene una llave nica (hasta 22 carcteres) que usted
cre (usted puede usar elementos como el nombre de usuario, la fecha, el tiempo, el nmero
de proceso de trabajo, el nombre de servidor de aplicacin, etc. para producir una llave nica):
En el trabajo de fondo:
TABLES INDX.
PARAMETERS: a_key1 like INDX-SRTFD NO-DISPLAY.
IMPORT t_itab FROM DATABASE INDX(ar) ID a_key1 .
REPORT ZSKELREP.
*********************************************************************** Nombre: (nombre_reporte)
* Descripcin:
* Fecha (MM/DD/AAAA):
* Autor:
* Transaccin (si aplica):
* Requerido por:
*********************************************************************** HISTORIAL DE CAMBIOS
************************************************************************
* Descripcin:
*
* Fecha:
* Autor:
* Solicitado por:
**********************************************************************
*------I N C L U D E S ------------------------------------------------------------*
*------C O N S T A N T E S ---------------------------------------------------*
*------TABLAS/ESTRUCTURAS----------------------------------------------*
TABLES: ...
*------VARIABLES------------------------------------------------------------*
DATA: ...
* Evento que ocurre antes que la pantalla de seleccin sea mostrada al usuario
*------ INICIALIZACION ------------------------------------------------------*
INITIALIZATION.
* Evento que sucede cada vez que el usuario da Enter en una pantalla de
* seleccin. Este evento se ignora en procesamiento en Background..
*------ AT SELECTION-SCREEN ----------------------------------------*
AT SELECTION-SCREEN.
GET ...
END-OF-SELECTION.
SORT ...
LOOP ...
AT FIRST.
ENDAT.
AT NEW ...
ENDAT.
AT END OF ...
ENDAT.
AT LAST.
ENDAT.
ENDLOOP.
* Subrutinas
*----------------------------------------------------------------
*
*
*----------------------------------------------------------------
FORM ...
ENDFORM.
2. Plantilla Reporte Interactivo De Lista
REPORT ZSKELINT.
************************************************************************
* Nombre: (nombre_reporte)
* Descripcin:
* Fecha (MM/DD/AAAA):
* Autor:
* Transaccin (si aplica):
* Requerido por:
************************************************************************
* HISTORIAL DE CAMBIOS
************************************************************************
* Descripcin:
*
* Fecha:
* Autor:
* Solicitado por:
************************************************************************
TABLES: ...
DATA: ...
SELECT-OPTIONS: ...
PARAMETERS: ...
FIELD-SYMBOLS: ...
FIELD-GROUPS: ...
* Evento que ocurre antes que la pantalla de seleccin sea mostrada al usuario
INITIALIZATION.
TOP-OF-PAGE.
END-OF-PAGE.
START-OF-SELECTION.
GET ...
END-OF-SELECTION.
* Evento que ocurre cuando un usuario presiona una tecla PF, por ej.. PF6
* El rea escondida y el campo SY-LISEL estn disponibles automticamente.
* Genera la sub-lista con SY-LSIND = 1-9. Con PF3 automticamente
* nos devolvemos al nivel inmediatamente anterior, (SY-LSIND - 1).
AT PF...
* Evento que ocurre cuando el usuario escoge LIST en el OK code
* El rea escondida y el campo SY-LISEL estn disponibles automticamente.
* Genera la sub-lista con SY-LSIND = 1-9. Con PF3 automticamente
* nos devolvemos al nivel inmediatamente anterior, (SY-LSIND - 1).
AT USER-COMMAND.
CASE SY-UCOMM.
WHEN 'LIST'. .....
ENDCASE.
* Evento que ocurre cuando el usuario coloca el cursor en una lnea especfica
* sobre el reporte y da enter.
* El rea escondida y el campo SY-LISEL estn disponibles automticamente.
* Genera la sub-lista con SY-LSIND = 1-9. Con PF3 automticamente
* nos devolvemos al nivel inmediatamente anterior, (SY-LSIND - 1).
AT LINE-SELECTION.
* Subrutinas
*----------------------------------------------------------------
*
*
*----------------------------------------------------------------
FORM ...
ENDFORM.
3. Creacin De Un Archivo Plano Secuencial
REPORT ZSKELOUT.
************************************************************************
* Nombre: (nombre_reporte)
* Descripcin:
* Fecha (MM/DD/AAAA):
* Autor:
* Transaccin (si aplica):
* Requerido por:
************************************************************************
* HISTORIAL DE CAMBIOS
************************************************************************
* Descripcin:
*
* Fecha:
* Autor:
* Solicitado por:
************************************************************************
*------I N C L U D E S ------------------------------------------------------------*
*------C O N S T A N T E S ---------------------------------------------------*
*------TABLAS/ESTRUCTURAS----------------------------------------------*
TABLES: ...
*------VARIABLES -------------------------------------------------------------*
DATA: ...
GET ...
MOVE ... TO ...
WRITE ... TO ...
UNPACK ... TO ...
TRANSFER ... TO ...
END-OF-SELECTION.
* Subrutinas
*----------------------------------------------------------------
*
*
*----------------------------------------------------------------
FORM ...
ENDFORM.
4.
Lectura
De Un
Archivo
Plano Y
Creacin
De Una
Sesin
Batch
Input
report zskelbdc.
************************************************************************
* Nombre: (nombre_reporte)
* Descripcin:
* Fecha (MM/DD/AAAA):
* Autor:
* Transaccin (si aplica):
* Requerido por:
************************************************************************
* HISTORIAL DE CAMBIOS
************************************************************************
* Descripcin:
*
* Fecha:
* Autor:
* Solicitado por:
************************************************************************
*------I N C L U D E S ------------------------------------------------*
*------C O N S T A N T E S --------------------------------------------*
*------TABLAS/ESTRUCTURAS----------------------------------------------*
tables: ...
*----------------------------------------------------------------*
*------ PROGRAMA PRINCIPAL -----------------------------------------------*
start-of-selection.
open dataset p_dataset in text mode.
if sy-subrc <> 0.
write: / text-e00, sy-subrc.
stop.
endif.
REPORT ZSKELCLT.
************************************************************************
* Nombre: (nombre_reporte)
* Descripcin:
* Fecha (MM/DD/AAAA):
* Autor:
* Transaccin (si aplica):
* Requerido por:
************************************************************************
* HISTORIAL DE CAMBIOS
************************************************************************
* Descripcin:
*
* Fecha:
* Autor:
* Solicitado por:
************************************************************************
tables: indx, ...
select-options: ...
parameters: ...
field-symbols: ...
start-of-selection.
*----------- DYNPRO nnn -----------------------------------------*
perform bdc_dynpro using 'SAPMxxxx' 'nnn'.
perform bdc_field using 'TABL-FIELD' 'LITERAL'.
*----------- DYNPRO nnn -----------------------------------------*
perform bdc_dynpro using 'SAPMxxxx' 'nnn'.
perform bdc_field using 'TABL-FIELD' TAB-VAR.
*----------------------------------------------------------------*
call transaction ' ' using trantab mode 'N' update 'S'.
* Manejo de mensajes
if sy-subrc = 0.
* En este punto el programa puede hacer varias cosas como:
* Enviar una confirmacin o un error a otro programa va RFC, o
* almacenar valores de llave y nmero de documento de confirmacin
move 'Transaccin efectuada' TO ...
move message_text to ...
modify ...
else.
move 'Transaccin no exitosa' to ...
move message_text to ...
modify ...
* En el caso de transacciones erradas:
* Almacenar la tabla interna en la tabla INDX para futuro procesamiento en
* en lnea de la transaccin SAP.
export trantab to indx(..) id ...
endif.
* o crear una sesin batch input para procesamiento fututo.
refresh trantab.
end-of-selection.
*----------------------------------------------------------------
* Subrutinas *
*----------------------------------------------------------------
*--- Adiciona un registro a la Tabla DYNPRO ----------------------------
form bdc_dynpro using program dynpro.
clear bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
append bdcdata.
endform.
*--- Adicionar un campo a DYNPRO ------------------------------------
form bdc_field using fnam fval.
clear bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
append bdcdata.
endform.
6. Plantilla Desarrollo SAPSCRIPT
************************************************************************
* Nombre: (nombre_reporte)
* Descripcin:
* Fecha (MM/DD/AAAA):
* Autor:
* Transaccin (si aplica):
* Requerido por:
************************************************************************
* HISTORIAL DE CAMBIOS
************************************************************************
* Descripcin:
*
* Fecha:
* Autor:
* Solicitado por:
************************************************************************
*----------------------------------------------------------------------*
* INCLUDE ZCCBFI021D *
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form BUSCA_DATOS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM BUSCA_DATOS.
* Imprime
PERFORM abre_form.
PERFORM IMPRIME_FORM.
ENDLOOP.
PERFORM cerrar_form.
*&--------------------------------------------------------------------*
*& Form imprime_form
*&--------------------------------------------------------------------*
FORM IMPRIME_FORM.
perform inicio_form.
IF SY-SUBRC = 0.
* Colocar todos los perform imprime que sean necesarios
* segn el ejemplo que se ve a continuacin
* Cuando se quiere ejecutar todo el cdigo asociado a una
* ventana
perform imprime using space 'FOOTER'.
* Cuando se quiere ejecutar un cdigo asociado a una
* ventana y su elemento
perform imprime using 'MAIN' 'PRINC'.
perform termina_form.
ENDIF.
ENDFORM. "imprime_form
*&--------------------------------------------------------------------*
*& Form abre_form
*&--------------------------------------------------------------------*
FORM ABRE_FORM.
endform. "abre_form
*&--------------------------------------------------------------------*
*& Form inicio_form
*&--------------------------------------------------------------------*
FORM INICIO_FORM.
endform. "inicio_form
*&---------------------------------------------------------------------*
*& Form imprime
*&---------------------------------------------------------------------*
FORM IMPRIME using p_window
p_element.
*&---------------------------------------------------------------------*
*& Form termina_form
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM termina_form .
*&---------------------------------------------------------------------*
*& Form cerrar_form
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM cerrar_form .
************************************************************************
* Nombre: (nombre_reporte)
* Descripcin:
* Fecha (MM/DD/AAAA):
* Autor:
* Transaccin (si aplica):
* Requerido por:
************************************************************************
* HISTORIAL DE CAMBIOS
************************************************************************
* Descripcin:
*
* Fecha:
* Autor:
* Solicitado por:
************************************************************************
**----------------------------------------------------------------------
*
** INCLUDE ZCCBMM015D *
**----------------------------------------------------------------------
*&---------------------------------------------------------------------*
*& Form SELECCION_DATOS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SELECCION_DATOS.
* Imprime
PERFORM IMPRIME.
FORM IMPRIME.
* Ejecuta el smartform
CALL FUNCTION 'FUNC_MOD_NAME'
EXPORTING
IMPORTING
EXCEPTIONS
FORMATTING_ERROR =1
INTERNAL_ERROR =2
SEND_ERROR =3
USER_CANCELED =4
OTHERS = 5.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
REPORT Z_PLANTILLA_ALV.
*********************************************************************** Nombre: (nombre_reporte)
* Descripcin:
* Fecha (MM/DD/AAAA):
* Autor:
* Transaccin (si aplica):
* Requerido por:
*********************************************************************** HISTORIAL DE CAMBIOS
************************************************************************
* Descripcin:
*
* Fecha:
* Autor:
* Solicitado por:
**********************************************************************
*
TYPE-POOLS: SLIS.
*------I N C L U D E S ------------------------------------------------*
*------C O N S T A N T E S --------------------------------------------*
*------TABLAS/ESTRUCTURAS----------------------------------------------*
TABLES: ???:
*------TABLAS INTERNAS-------------------------------------------------*
data: begin of i_datos occurs 100,
xxxx,
end of i_datos.
*------VARIABLES-------------------------------------------------------*
* Variables necesarias para el lisado ALV
DATA: FIELDTAB TYPE SLIS_T_FIELDCAT_ALV,
HEADING TYPE SLIS_T_LISTHEADER,
LAYOUT TYPE SLIS_LAYOUT_ALV,
EVENTS TYPE SLIS_T_EVENT,
REPNAME LIKE SY-REPID,
F2CODE LIKE SY-UCOMM VALUE '&ETA',
G_SAVE(1) TYPE C,
G_EXIT(1) TYPE C,
G_VARIANT LIKE DISVARIANT,
GX_VARIANT LIKE DISVARIANT.
*------CONSTANTES -----------------------------------------------*
CONSTANTS: FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE
'TOP_OF_PAGE'.
*------PARAMETER/SELECT-OPTIONS EN PANTALLA----------------------------*
SELECTION-SCREEN BEGIN OF BLOCK SEL WITH FRAME TITLE TEXT-001.
*SELECT-OPTIONS: S_xxxxx FOR xxxxxxxx.
SELECTION-SCREEN END OF BLOCK SEL.
PARAMETERS: P_VARI LIKE DISVARIANT-VARIANT. " ALV Variant
*------INITIALIZATION -------------------------------------------------*
INITIALIZATION.
*------AT SELECTION-SCREEN---------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_VARI.
PERFORM F4_FOR_VARIANT.
AT SELECTION-SCREEN.
PERFORM PAI_OF_SELECTION_SCREEN.
*------START-OF-SELECTION----------------------------------------------*
START-OF-SELECTION.
* PERFORM SELECCION_DATOS.
*------END-OF-SELECTION------------------------------------------------*
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form INITIALIZE_FIELDCAT
*&---------------------------------------------------------------------*
* Cambia atributos de los campos del listado
*----------------------------------------------------------------------*
FORM INITIALIZE_FIELDCAT USING P_FIELDTAB TYPE SLIS_T_FIELDCAT_ALV.
DATA: L_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
* totalized columns
* CLEAR L_FIELDCAT.
* L_FIELDCAT-TABNAME = 'I_DATOS'.
* L_FIELDCAT-SP_GROUP = 'A'.
* L_FIELDCAT-DO_SUM = 'X'.
* L_FIELDCAT-FIELDNAME = 'LABST'.
*&---------------------------------------------------------------------*
*& Form BUILD_EVENTTAB
*&---------------------------------------------------------------------*
* Gestin de evntos del listado ALV
*----------------------------------------------------------------------*
FORM BUILD_EVENTTAB USING P_EVENTS TYPE SLIS_T_EVENT.
DATA: LS_EVENT TYPE SLIS_ALV_EVENT.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = P_EVENTS.
READ TABLE P_EVENTS WITH KEY NAME = SLIS_EV_TOP_OF_PAGE
INTO LS_EVENT.
IF SY-SUBRC = 0.
MOVE FORMNAME_TOP_OF_PAGE TO LS_EVENT-FORM.
APPEND LS_EVENT TO P_EVENTS.
ENDIF.
ENDFORM. " BUILD_EVENTTAB
*&---------------------------------------------------------------------*
*& Form BUILD_COMMENT
*&---------------------------------------------------------------------*
* Texto de cabecera de pgina
*----------------------------------------------------------------------*
FORM BUILD_COMMENT USING P_HEADING TYPE SLIS_T_LISTHEADER.
DATA: HLINE TYPE SLIS_LISTHEADER,
TEXT(60) TYPE C,
SEP(20) TYPE C.
CLEAR: HLINE, TEXT.
HLINE-TYP = 'H'.
WRITE: TEXT-101 TO TEXT+23.
HLINE-INFO = TEXT.
APPEND HLINE TO P_HEADING.
CLEAR TEXT.
WRITE: 'User: ' TO TEXT,
SY-UNAME TO TEXT+6,
'Date: ' TO TEXT+25,
SY-DATUM TO TEXT+31,
'Page: ' TO TEXT+50,
SY-PAGNO TO TEXT+56.
HLINE-INFO = TEXT.
APPEND HLINE TO P_HEADING.
*---------------------------------------------------------------------*
* FORM TOP_OF_PAGE *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM TOP_OF_PAGE.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = HEADING.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form INITIALIZE_VARIANT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM INITIALIZE_VARIANT.
G_SAVE = 'A'.
CLEAR G_VARIANT.
G_VARIANT-REPORT = REPNAME.
GX_VARIANT = G_VARIANT.
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
I_SAVE = G_SAVE
CHANGING
CS_VARIANT = GX_VARIANT
EXCEPTIONS
NOT_FOUND = 2.
IF SY-SUBRC = 0.
P_VARI = GX_VARIANT-VARIANT.
ENDIF.
ENDFORM. " INITIALIZE_VARIANT
*&---------------------------------------------------------------------*
*& Form F4_FOR_VARIANT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM F4_FOR_VARIANT.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
IS_VARIANT = G_VARIANT
I_SAVE = G_SAVE
IMPORTING
E_EXIT = G_EXIT
ES_VARIANT = GX_VARIANT
EXCEPTIONS
NOT_FOUND = 2.
IF SY-SUBRC = 2.
MESSAGE ID SY-MSGID TYPE 'S' NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
IF G_EXIT = SPACE.
P_VARI = GX_VARIANT-VARIANT.
ENDIF.
ENDIF.
ENDFORM. " F4_FOR_VARIANT
*&---------------------------------------------------------------------*
*& Form PAI_OF_SELECTION_SCREEN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM PAI_OF_SELECTION_SCREEN.
*
IF NOT P_VARI IS INITIAL.
MOVE G_VARIANT TO GX_VARIANT.
MOVE P_VARI TO GX_VARIANT-VARIANT.
CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
EXPORTING
I_SAVE = G_SAVE
CHANGING
CS_VARIANT = GX_VARIANT.
G_VARIANT = GX_VARIANT.
ELSE.
PERFORM INITIALIZE_VARIANT.
ENDIF.
ENDFORM. " PAI_OF_SELECTION_SCREEN
*&---------------------------------------------------------------------*
*& Form BUILD_LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LAYOUT text *
*----------------------------------------------------------------------*
FORM BUILD_LAYOUT USING P_LAYOUT TYPE SLIS_LAYOUT_ALV.
P_LAYOUT-F2CODE = F2CODE.
P_LAYOUT-ZEBRA = 'X'.
P_LAYOUT-DETAIL_POPUP = 'X'.
ENDFORM. " BUILD_LAYOUT
*&---------------------------------------------------------------------*
*& Form WRITE_OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM WRITE_OUTPUT.