Professional Documents
Culture Documents
Página principal
Bienvenidos...
Sobre mi...
No encontré mucha información ni manuales al respecto, mucho menos en español. Pero por suerte pude encontrar un
ejemplo que me sirvió mucho. Es un post de ALV Tree orientado a objetos del conocido Alvaro Tejada Galindo
(http://atejada.blogspot.com/2007/05/alv-tree-orientado-objetos.html#links)
Por lo tanto aprovecho para hacer referencia de ese post con algunas cosas que faltaban y cambios en la sintaxis
para que active. Y además voy a describir en detalle como crear una Dynpro y el Custom Control necesarios para
correr el reporte ALV Tree.
1º) Desde la transacción SE38 creamos el reporte Z_ALV_TREE y pegamos el siguiente código:
*&———————————————————————*
*& Report Z_ALV_TREE *
*& *
*&———————————————————————*
*& *
*& *
*&———————————————————————*
REPORT Z_ALV_TREE.
*——————————————————————*
* DECLARACION DE TYPES *
*——————————————————————*
TYPES: BEGIN OF TY_SPFLI,
CARRID TYPE SPFLI-CARRID,
CONNID TYPE SPFLI-CONNID,
COUNTRYFR TYPE SPFLI-COUNTRYFR,
CITYFROM TYPE SPFLI-CITYFROM,
AIRPFROM TYPE SPFLI-AIRPFROM,
COUNTRYTO TYPE SPFLI-COUNTRYTO,
CITYTO TYPE SPFLI-CITYTO,
END OF TY_SPFLI.
*—————————————————————–*
* DECLARACION DE TABLAS INTERNAS *
*—————————————————————–*
http://danielpanaro.wordpress.com/page/2/ 26/05/2008
ABAP / SAP - Tips & Tricks Pàgina 2 de 29
*—————————————————————–*
* DECLARACION DE VARIABLES *
*—————————————————————–*
DATA: G_ALV_TREE TYPE REF TO CL_GUI_ALV_TREE,
L_HIERARCHY_HEADER TYPE TREEV_HHDR,
GS_FIELDCAT TYPE LVC_S_FCAT,
GT_FIELDCAT_TREE TYPE LVC_T_FCAT,
G_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
*—————————————————————–*
* DECLARACION DE FIELD-SYMBOLS *
*—————————————————————–*
FIELD-SYMBOLS: <HEADER> LIKE LINE OF T_HEADER,
<SPFLI> LIKE LINE OF T_SPFLI.
*—————————————————————–*
* SELECTION-SCREEN *
*—————————————————————–*
SELECTION-SCREEN BEGIN OF SCREEN 1001.
SELECTION-SCREEN END OF SCREEN 1001.
*—————————————————————–*
* START-OF-SELECTION *
*—————————————————————–*
START-OF-SELECTION.
PERFORM OBTENER_DATOS.
IF G_ALV_TREE IS INITIAL.
PERFORM INIT_TREE.
*—————————————————————–*
* FORM init_tree *
*—————————————————————–*
FORM INIT_TREE.
L_TREE_CONTAINER_NAME = ‘TREE_CONTROL’.
PERFORM FILL_CATALOG_TREE.
PERFORM BUILD_HIERARCHY_HEADER CHANGING L_HIERARCHY_HEADER.
PERFORM CREATE_HIERARCHY.
ENDFORM.
http://danielpanaro.wordpress.com/page/2/ 26/05/2008
ABAP / SAP - Tips & Tricks Pàgina 3 de 29
*—————————————————————–*
* FORM FILL_CATALOG_TREE *
*—————————————————————–*
FORM FILL_CATALOG_TREE.
CLEAR GS_FIELDCAT.
GS_FIELDCAT-COL_POS = 1.
GS_FIELDCAT-REPTEXT = ‘Flight’.
GS_FIELDCAT-SCRTEXT_S = ‘Flight’.
GS_FIELDCAT-FIELDNAME = ‘CONNID’.
GS_FIELDCAT-TABNAME = ‘T_SPFLI’.
APPEND GS_FIELDCAT TO GT_FIELDCAT_TREE.
CLEAR GS_FIELDCAT.
GS_FIELDCAT-COL_POS = 2.
GS_FIELDCAT-REPTEXT = ‘Country’.
GS_FIELDCAT-SCRTEXT_S = ‘Country’.
GS_FIELDCAT-FIELDNAME = ‘COUNTRYFR’.
GS_FIELDCAT-TABNAME = ‘T_SPFLI’.
APPEND GS_FIELDCAT TO GT_FIELDCAT_TREE.
CLEAR GS_FIELDCAT.
GS_FIELDCAT-COL_POS = 3.
GS_FIELDCAT-REPTEXT = ‘Dep.City’.
GS_FIELDCAT-SCRTEXT_S = ‘Dep.City’.
GS_FIELDCAT-FIELDNAME = ‘CITYFROM’.
GS_FIELDCAT-TABNAME = ‘T_SPFLI’.
GS_FIELDCAT-OUTPUTLEN = ‘15′.
APPEND GS_FIELDCAT TO GT_FIELDCAT_TREE.
CLEAR GS_FIELDCAT.
GS_FIELDCAT-COL_POS = 4.
GS_FIELDCAT-REPTEXT = ‘Dep.Airp’.
GS_FIELDCAT-SCRTEXT_S = ‘Dep.Airp’.
GS_FIELDCAT-FIELDNAME = ‘AIRPFROM’.
GS_FIELDCAT-TABNAME = ‘T_SPFLI’.
GS_FIELDCAT-OUTPUTLEN = ‘20′.
APPEND GS_FIELDCAT TO GT_FIELDCAT_TREE.
CLEAR GS_FIELDCAT.
GS_FIELDCAT-COL_POS = 5.
GS_FIELDCAT-REPTEXT = ‘Country’.
GS_FIELDCAT-SCRTEXT_S = ‘Country’.
GS_FIELDCAT-FIELDNAME = ‘COUNTRYTO’.
GS_FIELDCAT-TABNAME = ‘T_SPFLI’.
GS_FIELDCAT-OUTPUTLEN = ‘15′.
APPEND GS_FIELDCAT TO GT_FIELDCAT_TREE.
CLEAR GS_FIELDCAT.
GS_FIELDCAT-COL_POS = 6.
GS_FIELDCAT-REPTEXT = ‘Arr.City’.
GS_FIELDCAT-SCRTEXT_S = ‘Arr.City’.
GS_FIELDCAT-FIELDNAME = ‘CITYTO’.
GS_FIELDCAT-TABNAME = ‘T_SPFLI’.
GS_FIELDCAT-OUTPUTLEN = ‘20′.
APPEND GS_FIELDCAT TO GT_FIELDCAT_TREE.
ENDFORM.
*———————————————————————*
* FORM build_hierarchy_header *
*———————————————————————*
FORM BUILD_HIERARCHY_HEADER CHANGING
P_HIERARCHY_HEADER TYPE TREEV_HHDR.
CLEAR P_HIERARCHY_HEADER.
P_HIERARCHY_HEADER-HEADING = ‘Airline carrier’(300).
P_HIERARCHY_HEADER-WIDTH = 18.
P_HIERARCHY_HEADER-WIDTH_PIX = ‘ ‘.
ENDFORM.
*———————————————————————*
* FORM create_hierarchy *
*———————————————————————*
FORM CREATE_HIERARCHY.
CLEAR L_ROOT_KEY.
http://danielpanaro.wordpress.com/page/2/ 26/05/2008
ABAP / SAP - Tips & Tricks Pàgina 4 de 29
ENDFORM.
*———————————————————————*
* FORM ADD_NODE *
*———————————————————————*
FORM ADD_NODE USING L_NAME L_ROOT_KEY
CHANGING L_NEXT_KEY.
L_NODE_TEXT = L_NAME.
CALL METHOD G_ALV_TREE->ADD_NODE
EXPORTING
I_RELAT_NODE_KEY = L_ROOT_KEY
I_RELATIONSHIP = CL_GUI_COLUMN_TREE=>RELAT_LAST_CHILD
I_NODE_TEXT = L_NODE_TEXT
IS_OUTTAB_LINE = LS_TREE
IMPORTING
E_NEW_NODE_KEY = L_NEXT_KEY.
ENDFORM.
*———————————————————————*
* FORM ADD_LEAF *
*———————————————————————*
FORM ADD_LEAF USING L_TREE TYPE TY_SPFLI
L_NEXT_KEY
CHANGING L_LAST_KEY.
ENDFORM.
*———————————————————————*
* FORM OBTENER_DATOS *
*———————————————————————*
FORM OBTENER_DATOS.
IF SY-SUBRC EQ 0.
LOOP AT T_SPFLI ASSIGNING <SPFLI>.
MOVE <SPFLI>-CARRID TO T_HEADER-CARRID.
APPEND T_HEADER.
ENDLOOP.
SORT T_HEADER.
DELETE ADJACENT DUPLICATES FROM T_HEADER.
ENDIF.
ENDFORM.
http://danielpanaro.wordpress.com/page/2/ 26/05/2008
ABAP / SAP - Tips & Tricks Pàgina 5 de 29
Ingresamos como número de dynpro 100. Ponemos la descripción que queramos y luego de activar apretamos el
botón “Dispos.“
Simplemente falta guardar, activar… cerrar el Screen Painter. Y por último en la transacción SE80 doble click en
la carpeta Z_ALV_TREE y ejecutamos.
Cabe aclarar que este ejemplo trabaja con la tabla SPFLI que se usa comúnmente en los ejemplos.
Technorati tags: sdn blogger
Comentarios : 10 Comentarios »
Tags : ABAP, abapers, ALV, código, dynpro, objetos, Painter, Reportes, reporting, SAP, Screen, SE80, tips, tree, tricks
Categorías : ALV
Con el siguiente reporte vamos a poder mostrar el contenido de un IDOC y luego guardarlo en un fichero.
Simplemente corremos el programa con el número de IDOC y luego que se liste el contenido, podemos grabar un fichero
desde el menú Lista —> Grabar/Enviar —> Fichero…
TYPE-POOLS : LEDID.
http://danielpanaro.wordpress.com/page/2/ 26/05/2008
ABAP / SAP - Tips & Tricks Pàgina 6 de 29
START-OF-SELECTION.
PERFORM READ_IDOC.
PERFORM PROCESS_IDOC.
END-OF-SELECTION.
*&———————————————————————*
*& Form read_idoc
*&———————————————————————*
* text
*———————————————————————-*
FORM READ_IDOC.
CALL FUNCTION ‘IDOC_READ_COMPLETELY’
EXPORTING
DOCUMENT_NUMBER = DOCNUM
IMPORTING
IDOC_CONTROL = IDOC_CONTROL
NUMBER_OF_DATA_RECORDS = NUMBER_OF_DATA_RECORDS
NUMBER_OF_STATUS_RECORDS = NUMBER_OF_STATUS_RECORDS
TABLES
INT_EDIDS = INT_EDIDS
INT_EDIDD = INT_EDIDD
EXCEPTIONS
DOCUMENT_NOT_EXIST =1
DOCUMENT_NUMBER_INVALID = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. “” read_idoc
*&———————————————————————*
*& Form process_idoc
*&———————————————————————*
* text
*———————————————————————-*
FORM PROCESS_IDOC.
PERFORM READ_IDOC_STRUCTURE.
PERFORM DISPLAY_DATA_RECORDS.
ENDFORM. “” process_idoc
*&———————————————————————*
*& Form display_data_records
*&———————————————————————*
* text
*———————————————————————-*
FORM DISPLAY_DATA_RECORDS.
http://danielpanaro.wordpress.com/page/2/ 26/05/2008
ABAP / SAP - Tips & Tricks Pàgina 7 de 29
SEGMENT_STRUCTURE_UNKNOWN = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE ‘I’ NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
PREV_SEGNAME = INT_EDIDD-SEGNAM.
ENDIF.
READ TABLE IDOC_STRUCT INTO IDOC_STRUCT_WA WITH KEY
SEGMENT_TYPE = INT_EDIDD-SEGNAM.
IF SY-SUBRC = 0.
IF IDOC_STRUCT_WA-SYNTAX_ATTRIB-MUSTFL = ‘X’.
TMP_STR = ‘Mandatory’. “”Mandatory
ELSE.
TMP_STR = ‘Optional’. “”Optional
ENDIF.
IF IDOC_STRUCT_WA-SEGMENT_TYPE_ATTRIB-QUALIFIER = ‘X’.
TMP_STR3 = ‘Qualified’.
ELSE.
TMP_STR3 = ‘Non-Qualified’.
ENDIF.
SHIFT IDOC_STRUCT_WA-SYNTAX_ATTRIB-OCCMAX
LEFT DELETING LEADING ‘0′.
MOVE SEG_REPEATS TO TMP_STR2.
CONDENSE: IDOC_STRUCT_WA-SYNTAX_ATTRIB-OCCMAX, TMP_STR2.
CONCATENATE TMP_STR2 ‘of’ IDOC_STRUCT_WA-SYNTAX_ATTRIB-OCCMAX
INTO TMP_STR2 SEPARATED BY SPACE.
WRITE :/ IDOC_STRUCT_WA-SEGMENT_TYPE,
TMP_STR,
TMP_STR3,
TMP_STR2,
IDOC_STRUCT_WA-SYNTAX_ATTRIB-HLEVEL,
IDOC_STRUCT_WA-SEGMENT_TYPE_ATTRIB-PLAST,
IDOC_STRUCT_WA-SEGMENT_TYPE_ATTRIB-DESCRP.
ENDIF.
SORT PT_FIELDS2 BY FIELD_POS.
BYTE_FIRST = 0.
LOOP AT PT_FIELDS2.
CLEAR: FIELD_VAL.
BYTE_LAST = PT_FIELDS2-EXTLEN.
WRITE INT_EDIDD-SDATA+BYTE_FIRST(BYTE_LAST) TO
FIELD_VAL LEFT-JUSTIFIED.
SHIFT PT_FIELDS2-EXTLEN LEFT DELETING LEADING ‘0′.
SHIFT PT_FIELDS2-BYTE_FIRST LEFT DELETING LEADING ‘0′.
SHIFT PT_FIELDS2-BYTE_LAST LEFT DELETING LEADING ‘0′.
WRITE:/ ‘ ‘, PT_FIELDS2-FIELDNAME,
PT_FIELDS2-DATATYPE,
PT_FIELDS2-EXTLEN,
PT_FIELDS2-BYTE_FIRST ,
PT_FIELDS2-BYTE_LAST,
PT_FIELDS2-DESCRP,
FIELD_VAL.
READ TABLE PT_FVALUES2 WITH KEY FIELDNAME = PT_FIELDS2-FIELDNAME
FLDVALUE_L = FIELD_VAL.
ADD BYTE_LAST TO BYTE_FIRST.
IF SY-SUBRC = 0.
WRITE : PT_FVALUES2-DESCRP.
ELSE.
CLEAR PT_FVALUES2-DESCRP.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDFORM. “” display_data_records
*&———————————————————————*
*& Form read_idoc_structure
*&———————————————————————*
* text
*———————————————————————-*
FORM READ_IDOC_STRUCTURE.
DATA: IDOCTYPE TYPE LEDID_IDOCTYPE.
http://danielpanaro.wordpress.com/page/2/ 26/05/2008
ABAP / SAP - Tips & Tricks Pàgina 8 de 29
ENDFORM. “” read_idoc_structure
Para poder leer los campos de texto se usa la función read_text_inline. Esto generalmente lo usamos en formularios para
mostrar textos de cabecera o de posición por ejemplo.
Para saber como llenar los campos, vamos al lugar donde cargamos el texto:
http://danielpanaro.wordpress.com/page/2/ 26/05/2008
ABAP / SAP - Tips & Tricks Pàgina 9 de 29
Calculadora en un POP-UP
24 11 2007
El siguiente código nos generará una calculadora en una ventana (POP-UP). La función ‘FITRV_CALCULATOR’
nos devolverá en la variable X_VALUE el resultado del cálculo que haya hecho el usuario para luego utilizarlo
como queramos en nuestro programa.
*——————————————–
* Calculadora para usuarios
*——————————————–
REPORT ZCALCULADORA.
Comentarios : 2 Comentarios »
Tags : ABAP, abapers, calculadora, calculator, código, code, FITRV_CALCULATOR, función, FUNCTION, POP, programa, programm, report,
reporte, SAP, tips, tricks, UP
Categorías : Reportes
http://danielpanaro.wordpress.com/page/2/ 26/05/2008
ABAP / SAP - Tips & Tricks Pàgina 10 de 29
23 11 2007
El reporte RSRSCAN1 nos va a servir para buscar un string (palabras, sentencias, mensajes, etc) en uno o más
programas. Además nos listará la cantidad de ocurrencias.
Con la siguiente función vamos a poder habilitar el matchcode para que abra un browser file (explorador de
directorios). Esto nos va a servir para hacer upload y download de archivos.
Usando el módulo de función SAP_CONVERT_TO_CSV_FORMAT vamos a poder convertir nuestra tabla interna en
una tabla con formato de separación por coma. Para luego poder generar un archivo.
http://danielpanaro.wordpress.com/page/2/ 26/05/2008
ABAP / SAP - Tips & Tricks Pàgina 11 de 29
Comentarios : 1 Comentario »
Tags : ABAP, archivo, bajar, código, coma, comma, CSV, download, Funciones, FUNCTION, GUI_DOWNLOAD, SAP,
SAP_CONVERT_TO_CSV_FORMAT, separado, separated, tips, tricks, truxs
Categorías : Funciones
A la siguiente función vamos a poder pasarle en una variable un monto (importe) y la misma nos devolverá en una
estructura el importe escrito en letras (el monto en texto).
Esto suele ser muy útil sobre todo en formularios donde debemos dejar explícitos los precios en letras
http://danielpanaro.wordpress.com/page/2/ 26/05/2008
ABAP / SAP - Tips & Tricks Pàgina 12 de 29
Voy a explicar cómo se transporta una orden de un ambiente a otro. En el ejemplo voy a mostrar como pasar una
orden de DEV (desarrollo) a QUA (calidad o test).
El primer paso es ir a la transacción SE10 (transport organizer). Llenamos el campo Usuario con el nombre de usuario
con el cual creamos la orden que queremos transportar y seleccionamos la opción Modificable.
En la siguiente pantalla nos posicionamos en la orden en cuestión:
Seleccionamos primero la tarea (1º) y clickeamos en el botón ; luego seleccionamos la orden (2º) y volvemos a
clickear el botón .
Nuestra orden ya está liberada y sólo faltaría terminar de pasarla. Generalmente en nuestros clientes suele existir
un job corriendo de fondo que se encarga de terminar de pasar las órdenes.
En caso de que este Job no exista tenemos que ir a la transacción STMS y hacer lo siguiente:
2º_ A continuación vamos al final de la tabla y apretamos el botón hasta que aparezca nuestra orden. Acto seguido
marcamos la orden y clickeamos en el botón .
3º_ Nos saldrá una ventana donde completamos el mandante de destino. Y en la solapa Fecha y Opciones marcamos como
se muestra en las imágenes.
Nos aparecerá un POP UP preguntando si deseamos Iniciar el import, y obviamente elegimos que SÍ.
4º_ Terminado lo anterior, nuestro cuarto y último paso es actualizar nuestra orden hasta que quede con el tilde
http://danielpanaro.wordpress.com/page/2/ 26/05/2008
ABAP / SAP - Tips & Tricks Pàgina 13 de 29
verde.
Comentarios : 2 Comentarios »
Tags : ABAP, abapers, ambiente, calidad, desarrollo, DEV, orden, organizer, QUA, SAP, SE10, STMS, tarea, test, transacción, transport,
transporte
Categorías : Basis, Trucos
Siempre es difícil poder acordarse o conocer las rutas de customizing de la transacción SPRO. Por lo tanto, es
bueno tener una lista de transacciones para acceder directamente a las parametrizaciones.
Con una simple búsqueda obtendremos el Código transacción y la Descripción breve de las parametrizaciones
como:
Precio de Venta, Esquemas y Clases de mensaje, pedidos, entregas, facturas, etc…
Esto es muy sencillo, vamos a la transacción SE93 (acá se crean las transacciones para asociar a los programas).
Completamos el campo “Código transacción” con los caracteres V/* y apretamos F4.
Yo considero muy útiles los códigos V/30 y V/34 que son las customizaciones de las Clases de Mensaje. Ya que
podemos ver los programas impresores y los formularios que tiene asociada una clase de mensaje.
A la función le pasamos como parámetros una fecha de entrada (inicial) y un número de meses. La función nos
devolverá una fecha que será el resultado de agregar el número de meses a la fecha inicial.
*——————————————————————————-
*LV_DATE_ENT : Fecha de entrada a la que le calculo los meses
http://danielpanaro.wordpress.com/page/2/ 26/05/2008
ABAP / SAP - Tips & Tricks Pàgina 14 de 29
Con la transacción DWDM accedemos al Centro de Presentaciones Enjoy. Allí podremos ver distintos ejemplos para
agregar en nuestro programas.
Encontraremos diversos desarrollos (Controles, elementos de interfase de usuario, integración Office, etc).
A la izquierda de la pantalla veremos el listado de demos y haciendo doble click sobre cualquiera de ellos ejecutaremos el
ejemplo. Luego, apretando el botón Cód.fte. nos llevará al código fuente del demo.
Entre uno de los tantos ejemplos, nos encontraremos con un navegador web:
http://danielpanaro.wordpress.com/page/2/ 26/05/2008
ABAP / SAP - Tips & Tricks Pàgina 15 de 29
Es común que para trabajar con nuestros clientes utilicemos una VPN (Red privada virtual) para conectarnos.
Muchas veces cuando no hay actividad, la VPN se cae. Para evitarlo podemos dejar corriendo el siguiente reporte en otro
modo.
REPORT zvpn.
l_horaini = sy-uzeit.
DO.
l_difhora = sy-uzeit - l_horaini.
WRITE l_difhora TO l_tiempo.
WRITE sy-uzeit TO l_hora.
WRITE sy-index TO l_texto(5).
concatenate l_texto(5) ‘Hora:’ l_hora ‘Tiempo transcurrido’ l_tiempo
into l_texto separated by space.
CALL FUNCTION ‘SAPGUI_PROGRESS_INDICATOR’
EXPORTING
text = l_texto
EXCEPTIONS
OTHERS = 1.
WAIT UP TO 30 SECONDS.
COMMIT WORK AND WAIT.
ENDDO.
Comentarios : 2 Comentarios »
Tags : ABAP, abapers, abierta, activa, código, programa, reporte, SAP, tips, tricks, VPN
Categorías : Reportes
http://danielpanaro.wordpress.com/page/2/ 26/05/2008
ABAP / SAP - Tips & Tricks Pàgina 16 de 29
El siguiente documento explica como generar IDOCs de Orden de Compra (Purchase order) con “Punteros de
Modificación” (Changer Pointers).
Con las siguientes configuraciones una vez creada una orden de compra desde la transacción ME21N se generará un
archivo de salida (OUTBOUND) de formato XML con el contenido de la orden de compra (IDOC).
Primero un poco de teoría para entender qué es un IDOC y para qué se utilizan:
Los IDocs permiten intercambiar información entre distintos sistemas. Se lo puede ver como un archivo de texto plano,
con registros. Un Idoc es por ejemplo los datos de un proveedor, o una oferta.
Contiene una cabecera y posiciones, pero todos los datos pertenecen a la misma entidad. O sea, para transmitir datos de
más de un proveedor, haría falta más de un Idoc.
Los IDocs se crean y luego se envían. Este envío se realiza en un segundo paso; o sea que podría haber IDocs que todavía
no se hayan enviado.
Un registro de Control.
El registro de control contiene toda la información administrativa del IDoc, como el origen y el destinatario, y qué tipo de
IDoc es. Sería algo así como el sobre que acompaña a cualquier carta.
Este registro es muy importante ya que es necesario para saber, entre otras cosas, cuál será el destinatario del IDoc. La
tabla SAP donde se guardan es la EDIDC.
Los registros de datos se guardan en la tabla EDID4 en un campo de 1000 caracteres. Para saber interpretar esa cadena, el
registro cuenta con un campo que informa cuál es la estructura con la que se deben interpretar los datos.
Transacción: WE30
http://danielpanaro.wordpress.com/page/2/ 26/05/2008
ABAP / SAP - Tips & Tricks Pàgina 17 de 29
Transacción: WE81
Tenemos que encontrar esto.
Transacción: WE82
Controlamos que figure la siguiente línea:
Definición de puerta:
Los Idocs pueden ser enviados y recibidos a través de diferentes medios. Con el objetivo de no acoplar la definición de las
características del medio con la aplicación que lo está utilizando, el medio es accedido vía puertos. En otras palabras, un
puerto es un nombre lógico para un dispositivo de entrada/salida. Los programas se comunican con un puerto a través de
una interfaz estándar.
En vez de definir el medio de comunicación directamente en el Acuerdo de Interlocutor (Partner Profile), se asigna
un número de puerto, y es este puerto el que designa realmente al medio. Esto permite definir las características de
los puertos individualmente y usar un puerto en múltiples Acuerdos de Interlocutores. Los cambios en un puerto se
reflejarán automáticamente en todos los acuerdos que lo estén utilizando.
Al menos un puerto debe existir para cada sistema externo.
RFC Transaccional
Se usa para escenarios de distribución ALE. El nombre del puerto se puede definir a mano o dejar que SAP lo elija.
Además del puerto, hay que definir el destino RFC.
http://danielpanaro.wordpress.com/page/2/ 26/05/2008
ABAP / SAP - Tips & Tricks Pàgina 18 de 29
Archivo XML Envía documentos en formato XML. Para utilizar este tipo de puerto, es necesario definir el nombre del
puerto, el formato del XML, y el nombre del archivo a generar. Al igual que con el tipo de puerto Fichero, se puede
invocar a la función EDI_PATH_CREATE_CLIENT_DOCNUM para que genere los nombres del archivo en forma
dinámica.
XML-HTTP
En vez de definir el nombre del archivo XML, se especifica un destino RFC.
Para nuestro ejemplo vamos a elegir como salida un Archivo XML. Por lo cual invocaremos a la función
EDI_PATH_CREATE_CLIENT_DOCNUM para que genere los nombres del archivo en forma dinámica.
Transacción: WE21
Dentro de la carpeta Fichero XML debemos crear y configurar nuestra Puerta de salida de la siguiente manera.
El Directorio físico lo podemos elegir a nuestro gusto, tiene que ser un directorio del servidor. Los directorios
disponibles los podemos visualizar desde la transacción AL11.
Transacción: BD54
- Tipo de Idoc y Tipo de mensaje, los cuales son el identificador clave del acuerdo de interlocutor.
- Nombre del Emisor y Receptor que intercambiarán los Idocs para el tipo de Idoc y mensaje.
En el interlocutor se definen datos específicos de cada mensaje a transmitir en los parámetros de salida o entrada según
corresponda.
http://danielpanaro.wordpress.com/page/2/ 26/05/2008
ABAP / SAP - Tips & Tricks Pàgina 19 de 29
Transacción: WE20
Dentro de la carpeta Tp.interlocutor EDI Proveedor/Acreedor creamos lo siguiente:
El “Nº interl.EDI” debe llevar el mismo nombre del “Sistema Lógico” que creamos en el paso anterior.
El “Tp.int.EDI” tiene que ser LI (Proveedor/Acreedor).
Luego en la tabla “Parámetros salida” agregamos en Tipo mensaje: ORDERS.
A continuación hacemos doble click sobre ORDERS y llenamos como muestra esta imagen:
En la solapa “Opciones salida”, ponemos la Puerta destino que definimos anteriormente y completamos los campos
marcados con línea roja.
http://danielpanaro.wordpress.com/page/2/ 26/05/2008
ABAP / SAP - Tips & Tricks Pàgina 20 de 29
Transacción: BD61
Activamos nuestro puntero de modificación:
Transacción: BD50
Agregamos una entrada para el mensaje deseado, y la marcamos como activa.
Interlocutor: ORDERIDOC (nombre del interlocutor que creamos en la definición de sistemas lógicos)
Con todo esto, nuestro IDOC ya tiene que estar creado!!!. Para verificar vamos a la
Transacción: WE02
Al apretar el botón ejecutar nos listará nuestro IDOC:
http://danielpanaro.wordpress.com/page/2/ 26/05/2008
ABAP / SAP - Tips & Tricks Pàgina 21 de 29
La cantidad de registros de datos puede variar según la orden que hayamos creado.
Sólo nos resta ir a buscar nuestro IDOC en formato XML en el directorio físico que hayamos definido en la parte de
“Definición de puerta”
Comentarios : 3 Comentarios »
Tags : ABAP, abapers, BD50, BD54, BD61, código, changer, compra, EDID4, EDIDC, EDIDS, IDOC, IDOCs, IDOC_OUTPUT_ORDERS,
ME10, ME21N, modificación, NEU, OC, orden, order, ORDERS05, OUTBOUND, PO, pointers, punteros, purchase, SAP, tips, tricks, WE02,
WE20, WE21, WE30, WE81, WE82, XML
Categorías : IDOCs
Si deseamos mostrar un campo de entrada como password o contraseña. Es decir que aparezcan asteriscos (****).
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF SCREEN-NAME EQ ‘P_PASSWD’.
SCREEN-INVISIBLE = ‘1′.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
END-OF-SELECTION.
El resultado es:
Algunas veces nos piden que hagamos una copia Z de un programa estándar para realizar distintos cambios. Uno de
esos cambios puede ser que saquemos SELECT-OPTIONS (opciones de selección) y/o PARAMETERS (parámetros) de
http://danielpanaro.wordpress.com/page/2/ 26/05/2008
ABAP / SAP - Tips & Tricks Pàgina 22 de 29
la pantalla de selección.
En principio parece algo sencillo pero es posible que los filtros que debemos eliminar no estén declarados en nuestra
copia Z. Esto se debe a que seguramente fueron definidos en programas de control o base de datos lógicas:
Primero tenemos que saber el nombre del campo (Campo dynpro). Para eso nos paramos sobre el campo, apretamos F1
y observamos los “datos técnicos“:
Y por último vamos a nuestro programa Z y agregamos el siguiente código antes del START-OF-SELECTION:
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF SCREEN-NAME EQ ‘BR_BUKRS-LOW‘ OR
SCREEN-NAME EQ ‘BR_BUKRS-HIGH‘ OR
SCREEN-NAME EQ ‘%_BR_BUKRS_%_APP_%-TEXT‘ OR
SCREEN-NAME EQ ‘%_BR_BUKRS_%_APP_%-OPTI_PUSH‘ OR
SCREEN-NAME EQ ‘%_BR_BUKRS_%_APP_%-VALU_PUSH‘.
SCREEN-ACTIVE = 0.
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
Una field exit es como una user exit que se utiliza para relacionar un campo determinado de una dynpro (pantalla) con un
programa determinado.
A una FIELD EXIT se le llama también EXIT DE CAMPO. Se hace a nivel del elemento de datos. En ella puedes poner
tus comprobaciones para un campo en el programa que quieras. Puedes tener varias field exit para un mismo campo en
distintas pantallas.
http://danielpanaro.wordpress.com/page/2/ 26/05/2008
ABAP / SAP - Tips & Tricks Pàgina 23 de 29
Una FIELD EXIT es una función que tiene la particularidad de que sólo tiene un parámetro de entrada INPUT y uno de
salida OUTPUT.
A priori no puedes conocer ningún dato más, aunque siempre puedes utilizar otras field exits para guardar el contenido de
otros campos en variables globales al grupo de función, o utilizar la función DYNP_VALUES_READ para leer valores de
otros campos de la misma pantalla.
BREAK-POINT
CALL SCREEN
CALL DIALOG
CALL TRANSACTION
SUBMIT
COMMIT WORK
ROLLBACK WORK
MESSAGE I
NOTA: Para poder activar los Field Exits debemos tener el parámetro
abap/fieldexit = YES seteado en el servidor (Transacción RZ10).
A continuación voy a mostrar un ejemplo completo de cómo crear una field exit para el campo “Clave de
periodificación” de la solapa Control de la transacción CJ20N. Donde validaremos que ese campo no este vacío.
1º) Lo primero que hay que hacer es crear un grupo de función. Para eso vamos a la transacción SE80 y creamos un
nuevo grupo de función, por ejemplo: Z_ABGR_SCHL
2º) Luego debemos crear nuestra función FIELD EXIT desde la transacción SE37 con el nombre FIELD_EXIT_* ( * =
nombre que queramos ) y asociándole el grupo de función que creamos en el paso anterior. Por ejemplo:
Con esto ya vamos a tener nuestra función creada con el parámetro INPUT creado en la solapa Import y con el parámetro
OUTPUT en la solapa Export.
http://danielpanaro.wordpress.com/page/2/ 26/05/2008
ABAP / SAP - Tips & Tricks Pàgina 24 de 29
Para terminar este paso sólo resta poner nuestro código en la solapa Cód.fte. y ACTIVAR.
Como en este caso sólo queremos validar que nuestro campo no quede vacío, el código sería así:
IF INPUT IS INITIAL.
ENDIF.
3º) En este paso volvemos a la transacción SE80 para ACTIVAR y verificar que aparezca la función que creamos:
4º) El último paso es crear nuestra FIELD EXIT. Esto es muy sencillo, simplemente ejecutamos el reporte RSMODPRF
sin parámetros desde la transacción SE38.
Allí se listarán todas las field exits existentes. Para crear la nuestra clickeamos en el menú “Exit campo” –> “Crear“ e
ingresamos nuestro elemento de datos, en este caso ABGR_SCHL. Veremos que nuestra field exit se agrega a la
lista.
Finalmente, seleccionamos la field exit que acabamos de crear y clickeamos en el botón “Asignar prog./dynpro“.
Debemos llenar los campos con el nombre del programa y el número de dynpro que queremos que nuestra field exit este
asociada (Ver la primera imagen - Datos dynpro):
Como vemos el Status de la field es INACTIVO. Por lo tanto nos resta simplemente volver al menú “Exit campo” y
clickear en la opción Activar
Con esto ya tenemos nuestra field exit creada y podemos verificar en la transacción CJ20N que si NO llenamos el
campo “Clave de periodificación” nos saldrá el mensaje de error que pusimos en el paso 2º
Comentarios : 2 Comentarios »
Tags : ABAP, abapers, cj20n, creación, crear, dato, dynpro, DYNP_VALUES_READ, elemento, exit, field, fieldexit, field_exit, input, output,
RSMODPRF, rz10, SAP, SE37, SE80, tips, tricks, user
Categorías : Field Exit
http://danielpanaro.wordpress.com/page/2/ 26/05/2008
ABAP / SAP - Tips & Tricks Pàgina 25 de 29
WS_EXECUTE es una función que nos permite ejecutar cualquier programa instalado en nuestra computadora
desde SAP. Cabe aclarar que aquel programa que queramos correr debe permitir parámetros MS-DOS.
En el siguiente ejemplo voy a mostrar como zippear (comprimir) dos archivos desde SAP. Como resultado obtendremos un
archivo WinZip que contendrá dos archivos de texto.
Comprimiremos el archivo 1.txt y el archivo 2.txt, y el resultado será el archivo destino.zip.
C:1.txt
C:2.txt
C:destino.zip
Código:
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Comentarios : 1 Comentario »
Tags : ABAP, abapers, código, comandos, comprimir, correr, DOS, ejecutar, externo, función, MS-DOS, programa, SAP, tips, tricks, WinZip,
WS_EXECUTE, zippear
Categorías : Funciones
El siguiente reporte muestra un listado de las USER EXITS de una transacción determinada. Sólo basta ingresar el
nombre de la transacción en la pantalla principal, y como resultado mostrará tanto el nombre como la descripción
de la USER EXIT.
*&———————————————————————*
*& Report ZUSER_EXIT
http://danielpanaro.wordpress.com/page/2/ 26/05/2008
ABAP / SAP - Tips & Tricks Pàgina 26 de 29
*&
*&———————————————————————*
*&
*&
*&———————————————————————*
REPORT ZUSER_EXIT.
tables : tstc, tadir, modsapt, modact, trdir, tfdir, enlfdir.
tables : tstct.
data : jtab like tadir occurs 0 with header line.
data : field1(30).
data : v_devclass like tadir-devclass.
parameters : p_tcode like tstc-tcode obligatory.
http://danielpanaro.wordpress.com/page/2/ 26/05/2008
ABAP / SAP - Tips & Tricks Pàgina 27 de 29
at line-selection.
get cursor field field1.
check field1(4) eq ‘JTAB’.
set parameter id ‘MON’ field sy-lisel+1(10).
call transaction ‘SMOD’ and skip first screen.
Technorati tags: sdn blogger
Comentarios : 1 Comentario »
Tags : ABAP, abapers, código, exit, programa, reporte, SAP, tips, transacción, tricks, user, USER-EXIT, USER_EXIT, ZUSER_EXIT
Categorías : Reportes
Generalmente entre distintas computadoras el separador decimal de un importe puede variar. Puede ser un punto o una
coma, por ejemplo 100.60 o bien 100,60 .
Como no sabemos qué configuración tiene el sistema donde se va a ejecutar nuestro programa, con lo siguiente vamos a
poder poner el separador decimal correcto automáticamente.
Comentarios : 2 Comentarios »
Tags : ABAP, abapers, comas, dcpfm, decimal, formato, importe, SAP, separador, tips, tricks, usr01, usr01-dcpfm
Categorías : Códigos ABAP
Buscar
Mi Perfil:
http://danielpanaro.wordpress.com/page/2/ 26/05/2008
ABAP / SAP - Tips & Tricks Pàgina 28 de 29
Enviarme un E-Mail.
Suscribirse a RSS
Location of visitors
Páginas:
Bienvenidos…
Sobre mi…
Categorías:
ALV (3)
Bases de datos lógica - HR (1)
Basis (6)
Códigos ABAP (13)
Reportes (5)
Field Exit (1)
Funciones (9)
IDOCs (2)
Matchcodes (3)
Módulo PP/PS (1)
Módulo SM (1)
SapScripts (3)
Transacciones (9)
Trucos (9)
http://danielpanaro.wordpress.com/page/2/ 26/05/2008
ABAP / SAP - Tips & Tricks Pàgina 29 de 29
Comentarios Recientes:
Daniel Panaro en Bases de datos lógica -…
Daniel Panaro en AL11 - Directorios SAP (Archiv…
me caes mal en Bases de datos lógica -…
Luis en AL11 - Directorios SAP (Archiv…
Encabezado (Header) … en Transacción OAER - Obje…
Daniel Panaro en ALV Tree Orientado a Obje…
Blogroll
..:: RAMGV::.. -[ Sap Stuff ]-
BitacoraSapAbap
El blog tecnológico de Blag.
MUNDOSAP.COM
Programación ABAP/4
SAP COMMUNITY NETWORK
SAP4 - SAP ABAP en castellano
Weblogs sobre SAP
Etiquetas:
ABAP abapers activación ALV ambiente archivos búsquedas bajar Basis cálculo código completar datos download fórmula fecha form formulario
formularios función Funciones FUNCTION image imagen logo modificar orden programa programm registros report reporte rutinas SAP sapscript
SapScripts tabla texto tips transacción Transacciones transaction tricks Trucos usuarios
http://danielpanaro.wordpress.com/page/2/ 26/05/2008