Está en la página 1de 45

Consideraciones respecto a los desarrollos

Una gua rpida con respecto a nombres y mejores prcticas en ABAP


Area de Sistemas - Aris S.A. -

- VERSIN 1.0 2011

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------INDICE OBJETIVO 1. Nomenclatura de OTs . !arca "ara modi#icaciones 3. O%&eto de 'utori(aci)n $. +a,uete - Clase de desarrollo -. Veri#icaci)n 'm"liada *. O%&eto de +rue%a .. EST/0CT0/' +'/' +/O1/'! 'S ..1. .. . ..3. ..$. ..-. ..*. .... ..2. ..4. Comentarios Ca%ecera del "ro3rama Declaraci)n de datos 3lo%ales Declaraci)n de cam"os de "antalla Validaci)n de cam"os de "antalla e iniciali(aci)n /utina "rinci"al del "ro3rama Tratamiento de los datos o%tenidos E5entos de control Su%rutinas internas 03 03 0$ 0* 0* 0. 0. 02 02 02 04 10 11 1 13 13 1$ 11. 1. 1. 14 14 14 14 0 0 1

2. Con5enci)n "ara nom%res internos 'B'+$6S'+ 4. /ECO!END'CIONES 1ENE/'7ES SOB/E 8O/! 'TO 4.1. 4. . 4.3. 4.$. 4.-. 4.*. 4... 4.2. 4.4. Su%rutinas 98O/!S: +ro3ramas INC70DE Ca%eceras de listados Te;tos de selecci)n S<m%olos de te;to +antallas D=n"ros> Status = T<tulos Status 10I +atrones

10. 'SE10/'!IENTO DE C'7ID'D EN DES'//O77OS 'B'+ 10.1. 10. . 10.3. Codi#icaci)n = +resentaci)n +er#ormance !odulari(aci)n = reutili(aci)n . 30 3 3 $ $3 T'B7 ' DE +'/@! ET/OS I! '1ENES $3 $$

11. NO!ENC7'T 0/' 11.1. 11. . 'NE?OS Nomenclatura de O%&etos de /e"ositorio S'+ Nomenclatura de O%&etos No S'+

-2-

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------OBJETIVO

Contar con un marco referencial para uniformizar la nomenclatura a utilizar en los desarrollos ABAP, permitiendo una identificacin rpida, precisa y oportuna durante la etapa de desarrollo y mantenimiento. Contar con pautas y recomendaciones para programar. 1. Nomenclatura de OTs Las rdenes de transporte deben ser nombradas de acuerdo a la siguiente nomenclatura !"ipo#-!$dulo# !Proyecto# !%escripcin# !&ersin# !'uncional# %onde "ipo $dulo Proyecto %escripcin &ersin 'uncional E&mA +B-+$ C/$A &alidacin pus- de 2entas 44 5$.6"78. +B-+$ C/$A &alidacin pus- de 2entas 94: 5$.6"78. +B-$$ $7C Cotizacin Pedido de compras 44 $&AL%7; +B-$$ $7C Cotizacin Pedido de compras 4: $&AL%7; NotaA 0i la ." creada es acumulada respecto a otra, lle2a un )9* antes del n<mero de 2ersin =ue le corresponde. C( )Customizing*, +B )+or,benc-* C., '/, $$, 0%, etc. 0iglas del proyecto asociado "e1to descripti2o Cuando se mane3a ms de una ." relacionada. Comenzar con 44. 'uncional responsable o solicitante

->-

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------. !arca "ara modi#icaciones !Accin# ?!666# %onde Accin 666 !odelo e&em"loA C'SO1 Agregar 2arias l@neas de cdigo *{ INSERT @001 *----------------------------------------------------------------------* * Form TEXTO_EXP *----------------------------------------------------------------------* FORM TEXTO_EXP USING PI_ASNUM. DATA: LS_ASNUM TYPE ASMD-ASNUM, LS_TDNAME TYPE THEAD-TDNAME. REFRESH GDT_LINES. CLEAR GDT_LINES. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = PI_ASNUM IMPORTING OUTPUT = LS_ASNUM. LS_TDNAME = LS_ASNUM. CALL FUNCTION 'READ_TEXT' EXPORTING ID = GC_ID LANGUAGE = SY-LANGU NAME = LS_TDNAME OBJECT = GC_OBJECT TABLES LINES = GDT_LINES EXCEPTIONS NOT_FOUND = 4. IF SY-SUBRC ! ". MESSAGE S""# $ITH TEXT-""% PI_ASNUM TEXT-""4. ENDIF. ENDFORM. *} INSERT @001 "TEXTO_EXP - /6078" /nsertar - 87PLAC7 $odificar - %7L7"7 Comentar 6<mero correlati2o de > d@gitos

-A-

Sistemas ------------------------------------------------------------------------------------------------------------- ---------------------------------- C'SO $odificar 2arias l@neas de cdigo

*{ REPLACE @001 *&---------------------------------------------------------------------* *& Form GET_FILE *&---------------------------------------------------------------------* FORM GET_FILE CHANGING PO_FILE TYPE STRING. DATA: LDT_FILE_TABLE TYPE STANDARD TABLE OF FILE_TABLE, LS_FILE_FILTER TYPE STRING, LI_RC TYPE I. LS_FILE_FILTER = CL_GUI_FRONTEND_SERVICES=!FILETYPE_EXCEL. CALL METHOD CL_GUI_FRONTEND_SERVICES=!FILE_OPEN_DIALOG EXPORTING $INDO$_TITLE = 'A&'(' )* ...' FILE_FILTER = LS_FILE_FILTER DEFAULT_FILENAME = PO_FILE INITIAL_DIRECTORY = '+' CHANGING FILE_TABLE = LDT_FILE_TABLE RC = LI_RC. IF SY-SUBRC E, " AND LI_RC E, -. READ TABLE LDT_FILE_TABLE INDEX - INTO PO_FILE. ENDIF. ENDFORM. " GET_FILE *} REPLACE @001 C'SO3 7liminarBComentar 2arias l@neas de cdigo *{ DELETE @001 **&---------------------------------------------------------------------* **& Mod !" STAT#S_0100 O#TP#T **&---------------------------------------------------------------------* ** $"%$ **----------------------------------------------------------------------* *MOD#LE &$'$ &_0100 O#TP#T( * SET PF-STAT#S )0100)( * SET TITLE*AR )0100)( *ENDMOD#LE( " STAT#S_0100 O#TP#T *} DELETE @001 C'SO$ Agregar una l@nea de cdigo DATA: GS_ID TYPE ICON-ID. "INSERT @001

C'SO- $odificar una l@nea de cdigo REFRESH GT_LINES. "REPLACE @001 C'SO* 7liminarBComentar una l@nea de cdigo * C+EC, NOT G+T_*SEG-. IS INITIAL( "DELETE @001

-C-

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------3. O%&eto de 'utori(aci)n

"odo desarrollo debe contar con la 2alidacin de uno o 2arios ob3etos de autorizacin seg<n lo solicitado en el re=uerimiento respecti2o. 7sto con el ob3eti2o de restringir la informacin a mostrar o procesar. E&mA *----------------------------------------------------------------------* * /ALIDACION DE PARAMETROS DE PANTALLA *----------------------------------------------------------------------* AT SELECTION-SCREEN. AUTHORITY-CHEC. OBJECT 'YMM_$ER.S' ID '$ER.S' FIELD P_$ER.S ID 'ACTVT' FIELD '"%'. "01& '!12'r IF SY-SUBRC NE ". MESSAGE E""" $ITH TEXT-E"- P_$ER.S. ENDIF. NotaA Considerar el campo acti2idad en la 2alidacin, para una me3or restriccin. $. +a,uete - Clase de desarrollo

"odo ob3eto de repositorio DB; 2lido para P8%, debe crearse -aciendo referencia a un pa=uete de desarrollo. Para el caso de ob3etos de $e3ora Continua, la asignacin estar relacionada con el mdulo 0AP al =ue pertenece. Para el caso de ob3etos de Proyectos, debe crearse un pa=uete e1clusi2o, a fin de tener identificado todos los ob3etos =ue se crearon a partir de El. E&mA +a,uete ;BC ;B+ ;C. ;C0 ;'/ ;F8 ;$$ ;P$ ;PP ;P0 ;G$ ;0% ;+$ DC/$A DACP DA58/ +ro=ecto $e3ora Continua $e3ora Continua $e3ora Continua $e3ora Continua $e3ora Continua $e3ora Continua $e3ora Continua $e3ora Continua $e3ora Continua $e3ora Continua $e3ora Continua $e3ora Continua $e3ora Continua C/$A Acopio de 5anaderos $yAgri Descri"ci)n (so genErico Business +are-ouse Controlling 0er2icio al Cliente 'inanzas 8ecursos Fumanos $ateriales $antenimiento Produccin 5estin de Proyectos Calidad &entas y %istribucin 5estin de Almacenes

-H-

Sistemas ------------------------------------------------------------------------------------------------------------- -----------------------------------. Veri#icaci)n 'm"liada

Antes de transportar un programa al ambiente GA0, se debe 2erificar la sinta1is del mismo utilizando la -erramienta &erificacin Ampliada. 0e puede acceder a esta -erramienta a tra2Es de las siguientes opciones A tra2Es de la t1 0L/6 A tra2Es del mismo programa, -aciendo clic derec-o en el programa -# $en< I&erificarI -# .pcin I&erificacin AmpliadaI. Al ingresar, aparecer una pantalla con unas opciones marcadas por defecto, marcar adicionalmente las opciones Cadenas caracteres y 0entencias obsoletas. Presionar 'J. Con esta -erramienta se podr 2erificar si el programa contiene errores o ad2ertencias en las diferentes secciones y componentes del mismo. NotaA &er imgenes >.a y >.b. 71iste adems otra -erramienta similar llamada C.%7 /60P7C".8. 7l /nspector de cdigo es una -erramienta para el control de ob3etos de repositorio con respecto al rendimiento, seguridad, sinta1is, y ad-esin a nombre de con2enciones. 0e puede acceder a esta -erramienta a tra2Es de la siguiente opcin Clic derec-o en el programa -# $en< I&erificarI -# .pcin ICode /nspectorI. NotaA &er imagen >.c. *. O%&etos de +rue%a

Los ob3etos creados para pruebas =ue no sean necesarios para el ambiente P8%, deben ser creados como ob3etos locales y el nombre debe empezar con DD.

-K-

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------.. EST/0CT0/' +'/' +/O1/'!'S ..1. Comentarios "odo programa desarrollado debe incluir comentarios, con el propsito de facilitar a futuros programadores una me3or comprensin del cdigo desarrollado y disminuir el impacto =ue representa para esta persona la modificacin de un cdigo no propio. "odo comentario debe estar en letra min<scula, adems debe ser claro y conciso, dando una idea general de la funcin =ue realiza esa seccin de cdigo en el programa. .. . Ca%ecera del "ro3rama La cabecera de un programa ABAP deber respetar el siguiente formato *&---------------------------------------------------------------------* *& Pro3"4$o(((5 * *& M6d !o(((((5 * *& F 741o7'!((5 * *& Tr'7&'441675 * *& A $or((((((5 * *& F"48'((((((5 * *& D"&4r1941675 * *&---------------------------------------------------------------------* *& MODIFICACIONES * *&---------------------------------------------------------------------* *& M'r4'((((5 * *& A $or((((5 * *& F 741o7'!5 * *& F"48'((((5 * *& Mo$10o(((5 * *&---------------------------------------------------------------------* REPORT YMM/NNNN MESSAGE-ID /" LINE-SI/E -%0 LINE-COUNT #1 NO STANDARD PAGE HEADING. Las primeras l@neas del programa deben ser destinadas al nombre del programa, clase de mensa3e, tamaLo del reporte de salida, etc. NotaA 7l t@tulo $.%/'/CAC/.670, slo se coloca la primera 2ez =ue se 2a a -acer una modificacin al programa, los encabezados se colocan todas las 2eces =ue se -agan modificaciones. E&mA *&---------------------------------------------------------------------* *& Pro3"4$o(((5 A4o91o d" G'7'd"ro& * *& M6d !o(((((5 MM * *& F 741o7'!((5 G1om'r S'7$1':o * *& Tr'7&'441675 ;MMR<<< * *& A $or((((((5 /"r6714' *r14"=o * *& F"48'((((((5 1>(0?(?010 * *& D"&4r1941675 R"9or$" d" :'7'd"ro&@ 4"7$ro&@ :r 9o& 3 r $'& * *&---------------------------------------------------------------------* *& MODIFICACIONES * *&---------------------------------------------------------------------* *& M'r4'((((5 @001 * *& A $or((((5 /"r6714' *r14"=o * *& F 741o7'!5 Gr'4" M'73' * *& F"48'((((5 0A(0B(?010 * *& Mo$10o(((5 A:r":'r 17d14'dor d" d"$r'44167 *

-J-

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------*&---------------------------------------------------------------------* *& M'r4'((((5 @00? * *& A $or((((5 L3&&"$ F1: "ro' * *& F 741o7'!5 L1&C"$8 Co74"941o7 * *& F"48'((((5 1?(0D(?010 * *& Mo$10o(((5 A:r":'r !' d1r"44167 d"! "&$'C!o * *&---------------------------------------------------------------------* ..3. Declaraci)n de datos 3lo%ales 7sta seccin se debe utilizar para la declaracin de todas las constantes y 2ariables globales utilizadas en el programa. La declaracin de datos debe respetar el siguiente formato !odelo e&em"loA *----------------------------------------------------------------------* * DECLARACION DE TA*LAS * *----------------------------------------------------------------------* TABLES: T""-$, "C"7$ro&ES 4 r&'!"& MBE$, "/'!or'4167 d" m'$"r1'! MSEG. "S":m"7$o do4(m'$"r1'! *----------------------------------------------------------------------* * CONSTANTES * *----------------------------------------------------------------------* CONSTANTS: GC_SOB./ TYPE ,BE$-SOB./ VALUE ',', GC_XXXXX TYPE C LENGTH -" VALUE 'OTROS', GC_$ER.S TYPE T""-$-$ER.S VALUE '-"1A'. *----------------------------------------------------------------------* * DECLARACION DE /ARIA*LES * *----------------------------------------------------------------------* TYPE-POOLS: SLIS. "A:r":'r 4om"7$'r1o * C'm9o& :!oC'!"& DATA: GS_BU.RS TYPE GS_CAMPO0 TYPE GN_CAMPO% TYPE GD_BUDAT TYPE T""--BU.RS, C LENGTH %, N, B.PF-BUDAT. "Ad141o7'r "Ad141o7'r "Ad141o7'r "Ad141o7'r 4om"7$'r1o 4om"7$'r1o 4om"7$'r1o 4om"7$'r1o

* T19o& TYPES: GTY_MARC TYPE MARC. TYPES: BEGIN OF GTY_MA.T, MATNR TYPE MA.T-MATNR, MA.TX TYPE MA.T-MA.TX, END OF GTY_MA.T. *T19o $'C!' TYPES: GTYT_MARC "S$'7d'rd GTYD_MARC "+'&8"d GTYH_MARC "Sor$"d GTYS_MARC *T'C!'& 17$"r7'& DATA: GT_MARC "S$'7d'rd GDT_MARC TYPE TABLE OF MARC, TYPE STANDARD TABLE OF GTY_MARC, TYPE HASHED TABLE OF GTY_MARC $ITH UNI,UE .EY MATNR $ER.S, TYPE SORTED TABLE OF GTY_MARC $ITH NON-UNI,UE .EY MATNR. TYPE TABLE OF GTY_MARC, TYPE GTYD_MARC,

-M-

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------"+'&8"d "Sor$"d GHT_MARC GST_MARC TYPE GTYH_MARC, TYPE GTYS_MARC.

* E&$r 4$ r'& DATA: BEGIN OF G$A_XXXX, BU.RS TYPE B.PF-BU.RS, "So41"d'd BELNR TYPE BSEG-BELNR, "F"48' d" 4o7$'C1!12'4167 END OF G$A_XXXX. DATA: G$A_MARC LI.E LINE OF GT_MARC. "A:r":'r 4om"7$'r1o * R'7:o& DATA: GR_BU.RS G$A_BU.RS TYPE RANGE OF B.PF-BU.RS, "r'7:o d" &o41"d'd"& LI.E LINE OF GR_BU.RS. LI.E LINE OF GDT_MARC, TYPE MARA-MATNR.

* F1"!d &3mCo!& FIELD-SYMBOLS: G_MARC! G_MATNR!

* F1"!d& :ro 9& FIELD-GROUPS: FG_HEADER, "A:r":'r 4om"7$'r1o FG_DETALLE. "A:r":'r 4om"7$'r1o %onde Las primeras l@neas de este blo=ue deben utilizarse para la declaracin de las tablas y estructura de datos utilizada por el programa. Cada tabla declarada debe tener a su derec-a el comentario sobre la descripcin bre2e de la misma. La segunda seccin del blo=ue se utilizar para la declaracin de constantes. La tercera seccin del blo=ue se utilizar para la declaracin de 2ariables globales. 7sto incluye campos, tablas internas, estructuras, etc. en la forma y orden en =ue se muestra en el e3emplo de arriba. Cada ob3eto adicionado debe comentarse. NotaA %ebe tratarse en lo posible, definir las 2ariables -aciendo referencia a campos definidos en el diccionario de datos, mediante la utilizacin de "DP7. La sentencia .CC(80 toda2@a se permite por razones de compatibilidad con 2ersiones ms antiguas. 0in embargo, se recomienda =ue solamente se utilice las nue2as 2ersiones de las definiciones de tablas. 7sto facilita reutilizar el cdigo en un conte1to de .b3etos ABAP. 0e recomienda )en la medida de lo posible* el uso de '/7L%-0D$B.L0 para modificar una tabla interna, a usar las l@neas de cabeceras )N+ANOOOO*, por moti2os de performance. ..$. Declaraci)n de cam"os de "antalla 7sta seccin se debe utilizar para la declaracin de todos los campos =ue se mostrarn en la pantalla de inicio del programa y =ue permiten la seleccin de la informacin )PA8A$7"780, 07L7C"-.P"/.60, 7"C*. 6o debe crearse un programa de este tipo sin al menos un parmetro de seleccin. 7sto posibilitar =ue al e3ecutar el programa se muestre primero una pantalla de seleccin, con el t@tulo del programa y los campos de seleccin, e2itando =ue el usuario e3ecute el programa por error. La declaracin de parmetros de pantalla debe respetar el siguiente formato

- :4 -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------!odelo e&em"loA *----------------------------------------------------------------------* * DISEFO PANTALLA DE SELECCION *----------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF BLOC. B_"- $ITH FRAME TITLE TEXT-""-. PARAMETERS: P_BU.RS TYPE T""--BU.RS OBLIGATORY DEFAULT '-"', P_$ER.S TYPE T""-$-$ER.S MEMORY ID $R. OBLIGATORY. SELECT-OPTIONS: S_B.LAS FOR MBE$-B.LAS NO INTERVALS NO-EXTENSION, S_MATNR FOR MSEG-MATNR. SELECTION-SCREEN END OF BLOC. B_"-. SELECTION-SCREEN BEGIN OF BLOC. B_"0 $ITH FRAME TITLE TEXT-""0. PARAMETERS: P_LFMON TYPE MBE$-LFMON OBLIGATORY, P_LFGJA TYPE MBE$-LFGJA OBLIGATORY, P_$AERS TYPE T""--$AERS OBLIGATORY. SELECTION-SCREEN END OF BLOC. B_"0. PARAMETERS: P_ALV P_REL P_ALM_R P_STC. RADIOBUTTON GROUP G- DEFAULT 'X', RADIOBUTTON GROUP G-, AS CHEC.BOX, AS CHEC.BOX DEFAULT 'X'.

%onde %eben posicionarse los distintos PA8A$7"780 y 07L7C"-.P"/.60, de acuerdo a la posicin en la =ue se desea aparezcan en la pantalla. %ebe comentarse cada parmetro declarado. 7ste tipo de 2ariables deben ser utilizadas como alternati2a para e2itar los PFA8%NC.%70 ..-. Validaci)n de cam"os de "antalla e iniciali(aci)n 7n esta seccin del programa se deben efectuar las 2alidaciones de todos los campos de la pantalla de seleccin y realizar las inicializaciones de 2ariables si corresponde. 7l formato es el =ue se muestra a continuacin *----------------------------------------------------------------------* * INICIALIGACION *----------------------------------------------------------------------* INITIALI/ATION. PERFORM INICIALI/ACION. *----------------------------------------------------------------------* * /ALIDACION DE PARAMETROS DE PANTALLA *----------------------------------------------------------------------* AT SELECTION-SCREEN OUTPUT. AT SELECTION-SCREEN ON VALUE-RE,UEST FOR P_$AERS. PERFORM HELP_$AERS USING P_$AERS. AT SELECTION-SCREEN ON BLOC. B_"-. AT SELECTION-SCREEN ON P_BU.RS. AT SELECTION-SCREEN.

- :: -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------%onde "oda 2alidacin =ue se realice sobre los parmetros de entrada debe efectuarse utilizando estos e2entos. %e esta manera, se en2iarn los mensa3es de error o informacin sobre la pantalla de seleccin, posibilitando de esa manera =ue el usuario corri3a el error seg<n corresponda. Pueden crearse subrutinas del tipo P78'.8$ para agrupar las 2alidaciones correspondientes a un e2ento de este tipo y de esa manera me3orar la modularizacin del programa, facilitando los probables cambios posteriores. 7l e2ento /6/"/AL/;A"/.6 debe utilizarse para cargar pre2iamente a su utilizacin las 2ariables deseadas. Podr crearse una subrutina para agrupar todas las inicializaciones y modular el programa. ..*. /utina "rinci"al del "ro3rama 7sta seccin del programa representa el cuerpo principal de cdigo y debe utilizarse para la e1traccin de la informacin en las bases de datos o en su defecto codificar el PnudoQ del desarrollo. 7l formato es el =ue se muestra a continuacin *----------------------------------------------------------------------* * START-OF-SELECTION *----------------------------------------------------------------------* * *DL5 *'&" d" d'$o& !6:14' $1!12'd' H NI 9'7$'!!' *----------------------------------------------------------------------* START-OF-SELECTION. * R"'!12'r 'J K $odo& !o& 9ro4"&o& 7"4"&'r1o& 9'r' r"4 9"r'r !' * 17Lorm'4167 d" !' C'&"& d" d'$o&@ 3' &"' $1!12'7do 7' *DL o 7o( * Tr'$'r d" ':r 9'r 46d1:o "7 & Cr $17'&( * L' 17Lorm'4167 d"C" $r'$'r d" '!m'4"7'r&" "7 $'C!'& 17$"r7'&( GET B.PF. GET BSEG. GET B.PF LATE. CLEAR G$A_XXXX. MOVE-CORRESPONDING B.PF TO G$A_XXXX. MOVE-CORRESPONDING BSEG TO G$A_XXXX. APPEND G$A_XXXX TO GDT_XXXX. * S1 7o &'& *DL 174! 1r 'J K mM$odo& o & Cr $17'& GO_APLICACION-!GET_DATOS2 IMPORTING EDT_DATA = GDT_DATA 3. PERFORM ALV. La rutina principal del programa siempre debe comenzar con el e2ento 0"A8"-.'-07L7C"/.6. Comentar el blo=ue principal del programa, indicando en el caso de utilizar una B%L, cul es la pantalla de seleccin =ue utiliza, as@ como tambiEn incluir todo comentario de interEs sobre la funcionalidad de la rutina. Los datos le@dos deben almacenarse en una tabla interna para despuEs de realizada la seleccin controlar =ue se -aya efectuado con E1ito. Pueden crearse subrutinas del tipo P78'.8$ para agrupar el cdigo y de esa manera me3orar la modularizacin del programa, facilitando la lectura y los probables cambios posteriores.

- :2 -

Sistemas ------------------------------------------------------------------------------------------------------------- -----------------.... Tratamiento de los datos o%tenidos 7sta seccin del programa debe ser utilizada para codificar el tratamiento de los datos obtenidos en la seccin anterior. 7l formato es el =ue se muestra a continuacin *----------------------------------------------------------------------* * FIN DE SELECCION DE DATOS *----------------------------------------------------------------------* END-OF-SELECTION. * D"C" 0"r1L14'r&" J " !' CN&J "d' d" !' 17Lorm'4167 "7 !'& * C'&"& d" d'$o& L " "%1$o&'( S1 "&$o 7o L "r' '&K@ d"C"rO $"rm17'r&" * "! 9ro:r'm' "701'7do 7 m"7&'P" d" '01&o '! & 'r1o@ 9'r' J " r"01&" * !' &"!"44167 "L"4$ 'd' IF GDT_XXXX45 IS INITIAL. MESSAGE S"""2/"3 DISPLAY LI.E 'E'. STOP. ENDIF. * "7 "&$' &"44167 d"C" 4od1L14'r&" !' 9'r$" d"! 9ro4"&o r"L"r1d' ' * !' :"7"r'4167 d" !' &'!1d'@ 3' &"' 7 r"9or$"@ 7 4'!! $r'7&'4$1o7 o * o '!: 7' o$r' L 741o7'!1d'd( * D"C" $r'$'r d" ':r 9'r&" "! 46d1:o "7 & Cr $17'&( PERFORM SUBRUTINA USING GS_CAMPO- GI_CAMPO0. PERFORM DATOS. (na 2ez 2erificado =ue el programa tiene datos para traba3ar, debe codificarse en una subrutina todo lo =ue -aga falta para complementar los datos seleccionados, ordenarlos, etc. Por ultimo, se crear una subrutina adicional donde se codificarn las sentencias necesarias para emitir el reporte. )+8/"7, AL&, etc.* ..2. E5entos de control 7sta seccin del programa debe ser utilizada para codificar todos los posibles e2entos de control, =ue son a=uellos =ue se disparan una 2ez generada la salida. 7l formato es el =ue se muestra a continuacin *----------------------------------------------------------------------* * E/ENTOS DE CONTROL *----------------------------------------------------------------------* TOP-OF-PAGE. END-OF-PAGE. TOP-OF-PAGE DURING LINE-SELECTION. AT LINE-SELECTION. AT PFNN. AT USER-COMMAND. %onde 6o es necesaria la codificacin de la totalidad de los e2entos sino solamente los estrictamente necesarios. 6o tienen un orden establecido.

- :> -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------..4. Su%rutinas internas 7s la <ltima seccin del programa. %eben codificarse en esta todas las subrutinas internas =ue son llamadas en el programa. 7l formato es el =ue se muestra a continuacin *----------------------------------------------------------------------* * S#*R#TINAS *----------------------------------------------------------------------* *----------------------------------------------------------------------* * Form INICIALIGACION *----------------------------------------------------------------------* * Do4 m"7$'r 'J K !' L 741o7'!1d'd d" !' & Cr $17' * *----------------------------------------------------------------------* FORM INICIALI/ACION. ENDFORM. "INICIALIGACION

*----------------------------------------------------------------------* * Form S#*R#TINA *----------------------------------------------------------------------* * Do4 m"7$'r 'J K !' L 741o7'!1d'd d" !' & Cr $17' * *----------------------------------------------------------------------* * --Q 91 do4 m"7$'r 9'rOm"$ro& d" "7$r'd' * R-- 9? do4 m"7$'r 9'rOm"$ro& d" &'!1d' *----------------------------------------------------------------------* FORM SUBRUTINA USING PI_PAR- PI_PAR0. DATA: LD_CAMPO- TYPE D. "Ad141o7'r 4om"7$'r1o . . . ENDFORM. " S#*R#TINA %onde %ebe respetarse el formato mostrado en el e3emplo de arriba. 7ste formato se obtiene automticamente en el momento de creacin del P78'.8$, -aciendo doble clic sobre el nombre de la sub-rutina. 7n el encabezado de la sub-rutina debe comentarse la funcionalidad principal de la misma, as@ como tambiEn cada uno de los parmetros pasados, comentando su contenido.

- :A -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------2. Con5enci)n "ara nom%res internos 'B'+$6S'+

0e detalla a continuacin la nomenclatura =ue debe respetarse en la codificacin de programas ABAP. 0e recomienda incluir dentro del nombre )en la parte libre* el mismo nombre de 2ariable =ue el campo de 0AP. 73. 50NB(R80
O%&eto de "ro3ramaci)n @m%ito
global global global global local local local local static static static static global local static sin tipo estndar sorted -as-ed sin tipo estndar sorted -as-ed sin tipo estndar sorted -as-ed sin tipo sin tipo sin tipo C 6 % " O / P ' C 6 % " O / P ' C 6 % " O / P '

Ti"o Dato

Valor
gtN!nombre tabla# gdtN!nombre tabla# gstN!nombre tabla# g-tN!nombre tabla# ltN!nombre tabla# ldtN!nombre tabla# lstN!nombre tabla# l-tN!nombre tabla# stN!nombre tabla# sdtN!nombre tabla# sstN!nombre tabla# s-tN!nombre tabla# gSaN!nombre estructura # lSaN!nombre estructura # sSaN!nombre estructura# gsN!nombre 2ariable# gnN!nombre 2ariable# gdN!nombre 2ariable# g-N!nombre 2ariable# g1N!nombre 2ariable# giN!nombre 2ariable# gpN!nombre 2ariable# gfN!nombre 2ariable# gN!nombre 2ariable# lsN!nombre 2ariable# lnN!nombre 2ariable# ldN!nombre 2ariable# l-N!nombre 2ariable# l1N!nombre 2ariable# liN!nombre 2ariable# lpN!nombre 2ariable# lfN!nombre 2ariable# lN!nombre 2ariable# ssN!nombre 2ariable# snN!nombre 2ariable# sdN!nombre 2ariable# s-N!nombre 2ariable# s1N!nombre 2ariable# siN!nombre 2ariable# spN!nombre 2ariable# sfN!nombre 2ariable# sN!nombre 2ariable# piN!nombre 2ariable# poN!nombre 2ariable# ptN!nombre 2ariable# pN!nombre parmetro#

"ABLA /6"786A

70"8(C"(8A

global

&A8/ABL7

local

static

PA8T$7"8.0 )de una rutina '.8$*

sin mbito

sin tipo

caracter cadena numErica fec-a -ora byte )-e1adecimal* entero numero empa=uetado numero punto flotante otro caracter cadena numErica fec-a -ora byte )-e1adecimal* entero numero empa=uetado numero punto flotante otro caracter cadena numErica fec-a -ora byte )-e1adecimal* entero numero empa=uetado numero punto flotante otro using c-anging tables

PA8T$7"8. %7 76"8A%A 07L7C"-.P"/.60

sin mbito

sin tipo

sin mbito

sin tipo

sN!nombre select-option#

BL.CR0 07L7C"/.6 0C8776

sin mbito

sin tipo

bN!nombre del blo=ue#

- :C -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------global sin tipo grN!nombre rango#

8A65.0

local

sin tipo

lrN!nombre rango#

static

sin tipo

srN!nombre rango#

global C.60"A6"70 local

sin tipo

gcN!nombre constante#

sin tipo

lcN!nombre constante# gN!nombre del ob3eto apuntado# 73m 'ield 0ymbol !gNmatnr# lN!nombre del ob3eto apuntado# !nombre subrutina# El uso de using changing y tables depender de la necesidad de la misma por contar con variables globales. gtyN!nombre tipo# ltyN!nombre tipo# gtytN!nombre tipo tabla# gtydN!nombre tipo tabla# gtysN!nombre tipo tabla# gty-N!nombre tipo tabla# ltytN!nombre tipo tabla# ltydN!nombre tipo tabla# ltysN!nombre tipo tabla# lty-N!nombre tipo tabla# gclN!nombre ob3eto# lclN!nombre ob3eto# goN!nombre ob3eto# loN!nombre ob3eto# soN!nombre ob3eto# /PN!nombre parmetro# /+N!nombre estructura# /"N!nombre de la tabla# 7PN!nombre parmetro# 7+N!nombre estructura# 7"N!nombre de la tabla# $PN!nombre parmetro# $+N!nombre estructura# $"N!nombre de la tabla# "N!nombre de la tabla#

global '/7L% 0D$B.L local

sin tipo

sin tipo

0(B8("/6A0

sin mbito

sin tipo

global "/P.0 local

sin tipo sin tipo sin tipo estndar

global

sorted -as-ed

"/P.0 "ABLA

sin tipo local estndar sorted -as-ed

CLA070

global local global

sin tipo sin tipo sin tipo sin tipo sin tipo parmetro estructura tabla parmetro estructura tabla parmetro estructura tabla tabla

.BU7".0

local static global importing global importing global importing global e1porting global e1porting global e1porting global modify global modify global modify tables

PA8T$7"8.0 %7 $V%(L. %7 '(6C/.670

- :H -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------global importing global importing global importing global importing global e1porting global e1porting global e1porting global e1porting global c-anging global c-anging global c-anging global c-anging global returning global returning global returning global returning parmetro estructura tabla clase parmetro estructura tabla clase parmetro estructura tabla clase parmetro estructura tabla clase /PN!nombre parmetro# /+N!nombre estructura# /"N!nombre de la tabla# /CN!nombre de la clase# 7PN!nombre parmetro# 7+N!nombre estructura# 7"N!nombre de la tabla# 7CN!nombre de la clase# CPN!nombre parmetro# C+N!nombre estructura# C"N!nombre de la tabla# CCN!nombre de la clase# 8PN!nombre parmetro# 8+N!nombre estructura# 8"N!nombre de la tabla# 8CN!nombre de la clase#

PA8T$7"8.0 %7 $W".%.0 %7 CLA070

- :K -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------4. /ECO!END'CIONES 1ENE/'7ES SOB/E 8O/!'TO

7n los puntos siguientes se detallan las normas generales =ue rigen para el formato del entorno de desarrollo y =ue pueden formar parte de un programa ABAP. 4.1. Su%rutinas 98O/!S: Las subrutinas internas en el programa ABAP deben utilizarse en los siguientes casos Para englobar partes de cdigo comple3a y e1tensa. Para -acer ms legible el programa y brindar una mayor facilidad de mantenimiento. Para definir un proceso una sola 2ez en el programa, el cual es llamado desde diferentes lugares dentro del mismo programa ABAP

Los '.8$0 deben respetar el siguiente formato La cantidad de l@neas de cdigo no debe tener ms de una pgina de longitud en promedio. 0u nombre y el nombre de los parmetros deben respetar lo descripto anteriormente en la Con2encin para nombres internos ABAPBA

%ebe incluir comentarios sobre la funcionalidad principal y parmetros de entrada y salida. 4. . +ro3ramas INC70DE Los programas /6CL(%7 )tipo P/Q en sus atributos*, pueden utilizarse en los siguientes casos Para estructurar programas con muc-as l@neas de cdigo. Para generar cdigo re-utilizable en otros programas. Para definir '.8$0 utilizables por otros programas )73emplo 8utinas de programas BA"CF/6P("*. 0i e1iste un gran n<mero de declaracin de data necesaria como parte del programa, debe separarse las declaraciones dentro de un /6CL(%7. 7l nombre del include debe ser el mismo del programa con el sufi3o ".P. Los siguientes includes debern ser utilizados en los programas a implementarse. Include D$$;6666N".P D$$;6666N07L D$$;6666N$A/ D$$;6666N'4: D$$;6666N.4: D$$;6666N/4: D$$;6666NCLA Contiene "odas las declaraciones iniciales. 73m tablas, estructuras, 2ariables, "ype-Pools, table Controls, etc. Adicionalmente se puede utilizar para la definicin de los mEtodos de una clase. Los parmetros de seleccin iniciales. 7l proceso principal y los e2entos. 73m /6/"/AL/;A"/.6. 0"A8"-.'07L7C"/.6, A" 07L7C"/.6 0C8776, etc. Las subrutinas del programa. Process Before .utput. Los $odules .utput y las subrutinas implicadas. Process After /nput. Los modules /nput y las subrutinas implicadas. La implementacin de todos los mEtodos de una clase.

La codificacin de /6CL(%7 debe respetar los con2enios de nombres internos y estndares de programacin descritos en los puntos anteriores. Los nombres de los includes tienen como prefi3o el nombre del programa, cuya nomenclatura ser tratada ms adelante.

- :J -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------4.3. Ca%eceras de listados "odos los programas ABAP desarrollados =ue emitan un reporte )8eport List X +8/"7*, deben mantener el siguiente formato de salida 9---------------------------------------------------------------------------------------------------------------------------------------------- OOOOOOOOOOOOOOOOOOOO ):* OOOOOOOOOOOOOOOOOOOOOOOOOO )2* MMBMMBMMMM )>* OOOOOOOO )A* OOOOOOOOOOOOOOOO )C* Pag. MMMM )H* OOOOOOO )K* OOOOOOOOOOOOOOOOOO )K* 9---------------------------------------------------------------------------------------------------------------------------------------------- %onde ):* 6ombre de la sociedad. Corresponde al campo "44:-B(R80. )2* "@tulo del reporte. %ebe mostrarse en letra may<scula. )>* 'ec-a de emisin del reporte. $ostrar en formato %%B$$BAAAA. )A* 6ombre del reporte. Corresponde al campo de sistema 0D-87P/%. )C* 0ubt@tulo del listado. 7s opcional y en caso de utilizarse debe ser mostrado en letra may<scula. )H* 6<mero de pgina. )K* Cabeceras de columnas. $ostrar en letras may<sculas. 7stos campos en la cabecera del reporte deben figurar siempre, independientemente de si se utilizan los t@tulos standard de los elementos de te1to o si se los codifica manualmente mediante el e2ento ".P-.'PA57. 4.$. Te;tos de selecci)n Los te1tos de seleccin correspondientes a los PA8A$7"780 y 07L7C"-.P"/.60 declarados en el programa deben ser incorporados en letra min<scula. 4.-. S<m%olos de te;to Podrn utilizarse en letra min<scula o may<scula dependiendo del lugar donde se mostrar, de acuerdo a las normas =ue figuran en este documento. %eben ser utilizados en todas las sentencias +8/"7, e2itando colocar en las mismas literales. 4.*. +antallas 7n el diseLo de pantallas se debe tratar de mantener siempre los estndares de diseLo empleados por 0AP, para ello, se debe respetar lo siguiente "odos los te1tos de los campos deben figurar en letras min<sculas. "ratar de apro2ec-ar las referencias a los campos del diccionario de datos. (tilizar '8A$70 para enmarcar campos relacionados. (bicar los campos de tal manera =ue facilite su llenado por parte del usuario OOOOOOOOO )K* OOOOOOOO )K*

- :M -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------4... D=n"ros> Status = T<tulos Para la creacin de cada uno de estos ob3etos, la nomenclatura a seguir ser n<meros correlati2os de A d@gitos con inter2alos de :44 en :44, es decir, 4:44, 4244, etc., guardando asociacin entre los > ob3etos mediante el mismo n<mero de codificacin. Por e3emplo a la dynpro 4:44 est asociada el status 4:44 y el t@tulo 4:44. %e darse el caso =ue dos dynpros estEn reutilizando alg<n ob3eto en particular, se debe, mantener la integracin en cdigo de los tres ob3etos, es decir, %ynpro 4:44 %ynpro 4244 %ynpro 4>44 -# -# -# 0tatus 4:44 0tatus 4:44 0tatus 4>44 -# -# -# "@tulo 4:44 "@tulo 4244 "@tulo 4>44

Como se obser2a el 0tatus 4244 no se -a tomado, en caso, a futuro la %ynpro 4244 necesite poseer su propio status. Elementos de D=n"ros Para el diseLo de una dynpro es necesario el uso de elementos de dynpros, para los cules usaremos la siguiente nomenclatura para los nombres de campo, dependiendo del elemento a utilizar Elemento Campo de "e1to Campo 7ntradaB0alida C-ec,Bo1 8adio Button Pus-Button $arco Control de "ab0trip Trea 0ub0creen "able Control Custom Control 0tatus /con NotaA Como es conocido, estos elementos pueden ser obtenidos tambiEn 2@a referencia ya sea del %iccionario de datos o tambiEn de las 2ariables =ue posee el programa, en dic-o caso el nombre del ob3eto cargado en la dynpro se mantendr con el nombre =ue se coloca automticamente al 3alar el ob3eto con la referencia determinada. Adems es posible indicar un nombre de campo precedido por un Y9Y cuando se trata de la misma referencia al %iccionario de datos ABAPBA. 4.2. Status 10I 7n su diseLo debe tenerse en cuenta lo siguiente (tilizar -asta donde sea posible los defaults propuestos por 0AP en lo =ue respecta a las funciones y men<s. Los t@tulos de la superficie deben ser completados en min<scula y deben ser llamados igual =ue la superficie. 7n toda superficie debe asegurarse =ue figuren las funciones de BACR, CA6C7L y 7O/" 7l te1to de los pulsadores creados debe estar en letra min<scula. Nomenclatura "'N!nombre campo te1to# P'N!nombre campo entradaBsalida# CBN!nombre C-ec,Bo1# 8BN!nombre 8adio Button# PBN!nombre Pus- Button# 5BN!nombre $arco# 0CN!nombre "ab0trip# 0AN!nombre 0ubscreen Area# "CN!nombre "able Control# CCN!nombre Custom Control# 0/N!nombre 0tatus /con#

- 24 -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------0e lle2ar a cabo el mane3o de patrones, para mantener una misma organizacin en el diseLo de nuestros programas. Para ello, dentro del editor ABAP, clic en $.%7L., clic en P.tro patrnQ e ingresar uno de los siguientes 2alores PA"N576 PA"N".P PA"N07L PA"N$A/ Plantilla de estructura del programa. Plantilla de declaraciones globales. Plantilla de parmetros de seleccin. Plantilla de 2alidaciones y e2entos del programa principal.

NotaA Las secciones no utilizadas de los patrones, se eliminan del programa. 73emplo 0i uso el patrn ".P, y no 2oy a usar constantes, borramos esa seccin de nuestro programa )no la comentamos*.

- 2: -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------10. 'SE10/'!IENTO DE C'7ID'D EN DES'//O77OS 'B'+ 7n los puntos siguientes se detallan algunas recomendaciones a tomar en cuenta en la programacin. 10.1. Codi#icaci)n = +resentaci)n
Consideraciones E&em"los

Nue5as #ormas de declarar las sentencias en 'B'+ ECC*.0 IncorrectoA 6o usar L/R7 como referencia a tipos de diccionario, %A"A 5+ANR6A: L/R7 R6A:. usar "DP7. CorrectoA %A"A 5+ANR6A: "DP7 R6A:. IncorrectoA "DP70 50NO, 0e debe de especificar la longitud de la 2ariable =ue 5PND "DP7 P. se est definiendo. CorrectoA "DP70 50NO "DP7 C L765"F :, 5PND "DP7 P L765"F J %7C/$AL0 4. IncorrectoA Los parmetros =ue se pasan a un mEtodo $7"F.%0 $7"F /$P.8"/65 P: 7OP.8"/65 P2. debe tener asignado un tipo, si no se sabe =uE tipo CorrectoA 2a a tener asignado se declara como type A6D. $7"F.%0 $7"F /$P.8"/65 P: "DP7 A6D 7OP.8"/65 P2 "DP7 A6D. IncorrectoA 6o est permitido transferir directamente los campos CALL '(6C"/.6 '(6 /$P.8"/65 P Z 0D-0(B8C. del sistema como parmetro, sino a tra2Es de CorrectoA %A"A L/N0(B8C "DP7 0D-0(B8C. una 2ariable. L/N0(B8C Z 0D-0(B8C. CALL '(6C"/.6 '(6 /$P.8"/65 P Z L/N0(B8C. La sentencia "ABL70 no est permitido en IncorrectoA ABAP ob3ects, por=ue es ambigua. (na "ABL70 BRP'. forma de referenciarlo es a tra2Es de un Sor, area. CorrectoA %A"A 5+ANBRP' "DP7 BRP'. 6o est permitido el uso de 'ield-0ymbols si es =ue IncorrectoA no tiene un tipo de asignacin. 7n ABAP ob3ects la '/7L%-0D$B.L0 !5N&AL(7#. CorrectoA adicin type al field-symbols es obligatorio. '/7L%-0D$B.L0 !5N&AL(7# "DP7 A6D. IncorrectoA 8A6570 58N&R.85 '.8 R6A:-&R.85. 7l uso de 8A6570 no est permitido. CorrectoA %A"A 58N&R.85 "DP7 8A657 .' R6A:-&R.85. IncorrectoA %A"A B75/6 .' 5"NR6A: .CC(80 4, R(668 "DP7 R6A:-R(668, 6A$7: "DP7 R6A:-6A$7:, La declaracin con .CC(80 no est permitida. 76% .' 5"NR6A:. 0i se re=uiere memoria inicial se puede especificar CorrectoA agregando la sentencia /6/"/AL 0/;7. "DP70 B75/6 .' 5"DNR6A: , R(668 "DP7 R6A:-R(668, 6A$7: "DP7 R6A:-6A$7:, 76% .' 5"DNR6A:. %A"A 5%"NR6A: "DP7 0"A6%A8% "ABL7 .' 5"DNR6A: /6/"/AL 0/;7 4. IncorrectoA L..P A" 5"NR6A: /6". 5+ANR6A:. CL7A8 5"NR6A:. \.. 76%L..P. CorrectoA L..P A" 5"NR6A: /6". 5+ANR6A:. CL7A8 5+ANR6A:. \.. 76%L..P. CL7A8 5"NR6A:. IncorrectoA /6078" "ABL7 5"NBRP'. C.LL7C" 5"NBRP'. 87A% "ABL7 5"NBRP'\ $.%/'D "ABL7 5"NBRP'\ $.%/'D 5"NBRP'\ +F787 \ %7L7"7 "ABL7 5"NBRP'. L..P A"5"NBRP'\

0i utilizas Sor, areas para -acer L..P a la tabla interna, no est permitido -acer CL7A8 dentro del L..P, ya =ue esta borrar@a todo el contenido de la tabla interna.

Las siguientes sentencias en relacin con las tablas internas estn pro-ibidas ya =ue no est permitido traba3ar directamente con la cabecera de la tabla interna[ por el contrario a-ora se utilizan Sor, areas o field-symbols.

- 22 -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------APP76% 5"NBRP'\ /6078" 5"NBRP'\ $.%/'D 5"NBRP'\ CorrectoA /6078" 5+ANBRP' /6". "ABL7 5"NBRP'. C.LL7C" 5+ANBRP' /6". 5"NBRP'. 87A% "ABL7 5"NBRP' /6". 5+ANBRP'B A00/56/65 !5NBRP'#... $.%/'D "ABL7 5"NBRP' '8.$ 5+ANBRP'\ $.%/'D 5"NBRP' '8.$ 5+ANBRP' +F787 \ %7L7"7 "ABL7 5"NBRP' '8.$ 5+ANBRP'. L..P A" 5"NBRP' /6". 5+ANBRP'BA00/56/65 !5NBRP'#\ APP76% 5+ANBRP' ". 5"NBRP'\ /6078" 5+ANBRP' \ $.%/'D 5+ANBRP' \ IncorrectoA 07L7C" \ '8.$ &BAR. /6078" &BAR. (P%A"7 &BAR. %7L7"7 &BAR. $.%/'D &ABR. CorrectoA Las siguientes sentencias en relacin con el acceso %A"A 5+AN&BAR "DP7 &BAR. a la base de datos estn pro-ibidas. 07L7C" \ '8.$ &BAR /6". 5+AN&BAR . 0e debe de traba3ar utilizando Sor, areas. /6078" &BAR '8.$ 5+AN&BAR. .8 /6078" /6". &BAR &AL(70 5+AN&BAR. (P%A"7 &BAR '8.$ 5+AN&BAR. .8 (P%A"7 &BAR 07" . . . %7L7"7 &BAR '8.$ 5+AN&BAR. .8 %7L7"7 '8.$ &BAR +F787\ $.%/'D &BAR '8.$ 5+AN&BAR. Valores 8i&os 9B'/DCODE: IncorrectoA 07L7C" 9 '8.$ marc +F787 Ser,s 7G ]C444^ \ /' 2bfa-2btypNn 7G ]U^ \ SNcost Z mbeS-strps 9 :.2. Los 2alores no deben ser fi3ados en el cdigo fuente. La e1istencia de 2alores fi3os dentro del programa dificulta su mantenimiento, portabilidad y reutilizacin. Adems, demuestra desproli3idad en el diseLo. CorrectoA Para e2itar fi3ar 2alores, se pueden utilizar parmetros de seleccin o la tabla de constantes. Cuando no es posible e2itar fi3ar 2alores, utilizarlos como constantes globales. C.60"A6"0 gcNconstante "DP7 n L765"F A &AL(7 :2>A. %A"A gnNglobal "DP7 n L765"F A, ... /' SnNglobal 67 gcNconstante \.. E;ce"cionesA Programas de con2ersin =ue sern utilizados solo una 2ez. E5entos CorrectoA /6/"/AL/;A"/.6. ... A" 07L7C"/.6-0C8776. ... 0"A8"-.'-07L7C"/.6. P78'.8$ cargarNdatos. P78'.8$ procesarNdatos. P78'.8$ imprimirNdatos. \ 76%-.'-07L7C"/.6. \

Los e2entos )76%-.'-07L7C"/.6, ".P-.'PA57, etc.* debern aparecer, en lo posible, en el cdigo, en el orden en =ue sern utilizados. 0i alg<n e2ento no estu2iese siendo utilizado, deber ser retirado.

"odas las 0ubrutinas )'.8$s* sern colocadas '.8$ cargarNdatos. despuEs del cdigo principal en un /6CL(%7 de \ '.8$s. Los '.8$s debern ser colocados, en lo 76%'.8$ posible, en el orden en =ue sern llamados. '.8$ procesarNdatos. \ 76%'.8$ '.8$ imprimirNdatos. \ 76%'.8$

- 2> -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------Su%rutinas 98O/!: 7l nombre de la subrutina deber ser descripti2o, y comenzar con un 2erbo en infiniti2o _ el ob3eto. Por ejemplo: PERFORM buscar_proveedor. PERFORM grabar_pedido. PERFORM calcular_iva_ actura.

CorrectoA

9------------------------------------------------------9 "oda 0ubrutina tambiEn debe tener un encabezado 9 'orm 5(A8%A8N(L"/$AN7U7C(C/.6 conteniendo una bre2e descripcin de su 9------------------------------------------------------9 funcionalidad y los parmetros de entrada y salida. 9 Lee la tabla ;;L8" donde la <ltima 'ec-a y 9 -ora de e3ecucin del programa es guardada (na 0ubrutina deber tener solo un proceso 9------------------------------------------------------9 principal. 7n caso de =ue -aya ms de un proceso, 9 P/NU.B/% cdigo interno de U.B entonces deber ser di2idida en m<ltiples 9 P.N0"A"(0 resultado proceso 0ubrutinas. 9------------------------------------------------------9 '.8$ 5(A8%A8N(L"/$AN7U7C(C/.6 (0/65 P/NU.B/% 0ubrutinas =ue podr@an ser utilizadas en CFA65/65 P.N0"A"(0. otros programas debern ser colocadas en un \ 'unction $odule. \ 76%'.8$. Los parmetros de entrada de una subrutina debern ser definidos utilizando la palabra cla2e (0/65, y debern pasarse por 2alor )palabra cla2e P(0/65 &AL(7)2ar*Q en todos los casos en =ue pueda utilizarse un literal en la llamada P78'.8$. Los parmetros de salida de una subrutina debern ser definidos utilizando la palabra cla2e CFA65/65. 'nidamiento CorrectoA Las estructuras /'-76%/', L..P-76%L..P, CA07 lnN2ar CA07-76%CA07, %.-76%%., etc. no +F76 ]4:^. debern presentar una e1tensin e1cesi2a en P78'.8$ procesarNopcionN4:. cuanto a la longitud de l@neas ni a profundidad +F76 ]42^. )anidamiento*. P78'.8$ procesarNopcionN42. +F76 ]4:^. 0e deber llegar a un e=uilibrio de P78'.8$ procesarNopcionN4>. estas caracter@sticas utilizando subrutinas. Para +F76 ."F780 esto se deben estructurar el mdulo teniendo en P78'.8$ procesarNopcionNotros. cuenta los conceptos de co-esin y acoplamiento. 76CA07. Comandos IncorrectoA 0"A8"-.'-07L7C"/.6. 07L7C" matnr Ser,s lgort labst '8.$ mara Cada comando deber comenzar en una nue2a /6". "ABL7 gtNstoc,Nmat l@nea para una me3or 2isualizacin del cdigo. +F787 matnr in sNmatnr. %e esta forma, permitir un me3or mantenimiento /' sy-subrc 67 4. $700A57 744:. 76%/'. del cdigo )borrado, comentario y debugging*. 76%-.'-07L7C"/.6. Para mantener los programas estructurados, deberemos indentar los diferentes ni2eles CorrectoA de 3erar=u@a con 2 espacios. 0"A8"-.'-07L7C"/.6. 07L7C" matnr Ser,s lgort labst '8.$ mara 7l P87""D P8/6"78 podr ser utilizado /6". "ABL7 gtNstoc,Nmat para indentar automticamente los comandos. +F787 matnr in sNmatnr. /' sy-subrc 67 4. Comandos largos debern ser particionados en $700A57 744:. 2arias l@neas e indentados por la primera l@nea para 76%/'. permitir una me3or 2isualizacin. 76%-.'-07L7C"/.6. P78'.8$ /$P8/$/8N"."AL70. '3ru"aci)n de Varia%les 1lo%ales 0iempre =ue se utilicen 2ariables relacionadas entre s@, debern declararse como campos de una estructura y no como 2ariables PsueltasQ. Como las tres 2ariables estn relacionadas por=ue definen un nro. de asiento =ue se necesitar tratar en el programa

- 2A -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------7sto permite simplificar el desarrollo al poder IncorrectoA mane3arlas como una <nica estructura )asignaciones %A"A con mo2e-corresponding, inicializacin, pase de L0NB(R80NA(O L/R7 BRP'-B(R80, I0.C/7%A% parmetros, etc.*. L0NB7L68NA(O L/R7 BRP'-B7L68, I%.C($76". 0AP L6N5UAF8NA(O L/R7 BRP'-5UAF8. I7U78C/C/. CorrectoA "DP70 B75/6 .' L"DNA0/76".NA(O, B(R80 "DP7 BRP'-B(R80, I0.C/7%A% B7L68 "DP7 BRP'-B7L68, I%.C($76". 0AP 5UAF8 "DP7 BRP'-5UAF8, I7U78C/C/. 76% .' L"DNA0/76".NA(O. %A"A L+ANA0/76".NA(O "DP7 L"DNA0/76".NA(O. !OVE 9asi3naciones: IncorrectoA "DP70 B75/6 .' L"DN0".CR, $A"68 "DP7 $A"68, I CV%/5. +78R0 "DP7 +78R0, I C76"8. L5.8" "DP7 L5.8", I AL$ACW6 LAB0" "DP7 LAB0", I 0".CR 76% .' L"DN0".CR. %A"A ltNstoc,Nmat "DP7 ltyNstoc, .CC(80 4 +/"F F7A%78 L/67. %A"A lSaNstoc,Nmat L/R7 mard. ... 87A% "ABL7 ltNstoc,Nmat /6%7O :. /' sy-subrc 7G 4. de $.&7-C.8870P.6%/65 L"N0".CRN$A" ". L+AN0".CRN$A"... sea 76%/'. ...

(tilizar sentencia $.&7 en 2ez $.&7- C.8870P.6%/65 siempre =ue posible.

7n la definicin de datos se debe de usar type CorrectoA en 2ez de li,e, tambiEn se debe e2itar los "DP70 B75/6 .' L"DN0".CR, .CC(80 4, Sit- -eader line y traba3ar con Sor, $A"68 "DP7 $A"68, I CV%/5. reas, field symbols. +78R0 "DP7 +78R0, I C76"8. L5.8" "DP7 L5.8", I AL$ACW6 LAB0" "DP7 LAB0", I 0".CR 76% .' L"DN0".CR. %A"A L"N0".CRN$A" "DP7 0"A6%A8% "ABL7 .' L"DN0".CR. %A"A L+AN0".CR L/R7 L/67 .' L"N0".CRN$A". %A"A L+AN0".CRN$A" "DP7 $A8%. ... 87A% "ABL7 L"N0".CRN$A" /6". L+AN0".CR /6%7O :. /' 0D-0(B8C 7G 4. $.&7 lSaNstoc,-matnr to lSaNstoc,Nmat-matnr, lSaNstoc,-Ser,s to lSaNstoc,Nmat-Ser,s, lSaNstoc,-lgort to lSaNstoc,Nmat-lgort, lSaNstoc,-labst to lSaNstoc,Nmat-labst. 76%/'. ... !ensa&es IncorrectoA /' sy-subrc 67 4. +8/"7 Y7rror en la b<s=uedaY. 76%/'. "odos los mensa3es de error implementados 2@a $700A57 /%s. debern ser CorrectoA 87P.8" 111 $700A57-/% ];$$4:^. \ /' sy-subrc 67 4. $700A57 744:. 76%/'.

+'/'!ET/OS 6 SE7ECTION SC/EEN 72ite utilizar 2alores P%7'A(L"Q en los campos parameter B selection screen. 7s preferible utilizar 5ariantes. /ncluya Ayuda de B<s=ueda )$A"CFC.%70* cuando sea con2eniente. 0epare los grupos de parmetros relacionados en BL.CR0 )frame* cuando sea con2eniente. 0iempre reemplace el nombre =ue genera por default el parmetro en pantalla por un te1to descripti2o )"7O". %7 07L7CC/V6*.

- 2C -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------Te;tos 97iterales: IncorrectoA '.8$ titularNcolumnas. +8/"7 Y6ro.ClienteY to lSaNtitulos-col4:. +8/"7 Y8azn 0ocialY to lSaNtitulos-col42. +8/"7 YC(/"Y to lSaNtitulos-col4>. Para todos los te1tos utilizados a lo largo del programa, utilice "7O" 7L7$76"s. 76%'.8$. CorrectoA '.8$ titularNcolumnas. +8/"7 te1t-44: to lSaNtitulos-col4:. +8/"7 te1t-442 to lSaNtitulos-col42. +8/"7 te1t-44> to lSaNtitulos-col4>. 76%'.8$. C)di3o C!uertoD 6o debe de3arse cdigo muerto in3ustificado en los programas, ya =ue es desproli3o y dificulta 9 0e reemplaza el parmetro de salida por una 2ariable au1iliar tipo 6. el seguimiento y el debugging. CALL '(6C"/.6 ]C.6&780/.6N7O/"NALPFAN.("P(" ^ 7OP.8"/65 Cuando estE 3ustificado, de3ar indicado con input Z tNstoc,Nmat-matnr comentario el moti2o. /$P.8"/65 9 output Z tNstoc,Nmat-matnr. P%7L7"7 ?44: 7n el caso de modificaciones al programa output Z lnNmatnrNau1. P/6078" ?44: original, de3ar comentado el cdigo reemplazadoBcorregido, con referencia de modificacin. Comentarios 91: "odo el programa debe estar comentado, para facilidad de seguimiento, interpretacin, mantenimiento y documentacin. Los comentarios tienen sentido cuando e1plican y clarifican cada parte de la lgica del programa, no la e1acta descripcin de lo =ue -acen los comandos. Los comentarios debern estar en min<scula. Puede comenzarse con may<scula cada frase. 7l ni2el de comentarios debe ser congruente en todo el programa. 72itar caer en la prctica de comentar todo el programa al f inal, una 2ez codificado. 7sto genera =ue los comentarios no sean claros, se pierde la idea global del programa, y es procli2e a errores. Adems, el resultado es pobre, por=ue se comenta solo para PcumplirQ y se pierde el ob3eti2o de ayudar a entender el desarrol lo del programa, as@ como tambiEn luego su mantenimiento y documentacin. Comentarios 9 : CorrectoA 9 %efinicin de "ablas "ABL70 mara. I $aestro de materiales 9 %efinicin de constantes C.60"A6"0 gcNlong "DP7 i &AL(7 K4. I Long. l@nea sep. 9 %eclaracin de "ipos %eben comentarse todas las 2ariables declaradas a "DP70 begin of gtyNstoc,mat, la derec-a de la 2ariable con P. mat,l type mat,l, I 5rupo de Art@culos matnr type matnr, I 6umero de $aterial ma,t1 type ma,t1, I %escripcin del $aterial labst type labst, I 0toc, Libre end of gtyNstoc,mat. 9 %efinicin de 2ariables globales %A"A giNlines type i. I Cant. reg. encontrados Erites la correspondiente

IncorrectoA Cuando se lista un campo numErico =ue presentaba +8/"7 "NL.5-67"+8. decimales es necesario especificarlos por medio de una 2ariable, adems de indicar la moneda CorrectoA si guarda 2alores monetarios. %A"A LN+A78R "DP7 &B8R-+A78R. +8/"7 L+ANL.5-67"+8 C(8876CD LN+A78R (6/" ]>^.

- 2H -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------Estructuras IncorrectoA %A"A B75/6 .' 5"NB%C"AB .CC(80 4. /6CL(%7 0"8(C"(87 B%C%A"A. 6o incluir una estructura de una tabla como parte de %A"A 76% .' 5"NB%C"AB. la definicin de una segunda tabla. CorrectoA "DP70 5"DNB%C%A"A "DP7 B%C%A"A. %A"A 5%"NB%C"AB "DP7 0"A6%A8% "ABL7 .' 5"DNB%C%A"A.

10. . +er#ormance
Consideraciones
Consultas a Base de Datos 9SE7ECTS: IncorrectoA 0iempre =ue precise buscar solo una l@nea de una 07L7C" matnr Ser,s lgort labst '8.$ mard "abla o &ieS, use 07L7C" 0/65L7 9 en lugar /6". C.8870P.6%/65 '/7L%0 .' "ABL7 ltNstoc,Nmat de 07L7C" 9. ) 07L7C" 0/65L7 9 accede una +F787 matnr /6 sNmatnr. 7O/". 2ez a la base de datos * 76%07L7C". 7specifi=ue siempre los campos de la seleccin en CorrectoA lugar de usar 07L7C" 9 07L7C" 0/65L7 matnr Ser,s lgort labst '8.$ mard /6". lSaNstoc,Nmat Al diseLar una tabla D, trate de e2itar =ue +F787 matnr /6 sNmatnr. tenga muc-os @ndices. 0iempre especifi=ue las condiciones en la IncorrectoA clusula +F787 en lugar de testearlas con el 07L7C" 9 '8.$ mard /6". C.8870P.6%/65 '/7L%0 .' "ABL7 ltNstoc,Nmat comando CF7CR. +F787 matnr /6 sNmatnr. 72ite utilizar .8%78 BD, a menos =ue e1ista un CorrectoA @ndice en estos campos. 07L7C" matnr Ser,s lgort labst '8.$ mard (tilice las funciones de clculo )$AO, 0($, $/6....* /6". "ABL7 ltNstoc,Nmat en el comando 07L7C" en lugar de calcular los 2alores aparte. 7sto minimiza el 2olumen +F787 matnr /6 sNmatnr. de transferencia de datos y utiliza los algoritmos optimizados de la base de datos. IncorrectoA lNmsgnrNma1 Z -:. Siem"re testear SF-S0B/C des"uGs de un 07L7C" $0568 '8.$ ":44 /6". L+A-$0568 acceso a la Base de Datos. +F787 A8B5B 7G ]44^ /' L+A-$0568 # lNmsgnrNma1. 07L7C" )para "ransparent y Pool "ables* la lNmsgnrNma1 Z L+A-$0568. clusula +F787 debe contener, 76%/'. preferentemente, los campos cla2es y dems 76%07L7C". campos =ue puedan restringir la consulta. CorrectoA 07L7C" )para Cluster "ables* solo los campos 07L7C" $AO )$0568* '8.$ ":44 /6". lNmsgnrNma1 cla2es deben ser especificados en la +F787 A8B5B 7G ]44^ clusula +F787. Los dems deben ser c-e=ueados a tra2Es del comando CF7CR. IncorrectoA 07L7C" matnr Ser,s lgort labst 72ite siempre utilizar ciclos 07L7C" X '8.$ mard 76%07L7C". 7s preferible realizar un 07L7C" /6". ltNstoc,Nmat /6". "ABL7 !tabla interna# y un L..P A" !tabla +F787 matnr /6 sNmatnr. interna# - 76%L..P traba3ando con3untamente con el Sor, rea. 7sto optimiza el acceso a la base de /' ltNstoc,Nmat-labst 67 4. datos y e2ita problemas de debugg en algunas APP76% ltNstoc,Nmat. 2ersiones de 0AP 8B>. 7n general, reduce el tiempo 7L07. de procesamiento en los debugg. APP76% ltNstoc,NmatNnostoc,. 76%/'. 72itar siempre reiterar el acceso a un mismo registro 76%07L7C". en la base de datos, as@ sea con un select single. CorrectoA 7l uso de los primeros n campos de un @ndice en la 07L7C" matnr Ser,s lgort labst clusula +F787 de un 07L7C", proporciona '8.$ mard una b<s=ueda ms rpida. /6". "ABL7 ltNstoc,Nmat +F787 matnr /6 sNmatnr. 7s importante utilizar la clusula +F787 en el comando 07L7C". 0iempre =ue la cla2e ltNstoc,NmatNnostoc,`a Z ltNstoc,Nmat`a. primaria

E&em"los

- 2K -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------no pueda ser utilizada, los @ndices podrn ayudar. %7L7"7 ltNstoc,Nmat +F787 labst Z 4. %7L7"7 ltNstoc,NmatNnostoc,`a +F787 labst !# 4

Primero intente acceder por la cla2e primaria completa o por alg<n @ndice completo. %e no ser posible, acceda parcialmente por la cla2e 0i se necesita imprimir el nombre del cliente en la factura\ con tNfacturas-,unnr primaria o @ndice, utilizando los campos en el orden )cd. cliente* y tNfacturas-name: )nombre cliente* establecido para la cla2e o @ndice. IncorrectoA L..P A" "N'AC"(8A0. 07L7C" 6A$7: '8.$ R6A: /6". "N'AC"(8A0-6A$7: $.%/'D "N'AC"(8A0. 76%L..P. CO//ECTOA "DP70 B75/6 .' ltyNclientes, ,unnr "DP7 ,unnr, !"#$. "%&E'(E name: "DP7 name:, !'OM)RE "%&E'(E 76% .' ltyNclientes. %A"A ltNclientes "DP7 0"A6%A8% "ABL7 .' ltyNclientes. %A"A lSaNclientes L/R7 L/67 .' ltNclientes. * +E'ER,R M,E-(RO $E "%&E'(E/' 6." ltNfacturas`a /0 /6/"/AL. 07L7C" ,unnr name: '8.$ ,na: /6". "ABL7 ltNclientes '.8 ALL 76"8/70 /6 ltNfacturas +F787 ,unrr Z ltNfacturas-,unnr. 76%/'. * ).-",R 'OM)RE $E "%&E'(E POR ",$, "%&E'(E "O' F,"(.R,L..P A" ltNfacturas A00/56/65 !lNfacturas#. 87A% "ABL7 ltNclientes /6". lSaNclientes +/"F R7D ,unnr Z !lNfacturas#-,unnr. /' sy-subrc 7G 4. !lNfacturas#-,unnr Z lSaNclientesNau1-,unnr. 76%/'. 76%L..P. +er#ormance memoria dinHmica. T'B7'S INTE/N'S La manera ms eficiente de buscar un <nico registro en una tabla interna del tipo standard es utilizando el CorrectoA comando 87A% "ABL7 ... +/"F B/6A8D 0.8" 5"N"ABLA: BD CA$P.: A0C76%/65. 07A8CF. %ebiendo estar ordenada la tabla /nterna. L..P A" 5"N"ABLA:\. \ 7n caso de tener =ue repetir b<s=uedas sobre 76%L..P. tablas, es con2eniente seleccionar los datos una sola 2ez sobre una tabla interna, y traba3ar 0.8" 5"N"ABLA2 BD CA$P.: A0C76%/65. sobre ella las 2eces =ue sea necesario. L..P A" 5"N"ABLA2\. \ SO/T 76%L..P. 7l 0.8" de una tabla /nterna, es ms eficiente si los campos son especificados. IncorrectoA 0iempre identificar si un 0.8" es ascending o L..P A" /"AB. descending y especificar la clusula BD !fields#. CF7CR "NABC Z R&AL. Caso contrario todos los campos sern clasificados. ... 76%L..P. 7OO+...EBE/E 7l comando L..P .... +F787 es ms eficiente =ue CorrectoA el comando L..P B CF7CR, pues e2al<a la L..P A" 5"NABC /6". 5+ANABC +F787 R Z 50N&AL. condicin internamente. \ 0iempre usar los comandos CL7A8B 87'870F 76%L..P. despuEs de finalizar un L..P, cuando los datos no deban ser reutilizados. IncorrectoA L..P A" 5"N&BAR /6". 5+AN&BAR. APP76% 5+AN&BAR ". 5"NA(O. 0i dos tablas tienen la misma estructura, es 76%L..P. ms eficiente copiar el contenido de una a CorrectoA otra directamente y no a tra2Es de un L..P. 5"NA(O`a Z 5"N&BAR`a. 0in embargo, si 5"NA(O no est 2ac@a y no debe de ser sobre-escrito entonces use APP76% L/670 .' 5"N&BAR ". 5"NA(O.

- 2J -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------IncorrectoA 5+A-%A"7 Z 0D-%A"($. 0i se desea modificar un campo de una $.%/'D 5"N/"AB '8.$ 5+A /6%7O :. tabla interna, es ms eficiente modificarlo CorrectoA especificando el campo. 5+A-%A"7 Z 0D-%A"($. $.%/'D 5"N/"AB '8.$ 5+A /6%7O : "8A60P.8"/65 %A"7. IncorrectoA 87A% "ABL7 5"N"AB /6%7O : /6". 5+ANP87&NL/67. L..P A" 5"N"AB '8.$ 2 /6". 5+A. /' 5+A Z 5+ANP87&NL/67. %7L7"7 5"N"AB. Para borrar entradas duplicadas dentro de una tabla 7L07. interna es me3or ordenar la tabla y borrar 5+ANP87&NL/67 Z 5+A. los duplicados y no -acerlos dentro de un L..P. 76%/'. 76%L..P. CorrectoA 0.8" 5"N"AB BD R. %7L7"7 A%UAC76" %(PL/CA"70 '8.$ 5"N"AB C.$PA8/65 R. IncorrectoA L..P A" 5"N"AB. 0e debe e2itar el L..P para a2eriguar el n<mero de L/NL/67A0 Z L/NL/67A0 _ :. 76%L..P. registros de una tabla. CorrectoA %70C8/B7 "ABL7 5"N"AB L/670 L/NL/67A0. CorrectoA /' 6." 5"N"AB:`a /0 /6/"/AL. 0e deben e2itar los SE7ECT anidados mientras dan 07L7C" '/7L%: '/7L%2 '8.$ "ABL7 /6". "ABL7 5"N"AB2 lugar a un 2olumen grande de accesos de base de '.8 ALL 76"8/70 /6 5"N"AB: datos )dependientes en el tamaLo de tablas*. +F787 '/7L%> 7G 5"N"AB:-'/7L%> 7n lugar de ello utilizar '.8 ALL 76"870. A6% '/7L%A /6 0N'/7L%. 76%/'. IncorrectoA L..P A" 5"N"AB:. L..P A" 5"N"AB2 +F787 R Z 5"N"AB:-R. 7n ocasiones tenemos tablas internas muy pesadas ... y debemos de recorrer una dentro de otra, 76%L..P. suponiendo =ue contamos con dos tablas 76%L..P. internas gtNtab: en donde -ay m entradas y gtNtab2 donde -ay n entradas, el n<mero de CorrectoA 2ueltas ser@a m 1 n. /ncluso, aun=ue -ayamos L/N/6%O Z :. puesto la clusula +F787. L..P A" 5"N"AB: /6". L+AN"AB:. L..P A" 5"N"AB2 /6". L+AN"AB2 '8.$ L/N/6%O. 7n estos casos, donde adems ambas /' L+AN"AB2-R !# L+AN"AB:-R. tablas tengan los mismos campos cla2e, se L/N/6%O Z 0D-"AB/O. recomienda usar un @ndice interno para empezar la 7O/". b<s=ueda en la segunda tabla, de esta forma 76%/'. se reducir el n<mero de 2ueltas. I ... 76%L..P. 76%L..P. IncorrectoA 9 "abla 5"N"AB tiene :44 entradas. 0iempre =ue sea posible, utilice operaciones con L..P A" 5"N"AB. arreglos en lugar de operaciones sobre una fila. La /6078" /6". &78/NCL6" &AL(70 5"N"AB. frecuente comunicacin entre el programa de 76%L..P. aplicacin y el sistema de la base de datos produce CorrectoA una considerable ba3a en la performance. 9 "abla 5"N"AB tiene :44 entradas. /6078" &78/NCL6" '8.$ "ABL7 5"N"AB. IncorrectoA 0i la tabla interna tiene muc-as entradas, en 87A% "ABL7 5"N"AB +/"F R7D , Z ]O^. una b<s=ueda lineal a tra2Es de todas las entradas el tiempo consumido es bastante largo. CorrectoA "rate de 87A% "ABL7 5"N"AB /6". L+AN"AB +/"F R7D , Z ]O^ B/6A8D 07A8CF. mantener la tabla ordenada y usar b<s=ueda binaria.

- 2M -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------10.3. !odulari(aci)n = reutili(aci)n


Consideraciones
!odulari(aci)n Los programas deben modularizados completamente. estar

E&em"los

7sto significa =ue el programa principal consistir de una serie de subrutinas )mdulos*, las cuales resumirn los procesos principales del CorrectoA programa. 0"A8"-.'-07L7C"/.6. A su 2ez, cada, subrutina, se di2idir en P78'.8$ buscarNdatos. forma co-erente y balanceada en nue2as P78'.8$ calcularNporcenta3es. subrutinas, =ue di2idirn nue2amente el P78'.8$ grabarNlog. mdulo en subprocesos. D as@ 76%-.'-07L7C"/.6. sucesi2amente. P78'.8$ imprimirNreporte. La modularizacin se establece durante P78'.8$ doSnloadNarc-i2o. el diseLo[ implica comprender la comple3idad total del programa y di2idirla '.8$ buscarNdatos. en partes ) mdulos*. Cada modulo o ... rutina e3ecutar 0.L. una accin 76%'.8$. principal o proceso. '.8$ calcularNporcenta3es. A tra2Es de la modularizacin se \ di2ide un PproblemaQ grande en 76%'.8$. \ problemas Ppe=ueLosQ. 'acilita la compresin y el seguimiento, y es cla2e para el mantenimiento de un programa. Los programas modularizados y facilitan su reutilizacin correctamente parametrizados

+arametri(aci)n de m)dulos 0olamente se debern declarar 2ariables globales cuando realmente este 3ustificado. 6unca debern declararse globales =ue solo sean luego dentro de alg<n mdulo.

/ecomenda%leA

2ariables %A"A gSaNstoc,Nmat "DP7 mard. utilizadas 0"A8"-.'-07L7C"/.6. P78'.8$ buscarNdatosNstoc, c-anging gSaNstoc,Nmat. P78'.8$ imprimirNdatosNstoc, using gSaNstoc,Nmat.

(tilizar pase de parmetros entre mdulos. )(0/65, CFA5/65, "ABL70*.

En este caso la variable g/a_stoc0_mat es global1 si bien dentro de las rutinas la variable /ncluso cuando no fuera necesario el pase de parmetros desde el punto de esta dentro de su mbito de incumbencia y podr2a ser re erenciada1 colocar el parmetro 2ista tEcnico, siempre es recomendable clari ica el seguimiento1 se observa entonces 3ue el orm ).-",R_$,(O-_-(O"4 indicarlo, de manera =ue sea ms claro modi icar esa variable1 y el orm &MPR&M&R_$,(O-_-(O"4 la utili5ar. entender =ue la subrutina llamada, utiliza o modifica cierta 2ariable. Balanceo de la estructura de un "ro3rama IncorrectoA 0"A8"-.'-07L7C"/.6. P78'.8$ CA85A8N%A".0 "ABL70 5"N%A"A. P78'.8$ /$P8/$/8NCAB7C78A "ABL70 5"N%A"A. P78'.8$ /$P8/$/8N%7"ALL7 "ABL70 5"N%A"A. Los programas se debern estructurar de CorrectoA manera =ue idEnticos ni2eles de la 0"A8"-.'-07L7C"/.6. estructura conser2en el mismo ni2el P78'.8$ CA85A8N%A".0 "ABL70 5"N%A"A. funcional. P78'.8$ /$P8/$/8N%A".0 "ABL70 5"N%A"A. '.8$ /$P8/$7N%A".0 "ABL70 P"N%A"A. P78'.8$ /$P8/$/8NCAB7C78A "ABL70 5"N%A"A. P78'.8$ /$P8/$/8N%7"ALL7 "ABL70 5"N%A"A. 76%'.8$.

- >4 -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------/eutili(aci)n 0e deber tener en cuenta al momento del diseLo del programa, =uE componentes del mismo podrn ser reutilizados en desarrollos similares. Para esto debe estar el desarrollo correctamente modularizado y /ecomenda%leA parametrizado. "ipos reutilizables, grabarlos en "DP7-P..L0. 8utinas sin parmetros son muy dif@ciles de reutilizar. %efiniciones de 2ariables reutilizables, grabarlos en /6CL(%70 La reutilizacin me3ora los tiempos de 8utinas )'.8$s* reutilizables, grabarlos en 8.("/670-P..L o /6CL(%70. desarrollo, simplifica el proceso y e2ita Prein2entar la ruedaQ constantemente. 8utinas )'.8$s* reutilizables, con parmetros de entrada y salida, grabarlos en $.%(L.0 %7 '(6C/.670. 7s fundamental tener en cuenta todos las dems reglas y estndares de codificacin en ABAP para poder con2ertir un programa o parte del mismo en material reutilizable y apro2ec-able. (n programa con errores de performance, o de codificacin, no puede ser reutilizado. (n programa no modularizado o no parametrizado o con -arcoding, no puede ser reutilizado. (n programa mal presentado o desproli3o, es muy dif@cil analizarlo para determinar su reutilizacin potencial.

- >: -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------11. NO!ENC7'T0/' 11.1. Nomenclatura de O%&etos de /e"ositiorio S'+ T/'NS'CCION Los nombres de estos ob3etos tendrn la siguiente forma FI!!JIKJINNNJ %onde D $$ ; 666 NotaA 7l numeral `6666a debe ser el mismo en el nombre del programa y en la transaccin )sin el 4 inicial*, por lo =ue ser utilizado slo una 2ez. 73emplo, si el programa es D$$8442>, la transaccin respecti2a es D$$842>. 0i se encontrara alg<n espacio en los correlati2os de t1s, utilizar dic-os espacios para las nue2as t1s a crear. 73m 0i en el sistema e1iste la t1 D'/P44:, D'/P44>, D'/P44A..., utilizar el nombre D'/P442 como nue2a t1 a crear. +/O1/'!' Los nombres de estos ob3etos tendrn la siguiente forma FI!!JIKJINNNNJ %onde D $$ ; 6666 73m D'/8444: INC70DE Los nombres de estos ob3etos tendrn la siguiente forma FI!!JIKJINNNNJL??? Include D$$;6666N".P D$$;6666N07L D$$;6666N$A/ D$$;6666N'4: D$$;6666N.4: D$$;6666N/4: D$$;6666NCLA Contiene "odas las declaraciones iniciales. Los parmetros de seleccin iniciales. 7l proceso principal y los e2entos. Las subrutinas del programa. Process Before .utput. Process After /nput. /mplementacin de todos los mEtodos de una clase. Por definicin 0AP $dulo 0AP )2er tabla :* "ipo de programa )2er tabla 2* 8ango de Correlati2os 444: - MMMM Aris 0.A. - Per< Por definicin 0AP $dulo 0AP )&er tabla :* "ipo de Programa )2er tabla 2* 8ango de Correlati2os 44: - MMM Aris 0.A.

- >2 -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------INC70DE 1ENM/ICO 0i se crea un include con rutinas generales =ue 2a a ser utilizado por cual=uier programa, se utilizar la siguiente forma FINLI?N?J %onde D /6 O\O Por definicin 0AP Constante %escripcin literal

73m /nclude global de $acros D/6N$AC8. ENB'NCE!ENT Los nombres de estos ob3etos tendrn la siguiente forma FI!!JENLI?N?J %onde D $$ 76 O\O Por definicin 0AP $dulo 0AP )2er tabla :* Constante %escripcin literal

73m D$$76N87078&A04: T'B7' Los nombres de estos ob3etos tendrn la siguiente forma FI!!JTLI?N?J %onde D $$ " O...O Por definicin 0AP $dulo 0AP )2er tabla :* Constante %escripcin literal

73m DC."N$A"C.0". NotaA 0e debe definir la Categor@a de Ampliacin antes de acti2ar la tabla. Para acceder, desde la 2ista de tratamiento de la tabla en la 07::, ir al men< %etalles -# opcin Categor@a de Ampliacin. C'!+O DE T'B7' 7l nombre =ue lle2arn los diferentes campos =ue conforman una tabla de base de datos, estar asignado de la siguiente forma, dependiendo el caso en =ue se encuentre %e ser un campo =ue -ace referencia a un tipo de dato e1istente en 0AP, se mantendr el mismo nombre de campo usado por la nomenclatura estndar de 0AP. 73emplo 0ociedad -# B(R80 %e ser un campo creado seg<n la situacin del negocio o cliente, el nombre del campo estar asignado por un nombre adecuado seleccionado ba3o el criterio del consultor responsable, tomando un tamaLo recomendado de C caracteres. 73emplo Alimentos -# AL$"0. "ienda de "e1tiles -# "%A"L.

- >> -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------INDICE DE T'B7' Los @ndices =ue sea necesarios crear, para la optimizacin en el acceso de lectura a las tablas de bases de datos tendrn la siguiente forma FINNJ %onde D 66 73m D4:. VIST' Los nombres de estos ob3etos tendrn la siguiente forma FI!!JVLI?N?J %onde D $$ & O...O Por definicin 0AP $dulo 0AP )2er tabla :* Constante %escripcin literal Por definicin 0AP 0ecuencia numErica de 2 caracteres.

73m D$$&N$A"C76"8. VIST' '++END Los nombres de estos ob3etos tendrn la siguiente forma FI!!JV'LI?N?J VIST' 'F0D' Los nombres de estos ob3etos tendrn la siguiente forma FI!!JVBLI?N?J EST/0CT0/' Los nombres de estos ob3etos tendrn la siguiente forma FI!!JSLI?N?J %onde D $$ 0 O...O Por definicin 0AP $dulo 0AP )2er tabla :* Constante %escripcin literal

73m D+$0N0".CR$A" NotaA 0e debe definir la Categor@a de Ampliacin antes de acti2ar la estructura. EST/0CT0/' '++END Los nombres de estos ob3etos tendrn la siguiente forma FI!!JS'LI?N?J

- >A -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------TI+O T'B7' Los nombres de estos ob3etos tendrn la siguiente forma FI!!JTTLI?...?J %onde D $$ "" O...O Por definicin 0AP $dulo 0AP )2er tabla :* Constante %escripcin literal

73m D$$""N87078&A0. E7E!ENTO DE D'TO Los nombres de estos ob3etos tendrn la siguiente forma FELI?N?J %onde D 7 O\O Por definicin 0AP Constante %escripcin literal

73m D7NBA6C. DO!INIO Los nombres de estos ob3etos tendrn la siguiente forma FDLICCCCJINNNJILDa %onde D % CCCC 666 % Por definicin 0AP Constante "ipo de formato del campo )2er tabla >* Longitud del campo .pcional 6<mero de decimales

73m D%NCFA82CC Almacena un te1to de 2CC caracteres D%N%7C:CN2 Almacena un n<mero de longitud :C y 2 decimales. Los dominios =ue tu2ieran mbito de 2alores tendrn la siguiente forma FDL'VI???J %onde D % A& OOO Por definicin 0AP Constante Constante %escripcin literal

73m D%NA&$70 contiene los meses del aLo ID +'/'!ET/O SET61ET Los /% de parmetro sir2en para llenar un campo con los 2alores propuestos de la memoria 0AP. 7stos iniciarn con el prefi3o D, seguido de una abre2iatura del parmetro =ue 2a a representar, recomendable > caracteres. 73m D87"

- >C -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------'F0D' DE BOSP0ED' Los nombres de estos ob3etos tendrn la siguiente forma FBLI?N?J %onde D F O\O Por definicin 0AP Constante %escripcin literal

73m DFN(0780 OBJETO DE B7OP0EO Los nombres de estos ob3etos tendrn la siguiente EFLI?...?J %onde 7 D O...O Prefi3o .bligatorio 0AP Por definicin 0AP %escripcin literal, de preferencia tabla relacionada a blo=uear

73m 7DN;0%BL.CR S'+SC/I+T Los nombres de estos ob3etos tendrn la siguiente forma FI!!JSSLI?N?J %onde D $$ 00 O\O Por definicin 0AP $dulo 0AP )2er tabla :* Constante %escripcin literal

73m D0%00NA%(A6A ESTI7O 9S'+SC/I+T: Los nombres de estos ob3etos tendrn la siguiente forma FSTLINNNa %onde D Por definicin 0AP 0" Constante 666 Correlati2o de > d@gitos 73m D0"N44: S!'/T8O/! Los nombres de estos ob3etos tendrn la siguiente forma FI!!JS8LI?N?J %onde D $$ 0' O\O Por definicin 0AP $dulo 0AP )2er tabla :* Constante %escripcin literal

73m D0%0'NA%(A6A

- >H -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------ESTI7O 9S!'/T8O/!: Los nombres de estos ob3etos tendrn la siguiente forma FSTLI?N?J %onde D $$ 0" O\O Por definicin 0AP $dulo 0AP )2er tabla :* Constante 6ombre de 0martform

73m D0"NA%(A6A !QD07O DE TE?TO 9S!'/T8O/!: Los nombres de estos ob3etos tendrn la siguiente forma F!TLI?N?J %onde D $" O\O Por definicin 0AP Constante %escripcin literal

1/0+O DE 80NCIONES Los nombres de estos ob3etos tendrn la siguiente forma FI!!J18LI?...?J %onde D $$ 5' O...O Por definicin de 0AP $dulo 0AP )2er tabla :* Constante %escripcin literal

73m DF85'NP780.6AL 80NCION Los nombres de estos ob3etos tendrn la siguiente forma FI!!J8LI?...?J %onde D $$ ' O...O Por definicin de 0AP $dulo 0AP )2er tabla :* Constante %escripcin literal

73m D'/'N&78PA5.0 /8C Los nombres de estos ob3etos tendrn la siguiente forma FI!!J/8CLI?N?J %onde D $$ 8'C O...O Por definicin de 0AP $dulo 0AP )2er tabla :* Constante %escripcin literal

73m D0%8'CN"/P.%.C

- >K -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------'+7IC'CION BS+ Los nombres de estos ob3etos tendrn la siguiente forma FI!!JBS+LI?...?J %onde D $$ B0P O...O Por definicin 0AP $dulo 0AP )2er tabla :* Constante %escripcin literal

73m D$$B0PNL/B78AN.C I!+7E!ENT'CION B'DI Los nombres de estos ob3etos tendrn la siguiente forma FI?...?JINJ %onde D O...O 6 Por definicin 0AP %escripcin literal, de preferencia nombre de definicin .pcional correlati2o numErico de : d@gito

73m D$7NP8.C700NP.NC(0". C7'SE E INTE/8'SE La nomenclatura de una clase o de una interfase puede constar de caracteres alfanumEricos y del carcter especial de subrayado )N* y de la barra )B*. La barra )B* sir2e para delimitar el prefi3o del mbito de nombres del resto del denominador. La clase o interfase no puede empezar con una cifra. Clase /nterfase %onde D $$ CLB/' O...O FI!!JC7LI?N?J FI!!JI8LI?N?J Por definicin 0AP $dulo 0AP )2er tabla :* Constante %escripcin literal

1/0+O DE 0S0'/IO 9P0E/F: Los nombres de estos ob3etos tendrn la siguiente forma FI!!J10LI?...?J %onde D $$ 5( O...O Por definicin 0AP $dulo 0AP )2er tabla :* Constante %escripcin literal, de preferencia nombre de definicin

73m D0%5(N&76"A0

- >J -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------IN8OSET 9P0E/F: Los nombres de estos ob3etos tendrn la siguiente forma FI!!JISLI?...?J %onde D $$ /0 O...O Por definicin 0AP $dulo 0AP )2er tabla :* Constante %escripcin literal, de preferencia nombre de definicin

73m D0%/0N%.CN&76"A0 P0E/F Los nombres de estos ob3etos tendrn la siguiente forma FI!!JPLI?...?J %onde D $$ G O...O Por definicin 0AP $dulo 0AP )2er tabla :* Constante %escripcin literal, de preferencia nombre de definicin

73m D0%GN76"875A0 +/OFECTO 97S!E: Los nombres de estos ob3etos tendrn la siguiente forma F+LI?...?J %onde D P O...O Por definicin 0AP Constante %escripcin literal, de preferencia nombre de definicin

73m DPNL7A60A S0B +/OFECTO 97S!E: Los nombres de estos ob3etos tendrn la siguiente forma FI!!JS+LI?...?J %onde D $$ 0P O...O Por definicin 0AP $dulo 0AP )2er tabla :* Constante %escripcin literal, de preferencia nombre de definicin

73m D$$0PNP7%/%.0

- >M -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------OBJETO 97S!E: Los nombres de estos ob3etos tendrn la siguiente forma FI!!JOLI?...?J %onde D $$ . O...O Por definicin 0AP $dulo 0AP )2er tabla :* Constante %escripcin literal, de preferencia nombre de definicin

73m D$$.N$72:6N4: C7'SE DE DES'//O77O Los nombres de estos ob3etos tendrn la siguiente forma KI!!J FI???J %onde ; $$ D OOO Por definicin 0AP $dulo 0AP )2er tabla :* Por definicin 0AP 0iglas de proyecto )> a C caracteres* ;PP DC/$A

73m Pa=uete mdulo PP Pa=uete proyecto C/$A OBJETO DE '0TO/IK'CION

Con la finalidad de mantener la seguridad de accesos y permisos respecti2os a las transacciones, ser necesaria la creacin de ob3etos de autorizacin, los cuales tendrn la siguiente forma FI!!JLI?N?J %onde D $$ O...O Por definicin de 0AP $dulo 0AP )2er tabla :* %escripcin literal

73m D$$N+78R0 NotaA Considerar el campo AC"/&/%A% )AC"&"* para una me3or restriccin. C7'SE DE !ENS'JE Los nombres de las clases de mensa3e tienen la siguiente forma KI!!JINNJ %onde ; $$ 66 73m ;PP4: NotaA Preferentemente usar una clase por mdulo Por definicin 0AP $dulo 0AP )2er tabla :* Correlati2o de 2 d@gitos

- A4 -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------N0!E/OS DE !ENS'JE Los n<meros de mensa3es consta de > caracteres numEricos INNNJ %onde 666 V'/I'NTE 7l te1to es libre 6<mero de inter2alo ) 44: X MMM *

- A: -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------11. . Nomenclatura de O%&etos No S'+ DOC0!ENT'CION TECNIC' Los documentos +ord =ue se creen para documentar el desarrollo debern respetar la nomenclatura siguiente DTLIOBJ.doc %onde %" .B Constante .b3eto =ue se est documentando )Preferentemente t1, si no tu2iera, programa, funcin, etc*

73m %"ND$$8>4H.doc +7'NTI77'S E?CE7 Los arc-i2os plantillas 71cel =ue interact<an con los reportes 0AP deben ser nombrados de la siguiente manera T!+LIOBJLNN.;ls %onde "$P .B 66 Constante .b3eto =ue llamar a la plantilla )Preferentemente t1, si no tu2iera, programa, etc* Correlati2o )4: X MM*

73m "$PND'/P4MAN4:.1ls

- A2 -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------'NE?OS T'B7' DE +'/@!ET/OS T'B7' 1. !QD07OS '"licaci)n BC B+ C. C0 '/ F8 $$ P$ PP P0 G$ 0% +$ Descri"ci)n (so genErico Business +are-ouse Controlling 0er2icio al Cliente 'inanzas 8ecursos Fumanos $ateriales $antenimiento Produccin 5estin de Proyectos Calidad &entas y %istribucin 5estin de Almacenes

T'B7' . TI+O DE +/O1/'!' 6 T/'NS'CCIQN C)di3o Denominaci)n 6lido para programa 7 transacci7n: B BatcP Procesos y otros desarrollos Descri"ci)n 7n ellos se encuentran los programas =ue mane3an Batc- /nput, Call "ransaction, etc Para el caso de un programa =ue presente una serie de procesos o realice acti2idades particulares. 7stos programas se caracterizan por realizar ms de una acti2idad de las mencionadas en un mismo programa. 0i el programa in2oca la generacin de formularios independiente de =ue sea del tipo 0mart'orms o 0ap0cript. Para todos a=uellos programas =ue impli=uen una seleccin de datos y un listado en pantalla. Procesos e1clusi2os al mantenimiento o carga inicial de una tabla

' 8

'ormulario 8eporte

$ $antenimiento de tablas 6lido para programas )8: %8 %ata 8eal %$ %ata $aestra 6lido s7lo para transacci7n: A Actualizacin G Guery T'B7' 3. TI+O DE 8O/!'TO C)di3o CFA8 C(88 %A"0 %7C 'L"P /6" 6($C G(A6 "/$0 (6/"

"ransaccin de actualizacin de tabla. "ransaccin creada para =uery

Descri"ci)n 0tring Campo moneda, almacenado como %7C Campo para fec-a )AAAA$$%%*, almacenado como CFA8 )J* Campo clculo o de importe con coma y signo _BCifra coma flotante con J byte de e1actitud 7ntero 0tring slo con cifras Campo cantidad, apunta a campo unidades con formato (6/" Campo -ora )FF$$00*, almacenado como CFA8 )H* Cla2e de unidades para campos G(A6

ID C % P ' / 6 " (

- A> -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------I!@1ENES I!'1EN 3.a

- AA -

Sistemas ------------------------------------------------------------------------------------------------------------- ----------------------------------I!'1EN 3.%

I!'1EN 3.c

- AC -

También podría gustarte