Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Enrique.Borroni

Páginas: [1] 2 3 ... 6
1
REPORT zalv_dinamico.

TABLES : sscrfields.
*
*-------------------------------------------------------------------------------------------------------------------*
* DECLARACION DE TYPE-POOLS
*-------------------------------------------------------------------------------------------------------------------*
*
TYPE-POOLS : abap.                                                                                                  " ABAP Language Type-Pool
TYPE-POOLS : slis.                                                                                                  " Tipos globales creacion de ALV
*-------------------------------------------------------------------------------------------------------------------*
* DECLARACION DE INCLUDES
*-------------------------------------------------------------------------------------------------------------------*
INCLUDE : <icon>.                                                                                                   " Definicion de Iconos - ASCII-Codes
INCLUDE : <cl_alv_control>.                                                                                         " Definicion de Estilos de Celdas ALV

*
*-------------------------------------------------------------------------------------------------------------------*
* DECLARACION DE TYPE-POOLS
*-------------------------------------------------------------------------------------------------------------------*
TYPE-POOLS : vrm.
TYPE-POOLS : sscr.
TYPE-POOLS : rsds.
*-------------------------------------------------------------------------------------------------------------------*
* DECLARACION DE INCLUDES
*-------------------------------------------------------------------------------------------------------------------*
*-------------------------------------------------------------------------------------------------------------------*
* CLASES ABAP
*-------------------------------------------------------------------------------------------------------------------*
CLASS cl_abap_char_utilities DEFINITION LOAD.
*-------------------------------------------------------------------------------------------------------------------*
* CONSTANTES : DEFINICION PARA SEPARADORES DE CAMPOS
*-------------------------------------------------------------------------------------------------------------------*

*
*VALORES DE VERADDERO/FALSO
CONSTANTS : co_falso               TYPE c LENGTH 001                       VALUE 'F'.                              " False
CONSTANTS : co_verdadero           TYPE c LENGTH 001                       VALUE 'T'.                              " Verdadero
*-------------------------------------------------------------------------------------------------------------------*
* DECLARACION DE DATOS GLOBALES
*-------------------------------------------------------------------------------------------------------------------*
*
DATA : gd_continuar               TYPE c LENGTH 01                        VALUE co_falso.
*
*VARIABLES PARA DYNPROS
DATA : ok_code                    TYPE sy-ucomm.
*
*-------------------------------------------------------------------------------------------------------------------*
* DECLARACION DE DATOS GLOBALES DINAMICOS :
*-------------------------------------------------------------------------------------------------------------------*
*
DATA : ref_line_type  TYPE REF TO cl_abap_structdescr.
DATA : ref_tabletype  TYPE REF TO cl_abap_tabledescr.
DATA : ref_wa         TYPE REF TO data.
*
DATA : ref_itab       TYPE REF TO data.
DATA : ref_out        TYPE REF TO cl_salv_table.
*
DATA : ref_functions  TYPE REF TO cl_salv_functions_list.
*
DATA : ref_header     TYPE REF TO cl_salv_form_layout_grid.
DATA : ref_label      TYPE REF TO cl_salv_form_label.
DATA : ref_tab        TYPE string.
*
DATA : ld_tabla       TYPE tabname.
*
FIELD-SYMBOLS : <fsym_itab> TYPE ANY TABLE.
FIELD-SYMBOLS : <fsym_field> TYPE ANY.

DATA : ls_functxt                           TYPE smp_dyntxt.
*
* DEFINICION DATOS LOCALES PARA TRATAMIENTO DINAMICO
DATA : lo_dynamic_struct                    TYPE REF TO cl_abap_structdescr.
DATA : lt_comp_tabla                        TYPE cl_abap_structdescr=>component_table.
DATA : lo_dref_comptbi                      TYPE REF TO data.
DATA : lo_dref_locstr                       TYPE REF TO data.
DATA : lo_dref_loctbi                       TYPE REF TO data.
*
*-------------------------------------------------------------------------------------------------------------------*
* DECLARACION DE TIPOS DE TABLAS - TABLAS INTERNAS :
*-------------------------------------------------------------------------------------------------------------------*
*
DATA : ld_selection_id                      TYPE rsdynsel-selid.                            " ID de selección para diferenciar entre varios conjuntos
*
DATA : ld_tabclass                          TYPE tabclass.                                  " Clase tabla
DATA : ld_tablename                         TYPE string.
DATA : ld_num_fields                        TYPE i.                                         " numero de campos
*
DATA : lt_expressions                       TYPE rsds_texpr.                                " Expresiones
DATA : lt_field_ranges                      TYPE rsds_trange.                               " Rangos
DATA : ls_field_ranges                      LIKE LINE OF lt_field_ranges.
*
DATA : lt_tables_ini                        TYPE STANDARD TABLE OF rsdstabs.                " Init: tablas
DATA : sl_tables_ini                        LIKE LINE OF lt_tables_ini.
*
DATA : lt_fields_ini                        TYPE STANDARD TABLE OF rsdsfields.              " Init: campos
DATA : sl_fields_ini                        LIKE LINE OF lt_fields_ini.
*
DATA : lt_where_cond                        TYPE rsds_twhere.                               " Datos para la tabla where
DATA : ls_where_clause                      LIKE LINE OF lt_where_cond.
*
DATA : lt_where_tab                         TYPE STANDARD TABLE OF rsds_where_tab.
DATA : ls_where_tab                         LIKE LINE OF lt_where_tab.
*
DATA : lt_tabfields_not_display             TYPE TABLE OF rsdsfields.
DATA : ls_tabfields_not_display             LIKE LINE OF lt_tabfields_not_display.
*
DATA : gd_titulo_externo                    TYPE c LENGTH 080.
*
*-------------------------------------------------------------------------------------------------------------------*
* DECLARACION DE FIELD-SYMBOLS
*-------------------------------------------------------------------------------------------------------------------*
*
* DEFINICION FIELD-SYMBOLS LOCALES PARA TRATAMIENTO DINAMICO
FIELD-SYMBOLS : <fs_valor_campo>            TYPE ANY.
*
FIELD-SYMBOLS : <fs_valor_struc>            TYPE ANY.
FIELD-SYMBOLS : <fs_comp_tabla>             LIKE LINE OF lt_comp_tabla.
*
FIELD-SYMBOLS : <fs_dynamic_tbi>            TYPE ANY TABLE.
FIELD-SYMBOLS : <fs_dynamic_str>            TYPE ANY.
*-------------------------------------------------------------------------------------------------------------------*
*
*-------------------------------------------------------------------------------------------------------------------*
*
PARAMETERS : pa_tab TYPE dd02l-tabname.

*-----------------------------------------------------------------------------------------------------------------*
* START-OF-SELECTION.
*-----------------------------------------------------------------------------------------------------------------*
START-OF-SELECTION.
*
  ld_tablename      = pa_tab.
*
  CLEAR : ld_tabclass.
  SELECT SINGLE tabclass INTO ld_tabclass
    FROM dd02l
      WHERE  tabname   EQ ld_tablename
      AND    as4local  EQ 'A'
      AND    tabclass  EQ 'TRANSP'.
*
  IF ( sy-subrc EQ 0 ) AND NOT ( ld_tabclass IS INITIAL ).
*
    PERFORM get_data_parametros_dynpro.
*
    PERFORM actualiza_titulo.
*
    CALL FUNCTION 'FREE_SELECTIONS_INIT'
      EXPORTING
        kind                     = 'T'
        expressions              = lt_expressions
      IMPORTING
        selection_id             = ld_selection_id
        field_ranges             = lt_field_ranges
      TABLES
        tables_tab               = lt_tables_ini
        fields_tab               = lt_fields_ini
        tabfields_not_display    = lt_tabfields_not_display
      EXCEPTIONS
        fields_incomplete        = 1
        fields_no_join           = 2
        field_not_found          = 3
        no_tables                = 4
        table_not_found          = 5
        expression_not_supported = 6
        incorrect_expression     = 7
        illegal_kind             = 8
        area_not_found           = 9
        inconsistent_area        = 10
        kind_f_no_fields_left    = 11
        kind_f_no_fields         = 12
        too_many_fields          = 13
        dup_field                = 14
        field_no_type            = 15
        field_ill_type           = 16
        dup_event_field          = 17
        node_not_in_ldb          = 18
        area_no_field            = 19
        OTHERS                   = 20.
    IF ( sy-subrc NE 0 ).

    ELSE.

    ENDIF.

*   MOSTRAR PANTALLA DE SELECCIÓN LIBRE
    CALL FUNCTION 'FREE_SELECTIONS_DIALOG'
      EXPORTING
        selection_id            = ld_selection_id
        title                   = sy-title
        frame_text              = 'Parametros de Seleccion'
        status                  = '1'
        as_window               = abap_false
        no_intervals            = abap_true
      IMPORTING
        where_clauses           = lt_where_cond
        expressions             = lt_expressions
        field_ranges            = lt_field_ranges
        number_of_active_fields = ld_num_fields
      TABLES
        fields_tab              = lt_fields_ini
      EXCEPTIONS
        internal_error          = 1
        no_action               = 2
        selid_not_found         = 3
        illegal_status          = 4
        OTHERS                  = 5.
    IF ( sy-subrc EQ 0 ).
      gd_continuar = co_verdadero.
    ENDIF.
  ELSE.
    gd_continuar = co_falso.
  ENDIF.
*
  IF ( gd_continuar EQ co_verdadero ).
*
    IF ( gd_continuar EQ co_verdadero ).
      PERFORM get_main_data.
*
      IF ( <fs_dynamic_tbi>[] IS INITIAL ).
        MESSAGE i899(v1) WITH 'Sin Datos' DISPLAY LIKE 'I'.
        gd_continuar = co_falso.
      ENDIF.
    ELSE.
      gd_continuar = co_falso.
    ENDIF.
  ENDIF.
*
  IF ( gd_continuar EQ co_falso ).
    LEAVE TO SCREEN 0.
  ENDIF.
*
*-----------------------------------------------------------------------------------------------------------------*
* END-OF-SELECTION
*-----------------------------------------------------------------------------------------------------------------*
END-OF-SELECTION.

  PERFORM show_data_alv USING ld_tablename.



*-----------------------------------------------------------------------------------------------------------------*
* INCLUDES DE RUTINAS FORM
*-----------------------------------------------------------------------------------------------------------------*
*
*-------------------------------------------------------------------------------------------------------------------*
* FORM : GET_MAIN_DATA
*-------------------------------------------------------------------------------------------------------------------*
FORM get_main_data.
*
  DATA : lt_field                 TYPE ddfields.
*
  DATA : ld_existe_ori            TYPE c LENGTH 001 VALUE co_falso.
  DATA : ld_varaux                TYPE string.
  DATA : lt_where_aux             TYPE STANDARD TABLE OF rsdswhere.
  DATA : ls_where_aux             LIKE LINE OF lt_where_aux.

  DATA : ld_cantregi              TYPE sy-tabix.
  DATA : lt_campos                TYPE STANDARD TABLE OF string.
  DATA : ld_campo                 TYPE string.
  DATA : type_descr               TYPE REF TO cl_abap_typedescr.
  DATA : struct_descr             TYPE REF TO cl_abap_structdescr.
  DATA : components               TYPE cl_abap_structdescr=>component_table.
  DATA : component                LIKE LINE OF components.
  DATA : error                    TYPE REF TO cx_root.
*
* DEFINICION DATOS LOCALES PARA TRATAMIENTO DINAMICO
  DATA : lo_dref_locstr           TYPE REF TO data.
  DATA : lo_dref_loctbi           TYPE REF TO data.
  DATA : ld_tabname               TYPE tabname.
*
  ld_tabname  = ld_tablename.
*
  FIELD-SYMBOLS : <fs_dfies>      TYPE dfies.
  FIELD-SYMBOLS : <fs_where>      TYPE rsdswhere.
*
* GENERACION DINAMICA DE LA ESTRUCTURA
  CREATE DATA lo_dref_loctbi TYPE STANDARD TABLE OF (ld_tabname) WITH NON-UNIQUE DEFAULT KEY.
  ASSIGN lo_dref_loctbi->* TO <fs_dynamic_tbi>.
*
  CREATE DATA lo_dref_locstr LIKE LINE OF <fs_dynamic_tbi>.
  ASSIGN lo_dref_locstr->* TO <fs_dynamic_str>.
*
  IF ( sy-subrc EQ 0 ).
    TRY.
*
        CALL METHOD zcl_mm_blueyonder=>get_fields_structure
          EXPORTING
            iv_name   = ld_tabname
          IMPORTING
            et_fields = lt_field[].

        LOOP AT lt_field ASSIGNING <fs_dfies>.
          IF ( <fs_dfies>-datatype EQ 'CLNT' ) OR ( <fs_dfies>-datatype EQ 'STRU' ).

          ELSE.
            CLEAR : ld_campo.
            ld_campo = <fs_dfies>-fieldname.
            APPEND ld_campo TO lt_campos.
          ENDIF.
        ENDLOOP.

        IF NOT ( lt_campos[] IS INITIAL ).
          IF ( LINES( lt_where_cond ) GT 0 ).
            LOOP AT lt_where_cond INTO ls_where_clause WHERE tablename EQ ld_tablename.
              APPEND LINES OF ls_where_clause-where_tab[] TO lt_where_aux[].
            ENDLOOP.

            SELECT *
              INTO CORRESPONDING FIELDS OF TABLE <fs_dynamic_tbi>[]
                FROM  (ld_tablename)
                  WHERE (lt_where_aux) ORDER BY PRIMARY KEY.
          ELSE.
            SELECT *
              INTO CORRESPONDING FIELDS OF TABLE <fs_dynamic_tbi>[]
                FROM (ld_tablename)
                  WHERE (lt_where_aux) ORDER BY PRIMARY KEY.
          ENDIF.
        ENDIF.
      CATCH cx_sy_move_cast_error INTO error.
        MESSAGE error TYPE 'I' DISPLAY LIKE 'E'.
        RETURN.
    ENDTRY.
*
  ENDIF.
*
ENDFORM.                                                                                                            "
*-------------------------------------------------------------------------------------------------------------------*
* FORM : GET_DATA_PARAMETROS_DYNPRO
*-------------------------------------------------------------------------------------------------------------------*
FORM get_data_parametros_dynpro.
*
  DATA : ld_tabname               TYPE tabname.
  DATA : lt_field                 TYPE ddfields.
*
  DATA : ld_ddtext                TYPE ddtext.
*
  FIELD-SYMBOLS : <fs_dfies>      TYPE dfies.
*
  CLEAR : lt_expressions[], lt_field_ranges[], lt_tables_ini[], lt_fields_ini[],
          lt_where_cond[], lt_where_tab[], lt_tabfields_not_display[].
*
  sl_tables_ini-prim_tab  = ld_tablename.
  APPEND sl_tables_ini TO lt_tables_ini.
*
  ld_tabname  = ld_tablename.
  CALL METHOD zcl_mm_blueyonder=>get_fields_structure
    EXPORTING
      iv_name   = ld_tabname
    IMPORTING
      et_fields = lt_field[].
*
  LOOP AT lt_field ASSIGNING <fs_dfies>.
    IF ( <fs_dfies>-keyflag  EQ abap_true ) AND ( <fs_dfies>-datatype NE 'CLNT'    ).
      CLEAR : sl_fields_ini.
      sl_fields_ini-tablename      = ld_tabname.
      sl_fields_ini-fieldname      = <fs_dfies>-fieldname.
      sl_fields_ini-type           = 'S'.
      sl_fields_ini-where_leng     = <fs_dfies>-leng.
      APPEND sl_fields_ini TO lt_fields_ini.
    ENDIF.
  ENDLOOP.
*
  IF ( gd_titulo_externo IS INITIAL ).
    CLEAR : ld_ddtext.
    SELECT SINGLE ddtext INTO ld_ddtext
      FROM  dd02t
        WHERE  tabname     EQ ld_tabname
        AND    ddlanguage  EQ sy-langu
        AND    as4local    EQ 'A'.
    IF ( sy-subrc EQ 0 ) AND ( ld_ddtext IS INITIAL ).
      gd_titulo_externo = ld_ddtext.
    ENDIF.
  ENDIF.
*
ENDFORM.                                                                                                            "
*-------------------------------------------------------------------------------------------------------------------*
* FORM : ACTUALIZA_TITULO
*-------------------------------------------------------------------------------------------------------------------*
FORM actualiza_titulo.
*
  DATA : ld_titu_reporte                    TYPE string.
  DATA : ld_nomb_reporte                    TYPE string.
  DATA : ld_param_01                        TYPE c LENGTH 030 .
  DATA : ld_param_02                        TYPE c LENGTH 030 .
  DATA : ld_param_03                        TYPE c LENGTH 030 .
  DATA : ld_param_04                        TYPE c LENGTH 030 .
*
  DATA : ld_msg_aux_01                      TYPE string.
  DATA : ld_msg_aux_02                      TYPE string.
  DATA : ld_msg_aux_03                      TYPE string.
*
  DATA : ld_tabname               TYPE tabname.
  DATA : ld_ddtext                TYPE ddtext.

  SET TITLEBAR  'T_01'.
*
  ld_titu_reporte = 'T_01'.
  ld_nomb_reporte = 'ZALV_DINAMICO'.
*
  ld_tabname  = ld_tablename.
*
  CLEAR : ld_ddtext.
  SELECT SINGLE ddtext INTO ld_ddtext
    FROM  dd02t
      WHERE  tabname     EQ ld_tabname
      AND    ddlanguage  EQ sy-langu
      AND    as4local    EQ 'A'.
*
  ld_param_01 = 'Tabla :'.
  CONCATENATE ld_tabname '-' '(' INTO ld_param_02  SEPARATED BY space.
  CONCATENATE  ld_ddtext ')' INTO ld_param_03.
  SET TITLEBAR ld_titu_reporte OF PROGRAM ld_nomb_reporte WITH ld_param_01 ld_param_02 ld_param_03 ld_param_04.
*
ENDFORM.                                                                                                           "
*-------------------------------------------------------------------------------------------------------------------*
* FORM : SHOW_DATA_ALV
*-------------------------------------------------------------------------------------------------------------------*
FORM show_data_alv  USING    p_ld_tablename.
*
  CLEAR : ld_tabla.
  ld_tabla = p_ld_tablename.
*
* CREAR TIPO LINEA Y TIPO TABLA CON : RTTC
  ref_line_type ?= cl_abap_typedescr=>describe_by_name( ld_tabla ).
  ref_tabletype = cl_abap_tabledescr=>create( p_line_type = ref_line_type ).
*
* OBJETO CREADO CON : RTTC.
  CREATE DATA ref_itab TYPE HANDLE ref_tabletype.
  CREATE DATA ref_wa TYPE HANDLE ref_line_type.
*
* ASIGNAR TIPO
  ASSIGN ref_itab->* TO <fsym_itab>.
*
* LLAMAR ALV.
  TRY.
      CALL METHOD cl_salv_table=>factory
        IMPORTING
          r_salv_table = ref_out
        CHANGING
          t_table      = <fs_dynamic_tbi>.
    CATCH cx_salv_msg .
  ENDTRY.
*
  ref_functions = ref_out->get_functions( ).
  ref_functions->set_all( if_salv_c_bool_sap=>true ).
*
  CREATE OBJECT ref_header.
  CREATE OBJECT ref_label.
*
  ref_label = ref_header->create_label( row = 1 column = 1 ).
  CONCATENATE 'Contenido :' ld_tabla INTO ref_tab SEPARATED BY space.
  ref_label->set_text( ref_tab ).
  ref_out->set_top_of_list( ref_header ).
  ref_out->set_top_of_list_print( ref_header ).
  ref_out->display( ).
*
* LIMPIAR FIELD SYMBOLS
  UNASSIGN : <fsym_itab>.
  FREE ref_out.
*
ENDFORM.                                                                                                           "

2
Funciones / Funciones para determinar el tamaño de las tablas
« en: 13 de Enero de 2023, 08:54:52 am »
GET_TABLE_SIZE_ADA
GET_TABLE_SIZE_MSS
GET_TABLE_SIZE_ORA
GET_TABLE_SIZE_DB2
GET_TABLE_SIZE_DB4
GET_TABLE_SIZE_DB6
GET_TABLE_SIZE_INF
GET_TABLE_SIZE_ALL
GET_TABLE_SIZE_ALL

3
Módulos funcionales / Funciones para determinar el tamaño de tavb
« en: 13 de Enero de 2023, 08:38:46 am »
GET_TABLE_SIZE_ADA
GET_TABLE_SIZE_MSS
GET_TABLE_SIZE_ORA
GET_TABLE_SIZE_DB2
GET_TABLE_SIZE_DB4
GET_TABLE_SIZE_DB6
GET_TABLE_SIZE_INF
GET_TABLE_SIZE_ALL
GET_TABLE_SIZE_ALL

4
Programación ABAP / Re:Asignación dinámica a tabla y referencia de campo
« en: 06 de Julio de 2018, 04:29:38 pm »
Aquí te dejo un ejemplo...

DATA  : lt_mara           TYPE STANDARD TABLE OF mara.
DATA  : ld_nomb_tabla     TYPE tabname.
DATA  : ld_tbi_dinamica   TYPE tabname.
DATA  : ld_condicion      TYPE string.
*
DATA  : ld_matnr          TYPE matnr.
DATA  : ld_matkl          TYPE matkl.
*
FIELD-SYMBOLS : <fs_tabla_interna> TYPE STANDARD TABLE.
*
ld_nomb_tabla     = 'MARA'.
ld_tbi_dinamica   = 'LT_MARA'.
ld_matnr          = '10050'.
ld_matkl          = '0001'.
*
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
  EXPORTING
    input        = ld_matnr
  IMPORTING
    output       = ld_matnr
  EXCEPTIONS
    length_error = 1
    OTHERS       = 2.
*
CONCATENATE 'MATNR EQ' 'LD_MATNR' 'AND'
            'MATKL EQ' 'LD_MATKL'
              INTO ld_condicion SEPARATED BY space.
*
ASSIGN (ld_tbi_dinamica) TO <fs_tabla_interna>.
IF ( sy-subrc EQ 0 ).
  SELECT *
    INTO TABLE <fs_tabla_interna>
      FROM (ld_nomb_tabla)
        WHERE (ld_condicion).
ENDIF.


Saludos.

5
Aquí les dejo un report  que permite seleccionar archivos desde el servidor de aplicación o presentación.
Espero les sea de utilidad.

REPORT Z_GET_ARCHIVO_SRV_LOCAL.
*-----------------------------------------------------------------------------------------------------------------------------------------*
DATA : ld_rc(10)              TYPE c.
DATA : ld_filename            TYPE string.
*-----------------------------------------------------------------------------------------------------------------------------------------*
DATA : ld_location_flag       TYPE  dxlocation.     " Indicador: Servidor de aplicación o presentación : A = Server SAP   // P = PC Local
DATA : ld_server              TYPE  msname2.        " Nombre del servidor de aplicación (SOLO PARA SERVER SAP)
DATA : ld_path                TYPE  dxlpath.        " Vía acceso más larga
DATA : ld_filemask            TYPE  dxfilemask.     " Máscara p.nom.fichero
DATA : ld_fileoperation       TYPE  dxfileoper.     " Tipo de Operacion con el Archivo : R = Leer  // W = Escribir
*-----------------------------------------------------------------------------------------------------------------------------------------*
*

PARAMETERS : p_srv            RADIOBUTTON GROUP gr1.
PARAMETERS : p_loc            RADIOBUTTON GROUP gr1.
*
*-----------------------------------------------------------------------------------------------------------------------------------------*


*
*--->> PARA SELECIONAR ARCHIVOS DESDE EL SERVER SAP
IF ( p_srv EQ 'X' ).
  ld_location_flag  = 'A'.
  ld_path           = '/usr/sap/tmp'.
  ld_filemask       = '*.*'.
  ld_fileoperation  = 'R'.
ENDIF.

*
*--->> PARA SELECIONAR ARCHIVOS DESDE LOCAL PC
IF ( p_loc EQ 'X' ).
  ld_location_flag  = 'P'.
  ld_path           = 'C:\TEMP\'.
  ld_filemask       = '*.*'.
  ld_fileoperation  = 'R'.
ENDIF.


*-----------------------------------------------------------------------------------------------------------------------------------------*
START-OF-SELECTION.
*
  PERFORM get_filename_pc_sev USING     ld_location_flag
                                        ld_path
                                        ld_filemask
                                        ld_fileoperation
                              CHANGING  ld_rc
                                        ld_filename.
*
  WRITE : / 'RC       : ', ld_rc.
  WRITE : / 'ARCHIVO  : ', ld_filename.
*
END-OF-SELECTION.
*-----------------------------------------------------------------------------------------------------------------------------------------*
*
*
*-----------------------------------------------------------------------------------------------------------------------------------------*
*  FORM : GET_FILENAME_PC_SEV
*-----------------------------------------------------------------------------------------------------------------------------------------*
*       Leer Nombre de un archivo desde el servidor SAP o LOCAL
*-----------------------------------------------------------------------------------------------------------------------------------------*
*      -->P_LD_LOCATION_FLAG      Indicador: Servidor de aplicación o presentación : A = Server SAP   // P = PC Local
*      -->P_LD_PATH               Vía acceso más larga
*      -->P_LD_FILEMASK           Máscara p.nom.fichero
*      -->P_LD_FILEOPERATION      Tipo de Operacion con el Archivo : R = Leer  // W = Escribir
*      <--P_LD_RC
*      <--P_LD_FILENAME
*-----------------------------------------------------------------------------------------------------------------------------------------*
FORM get_filename_pc_sev  USING    p_location_flag
                                   p_path
                                   p_filemask
                                   p_fileoperation
                          CHANGING p_rc
                                   p_filename.

*
* ----->>> DECLARACION DE VARIABLES
  DATA  : ld_o_location_flag      TYPE dxlocation.                      " Indicador: Servidor de aplicación o presentación
  DATA  : ld_o_server             TYPE msname2.                         " Nombre del servidor de aplicación
  DATA  : ld_o_path               TYPE dxlpath.                         " Vía acceso más larga
  DATA  : ld_abend_flag           TYPE dxxabend.                        " Indicador: Cancelación del proceso
  DATA  : ld_filesys              TYPE filesys_d.                       " Grupo de sintaxis para nombres de ficheros y vías de acceso
  DATA  : lw_rfcsi_export         TYPE rfcsi.                           " RFC Versión log
  DATA  : ld_server               TYPE msname2.                         " Nombre del servidor de aplicación
*
  DATA  : ld_path                 TYPE string.                          " Path para Archivos PC
  DATA  : ld_mascara              TYPE string.                          " Marcara para Archivos PC
  DATA  : lt_file_table           TYPE STANDARD TABLE OF file_table.    " Tabla Interna para guardar archivo seleccionado desde el PC
  DATA  : lw_file_table           LIKE LINE OF lt_file_table.           "
  DATA  : ld_subrc                TYPE i.                               " Para retorno de la funcion de seleccion de archivos del PC

  IF ( p_location_flag EQ 'A' ).
  ENDIF.


  CASE p_location_flag.
*
*   ----->>> EJECUTAR FUNCION PARA SELECCIONAR ARCHIVO DESDE SERVIDOR DE APLICACION : 'SAP'
    WHEN 'A'.
*
*     ----->>> RECUPERAR EL SISTEMA OPERATIVO DEL LOS SERVIDORES DE APLICACIONES : APLICACION Y PRESENTACION
      SELECT SINGLE filesys
        FROM opsystem INTO ld_filesys
          WHERE opsys EQ sy-opsys.
*
*     ----->>> RECUPERAR DESTINO LOGICO DEL SISTEMA
      CALL FUNCTION 'RFC_SYSTEM_INFO'
        IMPORTING
          rfcsi_export = lw_rfcsi_export.
*
*     ----->>> RECUPERAR NOMBER DEL SERVER SAP
      ld_server = lw_rfcsi_export-rfcdest.
*
*     ----->>> SI RUTA ES VACIO : UTILIZAR '?'
      IF ( ld_server IS INITIAL ).
        ld_server = '?'.
      ENDIF.
*
*     ----->>> SI MASCARA PARA SELECCION DE TIPO DE ARCHIVOS ES VACIA : UTILIZAR '*.*'
      IF ( p_filemask IS INITIAL ).
        p_filemask = '*.*'.
      ENDIF.
*
*     ----->>> LLAMADA A LA FUNCION DE SELECCION DE ARCHIVOS EN SERVER SAP
      CALL FUNCTION 'F4_DXFILENAME_TOPRECURSION'
        EXPORTING
          i_location_flag = p_location_flag             " Indicador: Servidor de aplicación o presentación : A = Server SAP   // P = PC Local
          i_server        = ld_server                   " Nombre del servidor de aplicación
          i_path          = p_path                      " Vía acceso más larga
          filemask        = p_filemask                  " Máscara p.nom.fichero
          fileoperation   = p_fileoperation             " Tipo de Operacion con el Archivo : R = Leer  // W = Escribir
        IMPORTING
          o_location_flag = ld_o_location_flag
          o_server        = ld_o_server
          o_path          = ld_o_path
          abend_flag      = ld_abend_flag
        EXCEPTIONS
          rfc_error       = 1
          error_with_gui  = 2
          OTHERS          = 3.
*
*   ----->>> EJECUTAR FUNCION PARA SELECCIONAR ARCHIVO DESDE SERVIDOR DE PRESENTACION : 'LOCAL PC'
    WHEN 'P'.
*
      IF ( p_path IS INITIAL ).
        ld_path = 'C:\'.
      ELSE.
        ld_path     = p_path.
      ENDIF.
*
      IF ( p_filemask IS INITIAL ).
        ld_mascara  = '*.*'.
      ELSE.
        ld_mascara  = p_filemask.
      ENDIF.
*
*     ----->>> LLAMADA AL METODO DE SELECCION DE ARCHIVOS DESDE PC
      CALL METHOD cl_gui_frontend_services=>file_open_dialog
        EXPORTING
          window_title            = 'Seleccione Archivo'
          default_extension       = ld_mascara
          initial_directory       = ld_path
        CHANGING
          file_table              = lt_file_table
          rc                      = ld_subrc
        EXCEPTIONS
          file_open_dialog_failed = 1
          cntl_error              = 2
          error_no_gui            = 3
          not_supported_by_gui    = 4
          OTHERS                  = 5.
*
*   ----->>> VALIDA LA EJECUCION Y HOMOLOGA VALORES DE RETORNO DE LA RUTINA
    IF NOT ( lt_file_table IS INITIAL ).
        READ TABLE lt_file_table INTO lw_file_table INDEX 1.
        ld_o_path     = lw_file_table-filename.
        sy-subrc      = 0.
      ELSEIF ( ld_subrc GT 1 ).
        sy-subrc      = ld_subrc.
      ELSEIF ( lt_file_table IS INITIAL ).
        sy-subrc      = 0.
        ld_abend_flag = 'X'.
        ld_o_path     = ''.
      ENDIF.
  ENDCASE.
*
* ----->>> VALIDA LA EJECUCION Y RETORNA VALORES
  IF ( sy-subrc EQ 0 ) AND ( ld_o_path NE '' ).
    p_filename  = ld_o_path.
    p_rc        = 'OK'.
  ELSEIF ( ld_abend_flag EQ 'X' ) OR ( ld_o_path EQ '' ).
    p_rc        = 'CANCEL'.
  ELSE.
    p_rc        = 'ERROR'.
  ENDIF.
*
ENDFORM.                                                                                                                                                                   "
*-----------------------------------------------------------------------------------------------------------------------------------------*



6
Programación ABAP / Performance en Acceso a Tablas de SD
« en: 30 de Septiembre de 2016, 05:50:53 pm »
Hace un tiempo buscando mejorar el acceso a las tablas de SD encontre esto...Ojala les sirva.

1. Accesses to sales orders (tables VBAK, VBAP)

a) Search orders for customer number (field VBAK-KUNNR):

*Incorrect:
SELECT FROM vbak WHERE kunnr = ...
*Correct:   
SELECT FROM vakpa WHERE kunde = ... 
SELECT FROM vbak WHERE vbeln = vakpa-vbeln.


b) Search order items for material number (field VBAP-MATNR):

*Incorrect:
SELECT FROM vbap WHERE matnr = ...
*Correct:   
SELECT FROM vapma WHERE matnr = ...   
SELECT FROM vbap WHERE vbeln = vapma-vbeln
                   AND posnr = vapma-posnr



c) Other search helps for sales orders offer the matchcode tables and views M_VMVAx, x. = A, B, C, ... M; for example search for purchase order number of the customer, description and so on

2. Accesses to deliveries (tables LIKP, LIPS)

a) Search for deliveries with customer number (field LIKP-KUNNR):

*Incorrect:
SELECT FROM likp WHERE kunnr = ...
*Correct:
SELECT FROM vlkpa WHERE kunde = ...   
SELECT FROM likp WHERE vbeln = vlkpa-vbeln.


b) Search for delivery items with material number (field LIKP-MATNR):

*Incorrect:
SELECT FROM lips WHERE matnr = ...
*Correct:
SELECT FROM vlpma WHERE matnr = ...   
SELECT FROM lips WHERE vbeln = vlpma-vbeln
                   AND posnr = vlpma-posnr



c) Search for deliveries with sales order number (preceding document, field LIPS-VGBEL):

*Incorrect:
SELECT FROM lips WHERE vgbel = ...
*Correct:
SELECT FROM vbfa WHERE VBELV  = ...
                   AND VBTYP_N = 'J'   
SELECT FROM lips WHERE vbeln = vbfa-vbeln
                   AND posnr = vbfa-posnn



d) Other search helps for deliveries offer matchcode tables and views M_VMVLx, x. = A, B, C, ... M; for example search for goods issue date, picking date, transportation planning date and so on.


3. Accesses to invoices (tables VBRK, VBRP)

a) Search for invoices with customer number ("payer") (field VBRK-KUNRG):

*Incorrect:
SELECT FROM vbrk WHERE kunrg = ...
*Correct:
SELECT FROM vrkpa WHERE kunde = ...   
SELECT FROM vbrk WHERE vbeln = vrkpa-vbeln



b) Search for invoice items with material number (field VBRP-MATNR):

*Incorrect:
SELECT FROM vbrp WHERE matnr = ...
*Correct:
SELECT FROM vrpma WHERE matnr = ...   
SELECT FROM vbrp WHERE vbeln = vrpma-vbeln
                   AND posnr = vrpma-posnr



c) Search for invoices with delivery number (preceding document, field VBRP-VGBEL):

 
*Incorrect:
SELECT FROM vbrp WHERE vgbel = ...
*Correct:
SELECT FROM vbfa WHERE vbtyp_n = 'M'
                   AND vbelv  = ...   
SELECT FROM vbrp WHERE vbeln = vbfa-vbeln
                   AND posnr = vbfa-posnn



d) Search for invoices with order number (preceding document, field VBRP-AUBEL):

*Incorrect:
SELECT FROM vbrp WHERE aubel = ...
*Correct:
SELECT FROM vbfa WHERE vbtyp_n = 'M'                   
                   AND vbelv   = ...
SELECT FROM vbrp WHERE vbeln = vbfa-vbeln
                   AND posnr = vbfa-posnn



4. Other accesses in SD:

a) Document flow:
*Incorrect:
SELECT vbelv FROM vbfa WHERE vbeln ...


In table VBFA only the preceeding document is used to search for the subsequent document (for example, delivery for order). Searching the other way makes no sense with this table since the preceding documents (for example, order for delivery) are stored directly in the document tables. Thus reading in table VBFA is a one-way street.

*Correct:
SELECT vgbel FROM lips WHERE vbeln = ...
or
SELECT vgbel FROM vbrp WHERE vbeln = ...
or
SELECT aubel FROM vbrp WHERE vbeln = ...


b) Search for shipping unit item with delivery

Incorrect:
SELECT FROM vepo WHERE vbtyp = 'J'                   
                   AND vbeln = i_lips-vbeln
Correct:
SELECT FROM vbfa WHERE vbtyp_n = 'X'                   
                   AND vbelv = i_lips-vbeln
SELECT FROM vepo WHERE venum = vbfa-vbeln

7
Reports / Ingresar texto dentro de un cuadro de texto en una Dynpro
« en: 31 de Enero de 2016, 10:09:07 am »
Para ingresar texto en un cuadro de texto creado en la Dynpro
se debe hacer los siguiente :


*--------------------------------------------------------------------*
* Declaracion variables para el cuadro de textos
*--------------------------------------------------------------------*
*
CLASS event_handler DEFINITION.
 PUBLIC SECTION.
   METHODS: handle_f1 FOR EVENT f1 OF cl_gui_textedit
            IMPORTING sender,
            handle_f4 FOR EVENT f4 OF cl_gui_textedit
            IMPORTING sender.
ENDCLASS.
*--------------------------------------------------------------------*
DATA: init,
     container   TYPE REF TO cl_gui_custom_container,
     editor      TYPE REF TO cl_gui_textedit.
DATA: event_tab  TYPE cntl_simple_events,
     event       TYPE cntl_simple_event.
DATA handle      TYPE REF TO event_handler.
DATA: line(256)  TYPE c,
     text_tab    LIKE STANDARD TABLE OF line,
     field      LIKE line.
*--------------------------------------------------------------------*
* Declaracion de datos para el texto
*--------------------------------------------------------------------*
DATA: gt_THEADER LIKE THEAD.
DATA  BEGIN OF gt_TLINETAB OCCURS 10.
     INCLUDE STRUCTURE TLINE.
DATA: END OF gt_TLINETAB.
*--------------------------------------------------------------------*
* Implementacion de la Clase
*--------------------------------------------------------------------*
CLASS event_handler IMPLEMENTATION.
 METHOD handle_f1.
   DATA row TYPE i.
   MESSAGE i888(sabapdocu) WITH text-004.
   CALL METHOD sender->get_selection_pos
        IMPORTING from_line = row.
   CALL METHOD sender->get_line_text
        EXPORTING line_number = row
        IMPORTING text = field.
   CALL METHOD cl_gui_cfw=>set_new_ok_code   "raise PAI for
        EXPORTING new_code = 'F1'.           "system events
   CALL METHOD cl_gui_cfw=>flush.
 ENDMETHOD.
 METHOD handle_f4.
   DATA row TYPE i.
   MESSAGE i888(sabapdocu) WITH text-005.
   CALL METHOD sender->get_selection_pos
        IMPORTING from_line = row.
   CALL METHOD sender->get_line_text
        EXPORTING line_number = row
        IMPORTING text = field.
   CALL METHOD cl_gui_cfw=>flush.
 ENDMETHOD.
ENDCLASS.

*----->>> Crear custom container en la Dynpro, llamado 'CUST_TEXTO'
*----->>> En el PBO de la Dynpro crear modulo:
*---------------------------------------------------------------------*
*      Module  PBO_TEXTO  OUTPUT
*---------------------------------------------------------------------*
MODULE PBO_TEXTO OUTPUT.
 IF init is initial.
   init = 'X'.
*--------------------------------------------------------------------*
* Crear Control del Container
*--------------------------------------------------------------------*
   CREATE OBJECT: container EXPORTING container_name = 'CUST_TEXTO',
                  editor    EXPORTING parent = container,
                  handle.
*
   event-eventid = cl_gui_textedit=>event_f1.
   event-appl_event = ' '.                     
   APPEND event TO event_tab.
   event-eventid = cl_gui_textedit=>event_f4.
   event-appl_event = 'X'.                     
   APPEND event TO event_tab.
   CALL METHOD: editor->set_registered_events
                EXPORTING events = event_tab.
*--------------------------------------------------------------------*
*  Mostrar Status Bar en la Dynpro
*--------------------------------------------------------------------*
   CALL METHOD editor->set_toolbar_mode
     EXPORTING
       toolbar_mode = editor->false. 
   CALL METHOD editor->set_statusbar_mode
     EXPORTING
       statusbar_mode = editor->false.
*
   SET HANDLER handle->handle_f1
               handle->handle_f4 FOR editor.
 ENDIF.
 CALL METHOD editor->set_text_as_stream
   EXPORTING
     text = text_tab.
*
ENDMODULE.

*---->>> En el PAI de la Dynpro crear modulo:
*---------------------------------------------------------------------*
*      Module  PAI_TEXTO_REFRESH  INPUT
*---------------------------------------------------------------------*
MODULE PAI_TEXTO_REFRESH.
 CALL METHOD editor->get_text_as_stream
   IMPORTING
     text = text_tab.
ENDMODULE.

8
Programación ABAP / Re:Select option a tabla
« en: 24 de Abril de 2015, 05:28:45 pm »
Por nada amigo...

Suerte.

9
Programación ABAP / Re:Select option a tabla
« en: 24 de Abril de 2015, 05:44:44 am »
Estimado,

Si necesitase hacer algo como lo que dices...trataria de obtener los datos luego de hacer los select a las tablas...pero si fuese realmente necesario
utilizaria algo como lo siguiente codigo...

En la Tabla Interna : "TI_MATNR", quedarian todos los materiales

Ojo...este es un ejemplo rapido...y separe los rangos de los valores individuales solo como ejemplo...

REPORT  y_test_004.
*
TABLES : mara.
*
TYPES       : BEGIN OF ty_matnr,
                      matnr                        TYPE matnr,
                  END OF ty_matnr.
*
DATA        : ti_matnr                        TYPE SORTED TABLE OF ty_matnr
                                                      WITH UNIQUE KEY matnr,
                  wa_matnr                      LIKE LINE OF ti_matnr.
*
RANGES    : ra_matnr                       FOR mara-matnr.
*
DATA        : wr_matnr                       LIKE LINE OF ra_matnr.
*
*
*
SELECT-OPTIONS so_matnr FOR mara-matnr.
*
*
*
*----------------------------------------------------------------------------------------*
* OBTENER VALORES DE RANGOS : "BT"
*----------------------------------------------------------------------------------------*
LOOP AT so_matnr INTO wr_matnr.
  IF ( wr_matnr-option EQ 'BT' ).
    APPEND wr_matnr TO ra_matnr.
  ENDIF.
ENDLOOP.
*----------------------------------------------------------------------------------------*
* OBTENER MATERIALES EN RANGO
*----------------------------------------------------------------------------------------*
SELECT matnr INTO TABLE ti_matnr
  FROM mara CLIENT SPECIFIED
    WHERE mandt EQ sy-mandt
    AND   matnr IN ra_matnr.
*----------------------------------------------------------------------------------------*
* AGREGAR VALORES INDIVIDUALES DEL SELECT-OPTION A LA TABLA DE MATERIALES
*----------------------------------------------------------------------------------------*
LOOP AT so_matnr INTO wr_matnr.
  IF ( wr_matnr-option EQ 'EQ' ).
    CLEAR : wa_matnr.
    wa_matnr-matnr = wr_matnr-low.
    INSERT wa_matnr INTO TABLE ti_matnr.
  ENDIF.
ENDLOOP.


10
Programación ABAP / Re:Adjuntar ficheros mdf
« en: 07 de Marzo de 2015, 02:04:45 am »
Hace tiempo encontre esto en la WEB, Oajala te sriva.

Involved Classes

    CL_SQL_CONNECTION – This class handles the external DB connection. If you want to connect to any other DB other than your default DB, you need to instantiate the connection object with connection name.
    CL_SQL_STATEMENT – This class contains methods to execute the DB operations. When you instantiate an object for SQL, you can pass the Connection reference of type CL_SQL_CONNECTION. Use the Connection object if you want to execute the statement on other DB.
    CL_SQL_PREPARED_STATEMENT – This class is inherited from CL_SQL_STATEMENT. This class will accept the SQL Statement which is ready to be understood by DB. Since DB doesn’t need to convert translate this to internal format, you can execute this multiple times and improve the performance over using CL_SQL_STATEMENT.
    CL_SQL_RESULT_SET – Class would be used to get the result back from the SQL statements.
    CX_SQL_EXCEPTION – Will raise this exception if any of the error occurs

Demo Program using CL_SQL_STATEMENT

A simple demo program to read the data from default database table T100 using the provided input.

 
REPORT znp_ADBC_demo.
*
CLASS lcl_main DEFINITION.
  PUBLIC SECTION.
    METHODS:
      get_data,
      generate_output.
  PRIVATE SECTION.
    DATA: t_output TYPE STANDARD TABLE OF t100.
ENDCLASS.                    "lcl_main DEFINITION
*
 
PARAMETERS: p_arbgb TYPE t100-arbgb OBLIGATORY DEFAULT '00'.
 
START-OF-SELECTION.
  DATA: o_main TYPE REF TO lcl_main.
  CREATE OBJECT o_main.
  o_main->get_data( ).
  o_main->generate_output( ).
 
*
CLASS lcl_main IMPLEMENTATION.
  METHOD get_data.
 
    DATA:  lo_sql        TYPE REF TO cl_sql_statement,
           lo_result     TYPE REF TO cl_sql_result_set,
           lo_exc        TYPE REF TO cx_sql_exception,
           lt_cols       TYPE adbc_column_tab,
           lv_query      TYPE string,
           lo_output     TYPE REF TO data,
           dref2      TYPE REF TO data.
 
    " Fill up the columns which you want to select from the DB
    " The order should match with the output table
    APPEND 'SPRSL' TO lt_cols.
    APPEND 'ARBGB' TO lt_cols.
    APPEND 'MSGNR' TO lt_cols.
    APPEND 'TEXT' TO lt_cols.
 
    CONCATENATE
     `SELECT * `
     `FROM T100 `
     `WHERE sprsl = '` sy-langu `' `
     `AND   ARBGB = '` p_arbgb `' `
     INTO lv_query.
 
    TRY.
        CREATE OBJECT lo_sql.
        GET REFERENCE OF t_output INTO lo_output.
        lo_result = lo_sql->execute_query( lv_query ).
        lo_result->set_param_table( itab_ref = lo_output
                                    corresponding_fields = lt_cols ).
        IF lo_result->next_package( ) > 0.
          EXIT.
        ENDIF.
      CATCH cx_sql_exception INTO lo_exc.
        MESSAGE lo_exc TYPE 'I' DISPLAY LIKE 'E'.
    ENDTRY.
 
  ENDMETHOD.                    "get_Data
  METHOD generate_output.
    DATA: o_salv TYPE REF TO cl_salv_table.
 
    cl_salv_table=>factory(
      IMPORTING
        r_salv_table   = o_salv
      CHANGING
        t_table        = t_output ).
 
    o_salv->display( ).
 
  ENDMETHOD.                    "generate_otuput
ENDCLASS.                    "lcl_main IMPLEMENTATION
 

Variations

You can also provide field = ? in the Query and use the method SET_PARAM to set the proper data reference to the field in question.

 
    CONCATENATE
     `SELECT * `
     `FROM T100 `
     `WHERE sprsl = '` sy-langu `' `
     `AND   ARBGB = ?`
     INTO lv_query.
 
* After SQL Instance & Before Executing the statement
    DATA: lo_arbgb TYPE REF TO data.
    GET REFERENCE OF p_arbgb INTO lo_arbgb.
    lo_sql->set_param( lo_arbgb ).

11
Programación ABAP / Re:CONSULTA Mundo Idocs
« en: 27 de Enero de 2015, 04:21:45 am »
Fijate en este link...ahi esta explicado : https://danielpanaro.wordpress.com/tag/we20/

12
Reports / Genera Salida de como llenar una BAPI Completamente..
« en: 20 de Enero de 2015, 04:30:25 am »
REPORT y_ebf_044 NO STANDARD PAGE HEADING.
*
TABLES : tfdir.
*
*
*
PARAMETERS: pa_func             LIKE rs38l-name.
*
*
*      Fuente ABAP
DATA : lt_codfte                TYPE rswsourcet,
       wa_codfte                LIKE LINE OF lt_codfte.

*      Fuente ABAP
DATA : lt_fte_aux_00            TYPE rswsourcet,
       ld_fte_aux_00            LIKE LINE OF lt_fte_aux_00.

*      Fuente ABAP
DATA : lt_fte_aux               TYPE rswsourcet,
       wa_fte_aux               LIKE LINE OF lt_fte_aux_00.

*      Fuente ABAP
DATA : lt_fte_prefinal          TYPE rswsourcet,
       wa_fte_prefinal          LIKE LINE OF lt_fte_prefinal.

*      Fuente ABAP
DATA : lt_fte_final             TYPE rswsourcet,
       wa_fte_final             LIKE LINE OF lt_fte_prefinal.

*      Estructura interna de los datos de entorno de test
DATA : lt_datadir               TYPE STANDARD TABLE OF eudatadir WITH HEADER LINE.

*      Objetos del entorno de desarrollo
DATA : lt_eufunc                TYPE STANDARD TABLE OF eufunc WITH HEADER LINE.

*      Parametros IMPORT
DATA : lt_import                TYPE STANDARD TABLE OF rsimp WITH HEADER LINE.

*      Parametros Changing
DATA : lt_change                TYPE STANDARD TABLE OF rscha WITH HEADER LINE.

*      Pararametros EXPORT
DATA : lt_export                TYPE STANDARD TABLE OF rsexp WITH HEADER LINE.

*      Parametros TABLAS
DATA : lt_tables                TYPE STANDARD TABLE OF rstbl WITH HEADER LINE.

*      Parametros EXCEPTION
DATA : lt_except                TYPE STANDARD TABLE OF rsexc WITH HEADER LINE.

*      Biblioteca de funciones: Interfase documentación
DATA : lt_paradocu              TYPE STANDARD TABLE OF rsfdo WITH HEADER LINE.

*      Biblioteca de funciones: Parámetro Import
DATA : lt_param                 TYPE STANDARD TABLE OF rsimp WITH HEADER LINE.

*      Contador
DATA : ld_lines                 TYPE i.

*      Area de nombres
DATA : ld_namespace             LIKE rs38l-namespace.

*      Grupo funciones a la que está asignado el módulo funciones
DATA : ld_area                  LIKE rs38l-area.
*


*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pa_func.
*
  CALL FUNCTION 'RS_HELP_HANDLING'
    EXPORTING
      dynpfield                 = 'pa_func'
      dynpname                  = sy-dynnr
      object                    = 'FB'
      progname                  = 'Y_EBF_012'
      suppress_selection_screen = sy-input.

*
*
*
START-OF-SELECTION.
*
*
*
  PERFORM fu_import_interface_ext(sapms38l)
                             TABLES lt_import
                                    lt_change
                                    lt_export
                                    lt_tables
                                    lt_except
                                    lt_paradocu
                              USING pa_func.
*
  CALL FUNCTION 'FUNCTION_STUB_GENERATE'
    EXPORTING
      funcname           = pa_func
      ic_mode            = 'X'
    TABLES
      source             = lt_codfte
    EXCEPTIONS
      function_not_exist = 1
      OTHERS             = 2.
*
  IF ( sy-subrc EQ 0 ).


  ENDIF.

  DATA: ld_var_name TYPE string.
*
  FIELD-SYMBOLS: <fs> TYPE any.
*
  DATA: ld_string TYPE string.
  DATA: ld_search_string TYPE string.
*
  LOOP AT lt_codfte INTO wa_codfte.
*
    SEARCH wa_codfte FOR ' EXCEPTIONS'.
    IF ( sy-subrc EQ  0 ).
      EXIT.
    ENDIF.
    SEARCH wa_codfte FOR ' = '.
    CHECK sy-subrc EQ 0.
*
    LOOP AT lt_import.
      CONCATENATE '.' lt_import-parameter '.' INTO ld_search_string
                                              SEPARATED BY space.
*
      SEARCH wa_codfte FOR ld_search_string .
      IF ( sy-subrc EQ 0 ).
        CONCATENATE '= LD_' lt_import-parameter INTO ld_var_name.
        REPLACE '=' WITH ld_var_name INTO wa_codfte.
        MODIFY lt_codfte FROM wa_codfte.
*
        REPLACE '= LD_' WITH 'DATA: LD_' INTO ld_var_name.
        IF NOT lt_import-dbfield IS INITIAL.
          CONCATENATE ld_var_name 'TYPE' lt_import-dbfield '.'
                      INTO ld_fte_aux_00 SEPARATED BY space.
        ELSEIF lt_import-typ IS INITIAL.
          CONCATENATE ld_var_name 'TYPE'
                     'C' '.'
                     INTO ld_fte_aux_00 SEPARATED BY space.
        ELSE.
          CONCATENATE ld_var_name 'TYPE'
                     lt_import-typ '.'
                     INTO ld_fte_aux_00 SEPARATED BY space.
        ENDIF.
        APPEND ld_fte_aux_00 TO lt_fte_aux_00.
        IF lt_import-default IS INITIAL.
          CONCATENATE '* LD_' lt_import-parameter ' = '
               INTO wa_fte_aux.
        ELSE.
          CONCATENATE '* LD_' lt_import-parameter ' = '
                     lt_import-default '.'
               INTO wa_fte_aux.
        ENDIF.
        APPEND wa_fte_aux TO lt_fte_aux.
        CLEAR : wa_fte_aux.
        APPEND wa_fte_aux TO lt_fte_aux.

        lt_param-parameter = lt_import-parameter.
        lt_param-dbfield = lt_import-dbfield.
        lt_param-typ = lt_import-typ.
        APPEND lt_param.

        EXIT.
      ENDIF.
    ENDLOOP.
*
    LOOP AT lt_export.
      CONCATENATE '.' lt_export-parameter '.' INTO ld_search_string
                   SEPARATED BY space.
      SEARCH wa_codfte FOR ld_search_string .
      IF sy-subrc EQ 0.
        CONCATENATE '= LD_' lt_export-parameter INTO ld_var_name.
        REPLACE '=' WITH ld_var_name INTO wa_codfte.
        MODIFY lt_codfte FROM wa_codfte.

        REPLACE '= LD_' WITH 'DATA: LD_' INTO ld_var_name.
        IF NOT ( lt_export-dbfield IS INITIAL ).
          CONCATENATE ld_var_name 'TYPE' lt_export-dbfield '.'
                      INTO ld_fte_aux_00 SEPARATED BY space.
        ELSEIF lt_export-typ IS INITIAL.
          CONCATENATE ld_var_name 'TYPE'
                     'C' '.'
                     INTO ld_fte_aux_00 SEPARATED BY space.
*
        ELSE.
          CONCATENATE ld_var_name 'TYPE'
                     lt_export-typ '.'
                     INTO ld_fte_aux_00 SEPARATED BY space.
        ENDIF.
        APPEND ld_fte_aux_00 TO lt_fte_aux_00.

        EXIT.
      ENDIF.
    ENDLOOP.
*
    LOOP AT lt_change.
      CONCATENATE '.' lt_change-parameter '.' INTO ld_search_string
      SEPARATED BY space.
      SEARCH wa_codfte FOR ld_search_string .
      IF ( sy-subrc EQ 0 ).
        CONCATENATE '= LD_' lt_change-parameter INTO ld_var_name.
        REPLACE '=' WITH ld_var_name INTO wa_codfte.

        MODIFY lt_codfte FROM wa_codfte.

        REPLACE '= LD_' WITH 'DATA: LD_' INTO ld_var_name.
        IF NOT lt_change-dbfield IS INITIAL.
          CONCATENATE ld_var_name 'TYPE' lt_change-dbfield '.'
                      INTO ld_fte_aux_00 SEPARATED BY space.

        ELSEIF lt_change-typ IS INITIAL.
          CONCATENATE ld_var_name 'TYPE'
                     'C' '.'
                     INTO ld_fte_aux_00 SEPARATED BY space.
        ELSE.
          CONCATENATE ld_var_name 'TYPE'
                     lt_change-typ '.'
                     INTO ld_fte_aux_00 SEPARATED BY space.
        ENDIF.
        APPEND ld_fte_aux_00 TO lt_fte_aux_00.

        CONCATENATE '* LD_' lt_change-parameter   ' = '
                    lt_change-default
               INTO wa_fte_aux.
        APPEND wa_fte_aux TO lt_fte_aux.
        CLEAR : wa_fte_aux.
        APPEND wa_fte_aux TO lt_fte_aux.

        lt_param-parameter = lt_change-parameter.
        lt_param-dbfield = lt_change-dbfield.
        lt_param-typ = lt_change-typ.
        APPEND lt_param.

        EXIT.
      ENDIF.
    ENDLOOP.

    LOOP AT lt_tables.
      CONCATENATE '.' lt_tables-parameter '.' INTO ld_search_string
      SEPARATED BY space.
      SEARCH wa_codfte FOR ld_search_string .
      IF ( sy-subrc EQ 0 ).
        CONCATENATE '= LT_' lt_tables-parameter INTO ld_var_name.
        REPLACE '=' WITH ld_var_name INTO wa_codfte.
        MODIFY lt_codfte FROM wa_codfte.

        REPLACE '= LT_' WITH 'DATA: LT_' INTO ld_var_name.
        IF NOT ( lt_tables-dbstruct IS INITIAL ).
          CONCATENATE ld_var_name 'TYPE standard table of '
                      lt_tables-dbstruct '.'
                      INTO ld_fte_aux_00 SEPARATED BY space.

        ELSEIF ( lt_tables-typ IS INITIAL ).
          CONCATENATE ld_var_name 'TYPE standard table of '
                     'char255' '.'
                     INTO ld_fte_aux_00 SEPARATED BY space.
        ELSE.
          CONCATENATE ld_var_name 'TYPE'
                     lt_tables-typ '.'
                     INTO ld_fte_aux_00 SEPARATED BY space.

        ENDIF.
        APPEND ld_fte_aux_00 TO lt_fte_aux_00.

        CONCATENATE 'DATA: WA_' lt_tables-parameter  space
                    ' LIKE LINE OF LT_' lt_tables-parameter '.'
                    INTO ld_fte_aux_00.
        APPEND ld_fte_aux_00 TO lt_fte_aux_00.

*
        DATA : lt_dfies_tab TYPE STANDARD TABLE OF dfies WITH HEADER LINE.
        DATA : ld_tabname TYPE ddobjname.

        ld_tabname = lt_tables-dbstruct.

        CALL FUNCTION 'DDIF_FIELDINFO_GET'
          EXPORTING
            tabname        = ld_tabname
          TABLES
            dfies_tab      = lt_dfies_tab
          EXCEPTIONS
            not_found      = 1
            internal_error = 2
            OTHERS         = 3.

        IF ( sy-subrc EQ 0 ).

        ENDIF.

        IF ( lt_dfies_tab[] IS INITIAL ).

          CONCATENATE '* WA_' lt_tables-parameter  ' = '
                 INTO wa_fte_aux.

          APPEND wa_fte_aux TO lt_fte_aux.
        ELSE.
          LOOP AT lt_dfies_tab.

            CONCATENATE '* WA_' lt_tables-parameter '-'
                        lt_dfies_tab-fieldname ' = '
                   INTO wa_fte_aux.

            APPEND wa_fte_aux TO lt_fte_aux.
          ENDLOOP.
        ENDIF.


        CONCATENATE '* APPEND WA_' lt_tables-parameter ' TO '
               ' LT_' lt_tables-parameter
               INTO wa_fte_aux.
        APPEND wa_fte_aux TO lt_fte_aux.
        CLEAR : wa_fte_aux.
        APPEND wa_fte_aux TO lt_fte_aux.

        EXIT.
      ENDIF.
    ENDLOOP.
  ENDLOOP.


  LOOP AT lt_fte_aux_00 INTO ld_fte_aux_00.
    WRITE : / ld_fte_aux_00.
    APPEND  ld_fte_aux_00  TO lt_fte_prefinal.
    APPEND  ld_fte_aux_00 TO lt_fte_final.


  ENDLOOP.
  APPEND INITIAL LINE TO lt_fte_prefinal.
  APPEND INITIAL LINE TO lt_fte_final.
  WRITE : /.

  LOOP AT lt_fte_aux INTO wa_fte_aux.
    WRITE : / wa_fte_aux.
    APPEND  wa_fte_aux  TO lt_fte_prefinal.
  ENDLOOP.
  WRITE : /.


  LOOP AT lt_codfte INTO wa_codfte.
    REPLACE '"' WITH '*' INTO wa_codfte.
    MODIFY lt_codfte FROM wa_codfte.


    WRITE : / wa_codfte.
    APPEND  wa_codfte  TO lt_fte_prefinal.
    APPEND  wa_codfte TO lt_fte_final.
  ENDLOOP.
*

13
Reports / Leer Valores Fijos de un Dominio
« en: 20 de Enero de 2015, 03:36:39 am »
Este es un pequeño ejemplo de como leer los valores fijos asociados a un Dominio.
*

REPORT y_ebf_012 NO STANDARD PAGE HEADING.

*
DATA    : it_dd07v                TYPE STANDARD TABLE OF dd07v,
              wa_dd07v              LIKE LINE OF it_dd07v.
*
*
PARAMETERS : pa_dom             LIKE dcobjdef-name OBLIGATORY.
*
*

START-OF-SELECTION.

  REFRESH : it_dd07v.
  CLEAR    : it_dd07v.
*
  CALL FUNCTION 'DDIF_DOMA_GET'
    EXPORTING
      name          = pa_dom
      langu         = sy-langu
    TABLES
      dd07v_tab     = it_dd07v
    EXCEPTIONS
      illegal_input = 1
      OTHERS        = 2.
*
  IF ( sy-subrc EQ 0 ).
*
    IF ( sy-subrc EQ 0 ).
      LOOP AT it_dd07v INTO wa_dd07v.
*
        WRITE / : wa_dd07v-domvalue_l.
        WRITE   : wa_dd07v-ddtext.
*
      ENDLOOP.
*
    ENDIF.
*
  ENDIF.

14
Programación ABAP / Re:Cambio de codigo de transaccion en viajes
« en: 11 de Enero de 2015, 03:31:29 am »
Estimado,

Las transacciones que mencionas pertenecen al paquete "PTRP_ADDON".

Puedes porbar con la SE80 y en paquete colocar "PTRP_ADDON"

Ahi te saldran todos los objetos de este paquete y en Ampliaciones pudes ver las BADI's que hay disponibles

Espero esto te ayude.

15
Programación ABAP / Re:IDOC DEBMAS
« en: 11 de Enero de 2015, 03:17:33 am »
Estimado,

-  Adicionalmente hay otro Exit es el : VSV00001 EXIT_SAPLVV01_001 Outbound: Create additional customer master segments

-  Tambien Puedes probar buscando en la SE84
    ->Ampliaciones
        ->Puntos de Ampliacion
    - En paquete coloca : "VSV" y presiona F8  ahi te saldran una lista de puntos de ampliacion que puedes investigar.
      - ES_RBDFEDEB
      - ES_RBDSEDEB
      - ES_SAPLKD01
      - ES_SAPLKD02
      - ES_SAPLVV01
      - ES_SAPLVV02
      - ES_VVSCONST

-  Lo otro que se me ocurre es buscar una BADI de la siguiente forma :
     - Ir a la transacción SE24
     - Ingresar clase CL_EXITHANDLER
     - Ingresás en el método GET_INSTANCE de esta clase y ponés un break-point en CALL METHOD cl_exithandler=>get_class_name_by_interface.

     - Ahora ejecutás tu transacción normalmente y te fijás si frena en el momento deseado. Va a frenar en muchos lugares porque va a frenar en todas
       las BADI's por las que pases, por lo que te recomiendo que pongas el break justo en el momento en que deseás ver si existe una BADI.
       En la variable EXIT_NAME vas a encotrar el nombre de la BADI.


-  Por ultimo recuerda que para leer ese campo que dices de largo 1000 se hace mas o menos de la siguiente forma :

       DATA : kna1m   TYPE e1kna1m.
       LOOP AT IDOC_DATA.
         CASE idoc_data-segnam.
           WHEN 'E1KNA1M'.
             kna1m = idoc_data-sdata.
*
*             AQUI TU CODIGO
*
         ENDCASE.                             
       ENDLOOP.

Ojala esto te ayude en algo.

Páginas: [1] 2 3 ... 6