Вы находитесь на странице: 1из 10

ABAP Performance

Operacin en una tabla interna


Bsqueda Lineal Vs Binary El rendimiento de tu programa se podra ver afectado cuando manejas tablas internas con ms de 10 mil registros. Con los siguientes tips podrs proveer de mejor performance a tu reporte. READ TABLE table_interna WITH criterio. Por defecto el comando READ TABLE en una tabla interna leer la tabla de manera secuencial. Sin embargo al algoritmo BINARY SEARCH proporcionara una bsqueda ms rpida de un valor en la tabla. Para ello la tabla debe estar ordenada por los campos que van a ser ledos. SORT table_interna BY campo1. READ TABLE table_interna WITH KEY campo1 = criterio. Tambin pueden aplicar este criterio para mejorar los loops anidados. Vean el siguiente ejemplo SORT tabla_interna1 BY campo1. SORT tabla_interna2 BY campo1. LOOP AT tabla_interna1. READ TABLE tabla_interna2 with key campo1 = tabla_interna-campo1 BINARY SEARCH. IF sy-subrc = 0. LOOP AT tabla_interna2 FROM sy-tabix. IF TABLA_INTERNA2-CAMPO1 = TABLA_INTERNA-CAMPO2. "aca desarrollas el cdigo requerido ELSE. EXIT. "Los registro son mayores ENDIF. ENDLOOP. ENDIF. ENDLOOP. Copiando Tablas Internas Si las dos tablas son iguales, la opcin NO recomendada es la siguiente: LOOP AT tabla_orig. MOVE tabla_orig TO tabla_dest. APPEND tabla_dest. ENDLOOP. Es mejor la siguiente opcion: tabla_dest[ ] = tabla_orig[ ]. De la misma manera, si se requiere es agregar lines de una tabla a otra, la mejor opcion es la siguiente: APPEND LINES OF tabla_orig TO tabla_dest. Borrando un conjunto de Lineas Antes de pensar en hacer un loop a la tabla como el siguiente LOOP AT tabla_int WHERE campo1 = valor. DELETE TABLA_INT. ENDLOOP. Es mejor realizar los siguiente. DELETE tabla_int WHERE campo = valor. Modificando un Conjunto de Lineas En lugar de utilizar este cdigo: LOOP AT tabla_int . IF tabla_int -flag IS INITIAL. tabla_int-flag = 'X'. ENDIF. MODIFY TAB. ENDLOOP. Es mejor lo siguiente: tabla_int-flag = 'X', MODIFY tabla_int TRANSPORTING flag WHERE flag IS INITIAL.

Optimizacin en el acceso a la Base de Datos


Unos simples consejos son los siguientes: Si se va a acceder a varias tablas relaciones, es recomendable crear una vista con las tablas relacionadas y accesar a ella. Con la opcin FOR ALL ENTRIES se consigue que las entradas que se consiguieron en el primer select (tabla driver) se consigan en el segundo select por lo que se ejecutara el segundo select solo una vez. SELECT matnr FROM mara INTO TABLE imara WHERE cond. SELECT * FROM mard FOR ALL ENTRIES IN imara WHERE mantr = imara-matnr. Con la Instruccin FORL ALL ENTRIES hay que tener sumo cuidado en la manera en que se va a usar, primero se debe asegurar que la tabla driver con la se va a comparar no se encuentre vacia, pues si es as, traera toda la data que est en la base de datos, perjudicando el performance del programa, y segundo, si la tabla interna tiene muchos registros, el select a la Base de Datos sera mucha mas lento pues si utilizara mucha memoria. Para hacer mas eficiente el FOR ALL ENTRIES es recomendable, borrar los valores duplicado de la tabla driver, ordenarla y si es posible convertirla en una tabla de rangos usando la sentencia BETWEEN. FOR ALL ENTRIES IN imara WHERE matnr >= imara-matnr AND matnr <= imara-matnr. Es recomendable y mas rpido indicarle al SELECT que campos va leer, si no se necesitan todos ellos. SELECT campo1 campo2 campo3 FROM TABLE tabla INTO TABLE itabla. Donde itabla debe estar declarada con los campos que se quieren seleccionar de la tabla

Operacin en una tabla interna


Bsqueda Lineal Vs Binary El rendimiento de tu programa se podra ver afectado cuando manejas tablas internas con ms de 10 mil registros. Con los siguientes tips podrs proveer de mejor performance a tu reporte. READ TABLE table_interna WITH criterio. Por defecto el comando READ TABLE en una tabla interna leer la tabla de manera secuencial. Sin embargo al algoritmo BINARY SEARCH proporcionara una bsqueda ms rpida de un valor en la tabla. Para ello la tabla debe estar ordenada por los campos que van a ser ledos. SORT table_interna BY campo1. READ TABLE table_interna WITH KEY campo1 = criterio. Tambin pueden aplicar este criterio para mejorar los loops anidados. Vean el siguiente ejemplo SORT tabla_interna1 BY campo1. SORT tabla_interna2 BY campo1. LOOP AT tabla_interna1. READ TABLE tabla_interna2 with key campo1 = tabla_interna-campo1 BINARY SEARCH. IF sy-subrc = 0. LOOP AT tabla_interna2 FROM sy-tabix. IF TABLA_INTERNA2-CAMPO1 = TABLA_INTERNA-CAMPO2. "aca desarrollas el cdigo requerido ELSE. EXIT. "Los registro son mayores ENDIF. ENDLOOP. ENDIF. ENDLOOP. Copiando Tablas Internas Si las dos tablas son iguales, la opcin NO recomendada es la siguiente: LOOP AT tabla_orig. MOVE tabla_orig TO tabla_dest. APPEND tabla_dest. ENDLOOP. Es mejor la siguiente opcion: tabla_dest[ ] = tabla_orig[ ]. De la misma manera, si se requiere es agregar lines de una tabla a otra, la mejor opcion es la siguiente: APPEND LINES OF tabla_orig TO tabla_dest. Borrando un conjunto de Lineas Antes de pensar en hacer un loop a la tabla como el siguiente

LOOP AT tabla_int WHERE campo1 = valor. DELETE TABLA_INT. ENDLOOP. Es mejor realizar los siguiente. DELETE tabla_int WHERE campo = valor. Modificando un Conjunto de Lineas En lugar de utilizar este cdigo: LOOP AT tabla_int . IF tabla_int -flag IS INITIAL. tabla_int-flag = 'X'. ENDIF. MODIFY TAB. ENDLOOP. Es mejor lo siguiente: tabla_int-flag = 'X', MODIFY tabla_int TRANSPORTING flag WHERE flag IS INITIAL.

Optimizacin en el acceso a la Base de Datos


Unos simples consejos son los siguientes: Si se va a acceder a varias tablas relaciones, es recomendable crear una vista con las tablas relacionadas y accesar a ella. Con la opcin FOR ALL ENTRIES se consigue que las entradas que se consiguieron en el primer select (tabla driver) se consigan en el segundo select por lo que se ejecutara el segundo select solo una vez. SELECT matnr FROM mara INTO TABLE imara WHERE cond. SELECT * FROM mard FOR ALL ENTRIES IN imara WHERE mantr = imara-matnr. Con la Instruccin FORL ALL ENTRIES hay que tener sumo cuidado en la manera en que se va a usar, primero se debe asegurar que la tabla driver con la se va a comparar no se encuentre vacia, pues si es as, traera toda la data que est en la base de datos, perjudicando el performance del programa, y segundo, si la tabla interna tiene muchos registros, el select a la Base de Datos sera mucha mas lento pues si utilizara mucha memoria. Para hacer mas eficiente el FOR ALL ENTRIES es recomendable, borrar los valores duplicado de la tabla driver, ordenarla y si es posible convertirla en una tabla de rangos usando la sentencia BETWEEN. FOR ALL ENTRIES IN imara WHERE matnr >= imara-matnr AND matnr <= imara-matnr. Es recomendable y mas rpido indicarle al SELECT que campos va leer, si no se necesitan todos ellos. SELECT campo1 campo2 campo3 FROM TABLE tabla INTO TABLE itabla. Donde itabla debe estar declarada con los campos que se quieren seleccionar de la tabla.

Publicado por Marsi Linares en 11:55 0 comentarios Etiquetas: ABAP, Performance, Tuning

viernes 23 de octubre de 2009


Otras Funciones SAP
ABAP_DOCU_DOWNLOAD - Descargar Documentacin ABAP en formato HTML. ARFC_GET_TID - Devuelve la direccin IP de la terminal en hexadecimal. CLOI_PUT_SIGN_IN_FRONT - Coloca el signo negativo despus de un nmero. En SAP est predeterminado colocar el signo negativo despus del nmero CLPB_EXPORT - Exportar una tabla de texto en el Portapapeles (en el servidor de presentacin) CLPB_IMPORT - Importar una tabla de texto desde el Portapapeles (en el servidor de presentacin) DATE_GET_WEEK - devolver la semana en la que una fecha est. DYNP_VALUES_READ - Lee los valores desde un dynpro. Esta funcin puede ser usada para leer valores desde un reporte con screen tambin .

DYNP_VALUES_UPDATE - Es similar al DYNP_VALUES_READ, esta funcin permitir la actualizacin de campos en un dynpro. Muys usado cuando quieras cambiar un campo basado en el valor registrado por otro campo. ENQUE_SLEEP - Espera un perodo determinado de tiempo antes de continuar el procesamiento. ENQUEUE_ESFUNCTION - Bloquear un programa ABAP de modo que, no pueda ser ejecutado. Se debe establecer los parmetros de la siguiente manera:

RELID = 'ZZ' SRTF2 = 0 SRTF = (T nombre del programa)

F4_DATE - muestra un calendario en una ventana emergente y permite que el usuario seleccione una fecha, o puede mostrarse de slo lectura. HOLIDAY_GET - Proporciona una tabla de todos los das no laborables basado en un calendario de fbrica & / calendario de vacaciones.. INIT_TEXT - Para cargar texto largo en SAP K_WERKS_OF_BUKRS_FIND - Devuelve una lista de todas los centros para un cdigo de empresa dada. MONTH_NAMES_GET - Devuelve todos los meses y los nombres en el lenguaje respectivo. MS_EXCEL_OLE_STANDARD_OLE - Se genere un archivo e inicie automticamente Excel POPUP_TO_CONFIRM_LOSS_OF_DATA - Crea un cuadro de dilogo en el que realiza una pregunta si el usuario desea realizar un paso de procesamiento con prdida de datos. POPUP_TO_CONFIRM_WITH_MESSAGE - Crea un cuadro de dilogo en el que usted informa al usuario acerca de un punto de decisin especfica durante una accin. POPUP_TO_CONFIRM_WITH_VALUE - Crear un cuadro de dilogo en el que realiza una pregunta si el usuario desea realizar un paso de procesamiento con un objeto determinado. POPUP_TO_DECIDE - Proporciona el usuario con varias opciones como botones de seleccin. POPUP_TO_DECIDE_WITH_MESSAGE - Crea un cuadro de dilogo en el que usted informar al usuario acerca de un punto de decisin concreta a travs de un texto de diagnstico. POPUP_TO_DISPLAY_TEXT - Crea una caja de dialogo en el cual puedes mostrar dos lineas de mensaje. POPUP_TO_SELECT_MONTH - Popup para escoger un mes POPUP_WITH_TABLE_DISPLAY - Muestra una tabla al usuario donde puede seleccionar uno, con el valor de la lnea de tabla devuelto cuando se selecciona. PRICING - Regresa las condiciones de precios en una table interna. Usa la estructura TCOMK para el parmetro COMM_HEAD_1, y la estructura TCOMP para el parmetro COMM_ITEM_1, y establece CALCULATION_TYPE para B. Las condiciones de los precios se devolvern en XOMV. Debes de llenar la TCOMP, y la TCOMK con los valores apropiados antes de llamar a la funcin para que funcione correctamente. RP_LAST_DAY_OF_MONTHS - Determina el ultimo da del mes. RPY_DYNPRO_READ - Lee la pantalla, incluyendo el flujo de pantalla. RPY_TRANSACTION_READ - Dada una transaccin, regresa el programa y la pantalla; o dado un programa y una pantalla, regresa las transacciones que el programa y la pantalla. RS_SEND_MAIL_FOR_SPOOLLIST - Enva un mensaje desde un ABAP/4 a SAPoffice. RZL_SLEEP - Cuelga la actual aplicacin desde 1 a 5 segundos. SAVE_TEXT - Para subir un texto largo a SAP. SCROLLING_IN_TABLE - Si estas programando un module pool y usas un table-control, puedes usar esta funcin para manejar cualquier scrolling. SD_DATETIME_DIFFERENCE - Regresa la diferencia en das y tiempo para 2 fechas. TH_DELETE_USER - Cierra un usuario. Resulta similar usando SM04. TH_POPUP - Muestra un mensaje de sistema de ventanas emergentes en una pantalla de usuarios especficos. WS_EXCEL - Comienza EXCEL en la PC WS_EXECUTE - ejecutar un programa en un PC Windows. WS_MSG - Crea un cuadro de dilogo en el que se muestra un mensaje de una lnea.

WWW_LIST_TO_HTML - Despus de ejecutar un reporte, llama a esta funcin para convertir la salida de lista a HTML. Publicado por Marsi Linares en 13:08 1 comentarios Etiquetas: ABAP, Funciones SAP

Colocar Nmero Total de Paginas a Un Reporte


Este es un sencillo Ejemplo para colocar el Total de Paginas a un Reporte sencillo ABAP, aunque este tipo de reporte ya no es tan usado. REPORT zimprpag NO STANDARD PAGE HEADING LINE-COUNT 65 line-size 80. DATA: num_pag(10) TYPE c. PERFORM escribe. PERFORM get_total_pageno. *&--------------------------------------------------------------------**& Form TOP-OF-PAGE *&--------------------------------------------------------------------TOP-OF-PAGE. WRITE:/(sy-linct) 'PRUEBA - PAGINA' CENTERED. WRITE: / sy-datum, 60 sy-pagno,'of', '*****'. SKIP. *&--------------------------------------------------------------------**& Form ESCRIBE *&--------------------------------------------------------------------FORM escribe. DO 200 TIMES. WRITE:/ 'PRUEBA', sy-linno. ENDDO. ENDFORM. " ESCRIBE *&---------------------------------------------------------------------* *& Form GET_TOTAL_PAGENO *&---------------------------------------------------------------------* FORM get_total_pageno. WRITE sy-pagno TO num_pag LEFT-JUSTIFIED. DO sy-pagno TIMES. READ LINE 2 OF PAGE sy-index. REPLACE '*****' WITH num_pag INTO sy-lisel. MODIFY LINE 2 OF PAGE sy-index. ENDDO. ENDFORM. " GET_TOTAL_PAGENO

http://abaperitos.blogspot.com/search/label/ABAP

Para ALV tipo Grid


En la definicin de los elementos de datos Debes declarar lo siguiente type-pools: slis. constants: top_of_page type slis_formname value 'TOP_OF_PAGE', top_of_list type slis_formname value 'TOP_OF_LIST'. constants: end_of_list type slis_formname value 'END_OF_LIST', user_command type slis_formname value 'ALV_USER_COMMAND' . En la funcion de visualizar la grid ('REUSE_ALV_GRID_DISPLAY') debes poner un command_alv: CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = prg *LA SIGUIENTE SENTENCIA SE USA PARA EL EVENTO DE DOBLE CLICK. i_callback_user_command = user_command it_fieldcat = fieldcat it_sort = sortcat i_save = 'X' TABLES t_outtab = it_datos ( tabla con los datos a mostrar en el ALV) EXCEPTIONS program_error = 1

OTHERS = 2.

Luego debes generar un perform en el que se ejecuta el doble click: *--------------------------------------------------------------------* * FORM ALV_USER_COMMAND ** --> R_UCOMM ** --> RS_SELFIELD **---------------------------------------------------------------------* FORM alv_user_command USING r_ucomm LIKE sy-ucommrs_selfield TYPE slis_selfield. * Aqui hago el tratamiento del evento doble click * CUANDO SE HACE DOBLE CLICK SE VIENE A ESTA SUBRUTINA *HAY QUE PREGUNTAR CUAL ES LA CELDA QUE SE HA PINCHADO. *HACIENDO WHEN ' *SE USA RS_SELFIELD (CAMPO SELECCIONADO) CASE RS_SELFIELD-FIELDNAME. WHEN 'BELNR'. Llama a una transaccin WHEN 'COD'. Llama a un reporte ENDCASE. ENDFORM. Los botones los gestionas de forma normal. `

Para un ALV POO


Se define la clase para capturar el evento DOUBLE_CLICK. Cuando se de doble click en alguna parte del grid se enviaran los valores a esta clase. *********************************************************************** * CLASSES *********************************************************************** CLASS LCL_EVENT_RECEIVER DEFINITION. PUBLIC SECTION. METHODS: CATCH_DOUBLECLICK FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID IMPORTING E_COLUMN ES_ROW_NO SENDER. ENDCLASS. "lcl_event_receiver DEFINITION *----CLASS LCL_EVENT_RECEIVER IMPLEMENTATION. METHOD CATCH_DOUBLECLICK. DATA: ET_TABLASALIDA TYPE TI_REPORTE, (tabla del mismo tipo de la tabla que contiene la data de salida del ALV) E_ESTILOCHEK TYPE LVC_S_STYL. READ TABLE TI_REPORTE INTO ET_TABLASALIDA INDEX ES_ROW_NO-ROW_ID. Luego ac colocas el codigo segn lo que vayas a realizar. Ten en cuenta que la estructura e_column te trae la informacin del campo al que has pinchado y tienes que pasar la data de los valores seleccionados de la data del ALV a la tabla de salida. ENDMETHOD. "catch_doubleclick ENDCLASS. "lcl_event_receiver IMPLEMENTATION Al implementar el ALV CALL METHOD G_GRID->SET_TABLE_FOR_FIRST_DISPLAY EXPORTING IS_LAYOUT = GS_LAYOUT IT_TOOLBAR_EXCLUDING = LT_EXCLUDE CHANGING IT_FIELDCATALOG = GT_CATALOGO IT_OUTTAB = TI_REPORTE[]. Es importante llamar al evento que se define al hacer Doble Click. CREATE OBJECT G_EVENT_RECEIVER. SET HANDLER EVENT_RECEIVER->CATCH_DOUBLECLICK FOR G_GRID. En la definiciones de los datos se declara los eventos DATA: event_receiver TYPE REF TO lcl_event_receiver.

Publicado por Marsi Linares en 09:12 0 comentarios

lunes 2 de marzo de 2009


Algunas Funciones SAP
Algunas Funciones SAP Funcin para obtener el Nombre del Da de la Semana RH_GET_DATE_DAYNAME Funcin que saca los ceros a la izquierda de una variable CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING INPUT = VG_VARIABLE IMPORTING OUTPUT = VG_VARIABLE. Funcin que completa con ceros a la izquierda de una variable CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = VG_VARIABLE IMPORTING OUTPUT = VG_VARIABLE. Calculadora en un POP-UP Con la siguiente funcion se generar una calculadora en un POP-UP. La funcin 'FITRV_CALCULATOR' nos devolver en la variable VALOR el resultado del clculo que haya hecho el usuario.

CALL FUNCTION 'FITRV_CALCULATOR' * EXPORTING * INPUT_VALUE = * CURRENCY = * START_COLUMN = '10 * START_ROW = '10 IMPORTING OUTPUT_VALUE = VALOR EXCEPTIONS INVALID_INPUT = 1 CALCULATION_CANCELED = 2 OTHERS = 3. Funcin que convierte variable tipo char a decimal. CALL FUNCTION 'RS_CONV_EX_2_IN_NO_DD' EXPORTING input_external = caracteres IMPORTING output_internal = paquete EXCEPTIONS input_not_numerical = 1 too_many_decimals = 2 more_than_one_sign = 3 ill_thousand_separator_dist = 4 too_many_digits = 5 sign_for_unsigned = 6 too_large = 7 too_small = 8 OTHERS = 20 . Funcion para sumar/restar dias/meses a una fecha Con esta funcin se suma o resta das o meses a una fecha. CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL' EXPORTING date = sy-datum days = 15 months = 1 signum = '+' years = 0 IMPORTING calc_date = resulta_fecha. Para restar dias o meses a la fecha debe cambiar el signo '+' por '-'. Funcin para calcular el prximo o anterior da habil Se puede usar la siguiente funcion: CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE' EXPORTING CORRECT_OPTION = signo ---> + o DATE = fecha FACTORY_CALENDAR_ID = IDENT ---> calendario (T001W-FABKL) IMPORTING DATE = fecha_resultado WORKINGDAY_INDICATOR = workingday inidicator EXCEPTIONS DATE_AFTER_RANGE = 01 DATE_BEFORE_RANGE = 02.

Reloj - Mostrar progreso

Esta funcin permite agregar un reloj que indica el progreso de un reporte en la barra de status. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING PERCENTAGE = tiempo TEXT = mensaje. Calcula fecha a futuro o pasado CALL FUNCTION 'DATE_IN_FUTURE' EXPORTING ANZAHL_TAGE = '3' --> 3 das adelante IMPORT_DATUM = fecha_i "fecha a la que se le suma oresta los dias IMPORTING EXPORT_DATUM_INT_FORMAT = fecha_s. "fecha obtenida Funcin para sumarle meses a una fecha CALL FUNCTION 'HR_PSD_DATES_ADD_MONTHS' EXPORTING V_DATE = fecha_en ---> fecha de entrada V_MONTHS = num_meses ---> numero de meses a sumar IMPORTING E_DATE = fecha_sal ---> fecha obtenida EXCEPTIONS NOT_POSITIVE = 1 OTHERS = 2. IF SY-SUBRC <> 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. Mostrar Importe en Letras CALL FUNCTION 'SPELL_AMOUNT' EXPORTING AMOUNT = monto "importe que se va a mostrar en letras CURRENCY = 'USD' "moneda del sistema LANGUAGE = SY-LANGU "idioma en que devuelve el texto IMPORTING IN_WORDS = monto_letras "Importe en Letras EXCEPTIONS NOT_FOUND = 1 TOO_LARGE = 2 OTHERS = 3. Si al hacer la conversin, los importes estn dando de manera incorrecta se puede entrar a la tabla T015Z por la transaccin SE16 y por all se modifica solo las cifras que estn incorrecta. Definir un rango en SAP A travs de la transaccin SNRO se pueden definir los rangos que sean autoincrementables. Luego a traves del programa se llama a la siguiente funcin CALL FUNCTION 'NUMBER_GET_NEXT' EXPORTING nr_range_nr = '01' ---> numero del rango del objeto object = objeto ---> objeto definido a travs del SNRO IMPORTING number = contador ---> numero del contador EXCEPTIONS interval_not_found = 1 number_range_not_intern = 2 object_not_found = 3 quantity_is_0 = 4 quantity_is_not_1 = 5 interval_overflow = 6 buffer_overflow = 7 OTHERS = 8. Enviar e-mail desde SAP Con la siguiente funcin SO_DOCUMENT_SEND_API1 pueden ser enviados a travs de nuestros programas SAP. Luego el e-mail debe ser liberado a travs de la transaccin SCOT

Publicado por Marsi Linares en 09:17 1 comentarios

Extensin del Maestro de Clientes


BAdis para la Realizacin de Extensin del Maestro de Clientes

PASO 1: En la SPRO se busca la siguiente Configuracin: Logistica en General --> Interlocutor Comercial --> Clientes --> Control --> Toma de Campos Especficos de Cliente --> Add-in empresarial: subscreen de cliente. Las siguientes son las Badis a Implementar: El add-in empresarial (BADI) CUSTOMER_ADD_DATA _CS sirve junto al BADI CUSTOMER_ADD_DATA para el proceso de ampliaciones en el maestro de clientes. El BADI CUSTOMER_ADD_DATA_CS sirve para la inclusin de subscreens propios en el dilogo estndar. En estos subscreens pueden tratarse datos propios (datos add-on). PASO 2: Antes de realizar la implementacin, por la SPRO, siguiendo la ruta: Logistica en General --> Interlocutor Comercial --> Clientes --> Control --> Toma de Campos Especficos de Cliente --> Preparar ampliacin sin modificaciones del maestro de deudor. Se debe realizar la siguiente configuracin: 1. Seleccione Grupo de imgenes Tratar y almacene para los grupos de imgenes deseados respectivamente una clave alfanumrica de dos posiciones y una denominacin. ( En este caso se utilizo ZS, para Grp. de Dynpros y en la Denominacin Datos PCM ). La denominacin del grupo de imgenes aparece posteriormente en forma de un pulsador en las pantallas de acceso de sus datos maestros del interlocutor comercial. Para poder utilizar su ampliacin, es decir, que su pulsador sea visible, actvelo mediante el add-in empresarial Proceso de ampliaciones de datos maestros con el mtodo CHECK_ADD_ON_ACTIVE (vase paso 3 ms abajo). 2. Seleccione Marcar etiquetas e introduzca para cada grupo de imgenes los datos necesarios para las etiquetas. Puede crear un mximo de 32 etiquetas por grupo de imgenes. Tenga en cuenta lo siguiente:

Mediante el nmero ordinal se controla la secuencia de las etiquetas. ( Se uso 1 ) . Mediante el cdigo de funcin el sistema identifica en el tiempo de ejecucin la etiqueta seleccionada por el usuario. (Se uso ZSD) . La denominacin aparece como cabecera de la etiqueta. ( Se uso Datos Generales XXXXX ) El icono (opcional) aparece junto con la cabecera en el ttulo de la etiquetas.

Las etiquetas se llaman posteriormente en los datos maestros de interlocutores comerciales mediante el pulsador correspondiente. En cada etiqueta tiene a su disposicin su subscreen propio de cliente en el que puede tratar sus datos de interlocutor comercial.Integre sus subscreens mediante su add-in empresarial dependiente de filtro Subscreens propios de cliente; seleccione como filtro su grupo de imgenes (vase paso 3 ms abajo). 3. Para conectar sus subscreens y datos a la aplicacin estndar, utilice los add-ins empresariales siguientes: Add-in empresarial: Proceso de ampliaciones de datos maestros (CUSTOMER_ADD_DATA/VENDOR_ADD_DATA) Add-in empresarial: Subscreens propios de cliente (CUSTOMER_ADD_DATA_CS/VENDOR_ADD_DATA_CS) Add-in empresarial: Proceso de ampliaciones de datos maestros con batch input(CUSTOMER_ADD_DATA_BI/VENDOR_ADD_DATA_BI) PASO 3: Para comenzar la implementacin debe dirigirse a la Transaccin se19. En el frame de Crear Implementacin Seleccion BAdi Clasico y en el nombre de la Badi coloque:

Nombre BAdI CUSTOMER_ADD_DATA_CS. Presione el Botn Implementar Nombre de la Implementacin (Ejemplo ZP_CUSTOMER_ADD_DATA) Enter En la siguiente pantalla, seleccione el filtro creado en el paso 2. Ej. ZS Para poder activar se debe crear una Enhancement Implementation, para ello en el nombre coloque el nombre asignado, (Ejemplo ZP_CUSTOMER_ADD_DATA) y de un texto breve explicativo. Presione ENTER y Active en la Ampliacin.

PASO 4: Repetir el procedimiento anterior para la BADI CUSTOMER_ADD_DATA. NOTA IMPORTANTE, ASEGURARSE DE:

que en el Customizing del maestro de clientes en la opcin Transferencia de campos de datos maestros propios de cliente se ha preparado la ampliacin sin modificaciones del maestro de clientes de forma que un grupo de pantallas se ha almacenado con denominacin y las etiquetas estn rotuladas que el tratamiento de sus datos propios de clientes mediante el mtodo CHECK_ADD_ON_ACTIVE del add-in empresarial CUSTOMER_ADD_DATA est activado el dilogo estndar. El codigo usado por ejemplo es IF i_screen_group = 'ZS'. (Filtro definido en el paso 2.)

e_add_on_active = 'X'. ENDIF. PASO 5: Realizar un Append Structure a la tabla estndar SAP KNA1. Segn los campos Adicionales que se quieran crear en el sistema. PASO 6: Trabajar con los mtodos segn sea la necesidad. Para este ejemplo se usaron los siguientes: Para la implementacion de la BADI CUSTOMER_ADD_DATA_CS: SET_DATA--> Mtodo que lee la data de la KNA1 y la muestra en el dynpro de la extensin. Cdigo Ejemplo. CALL FUNCTION 'ZSET_DATA_CLIE' EXPORTING i_activity = i_activity s_kna1 = s_kna1 read = 'X'

EXCEPTIONS OTHERS = 1. GET_DATA--> Mtodo que devuelve la data al standar, en este caso actualiza la data de la KNA1, si se ha creado o si se ha modificado. Cdigo Ejemplo. DATA: me_kna1 TYPE kna1. CALL FUNCTION 'ZSET_DATA_CLIE' EXPORTING read = ' ' IMPORTING e_kna1 = me_kna1 EXCEPTIONS other = 1. s_kna1-zzcliente = me_kna1-zzcliente . GET_TAXI_SCREEN --> Mtodo que muestra el Dynpro realizado para la extensin. Cdigo Ejemplo. CASE i_taxi_fcode. WHEN 'ZSD'. "Datos Generales e_program = 'SAPLZPCMCLIE'. e_screen = '1000'. e_headerscreen_layout = ' '. ENDCASE. Para la implementacion de la BADI CUSTOMER_ADD_DATA: CHECK_ALL_DATA --> Mtodo que permite realizar validaciones de la data colocada en el dynpro de la extensin. Cdigo Ejemplo. * validar que para el grupo de ZSYC esten llenos los campos DATA: w_mensaje(40). IF s_kna1-ktokd = 'ZSYC'. IF s_kna1-zzcliente EQ space. w_mensaje = 'Completar el Campo Cliente'. MESSAGE e208(00) WITH w_mensaje. ENDIF. ENDIF. CHECK_ADD_ON_ACTIVE --> Mtodo que segn el grupo de Dynpros definido en el Customizing debe estar activo para que se pueda mostrar en la transaccin. IF i_screen_group = 'ZS'. e_add_on_active = 'X'. ENDI

Вам также может понравиться