Difference between revisions of "SAP ABAP VARIOS"

From SapWiki
Line 48: Line 48:
 
   
 
   
 
  ENDFORM.                    "get_domvalue
 
  ENDFORM.                    "get_domvalue
 +
 +
==Bajar tabla en formato CSV (función hr_cl_if_prvd_generate_file) ==
 +
FUNCTION hr_cl_if_prvd_generate_file.
 +
*"----------------------------------------------------------------------
 +
*"*"Local Interface:
 +
*"  TABLES
 +
*"      IT_DATA TYPE  STANDARD TABLE
 +
*"----------------------------------------------------------------------
 +
  FIELD-SYMBOLS: <f_source>.
 +
 +
  TYPES data_c(4096) TYPE c.
 +
  TYPES t_data_c TYPE data_c OCCURS 0.
 +
 +
  CONSTANTS: c_field_separator TYPE c VALUE ';',
 +
              c_darl_number(12)    TYPE c VALUE '1234567890 '.
 +
 +
  DATA: lt_data_csv      TYPE t_data_c,
 +
        l_struc_index    TYPE syindex,
 +
        l_len_string    TYPE i,
 +
        l_max_field      TYPE data_c,
 +
        l_struc_raw_data TYPE data_c,
 +
        l_start_string  TYPE i,
 +
        l_len_field_sep  TYPE i,
 +
        l_type,
 +
        l_date_extern(30) TYPE c,
 +
        l_help_id LIKE tline-tdline,
 +
        l_tabix TYPE sytabix.
 +
 +
  l_len_field_sep = STRLEN( c_field_separator ).
 +
 +
  LOOP AT it_data.
 +
    CLEAR: l_struc_index, l_len_string, l_struc_raw_data, l_start_string.
 +
    DO.
 +
      ADD 1 TO l_struc_index.
 +
      CLEAR l_len_string.
 +
      ASSIGN COMPONENT l_struc_index OF STRUCTURE it_data TO <f_source>.
 +
      IF sy-subrc <> '0'.
 +
        EXIT.
 +
      ELSE.
 +
*        *      special processing when field is type data
 +
        DESCRIBE FIELD <f_source> TYPE l_type.
 +
        CASE l_type.
 +
          WHEN 'P'.
 +
            WRITE <f_source> TO l_date_extern.
 +
            CATCH SYSTEM-EXCEPTIONS conversion_errors  = 4.
 +
              IF sy-subrc <> '0'.
 +
                MESSAGE e899(ux) WITH l_type <f_source> l_help_id
 +
                                      l_tabix RAISING conversion_failed.
 +
              ENDIF.
 +
            ENDCATCH.
 +
            ASSIGN l_date_extern TO <f_source>.
 +
          WHEN 'X'.
 +
            ASSIGN COMPONENT l_struc_index OF
 +
                    STRUCTURE it_data TO <f_source> TYPE 'C'.
 +
            WRITE <f_source> TO l_date_extern.
 +
            ASSIGN l_date_extern TO <f_source>.
 +
          WHEN 'T'.
 +
            CLEAR l_date_extern.
 +
            l_date_extern(2) = <f_source>(2).
 +
            l_date_extern+2(1) = ':'.
 +
            l_date_extern+3(2) = <f_source>+2(2).
 +
            l_date_extern+5(1) = ':'.
 +
            l_date_extern+6(2) = <f_source>+4(2).
 +
            ASSIGN l_date_extern TO <f_source>.
 +
          WHEN 'D'.
 +
            CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
 +
              EXPORTING
 +
                date_internal = <f_source>
 +
              IMPORTING
 +
                date_external = l_date_extern
 +
              EXCEPTIONS
 +
                OTHERS        = 4.
 +
            IF sy-subrc <> 0.
 +
              MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
 +
                    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
 +
                    RAISING conversion_failed.
 +
            ELSE.
 +
              ASSIGN l_date_extern TO <f_source>.
 +
            ENDIF.
 +
          WHEN 'F'.
 +
            CALL FUNCTION 'FLTP_CHAR_CONVERSION'
 +
              EXPORTING
 +
                input  = <f_source>
 +
              IMPORTING
 +
                flstr  = l_date_extern
 +
              EXCEPTIONS
 +
                OTHERS = 4.
 +
            IF sy-subrc <> 0.
 +
              MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
 +
                    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
 +
                    RAISING conversion_failed.
 +
            ELSE.
 +
              ASSIGN l_date_extern TO <f_source>.
 +
            ENDIF.
 +
          WHEN OTHERS.
 +
        ENDCASE.
 +
*        remember der seperation character!
 +
        IF l_struc_index <> 1.
 +
          l_max_field+l_len_string(l_len_field_sep) = c_field_separator.
 +
          l_len_string = l_len_field_sep.
 +
        ENDIF.
 +
        IF <f_source> CO c_darl_number.
 +
          CONDENSE <f_source> NO-GAPS.
 +
        ELSE.
 +
          CONDENSE <f_source>.
 +
        ENDIF.
 +
        l_max_field+l_len_string = <f_source>.
 +
        l_len_string = STRLEN( l_max_field ).
 +
        CHECK l_len_string <> '0'.
 +
        l_struc_raw_data+l_start_string(l_len_string) = l_max_field.
 +
        l_start_string = l_start_string + l_len_string.
 +
      ENDIF.
 +
    ENDDO.
 +
    IF NOT l_struc_raw_data IS INITIAL.
 +
      APPEND l_struc_raw_data TO lt_data_csv.
 +
    ENDIF.
 +
  ENDLOOP.
 +
 +
  CALL FUNCTION 'HR_99S_DOWNLOAD'
 +
    EXPORTING
 +
      p_initial_directory    = 'C:\'
 +
      p_filename              = 'PREVIRED.txt'
 +
      p_filetype              = 'ASC'
 +
      p_write_lf              = 'X'
 +
      p_trunc_blanks_eol      = 'X'
 +
      p_trunc_blanks          = ' '
 +
    TABLES
 +
      data_tab                = lt_data_csv
 +
    EXCEPTIONS
 +
      file_save_dialog        = 1
 +
      file_write_error        = 2
 +
      no_batch                = 3
 +
      gui_refuse_filetransfer = 4
 +
      invalid_type            = 5
 +
      unknown_error          = 6
 +
      wrong_tab_format        = 7
 +
      OTHERS                  = 8.
 +
  IF sy-subrc <> 0.
 +
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
 +
*        WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
 +
  ENDIF.
 +
 +
ENDFUNCTION.

Revision as of 18:03, 27 March 2020

UUID ver nota 935047 - Creating and using GUIDs (UUIDs)

FORM generar_iddocumento_2 CHANGING p_resultado.
  DATA lcl_request_id TYPE guid_32.

  TRY.
      lcl_request_id = cl_system_uuid=>create_uuid_c32_static( ).
    CATCH cx_uuid_error.
      ASSERT 1 = 0.
  ENDTRY.

  MOVE lcl_request_id TO p_resultado.
ENDFORM.

Grabar XSTRING en equipo como Binario(XML,PDF,etc.)

CONCATENATE ls_dir_d '\' i_vbeln '.xml'
             INTO ls_fullpath.
CALL METHOD cl_faa_tenv_services=>gui_download_xstring
  EXPORTING
    id_fullpath = ls_fullpath
    id_xstring  = i_xml.
IF sy-subrc <> 0.
ENDIF.

Obtener Texto según Valor de dominio

FORM get_domvalue USING p_domname p_value CHANGING p_text.
  DATA: l_domvalue TYPE dd07v-domvalue_l,
        l_ddtext TYPE dd07v-ddtext.

  l_domvalue = p_value.

  CALL FUNCTION 'DOMAIN_VALUE_GET'
    EXPORTING
      i_domname  = p_domname
      i_domvalue = l_domvalue
    IMPORTING
      e_ddtext   = l_ddtext
    EXCEPTIONS
      not_exist  = 1
      OTHERS     = 2.
  IF sy-subrc = 0.
    MOVE l_ddtext TO p_text.
  ELSE.
    CLEAR p_text.
  ENDIF.

ENDFORM.                    "get_domvalue

Bajar tabla en formato CSV (función hr_cl_if_prvd_generate_file)

FUNCTION hr_cl_if_prvd_generate_file.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  TABLES
*"      IT_DATA TYPE  STANDARD TABLE
*"----------------------------------------------------------------------
  FIELD-SYMBOLS: <f_source>.

  TYPES data_c(4096) TYPE c.
  TYPES t_data_c TYPE data_c OCCURS 0.

  CONSTANTS: c_field_separator TYPE c VALUE ';',
             c_darl_number(12)     TYPE c VALUE '1234567890 '.

  DATA: lt_data_csv      TYPE t_data_c,
        l_struc_index    TYPE syindex,
        l_len_string     TYPE i,
        l_max_field      TYPE data_c,
        l_struc_raw_data TYPE data_c,
        l_start_string   TYPE i,
        l_len_field_sep  TYPE i,
        l_type,
        l_date_extern(30) TYPE c,
        l_help_id LIKE tline-tdline,
        l_tabix TYPE sytabix.

  l_len_field_sep = STRLEN( c_field_separator ).

  LOOP AT it_data.
    CLEAR: l_struc_index, l_len_string, l_struc_raw_data, l_start_string.
    DO.
      ADD 1 TO l_struc_index.
      CLEAR l_len_string.
      ASSIGN COMPONENT l_struc_index OF STRUCTURE it_data TO <f_source>.
      IF sy-subrc <> '0'.
        EXIT.
      ELSE.
*         *       special processing when field is type data
        DESCRIBE FIELD <f_source> TYPE l_type.
        CASE l_type.
          WHEN 'P'.
            WRITE <f_source> TO l_date_extern.
            CATCH SYSTEM-EXCEPTIONS conversion_errors  = 4.
              IF sy-subrc <> '0'.
                MESSAGE e899(ux) WITH l_type <f_source> l_help_id
                                      l_tabix RAISING conversion_failed.
              ENDIF.
            ENDCATCH.
            ASSIGN l_date_extern TO <f_source>.
          WHEN 'X'.
            ASSIGN COMPONENT l_struc_index OF
                    STRUCTURE it_data TO <f_source> TYPE 'C'.
            WRITE <f_source> TO l_date_extern.
            ASSIGN l_date_extern TO <f_source>.
          WHEN 'T'.
            CLEAR l_date_extern.
            l_date_extern(2) = <f_source>(2).
            l_date_extern+2(1) = ':'.
            l_date_extern+3(2) = <f_source>+2(2).
            l_date_extern+5(1) = ':'.
            l_date_extern+6(2) = <f_source>+4(2).
            ASSIGN l_date_extern TO <f_source>.
          WHEN 'D'.
            CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
              EXPORTING
                date_internal = <f_source>
              IMPORTING
                date_external = l_date_extern
              EXCEPTIONS
                OTHERS        = 4.
            IF sy-subrc <> 0.
              MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
                    RAISING conversion_failed.
            ELSE.
              ASSIGN l_date_extern TO <f_source>.
            ENDIF.
          WHEN 'F'.
            CALL FUNCTION 'FLTP_CHAR_CONVERSION'
              EXPORTING
                input  = <f_source>
              IMPORTING
                flstr  = l_date_extern
              EXCEPTIONS
                OTHERS = 4.
            IF sy-subrc <> 0.
              MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
                    RAISING conversion_failed.
            ELSE.
              ASSIGN l_date_extern TO <f_source>.
            ENDIF.
          WHEN OTHERS.
        ENDCASE.
*        remember der seperation character!
        IF l_struc_index <> 1.
          l_max_field+l_len_string(l_len_field_sep) = c_field_separator.
          l_len_string = l_len_field_sep.
        ENDIF.
        IF <f_source> CO c_darl_number.
          CONDENSE <f_source> NO-GAPS.
        ELSE.
          CONDENSE <f_source>.
        ENDIF.
        l_max_field+l_len_string = <f_source>.
        l_len_string = STRLEN( l_max_field ).
        CHECK l_len_string <> '0'.
        l_struc_raw_data+l_start_string(l_len_string) = l_max_field.
        l_start_string = l_start_string + l_len_string.
      ENDIF.
    ENDDO.
    IF NOT l_struc_raw_data IS INITIAL.
      APPEND l_struc_raw_data TO lt_data_csv.
    ENDIF.
  ENDLOOP.

  CALL FUNCTION 'HR_99S_DOWNLOAD'
    EXPORTING
      p_initial_directory     = 'C:\'
      p_filename              = 'PREVIRED.txt'
      p_filetype              = 'ASC'
      p_write_lf              = 'X'
      p_trunc_blanks_eol      = 'X'
      p_trunc_blanks          = ' '
    TABLES
      data_tab                = lt_data_csv
    EXCEPTIONS
      file_save_dialog        = 1
      file_write_error        = 2
      no_batch                = 3
      gui_refuse_filetransfer = 4
      invalid_type            = 5
      unknown_error           = 6
      wrong_tab_format        = 7
      OTHERS                  = 8.
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDFUNCTION.