You are on page 1of 11

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

*& Include ZMT_R_FI_GST_REP_FORMS


*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form F_CLEAR
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM f_clear .

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_POP_INITIAL_VALUES
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM f_pop_initial_values .

* Create Object
IF grf_main IS NOT BOUND.
CREATE OBJECT grf_main.
ENDIF.

* Populate the Tax G/L's


gr_gst_gl = VALUE #( sign = 'I' option = 'EQ'
( low = '0000120000' ) " SGST Input A/c
( low = '0000120020' ) " CGST Input A/c
( low = '0000120040' ) " IGST Input A/c
( low = '0000120060' ) " UGST Input A/c
).

* Current Period Fiscal Year

*--------------------------------------------------------------------*
* Set the Fiscal Year
*--------------------------------------------------------------------*
CALL FUNCTION 'FI_PERIOD_DETERMINE'
EXPORTING
i_budat = sy-datum
* I_BUKRS = ' '
* I_RLDNR = ' '
* I_PERIV = ' '
* I_GJAHR = 0000
* I_MONAT = 00
* X_XMO16 = ' '
IMPORTING
e_gjahr = s_gjahr-low
* E_MONAT =
* E_POPER =
EXCEPTIONS
fiscal_year = 1
period = 2
period_version = 3
posting_period = 4
special_period = 5
version = 6
posting_date = 7
OTHERS = 8.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

s_gjahr[] = VALUE #( sign = 'I' option = 'EQ'


( low = s_gjahr-low )
).

ENDFORM.
*&---------------------------------------------------------------------*
*& Class (Implementation) gcl_main
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
CLASS gcl_main IMPLEMENTATION.

METHOD m_fetch_process_data.

*--------------------------------------------------------------------*
*G/L account master (company code)
*--------------------------------------------------------------------*
SELECT skb1~bukrs, " Company Code
skb1~saknr, " G/L Account
skat~txt50 " G/L Description
FROM skb1 "#EC CI_BUFFJOIN
INNER JOIN skat "#EC CI_BUFFJOIN
ON skat~spras EQ 'E'
AND skat~ktopl EQ '1000'
AND skat~saknr EQ skb1~saknr
INTO TABLE @DATA(lt_gls)
WHERE skb1~bukrs IN @s_bukrs
AND skb1~saknr IN @gr_gst_gl.

SELECT DISTINCT bsis~bukrs, " Company Code


bsis~gjahr, " Fiscal Year
bsis~belnr, " Document Number
bkpf~blart, " Document type
bkpf~bldat, " Document Date
bkpf~budat, " Posting Date
bkpf~usnam, " User Name
bkpf~tcode, " Transaction Code
bkpf~xblnr, " Reference
bkpf~stblg, " Reversed With
bkpf~bktxt, " Doc.Header Text
bkpf~waers, " Currency
bkpf~bstat, " Document Status
bkpf~awtyp, " Ref. procedure
bkpf~awkey, " Object key
bkpf~xstov, " Reversal Flag
bkpf~stodt " Reversal Date
FROM bsis
INNER JOIN bkpf
ON bsis~bukrs EQ bkpf~bukrs
AND bsis~gjahr EQ bkpf~gjahr
AND bsis~belnr EQ bkpf~belnr
INTO TABLE @DATA(lt_header)
WHERE bsis~bukrs IN @s_bukrs
AND bsis~belnr IN @s_belnr
AND bsis~gjahr IN @s_gjahr
AND bsis~hkont IN @gr_gst_gl
AND bsis~budat IN @s_budat
ORDER BY bsis~bukrs, bsis~gjahr, bsis~belnr.

*--------------------------------------------------------------------*
* Line Item Details
*--------------------------------------------------------------------*
IF lt_header IS NOT INITIAL.

SELECT *
FROM bseg
INTO TABLE @DATA(lt_bseg)
FOR ALL ENTRIES IN @lt_header
WHERE bukrs EQ @lt_header-bukrs
AND gjahr EQ @lt_header-gjahr
AND belnr EQ @lt_header-belnr
* AND buzid EQ @space
AND ktosl NE 'WIT'
ORDER BY PRIMARY KEY .

SELECT *
FROM bset
INTO TABLE @DATA(lt_bset)
FOR ALL ENTRIES IN @lt_header
WHERE bukrs EQ @lt_header-bukrs
AND gjahr EQ @lt_header-gjahr
AND belnr EQ @lt_header-belnr
ORDER BY PRIMARY KEY.

IF lt_bseg IS NOT INITIAL.

DATA(lt_bseg_ven) = lt_bseg.
DELETE : lt_bseg_ven WHERE lifnr IS INITIAL.

IF lt_bseg_ven IS NOT INITIAL.


SELECT *
FROM lfa1
INTO TABLE @DATA(lt_lfa1)
FOR ALL ENTRIES IN @lt_bseg_ven
WHERE lifnr EQ @lt_bseg_ven-lifnr.

IF lt_lfa1 IS NOT INITIAL.

SELECT *
FROM t005u
INTO TABLE @DATA(lt_t005u)
FOR ALL ENTRIES IN @lt_lfa1
WHERE spras EQ 'E'
AND land1 EQ @lt_lfa1-land1
AND bland EQ @lt_lfa1-regio.
ENDIF. " LT_LFA1

ENDIF. " LT_BSEG_VEN

ENDIF. " LT_BSEG

ENDIF. " LT_HEADER

DATA : lv_index TYPE i,


lv_flag TYPE c.
*--------------------------------------------------------------------*
* Process and Populate the final internal table
*--------------------------------------------------------------------*
LOOP AT lt_header INTO DATA(ls_header).

* If Vendor Exists - show the vendor information


* Business Place
gs_final-state_code = VALUE #( lt_bseg_ven[ bukrs = ls_header-bukrs
belnr = ls_header-belnr
gjahr = ls_header-gjahr
]-bupla OPTIONAL ).

IF gs_final-state_code IS INITIAL AND line_exists( lt_lfa1[ lifnr = VALUE


#( lt_bseg_ven[ bukrs = ls_header-bukrs

belnr = ls_header-belnr

gjahr = ls_header-gjahr

]-lifnr OPTIONAL )
]
).
gs_final-state_code = VALUE #( lt_lfa1[ lifnr = VALUE #( lt_bseg_ven[ bukrs
= ls_header-bukrs
belnr
= ls_header-belnr
gjahr
= ls_header-gjahr
]-lifnr
OPTIONAL )
]-regio OPTIONAL ) && '01'.

ENDIF.

gs_final-state_name = VALUE #( lt_t005u[ spras = 'E'


bland = VALUE #( lt_lfa1[ lifnr =
VALUE #( lt_bseg_ven[ bukrs = ls_header-bukrs

belnr = ls_header-belnr

gjahr = ls_header-gjahr

]-lifnr OPTIONAL )
]-regio
OPTIONAL )
]-bezei OPTIONAL ).
gs_final-vendor = VALUE #( lt_bseg_ven[ bukrs = ls_header-bukrs
belnr = ls_header-belnr
gjahr = ls_header-gjahr
]-lifnr OPTIONAL
).

gs_final-ven_name = VALUE #( lt_lfa1[ lifnr = VALUE


#( lt_bseg_ven[ bukrs = ls_header-bukrs

belnr = ls_header-belnr

gjahr = ls_header-gjahr
]-
lifnr OPTIONAL )
]-name1 OPTIONAL ).
gs_final-ven_doc_date = ls_header-bldat.
gs_final-ven_post_date = ls_header-budat.
gs_final-ven_ref = ls_header-xblnr.
gs_final-belnr = ls_header-belnr.
gs_final-gjahr = ls_header-gjahr.
gs_final-ven_gst_no = VALUE #( lt_lfa1[ lifnr = VALUE
#( lt_bseg_ven[ bukrs = ls_header-bukrs

belnr = ls_header-belnr

gjahr = ls_header-gjahr
]-
lifnr OPTIONAL )
]-stcd3 OPTIONAL ).
gs_final-ven_pan_no = VALUE #( lt_lfa1[ lifnr = VALUE #( lt_bseg_ven[ bukrs
= ls_header-bukrs
belnr
= ls_header-belnr
gjahr
= ls_header-gjahr
]-lifnr
OPTIONAL )
]-j_1ipanno OPTIONAL ).
gs_final-doc_typ = ls_header-blart.
gs_final-user_id = ls_header-usnam.

DATA : lv_txgrp TYPE bset-txgrp.


LOOP AT lt_bset INTO DATA(ls_bset) WHERE bukrs = ls_header-bukrs
AND belnr = ls_header-belnr
AND gjahr = ls_header-gjahr
AND ( kschl = 'JISG' OR kschl = 'JOSG'
OR
kschl = 'JIUG' OR kschl = 'JOUG'
OR
kschl = 'JIIG' OR kschl =
'JOIG' ).

IF lv_txgrp IS INITIAL.

lv_txgrp = ls_bset-txgrp.

ELSEIF lv_txgrp NE ls_bset-txgrp.


lv_txgrp = ls_bset-txgrp.

ENDIF.

IF ls_bset-shkzg EQ 'H'.
ls_bset-hwste = ls_bset-hwste * -1.
ls_bset-hwbas = ls_bset-hwbas * -1.
ENDIF.

IF gs_final-net_amt IS INITIAL.
gs_final-net_amt = ls_bset-hwbas.
ENDIF.

CASE ls_bset-kschl.
WHEN 'JISG' OR 'JOSG'.
gs_final-cgst = gs_final-cgst + ls_bset-hwste.
gs_final-sgst = gs_final-sgst + ls_bset-hwste.
gs_final-tax_code = ls_bset-mwskz.
gs_final-tax_rate = ls_bset-kbetr / 10.
WHEN 'JIUG' OR 'JOUG'.
gs_final-cgst = gs_final-cgst + ls_bset-hwste.
gs_final-ugst = gs_final-ugst + ls_bset-hwste.
gs_final-tax_code = ls_bset-mwskz.
gs_final-tax_rate = ls_bset-kbetr / 10.
WHEN 'JIIG' OR 'JOIG'.
gs_final-igst = gs_final-igst + ls_bset-hwste.
gs_final-tax_code = ls_bset-mwskz.
gs_final-tax_rate = ls_bset-kbetr / 10.
WHEN OTHERS.
ENDCASE.

gs_final-gross_amt = gs_final-net_amt +
gs_final-cgst +
gs_final-sgst +
gs_final-ugst +
gs_final-igst .

gs_final-hsn_code = VALUE #( lt_bseg[ bukrs = ls_bset-bukrs


belnr = ls_bset-belnr
gjahr = ls_bset-gjahr
txgrp = ls_bset-txgrp
]-hsn_sac OPTIONAL ).

gs_final-matnr = VALUE #( lt_bseg[ bukrs = ls_bset-bukrs


belnr = ls_bset-belnr
gjahr = ls_bset-gjahr
txgrp = ls_bset-txgrp
]-matnr OPTIONAL ).
gs_final-werks = VALUE #( lt_bseg[ bukrs = ls_bset-bukrs
belnr = ls_bset-belnr
gjahr = ls_bset-gjahr
txgrp = ls_bset-txgrp
]-werks OPTIONAL ).
gs_final-menge = VALUE #( lt_bseg[ bukrs = ls_bset-bukrs
belnr = ls_bset-belnr
gjahr = ls_bset-gjahr
txgrp = ls_bset-txgrp
]-menge OPTIONAL ).
gs_final-meins = VALUE #( lt_bseg[ bukrs = ls_bset-bukrs
belnr = ls_bset-belnr
gjahr = ls_bset-gjahr
txgrp = ls_bset-txgrp
]-meins OPTIONAL ).
gs_final-ebeln = VALUE #( lt_bseg[ bukrs = ls_bset-bukrs
belnr = ls_bset-belnr
gjahr = ls_bset-gjahr
txgrp = ls_bset-txgrp
]-ebeln OPTIONAL ).
gs_final-ebelp = VALUE #( lt_bseg[ bukrs = ls_bset-bukrs
belnr = ls_bset-belnr
gjahr = ls_bset-gjahr
txgrp = ls_bset-txgrp
]-ebelp OPTIONAL ).
gs_final-awkey = VALUE #( lt_bseg[ bukrs = ls_bset-bukrs
belnr = ls_bset-belnr
gjahr = ls_bset-gjahr
txgrp = ls_bset-txgrp
]-awkey+0(10) OPTIONAL ).

* If vendor is not updated


IF gs_final-vendor IS INITIAL.

bseg = VALUE #( lt_bseg[ bukrs = ls_bset-bukrs


belnr = ls_bset-belnr
gjahr = ls_bset-gjahr
buzei = '001' ] OPTIONAL ).
IF bseg IS NOT INITIAL.

gs_final-hsn_code = bseg-xref1.
gs_final-ven_doc_date = bseg-h_budat.
gs_final-ven_ref = bseg-xref2.
gs_final-ven_gst_no = bseg-xref3.
gs_final-ven_name = bseg-zuonr.

CLEAR : bseg.
ENDIF.

ENDIF. " GS_FINAL-VENDOR

lv_index = lv_index + 1.
gs_final-sno = lv_index.
APPEND gs_final TO me->gt_final.

CLEAR : gs_final-net_amt,
gs_final-cgst ,
gs_final-sgst ,
gs_final-ugst ,
gs_final-igst ,
gs_final-gross_amt,
gs_final-hsn_code.

IF lv_flag IS INITIAL.
lv_flag = abap_true.
ENDIF.
CLEAR : ls_bset.

ENDLOOP. " LT_BSET

IF lv_flag IS INITIAL.
lv_index = lv_index + 1.
gs_final-sno = lv_index.
APPEND gs_final TO gt_final.
ELSE.
CLEAR : lv_flag.
ENDIF.

CLEAR : ls_header.

ENDLOOP. " LT_HEADER

ENDMETHOD. " M_FETCH_PROCESS_DATA

*--------------------------------------------------------------------*
* Display the ALV
*--------------------------------------------------------------------*
METHOD m_display_alv.

* alv - messages display( error and success records )


*--------------------------------------------------------------------*
* Create a reference object for a Custom Container
*--------------------------------------------------------------------*
IF grf_cont IS NOT BOUND.

CREATE OBJECT grf_cont


EXPORTING
* parent =
container_name = 'CONTAINER'
* style =
* lifetime = lifetime_default
* repid =
* dynnr =
* no_autodef_progid_dynnr =
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
OTHERS = 6.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

IF grf_cont IS BOUND .
*--------------------------------------------------------------------*
* Create a reference object for ALV Grid - Assign the Contrainer object
*--------------------------------------------------------------------*
CREATE OBJECT grf_grid
EXPORTING
* i_shellstyle = 0
* i_lifetime =
i_parent = grf_cont
* i_appl_events = space
* i_parentdbg =
* i_applogparent =
* i_graphicsparent =
* i_name =
* i_fcat_complete = SPACE
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

*--------------------------------------------------------------------*
* Populate Fieldcatlog
*--------------------------------------------------------------------*
IF grf_grid IS BOUND.
DATA(lt_fcat) = VALUE lvc_t_fcat( tabname = 'LT_FINAL'
( fieldname = 'SNO ' col_pos =
'01' coltext = 'SNo. ' )
( fieldname = 'STATE_CODE ' col_pos =
'02' coltext = 'Business Place ' )
( fieldname = 'STATE_NAME ' col_pos =
'03' coltext = 'State Description ' )
( fieldname = 'VENDOR ' col_pos =
'04' coltext = 'Vendor ' )
( fieldname = 'VEN_NAME ' col_pos =
'05' coltext = 'Vendor Name ' )
( fieldname = 'VEN_DOC_DATE ' col_pos =
'06' coltext = 'Document Date ' )
( fieldname = 'VEN_POST_DATE' col_pos =
'07' coltext = 'Posting Date ' )
( fieldname = 'VEN_REF ' col_pos =
'08' coltext = 'Reference No. ' )
( fieldname = 'BELNR ' col_pos =
'09' coltext = 'FI Doc. No. ' )
( fieldname = 'GJAHR ' col_pos =
'10' coltext = 'Fiscal Year ' )
( fieldname = 'VEN_GST_NO ' col_pos =
'11' coltext = 'Vendor GST Number ' )
( fieldname = 'VEN_PAN_NO ' col_pos =
'12' coltext = 'Vendor PAN Number ' )
( fieldname = 'DOC_TYP ' col_pos =
'13' coltext = 'Doc. Type ' )
( fieldname = 'NET_AMT ' col_pos =
'14' coltext = 'Net Amount ' do_sum = abap_true )
( fieldname = 'CGST ' col_pos =
'15' coltext = 'CGST ' do_sum = abap_true )
( fieldname = 'SGST ' col_pos =
'16' coltext = 'SGST ' do_sum = abap_true )
( fieldname = 'UGST ' col_pos =
'17' coltext = 'UGST ' do_sum = abap_true )
( fieldname = 'IGST ' col_pos =
'18' coltext = 'IGST ' do_sum = abap_true )
( fieldname = 'GROSS_AMT ' col_pos =
'19' coltext = 'Gross Amount ' do_sum = abap_true )
( fieldname = 'TAX_CODE ' col_pos =
'20' coltext = 'Tax Code ' )
( fieldname = 'TAX_RATE ' col_pos =
'21' coltext = 'Tax rate ' )
( fieldname = 'HSN_CODE ' col_pos =
'22' coltext = 'HSN Code ' )
( fieldname = 'USER_ID ' col_pos =
'23' coltext = 'UserId ' )
( fieldname = 'MATNR ' col_pos =
'23' coltext = 'Material ' )
( fieldname = 'WERKS ' col_pos =
'23' coltext = 'Plant ' )
( fieldname = 'MENGE ' col_pos =
'23' coltext = 'Qunatity ' )
( fieldname = 'MEINS ' col_pos =
'23' coltext = 'UOM ' )
( fieldname = 'EBELN ' col_pos =
'23' coltext = 'Purchase Order ' )
( fieldname = 'EBELP ' col_pos =
'23' coltext = 'PO Item ' )
( fieldname = 'AWKEY ' col_pos =
'23' coltext = 'Reference Document ' )
).

DATA(lt_final) = grf_main->gt_final.

*--------------------------------------------------------------------*
* Set the ALV Layout
*--------------------------------------------------------------------*
DATA(ls_layout) = VALUE lvc_s_layo( col_opt = gc_x
cwidth_opt = gc_x ).

*--------------------------------------------------------------------*
* Call ALV Display method
*--------------------------------------------------------------------*
DATA(ls_variant) = VALUE disvariant( report = sy-repid ).

CALL METHOD grf_grid->set_table_for_first_display


EXPORTING
* i_buffer_active =
* i_bypassing_buffer =
* i_consistency_check =
* i_structure_name =
* is_variant = ls_variant
i_save = gc_x
i_default = 'X'
is_layout = ls_layout
* is_print =
* it_special_groups =
* it_toolbar_excluding =
* it_hyperlink =
* it_alv_graphics =
* it_except_qinfo =
* ir_salv_adapter =
CHANGING
it_outtab = lt_final
it_fieldcatalog = lt_fcat
* it_sort =
* it_filter =
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
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. " GRF_GRID

ENDIF. " GRF_CONT - Is Boound

ENDIF. " GRF_CONT

* Call Screen
CALL SCREEN 100.

ENDMETHOD. " M_DISPLAY_ALV

ENDCLASS.

You might also like