Monday, April 2, 2012

Generate XML file for Company Sales data

Hi All,
Today I am going to write a new program to generate XML format file output.

 It's a report program with some input selection parameters and brings out a XML file in output.

 I used this program to create XML file for 'Company Sales Data', which is used to upload on government portal. I hope this will help others for creating the similar requirement.

 Selection Screen
******************* Downloaded XML File Output format
REPORT  ZSD_XML_DOWNLOAD.
************************************************************************
*                      Data Declaration                                *
************************************************************************
TYPE-POOLSIXML.

TABLESVBRK,VBRP,KNA1.

TYPESBEGIN OF TY_DATA,
        VBELN TYPE VBRK-VBELN,
        VBTYP TYPE VBRK-VBTYP,
        FKDAT TYPE VBRK-FKDAT,
        KUNRG TYPE VBRK-KUNRG,
        BUKRS TYPE VBRK-BUKRS,

        POSNR TYPE VBRP-POSNR,
        FKIMG TYPE VBRP-FKIMG,
        VRKME TYPE VBRP-VRKME,
        VGBEL TYPE VBRP-VGBEL,
        MATNR TYPE VBRP-MATNR,
        MATKL TYPE VBRP-MATKL,
       END OF TY_DATA.

TYPESBEGIN OF TY_OUTPUT,
        BUKRS TYPE CHAR6,"VBRK-BUKRS,    "Company Code
        VBELN TYPE VBRK-VBELN,    "Invoice
        FKDAT TYPE STRING,    "Invoice Date
        REGIO TYPE KNA1-REGIO,    "State Id
        BZIRK TYPE KNVV-BZIRK,    "Sales District
        WHID  TYPE STRING,        "WareHouse Id
        KUNRG TYPE VBRK-KUNRG,    "Payer    "Dealer Id

        MATNR TYPE VBRP-MATNR,    "Product
        VRKME TYPE VBRP-VRKME,    "Sales Unit
        FKIMG TYPE VBRP-FKIMG,    "Quantity

       END OF TY_OUTPUT.

TYPESBEGIN OF TY_KUNNR,
        VBELN TYPE LIKP-VBELN,
        KUNNR TYPE LIKP-KUNNR,
       END OF TY_KUNNR.

DATAIT_DATA   TYPE STANDARD TABLE OF TY_DATA,
      IT_KUNNR  TYPE STANDARD TABLE OF TY_KUNNR,
      IT_KNA1   TYPE STANDARD TABLE OF KNA1,
      IT_OUTPUT TYPE STANDARD TABLE OF TY_OUTPUT,
      WA_OUTPUT TYPE TY_OUTPUT,
      WA_OUTPUT1 TYPE TY_OUTPUT,
      WA_DATA   TYPE TY_DATA,
      WA_KUNNR  TYPE TY_KUNNR,
      WA_KNA1   TYPE KNA1.

DATAIT_ZFMSCC     TYPE STANDARD TABLE OF ZFMSCC,
      IT_ZFMSCUST   TYPE STANDARD TABLE OF ZFMSCUST,
      IT_ZFMSDIST   TYPE STANDARD TABLE OF ZFMSDIST,
      IT_ZFMSSTATE  TYPE STANDARD TABLE OF ZFMSSTATE,
      IT_ZFMSWH     TYPE STANDARD TABLE OF ZFMSWH,
      IT_ZFMSUNIT   TYPE STANDARD TABLE OF ZFMSUNIT,
      WA_ZFMSCC     TYPE ZFMSCC,
      WA_ZFMSCUST   TYPE ZFMSCUST,
      WA_ZFMSSTATE  TYPE ZFMSSTATE,
      WA_ZFMSDIST   TYPE ZFMSDIST,
      WA_ZFMSWH     TYPE ZFMSWH,
      WA_ZFMSUNIT   TYPE ZFMSUNIT.
************************************************************************
*                      Selection Screen                                *
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
SELECT-OPTIONSS_FKDAT FOR VBRK-FKDAT,
                S_WERKS FOR VBRP-WERKS,
                S_LGORT FOR VBRP-LGORT,
                S_MATKL FOR VBRP-MATKL,
                S_SPART FOR VBRK-SPART.
SELECTION-SCREEN END OF BLOCK B1.

SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME.
PARAMETERS P_FILE LIKE RLGRAP-FILENAME OBLIGATORY .
SELECTION-SCREEN END OF BLOCK B2.

************************************************************************
*                    At Selection Screen                               *
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.

  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      PROGRAM_NAME  SYST-CPROG
      DYNPRO_NUMBER SYST-DYNNR
      FIELD_NAME    ' '
    IMPORTING
      FILE_NAME     P_FILE.

************************************************************************
*                      Start of Selection                              *
************************************************************************
START-OF-SELECTION.

  PERFORM GET_DATA.

  PERFORM BUILD_OUTPUT.

  PERFORM BUILD_XML_FILE.

*  PERFORM DOWNLOAD_FILE.
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_DATA .

  SELECT K~VBELN K~VBTYP K~FKDAT K~KUNRG K~BUKRS P~POSNR P~FKIMG P~VRKME P~VGBEL P~MATNR P~MATKL
    INTO TABLE IT_DATA
    FROM VBRK AS K
    INNER JOIN VBRP AS ON P~VBELN K~VBELN
    WHERE K~VBTYP 'M' OR K~VBTYP 'U' "AND ( K~VBTYP = 'M' AND P~WERKS NOT LIKE 'DP%' ) )
      AND K~FKDAT IN S_FKDAT
      AND K~FKSTO SPACE
      AND K~RFBSK <> 'E'
      AND K~SPART IN S_SPART                                  "Inserted 02-03-2012
      AND P~WERKS IN S_WERKS
      AND P~LGORT IN S_LGORT
      AND P~MATKL IN S_MATKL.
  IF SY-SUBRC EQ 0.
    SORT IT_DATA BY VBELN POSNR.
*Get Ship to party details
    SELECT VBELN KUNNR INTO TABLE IT_KUNNR
      FROM LIKP
      FOR ALL ENTRIES IN IT_DATA
      WHERE VBELN IT_DATA-VGBEL.

    SELECT FROM KNA1 INTO TABLE IT_KNA1
      FOR ALL ENTRIES IN IT_KUNNR
      WHERE KUNNR IT_KUNNR-KUNNR.
  ENDIF.

  DATAL_TABIX TYPE SY-TABIX,
        L_WERKS TYPE LIKP-WERKS.
  CLEARL_TABIX,L_WERKS.

  LOOP AT IT_DATA INTO WA_DATA.
    L_TABIX SY-TABIXCLEAR L_WERKS.

    IF WA_DATA-VBTYP 'U'.

      SELECT SINGLE WERKS INTO L_WERKS
      FROM LIKP
      WHERE VBELN WA_DATA-VGBEL
        AND WERKS LIKE 'DP%'.
      IF L_WERKS IS INITIAL.
        DELETE IT_DATA INDEX L_TABIX.
        CONTINUE.
      ENDIF.

    ELSEIF WA_DATA-VBTYP 'M'.

      SELECT SINGLE WERKS INTO L_WERKS
      FROM LIPS "LIKP
      WHERE VBELN WA_DATA-VGBEL
        AND WERKS NOT LIKE 'DP%'.
      IF L_WERKS IS INITIAL.
        DELETE IT_DATA INDEX L_TABIX.
        CONTINUE.
      ENDIF.

    ENDIF.

    MOVE-CORRESPONDING WA_DATA TO WA_OUTPUT.

    READ TABLE IT_KUNNR INTO WA_KUNNR WITH KEY VBELN WA_DATA-VGBEL.

    READ TABLE IT_KNA1 INTO WA_KNA1 WITH KEY KUNNR WA_KUNNR-KUNNR.
    IF WA_KNA1-REGIO IS NOT INITIAL.
      WA_OUTPUT-REGIO  WA_KNA1-REGIO.
    ENDIF.

    SELECT SINGLE BZIRK FROM KNVV INTO WA_OUTPUT-BZIRK
      WHERE KUNNR WA_KUNNR-KUNNR
       AND  BZIRK <> SPACE.

    COLLECT WA_OUTPUT INTO IT_OUTPUT.
    CLEAR WA_OUTPUT.
  ENDLOOP.

  IF IT_OUTPUT IS INITIAL.
    MESSAGE 'No Records exist' TYPE 'I'.
  ENDIF.
ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  DOWNLOAD_FILE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DOWNLOAD_FILE .

**  DATA:  L_XML  TYPE REF TO CL_XML_DOCUMENT.
**
*** CREATE THE XML OBJECT
**  CREATE OBJECT L_XML.
**
*** CONVERT THE DATA TO XML
**  CALL METHOD L_XML->CREATE_WITH_DATA( DATAOBJECT = IT_OUTPUT[] ).
**
***  CALL METHOD L_XML->CREATE_WITH_TABLE( TABLE = IT_OUTPUT[] ).
**
*** DATA IS CONVERTED TO XML; DISPLAY THE XML-DOCUMENT
**  CALL METHOD L_XML->DISPLAY.


*  CALL FUNCTION 'GUI_DOWNLOAD'
*    EXPORTING
*      FILENAME                = 'C:\DATA\company_sales_data.txt'
*      FILETYPE                = 'ASC'
*      WRITE_FIELD_SEPARATOR   = ' '
*    TABLES
*      DATA_TAB                = IT_OUTPUT
*    EXCEPTIONS
*      FILE_WRITE_ERROR        = 1
*      NO_BATCH                = 2
*      GUI_REFUSE_FILETRANSFER = 3
*      INVALID_TYPE            = 4
*      NO_AUTHORITY            = 5
*      UNKNOWN_ERROR           = 6
*      HEADER_NOT_ALLOWED      = 7
*      SEPARATOR_NOT_ALLOWED   = 8
*      FILESIZE_NOT_ALLOWED    = 9
*      HEADER_TOO_LONG         = 10
*      DP_ERROR_CREATE         = 11
*      DP_ERROR_SEND           = 12
*      DP_ERROR_WRITE          = 13
*      UNKNOWN_DP_ERROR        = 14
*      ACCESS_DENIED           = 15
*      DP_OUT_OF_MEMORY        = 16
*      DISK_FULL               = 17
*      DP_TIMEOUT              = 18
*      FILE_NOT_FOUND          = 19
*      DATAPROVIDER_EXCEPTION  = 20
*      CONTROL_FLUSH_ERROR     = 21
*      OTHERS                  = 22.
*  IF SY-SUBRC <> 0.
** Implement suitable error handling here
*  ELSE.
*    MESSAGE 'File Downloaded successfully' TYPE 'S'.
*  ENDIF.

ENDFORM.                    " DOWNLOAD_FILE
*&---------------------------------------------------------------------*
*&      Form  BUILD_XML_FILE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BUILD_XML_FILE .
  DATA L_FILENAME TYPE STRING.
  L_FILENAME P_FILE.

  TYPESBEGIN OF XML_LINE,
          DATA(256TYPE X,
         END OF XML_LINE.

  DATAL_IXML            TYPE REF TO IF_IXML,
        L_STREAMFACTORY   TYPE REF TO IF_IXML_STREAM_FACTORY,
        L_OSTREAM         TYPE REF TO IF_IXML_OSTREAM,
        L_RENDERER        TYPE REF TO IF_IXML_RENDERER,
        L_DOCUMENT        TYPE REF TO IF_IXML_DOCUMENT.

  DATAL_ELEMENT_COMPANYSALESLIST  TYPE REF TO IF_IXML_ELEMENT,
        L_ELEMENT_COMPANYSALE       TYPE REF TO IF_IXML_ELEMENT,
        L_ELEMENT_COMPANYID         TYPE REF TO IF_IXML_ELEMENT,
        L_ELEMENT_INVOICENUMBER     TYPE REF TO IF_IXML_ELEMENT,
        L_ELEMENT_INVOIEDATE        TYPE REF TO IF_IXML_ELEMENT,
        L_ELEMENT_STATEID           TYPE REF TO IF_IXML_ELEMENT,
        L_ELEMENT_DISTRICTID        TYPE REF TO IF_IXML_ELEMENT,
        L_ELEMENT_WAREHOUSEID       TYPE REF TO IF_IXML_ELEMENT,
        L_ELEMENT_DEALERID          TYPE REF TO IF_IXML_ELEMENT,
        L_ELEMENT_CMP_SD_LIST       TYPE REF TO IF_IXML_ELEMENT,
        L_ELEMENT_CMP_SD            TYPE REF TO IF_IXML_ELEMENT,
        L_ELEMENT_PRDID             TYPE REF TO IF_IXML_ELEMENT,
        L_ELEMENT_UNITID            TYPE REF TO IF_IXML_ELEMENT,
        L_ELEMENT_QUANTITY          TYPE REF TO IF_IXML_ELEMENT,

        L_ELEMENT_FLIGHT  TYPE REF TO IF_IXML_ELEMENT,
        L_ELEMENT_FROM    TYPE REF TO IF_IXML_ELEMENT,
        L_ELEMENT_TO      TYPE REF TO IF_IXML_ELEMENT,
        L_ELEMENT_DUMMY   TYPE REF TO IF_IXML_ELEMENT,
        L_VALUE           TYPE STRING.

  DATAL_XML_TABLE       TYPE TABLE OF XML_LINE,
        L_XML_SIZE        TYPE I,
        L_RC              TYPE I.

  CHECK IT_OUTPUT IS NOT INITIAL.

  DELETE IT_OUTPUT WHERE MATNR SPACE.

  SORT IT_OUTPUT BY VBELN REGIO BZIRK.

  LOOP AT IT_OUTPUT INTO WA_OUTPUT1.
    CLEAR WA_OUTPUT.
    WA_OUTPUT WA_OUTPUT1.
    AT FIRST.
*       Creating a ixml factory
      L_IXML CL_IXML=>CREATE).
*       Creating the dom object model
      L_DOCUMENT L_IXML->CREATE_DOCUMENT).
*       Fill root node with value CompanySalesList
      L_ELEMENT_COMPANYSALESLIST  L_DOCUMENT->CREATE_SIMPLE_ELEMENT(
                  NAME 'CompanySalesList'
                  PARENT L_DOCUMENT ).
    ENDAT.

    AT NEW BZIRK.
*      Fill root node with value CompanySale
      L_ELEMENT_COMPANYSALE L_DOCUMENT->CREATE_SIMPLE_ELEMENT(
                  NAME 'CompanySale'
                  PARENT L_ELEMENT_COMPANYSALESLIST ).

*       Create element 'CompanyId' as child of 'CompanySale'
      L_VALUE WA_OUTPUT-BUKRS.
      L_ELEMENT_COMPANYID  L_DOCUMENT->CREATE_SIMPLE_ELEMENT(
                  NAME 'companyId'
                  VALUE L_VALUE
                  PARENT L_ELEMENT_COMPANYSALE  ).
*       Create element 'InvoiceNumber ' as child of 'CompanySale'
      L_VALUE WA_OUTPUT-VBELN.
      L_ELEMENT_INVOICENUMBER  L_DOCUMENT->CREATE_SIMPLE_ELEMENT(
                  NAME 'invoiceNumber'
                  VALUE L_VALUE
                  PARENT L_ELEMENT_COMPANYSALE  ).

*       Create element 'InvoiceDate ' as child of 'CompanySale'
      L_VALUE WA_OUTPUT-FKDAT.
      L_ELEMENT_INVOIEDATE  L_DOCUMENT->CREATE_SIMPLE_ELEMENT(
                  NAME 'invoiceDate'
                  VALUE L_VALUE
                  PARENT L_ELEMENT_COMPANYSALE  ).

*       Create element 'StateID' as child of 'CompanySale'
      L_VALUE WA_OUTPUT-REGIO.
      L_ELEMENT_STATEID  L_DOCUMENT->CREATE_SIMPLE_ELEMENT(
                  NAME 'stateId'
                  VALUE L_VALUE
                  PARENT L_ELEMENT_COMPANYSALE  ).

*       Create element 'DistrictId' as child of 'CompanySale'
      L_VALUE WA_OUTPUT-BZIRK.
      L_ELEMENT_DISTRICTID  L_DOCUMENT->CREATE_SIMPLE_ELEMENT(
                  NAME 'districtId'
                  VALUE L_VALUE
                  PARENT L_ELEMENT_COMPANYSALE  ).


*       Create element 'WarehouseId' as child of 'CompanySale'
      L_VALUE WA_OUTPUT-WHID.
      L_ELEMENT_WAREHOUSEID  L_DOCUMENT->CREATE_SIMPLE_ELEMENT(
                  NAME 'warehouseId'
                  VALUE L_VALUE
                  PARENT L_ELEMENT_COMPANYSALE  ).

*       Create element 'dealerId' as child of 'CompanySale'
      L_VALUE WA_OUTPUT-KUNRG.
      L_ELEMENT_DEALERID  L_DOCUMENT->CREATE_SIMPLE_ELEMENT(
                  NAME 'dealerId'
                  VALUE L_VALUE
                  PARENT L_ELEMENT_COMPANYSALE  ).

*       Create element 'CompanySaleDetailsList' as child of 'CompanySale'
      L_ELEMENT_CMP_SD_LIST  L_DOCUMENT->CREATE_SIMPLE_ELEMENT(
                  NAME 'CompanySaleDetailsList'
                  PARENT L_ELEMENT_COMPANYSALE  ).
*    ENDAT.
*
*    AT NEW MATNR.

*       Create element 'CompanySaleDetails' as child of 'CompanySale'
      L_ELEMENT_CMP_SD L_DOCUMENT->CREATE_SIMPLE_ELEMENT(
                  NAME 'CompanySaleDetails'
                  PARENT L_ELEMENT_CMP_SD_LIST ).

*       Create element 'companyId' as child of 'CompanySaleDetails'
      L_VALUE WA_OUTPUT-BUKRS.
      L_ELEMENT_COMPANYID L_DOCUMENT->CREATE_SIMPLE_ELEMENT(
                  NAME 'companyId'
                  VALUE L_VALUE
                  PARENT L_ELEMENT_CMP_SD ).

      L_VALUE WA_OUTPUT-MATNR.
      L_ELEMENT_PRDID L_DOCUMENT->CREATE_SIMPLE_ELEMENT(
                  NAME 'productId'
                  VALUE L_VALUE
                  PARENT L_ELEMENT_CMP_SD ).

      L_VALUE WA_OUTPUT-VRKME.
      L_ELEMENT_UNITID L_DOCUMENT->CREATE_SIMPLE_ELEMENT(
                  NAME 'unitId'
                  VALUE L_VALUE
                  PARENT L_ELEMENT_CMP_SD ).

      L_VALUE WA_OUTPUT-FKIMG.
      L_ELEMENT_PRDID L_DOCUMENT->CREATE_SIMPLE_ELEMENT(
                  NAME 'quantity'
                  VALUE L_VALUE
                  PARENT L_ELEMENT_CMP_SD ).


    ENDAT.

  ENDLOOP.


*   Creating a stream factory
  L_STREAMFACTORY L_IXML->CREATE_STREAM_FACTORY).
*   Connect internal XML table to stream factory
  L_OSTREAM L_STREAMFACTORY->CREATE_OSTREAM_ITABLETABLE L_XML_TABLE ).

*   Rendering the document
  L_RENDERER L_IXML->CREATE_RENDEREROSTREAM  L_OSTREAM
                                        DOCUMENT L_DOCUMENT ).
  L_RC L_RENDERER->RENDER).

*   Saving the XML document
  L_XML_SIZE L_OSTREAM->GET_NUM_WRITTEN_RAW).

  CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD
    EXPORTING
      BIN_FILESIZE L_XML_SIZE
      FILENAME     L_FILENAME "'c:\data\companysalesdata.xml'
      FILETYPE     'BIN'
    CHANGING
      DATA_TAB     L_XML_TABLE
    EXCEPTIONS
      OTHERS       24.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
               WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ELSE.
    MESSAGE 'File Downloaded successfully' TYPE 'S'.
  ENDIF.

ENDFORM.                    " BUILD_XML_FILE
*&---------------------------------------------------------------------*
*&      Form  BUILD_OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BUILD_OUTPUT .
  CHECK IT_OUTPUT IS NOT INITIAL.

*  SELECT * FROM ZFMSCC INTO TABLE IT_ZFMSCC
*    FOR ALL ENTRIES IN IT_OUTPUT
*    WHERE SAP_COMPANY_CODE = IT_OUTPUT-BUKRS.

  SELECT FROM ZFMSCUST INTO TABLE IT_ZFMSCUST
    FOR ALL ENTRIES IN IT_OUTPUT
    WHERE SAP_CUSTOMER IT_OUTPUT-KUNRG
      AND DISTRICT IT_OUTPUT-BZIRK.               "Inserted 01-03-2012

  SELECT FROM ZFMSSTATE INTO TABLE IT_ZFMSSTATE
    FOR ALL ENTRIES IN IT_OUTPUT
    WHERE SAP_STATE IT_OUTPUT-REGIO.

  SELECT FROM ZFMSDIST INTO TABLE IT_ZFMSDIST
    FOR ALL ENTRIES IN IT_OUTPUT
    WHERE SAP_DISTRICT IT_OUTPUT-BZIRK.

  SELECT FROM ZFMSUNIT INTO TABLE IT_ZFMSUNIT
    FOR ALL ENTRIES IN IT_OUTPUT
    WHERE SAP_UNIT IT_OUTPUT-VRKME.

  SELECT FROM ZFMSWH INTO TABLE IT_ZFMSWH
    FOR ALL ENTRIES IN IT_OUTPUT
    WHERE SAP_MATERIAL IT_OUTPUT-MATNR.

  DATAL_DATE TYPE CHAR10.

  LOOP AT IT_OUTPUT INTO WA_OUTPUT.

    PERFORM CONVERSION_EXIT_ALPHA_OUTPUT USING WA_OUTPUT-VBELN CHANGING WA_OUTPUT-VBELN.

    CLEAR L_DATE.

    L_DATE+0(2WA_OUTPUT-FKDAT+6(2).
    L_DATE+2(1'/'.
    L_DATE+3(2WA_OUTPUT-FKDAT+4(2).
    L_DATE+5(1'/'.
    L_DATE+6(4WA_OUTPUT-FKDAT+0(4).

    WA_OUTPUT-FKDAT L_DATE.

*    READ TABLE IT_ZFMSCC INTO WA_ZFMSCC
*      WITH KEY SAP_COMPANY_CODE = WA_OUTPUT-BUKRS.
*    IF SY-SUBRC EQ 0.
*      WA_OUTPUT-BUKRS = WA_ZFMSCC-FMS_COMPANY_CODE.
*      PERFORM CONVERSION_EXIT_ALPHA_OUTPUT USING WA_OUTPUT-BUKRS CHANGING WA_OUTPUT-BUKRS.
*    ELSE.
*      CLEAR WA_OUTPUT-BUKRS.
*    ENDIF.

    SELECT SINGLE FMS_COMPANY_CODE INTO WA_OUTPUT-BUKRS
      FROM ZFMSCC
      WHERE SAP_COMPANY_CODE WA_OUTPUT-BUKRS.
    IF SY-SUBRC EQ 0.
      PERFORM CONVERSION_EXIT_ALPHA_OUTPUT USING WA_OUTPUT-BUKRS CHANGING WA_OUTPUT-BUKRS.
    ENDIF.

    READ TABLE IT_ZFMSCUST INTO WA_ZFMSCUST
      WITH KEY SAP_CUSTOMER WA_OUTPUT-KUNRG
               DISTRICT WA_OUTPUT-BZIRK.              "Inserted 01-03-2012
    IF SY-SUBRC EQ 0.
      WA_OUTPUT-KUNRG WA_ZFMSCUST-FMS_CUSTOMER.
      PERFORM CONVERSION_EXIT_ALPHA_OUTPUT USING WA_OUTPUT-KUNRG CHANGING WA_OUTPUT-KUNRG.
    ELSE.
      CLEAR WA_OUTPUT-KUNRG.
    ENDIF.

    READ TABLE IT_ZFMSSTATE INTO WA_ZFMSSTATE
      WITH KEY SAP_STATE WA_OUTPUT-REGIO.
    IF SY-SUBRC EQ 0.
      WA_OUTPUT-REGIO WA_ZFMSSTATE-FMS_STATE.
    ELSE.
      CLEAR WA_OUTPUT-REGIO.
    ENDIF.

    READ TABLE IT_ZFMSDIST INTO WA_ZFMSDIST
     WITH KEY SAP_DISTRICT WA_OUTPUT-BZIRK.
    IF SY-SUBRC EQ .
      WA_OUTPUT-BZIRK WA_ZFMSDIST-FMS_DISTRICT.
    ELSE.
      CLEAR WA_OUTPUT-BZIRK.
    ENDIF.

    READ TABLE IT_ZFMSUNIT INTO WA_ZFMSUNIT
    WITH KEY SAP_UNIT WA_OUTPUT-VRKME.
    IF SY-SUBRC EQ 0.
      WA_OUTPUT-VRKME WA_ZFMSUNIT-FMS_UNIT.
    ELSE.
      CLEAR WA_OUTPUT-VRKME.
    ENDIF.

    READ TABLE IT_ZFMSWH INTO WA_ZFMSWH
      WITH KEY  SAP_MATERIAL WA_OUTPUT-MATNR.
    IF SY-SUBRC EQ 0.
      WA_OUTPUT-MATNR WA_ZFMSWH-FMS_MAT_ID"FMS_MATERIAL.                      "Changed 02-03-2012
      PERFORM CONVERSION_EXIT_ALPHA_OUTPUT USING WA_OUTPUT-MATNR CHANGING WA_OUTPUT-MATNR.
    ELSE.
      CLEAR WA_OUTPUT-MATNR.
    ENDIF.

    CONCATENATE WA_OUTPUT-BUKRS WA_OUTPUT-BZIRK INTO
        WA_OUTPUT-WHID.

    MODIFY IT_OUTPUT FROM WA_OUTPUT.

  ENDLOOP.
ENDFORM.                    " BUILD_OUTPUT
*&---------------------------------------------------------------------*
*&      Form  CONVERSION_EXIT_ALPHA_OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_WA_OUTPUT_BUKRS  text
*      <--P_WA_OUTPUT_BUKRS  text
*----------------------------------------------------------------------*
FORM CONVERSION_EXIT_ALPHA_OUTPUT  USING    P_IN
                                   CHANGING P_OUT.

  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
    EXPORTING
      INPUT  P_IN
    IMPORTING
      OUTPUT P_OUT.

ENDFORM.                    " CONVERSION_EXIT_ALPHA_OUTPUT