Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

some question about data archive.

former_member189009
Active Participant
0 Likes
1,980

I had to write the program to get the archive data recently.

I use a  archindex such as 'Z_DRB_EKKO' to get the archive table name thought FM : AIND_NAMETAB_GET ,then select the data form this table. and then  I also have to call the FM:  MMPUR_PO_READ_FROM_ARCHIVE  to get the archive data.

I have some doubt about this:

Firstly, I read some program in some condition, we don't have to use the FM to get the archive data, just select the data form the table. I want to know do we have to use the FM to get the archive data?

Secondly, I want to know what is the archive index? what the relation between the archive index and the archive table.

Thirdly, how do I find the FM like MMPUR_PO_READ_FROM_ARCHIVE to get the archive data when i want to get the archive data in table such as  vbak,vbap?

Finally, as I know the data archive mostly operate by basic, as an abap developer, what do we do to accomplish the data archive.

There are so many question about this issue,as a new , I want to figure out this issue, so thank you very much for answering this question.

7 REPLIES 7
Read only

Former Member
0 Likes
1,782

Hello Zhang,

As per my understanding to read the archive data in very easy, than the retrieval.

I believe you are archiving the data using the transaction code SARA, if yes then you can read the data through same transaction code by specifying the same variant which is used to archive.

Here are the steps to read the archived data:

1. Go to tcode SARA enter the archival object and hit enter

2. Click on the read button as shown in the below image

[if you are not able to see this button then some configurations needs to be done in the transaction code AOBJ. Please let me know if you want the steps to configure]

If you are able to see the read button then its good, continue to step 3.

3. Click on the Execute button

4. In the next screen specify the number of records to be displayed in a screen and click on Execute button

5. New pop up screen appears, that will have the list of Archive index for the selected Archive object, select the index for which you want to read the records and click on continue

6. Archived records will be read by the standard program and displayed as mentioned in the below image

Hope this is helpful, otherwise let me know if you have further questions.

Thanks

Nivash S

Read only

0 Likes
1,782

thank you so much for your sincere answer. And it really help me a lot, but i still have some doubt about it, because i want to develop a program to read different kind of archive data.

Read only

0 Likes
1,782

Hi ,

Long back I have written  a program to get archived records from sales, Delivery and shipping .

you can refer below program .

***********************************************************************

*& Report  XXXXXXXXXX

************************************************************************

*  DATE          :  XXXXXXXXXX                                         *

*  NAME          :  XXXXXXXXXX                                         *

*  DESCRIPTION   : Report for displaying the invoice number, delivery  *

*                  number and sale order acknowledgement numbers which *

*                  archived/Not Archived in IXOS.                      *

************************************************************************

REPORT  zexsdro01  NO STANDARD PAGE HEADING.

* ::::::::::::::::: INITIALIZATION ::::::::::::::::

* ::::::::::::::::: ALV DECLARATION

TYPE-POOLS: slis.

TABLES: nast,

        vbak,

        likp,

        vbrk,

        lips.

DATA: i_fcat   TYPE slis_t_fieldcat_alv WITH HEADER LINE.

DATA: i_save   TYPE c.

DATA: l_layout LIKE disvariant.

DATA it_events        TYPE slis_t_event.

DATA it_layout        TYPE slis_layout_alv.

DATA st_alv_print_cat TYPE slis_print_alv.

CONSTANTS : c_yes TYPE c VALUE '1' ,

            c_no TYPE c VALUE '0' .

CONSTANTS : c_tab VALUE cl_abap_char_utilities=>horizontal_tab.

* ::::::::::::::::: TYPES DECLARATION ::::::::::::::::

TYPES:

          BEGIN OF ty_vbrp,

            vbeln         TYPE      vbrp-vbeln,

            vgbel         TYPE      vbrp-vgbel,

            vgpos         TYPE      vbrp-vgpos,

          END OF ty_vbrp,

          BEGIN OF ty_vbrk,

            vbeln         TYPE      vbrk-vbeln,

            fkart                  TYPE      vbrk-fkart,

            fktyp         TYPE      vbrk-fktyp,

            vkorg                  TYPE      vbrk-vkorg,

            vtweg                  TYPE      vbrk-vtweg,

            fkdat         TYPE      vbrk-fkdat,

            bukrs                  TYPE      vbrk-bukrs,

            erdat         TYPE      vbrk-erdat,

            kunrg                  TYPE      vbrk-kunrg,

            kunag         TYPE      vbrk-kunag,

            sfakn                  TYPE      vbrk-sfakn,

            spart                  TYPE      vbrk-spart,

            fksto                  TYPE      vbrk-fksto,

          END OF ty_vbrk,

          BEGIN OF ty_toa01,

            sap_object    TYPE  toa01-sap_object,

            object_id(50) TYPE c,

            archiv_id     TYPE  toa01-archiv_id,

            arc_doc_id    TYPE  toa01-arc_doc_id,

            ar_object     TYPE  toa01-ar_object,

            ar_date       TYPE  toa01-ar_date,

            del_date      TYPE  toa01-del_date,

            reserve       TYPE  toa01-reserve,

          END OF ty_toa01,

          BEGIN OF ty_toa02,

            sap_object    TYPE  toa01-sap_object,

            object_id(50)     TYPE  c,

            archiv_id     TYPE  toa01-archiv_id,

            arc_doc_id    TYPE  toa01-arc_doc_id,

            ar_object     TYPE  toa01-ar_object,

            ar_date       TYPE  toa01-ar_date,

            del_date      TYPE  toa01-del_date,

            reserve       TYPE  toa01-reserve,

          END OF ty_toa02,

          BEGIN OF ty_likp,

            vbeln     TYPE    likp-vbeln,

            erdat     TYPE    likp-erdat,

            vkorg     TYPE    likp-vkorg,

            lfart     TYPE    likp-lfart,

            lfdat     TYPE    likp-lfdat,

            kunnr     TYPE    likp-kunnr,

            kunag     TYPE    likp-kunag,

          END OF ty_likp,

          BEGIN OF ty_lips,

            vbeln     TYPE    lips-vbeln,

            posnr     TYPE    lips-posnr,

            vgbel     TYPE    lips-vgbel,

            vgpos     TYPE    lips-vgpos,

            vtweg              TYPE    lips-vtweg,

            spart              TYPE    lips-spart,

          END OF ty_lips,

          BEGIN OF ty_vbak,

            vbeln         TYPE      vbak-vbeln,

            erdat         TYPE      vbak-erdat,

            audat         TYPE      vbak-audat,

            auart         TYPE      vbak-auart,

            vkorg         TYPE      vbak-vkorg,

            vtweg         TYPE      vbak-vtweg,

            spart         TYPE      vbak-spart,

            kunnr         TYPE      vbak-kunnr,

            kunag         TYPE      vbrk-kunag,

            bukrs_vf      TYPE      vbak-bukrs_vf   ,

          END OF ty_vbak,

          BEGIN OF ty_vbap,

            vbeln                  TYPE       vbap-vbeln,

            posnr                  TYPE      vbap-posnr,

          END OF ty_vbap,

          BEGIN OF ty_vbpa,

            vbeln TYPE vbeln,

            posnr TYPE posnr,

            parvw TYPE  parvw,

            kunnr TYPE  kunnr,

          END OF ty_vbpa,

          BEGIN OF ty_kna1,

            name1                  TYPE       name1_gp,

            kunnr                  TYPE       kunnr,

          END OF ty_kna1,

          BEGIN OF ty_delv_out,

            vbeln         TYPE      vbrk-vbeln,      "Delivery

            lfart         TYPE      likp-lfart,      "Delivery Type

            vkorg                  TYPE      vbrk-vkorg,      "Sales Organization

            vtweg                  TYPE      vbrk-vtweg,      "Distribution Channel

            spart                  TYPE      vbrk-spart,      "Market

            spras         TYPE      nast-spras,      "Language

            bukrs         TYPE      vbrk-bukrs,      "Company Code *

            kunag         TYPE      vbrk-kunag,      "Sold-to party

            kunnr         TYPE      likp-kunnr,      "ship-to-party

            sap_object    TYPE      toa01-sap_object,"Object type

            ar_object              TYPE      toa01-ar_object, "Storage type

            ar_date       TYPE      toa01-ar_date,   "Storage date

            del_date      TYPE      toa01-del_date,  "Delete date

            status_msg(50)  TYPE        c,              END OF ty_delv_out,

          BEGIN OF ty_bill_out,

            vbeln       TYPE        vbak-vbeln,     "Billing Doc *

            lfart       TYPE        likp-lfart,     " Delivery Type *

            vkorg       TYPE        vbak-vkorg,     " Sales Organization *

            vtweg       TYPE        vbak-vtweg,     " Distribution Channel *

            spart       TYPE        vbak-spart,     " Market

            spras      TYPE        nast-spras,      " Language

            bukrs       TYPE        vbrk-bukrs,     " Company Code *

            kunrg       TYPE        vbrk-kunrg,     " Payer

            name1       TYPE        name1_gp,       "

            kunag       TYPE        vbrk-kunag,     " Sold-to part *

            c_vbeln     TYPE        vbfa-vbeln,     " Cancelled billing document number *

            fksto       TYPE        vbrk-fksto,     " Billing document is cancelled *

            sap_object  TYPE        toa01-sap_object,"Object type

            ar_object            TYPE        toa01-ar_object,"Storage type

            ar_date     TYPE        toa01-ar_date,  "Storage date

            del_date    TYPE        toa01-del_date, "Delete date

            status_msg(55)  TYPE        c,

           END OF ty_bill_out,

           BEGIN OF ty_vbfa,

             vbelv      TYPE    vbfa-vbelv,

             posnv      TYPE    vbfa-posnv,

             vbeln      TYPE    vbfa-vbeln,

             posnn      TYPE    vbfa-posnn,

             vbtyp_n    TYPE    vbfa-vbtyp_n,

           END OF ty_vbfa,

BEGIN OF ty_nast1,

           kappl        TYPE    sna_kappl,

           objky(50)    TYPE    c,

           kschl        TYPE    sna_kschl,

           spras        TYPE    na_spras,

           parnr        TYPE    na_parnr,

           parvw        TYPE    sna_parvw,

           erdat        TYPE    na_erdat,

           nacha        TYPE    na_nacha,

           uhrvr        TYPE    na_uhrvr,

           vstat        TYPE    nast-vstat,

           objtype      TYPE    oj_name,

          END OF ty_nast1,

          BEGIN OF ty_nast,

          kappl         TYPE    sna_kappl,

          objky(50)     TYPE    c,

          kschl         TYPE    sna_kschl,

          spras         TYPE    na_spras,

          parnr         TYPE    na_parnr,

          parvw         TYPE    sna_parvw,

          erdat         TYPE    na_erdat,

          nacha         TYPE    na_nacha,

          uhrvr         TYPE    na_uhrvr,

          vstat         TYPE    nast-vstat,

          objtype       TYPE    oj_name,

          END OF ty_nast,

          BEGIN OF ty_sales_out,

          vbeln       TYPE        vbak-vbeln,     "Sales Document *

          auart       TYPE        vbak-auart,     " Sales Document Type *

          lfart       TYPE        likp-lfart,     " Delivery Type *

          fkart       TYPE        vbrk-fkart,     " Billing Type *

          vkorg       TYPE        vbak-vkorg,     " Sales Organization *

          vtweg       TYPE        vbak-vtweg,     " Distribution Channel *

          spart       TYPE        vbak-spart,     " Market

          spras       TYPE        nast-spras,     "Language

          fkdat       TYPE        vbrk-fkdat,     " Billing date for billing index and printout *

          bukrs       TYPE        vbrk-bukrs,     " Company Code *

          kunrg       TYPE        vbrk-kunrg,     " Payer

          kunag       TYPE        vbrk-kunag,     " Sold-to part *

          sap_object  TYPE        toa01-sap_object,"Object type

          ar_object            TYPE        toa01-ar_object,"Storage type

          ar_date     TYPE        toa01-ar_date,  "Storage date

          del_date    TYPE        toa01-del_date, "Delete date

          status_msg(50)  TYPE        c,

          END OF ty_sales_out ,

          BEGIN OF ty_toa03,

          sap_object    TYPE      saeanwdid,

          object_id     TYPE      saeobjid,

          archiv_id     TYPE      saearchivi,

          arc_doc_id    TYPE      saeardoid,

          ar_object     TYPE      saeobjart,

          ar_date       TYPE      saeabadate,

          del_date      TYPE      saedeldate,

          reserve       TYPE      saereserve,

            END OF ty_toa03.

* ::::::::::::::::: TABLES & WORK AREAS AND  DATA VARIABLES DECLARATION ::::::::::::::::

DATA:

      it_vbrp     TYPE STANDARD TABLE OF ty_vbrp,

      it_vbrk     TYPE STANDARD TABLE OF ty_vbrk,

      it_vbrk1    TYPE STANDARD TABLE OF ty_vbrk,  "#EC NEEDED

      it_vbak     TYPE STANDARD TABLE OF ty_vbak,

      it_vbap     TYPE STANDARD TABLE OF ty_vbap,

      it_lips     TYPE STANDARD TABLE OF ty_lips,

      it_lips1    TYPE STANDARD TABLE OF ty_lips,  "#EC NEEDED

      it_likp     TYPE STANDARD TABLE OF ty_likp,

      it_likp1    TYPE STANDARD TABLE OF ty_likp,

      it_kna1     TYPE STANDARD TABLE OF ty_kna1,   "#EC NEEDED

      it_nast     TYPE STANDARD TABLE OF ty_nast,

      it_toa01    TYPE STANDARD TABLE OF ty_toa01,

      it_toa02    TYPE STANDARD TABLE OF ty_toa02,  "#EC NEEDED

      it_bill_out TYPE STANDARD TABLE OF ty_bill_out,

      it_sale_out TYPE STANDARD TABLE OF ty_sales_out,

      it_delv_out TYPE STANDARD TABLE OF ty_delv_out,

      it_nast1    TYPE STANDARD TABLE OF ty_nast1,

      it_vbfa     TYPE STANDARD TABLE OF ty_vbfa,

      it_vbpa     TYPE STANDARD TABLE OF ty_vbpa,

      wa_vbpa     TYPE    ty_vbpa,

      wa_vbfa     TYPE    ty_vbfa,

      wa_nast1    TYPE    ty_nast1,

      wa_bill_out TYPE    ty_bill_out,

      wa_delv_out TYPE    ty_delv_out,

      wa_sale_out TYPE    ty_sales_out,

      wa_lips     TYPE    ty_lips,

      wa_nast     TYPE    ty_nast,

      wa_toa01    TYPE    ty_toa01,

      wa_toa02    TYPE    toa02,  "#EC NEEDED

      wa_toa03    TYPE    ty_toa03,

      wa_kna1     TYPE    ty_kna1, "#EC NEEDED

      wa_vbrp     TYPE    ty_vbrp,

      wa_vbrk     TYPE    ty_vbrk,

      wa_vbak     TYPE    ty_vbak,

      wa_vbap     TYPE    ty_vbap,

      wa_lips1    TYPE    ty_lips, "#EC NEEDED

      wa_likp     TYPE    ty_likp,

      p_filename  TYPE    string.

REFRESH: it_sale_out[], it_delv_out[], it_bill_out[].

* ::::::::::::::::: AT-SELECTION-SCREEN ::::::::::::::::

SELECTION-SCREEN : BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01.

*DYNAMIC OPTIONS FOR SALES , DEVLIVER AND BILLING

PARAMETERS : p_opt1 TYPE c RADIOBUTTON GROUP radi USER-COMMAND op1,

             p_opt2 TYPE c RADIOBUTTON GROUP radi ,

             p_opt3 TYPE c RADIOBUTTON GROUP radi .

SELECTION-SCREEN : END OF BLOCK b1.

SELECTION-SCREEN : BEGIN OF BLOCK b3 WITH FRAME TITLE text-002.

*Corresponding options for Sales , Devivery and Billing

PARAMETERS : p_sopt1 TYPE c RADIOBUTTON GROUP rdop MODIF ID op1 ,

             p_sopt2 TYPE c RADIOBUTTON GROUP rdop MODIF ID op1 ,

             p_sopt3 TYPE c RADIOBUTTON GROUP rdop MODIF ID op1 ,

             p_dopt1 TYPE c RADIOBUTTON GROUP rdop MODIF ID op2,

             p_dopt2 TYPE c RADIOBUTTON GROUP rdop MODIF ID op2,

             p_dopt3 TYPE c RADIOBUTTON GROUP rdop MODIF ID op2,

             p_bopt1 TYPE c RADIOBUTTON GROUP rdop MODIF ID op3,

             p_bopt2 TYPE c RADIOBUTTON GROUP rdop MODIF ID op3,

             p_bopt3 TYPE c RADIOBUTTON GROUP rdop MODIF ID op3.

SELECTION-SCREEN : END OF BLOCK b3.

SELECTION-SCREEN : BEGIN OF BLOCK b2 WITH FRAME TITLE text-003.

SELECT-OPTIONS :

*Selection screen for Sales Process

    s_kschl  FOR  nast-kschl   MODIF ID op1 OBLIGATORY DEFAULT 'Z000' ,

    s_vkorg  FOR  vbak-vkorg   MODIF ID op1 ,

    s_vtweg  FOR  vbak-vtweg   MODIF ID op1 ,

    s_spart  FOR  vbak-spart   MODIF ID op1 ,

    s_vbeln  FOR  vbak-vbeln   MODIF ID op1 ,

    s_auart FOR   vbak-auart   MODIF ID op1,

    s_kunag  FOR  vbrk-kunag   MODIF ID op1 ,

    s_kunnr  FOR  likp-kunnr   MODIF ID op1 ,

*Selection screen for Delivery process

    s_kschl2 FOR  nast-kschl   MODIF ID op2 OBLIGATORY DEFAULT 'Z000',

    s_vkorg2 FOR  likp-vkorg   MODIF ID op2 ,

    s_vtweg2 FOR  lips-vtweg   MODIF ID op2 ,

    s_spart2 FOR  lips-spart   MODIF ID op2 ,

    s_vbeln2 FOR  likp-vbeln   MODIF ID op2 ,

    s_lfart  FOR  likp-lfart   MODIF ID op2,

    s_kunnr2 FOR  likp-kunnr   MODIF ID op2  NO INTERVALS,

*Selection screen for Billing Process

    s_kschl3 FOR  nast-kschl   MODIF ID op3 OBLIGATORY DEFAULT 'Z000',

    s_vkorg3 FOR  vbrk-vkorg   MODIF ID op3 ,

    s_vtweg3 FOR  vbrk-vtweg   MODIF ID op3 ,

    s_spart3 FOR  vbrk-spart   MODIF ID op3 ,

    s_vbeln3 FOR  vbrk-vbeln   MODIF ID op3 ,

    s_fkart  FOR  vbrk-fkart   MODIF ID op3 ,

    s_kunag3 FOR  vbrk-kunag   MODIF ID op3 ,

    s_kunrg3 FOR  vbrk-kunrg   MODIF ID op3 .

SELECTION-SCREEN : END OF BLOCK b2.

*Selection screen to select Alv report/Download to Excel file

SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE text-004.

PARAMETERS : r_rb1  RADIOBUTTON GROUP r1 USER-COMMAND id DEFAULT 'X' .

SELECTION-SCREEN BEGIN OF LINE .

PARAMETERS : r_rb2  RADIOBUTTON GROUP r1 .

SELECTION-SCREEN:COMMENT 3(23) text-t03.

SELECTION-SCREEN:POSITION 32.

PARAMETERS : p_f4 TYPE rlgrap-filename DEFAULT 'c:\example.xls'.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK b4.

* ::::::::::::::::: INITALIZATION

INITIALIZATION.

AT SELECTION-SCREEN OUTPUT .

* Processing Dynamic Selection Screen

  LOOP AT SCREEN .

    IF screen-group1 = 'OP1' .

      IF p_opt1 = 'X' .

        screen-invisible = c_no .

        screen-active = c_yes .

      ELSE.

        screen-invisible = c_yes .

        screen-active = c_no .

      ENDIF.

      MODIFY SCREEN .

    ENDIF.

    IF screen-group1 = 'OP2' .

      IF p_opt2 = 'X' .

        screen-invisible = c_no .

        screen-active = c_yes .

      ELSE.

        screen-invisible = c_yes .

        screen-active = c_no .

      ENDIF.

      MODIFY SCREEN .

    ENDIF.

    IF screen-group1 = 'OP3' .

      IF p_opt3 = 'X' .

        screen-invisible = c_no .

        screen-active = c_yes .

      ELSE.

        screen-invisible = c_yes .

        screen-active = c_no .

      ENDIF.

      MODIFY SCREEN .

    ENDIF.

  ENDLOOP.

* ::::::::::::::::: AT SELECTION-SCREEN

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_f4.

* To select file path and process to download output into excel

  PERFORM f4_file USING p_f4.

  p_filename = p_f4.

* ::::::::::::::::: START-OF-SELECTION

START-OF-SELECTION.

* Clear internal tables

refresh:

      it_vbrp ,

      it_vbrk ,

      it_vbrk1,

      it_vbak ,

      it_vbap ,

      it_lips ,

      it_lips1,

      it_likp ,

      it_likp1,

      it_kna1 ,

      it_nast ,

      it_toa01,

      it_toa02,

      it_bill_out,

      it_sale_out,

      it_delv_out,

      it_nast1,

      it_vbfa ,

      it_vbpa .

* Get common data for sales,Delivery and Billing

  PERFORM f_data.

* To get related data for each scenario based on selection screen options

  PERFORM get_data.

  CLEAR: wa_nast.

  IF p_opt1 = 'X'.

    PERFORM p_sales.

  ELSEIF p_opt2 = 'X'.

    PERFORM p_delivery.

  ELSEIF p_opt3 = 'X'.

    PERFORM p_billing.

  ENDIF.

* ::::::::::::::::: END-OF-SELECTION

END-OF-SELECTION.

* Check download option and build field catalog

  PERFORM field_catalog.

  IF r_rb2 = 'X'.

    PERFORM download_file USING p_filename.

  ENDIF.

  PERFORM display_alv.

*&---------------------------------------------------------------------*

*&      Form  GET_DATA

*&---------------------------------------------------------------------*

FORM get_data .

* Validate NAST Output type

  IF p_opt1 = 'X'.

* Get data for Sales scenario

    IF it_nast IS NOT INITIAL.

      it_nast1 = it_nast[].

      REFRESH it_nast.

*Get Sales Document: Header Data

      SELECT

            vbeln

            erdat

            audat

            auart

            vkorg

            vtweg

            spart

            kunnr

            FROM vbak INTO TABLE it_vbak

            WHERE   vkorg IN s_vkorg  AND

                    vtweg IN s_vtweg AND

                    spart IN s_spart AND

                    vbeln IN s_vbeln AND

                    auart IN s_auart.

* Filter Message Status data based on Sales document header data

      IF it_vbak IS NOT INITIAL.

        LOOP AT it_nast1 INTO wa_nast1.

          READ TABLE it_vbak INTO wa_vbak WITH KEY vbeln = wa_nast1-objky  . "#EC *

          IF sy-subrc = 0.

            APPEND wa_nast1 TO it_nast.

          ENDIF.

        ENDLOOP.

        REFRESH it_nast1[].

      ENDIF.

    ENDIF.

*Get Sales Document: Item Data based on Sales Document Header data

    IF it_vbak IS NOT INITIAL AND it_nast IS NOT INITIAL.

      SELECT

        vbeln

        posnr

        FROM vbap INTO TABLE it_vbap

        FOR ALL ENTRIES IN it_vbak

        WHERE vbeln = it_vbak-vbeln.

    ENDIF.

    IF it_vbap IS NOT INITIAL.

      SELECT vbeln

            posnr

            parvw

            kunnr INTO TABLE it_vbpa FROM vbpa

            FOR ALL ENTRIES IN it_vbap

            WHERE vbeln = it_vbap-vbeln .

    ENDIF.

*Get SD document: Delivery: Item data based on sales items

    IF it_lips[] IS  INITIAL AND p_opt1 = 'X'.

      SELECT

        vbeln

        posnr

        vgbel

        vgpos

        vtweg

        spart

        FROM lips INTO TABLE it_lips

        FOR ALL ENTRIES IN it_vbap

    WHERE vgbel = it_vbap-vbeln

        AND posnr = it_vbap-posnr.

* Get Billing Document: Item Data based on Deliver Items

    ENDIF.

    IF it_lips IS NOT INITIAL.

      SELECT

        vbeln

        vgbel

        vgpos

        FROM vbrp INTO TABLE it_vbrp

        FOR ALL ENTRIES IN it_lips

        WHERE vgbel = it_lips-vbeln

        AND   vgpos = it_lips-posnr.

    ENDIF.

*Get Billing document header data based on Items

    IF it_vbrp IS NOT INITIAL.

      SELECT

                  vbeln

            fkart

            fktyp

            vkorg

            vtweg

            fkdat

            bukrs

            erdat

            kunrg

            kunag

            sfakn

            spart

            fksto

      FROM vbrk INTO TABLE it_vbrk

      FOR ALL ENTRIES IN it_vbrp

      WHERE vbeln = it_vbrp-vbeln AND

            kunag IN s_kunag.

    ENDIF.

* Get General Data in Customer Master for Billing document header .

    IF it_vbrk IS NOT INITIAL.

      SELECT

        name1

        kunnr

        FROM kna1

        INTO CORRESPONDING FIELDS OF TABLE it_kna1

        FOR ALL ENTRIES IN it_vbrk

        WHERE kunnr = it_vbrk-kunag.

    ENDIF.

* Get SD Document: Delivery Header Data based on Item data

    IF it_lips[] IS NOT INITIAL.

      SELECT

       vbeln

       erdat

       vkorg

       lfart

       lfdat

       kunnr

       kunag

       FROM likp  INTO TABLE it_likp

       WHERE kunnr IN s_kunnr .

    ENDIF.

* filter SD Document: Delivery Header Data based on Item values

    it_likp1[] = it_likp.

    REFRESH it_likp.

    LOOP AT it_likp1 INTO wa_likp.

      READ TABLE it_lips INTO wa_lips WITH KEY vbeln = wa_likp-vbeln  .

      IF sy-subrc = 0.

        APPEND wa_likp TO it_likp.

      ENDIF.

    ENDLOOP.

    IF it_likp IS NOT INITIAL.

* refresh SD Document: Delivery Item values which were selected based on

* selection screen values and pickup related Item values  based on

* table relations

      SELECT

           vbeln

           posnr

           vgbel

           vgpos

           vtweg

           spart

           FROM lips INTO TABLE it_lips

           FOR ALL ENTRIES IN it_likp

       WHERE vbeln = it_likp-vbeln.

    ENDIF.

  ENDIF.

  IF p_opt2 = 'X'.

* Get SD Document: Delivery Header Data based on selection parameters

    IF it_nast IS NOT INITIAL.

      it_nast1 = it_nast[].

      REFRESH it_nast.

      SELECT

           vbeln

           erdat

           vkorg

           lfart

           lfdat

           kunnr

           kunag

         FROM likp  INTO TABLE it_likp

         WHERE vkorg IN s_vkorg2

           AND vbeln IN s_vbeln2

           AND kunnr IN s_kunnr2

           AND lfart IN s_lfart.

* Filter Message Status data based on Sales document header data

      IF it_likp IS NOT INITIAL.

        LOOP AT it_nast1 INTO wa_nast1.

          READ TABLE it_likp INTO wa_likp WITH KEY vbeln = wa_nast1-objky  . "#EC *

          IF sy-subrc = 0.

            APPEND wa_nast1 TO it_nast.

          ENDIF.

        ENDLOOP.

        REFRESH it_nast1[].

      ENDIF.

    ENDIF.

    IF it_likp IS NOT INITIAL AND it_nast IS NOT INITIAL.

      SELECT

        vbeln

        posnr

        FROM vbap INTO TABLE it_vbap

        FOR ALL ENTRIES IN it_likp

        WHERE vbeln = it_likp-vbeln.

    ENDIF.

    IF it_vbap IS NOT INITIAL.

      SELECT vbeln

            posnr

            parvw

            kunnr INTO TABLE it_vbpa FROM vbpa

            FOR ALL ENTRIES IN it_vbap

            WHERE vbeln = it_vbap-vbeln .

    ENDIF.

* SD document: select Delivery Item data based on

* Header values and selection parameters

    IF it_likp[] IS NOT INITIAL.

      REFRESH it_lips[].

      SELECT

        vbeln

        posnr

        vgbel

        vgpos

        vtweg

        spart

        FROM lips INTO TABLE it_lips

        FOR ALL ENTRIES IN it_likp

        WHERE vbeln = it_likp-vbeln AND

        vtweg IN s_vtweg2 AND

        spart IN s_spart2.

    ENDIF.

* Get Billing Document: Item Data based on Delivery Items

    IF it_lips[] IS NOT INITIAL.

      SELECT

        vbeln

        vgbel

        vgpos

        FROM vbrp INTO TABLE it_vbrp

        FOR ALL ENTRIES IN it_lips

        WHERE  vgbel = it_lips-vbeln AND

               vgpos = it_lips-posnr.

    ENDIF.

* Get Billing Document: Header Data based on item data

    IF it_vbrp[] IS NOT INITIAL.

      SELECT

                      vbeln

            fkart

            fktyp

            vkorg

            vtweg

            fkdat

            bukrs

            erdat

            kunrg

            kunag

            sfakn

            spart

            fksto

           FROM vbrk INTO TABLE it_vbrk

        FOR ALL ENTRIES IN it_vbrp

        WHERE vbeln = it_vbrp-vbeln.

    ENDIF.

  ENDIF.

  IF p_opt3 = 'X'.

** fetching Billing related data

* Get Billing Document: Header Data based on selection parameters

    SELECT

         vbeln

            fkart

            fktyp

            vkorg

            vtweg

            fkdat

            bukrs

            erdat

            kunrg

            kunag

            sfakn

            spart

            fksto

    FROM vbrk INTO TABLE it_vbrk

    WHERE  vkorg   IN   s_vkorg3 AND

           vtweg   IN   s_vtweg3  AND

           spart   IN   s_spart3  AND

           vbeln   IN   s_vbeln3  AND

           fkart   IN   s_fkart AND

           kunag   IN   s_kunag3 AND

           kunrg   IN   s_kunrg3 .

    IF it_vbrk IS NOT INITIAL AND it_nast IS NOT INITIAL.

      SELECT

        vbeln

        posnr

        FROM vbap INTO TABLE it_vbap

        FOR ALL ENTRIES IN it_vbrk

        WHERE vbeln = it_vbrk-vbeln.

    ENDIF.

    IF it_vbap IS NOT INITIAL.

      SELECT vbeln

            posnr

            parvw

            kunnr INTO TABLE it_vbpa FROM vbpa

            FOR ALL ENTRIES IN it_vbap

            WHERE vbeln = it_vbap-vbeln .

    ENDIF.

    IF it_vbrk IS INITIAL.

      LOOP AT it_nast INTO wa_nast.

        SELECT SINGLE vbeln

        fkart

        vkorg

        vtweg

        fkdat

        bukrs

        erdat

        kunrg

        kunag

        sfakn

        spart

        fksto

        FROM vbrk INTO  wa_vbrk

          WHERE vbeln = wa_nast-objky AND

          fkart  = s_fkart.

      ENDLOOP.

    ENDIF.

    IF it_vbrk IS NOT INITIAL.

      SELECT

              vbelv

             posnv

             vbeln

             posnn

             vbtyp_n

        FROM vbfa INTO TABLE it_vbfa

        FOR ALL ENTRIES IN it_vbrk

        WHERE vbeln = it_vbrk-vbeln.

    ENDIF.

* Filter Message Status data based on Sales document header data

    IF it_vbak IS NOT INITIAL.

      LOOP AT it_nast1 INTO wa_nast1.

        READ TABLE it_vbrk INTO wa_vbrk WITH KEY vbeln = wa_nast1-objky  . "#EC *

        IF sy-subrc = 0.

          APPEND wa_nast1 TO it_nast.

        ENDIF.

      ENDLOOP.

      REFRESH it_nast1[].

    ENDIF.

*Get Billing Document: Item Data for header values

    IF it_vbrk IS NOT INITIAL.

      SELECT

        vbeln

        vgbel

        vgpos   FROM vbrp INTO TABLE it_vbrp

        FOR ALL ENTRIES IN it_vbrk

        WHERE vbeln  = it_vbrk-vbeln.

    ENDIF.

* Get SD Document: Delivery Header Data based on selection parameters

    SELECT

        vbeln

        erdat

        vkorg

        lfart

        lfdat

        kunnr

        kunag

      FROM likp  INTO TABLE it_likp

      WHERE vkorg IN s_vkorg3

        AND vbeln IN s_vbeln3.

* Get SD Document Delivery Header Data based on Billing Document Item Data

    IF it_vbrp[] IS NOT INITIAL.

      SELECT

        vbeln

        posnr

        vgbel

        vgpos

        vtweg

        spart

        FROM lips INTO TABLE it_lips

        FOR ALL ENTRIES IN it_likp

        WHERE vbeln = it_likp-vbeln AND

        vtweg IN s_vtweg3 AND

        spart IN s_spart3.

    ENDIF.

* Get General Data in Customer Master based on  Billing Document Header Data

    IF it_vbrk IS NOT INITIAL.

      it_nast1[] = it_nast[].

      REFRESH it_nast[].

      LOOP AT it_nast1 INTO wa_nast1.

        READ TABLE it_vbrk INTO wa_vbrk WITH KEY vbeln = wa_nast1-objky  . "#EC *

        IF sy-subrc = 0.

          APPEND wa_nast1 TO it_nast.

        ENDIF.

      ENDLOOP.

      REFRESH it_nast1[].

    ENDIF.

  ENDIF.

* Sort Tables

  SORT it_vbak BY vbeln.

  SORT it_vbrp BY vbeln.

  SORT it_lips BY vbeln

                  posnr.

  SORT it_vbrk BY vbeln.

* clear work areas.

  CLEAR:

      wa_nast,

      wa_toa01,

      wa_kna1 ,

      wa_vbrp,

      wa_vbrk,

      wa_vbak,

      wa_vbap,

      wa_lips1,

      wa_likp.

ENDFORM.                    " GET_DATA

*&---------------------------------------------------------------------*

*&      Form  FIELD_CATALOG

*&---------------------------------------------------------------------*

FORM field_catalog .

  CLEAR i_fcat[].

* Field catalog for Sales process

  IF p_opt1 = 'X'.

    i_fcat-col_pos       = '1'.

    i_fcat-fieldname     = 'VBELN'.

    i_fcat-tabname       = 'IT_SALE_OUT'.

    i_fcat-seltext_l     = 'Sales Doc.no'(001).

    i_fcat-intlen        = '10'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '2'.

    i_fcat-fieldname     = 'AUART'.

    i_fcat-tabname       = 'IT_SALE_OUT'.

    i_fcat-seltext_l     = 'Sales Doc. Type'(002).

    i_fcat-intlen        = '10'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '3'.

    i_fcat-fieldname     = 'LFART'.

    i_fcat-tabname       = 'IT_SALE_OUT'.

    i_fcat-seltext_l     = 'Delivery Type'(003).

    i_fcat-intlen        = '8'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '4'.

    i_fcat-fieldname     = 'FKART'.

    i_fcat-tabname       = 'IT_SALE_OUT'.

    i_fcat-seltext_l     = 'Billing Type'(005).

    i_fcat-intlen        = '8'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '5'.

    i_fcat-fieldname     = 'VKORG'.

    i_fcat-tabname       = 'IT_SALE_OUT'.

    i_fcat-seltext_l     = 'Sales org'(006).

    i_fcat-intlen        = '7'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '6'.

    i_fcat-fieldname     = 'VTWEG'.

    i_fcat-tabname       = 'IT_SALE_OUT'.

    i_fcat-seltext_l     = 'Distribution Channel'(007).

    i_fcat-intlen        = '13'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '7'.

    i_fcat-fieldname     = 'SPART'.

    i_fcat-tabname       = 'IT_SALE_OUT'.

    i_fcat-seltext_l     = ' Market '(008).

    i_fcat-intlen        = '6'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '8'.

    i_fcat-fieldname     = 'SPRAS'.

    i_fcat-tabname       = 'IT_SALE_OUT'.

    i_fcat-seltext_l     = ' Language '(009).

    i_fcat-intlen        = '7'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '9'.

    i_fcat-fieldname     = 'FKDAT'.

    i_fcat-tabname       = 'IT_SALE_OUT'.

    i_fcat-seltext_l     = 'Document Date'(010).

    i_fcat-intlen        = '10'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::::

    i_fcat-col_pos       = '10'.

    i_fcat-fieldname     = 'BUKRS'.

    i_fcat-tabname       = 'IT_SALE_OUT'.

    i_fcat-seltext_l     = ' Company Code '(011).

    i_fcat-intlen        = '10'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '11'.

    i_fcat-fieldname     = 'KUNRG'.

    i_fcat-tabname       = 'IT_SALE_OUT'.

    i_fcat-seltext_l     = ' Payer '(012).

    i_fcat-intlen        = '8'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '12'.

    i_fcat-fieldname     = 'KUNAG'.

    i_fcat-tabname       = 'IT_SALE_OUT'.

    i_fcat-seltext_l     = 'Sold-to party'(013).

    i_fcat-intlen        = '8'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '13'.

    i_fcat-fieldname     = 'SAP_OBJECT'.

    i_fcat-tabname       = 'IT_SALE_OUT'.

    i_fcat-seltext_l     = 'Object type'(020).

    i_fcat-intlen        = '8'.

    APPEND i_fcat.

    CLEAR i_fcat.

    i_fcat-col_pos       = '14'.

    i_fcat-fieldname     = 'AR_OBJECT'.

    i_fcat-tabname       = 'IT_SALE_OUT'.

    i_fcat-seltext_l     = 'Storage type'(021).

    i_fcat-intlen        = '10'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '15'.

    i_fcat-fieldname     = 'AR_DATE'.

    i_fcat-tabname       = 'IT_SALE_OUT'.

    i_fcat-seltext_l     = 'Storage date'(022).

    i_fcat-intlen        = '25'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '16'.

    i_fcat-fieldname     = 'DEL_DATE'.

    i_fcat-tabname       = 'IT_SALE_OUT'.

    i_fcat-seltext_l     = 'Delete date'(023).

    i_fcat-intlen        = '25'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '17'.

    i_fcat-fieldname     = 'STATUS_MSG'.

    i_fcat-tabname       = 'IT_SALE_OUT'.

    i_fcat-seltext_l     = 'Comment'(024).

    i_fcat-intlen        = '34'.

    APPEND i_fcat.

    CLEAR i_fcat.

* Field catalog for Delivery Process

  ELSEIF p_opt2 = 'X'.

* ::::::::::::::::::::::::::::::::::: START

    i_fcat-col_pos       = '1'.

    i_fcat-fieldname     = 'VBELN'.

    i_fcat-tabname       = 'IT_DELV_OUT'.

    i_fcat-seltext_l     = 'Delivery Doc.no'(025).

    i_fcat-intlen        = '10'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '2'.

    i_fcat-fieldname     = 'LFART'.

    i_fcat-tabname       = 'IT_DELV_OUT'.

    i_fcat-seltext_l     = ' Delivery Type.'(026).

    i_fcat-intlen        = '10'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '3'.

    i_fcat-fieldname     = 'VKORG'.

    i_fcat-tabname       = 'IT_DELV_OUT'(014).

    i_fcat-seltext_l     = 'Sales Org.'(027).

    i_fcat-intlen        = '7'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '4'.

    i_fcat-fieldname     = 'VTWEG'.

    i_fcat-tabname       = 'IT_DELV_OUT'(014).

    i_fcat-seltext_l     = 'Distribution Channel'(007).

    i_fcat-intlen        = '13'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '5'.

    i_fcat-fieldname     = 'SPART'(015).

    i_fcat-tabname       = 'IT_DELV_OUT'.

    i_fcat-seltext_l     = 'Market'(018).

    i_fcat-intlen        = '5'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '6'.

    i_fcat-fieldname     = 'SPRAS'(016).

    i_fcat-tabname       = 'IT_DELV_OUT'.

    i_fcat-seltext_l     = 'Language'(046).

    i_fcat-intlen        = '7'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '7'.

    i_fcat-fieldname     = 'BUKRS'(017).

    i_fcat-tabname       = 'IT_DELV_OUT'.

    i_fcat-seltext_l     = 'Company Code'(028).

    i_fcat-intlen        = '10'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '8'.

    i_fcat-fieldname     = 'KUNAG'.

    i_fcat-tabname       = 'IT_DELV_OUT'.

    i_fcat-seltext_l     = 'Sold to party'(019).

    i_fcat-intlen        = '10'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '9'.

    i_fcat-fieldname     = 'KUNNR'.

    i_fcat-tabname       = 'IT_DELV_OUT'.

    i_fcat-seltext_l     = 'Ship to party'(029).

    i_fcat-intlen        = '10'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '10'.

    i_fcat-fieldname     = 'SAP_OBJECT'.

    i_fcat-tabname       = 'IT_DELV_OUT'.

    i_fcat-seltext_l     = 'Object Type'(030).

    i_fcat-intlen        = '8'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '11'.

    i_fcat-fieldname     = 'AR_OBJECT'.

    i_fcat-tabname       = 'IT_DELV_OUT'.

    i_fcat-seltext_l     = 'Storage Type'(031).

    i_fcat-intlen        = '10'.

    APPEND i_fcat.

    CLEAR i_fcat.

    i_fcat-col_pos       = '12'.

    i_fcat-fieldname     = 'AR_DATE'.

    i_fcat-tabname       = 'IT_DELV_OUT'.

    i_fcat-seltext_l     = 'Storage Date'(032).

    i_fcat-intlen        = '10'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '13'.

    i_fcat-fieldname     = 'DEL_DATE'.

    i_fcat-tabname       = 'IT_DELV_OUT'.

    i_fcat-seltext_l     = 'Delete Date'(033).

    i_fcat-intlen        = '25'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '14'.

    i_fcat-fieldname     = 'STATUS_MSG'.

    i_fcat-tabname       = 'IT_SALE_OUT'.

    i_fcat-seltext_l     = 'Comment'(024).

    i_fcat-intlen        = '34'.

    APPEND i_fcat.

    CLEAR i_fcat.

* Field catalog for Billing Process

  ELSEIF p_opt3 = 'X'.

* ::::::::::::::::::::::::::::::::::: START

    i_fcat-col_pos       = '1'.

    i_fcat-fieldname     = 'VBELN'.

    i_fcat-tabname       = 'IT_BILL_OUT'.

    i_fcat-seltext_l     = 'Billing Doc.No'(034).

    i_fcat-intlen        = '10'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '2'.

    i_fcat-fieldname     = 'LFART'.

    i_fcat-tabname       = 'IT_BILL_OUT'.

    i_fcat-seltext_l     = ' Billing  Type.'(035).

    i_fcat-intlen        = '9'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '3'.

    i_fcat-fieldname     = 'VKORG'.

    i_fcat-tabname       = 'IT_BILL_OUT'.

    i_fcat-seltext_l     = 'Sales Org'(027).

    i_fcat-intlen        = '7'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '4'.

    i_fcat-fieldname     = 'VTWEG'.

    i_fcat-tabname       = 'IT_BILL_OUT'.

    i_fcat-seltext_l     = 'Distribution Channel'(007).

    i_fcat-intlen        = '13'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '5'.

    i_fcat-fieldname     = 'SPART'.

    i_fcat-tabname       = 'IT_BILL_OUT'.

    i_fcat-seltext_l     = 'Market'(018).

    i_fcat-intlen        = '6'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '6'.

    i_fcat-fieldname     = 'SPRAS'.

    i_fcat-tabname       = 'IT_BILL_OUT'.

    i_fcat-seltext_l     = 'Language'(046).

    i_fcat-intlen        = '7'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '7'.

    i_fcat-fieldname     = 'BUKRS'.

    i_fcat-tabname       = 'IT_BILL_OUT'.

    i_fcat-seltext_l     = 'Company Code'(028).

    i_fcat-intlen        = '10'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '8'.

    i_fcat-fieldname     = 'KUNRG'.

    i_fcat-tabname       = 'IT_BILL_OUT'.

    i_fcat-seltext_l     = ' Payer '(012).

    i_fcat-intlen        = '8'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '9'.

    i_fcat-fieldname     = 'KUNAG'.

    i_fcat-tabname       = 'IT_BILL_OUT'.

    i_fcat-seltext_l     = 'Sold to party'(019).

    i_fcat-intlen        = '13'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '10'.

    i_fcat-fieldname     = 'C_VBELN'.

    i_fcat-tabname       = 'IT_BILL_OUT'.

    i_fcat-seltext_l     = 'Cancled Billed Doc. No.'(036).

    i_fcat-intlen        = '17'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '11'.

    i_fcat-fieldname     = 'FKSTO'.

    i_fcat-tabname       = 'IT_BILL_OUT'.

    i_fcat-seltext_l     = 'Billing document is cancelled'(037).

    i_fcat-intlen        = '19'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '12'.

    i_fcat-fieldname     = 'SAP_OBJECT'.

    i_fcat-tabname       = 'IT_BILL_OUT'.

    i_fcat-seltext_l     = 'Object Type'(030).

    i_fcat-intlen        = '8'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '13'.

    i_fcat-fieldname     = 'AR_OBJECT'.

    i_fcat-tabname       = 'IT_BILL_OUT'.

    i_fcat-seltext_l     = 'Storage Type'(031).

    i_fcat-intlen        = '10'.

    APPEND i_fcat.

    CLEAR i_fcat.

    i_fcat-col_pos       = '14'.

    i_fcat-fieldname     = 'AR_DATE'.

    i_fcat-tabname       = 'IT_BILL_OUT'.

    i_fcat-seltext_l     = 'Storage Date'(032).

    i_fcat-intlen        = '10'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '15'.

    i_fcat-fieldname     = 'DEL_DATE'.

    i_fcat-tabname       = 'IT_BILL_OUT'.

    i_fcat-seltext_l     = 'Delete Date'(033).

    i_fcat-intlen        = '25'.

    APPEND i_fcat.

    CLEAR i_fcat.

* ::::::::

    i_fcat-col_pos       = '16'.

    i_fcat-fieldname     = 'STATUS_MSG'.

    i_fcat-tabname       = 'IT_SALE_OUT'.

    i_fcat-seltext_l     = 'Comment'(024).

    i_fcat-intlen        = '34'.

    APPEND i_fcat.

    CLEAR i_fcat.

  ENDIF.

ENDFORM.                    " FIELD_CATALOG

*&---------------------------------------------------------------------*

*&      Form  DISPLAY_ALV

* Passing output table values to function module for

* sales , delivery and billing scenarios

*&---------------------------------------------------------------------*

FORM display_alv .

  IF p_opt1 = 'X'.

    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

      EXPORTING

        i_callback_program = sy-repid

        is_layout          = it_layout

        it_fieldcat        = i_fcat[]

        i_save             = i_save

        is_variant         = l_layout

        it_events          = it_events[]

        is_print           = st_alv_print_cat   " Remove Initial Screen

      TABLES

        t_outtab           = it_sale_out[]

      EXCEPTIONS

        program_error      = 1

        OTHERS             = 2.

    IF sy-subrc <> 0.

      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

           WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

    ENDIF.

    REFRESH it_sale_out[].

  ELSEIF p_opt2 = 'X'.

    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

      EXPORTING

        i_callback_program = sy-repid

        is_layout          = it_layout

        it_fieldcat        = i_fcat[]

        i_save             = i_save

        is_variant         = l_layout

        it_events          = it_events[]

        is_print           = st_alv_print_cat   " Remove Initial Screen

      TABLES

        t_outtab           = it_delv_out[]

      EXCEPTIONS

        program_error      = 1

        OTHERS             = 2.

    IF sy-subrc <> 0.

      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

           WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

    ENDIF.

    REFRESH it_delv_out[].

  ELSEIF p_opt3 = 'X'.

    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

      EXPORTING

        i_callback_program = sy-repid

        is_layout          = it_layout

        it_fieldcat        = i_fcat[]

        i_save             = i_save

        is_variant         = l_layout

        it_events          = it_events[]

        is_print           = st_alv_print_cat   " Remove Initial Screen

      TABLES

        t_outtab           = it_bill_out[]

      EXCEPTIONS

        program_error      = 1

        OTHERS             = 2.

    IF sy-subrc <> 0.

      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

    ENDIF.

    REFRESH it_bill_out[].

  ENDIF.

ENDFORM.                    " DISPLAY_ALV

*&------------------------------------------------------------------------*

*&      Form  DOWNLOAD_FILE

*&  Download output to excel file functionality with report output headding

*&------------------------------------------------------------------------*

FORM download_file USING p_filename TYPE string.

  TYPES: BEGIN OF ty_excel_heading,

          heading(30),

         END OF ty_excel_heading.

  DATA : it_heading TYPE STANDARD TABLE OF ty_excel_heading,

         wa_heading TYPE ty_excel_heading.

* Sales

  IF p_opt1 = 'X'.

* ::::::::::::::::::::::: sales

    wa_heading-heading   = 'Sales Doc.no'(001).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Sales Doc. Type'(002).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Delivery Type'(003).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Billing Type'(005).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Sales Org'(038).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Distribution Channel'(007).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = ' Market '(008).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = ' Language '(009).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Billing Date'(048).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = ' Company Code '(011).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = ' Payer '(012).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Sold-to Party'(047).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Object Type'(030).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Storage type'(031).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Storage Date'(032).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Delete Date'(033).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Comment'(024).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

  ELSEIF p_opt2 = 'X'.

* ::::::::::::::::::::::: Delivery

    wa_heading-heading   = 'Delivery Doc.no'(025).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = ' Delivery Type.'(026).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Sales Org.'(027).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Distribution Channel'(007).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Market'(018).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = ' Language '(009).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = ' Company Code '(011).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Sold to Party'(040).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Ship to Party'(039).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Object Type'(030).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Storage Type'(031).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Storage Date'(032).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Delete Date'(033).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Comment'(024).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

  ELSEIF p_opt3 = 'X'.

* ::::::::::::::::::::: Billing

    wa_heading-heading   = 'Billing Doc.No'(034).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = ' Billing Type.'(041).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Sales Org.'(027).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Distribution Channel'(007).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Market'(018).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = ' Language '(009).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = ' Company Code '(012).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = ' Payer '(012).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Sold to Party'(040).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Cancled Billed Doc. No.'(036).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Billing document is cancelled'(037).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Object Type'(030).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Storage Type'(031).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Storage Date'(032).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Delete Date'(033).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

* ::::::::

    wa_heading-heading   = 'Comment'(024).

    APPEND wa_heading TO it_heading.

    CLEAR wa_heading.

  ENDIF.

  IF p_opt1 = 'X'.

    CALL FUNCTION 'GUI_DOWNLOAD'

      EXPORTING

        filename                = p_filename

        filetype                = 'ASC'

        write_field_separator   = c_tab

        confirm_overwrite       = 'X'

      TABLES

        data_tab                = it_sale_out[]

        fieldnames              = it_heading[]

      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.

MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

  ELSEIF p_opt2 = 'X'.

    CALL FUNCTION 'GUI_DOWNLOAD'

      EXPORTING

        filename                = p_filename

        filetype                = 'ASC'

        write_field_separator   = c_tab

        confirm_overwrite       = 'X'

      TABLES

        data_tab                = it_delv_out[]

        fieldnames              = it_heading[]

      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.

MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

    ENDIF.

  ELSEIF p_opt3 = 'X'.

    CALL FUNCTION 'GUI_DOWNLOAD'

      EXPORTING

        filename                = p_filename

        filetype                = 'ASC'

        write_field_separator   = c_tab

        confirm_overwrite       = 'X'

      TABLES

        data_tab                = it_bill_out[]

        fieldnames              = it_heading[]

      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.

MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

    ENDIF.

  ENDIF.

ENDFORM.                    " DOWNLOAD_FILE

*&---------------------------------------------------------------------*

*&      Form  F4_FILE

*----------------------------------------------------------------------*

FORM f4_file  USING    p_p_f4 type any.

* To provide path to save report into excel file in specified location

  CALL FUNCTION 'KD_GET_FILENAME_ON_F4'

    EXPORTING

      program_name  = syst-repid

      dynpro_number = syst-dynnr

    CHANGING

      file_name     = p_p_f4.

ENDFORM.                                                    " F4_FILE

*&---------------------------------------------------------------------*

*&      Form  F_DATA

*&---------------------------------------------------------------------*

FORM f_data .

* Clearing Tables

  REFRESH:

    it_vbrp ,

      it_vbrk,

      it_vbrk1,

      it_vbak,

      it_vbap,

      it_lips,

      it_lips1,

      it_likp,

      it_kna1,

       it_vbpa,

      it_nast,

      it_toa01,

      it_toa02 ,

      it_bill_out,

      it_sale_out ,

      it_delv_out ,

      it_nast1    .

* Clearing work areas

  CLEAR:

      wa_nast1,

      wa_nast ,

      wa_toa01,

      wa_toa02,

      wa_bill_out,

      wa_delv_out,

      wa_sale_out,

      wa_lips ,

      wa_vbpa,

      wa_kna1 ,

      wa_vbrp ,

      wa_vbrk ,

      wa_vbak ,

      wa_vbap ,

      wa_lips1,

      wa_likp .

  IF p_opt1  = 'X'.

* Select message status when sales option selected

    REFRESH it_nast[].

    IF s_kschl-low <>  'Z000'.

      SELECT

             kappl

             objky

             kschl

             spras

             parnr

             parvw

             erdat

             nacha

             uhrvr

             vstat

             objtype

         FROM nast INTO TABLE it_nast

      WHERE kschl IN s_kschl  AND

      nacha IN (1 , 2 , 5 , 6).

    ELSE.

      MESSAGE 'Please enter a valid Output type in selection'(042) TYPE 'S' DISPLAY LIKE 'E'.

      LEAVE LIST-PROCESSING.

    ENDIF.

  ENDIF.

  IF p_opt2  = 'X'.

    REFRESH it_nast[].

* Select message status when Delivery  option selected

    IF S_KSCHL2-low <> 'Z000'.

    SELECT

               kappl

               objky

               kschl

               spras

               parnr

               parvw

               erdat

               nacha

               uhrvr

               vstat

               objtype

           FROM nast INTO TABLE it_nast

        WHERE kschl IN s_kschl2 AND

          nacha IN (1 , 2 , 5 , 6).

        ELSE.

      MESSAGE 'Please enter a valid Output type in selection'(042) TYPE 'S' DISPLAY LIKE 'E'.

      LEAVE LIST-PROCESSING.

    ENDIF.

  ENDIF.

  IF p_opt3  = 'X'.

    REFRESH it_nast[].

* Select message status when Billing option selected

    IF S_KSCHL-low <> 'Z000'.

    SELECT

               kappl

               objky

               kschl

               spras

               parnr

               parvw

               erdat

               nacha

               uhrvr

               vstat

               objtype

          FROM nast INTO TABLE it_nast

          WHERE kschl IN s_kschl3

          AND nacha IN (1 , 2 , 5 , 6).

      ELSE.

      MESSAGE 'Please enter a valid Output type in selection'(042) TYPE 'S' DISPLAY LIKE 'E'.

      LEAVE LIST-PROCESSING.

    ENDIF.

  ENDIF.

  IF p_opt1 = 'X'.

    CLEAR: p_opt2, p_opt3.

  ELSEIF p_opt2 = 'X'.

    CLEAR: p_opt1, p_opt3.

  ELSEIF p_opt3 = 'X'.

    CLEAR : p_opt1, p_opt2.

  ENDIF.

* Filter Sales documents Archived/Not arvhived/Wrongly archived messages

** keep archived documents by deleting other documents in message status

  IF p_sopt1 = 'X'.

    CLEAR:      p_sopt2 ,

               p_sopt3 ,

               p_dopt1 ,

               p_dopt2 ,

               p_dopt3 ,

               p_bopt1 ,

               p_bopt2 ,

               p_bopt3 .

    DELETE it_nast WHERE vstat <>  '1'.

  ELSEIF p_sopt2 = 'X'.

** keep Not archived documents by deleting other documents in message status

    CLEAR:  p_sopt1 ,

            p_sopt3 ,

            p_dopt1 ,

            p_dopt2 ,

            p_dopt3 ,

            p_bopt1 ,

            p_bopt2 ,

            p_bopt3 .

    DELETE it_nast WHERE vstat <>  0.

  ELSEIF p_sopt3 = 'X'.

** keep wrongly  archived documents by deleting other documents in message status

    CLEAR:      p_sopt1 ,

               p_sopt2 ,

               p_dopt1 ,

               p_dopt2 ,

               p_dopt3 ,

               p_bopt1 ,

               p_bopt2 ,

               p_bopt3 .

    DELETE it_nast WHERE vstat <>  2.

  ENDIF.

* Filter Delivery documents Archived/Not arvhived/Wrongly archived messages

** keep archived documents by deleting other documents in message status

  IF p_dopt1 = 'X'.

    CLEAR:              p_sopt1 ,

               p_sopt2 ,

               p_sopt3 ,

               p_dopt2 ,

               p_dopt3 ,

               p_bopt1 ,

               p_bopt2 ,

               p_bopt3 .

    DELETE it_nast WHERE vstat <>  1.

  ELSEIF p_dopt2 = 'X'.

** keep Not archived documents by deleting other documents in message status

    CLEAR:  p_sopt1 ,

            p_sopt2 ,

            p_sopt3 ,

            p_dopt1 ,

            p_dopt3 ,

            p_bopt1 ,

            p_bopt2 ,

            p_bopt3 .

    DELETE it_nast WHERE vstat <>  0.

  ELSEIF p_dopt3 = 'X'.

** keep wrongly  archived documents by deleting other documents in message status

    CLEAR:        p_sopt1 ,

           p_sopt2 ,

           p_sopt3 ,

           p_dopt1 ,

           p_dopt2 ,

           p_bopt1 ,

           p_bopt2 ,

           p_bopt3 .

    DELETE it_nast WHERE vstat <>  2.

  ENDIF.

* Filter Billing documents Archived/Not arvhived/Wrongly archived messages

** keep archived documents by deleting other documents in message status

  IF p_bopt1 = 'X'.

    CLEAR:      p_sopt1 ,

               p_sopt2 ,

               p_sopt3 ,

               p_dopt1 ,

               p_dopt2 ,

               p_dopt3 ,

               p_bopt2 ,

               p_bopt3 .

    DELETE it_nast WHERE vstat <>  1.

  ELSEIF p_bopt2 = 'X'.

** keep Not archived documents by deleting other documents in message status

    CLEAR:  p_sopt1 ,

            p_sopt2 ,

            p_sopt3 ,

            p_dopt1 ,

            p_dopt2 ,

            p_dopt3 ,

            p_bopt1 ,

            p_bopt3 .

    DELETE it_nast WHERE vstat <>  0.

  ELSEIF p_bopt3 = 'X'.

** keep wrongly  archived documents by deleting other documents in message status

    CLEAR: p_sopt1 ,

           p_sopt2 ,

           p_sopt3 ,

           p_dopt1 ,

           p_dopt2 ,

           p_dopt3 ,

           p_bopt1 ,

           p_bopt2 .

    DELETE it_nast WHERE vstat <>  2.

  ENDIF.

  SORT it_nast  DESCENDING BY  objky erdat uhrvr  spras.

  REFRESH it_nast1[].

* To fetch different OBJKY into table from NAST

  LOOP AT it_nast INTO wa_nast.

    wa_nast1 = wa_nast.

    ON CHANGE OF wa_nast-objky.

      APPEND wa_nast1 TO it_nast1.

      CLEAR: wa_nast, wa_nast1.

    ENDON.

  ENDLOOP.

* to select different languages from nast

  LOOP AT it_nast INTO wa_nast.

    ON CHANGE OF wa_nast-spras.

      READ TABLE it_nast1 INTO wa_nast WITH KEY objky = wa_nast-objky

                                                spras = wa_nast-spras  .

      IF sy-subrc <> 0.

        APPEND wa_nast TO it_nast1.

      ENDIF.

    ENDON.

  ENDLOOP.

  SORT it_nast BY objky spras.

  REFRESH it_nast[].

  it_nast[] = it_nast1[].

  SORT it_nast  DESCENDING BY  objky erdat uhrvr  spras.

  REFRESH it_nast1[].

  SORT it_nast[] DESCENDING BY objky erdat uhrvr .

  DELETE ADJACENT DUPLICATES FROM it_nast COMPARING ALL FIELDS.

ENDFORM.                    " F_DATA

*&---------------------------------------------------------------------*

*&      Sales Process

*&---------------------------------------------------------------------*

FORM p_sales .

  REFRESH it_toa01[].

  LOOP AT it_nast INTO wa_nast.

    CONCATENATE  wa_nast-objky '%' INTO wa_nast-objky.

    SELECT  SINGLE  "#EC *

       sap_object

         object_id

         archiv_id

         arc_doc_id

         ar_object

         ar_date

         del_date

         FROM toa01 INTO  wa_toa01

   WHERE object_id LIKE wa_nast-objky AND

    ar_date = wa_nast-erdat.

    IF sy-subrc = 0.

      APPEND wa_toa01 TO it_toa01.

    ENDIF.

  ENDLOOP.

  SORT  it_toa01 DESCENDING  BY   ar_date object_id.

  REFRESH it_sale_out[].

  LOOP AT it_nast INTO wa_nast.

    CLEAR: wa_toa01, wa_vbrk, wa_likp, wa_sale_out,wa_vbak,wa_vbap,wa_vbrp, wa_sale_out.

    READ TABLE it_vbak INTO wa_vbak WITH KEY vbeln = wa_nast-objky  . "#EC *

    IF sy-subrc = 0.

      wa_sale_out-spras = wa_nast-spras.

      wa_sale_out-vbeln   =     wa_vbak-vbeln.

      wa_sale_out-auart   =     wa_vbak-auart.

      wa_sale_out-vkorg   =     wa_vbak-vkorg.

      wa_sale_out-vtweg   =     wa_vbak-vtweg.

      IF wa_sale_out-vtweg IS INITIAL.

        SELECT SINGLE

          bukrs FROM tvko INTO wa_delv_out-bukrs WHERE vkorg = wa_vbak-vkorg.

      ENDIF.

      wa_sale_out-spart   =     wa_vbak-spart.

      READ TABLE it_toa01 INTO wa_toa01 WITH KEY object_id = wa_nast-objky

                                                   ar_date = wa_nast-erdat  .

      IF wa_nast-vstat = '1'.

        wa_sale_out-sap_object  =      wa_toa01-sap_object."Object type

        wa_sale_out-ar_object   =      wa_toa01-ar_object. "Storage type

        wa_sale_out-ar_date     =      wa_toa01-ar_date.   "Storage date

        wa_sale_out-del_date    =      wa_toa01-del_date.  "Delete date

      ELSE.

        wa_sale_out-status_msg = 'Sales doc. not  yet processed in NAST successfully'(043).

      ENDIF.

      READ TABLE it_vbap INTO wa_vbap WITH KEY vbeln = wa_vbak-vbeln  .

      IF sy-subrc = 0.

        wa_sale_out-kunag = wa_vbak-kunnr .    " Sold-to part *

        READ TABLE it_lips INTO wa_lips WITH KEY vgbel = wa_vbap-vbeln

                                                 vgpos = wa_vbap-posnr  .

        IF sy-subrc = 0.

          READ TABLE it_likp INTO wa_likp WITH KEY vbeln =  wa_lips-vbeln  .

          IF sy-subrc = 0.

            wa_sale_out-lfart = wa_likp-lfart.     "      "Delivery Type

          ENDIF.

        ENDIF.

      ENDIF.

      IF wa_sale_out-kunag IS INITIAL.           "For Sold-to

        READ TABLE it_vbpa INTO wa_vbpa WITH KEY vbeln = wa_vbap-vbeln

                                                 parvw  = 'AG'  .

        IF sy-subrc = 0.

          wa_sale_out-kunag = wa_vbpa-kunnr.

        ENDIF.

      ENDIF.

      IF wa_sale_out-kunrg IS INITIAL.            "Payer

        READ TABLE it_vbpa INTO wa_vbpa WITH KEY vbeln = wa_vbap-vbeln

                                                 parvw  = 'RG'  .

        IF sy-subrc = 0.

          wa_sale_out-kunrg = wa_vbpa-kunnr.

        ENDIF.

      ENDIF.

      IF sy-subrc = 0.

        READ TABLE it_vbrp INTO wa_vbrp WITH KEY  vgbel = wa_lips-vbeln vgpos = wa_lips-posnr  .

      ENDIF.

      READ TABLE it_vbrk INTO wa_vbrk WITH KEY vbeln = wa_vbrp-vbeln  .

      IF sy-subrc = 0.

        wa_sale_out-kunag   =     wa_vbrk-kunag.

        wa_sale_out-fkart   =     wa_vbrk-fkart.

        wa_sale_out-fkdat   =     wa_vbrk-fkdat.

        wa_sale_out-bukrs   =     wa_vbrk-bukrs.

        wa_sale_out-kunrg   =     wa_vbrk-kunrg.

      ENDIF.

    ENDIF.

    IF wa_sale_out-fkdat IS INITIAL.

      wa_sale_out-fkdat  = wa_vbak-erdat.

    ENDIF.

    IF wa_sale_out-bukrs IS INITIAL.

      wa_sale_out-bukrs  =  wa_vbak-bukrs_vf  .     " Company Code *

    ENDIF.

    IF wa_sale_out IS NOT INITIAL.

      APPEND wa_sale_out TO it_sale_out.

    ENDIF.

    CLEAR : wa_sale_out, wa_vbrk, wa_vbrp, wa_vbak, wa_toa01, wa_likp, wa_lips.

  ENDLOOP.

  SORT it_sale_out BY vbeln vkorg vtweg.

ENDFORM.                    " P_SALES

*&---------------------------------------------------------------------*

*&      Billing Process

*&---------------------------------------------------------------------*

FORM p_billing .

  REFRESH it_toa01[].

  LOOP AT it_nast INTO wa_nast.

    CONCATENATE  wa_nast-objky '%' INTO wa_nast-objky.

    SELECT  SINGLE   "#EC *

       sap_object

         object_id

         archiv_id

         arc_doc_id

         ar_object

         ar_date

         del_date

         FROM toa01 INTO  wa_toa01

   WHERE object_id LIKE wa_nast-objky AND

    ar_date = wa_nast-erdat.

    IF sy-subrc = 0.

      APPEND wa_toa01 TO it_toa01.

    ENDIF.

  ENDLOOP.

  SORT  it_toa01 DESCENDING  BY   ar_date object_id.

  REFRESH it_bill_out[].

  LOOP AT it_nast INTO wa_nast.

    CLEAR wa_bill_out.

    READ TABLE it_vbrk INTO wa_vbrk WITH KEY  vbeln = wa_nast-objky  . "#EC *

    IF sy-subrc = 0.

      wa_bill_out-vbeln = wa_vbrk-vbeln.    "      Delivery

      wa_bill_out-vkorg = wa_vbrk-vkorg.    "      "Sales Organization

      wa_bill_out-vtweg = wa_vbrk-vtweg.    "      "Distribution Channel

      wa_bill_out-kunrg = wa_vbrk-kunrg.    "      " Payer

      wa_bill_out-bukrs = wa_vbrk-bukrs.    "      "Company Code

      wa_bill_out-spart = wa_vbrk-spart.    "      " Market

      wa_bill_out-spras = wa_nast-spras.    "      "Language

      wa_bill_out-kunag = wa_vbrk-kunag.    "      "Sold-to party

      READ TABLE it_vbfa INTO wa_vbfa WITH KEY vbelv = wa_vbrk-vbeln   .

      IF sy-subrc = 0.

        IF wa_vbrk-fktyp = 'N'.

          wa_bill_out-c_vbeln = wa_vbfa-vbeln.    "    "Cancelled billing document number

          wa_bill_out-fksto = wa_vbrk-fksto.    "      "Billing document is cancel

        ENDIF.

      ENDIF.

      READ TABLE it_toa01 INTO wa_toa01 WITH KEY object_id = wa_nast-objky

                                                 ar_date = wa_nast-erdat  .

      IF wa_nast-vstat = '1'.

        wa_bill_out-sap_object    =   wa_toa01-sap_object.  "Object

        wa_bill_out-ar_object             =   wa_toa01-ar_object.    "Strorage

        wa_bill_out-ar_date  =   wa_toa01-ar_date.          "Storage date

        wa_bill_out-del_date   =   wa_toa01-del_date.       "Delete date

      ELSE.

        wa_bill_out-status_msg = 'Billing doc. not  yet processed in NAST successfully'(044).

      ENDIF.

      READ TABLE it_vbrp INTO wa_vbrp WITH KEY vbeln = wa_vbrk-vbeln.

      IF sy-subrc = 0.

        READ TABLE it_lips INTO wa_lips WITH KEY vbeln = wa_vbrp-vgbel

                                           posnr = wa_vbrp-vgpos  .

        IF sy-subrc = 0.

          READ TABLE it_likp INTO wa_likp   WITH KEY vbeln = wa_lips-vbeln  .

          IF sy-subrc = 0.

            wa_bill_out-lfart = wa_vbrk-fkart.       "      "Delivery

          ENDIF.

        ENDIF.

      ENDIF.

    ENDIF.

    IF wa_bill_out-kunag IS INITIAL.           "For Sold-to

      READ TABLE it_vbpa INTO wa_vbpa WITH KEY vbeln = wa_vbap-vbeln

                                               parvw  = 'AG'  .

      IF sy-subrc = 0.

        wa_bill_out-kunag = wa_vbpa-kunnr.

      ENDIF.

    ENDIF.

    IF wa_bill_out-kunrg IS INITIAL.            "Payer

      READ TABLE it_vbpa INTO wa_vbpa WITH KEY vbeln = wa_vbap-vbeln

                                               parvw  = 'RG'  .

      IF sy-subrc = 0.

        wa_bill_out-kunrg = wa_vbpa-kunnr.

      ENDIF.

    ENDIF.

    IF wa_bill_out IS NOT INITIAL.

      APPEND wa_bill_out TO it_bill_out.

    ENDIF.

  ENDLOOP.

  SORT it_bill_out BY  vbeln vkorg vtweg.

ENDFORM.                    " P_BILLING

*&---------------------------------------------------------------------*

*&      Delivery Process

*&---------------------------------------------------------------------*

FORM p_delivery .

  REFRESH it_toa01[].

SORT  it_toa01 DESCENDING  BY   ar_date object_id.

  REFRESH it_delv_out[].

  LOOP AT it_nast INTO wa_nast.

    CLEAR wa_delv_out.

    READ TABLE it_likp INTO wa_likp WITH KEY vbeln = wa_nast-objky. "#EC *

    IF sy-subrc = 0.

      wa_delv_out-spras = wa_nast-spras.

      wa_delv_out-vbeln     =   wa_likp-vbeln.           "Delivery Doc No

      wa_delv_out-lfart     =   wa_likp-lfart.           "Delivery Type

      wa_delv_out-vkorg     =   wa_likp-vkorg.           "Sales Organization

      wa_delv_out-kunag     =   wa_likp-kunag.           "Sold-to party

      wa_delv_out-kunnr     =   wa_likp-kunnr.           "ship to party

      CONCATENATE  wa_nast-objky '%' INTO wa_nast-objky.

      SELECT  SINGLE   "#EC *

         sap_object

           object_id

           archiv_id

           arc_doc_id

           ar_object

           ar_date

           del_date

           FROM toa03 INTO  wa_toa03

     WHERE object_id LIKE wa_nast-objky .

      IF wa_nast-vstat = '1'.

        wa_delv_out-sap_object  =   wa_toa03-sap_object. "Object

        wa_delv_out-ar_object   =   wa_toa03-ar_object.  "Strorage

        wa_delv_out-ar_date     =   wa_toa03-ar_date.    "Storage date

        wa_delv_out-del_date    =   wa_toa03-del_date.   "Delete date

      ELSE.

        wa_delv_out-status_msg = ' Delivery  doc. not  yet processed in NAST successfully '(045).

      ENDIF.

    ENDIF.

    READ TABLE it_lips INTO wa_lips WITH KEY vbeln = wa_likp-vbeln  .

    IF sy-subrc = 0.

      wa_delv_out-vtweg = wa_lips-vtweg.                "Distribution Channel

      wa_delv_out-spart = wa_lips-spart.                "Market

    ENDIF.

    SELECT SINGLE

        bukrs FROM tvko INTO wa_delv_out-bukrs WHERE vkorg = wa_likp-vkorg.

    IF wa_delv_out-kunag IS INITIAL.           "For Sold-to

      READ TABLE it_vbpa INTO wa_vbpa WITH KEY vbeln = wa_vbap-vbeln

                                               parvw  = 'AG'  .

      IF sy-subrc = 0.

        wa_delv_out-kunag = wa_vbpa-kunnr.

      ENDIF.

    ENDIF.

    IF wa_delv_out IS NOT INITIAL.

      IF wa_delv_out-spart IS NOT INITIAL AND  wa_delv_out-vtweg IS NOT INITIAL.

        APPEND wa_delv_out TO it_delv_out.

      ENDIF.

    ENDIF.

    CLEAR:wa_delv_out, wa_toa03, wa_vbrk, wa_likp, wa_nast.

  ENDLOOP.

SORT it_delv_out  BY  vbeln vkorg vtweg         .

ENDFORM.                    " P_DELIVERY

Read only

0 Likes
1,782

Hello Zhang,

If you know the requirement for the new Read program, you can build those logic. But if you want that new program to work in same was as standard program then there is a configuration associated to that.

Here you go.

Steps:

1. Go to the transaction AOBJ.

2. Find the Archiving object for which you are trying to develop a new Read program

3. Double click on that entry, here you can see the standard programs mapped for Write, Delete, Read, Prepossessing and Post-processing, as shown in the below image.

Make a copy of the Read program and inside that you can build your own logic, once the program is ready map your new program to the Read program here, so that from the Transaction code SARA you can access just by clicking on the Read button.

Hope this is useful for you.

Thanks

Nivash

Read only

0 Likes
1,782

Thank you so much, I get it!

Read only

0 Likes
1,782

Thanks for the help, I will study the code carefully.

Read only

former_member189009
Active Participant
0 Likes
1,782

but i still have this question unable to understand.

Secondly, I want to know what is the archive index? what the relation between the archive index and the archive table.

Thirdly, how do I find the FM like MMPUR_PO_READ_FROM_ARCHIVE to get the archive data when i want to get the archive data in table such as  vbak,vbap?