0% found this document useful (0 votes)
230 views25 pages

Manual Instructions

This document provides instructions for creating a report program called ZIND_AUDIT_REPORT in SAP. It includes copying code from various include programs to define data structures, declare tables and cursors, and write processing logic for the report. The report will read invoice data from different SAP tables and generate output.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
230 views25 pages

Manual Instructions

This document provides instructions for creating a report program called ZIND_AUDIT_REPORT in SAP. It includes copying code from various include programs to define data structures, declare tables and cursors, and write processing logic for the report. The report will read invoice data from different SAP tables and generate output.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 25

1. Go To Transaction SE38.

2. Enter ZIND_AUDIT_REPORT in the Program Field and Click on Create button.


3. Enter Title as VAT Report for Indonesia.
4. Select Type as Executable Program.
5. Click on SAVE.
6. Enter the Package Details (If any) else Save it as a local object.

7. Copy the Following Code in the Report.( Delete Existing Code REPORT ZIND_AUDIT_REPORT)

*&---------------------------------------------------------------------
*
*& Report ZIND_AUDIT_REPORT
*&
*&---------------------------------------------------------------------
*
*&
*&
*&---------------------------------------------------------------------
*

REPORT ZIND_AUDIT_REPORT NO STANDARD PAGE HEADING MESSAGE-ID ZIND.

*--> Include for Data Declaration


INCLUDE ZIND_AUDIT_REPT_TOP.

*--> Include for Screen


INCLUDE ZIND_AUDIT_REPT_SCR.

"--> Include for main processing


INCLUDE ZIND_AUDIT_REPT_F01.

8. Double Click on INCLUDE ZIND_AUDIT_REPT_TOP, and Copy the Code written below.( Delete
any existing codes or comments).

*&---------------------------------------------------------------------
*
*& Include ZIND_AUDIT_REPT_TOP
*&---------------------------------------------------------------------
*

TABLES: bset,
bseg,
vbak,
vbrk,
lfa1,
kna1,
bkpf.

CONSTANTS gc_filename TYPE fileintern VALUE 'FI_TAX'.


DATA: gv_t001_periv TYPE t001-periv,
gv_t001_waers TYPE t001-waers,
gv_bukrs_land TYPE land1.

DATA: cur_bkpf TYPE cursor, " Get the data from database table bkpf.
cur_bset TYPE cursor,
cur_bseg TYPE cursor,
cur_kna1 TYPE cursor,
cur_vbrp TYPE cursor,
cur_lfa1 TYPE cursor.

TYPES: BEGIN OF st_bkpf,


bukrs TYPE bkpf-bukrs,
belnr TYPE bkpf-belnr,
gjahr TYPE bkpf-gjahr,
blart TYPE bkpf-blart,
bldat TYPE bkpf-bldat,
awtyp TYPE bkpf-awtyp,
budat TYPE bkpf-budat,
monat TYPE bkpf-monat,
xblnr TYPE bkpf-xblnr,
bktxt TYPE bkpf-bktxt,
waers TYPE bkpf-waers,
xreversal TYPE bkpf-xreversal,
awkey TYPE bkpf-awkey,
knumv TYPE bkpf-knumv,
tcode TYPE bkpf-tcode,
END OF st_bkpf.

TYPES: BEGIN OF st_mkpf,


mblnr TYPE mkpf-mblnr,
END OF st_mkpf.

TYPES: BEGIN OF st_bset,


bukrs TYPE bset-bukrs,
belnr TYPE bset-belnr,
gjahr TYPE bset-gjahr,
buzei TYPE bset-buzei,
stceg TYPE bset-stceg,
hwbas TYPE bset-hwbas,
hwste TYPE bset-hwste,
mwskz TYPE bset-mwskz,
ktosl TYPE bset-ktosl,
END OF st_bset.

TYPES: BEGIN OF st_bseg,


bukrs TYPE bseg-bukrs,
belnr TYPE bseg-belnr,
gjahr TYPE bseg-gjahr,
koart TYPE bseg-koart,
kunnr TYPE bseg-kunnr,
lifnr TYPE bseg-lifnr,
vbeln TYPE bseg-vbeln,
posn2 TYPE bseg-posn2,
END OF st_bseg.

TYPES: BEGIN OF st_lfa1,


lifnr TYPE lfa1-lifnr,
name1 TYPE lfa1-name1,
stras TYPE lfa1-stras,
ort01 TYPE lfa1-ort01,
regio TYPE lfa1-regio,
pstlz TYPE lfa1-pstlz,
stceg TYPE lfa1-stceg,
END OF st_lfa1.

TYPES: BEGIN OF st_kna1,


kunnr TYPE kna1-kunnr,
name1 TYPE kna1-name1,
stceg TYPE kna1-stceg,
stcd1 TYPE kna1-stcd1,
ort01 TYPE kna1-ort01,
regio TYPE kna1-regio,
pstlz TYPE kna1-pstlz,
stras TYPE kna1-stras,
adrnr TYPE kna1-adrnr,
spras TYPE kna1-spras,
END OF st_kna1.

TYPES: BEGIN OF st_vbrp,


vbeln TYPE vbrp-vbeln,
posnr TYPE vbrp-posnr,
matnr TYPE vbrp-matnr,
arktx TYPE vbrp-arktx,
fkimg TYPE vbrp-fkimg,
END OF st_vbrp.

TYPES: BEGIN OF st_disp,


belnr TYPE zind_vat_out_dme-belnr,
gjahr TYPE zind_vat_out_dme-gjahr,
bldat TYPE zind_vat_out_dme-bldat,
END OF st_disp.

DATA: it_bkpf TYPE TABLE OF st_bkpf,


it_bset TYPE TABLE OF st_bset,
it_bseg TYPE TABLE OF st_bseg,
it_lfa1 TYPE TABLE OF st_lfa1,
it_kna1 TYPE TABLE OF st_kna1,
it_vbrp TYPE TABLE OF st_vbrp,
it_mkpf TYPE TABLE OF st_mkpf.

DATA: it_vat_in TYPE TABLE OF zind_vat_in,


st_vat_in TYPE zind_vat_in,
it_vat_out TYPE TABLE OF zind_vat_out_dme,
st_vat_out TYPE zind_vat_out_dme,
st_vat_line TYPE zind_vat_out_line,
it_vat_line TYPE TABLE OF zind_vat_out_line,
st_vat_item TYPE zind_vat_out_item,
it_vat_item TYPE TABLE OF zind_vat_out_item.

DATA: par_dmea TYPE fpm_selpar-param,


push_dme(83) TYPE c.

9. Double Click on INCLUDE ZIND_AUDIT_REPT_SCR. Copy the Code Snippet written Below. (Delete
any existing code or comments).

*&---------------------------------------------------------------------
*
*& Include ZIND_AUDIT_REPT_SCR
*&---------------------------------------------------------------------
*

*************** SELECTION-SCREEN FIELDS**********************

*--> Company Code


PARAMETERS: p_bukrs TYPE t001-bukrs.

*--> Date range for Invoices


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS post_dat TYPE c RADIOBUTTON GROUP grp1 DEFAULT 'X' USER-
COMMAND sel. "#EC NOTEXT
PARAMETERS acc_doc TYPE c RADIOBUTTON GROUP grp1.
SELECT-OPTIONS: p_dat FOR bkpf-budat MODIF ID s1.
SELECT-OPTIONS: p_doc FOR bkpf-belnr MODIF ID s2.
PARAMETERS: p_fis TYPE bkpf-gjahr MODIF ID s3.
SELECTION-SCREEN END OF BLOCK b1.

"Radio buttons for modules selections


PARAMETERS p_sel_sd TYPE c RADIOBUTTON GROUP grp2 DEFAULT 'X'. "#EC NO
TEXT
PARAMETERS p_sel_mm TYPE c RADIOBUTTON GROUP grp2.
PARAMETERS p_trtyp TYPE dmee_treetype_aba.
PARAMETERS p_trid TYPE dmee_treeid_aba.
PARAMETERS par_file LIKE rfpdo1-allgunix.
PARAMETERS rev_tax TYPE c DEFAULT '0'.

"Generate output
PARAMETERS p_crt_ot TYPE c AS CHECKBOX DEFAULT 'X'. "#EC NOTEXT

AT SELECTION-SCREEN OUTPUT.

IF post_dat = abap_true.
LOOP AT SCREEN.
IF screen-group1 = 'S2'
OR screen-group1 = 'S3'.
screen-input = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ELSEIF acc_doc = abap_true.
LOOP AT SCREEN.
IF screen-group1 = 'S1'.
screen-input = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.

START-OF-SELECTION.

PERFORM validation.

IF p_sel_sd = abap_true.
PERFORM read_sd_invoices.
ELSE.
PERFORM read_mm_invoices.
ENDIF.

END-OF-SELECTION.

IF p_crt_ot = 'X'.
PERFORM generate_output.
ENDIF.

PERFORM display_data.

10. Double Click on INCLUDE ZIND_AUDIT_REPT_F01. Copy the Code snippet written below.

*&---------------------------------------------------------------------*
*& Include ZIND_AUDIT_REPT_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form READ_SD_INVOICES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM read_sd_invoices .
*----------------------------------------------------------------------------
---------------
* For VAT IN Reporting Fetch MM side Invoice Details for the Company Code and
Date range
* 1. Fetch BELNR,BKTXT,BLDAT,MONAT from BKPF table and pass it to DMEE tree t
able
* 2. Fetch STCEG,HWBAS,HWSTE from BSET table and pass it to the DMEE tree tab
le
* 3. Fetch
*----------------------------------------------------------------------------
---------------

DATA : lt_bkpf TYPE TABLE OF st_bkpf,


ls_bkpf TYPE st_bkpf,
ls_mkpf TYPE st_mkpf,
ls_bseg TYPE st_bseg,
ls_sel_opt TYPE selopt,
it_sel_opt TYPE TABLE OF selopt.

*----------------------------------------------------------------------------
---------------
* Fetch Documents from BKPF Table
*----------------------------------------------------------------------------
---------------
IF acc_doc IS INITIAL.
OPEN CURSOR cur_bkpf
FOR SELECT bukrs
belnr
gjahr
blart
bldat
awtyp
budat
monat
xblnr
bktxt
waers
xreversal
tcode
awkey
FROM bkpf
WHERE bukrs = p_bukrs
AND budat IN p_dat.
ELSE.
OPEN CURSOR cur_bkpf
FOR SELECT bukrs
belnr
gjahr
blart
bldat
awtyp
budat
monat
xblnr
bktxt
waers
xreversal
tcode
awkey
FROM bkpf
WHERE bukrs = p_bukrs
AND belnr IN p_doc
AND gjahr = p_fis.
ENDIF.
"--> If Entries are found in BFKP table,prcess them
IF sy-subrc = 0.
FETCH NEXT CURSOR cur_bkpf INTO CORRESPONDING FIELDS OF TABLE it_bkpf.
IF sy-subrc = 0.
"--> Delete Documents which are Sales sided
DELETE it_bkpf WHERE awtyp = 'RMRP'.
"--> Delete Documents which are not Billing Documents.
DELETE it_bkpf WHERE awtyp NE 'VBRK'
AND awtyp NE 'BKPF'.
"--> Delete Rebate Documents
DELETE it_bkpf WHERE tcode EQ 'VBOF'.
"--> Delete where tcode is initial
DELETE it_bkpf WHERE tcode IS INITIAL.
DELETE it_bkpf WHERE awtyp EQ 'BKPF'
AND tcode NE 'FV70'
AND tcode NE 'FBVB'.

"--> If there are no valid records for processing, Exit


IF it_bkpf IS INITIAL.
MESSAGE 'No Billing Documents Found for the Given Fiscal Period' TYPE
'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.

"--> Sort the documents to fill DME sequentialy


SORT it_bkpf BY bukrs belnr gjahr.

lt_bkpf[] = it_bkpf[].

LOOP AT lt_bkpf INTO ls_bkpf.


IF ls_bkpf-xblnr IS NOT INITIAL.
SELECT SINGLE mblnr FROM mkpf INTO ls_mkpf WHERE mblnr = ls_bkpf-
xblnr.
IF sy-subrc = 0.
DELETE it_bkpf WHERE xblnr = ls_bkpf-xblnr.
ENDIF.
ENDIF.
ENDLOOP.

ELSE.
MESSAGE 'No Billing Documents Found for the Given Fiscal Period' TYPE '
S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.

"--> Throw error if no entries found in BKPF table


ELSE.
MESSAGE 'No Billing Documents Found for the Given Fiscal Period' TYPE 'S'
DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.

IF it_bkpf IS NOT INITIAL.


*----------------------------------------------------------------------------
---------------
* Fetch Document's Amount dteauls from BSET Table
*----------------------------------------------------------------------------
---------------
OPEN CURSOR cur_bset
FOR SELECT bukrs
belnr
gjahr
buzei
stceg
hwbas
hwste
mwskz
ktosl
FROM bset
FOR ALL ENTRIES IN it_bkpf
WHERE bukrs = it_bkpf-bukrs
AND belnr = it_bkpf-belnr
AND gjahr = it_bkpf-gjahr.

"--> If Entries are found in BSET table,prcess them


IF sy-subrc = 0.
FETCH NEXT CURSOR cur_bset INTO CORRESPONDING FIELDS OF TABLE it_bset .
IF sy-subrc = 0.
"--> Sort the documents to fill DME sequentialy
SORT it_bset BY bukrs belnr gjahr.

ELSE.
MESSAGE 'No VAT Details Found for the Given Billing Documents' TYPE '
S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.

"--> Throw error if no entries found in BSET table


ELSE.
MESSAGE 'No VAT Details Found for the Given Billing Documents' TYPE 'S'
DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.

*----------------------------------------------------------------------------
---------------
* Fetch Customer Number from BSEG Table
*----------------------------------------------------------------------------
---------------
OPEN CURSOR cur_bseg
FOR SELECT bukrs
belnr
gjahr
buzei
koart
kunnr
lifnr
vbeln
FROM bseg
FOR ALL ENTRIES IN it_bkpf
WHERE bukrs = it_bkpf-bukrs
AND belnr = it_bkpf-belnr
AND gjahr = it_bkpf-gjahr.

"--> If Entries are found in BSEG table,prcess them


IF sy-subrc = 0.
FETCH NEXT CURSOR cur_bseg INTO CORRESPONDING FIELDS OF TABLE it_bseg .
IF sy-subrc = 0.
DELETE it_bseg WHERE koart NE 'D'.

LOOP AT it_bseg INTO ls_bseg.


ls_sel_opt-low = ls_bseg-belnr.
ls_sel_opt-sign = 'I'.
ls_sel_opt-option = 'EQ'.
INSERT ls_sel_opt INTO TABLE it_sel_opt.
ENDLOOP.

DELETE it_bkpf WHERE belnr NOT IN it_sel_opt.


ELSE.
"==> Error
ENDIF.

ELSE.
"==> Error
ENDIF.

*----------------------------------------------------------------------------
---------------
* Fetch Customer Details from KNA1 Table
*----------------------------------------------------------------------------
---------------
IF it_bseg IS NOT INITIAL.
OPEN CURSOR cur_kna1
FOR SELECT kunnr
name1
stcd1
ort01
regio
pstlz
stras
adrnr
FROM kna1
FOR ALL ENTRIES IN it_bseg
WHERE kunnr = it_bseg-kunnr.

"--> If Entries are found in BSEG table,prcess them


IF sy-subrc = 0.
FETCH NEXT CURSOR cur_kna1 INTO CORRESPONDING FIELDS OF TABLE it_kna1
.
IF sy-subrc = 0.

ELSE.
"==> Error
ENDIF.

ELSE.
"==> Error
ENDIF.
ENDIF.
"--> FIll the Output DME tree table
PERFORM fill_dme_tree_table_sd.

ENDIF.
ENDFORM. " READ_SD_INVOICES
*&---------------------------------------------------------------------*
*& Form READ_MM_INVOICES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM read_mm_invoices .
*----------------------------------------------------------------------------
---------------
* For VAT IN Reporting Fetch MM side Invoice Details for the Company Code and
Date range
* 1. Fetch BELNR,BKTXT,BLDAT,MONAT from BKPF table and pass it to DMEE tree t
able
* 2. Fetch STCEG,HWBAS,HWSTE from BSET table and pass it to the DMEE tree tab
le
* 3. Fetch
*----------------------------------------------------------------------------
---------------
DATA: ls_bseg TYPE st_bseg,
ls_sel_opt TYPE selopt,
it_sel_opt TYPE TABLE OF selopt.

*----------------------------------------------------------------------------
---------------
* Fetch Documents from BKPF Table
*----------------------------------------------------------------------------
---------------
IF acc_doc IS INITIAL.
OPEN CURSOR cur_bkpf
FOR SELECT bukrs
belnr
gjahr
blart
bldat
awtyp
budat
monat
xblnr
bktxt
waers
xreversal
tcode
awkey
FROM bkpf
WHERE bukrs = p_bukrs
AND budat IN p_dat.
ELSE.
OPEN CURSOR cur_bkpf
FOR SELECT bukrs
belnr
gjahr
blart
bldat
awtyp
budat
monat
xblnr
bktxt
waers
xreversal
tcode
awkey
FROM bkpf
WHERE bukrs = p_bukrs
AND belnr IN p_doc
AND gjahr = p_fis.
ENDIF.

"--> If Entries are found in BFKP table,prcess them


IF sy-subrc = 0.
FETCH NEXT CURSOR cur_bkpf INTO CORRESPONDING FIELDS OF TABLE it_bkpf .
IF sy-subrc = 0.
"--> Delete Documents which are Sales sided
DELETE it_bkpf WHERE awtyp = 'VBRK'.
DELETE it_bkpf WHERE awtyp = 'MKPF'.
DELETE it_bkpf WHERE awtyp = 'BKPFF'.

DELETE it_bkpf WHERE tcode NE 'MIRO'


AND tcode NE 'MR1M'
AND tcode NE 'MR8M'
AND tcode NE 'FB60'
AND tcode NE 'FBVB'.

DELETE it_bkpf WHERE tcode EQ 'FBVB'.

"--> Sort the documents to fill DME sequentialy


SORT it_bkpf BY bukrs belnr gjahr.

"--> If there are no valid records for processing, Exit


IF it_bkpf IS INITIAL.
MESSAGE 'No Billing Documents Found for the Given Fiscal Period' TYPE
'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.

ELSE.
MESSAGE 'No Billing Documents Found for the Given Fiscal Period' TYPE '
S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.

"--> Throw error if no entries found in BKPF table


ELSE.
MESSAGE 'No Billing Documents Found for the Given Fiscal Period' TYPE 'S'
DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.

IF it_bkpf IS NOT INITIAL.


*----------------------------------------------------------------------------
---------------
* Fetch Document's Amount dteauls from BSET Table
*----------------------------------------------------------------------------
---------------
OPEN CURSOR cur_bset
FOR SELECT bukrs
belnr
gjahr
buzei
stceg
hwbas
hwste
mwskz
ktosl
FROM bset
FOR ALL ENTRIES IN it_bkpf
WHERE bukrs = it_bkpf-bukrs
AND belnr = it_bkpf-belnr
AND gjahr = it_bkpf-gjahr.

"--> If Entries are found in BSET table,prcess them


IF sy-subrc = 0.
FETCH NEXT CURSOR cur_bset INTO CORRESPONDING FIELDS OF TABLE it_bset .
IF sy-subrc = 0.
"--> Sort the documents to fill DME sequentialy
SORT it_bset BY bukrs belnr gjahr.

ELSE.
MESSAGE 'No VAT Details found for the Billing Documents' TYPE 'S' DIS
PLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.

"--> Throw error if no entries found in BSET table


ELSE.
MESSAGE 'No VAT Details found for the Billing Documents' TYPE 'S' DISPL
AY LIKE 'E'.
LEAVE LIST-PROCESSING..
ENDIF.

*----------------------------------------------------------------------------
---------------
* Fetch Vendor Number from BSEG Table
*----------------------------------------------------------------------------
---------------
OPEN CURSOR cur_bseg
FOR SELECT bukrs
belnr
gjahr
buzei
lifnr
FROM bseg
FOR ALL ENTRIES IN it_bkpf
WHERE bukrs = it_bkpf-bukrs
AND belnr = it_bkpf-belnr
AND gjahr = it_bkpf-gjahr.

"--> If Entries are found in BSEG table,prcess them


IF sy-subrc = 0.
FETCH NEXT CURSOR cur_bseg INTO CORRESPONDING FIELDS OF TABLE it_bseg .
IF sy-subrc = 0.
DELETE it_bseg WHERE koart NE 'K'.

LOOP AT it_bseg INTO ls_bseg.


ls_sel_opt-low = ls_bseg-belnr.
ls_sel_opt-sign = 'I'.
ls_sel_opt-option = 'EQ'.
INSERT ls_sel_opt INTO TABLE it_sel_opt.
ENDLOOP.

DELETE it_bkpf WHERE belnr NOT IN it_sel_opt.


ELSE.
"==> Error
ENDIF.

"--> Throw error if no entries found in BSET table


ELSE.
"==> Error
ENDIF.

*----------------------------------------------------------------------------
---------------
* Fetch Vendor Address and Name from LFA1 table
*----------------------------------------------------------------------------
---------------
IF it_bseg IS NOT INITIAL.
OPEN CURSOR cur_lfa1
FOR SELECT lifnr
name1
stras
ort01
regio
pstlz
stceg
FROM lfa1
FOR ALL ENTRIES IN it_bseg
WHERE lifnr = it_bseg-lifnr.

"--> If Entries are found in BSET table,prcess them


IF sy-subrc = 0.
FETCH NEXT CURSOR cur_lfa1 INTO CORRESPONDING FIELDS OF TABLE it_lfa1
.
IF sy-subrc = 0.

ELSE.
"==> Error
ENDIF.
"--> Throw error if no entries found in BSET table
ELSE.
"==> Error
ENDIF.
ENDIF.

"--> FIll the Output DME tree table


PERFORM fill_dme_tree_table_mm.
ENDIF.
ENDFORM. " READ_MM_INVOICES
*&---------------------------------------------------------------------*
*& Form GENERATE_OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM generate_output .

DATA: l_number TYPE rfums_tax_item-lfdnr,


ls_dme_parameters TYPE zind_vat_in_params,
ls_dme_item TYPE zind_vat_out_item,
ls_dme_item_in TYPE zind_vat_in_item,
lt_dme_file TYPE TABLE OF dmee_output_file,
lt_dme_sortfields TYPE TABLE OF dmee_tree_sort,
ls_tax_item TYPE rfums_tax_item,
lt_tax_item TYPE TABLE OF rfums_tax_item,
lv_counter TYPE i.
DATA: ld_renumber TYPE xfeld,
ld_country TYPE t005-intca.

* Initialization of the DME Engine


ls_dme_parameters-zind_vat_in_param-datum = sy-datum.

"--> If processing SD Billing Documents


IF p_sel_sd = abap_true.
"--> Start DME Engine with the Output Tree
CALL FUNCTION 'DMEE_START'
EXPORTING
i_tree_type = p_trtyp
i_tree_id = p_trid
item = ls_dme_item
param = ls_dme_parameters
uparam = par_dmea
TABLES
file_output = lt_dme_file
sort_fields = lt_dme_sortfields.

"-->Create DTA-File with DME-Engine


CLEAR : st_vat_out, st_vat_line.
LOOP AT it_vat_out INTO st_vat_out.
ls_dme_item-zind_vat_out_dme = st_vat_out.
lv_counter = 0.
LOOP AT it_vat_line INTO st_vat_line WHERE belnr = st_vat_out-belnr.
st_vat_line-belnr = st_vat_line-belnr + lv_counter.
lv_counter = lv_counter + 1.
ls_dme_item-zind_vat_out_line = st_vat_line.
CALL FUNCTION 'DMEE_PUT_ITEM'
EXPORTING
item = ls_dme_item
param = ls_dme_parameters
uparam = par_dmea "899205
TABLES
file_output = lt_dme_file.
ENDLOOP.
ENDLOOP.

"--> If processing MM billing Documents


ELSE.
"--> Start DME Engine with the Input Tree
CALL FUNCTION 'DMEE_START'
EXPORTING
i_tree_type = p_trtyp
i_tree_id = p_trid
item = ls_dme_item_in
param = ls_dme_parameters
uparam = par_dmea
TABLES
file_output = lt_dme_file
sort_fields = lt_dme_sortfields.

"--> Sort the DME Tree


CALL FUNCTION 'TAX_REP_SORT_DMEE_TABLE'
TABLES
t_item = it_vat_in
t_dme_sortfields = lt_dme_sortfields.

"--> Create DTA-File with DME-Engine


LOOP AT it_vat_in INTO st_vat_in.
ls_dme_item_in-zind_vat_in = st_vat_in.
CALL FUNCTION 'DMEE_PUT_ITEM'
EXPORTING
item = ls_dme_item_in
param = ls_dme_parameters
uparam = par_dmea "899205
TABLES
file_output = lt_dme_file.
ENDLOOP.
ENDIF.

"-->Close DME-Engine
CALL FUNCTION 'DMEE_END'
EXPORTING
param = ls_dme_parameters
uparam = par_dmea "899205
TABLES
file_output = lt_dme_file.
* ERROR_OUTPUT =

PERFORM write_file_to_system USING lt_dme_file.

ENDFORM. " GENERATE_OUTPUT


*&---------------------------------------------------------------------*
*& Form VALIDATION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM validation .
CLEAR : gv_t001_periv.
DATA : lv_bukrs_land TYPE t001-land1.

"--> Throw Error if the process is not selected


IF p_sel_sd IS INITIAL AND p_sel_mm IS INITIAL.
MESSAGE 'Select VAT IN/OUT for DME Processing' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.

"--> Throw error if Selection Date is not provided


IF p_dat IS INITIAL.
MESSAGE 'Enter Date Range to fetch Invoices' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.

"--> Throw error if To date is bigger than from date


ELSE.
IF p_dat-high LT p_dat-low.
MESSAGE 'To Date Cannot be lesser than From Date' TYPE 'S' DISPLAY LIKE
'E'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDIF.

"--> Get Country details from the Company Code


IF NOT p_bukrs IS INITIAL.
SELECT SINGLE land1 waers periv
FROM t001
INTO (lv_bukrs_land,gv_t001_waers,gv_t001_periv)
WHERE bukrs = p_bukrs.
ENDIF.

"--> Throw error,IF Company Code does not belong to Indonesia


IF lv_bukrs_land NE 'ID'.
MESSAGE 'Entered Company Code Does not Belong to Indonesia' TYPE 'S' DISP
LAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.

IF gv_bukrs_land IS INITIAL .
gv_bukrs_land = lv_bukrs_land.
ENDIF.

ENDFORM. " VALIDATION


*&---------------------------------------------------------------------*
*& Form FILL_DME_TREE_TABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fill_dme_tree_table_sd .
DATA : ls_konv TYPE konv,
it_konv TYPE TABLE OF konv,
lv_waers TYPE waers,
lv_amt TYPE bapicurr-bapicurr,
lv_bezei TYPE bezei20.

DATA: ls_bkpf TYPE st_bkpf,


ls_bset TYPE st_bset,
ls_bseg TYPE st_bseg,
ls_lfa1 TYPE st_lfa1,
ls_kna1 TYPE st_kna1,
ls_vbrp TYPE st_vbrp,
ls_vbrk TYPE vbrk,
ls_adrc TYPE adrc,
lv_addr TYPE char255,
ls_knvi TYPE knvi,
st_vat_out_line TYPE zind_vat_out_line.

"--> For all Billing Documents fill entry in DMEE output structure
LOOP AT it_bkpf INTO ls_bkpf.
CLEAR: st_vat_out, ls_bset,st_vat_out,st_vat_line,st_vat_item, lv_waers.
"--> Document Types will be Same.
st_vat_out-fk = 'FK'.
st_vat_out-lt = 'LT'.
st_vat_out-revised_code = rev_tax.
st_vat_out-faktur_number = ls_bkpf-belnr.
st_vat_out-monat = ls_bkpf-monat.
st_vat_out-gjahr = ls_bkpf-gjahr.
st_vat_out-bldat = ls_bkpf-bldat.
st_vat_out-belnr = ls_bkpf-belnr.

"--> For parallel cursor get the index of the current reoord
READ TABLE it_bset INTO ls_bset WITH KEY bukrs = ls_bkpf-bukrs
belnr = ls_bkpf-belnr
gjahr = ls_bkpf-bldat.
IF sy-subrc = 0.
SELECT SINGLE waers FROM t001 INTO lv_waers WHERE bukrs = ls_bkpf-
bukrs.

"--> Get BSET entries and fetch the


IF ls_bset-ktosl = 'MWS'.
CLEAR lv_amt .
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
EXPORTING
currency = lv_waers
amount_internal = ls_bset-hwbas
IMPORTING
amount_external = lv_amt.

st_vat_out-tax_base_amnt = lv_amt .

CLEAR lv_amt .
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
EXPORTING
currency = lv_waers
amount_internal = ls_bset-hwste
IMPORTING
amount_external = lv_amt.
st_vat_out-tot_vat_amnt = lv_amt .

IF ls_bkpf-blart = 'DZ'.
CLEAR lv_amt .
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
EXPORTING
currency = lv_waers
amount_internal = ls_bset-hwbas
IMPORTING
amount_external = lv_amt.
st_vat_out-tot_base_dp = lv_amt .

CLEAR lv_amt.
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
EXPORTING
currency = lv_waers
amount_internal = ls_bset-hwste
IMPORTING
amount_external = lv_amt.
st_vat_out-tot_vat_dp = lv_amt .
ENDIF.
ENDIF.

IF ls_bset-ktosl = 'PPNBM'.
CLEAR lv_amt.
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
EXPORTING
currency = lv_waers
amount_internal = ls_bset-hwste
IMPORTING
amount_external = lv_amt.
st_vat_out-tot_lux_tax = lv_amt .

IF ls_bkpf-blart = 'DZ'.
CLEAR lv_amt .
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
EXPORTING
currency = lv_waers
amount_internal = ls_bset-hwste
IMPORTING
amount_external = lv_amt.
st_vat_out-tot_lux_dp = lv_amt .
ENDIF.
ENDIF.
ENDIF.

"--> For parallel cursor get the index of the current reoord
READ TABLE it_bseg INTO ls_bseg WITH KEY bukrs = ls_bkpf-bukrs
belnr = ls_bkpf-belnr
gjahr = ls_bkpf-bldat.
IF sy-subrc = 0.

SELECT SINGLE kunnr taxkd FROM knvi INTO CORRESPONDING FIELDS OF ls_knv
i WHERE kunnr = ls_bseg-kunnr.
IF sy-subrc = 0.
st_vat_out-trans_type = ls_knvi-taxkd.
ENDIF.

READ TABLE it_kna1 INTO ls_kna1 WITH KEY kunnr = ls_bseg-kunnr.


IF sy-subrc = 0.
st_vat_out-stcd1 = ls_kna1-stcd1.
st_vat_out-name1 = ls_kna1-name1.

CLEAR lv_bezei.
SELECT SINGLE house_num1 house_num2 country str_suppl3 str_suppl1 cit
y2 city1 region post_code1 tel_number FROM adrc INTO CORRESPONDING FIELDS OF
ls_adrc WHERE addrnumber = ls_kna1-adrnr.
SELECT SINGLE bezei FROM t005u INTO lv_bezei WHERE bland = ls_kna1-
regio AND land1 EQ ls_adrc-country.
CONCATENATE ls_kna1-stras ls_adrc-house_num1 ls_kna1-
ort01 lv_bezei ls_kna1-pstlz ls_adrc-country INTO lv_addr SEPARATED BY space.
st_vat_out-address = lv_addr.

st_vat_out-part_stceg = ls_kna1-stcd1.
st_vat_out-part_name1 = ls_kna1-name1.
st_vat_out-part_address = ls_kna1-stras.

IF ls_kna1-stras IS INITIAL.
st_vat_out-addr1_data = '-'.
ELSE.
st_vat_out-addr1_data = ls_kna1-stras.
ENDIF.

IF ls_adrc-house_num2 IS INITIAL.
st_vat_out-house_num2 = '-'.
ELSE.
st_vat_out-house_num2 = ls_adrc-house_num2.
ENDIF.

IF ls_adrc-house_num1 IS INITIAL.
st_vat_out-house_num1 = '-'.
ELSE.
st_vat_out-house_num1 = ls_adrc-house_num1.
ENDIF.

IF ls_adrc-str_suppl1 IS INITIAL.
st_vat_out-str_suppl1 = '-'.
ELSE.
st_vat_out-str_suppl1 = ls_adrc-str_suppl1.
ENDIF.

IF ls_adrc-str_suppl2 IS INITIAL.
st_vat_out-str_suppl2 = '-'.
ELSE.
st_vat_out-str_suppl2 = ls_adrc-str_suppl2.
ENDIF.

IF ls_adrc-city2 IS INITIAL.
st_vat_out-city2 = '-'.
ELSE.
st_vat_out-city2 = ls_adrc-city2.
ENDIF.

IF ls_adrc-city1 IS INITIAL.
st_vat_out-city1 = '-'.
ELSE.
st_vat_out-city1 = ls_adrc-city1.
ENDIF.

IF ls_adrc-region IS INITIAL.
st_vat_out-region = '-'.
ELSE.
st_vat_out-region = ls_adrc-region.
ENDIF.

IF ls_adrc-post_code1 IS INITIAL.
st_vat_out-post_code1 = '-'.
ELSE.
st_vat_out-post_code1 = ls_adrc-post_code1.
ENDIF.

IF ls_adrc-tel_number IS INITIAL.
st_vat_out-tel_number = '-'.
ELSE.
st_vat_out-tel_number = ls_adrc-tel_number.
ENDIF.

ENDIF.

IF ls_bkpf-xblnr IS NOT INITIAL.


"--> Get the Billing Document Number from XBLNR field.
"--
> IF the Billing Document number is not saved in XBLNR , it might be stored i
n AWKEY depending apon the configiration
"--> Also AWKEY always contains the predecessor Billing document
SELECT vbeln posnr matnr arktx fkimg FROM vbrp INTO CORRESPONDING FIE
LDS OF TABLE it_vbrp WHERE vbeln = ls_bkpf-awkey.
IF sy-subrc = 0.
CLEAR ls_vbrk.
"--> Read VBRK to fetch the Pricing Documnet Number
SELECT SINGLE * FROM vbrk INTO ls_vbrk WHERE vbeln = ls_bkpf-awkey.
ENDIF.

IF it_vbrp IS NOT INITIAL.


"--> For parallel cursor get the index of the current reoord
LOOP AT it_vbrp INTO ls_vbrp.
CLEAR st_vat_out_line.
st_vat_out_line-belnr = ls_bkpf-belnr.
st_vat_out_line-of_faktur = 'OF'.
st_vat_out_line-matnr = ls_vbrp-matnr.
st_vat_out_line-arktx = ls_vbrp-arktx.
st_vat_out_line-fkimg = ls_vbrp-fkimg.

CLEAR it_konv.
IF ls_bkpf-knumv IS NOT INITIAL.
SELECT * FROM konv INTO TABLE it_konv WHERE knumv = ls_bkpf-
knumv.
ELSE.
SELECT * FROM konv INTO TABLE it_konv WHERE knumv = ls_vbrk-
knumv.
ENDIF.
IF sy-subrc = 0.
READ TABLE it_konv INTO ls_konv WITH KEY kschl = 'ZPR0'
kposn = ls_vbrp-posnr.
st_vat_out_line-kbetr = ls_konv-kbetr / 10.
st_vat_out_line-total_price = ls_konv-kbetr / 10.
READ TABLE it_konv INTO ls_konv WITH KEY kschl = 'ZD01'
kposn = ls_vbrp-posnr.
st_vat_out_line-discount = ls_konv-kwert / 10.
READ TABLE it_konv INTO ls_konv WITH KEY kschl = 'ZPPN'
kposn = ls_vbrp-posnr.
st_vat_out_line-tax_bas_amnt = ls_konv-kawrt / 10.
st_vat_out_line-vat = ls_konv-kwert.
READ TABLE it_konv INTO ls_konv WITH KEY kschl = 'ZPBM'
kposn = ls_vbrp-posnr.
st_vat_out_line-tarif_lux_tax = ls_konv-kwert / 10.
st_vat_out_line-luxury_tax = st_vat_out_line-
total_price * st_vat_out_line-fkimg.
ENDIF.
INSERT st_vat_out_line INTO TABLE it_vat_line.
ENDLOOP.
ELSE.
CLEAR: st_vat_out_line.
st_vat_out_line-belnr = ls_bkpf-belnr.
st_vat_out_line-of_faktur = 'OF'.
INSERT st_vat_out_line INTO TABLE it_vat_line.
ENDIF.
ELSE.
CLEAR: st_vat_out_line.
st_vat_out_line-belnr = ls_bkpf-belnr.
st_vat_out_line-of_faktur = 'OF'.
INSERT st_vat_out_line INTO TABLE it_vat_line.
ENDIF.
ENDIF.

INSERT st_vat_out INTO TABLE it_vat_out.

ENDLOOP.

ENDFORM. " FILL_DME_TREE_TABLE


*&---------------------------------------------------------------------*
*& Form FILL_DME_TREE_TABLE_MM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fill_dme_tree_table_mm .

DATA: ls_bkpf TYPE st_bkpf,


ls_bset TYPE st_bset,
ls_bseg TYPE st_bseg,
ls_lfa1 TYPE st_lfa1,
lv_addr TYPE char255,
lv_index TYPE sy-index,
lv_amt TYPE bapicurr-bapicurr,
lv_waers TYPE waers.

"--> For all Billing Documents fill entry in DMEE output structure
LOOP AT it_bkpf INTO ls_bkpf.
CLEAR: st_vat_in, ls_bset, lv_index.
st_vat_in-doc_type = 'FM'.
st_vat_in-bktxt = ls_bkpf-belnr.
st_vat_in-monat = ls_bkpf-monat.
st_vat_in-gjahr = ls_bkpf-gjahr.
st_vat_in-bldat = ls_bkpf-bldat.

"--> For parallel cursor get the index of the current reoord
READ TABLE it_bset INTO ls_bset WITH KEY bukrs = ls_bkpf-bukrs
belnr = ls_bkpf-belnr
gjahr = ls_bkpf-gjahr.
IF sy-subrc = 0.
SELECT SINGLE waers FROM t001 INTO lv_waers WHERE bukrs = ls_bkpf-
bukrs.
IF sy-subrc = 0.
CLEAR lv_amt .
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
EXPORTING
currency = lv_waers
amount_internal = ls_bset-hwbas
IMPORTING
amount_external = lv_amt.

IF ls_bset-mwskz = 'V1' AND ls_bset-ktosl = 'VST'.


st_vat_in-hwbas = lv_amt .
ENDIF.

CLEAR lv_amt .
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
EXPORTING
currency = lv_waers
amount_internal = ls_bset-hwste
IMPORTING
amount_external = lv_amt.

IF ls_bset-mwskz = 'V1' AND ls_bset-ktosl = 'VST'.


st_vat_in-hwste = lv_amt .
ENDIF.
ENDIF.
ENDIF.

"--> For parallel cursor get the index of the current reoord
READ TABLE it_bseg INTO ls_bseg WITH KEY bukrs = ls_bkpf-bukrs
belnr = ls_bkpf-belnr
gjahr = ls_bkpf-gjahr.
IF sy-subrc = 0.
READ TABLE it_lfa1 INTO ls_lfa1 WITH KEY lifnr = ls_bseg-lifnr.
IF sy-subrc = 0.
st_vat_in-name1 = ls_lfa1-name1.
CONCATENATE ls_lfa1-ort01 ls_lfa1-stras ls_lfa1-regio ls_lfa1-
pstlz INTO lv_addr.
st_vat_in-address = lv_addr.
st_vat_in-stceg = ls_lfa1-stceg.
ENDIF.
ENDIF.

INSERT st_vat_in INTO TABLE it_vat_in.


ENDLOOP.

ENDFORM. " FILL_DME_TREE_TABLE_MM


*&---------------------------------------------------------------------*
*& Form WRITE_FILE_TO_SYSTEM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LT_DME_FILE text
*----------------------------------------------------------------------*
FORM write_file_to_system USING ut_file TYPE table.
DATA: l_file_name TYPE regut-fsnam,
par_tems TYPE regut-tsnam.

IF NOT ut_file IS INITIAL.


IF par_file IS INITIAL.
CONCATENATE sy-repid
sy-datum
sy-uzeit
INTO par_file SEPARATED BY '.'.
CONDENSE par_file NO-GAPS.

ELSE.
CALL FUNCTION 'FILE_VALIDATE_NAME'
EXPORTING
logical_filename = gc_filename
parameter_1 = sy-cprog
CHANGING
physical_filename = par_file
EXCEPTIONS
OTHERS = 1.
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.
l_file_name = par_file. " Convertion
CALL FUNCTION 'FI_PAYM_FILE_OPEN'
EXPORTING
i_temse_name = par_tems
i_file_name = l_file_name.

CALL FUNCTION 'FI_PAYM_FILE_WRITE'


TABLES
t_lines = ut_file.

CALL FUNCTION 'FI_FILE_CLOSE'.


ELSE.
CLEAR par_file.
ENDIF.
ENDFORM. " WRITE_FILE_TO_SYSTEM
*&---------------------------------------------------------------------*
*& Form DISPLAY_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM display_data .
DATA: lo_table TYPE REF TO cl_salv_table,
lo_functions TYPE REF TO cl_salv_functions_list,
lo_settings TYPE REF TO cl_salv_display_settings,
lo_events TYPE REF TO cl_salv_events_table,
ls_disp TYPE st_disp,
it_disp TYPE TABLE OF st_disp.

IF p_sel_sd = abap_true.
CLEAR: st_vat_out,st_vat_line.

LOOP AT it_vat_out INTO st_vat_out.


MOVE-CORRESPONDING st_vat_out TO ls_disp.
INSERT ls_disp INTO TABLE it_disp.
ENDLOOP.

TRY.
cl_salv_table=>factory(
EXPORTING
list_display = if_salv_c_bool_sap=>false
container_name = 'DISPLAY_VAT_DATA'
IMPORTING
r_salv_table = lo_table
CHANGING
t_table = it_disp ).
CATCH cx_salv_msg. "#EC NO_HANDLER
*--> Error
LEAVE LIST-PROCESSING.
ENDTRY.

ELSE.
TRY.
cl_salv_table=>factory(
EXPORTING
list_display = if_salv_c_bool_sap=>false
container_name = 'DISPLAY_VAT_DATA'
IMPORTING
r_salv_table = lo_table
CHANGING
t_table = it_vat_in ).
CATCH cx_salv_msg. "#EC NO_HANDLER
LEAVE LIST-PROCESSING.
ENDTRY.
ENDIF.
lo_functions = lo_table->get_functions( ).
lo_settings = lo_table->get_display_settings( ).
IF p_sel_sd = abap_true.
lo_settings->set_list_header( 'VAT OUT' ).
ELSE.
lo_settings->set_list_header( 'VAT IN' ).
ENDIF.

IF p_sel_mm = abap_true.
DATA: lo_cols TYPE REF TO cl_salv_columns.
lo_cols = lo_table->get_columns( ).

"--> modify individual properties


DATA: lo_column TYPE REF TO cl_salv_column.
TRY.
lo_column = lo_cols->get_column( 'BKTXT' ).
lo_column->set_short_text( 'Reference' ). "#EC NOTEXT
lo_column->set_output_length( 10 ).

lo_column = lo_cols->get_column( 'HWBAS' ).


lo_column->set_short_text( 'TAX BasAmt' ). "#EC NOTEXT
lo_column->set_output_length( 10 ).

lo_column = lo_cols->get_column( 'HWSTE' ).


lo_column->set_short_text( 'VAT Amount' ). "#EC NOTEXT
lo_column->set_output_length( 10 ).

lo_column = lo_cols->get_column( 'TOT_LUX_TAX' ).


lo_column->set_short_text( 'Luxury Tax' ). "#EC NOTEXT
lo_column->set_output_length( 10 ).

lo_column = lo_cols->get_column( 'IS_CREDITABLE' ).


lo_column->set_short_text( 'Credited' ). "#EC NOTEXT
lo_column->set_output_length( 10 ).

CATCH cx_salv_not_found. "#EC NO_HANDLER


ENDTRY.
ENDIF.

DATA: gr_columns TYPE REF TO cl_salv_columns_table.


DATA: gr_column TYPE REF TO cl_salv_column_table.

gr_columns = lo_table->get_columns( ).
gr_columns->set_optimize( abap_true ).

lo_functions->set_all( abap_true ).

* Output the table


lo_table->display( ).

ENDFORM. " DISPLAY_DATA

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy