Agregar íconos en pantalla de selección

21 06 2016

En nuestra pantalla de selección podemos agregar íconos al costado de cada parámetro:
Dibujo

 

Para esto simplemente hay que agregar una “combinación de caracteres” (código ID) al comienzo de los textos de selección:
Dibujo
Ruta: Goto –> Text Elements –> Selection texts

 

Cada ícono tiene su propia combinación de caracteres:
Dibujo

 

Y con este programa podemos conocer todos los íconos y su respectivo ID:
DATA :
gs_icon TYPE ICON,
gt_icon TYPE TABLE OF ICON.
SELECT * FROM icon INTO TABLE gt_icon.
LOOP AT gt_icon INTO gs_icon.
WRITE :/
gs_icon-name,
33 '@',
34 gs_icon-id+1(2),
36 '@',
40 gs_icon-id.
ENDLOOP.

 


Technorati tags:

Anuncios




Matchcode Browser Server (buscador de directorios del servidor)

13 08 2008

Con la siguiente función vamos a poder habilitar el matchcode para que abra un browser file (explorador de directorios) del servidor. Esto nos va a servir para hacer upload y download de archivos.

Acá el código que debemos ingresar en nuestros programas:

* Constantes locales
  CONSTANTS:lc_p TYPE c VALUE ‘P’,
                      lc_a TYPE dxfields-location VALUE ‘A’.

* Variables locales
  DATA: li_host TYPE STANDARD TABLE OF msxxlist,
             lw_host TYPE msxxlist,
             lv_path TYPE dxfields-longpath,
             lv_ubicacion(1) TYPE c,
             lv_abend  TYPE c.

*En P_FILE va a quedar guardada la ruta del archivo del servidor
PARAMETERS: P_FILE LIKE RLGRAP-FILENAME.

*- Machcode busqueda de archivo del servidor
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

*-Nombre del servidor
  CALL FUNCTION ‘RFC_GET_LOCAL_SERVERS’
    TABLES
      hosts         = li_host
    EXCEPTIONS
      not_available = 1
      OTHERS        = 2.

  IF sy-subrc IS INITIAL.

*-Nombre del servidor a la estructura
    CLEAR lw_host.
    READ TABLE li_host
               INTO lw_host
               INDEX 1.

*-Obtengo el path
    CALL FUNCTION ‘F4_DXFILENAME_TOPRECURSION’
      EXPORTING
        i_location_flag = lc_a
        i_server        = lw_host-name
      IMPORTING
        o_location_flag = lv_ubicacion
        o_path          = lv_path
        abend_flag      = lv_abend
      EXCEPTIONS
        rfc_error       = 1
        error_with_gui  = 2
        OTHERS          = 3.

*-Si se obtiene un path
    IF sy-subrc    IS INITIAL AND
       NOT lv_path IS INITIAL AND
       lv_abend    IS INITIAL.

*-Devuelvo ruta al parametro de selección
      p_file = lv_path.

    ENDIF.

  ENDIF.


Technorati tags:





Ayudas (matchcodes) para entradas en base al tipo de datos

27 11 2007

Generalmente cuando queremos agregar ayudas (matchcodes) vamos a la transacción SE11 y nos fijamos qué “Ayuda para búsqueda” tiene asociado el campo.

Pero muchas veces el matchcode es del tipo “Ayudas para entradas en base al tipo de datos”. En esos casos la ayuda se genera con una función.
Por tal motivo la solución es buscar alguna transacción que tenga el matchcode del campo que necesitamos y debuggueamos al momento de abrir la ayuda para encontrar la función.

A continuación voy a dejar un ejemplo para los campos LAUFD (Fecha de Ejecución) y LAUFI (ID Ejecución). Son parámetros muy comunes (Ej: transacción F110).


DATA: TLAUFK LIKE ILAUFK OCCURS 0 WITH HEADER LINE.

PARAMETERS:
            P_LAUFD LIKE F110V-LAUFD OBLIGATORY,   “Fecha de Ejecución
            P_LAUFI LIKE F110V-LAUFI OBLIGATORY.     “ID Ejecución

**Habilito con la tecla F4 el matchcode para el campo LAUFI
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_LAUFI.
  REFRESH TLAUFK.
  TLAUFK-LAUFK = SPACE.
  TLAUFK-SIGN = ‘I’.
  APPEND TLAUFK. 

  CALL FUNCTION ‘F4_ZAHLLAUF’
    EXPORTING
      F1TYP = ‘D’
      F2NME = ‘P_LAUFI’
    IMPORTING
      LAUFD = P_LAUFD
      LAUFI = P_LAUFI
    TABLES
      LAUFK = TLAUFK.

 

**Habilito con la tecla F4 el matchcode para el campo LAUFD
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_LAUFD.
  REFRESH TLAUFK.
  TLAUFK-LAUFK = SPACE.
  TLAUFK-SIGN = ‘I’.
  APPEND TLAUFK. 

CALL FUNCTION ‘F4_ZAHLLAUF’
    EXPORTING
      F1TYP = ‘D’
      F2NME = ‘P_LAUFI’
    IMPORTING
      LAUFD = P_LAUFD
      LAUFI = P_LAUFI
    TABLES
      LAUFK = TLAUFK.


Technorati tags:





ALV Tree Orientado a Objetos

26 11 2007

Hace unos días en el trabajo me tocó hacer un reporte ALV Tree .
image 

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.

TYPES: BEGIN OF TY_HEADER,
       CARRID TYPE SPFLI-CARRID,
       END OF TY_HEADER.

*—————————————————————–*
*  DECLARACION DE TABLAS INTERNAS                                 *
*—————————————————————–*

DATA: T_SPFLI TYPE STANDARD TABLE OF TY_SPFLI
      WITH HEADER LINE,
      TAB_TREE TYPE STANDARD TABLE OF TY_SPFLI
      WITH HEADER LINE,
      T_TREE TYPE STANDARD TABLE OF TY_SPFLI
      WITH HEADER LINE,
      T_HEADER TYPE STANDARD TABLE OF TY_HEADER
      WITH HEADER LINE.

*—————————————————————–*
*  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.

    CALL METHOD CL_GUI_CFW=>FLUSH
            EXCEPTIONS CNTL_SYSTEM_ERROR = 1
                       CNTL_ERROR        = 2.
  ENDIF.

  CALL SCREEN 100.

*—————————————————————–*
*       FORM init_tree                                            *
*—————————————————————–*

FORM INIT_TREE.

  DATA: L_TREE_CONTAINER_NAME(30) TYPE C.

  L_TREE_CONTAINER_NAME = ‘TREE_CONTROL’.

  CREATE OBJECT G_CUSTOM_CONTAINER
      EXPORTING
            CONTAINER_NAME = L_TREE_CONTAINER_NAME
      EXCEPTIONS
            CNTL_ERROR                  = 1
            CNTL_SYSTEM_ERROR           = 2
            CREATE_ERROR                = 3
            LIFETIME_ERROR              = 4
            LIFETIME_DYNPRO_DYNPRO_LINK = 5.

  CREATE OBJECT G_ALV_TREE
    EXPORTING
        PARENT              = G_CUSTOM_CONTAINER
        NODE_SELECTION_MODE = CL_GUI_COLUMN_TREE=>NODE_SEL_MODE_SINGLE
        ITEM_SELECTION      = ”
        NO_HTML_HEADER      = ‘X’
        NO_TOOLBAR          = ”
    EXCEPTIONS
        CNTL_ERROR                   = 1
        CNTL_SYSTEM_ERROR            = 2
        CREATE_ERROR                 = 3
        LIFETIME_ERROR               = 4
        ILLEGAL_NODE_SELECTION_MODE  = 5
        FAILED                       = 6
        ILLEGAL_COLUMN_NAME          = 7.

  PERFORM FILL_CATALOG_TREE.
  PERFORM BUILD_HIERARCHY_HEADER CHANGING L_HIERARCHY_HEADER.

  CALL METHOD G_ALV_TREE->SET_TABLE_FOR_FIRST_DISPLAY
       EXPORTING
                 IS_HIERARCHY_HEADER  = L_HIERARCHY_HEADER
       CHANGING
                 IT_OUTTAB        = T_TREE[]
                 IT_FIELDCATALOG  = GT_FIELDCAT_TREE.

  PERFORM CREATE_HIERARCHY.

ENDFORM.

*—————————————————————–*
*   FORM FILL_CATALOG_TREE                                        *
*—————————————————————–*

FORM FILL_CATALOG_TREE.

  DATA: GS_FIELDCAT_ADD TYPE LVC_S_FCAT.

  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.

  DATA: L_ROOT_KEY TYPE LVC_NKEY,
        L_NEXT_KEY TYPE LVC_NKEY,
        L_LAST_KEY TYPE LVC_NKEY,
        HEADER TYPE STRING,
        W_MENGE_TEXT(13) TYPE C.

  CLEAR L_ROOT_KEY.

  LOOP AT T_HEADER ASSIGNING <HEADER>.
    CLEAR L_ROOT_KEY.
    CLEAR L_NEXT_KEY.
    PERFORM ADD_NODE USING <HEADER>-CARRID L_ROOT_KEY
                     CHANGING L_NEXT_KEY.
    LOOP AT T_SPFLI ASSIGNING <SPFLI>
    WHERE CARRID EQ <HEADER>-CARRID.

      MOVE-CORRESPONDING  <SPFLI> TO TAB_TREE.

      PERFORM ADD_LEAF USING TAB_TREE L_NEXT_KEY
                       CHANGING L_LAST_KEY.
    ENDLOOP.
  ENDLOOP.

  CALL METHOD G_ALV_TREE->FRONTEND_UPDATE.

ENDFORM.

*———————————————————————*
*       FORM ADD_NODE                                                 *
*———————————————————————*

FORM ADD_NODE USING L_NAME L_ROOT_KEY
              CHANGING L_NEXT_KEY.

  DATA: L_NODE_TEXT TYPE LVC_VALUE,
        LS_TREE TYPE TY_SPFLI.

  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.

  CALL METHOD G_ALV_TREE->ADD_NODE
    EXPORTING
          I_RELAT_NODE_KEY = L_NEXT_KEY
          I_RELATIONSHIP   = CL_GUI_COLUMN_TREE=>RELAT_LAST_CHILD
          IS_OUTTAB_LINE   = TAB_TREE
       IMPORTING
          E_NEW_NODE_KEY = L_LAST_KEY.

ENDFORM.

*———————————————————————*
*       FORM OBTENER_DATOS                                            *
*———————————————————————*

FORM OBTENER_DATOS.

  SELECT CARRID CONNID COUNTRYFR CITYFROM
         AIRPFROM COUNTRYTO CITYTO
  INTO TABLE T_SPFLI
  FROM SPFLI.

  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.

2º) Luego de activar el reporte vamos a la transacción SE80:
Buscamos nuestro programa Z_ALV_TREE. Nos paramos sobre la carpeta con mismo nombre, click con el botón derecho del mouse… opción Crear y luego Dynpro: 
image
Ingresamos como número de dynpro 100. Ponemos la descripción que queramos y luego de activar apretamos el botón “Dispos.

A continuación se va a abrir el Screen Painter: 
Clickeamos en el botón Custom Control (image ) y creamos un cuadrado con el nombre TREE_CONTROL
image
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:





Programa para listar el contenido de un IDOC

25 11 2007

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…


REPORT Z_DISPLAY_IDOC LINE-SIZE 275.

DATA: IDOC_CONTROL LIKE EDIDC,
      NUMBER_OF_DATA_RECORDS LIKE SY-DBCNT,
      NUMBER_OF_STATUS_RECORDS LIKE SY-DBCNT,
      INT_EDIDS LIKE EDIDS OCCURS 0 WITH HEADER LINE,
      INT_EDIDD LIKE EDIDD OCCURS 0 WITH HEADER LINE.

TYPE-POOLS :  LEDID.

DATA: STRUCT_TYPE TYPE  LEDID_STRUCT_TYPE ,
      IDOC_STRUCT TYPE  LEDID_T_IDOC_STRUCT,
      SEGMENTS TYPE  LEDID_T_SEGMENT,
      SEGMENT_STRUCT TYPE  LEDID_T_SEGMENT_STRUCT,
      EXCEL_TAB(2000) OCCURS 0 WITH HEADER LINE.

PARAMETER: DOCNUM LIKE EDIDC-DOCNUM OBLIGATORY, “”Idoc Number
           SAP_REL LIKE SY-SAPRL DEFAULT SY-SAPRL OBLIGATORY,
           PI_VER LIKE EDI_VERREC-VERSION DEFAULT ‘3’ OBLIGATORY.

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.

  DATA: PE_SEG_HEADER LIKE EDI_SAPI01,
        SEGNAME LIKE EDI_IAPI12-SEGMENTTYP,
        PREV_SEGNAME LIKE EDI_IAPI12-SEGMENTTYP VALUE ‘ ‘,
        PT_FIELDS2 LIKE EDI_IAPI12 OCCURS 0 WITH HEADER LINE,
        PT_FVALUES2 LIKE EDI_IAPI14 OCCURS 0 WITH HEADER LINE,
        BYTE_FIRST TYPE I,
        BYTE_LAST TYPE I,
        FIELD_VAL(50),
        TMP_STR(15),
        TMP_STR3(15),
        SEG_REPEATS TYPE I VALUE 0,
        TMP_STR2(15),
        TAB_CR(2) TYPE C VALUE ’09’,
        TOT_CTR TYPE I VALUE 0,
        CTR TYPE I VALUE 0,
        MSG(40) TYPE C.

  DATA: IDOC_STRUCT_WA TYPE  LEDID_IDOC_STRUCT.

  SORT INT_EDIDD BY SEGNUM.
  DESCRIBE TABLE INT_EDIDD LINES TOT_CTR.
  LOOP AT INT_EDIDD.
    MOVE INT_EDIDD-SEGNAM TO SEGNAME.
    CLEAR MSG.
    CONCATENATE ‘Reading segment ‘ SEGNAME
                INTO MSG SEPARATED BY SPACE.
    IF TOT_CTR <> 0.
      CTR = ( 100 * SY-TABIX ) / TOT_CTR.
    ENDIF.
    CALL FUNCTION ‘SAPGUI_PROGRESS_INDICATOR’
      EXPORTING
        PERCENTAGE = CTR
        TEXT       = MSG.
    ADD 1 TO SEG_REPEATS.
    CLEAR TMP_STR2.
    IF INT_EDIDD-SEGNAM <> PREV_SEGNAME.
      SEG_REPEATS = 1.
      CLEAR: PE_SEG_HEADER, PT_FIELDS2, PT_FVALUES2.
      REFRESH: PT_FIELDS2, PT_FVALUES2.
      CALL FUNCTION ‘SEGMENT_READ_COMPLETE’
        EXPORTING
          PI_SEGTYP                 = SEGNAME
          PI_RELEASE                = SAP_REL
          PI_VERSION                = PI_VER
        IMPORTING
          PE_HEADER                 = PE_SEG_HEADER
        TABLES
          PT_FIELDS                 = PT_FIELDS2
          PT_FVALUES                = PT_FVALUES2
        EXCEPTIONS
          SEGMENT_UNKNOWN           = 1
          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.

  IF NOT IDOC_CONTROL-CIMTYP IS INITIAL.
    STRUCT_TYPE = ‘E’. “”Extended
    IDOCTYPE = IDOC_CONTROL-CIMTYP.
  ELSE.
    STRUCT_TYPE = ‘B’. “”Basic
    IDOCTYPE = IDOC_CONTROL-IDOCTP.
  ENDIF.

  CALL FUNCTION ‘IDOC_TYPE_COMPLETE_READ’
       EXPORTING
            RELEASE              = SAP_REL
            STRUCT_TYPE          = STRUCT_TYPE
            IDOCTYPE             = IDOCTYPE
            VERSION              = PI_VER
*       IMPORTING
*            IDOC_TYPE            = idoctype
       TABLES
            IDOC_STRUCT          = IDOC_STRUCT
            SEGMENTS             = SEGMENTS
            SEGMENT_STRUCT       = SEGMENT_STRUCT
       EXCEPTIONS
            IDOCTYPE_UNKNOWN     = 1
            IDOCSTRUCT_UNKNOWN   = 2
            SEGMENT_DATA_MISSING = 3
            ILLEGAL_STRUCT_TYPE  = 4
            OTHERS               = 5.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDFORM.                    “” read_idoc_structure


Technorati tags:





Calculadora en un POP-UP

24 11 2007

image

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.

DATA: X_VALUE(15) TYPE C.

CALL FUNCTION ‘FITRV_CALCULATOR’
* EXPORTING
*   INPUT_VALUE                =
*   CURRENCY                   =
*   START_COLUMN               = ’10’
*   START_ROW                  = ’10’
  IMPORTING
    OUTPUT_VALUE               = X_VALUE
  EXCEPTIONS
    INVALID_INPUT              = 1
    CALCULATION_CANCELED       = 2
    OTHERS                     = 3.

IF SY-SUBRC = 0. “En este ejemplo imprimimos por pantalla el resultado
  WRITE:/ ‘Output Value ‘, X_VALUE.
ENDIF.


Technorati tags:





Matchcode Browser (buscador de directorios)

22 11 2007

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.


Acá el código que debemos ingresar en nuestros programas:

*En P_FILE va a quedar guardada la ruta del archivo
PARAMETERS: P_FILE LIKE RLGRAP-FILENAME.

*Llamamos a la función que abre el browser apretando el matchcode
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
   CALL FUNCTION ‘F4_FILENAME’
      EXPORTING
         PROGRAM_NAME = SY-REPID
         DYNPRO_NUMBER = SY-DYNNR
         FIELD_NAME = ‘PATH’
      IMPORTING
         FILE_NAME = P_FILE .


Technorati tags: