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 last published in January 2003

Dig Deeper on SAP Basis administration and NetWeaver administration

PRO+

Content

Find more PRO+ content and other member only offers, here.

Start the conversation

Send me notifications when other members comment.

By submitting you agree to receive email from TechTarget and its partners. If you reside outside of the United States, you consent to having your personal data transferred to and processed in the United States. Privacy

Please create a username to comment.

-ADS BY GOOGLE

SearchManufacturingERP

SearchOracle

SearchDataManagement

SearchAWS

SearchBusinessAnalytics

SearchCRM

SearchContentManagement

SearchFinancialApplications

Close