2013 Nov 01 3:15 AM
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.
2013 Nov 01 3:41 AM
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
2013 Nov 01 6:14 AM
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.
2013 Nov 01 7:25 AM
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
2013 Nov 03 11:06 PM
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
2013 Nov 04 3:22 AM
2013 Nov 04 3:23 AM
2013 Nov 05 10:42 AM
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?