A tool for downloading an idoc structure and data to Excel

Here's a program/tool to download an idoc structure and its data in MS-Excel format.

Here's a program/tool to download an idoc structure and its data in MS-Excel format. The tool extracts information like segment, field, occurrences, length, byte first, byte last, field value, qualifier meaning (if value is a qualifier), description in addition to the control record data. This tool can be used to build mapping specifications.


REPORT Z_DISPLAY_IDOC_AND_DATA line-size 275. 
************************************************************************ 
* Author: Amith Nikam,                                              * 
* Version : 2.0                                                        * 
* Date : 9/9/02                                                        * 
* This tool reads an existing Idoc and dispays the contents in a       * 
* spreadsheet format. The spreadsheet (MS-EXCEL) will be automatically * 
* created if D_EXCEL = 'X'.                                            * 
************************************************************************ 

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, 
           d_excel as checkbox default 'X'. "Download ? 

start-of-selection. 
  perform read_idoc. 
  perform process_idoc. 
  if d_excel = 'X'. 
    perform download_to_excel. 
  endif. 

end-of-selection. 

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. 
  perform read_idoc_structure. 
  perform display_data_records. 
ENDFORM.                    " process_idoc 

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(1) type x 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. 
      if d_excel = 'X'. 
        concatenate 'Segment Name' tab_cr 
                    'Mand / Opt ' tab_cr 
                    'Qual / non-Qual' tab_cr 
                    'Seq of Max' tab_cr 
                    'Level' tab_cr 
                    'Owner' tab_cr 
                    'Description' 
                    into excel_tab. 
        append excel_tab. 
        concatenate IDOC_STRUCT_wa-SEGMENT_TYPE tab_cr 
              tmp_str tab_cr 
              TMP_STR3 tab_cr 
              tmp_str2 tab_cr 
              IDOC_STRUCT_wa-SYNTAX_ATTRIB-HLEVEL tab_cr 
              IDOC_STRUCT_wa-SEGMENT_TYPE_ATTRIB-plast tab_cr 
              IDOC_STRUCT_wa-SEGMENT_TYPE_ATTRIB-DESCRP 
              into excel_tab. 
        append excel_tab. 
        concatenate tab_cr 
                    'Field Nma' tab_cr 
                    'Type' tab_cr 
                    'Length' tab_cr 
                    'Byte From' tab_cr 
                    'Byte To' tab_cr 
                    'Description' tab_cr 
                    'Value' tab_cr 
                    'Qualifier Meaning' 
                    into excel_tab. 
        append excel_tab. 
      endif. 
    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. 
      if d_excel = 'X'. 
        concatenate tab_cr pt_fields2-fieldname tab_cr 
                pt_fields2-datatype tab_cr 
                pt_fields2-EXTLEN tab_cr 
                pt_fields2-byte_first tab_cr 
                pt_fields2-byte_last tab_cr 
                pt_fields2-descrp tab_cr 
                field_val tab_cr 
                pt_fvalues2-descrp 
                into excel_tab. 
        append excel_tab. 
      endif. 
    endloop. 
  endloop. 
ENDFORM.                    " display_data_records 

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 

FORM download_to_excel. 
  data: name like RLGRAP-FILENAME. 

  shift docnum left deleting leading '0'. 
  concatenate docnum '-' idoc_control-idoctp '.xls' 
              into name. 



  CALL FUNCTION 'RH_START_EXCEL_WITH_DATA' 
   EXPORTING 
     DATA_NAME                 = name 
     DATA_TYPE                 = 'ASC' 
     WAIT                      = ' ' 
   TABLES 
     DATA_TAB                  = excel_tab 
   EXCEPTIONS 
     NO_BATCH                  = 1 
     EXCEL_NOT_INSTALLED       = 2 
     WRONG_VERSION             = 3 
     INTERNAL_ERROR            = 4 
     INVALID_TYPE              = 5 
     CANCELLED                 = 6 
     DOWNLOAD_ERROR            = 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. 

ENDFORM.                    " download_to_excel

This was first published in January 2003

Dig deeper on SAP Basis administration and NetWeaver administration

Pro+

Features

Enjoy the benefits of Pro+ membership, learn more and join.

0 comments

Oldest 

Forgot Password?

No problem! Submit your e-mail address below. We'll send you an email containing your password.

Your password has been sent to:

-ADS BY GOOGLE

SearchManufacturingERP

SearchOracle

SearchDataManagement

SearchAWS

SearchBusinessAnalytics

SearchCRM

SearchContentManagement

SearchFinancialApplications

Close