Professional Documents
Culture Documents
New Text Document
New Text Document
** Interfaces
**-------------------------------------------------------------------*
INTERFACE lif_data.
BEGIN OF ty_vttk,
vbeln TYPE vttp-vbeln,
tpnum TYPE vttp-tpnum,
tknum TYPE vttk-tknum,
erdat TYPE vttk-erdat,
route TYPE vttk-route,
distz TYPE vttk-distz,
/bev1/rpmowa TYPE vttk-/bev1/rpmowa,
END OF ty_vttk,
BEGIN OF ty_cus_plnt,
kunnr TYPE kunnr,
name1 TYPE name1_gp,
adrnr TYPE adrnr,
END OF ty_cus_plnt,
BEGIN OF ty_invoice_dlc,
vbeln TYPE vbrk-vbeln,
fkart TYPE vbrk-fkart,
fktyp TYPE vbrk-fktyp,
waerk TYPE vbrk-waerk,
vkorg TYPE vbrk-vkorg,
vtweg TYPE vbrk-vtweg,
knumv TYPE vbrk-knumv,
fkdat TYPE vbrk-fkdat,
bukrs TYPE vbrk-bukrs,
netwr TYPE vbrk-netwr,
ernam TYPE vbrk-ernam,
erdat TYPE vbrk-erdat,
sfakn TYPE vbrk-sfakn,
spart TYPE vbrk-spart,
mwsbk TYPE vbrk-mwsbk,
bupla TYPE vbrk-bupla,
fk_source_sys TYPE vbrk-fk_source_sys,
posnr TYPE vbrp-posnr,
fkimg TYPE vbrp-fkimg,
vrkme TYPE vbrp-vrkme,
meins TYPE vbrp-meins,
amt TYPE vbrp-netwr,
vbelv TYPE vbrp-vbelv,
posnv TYPE vbrp-posnv,
vgbel TYPE vbrp-vgbel,
vgpos TYPE vbrp-vgpos,
vgtyp TYPE vbrp-vgtyp,
aubel TYPE vbrp-aubel,
aupos TYPE vbrp-aupos,
matnr TYPE vbrp-matnr,
arktx TYPE vbrp-arktx,
charg TYPE vbrp-charg,
pstyv TYPE vbrp-pstyv,
prodh TYPE vbrp-prodh,
werks TYPE vbrp-werks,
lgort TYPE vbrp-lgort,
prctr TYPE vbrp-prctr,
cmpre TYPE vbrp-cmpre,
price TYPE vbrp-mwsbp,
adrnr TYPE tvko-adrnr,
endat TYPE fpla-endat,
bedat TYPE fpla-bedat,
lgobe TYPE t001l-lgobe,
gstcode TYPE zeydigi_currcd-gstcode,
END OF ty_invoice_dlc,
BEGIN OF ty_j_1bbranch,
bukrs TYPE j_1bbranch-bukrs, " company code
branch TYPE j_1bbranch-branch, " business place
gstin TYPE j_1bbranch-gstin, " supplier gstn
adrnr TYPE j_1bbranch-adrnr,
END OF ty_j_1bbranch,
BEGIN OF ty_bupla,
bupla TYPE vbrk-bupla, " business place
END OF ty_bupla,
BEGIN OF ty_matnr,
matnr TYPE mara-matnr, " materila number
END OF ty_matnr,
BEGIN OF ty_marc,
matnr TYPE marc-matnr, " materila number
werks TYPE marc-werks, " plant
steuc TYPE marc-steuc, " control code
END OF ty_marc,
BEGIN OF ty_lfa1,
lifnr TYPE lifnr,
land1 TYPE land1,
name1 TYPE name1_gp,
name2 TYPE name2_gp,
stcd3 TYPE stcd3,
adrnr TYPE adrnr,
END OF ty_lfa1,
BEGIN OF ty_t001,
bukrs TYPE bukrs,
adrnr TYPE adrnr,
butxt TYPE butxt,
END OF ty_t001,
BEGIN OF ty_bkpf,
bukrs TYPE bkpf-bukrs,
belnr TYPE bkpf-belnr,
gjahr TYPE bkpf-gjahr,
blart TYPE bkpf-blart,
bldat TYPE bkpf-bldat,
budat TYPE bkpf-budat,
cpudt TYPE bkpf-cpudt,
usnam TYPE bkpf-usnam,
tcode TYPE bkpf-tcode,
xblnr TYPE bkpf-xblnr,
stblg TYPE bkpf-stblg,
stjah TYPE bkpf-stjah,
waers TYPE bkpf-waers,
kursf TYPE bkpf-kursf,
awtyp TYPE bkpf-awtyp,
awkey TYPE bkpf-awkey,
hwaer TYPE bkpf-hwaer,
xreversal TYPE bkpf-xreversal,
gstcode TYPE zeydigi_currcd-gstcode,
END OF ty_bkpf,
BEGIN OF ty_prcd_elements,
knumv TYPE prcd_elements-knumv, " doc condition num
kposn TYPE prcd_elements-kposn, " item num
kappl TYPE prcd_elements-kappl, " application value
kschl TYPE prcd_elements-kschl, " condition type
kawrt TYPE prcd_elements-kawrt, " condtion base value
kbetr TYPE prcd_elements-kbetr, " tax rate
kvsl1 TYPE prcd_elements-kvsl1, " tax rate
kwert TYPE prcd_elements-kwert, "
konts TYPE t030k-konts, " GL code
END OF ty_prcd_elements,
BEGIN OF ty_knumv,
knumv TYPE knumv, " doc condition number
kposn TYPE kposn, " itm num
END OF ty_knumv,
BEGIN OF ty_vbeln,
vbeln TYPE vbpa-vbeln, " Document number
posnr TYPE vbpa-posnr, " item number
END OF ty_vbeln,
BEGIN OF ty_cr_fi,
belnr TYPE bkpf-belnr,
END OF ty_cr_fi,
BEGIN OF ty_plant,
werks TYPE vbrp-werks,
END OF ty_plant,
BEGIN OF ty_kunnr,
kunnr TYPE kna1-kunnr,
END OF ty_kunnr,
BEGIN OF ty_steuc,
steuc TYPE marc-steuc,
END OF ty_steuc,
BEGIN OF ty_plant_map,
werks TYPE werks_d,
domestic_plant TYPE zeydigi_plantmap-domestic_plant,
sez_plant TYPE zeydigi_plantmap-sez_plant,
kunnr TYPE kunnr_wk,
land1 TYPE t001w-land1,
regio TYPE t001w-regio,
adrnr TYPE t001w-adrnr,
j_1bbranch TYPE t001w-j_1bbranch,
END OF ty_plant_map,
BEGIN OF ty_vbpa,
vbeln TYPE vbpa-vbeln,
lifnr TYPE vbpa-lifnr,
parvw TYPE vbpa-parvw,
kunnr TYPE vbpa-kunnr,
END OF ty_vbpa,
BEGIN OF ty_bseg,
bukrs TYPE bseg-bukrs,
belnr TYPE bseg-belnr,
gjahr TYPE bseg-gjahr,
buzei TYPE bseg-buzei,
buzid TYPE bseg-buzid,
augdt TYPE bseg-augdt,
augbl TYPE bseg-augbl,
bschl TYPE bseg-bschl,
koart TYPE bseg-koart,
umskz TYPE bseg-umskz,
shkzg TYPE bseg-shkzg,
mwskz TYPE bseg-mwskz,
dmbtr TYPE bseg-dmbtr,
wrbtr TYPE bseg-wrbtr,
fwbas TYPE bseg-fwbas,
txgrp TYPE bseg-txgrp,
zuonr TYPE bseg-zuonr,
vbeln TYPE bseg-vbeln,
xanet TYPE bseg-xanet,
hkont TYPE bseg-hkont,
kunnr TYPE bseg-kunnr,
lifnr TYPE bseg-lifnr,
zterm TYPE bseg-zterm,
zlsch TYPE bseg-zlsch,
hbkid TYPE bseg-hbkid,
nebtr TYPE bseg-nebtr,
matnr TYPE bseg-matnr,
werks TYPE bseg-werks,
menge TYPE bseg-menge,
meins TYPE bseg-meins,
prctr TYPE bseg-prctr,
bupla TYPE bseg-bupla,
taxps TYPE bseg-taxps,
gst_part TYPE bseg-gst_part,
plc_sup TYPE bseg-plc_sup,
hsn_sac TYPE bseg-hsn_sac,
ktosl TYPE bseg-ktosl,
steuc TYPE marc-steuc,
mat TYPE mara-matnr,
prdha TYPE mara-prdha,
maktx TYPE makt-maktx,
sales_type TYPE zeydigi_hsncode-sales_type,
meins1 TYPE zeydigi_unit-meins1,
vtext TYPE tvzbt-vtext,
creditdays TYPE zeydigi_payterms-creditdays,
gstcode TYPE zeydigi_modepay-gstcode,
zfbdt TYPE bseg-zfbdt,
zbd1t TYPE bseg-zbd1t,
zbd2t TYPE bseg-zbd2t,
zbd3t TYPE bseg-zbd3t,
END OF ty_bseg,
BEGIN OF ty_bset,
bukrs TYPE bset-bukrs,
belnr TYPE bset-belnr,
gjahr TYPE bset-gjahr,
buzei TYPE bset-buzei,
mwskz TYPE bset-mwskz,
hkont TYPE bset-hkont,
txgrp TYPE bset-txgrp,
hwbas TYPE bset-hwbas,
fwbas TYPE bset-fwbas,
hwste TYPE bset-hwste,
fwste TYPE bset-fwste,
kschl TYPE bset-kschl,
kbetr TYPE bset-kbetr,
bupla TYPE bset-bupla,
taxps TYPE bset-taxps,
END OF ty_bset,
BEGIN OF ty_vbak,
vbeln TYPE vbak-vbeln,
auart TYPE vbak-auart,
augru TYPE vbak-augru,
gwldt TYPE vbak-gwldt,
zuonr TYPE vbak-zuonr,
vgbel TYPE vbak-vgbel,
posnr TYPE vbkd-posnr,
zterm TYPE vbkd-zterm,
zlsch TYPE vbkd-zlsch,
bstkd TYPE vbkd-bstkd,
bstdk TYPE vbkd-bstdk,
vsart TYPE vbkd-vsart,
bezei TYPE tvaut-bezei,
vbtyp TYPE tvak-vbtyp,
END OF ty_vbak,
BEGIN OF ty_ekpo,
ebeln TYPE ekpo-ebeln,
ebelp TYPE ekpo-ebelp,
pstyp TYPE ekpo-pstyp,
END OF ty_ekpo,
BEGIN OF ty_fpla,
bedat TYPE fpla-bedat,
endat TYPE fpla-endat,
vbeln TYPE fpla-vbeln,
END OF ty_fpla,
BEGIN OF ty_eway_logrt,
vbeln TYPE likp-vbeln, " delivery number
bolnr TYPE likp-bolnr, " bill of lading
bldat TYPE likp-bldat, " bill of lading
vsart TYPE likp-vsart,
route TYPE likp-route,
lifnr TYPE vbpa-lifnr,
name1 TYPE lfa1-name1,
stcd3 TYPE lfa1-stcd3,
distz TYPE tvro-distz,
END OF ty_eway_logrt,
BEGIN OF ty_vbak_wrnty,
vbeln TYPE vbak-vbeln,
gwldt TYPE vbak-gwldt,
END OF ty_vbak_wrnty,
BEGIN OF ty_vbkd,
vbeln TYPE vbkd-vbeln,
posnr TYPE vbkd-posnr,
zterm TYPE vbkd-zterm,
zlsch TYPE vbkd-zlsch,
bstkd TYPE vbkd-bstkd,
bstdk TYPE vbkd-bstdk,
vsart TYPE vbkd-vsart,
END OF ty_vbkd,
BEGIN OF ty_prodh,
prodh TYPE vbrp-prodh,
END OF ty_prodh,
BEGIN OF ty_t179t,
prodh TYPE t179t-prodh,
vtext TYPE t179t-vtext,
END OF ty_t179t,
BEGIN OF ty_zgstnunit,
meins TYPE zeydigi_unit-meins,
meins1 TYPE zeydigi_unit-meins1,
END OF ty_zgstnunit,
BEGIN OF ty_unit,
meins TYPE bseg-meins,
END OF ty_unit,
BEGIN OF ty_storage,
werks TYPE t001l-werks,
lgort TYPE t001l-lgort,
lgobe TYPE t001l-lgobe,
END OF ty_storage,
BEGIN OF ty_rcpt_fi,
kunnr TYPE kna1-kunnr,
land1 TYPE kna1-land1,
name1 TYPE kna1-name1,
name2 TYPE kna1-name2,
ort01 TYPE kna1-ort01,
regio TYPE kna1-regio,
stras TYPE kna1-stras,
adrnr TYPE kna1-adrnr,
stcd1 TYPE kna1-stcd1,
stcd3 TYPE kna1-stcd3,
END OF ty_rcpt_fi,
BEGIN OF ty_mara_fi,
matnr TYPE mara-matnr,
mtart TYPE mara-mtart,
meins TYPE mara-meins,
prdha TYPE mara-prdha,
spras TYPE makt-spras,
maktx TYPE makt-maktx,
END OF ty_mara_fi,
BEGIN OF ty_mcha,
matnr TYPE mcha-matnr,
werks TYPE mcha-werks,
charg TYPE mcha-charg,
vfdat TYPE mcha-vfdat,
herkl TYPE mcha-herkl,
END OF ty_mcha,
BEGIN OF ty_stblg,
stblg TYPE bkpf-stblg,
stjah TYPE bkpf-stjah,
END OF ty_stblg,
BEGIN OF ty_plant_fi,
werks TYPE t001w-werks,
j_1bbranch TYPE t001w-j_1bbranch,
END OF ty_plant_fi,
BEGIN OF ty_tvko,
vkorg TYPE tvko-vkorg,
adrnr TYPE tvko-adrnr,
END OF ty_tvko,
BEGIN OF ty_tvak,
auart TYPE tvak-auart,
vbtyp TYPE tvak-vbtyp,
END OF ty_tvak,
BEGIN OF ty_t012,
bukrs TYPE t012-bukrs,
hbkid TYPE t012-hbkid,
bankl TYPE t012-bankl,
bankn TYPE t012k-bankn,
END OF ty_t012,
BEGIN OF ty_tvzbt,
spras TYPE tvzbt-spras,
zterm TYPE tvzbt-zterm,
vtext TYPE tvzbt-vtext,
END OF ty_tvzbt,
BEGIN OF ty_adrc,
addrnumber TYPE adrc-addrnumber,
name1 TYPE adrc-name1,
name2 TYPE adrc-name2,
city1 TYPE adrc-city1,
city2 TYPE adrc-city2,
street TYPE adrc-street,
house_num1 TYPE adrc-house_num1,
house_num2 TYPE adrc-house_num2,
house_num3 TYPE adrc-house_num3,
post_code1 TYPE adrc-post_code1,
post_code2 TYPE adrc-post_code2,
post_code3 TYPE adrc-post_code3,
str_suppl1 TYPE adrc-str_suppl1,
str_suppl2 TYPE adrc-str_suppl2,
str_suppl3 TYPE adrc-str_suppl3,
location TYPE adrc-location,
building TYPE adrc-building,
floor TYPE adrc-floor,
country TYPE adrc-country,
region TYPE adrc-region,
tel_number TYPE adrc-tel_number,
flagcomm6 TYPE adrc-flagcomm6,
smtp_addr TYPE adr6-smtp_addr,
END OF ty_adrc,
BEGIN OF ty_lgort,
lgort TYPE t001l-lgort,
END OF ty_lgort.
ENDINTERFACE.
m_supply_type_determination_fi
IMPORTING ls_cust TYPE zeydigi_customer
ls_data TYPE lif_data~ty_bseg
lv_type TYPE zeydigi_hsncode-sales_type
ls_tax TYPE lif_data=>ty_bset
im_land TYPE kna1-land1
ls_doc TYPE lif_data=>ty_bkpf
RETURNING VALUE(lv_supplytype) TYPE zeydigi_oward_i-supplytype,
m_fill_final_table,
m_export_final_tab EXPORTING etab1 TYPE STANDARD TABLE
etab2 TYPE STANDARD TABLE,
m_fill_excel_data,
m_export_excel_tab EXPORTING etab1 TYPE STANDARD TABLE,
m_free_local_tab.
PRIVATE SECTION.
DATA:
gr_adrnr TYPE RANGE OF adrc-addrnumber,
gr_adrnr_mat TYPE RANGE OF adrc-addrnumber,
gr_charg TYPE RANGE OF vbrp-charg,
gt_bank TYPE STANDARD TABLE OF lif_data=>ty_t012,
gr_hbkid TYPE RANGE OF bseg-hbkid,
gr_land TYPE RANGE OF bseg-landl,
gt_tvko TYPE STANDARD TABLE OF lif_data=>ty_tvko,
gt_tvzbt TYPE STANDARD TABLE OF lif_data=>ty_tvzbt,
gt_paymentterms TYPE STANDARD TABLE OF zeydigi_payterms,
gt_bkpf TYPE SORTED TABLE OF lif_data=>ty_bkpf
WITH UNIQUE KEY bukrs belnr gjahr,
gt_vttk TYPE STANDARD TABLE OF lif_data=>ty_vttk,
gt_currcode TYPE STANDARD TABLE OF zeydigi_currcd,
gt_countrycode TYPE STANDARD TABLE OF zeydigicountrycd,
gt_modepayment TYPE STANDARD TABLE OF zeydigi_modepay,
gt_lfa1 TYPE STANDARD TABLE OF lif_data=>ty_lfa1,
gt_bset TYPE STANDARD TABLE OF lif_data=>ty_bset,
gt_bseg TYPE STANDARD TABLE OF lif_data=>ty_bseg,
gt_bseg_customer TYPE STANDARD TABLE OF lif_data=>ty_bseg,
gt_bseg_tax TYPE STANDARD TABLE OF lif_data=>ty_bseg,
gt_invoice TYPE STANDARD TABLE OF lif_data~ty_invoice,
gt_rcpt_fi TYPE STANDARD TABLE OF lif_data=>ty_rcpt_fi,
gt_gstn TYPE SORTED TABLE OF lif_data~ty_j_1bbranch
WITH UNIQUE KEY bukrs branch,
gt_hsncd TYPE SORTED TABLE OF lif_data=>ty_marc
WITH UNIQUE KEY matnr werks,
gt_statecode TYPE STANDARD TABLE OF zeydigi_statecd,
gt_eway TYPE SORTED TABLE OF lif_data=>ty_eway_logrt
WITH UNIQUE KEY vbeln,
gt_cond_typ TYPE STANDARD TABLE OF zeydigi_condtype,
gt_adrc TYPE STANDARD TABLE OF lif_data=>ty_adrc,
gt_adrc1 TYPE STANDARD TABLE OF lif_data=>ty_adrc,
gt_adrc_mat TYPE STANDARD TABLE OF lif_data=>ty_adrc,
gt_bukrs TYPE STANDARD TABLE OF lif_data=>ty_t001,
gt_tax TYPE STANDARD TABLE OF lif_data=>ty_prcd_elements,
gt_hcode TYPE STANDARD TABLE OF zeydigi_hsncode,
gt_customer TYPE SORTED TABLE OF zeydigi_customer
WITH UNIQUE KEY customer,
gt_plant TYPE STANDARD TABLE OF lif_data=>ty_plant_map,
gt_customer_of_plnt TYPE TABLE OF lif_data=>ty_cus_plnt,
gt_doc_typ TYPE STANDARD TABLE OF zeydigi_docmap,
gt_header TYPE STANDARD TABLE OF zeydigi_oward_h,
gt_item TYPE STANDARD TABLE OF zeydigi_oward_i,
gt_vbak TYPE STANDARD TABLE OF lif_data=>ty_vbak,
gt_prodh TYPE STANDARD TABLE OF lif_data=>ty_t179t,
gt_mcha TYPE STANDARD TABLE OF lif_data=>ty_mcha,
gt_excel TYPE zeydigi_239ff_tt,
gt_units TYPE HASHED TABLE OF lif_data=>ty_zgstnunit
WITH UNIQUE KEY meins,
gt_matd_fi TYPE HASHED TABLE OF lif_data=>ty_mara_fi
WITH UNIQUE KEY matnr,
gt_plant_bupla TYPE STANDARD TABLE OF lif_data=>ty_plant_fi,
gt_vbpa TYPE STANDARD TABLE OF lif_data=>ty_vbpa,
lt_bkpf TYPE STANDARD TABLE OF lif_data=>ty_bkpf,
lt_kunnr TYPE HASHED TABLE OF lif_data=>ty_kunnr
WITH UNIQUE KEY kunnr,
lt_matnr TYPE HASHED TABLE OF lif_data=>ty_matnr
WITH UNIQUE KEY matnr,
lt_vbeln TYPE HASHED TABLE OF lif_data=>ty_vbeln
WITH UNIQUE KEY vbeln,
lt_bupla TYPE HASHED TABLE OF lif_data~ty_bupla
WITH UNIQUE KEY bupla,
lt_vgbel TYPE HASHED TABLE OF lif_data=>ty_vbeln
WITH UNIQUE KEY vbeln posnr,
lt_knumv TYPE HASHED TABLE OF lif_data=>ty_knumv
WITH UNIQUE KEY knumv kposn,
lt_plant TYPE HASHED TABLE OF lif_data=>ty_plant
WITH UNIQUE KEY werks,
lt_hsncd TYPE HASHED TABLE OF lif_data=>ty_steuc
WITH UNIQUE KEY steuc,
lt_aubel TYPE HASHED TABLE OF lif_data=>ty_vbeln
WITH UNIQUE KEY vbeln,
lt_crdr TYPE HASHED TABLE OF lif_data=>ty_vbeln
WITH UNIQUE KEY vbeln,
lt_cr_fi TYPE STANDARD TABLE OF lif_data=>ty_cr_fi,
lt_prodh TYPE HASHED TABLE OF lif_data=>ty_prodh
WITH UNIQUE KEY prodh,
lt_stblg TYPE HASHED TABLE OF lif_data=>ty_stblg
WITH UNIQUE KEY stblg stjah,
gt_bkpf_can TYPE SORTED TABLE OF lif_data=>ty_bkpf
WITH UNIQUE KEY bukrs belnr gjahr,
gt_bkpf_ori TYPE SORTED TABLE OF lif_data=>ty_bkpf
WITH UNIQUE KEY bukrs belnr gjahr.
ENDCLASS.
*&---------------------------------------------------------------------*
*& Class (Implementation) lcl_data
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
CLASS lcl_data IMPLEMENTATION.
METHOD m_get_bkpf_data.
* Get the accounting header details for the below tcodes and date
lr_tcode = VALUE #( sign = lc_include option = lc_equals ( low = lc_vf01 )
"VF01
( low = lc_vf02 )
"VF02
( low = lc_vf04 )
"VF04
( low = lc_vf11 )
"VF11
( low = lc_fb70 )
"FB70
( low = lc_fb75 )
"FB75
( low = lc_fb08 )
( low = 'FB01' )
( low = 'FBR2' ) ).
"FB08
ENDMETHOD.
METHOD m_get_bseg_data.
DATA: ls_matnr TYPE lif_data=>ty_matnr,
ls_bup LIKE LINE OF lt_bupla,
ls_hbkid LIKE LINE OF gr_hbkid,
ls_kunnr TYPE lif_data=>ty_kunnr,
ls_prodh LIKE LINE OF lt_prodh,
ls_pln TYPE lif_data=>ty_plant.
* Get the accounting line item details for the corresponding header details
IF gt_bkpf[] IS NOT INITIAL.
lt_bkpf = gt_bkpf[].
*Delete the adjacent duplicates from the table entries of BKPF by comparing company
code, accounting document number and fiscal year
DELETE ADJACENT DUPLICATES FROM lt_bkpf COMPARING bukrs belnr gjahr.
DATA(lt_vendor) = gt_bseg_customer.
DELETE lt_vendor WHERE koart NE 'K'.
DATA: r_adrnr TYPE RANGE OF adrc-addrnumber.
IF lt_vendor IS NOT INITIAL.
SELECT lifnr land1 name1 name2 stcd3 adrnr FROM lfa1 APPENDING TABLE
gt_lfa1
FOR ALL ENTRIES IN lt_vendor
WHERE lifnr = lt_vendor-lifnr.
r_adrnr = VALUE #( FOR ls_add IN gt_lfa1 ( sign = 'I' option = 'EQ' low =
ls_add-adrnr ) ).
APPEND LINES OF r_adrnr TO gr_adrnr_mat.
ENDIF.
ENDIF.
ENDAT.
** collect plants
ls_pln-werks = <lfs_bseg>-werks. "WERKS-->Plant
INSERT ls_pln INTO TABLE lt_plant.
ENDLOOP.
ENDIF.
ENDIF.
* Bank details
IF gr_hbkid IS NOT INITIAL.
*T012k-->House Bank Accounts T012-->House Banks
*BANKL-->Bank Keys BANKN-->Bank Account Number
SELECT t012~bukrs
t012~hbkid
t012~bankl
t012k~bankn
FROM t012
INNER JOIN t012k ON t012~bukrs EQ t012k~bukrs "#EC CI_BUFFJOIN "BUKRS--
>Company Code
AND t012~hbkid EQ t012k~hbkid "HBKID-->Short key for a
House Bank
INTO TABLE gt_bank
WHERE t012~bukrs EQ pa_bukrs
AND t012~hbkid IN gr_hbkid
AND t012~spras EQ sy-langu.
IF sy-subrc IS INITIAL.
SORT gt_bank BY bukrs hbkid.
ENDIF.
ENDIF.
ENDMETHOD.
METHOD m_get_bset_data.
ENDMETHOD.
METHOD m_get_invoice_details.
DATA:
ls_vgb LIKE LINE OF lt_vgbel,
ls_aubel LIKE LINE OF lt_aubel,
ls_charg LIKE LINE OF gr_charg,
ls_knv LIKE LINE OF lt_knumv,
lrs_adrnr LIKE LINE OF gr_adrnr,
ls_prodh LIKE LINE OF lt_prodh.
IF sy-subrc IS INITIAL.
*Sort the below table by billing document number and material number
SORT gt_invoice BY vbeln matnr posnr.
lrs_adrnr-option = lc_equals.
lrs_adrnr-sign = lc_include.
lrs_adrnr-low = <lfs_data>-adrnr. "ADRNR-->Address Number
COLLECT lrs_adrnr INTO gr_adrnr.
ENDMETHOD.
METHOD m_get_sales_org_addr.
ENDMETHOD.
METHOD m_get_vbpa_details.
ENDMETHOD.
METHOD m_get_supplier_details.
*T001-->Company Codes
SELECT bukrs adrnr butxt
FROM t001
INTO TABLE gt_bukrs
WHERE bukrs EQ pa_bukrs "BUKRS-->Company Code
AND spras EQ sy-langu
ORDER BY PRIMARY KEY.
ENDMETHOD.
METHOD m_get_recipient_details_fi.
ENDMETHOD.
METHOD m_get_adrc_details.
ENDMETHOD.
METHOD m_get_supplier_gstn.
*Get the supplier gstn based on the business place
*J_1BBRANCH-->Business Place
IF lt_bupla[] IS NOT INITIAL.
SELECT bukrs
branch
gstin
adrnr
FROM j_1bbranch
INTO TABLE gt_gstn
FOR ALL ENTRIES IN lt_bupla
WHERE bukrs EQ pa_bukrs "BUKRS-->Company Code
AND branch EQ lt_bupla-bupla "BRANCH-->Business Place
ORDER BY PRIMARY KEY.
IF sy-subrc IS NOT INITIAL.
CLEAR gt_gstn[].
ENDIF.
ENDIF.
ENDMETHOD.
METHOD m_get_hsn_code.
ENDMETHOD.
METHOD m_get_eway_bill_and_strloc.
ENDMETHOD.
METHOD m_get_tax_info.
ENDMETHOD.
METHOD m_get_supply_type_details.
* Get the sales type, recipient type, reverse charge, auto populate from cust table
IF lt_kunnr[] IS NOT INITIAL.
*ZGSTN_CUSTOMER-->Customer mapping table
SELECT * FROM zeydigi_customer
INTO TABLE gt_customer
FOR ALL ENTRIES IN lt_kunnr
WHERE customer EQ lt_kunnr-kunnr "KUNNR-->Customer Number
ORDER BY PRIMARY KEY.
IF sy-subrc IS NOT INITIAL.
CLEAR gt_customer[].
ENDIF.
ENDIF.
IF sy-subrc IS INITIAL.
SORT gt_plant[] BY werks j_1bbranch. "J_1BBRANCH-->Business Place
DATA(lt_kunnr) = gt_plant.
DELETE lt_kunnr WHERE kunnr IS INITIAL.
SORT lt_kunnr BY kunnr.
DELETE ADJACENT DUPLICATES FROM lt_kunnr COMPARING kunnr.
IF lt_kunnr IS NOT INITIAL.
SELECT kunnr, name1, adrnr FROM kna1
FOR ALL ENTRIES IN @lt_kunnr
WHERE kunnr = @lt_kunnr-kunnr
INTO TABLE @gt_customer_of_plnt.
IF sy-subrc = 0.
SORT gt_customer_of_plnt BY kunnr.
LOOP AT gt_customer_of_plnt ASSIGNING FIELD-SYMBOL(<fs_cus_of_plnt>).
* Collect address
lrs_adrnr-option = lc_equals.
lrs_adrnr-sign = lc_include.
lrs_adrnr-low = <fs_cus_of_plnt>-adrnr. "ADRNR-->Address Number
COLLECT lrs_adrnr INTO gr_adrnr.
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDMETHOD.
METHOD m_get_order_reason.
ENDMETHOD.
METHOD m_get_description.
ENDMETHOD.
METHOD m_get_material_details.
ENDMETHOD.
METHOD m_get_plant_details.
*T001W-->Plants/Branches
IF lt_bupla[] IS NOT INITIAL.
SELECT werks
j_1bbranch
FROM t001w
INTO TABLE gt_plant_bupla
FOR ALL ENTRIES IN lt_bupla
WHERE j_1bbranch EQ lt_bupla-bupla. "J_1BBRANCH-->Business Place
IF sy-subrc IS INITIAL.
SORT gt_plant_bupla BY j_1bbranch.
LOOP AT gt_plant_bupla ASSIGNING <lfs_plant_fi>.
ls_plant-werks = <lfs_plant_fi>-werks. "WERKS-->Plant
INSERT ls_plant INTO TABLE lt_plant.
ENDLOOP.
ENDIF.
ENDIF.
ENDMETHOD.
METHOD m_supply_type_determination.
CONSTANTS: lc_sezwt TYPE zeydigi_oward_i-supplytype VALUE 'SEZWOP',
lc_sezwdt TYPE zeydigi_oward_i-supplytype VALUE 'SEDWOP',
lc_sezt TYPE zeydigi_oward_i-supplytype VALUE 'SEZWP',
lc_sezdt TYPE zeydigi_oward_i-supplytype VALUE 'SEDWP',
lc_dxp TYPE zeydigi_oward_i-supplytype VALUE 'DXP',
lc_dta TYPE zeydigi_oward_i-supplytype VALUE 'DTA',
lc_nil TYPE zeydigi_oward_i-supplytype VALUE 'NIL',
lc_tax TYPE zeydigi_oward_i-supplytype VALUE 'TAX',
lc_expwt TYPE zeydigi_oward_i-supplytype VALUE 'EXPWT',
lc_expt TYPE zeydigi_oward_i-supplytype VALUE 'EXPT',
lc_can TYPE zeydigi_oward_i-supplytype VALUE 'CAN',
lc_ext TYPE zeydigi_oward_i-supplytype VALUE 'EXT',
lc_hnon TYPE zeydigi_hsncode-sales_type VALUE 'NON',
lc_csez TYPE zeydigi_customer-sales_type VALUE 'S',
lc_csedz TYPE zeydigi_customer-sales_type VALUE 'SD',
lc_cdom TYPE zeydigi_customer-sales_type VALUE 'D',
lc_jo TYPE kschl VALUE 'JO'.
ENDIF.
ENDIF.
ENDIF.
ELSE. " export
IF ls_data-price = 0.
lv_supplytype = lc_expwt.
ELSE.
lv_supplytype = lc_expt.
ENDIF.
ENDIF.
ENDIF.
lv_supplytype = COND #( WHEN ls_data-sfakn IS NOT INITIAL
THEN lc_can "|CAN|
ELSE lv_supplytype ).
ENDMETHOD.
METHOD m_supply_type_determination_fi.
CONSTANTS: lc_sezwt TYPE zeydigi_oward_i-supplytype VALUE 'SEZWOP',
lc_sezwdt TYPE zeydigi_oward_i-supplytype VALUE 'SEDWOP',
lc_sezt TYPE zeydigi_oward_i-supplytype VALUE 'SEZWP',
lc_sezdt TYPE zeydigi_oward_i-supplytype VALUE 'SEDWP',
lc_dxp TYPE zeydigi_oward_i-supplytype VALUE 'DXP',
lc_dta TYPE zeydigi_oward_i-supplytype VALUE 'DTA',
lc_nil TYPE zeydigi_oward_i-supplytype VALUE 'NIL',
lc_tax TYPE zeydigi_oward_i-supplytype VALUE 'TAX',
lc_expwt TYPE zeydigi_oward_i-supplytype VALUE 'EXPWT',
lc_expt TYPE zeydigi_oward_i-supplytype VALUE 'EXPT',
lc_can TYPE zeydigi_oward_i-supplytype VALUE 'CAN',
lc_ext TYPE zeydigi_oward_i-supplytype VALUE 'EXT',
lc_hnon TYPE zeydigi_hsncode-sales_type VALUE 'NON',
lc_csez TYPE zeydigi_customer-sales_type VALUE 'S',
lc_csedz TYPE zeydigi_customer-sales_type VALUE 'SD',
lc_cdom TYPE zeydigi_customer-sales_type VALUE 'D',
lc_jo TYPE kschl VALUE 'JO',
lc_canl TYPE bkpf-xreversal VALUE '2'.
FIELD-SYMBOLS:
<lfs_plant> TYPE lif_data=>ty_plant_map,
<lfs_hsn_cd> TYPE lif_data=>ty_marc,
<lfs_hcode> TYPE zeydigi_hsncode.
lv_werks = ls_data-werks.
IF lv_werks IS INITIAL.
lv_werks = ls_data-bupla.
ENDIF.
ENDMETHOD.
METHOD m_fill_final_table.
TYPES:BEGIN OF ty_sup,
belnr TYPE belnr,
supplytype TYPE char10,
END OF ty_sup.
DATA:
ls_header TYPE zeydigi_oward_h,
ls_item TYPE zeydigi_oward_i,
ls_cust_bseg TYPE zeydigi_customer,
ls_cust TYPE zeydigi_customer,
lv_shipto TYPE adrc-region,
lv_bseg_land1 TYPE kna1-land1,
lv_index TYPE sy-tabix,
lv_indx TYPE sy-tabix,
ls_faede TYPE faede,
ls_out_faede TYPE faede,
lv_credit TYPE tfmatage,
lv_sec7_flag TYPE zeydigi_customer-eligible_sec7,
lv_date TYPE vbrk-erdat VALUE '20170701',
lr_supply TYPE RANGE OF zeydigi_oward_i-supplytype,
lv_bill_to TYPE kna1-kunnr,
lv_ship_to TYPE kna1-kunnr,
lv_object_name TYPE thead-tdname,
lv_string TYPE string,
lv_shipto_ctry TYPE kna1-land1,
lv_plant_ctry TYPE kna1-land1,
lv_name TYPE t001-butxt,
lv_invasamt TYPE zeydigi_oward_h-invoiceassessableamount,
lv_invassamt TYPE zeydigi_oward_h-invoiceassessableamount,
lv_tax_total TYPE zeydigi_oward_h-invoiceassessableamount,
lv_inv_igst TYPE zeydigi_oward_h-invoiceigstamount,
lv_inv_cgst TYPE zeydigi_oward_h-invoicecgstamount,
lv_inv_sgst TYPE zeydigi_oward_h-invoicesgstamount,
lv_inv_adv TYPE zeydigi_oward_h-invoicecessadvaloremamount,
lv_inv_spc TYPE zeydigi_oward_h-invoicecessspecificamount,
lv_inv_stc TYPE zeydigi_oward_h-invoicestatecessspecificamount.
*Payment Due dt
ls_faede-koart = <lfs_bseg_cust>-koart.
ls_faede-zfbdt = <lfs_bseg_cust>-zfbdt.
ls_faede-zbd3t = <lfs_bseg_cust>-zbd3t.
ls_faede-zbd1t = <lfs_bseg_cust>-zbd1t.
ls_faede-zbd2t = <lfs_bseg_cust>-zbd2t.
* round off
READ TABLE gt_bseg_tax ASSIGNING FIELD-SYMBOL(<lfs_bseg_tax>) WITH KEY
bukrs = <lfs_bseg>-bukrs belnr = <lfs_bseg>-belnr
* payee name
READ TABLE gt_bukrs TRANSPORTING butxt INTO DATA(ls_butxt) WITH KEY bukrs =
<lfs_bseg>-bukrs.
IF sy-subrc = 0.
ls_header-payeename = ls_butxt-butxt.
ENDIF.
IF ls_header-supplieraddress1 IS INITIAL.
ls_header-supplieraddress1 = ls_header-supplieraddress2.
CLEAR ls_header-supplieraddress2.
ENDIF.
ELSE.
ls_header-supplieraddress1 = <lfs_adrc2>-building && <lfs_adrc2>-
roomnumber && <lfs_adrc2>-floor && <lfs_adrc2>-street &&
<lfs_adrc2>-house_num1 && <lfs_adrc2>-
house_num2 && <lfs_adrc2>-house_num3 &&
<lfs_adrc2>-str_suppl1 && <lfs_adrc2>-
str_suppl2 && <lfs_adrc2>-str_suppl3 &&
<lfs_adrc2>-post_code1 && <lfs_adrc2>-
post_code2 && <lfs_adrc2>-post_code3.
ENDIF.
* Taxscheme
ls_header-taxscheme = 'GST'.
* dispatcher details
READ TABLE gt_plant ASSIGNING <lfs_plant> WITH KEY werks = <lfs_bseg>-werks
BINARY SEARCH.
IF sy-subrc IS INITIAL.
READ TABLE gt_gstn ASSIGNING <lfs_gstn> WITH TABLE KEY bukrs = pa_bukrs
branch = <lfs_plant>-j_1bbranch.
IF sy-subrc IS INITIAL.
ls_header-dispatchergstin = <lfs_gstn>-gstin.
ENDIF.
READ TABLE gt_customer_of_plnt ASSIGNING FIELD-SYMBOL(<fs_cus_of_plant>)
WITH KEY kunnr = <lfs_plant>-kunnr BINARY SEARCH.
IF sy-subrc = 0.
ls_header-dispatchertradename = <fs_cus_of_plant>-name1.
ls_header-dispatcherpincode = <lfs_adrc>-post_code1.
IF ls_header-dispatcheraddress1 IS INITIAL.
ls_header-dispatcheraddress1 = ls_header-dispatcheraddress2.
CLEAR ls_header-dispatcheraddress2.
ENDIF.
ELSE.
ls_header-dispatcheraddress1 = <lfs_adrc>-building && <lfs_adrc>-
floor && <lfs_adrc>-street && <lfs_adrc>-house_num1 &&
<lfs_adrc>-house_num2 && <lfs_adrc>-
house_num3 && <lfs_adrc>-str_suppl1 && <lfs_adrc>-str_suppl2 &&
<lfs_adrc>-str_suppl3 && <lfs_adrc>-
post_code1 && <lfs_adrc>-post_code2 && <lfs_adrc>-post_code3.
ENDIF.
lv_plant_ctry = <lfs_adrc>-country.
READ TABLE gt_statecode ASSIGNING <lfs_stcode> WITH KEY regio =
<lfs_adrc>-region BINARY SEARCH.
IF sy-subrc IS INITIAL AND <lfs_adrc>-country EQ lc_country.
ls_header-dispatcherstatecode = <lfs_stcode>-gstcode.
ELSEIF ls_header-dispatcherstatecode IS INITIAL .
<lfs_adrc>-region = |{ <lfs_adrc>-region ALPHA = OUT }|.
READ TABLE gt_statecode ASSIGNING <lfs_stcode> WITH KEY regio =
<lfs_adrc>-region BINARY SEARCH.
IF sy-subrc = 0.
ls_header-dispatcherstatecode = <lfs_stcode>-gstcode.
ENDIF.
ELSE.
ls_header-dispatcherstatecode = '96'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
* Document type
READ TABLE gt_doc_typ ASSIGNING <lfs_gst_doc> WITH KEY fkart =
<lfs_invoice>-fkart BINARY SEARCH.
IF sy-subrc IS INITIAL.
ls_header-documenttype = <lfs_gst_doc>-doc_type_gst.
ENDIF.
* recipient details
READ TABLE gt_vbpa ASSIGNING <lfs_vbpa> WITH KEY vbeln =
<lfs_invoice>-vbeln parvw = lc_we BINARY SEARCH.
IF sy-subrc IS INITIAL.
READ TABLE gt_rcpt_fi ASSIGNING <lfs_rcpt> WITH KEY kunnr =
<lfs_vbpa>-kunnr BINARY SEARCH.
IF sy-subrc IS INITIAL.
ls_header-shiptogstin = <lfs_rcpt>-stcd3.
lv_ship_to = <lfs_rcpt>-kunnr.
lv_shipto_ctry = <lfs_rcpt>-land1.
IF ls_header-shiptoaddress1 IS INITIAL.
ls_header-shiptoaddress1 = ls_header-shiptoaddress2.
CLEAR ls_header-shiptoaddress2.
ENDIF.
ELSE.
ls_header-shiptoaddress1 = <lfs_adrc>-building && <lfs_adrc>-
floor && <lfs_adrc>-street && <lfs_adrc>-house_num1 &&
<lfs_adrc>-house_num2 && <lfs_adrc>-
house_num3 && <lfs_adrc>-str_suppl1 && <lfs_adrc>-str_suppl2 && <lfs_adrc>-
str_suppl3 &&
<lfs_adrc>-post_code1 && <lfs_adrc>-
post_code2 && <lfs_adrc>-post_code3.
ENDIF.
* Customer details
READ TABLE gt_vbpa ASSIGNING <lfs_vbpa> WITH KEY vbeln = <lfs_invoice>-
vbeln parvw = lc_ag BINARY SEARCH.
IF sy-subrc IS INITIAL.
READ TABLE gt_rcpt_fi ASSIGNING <lfs_rcpt> WITH KEY kunnr =
<lfs_vbpa>-kunnr BINARY SEARCH.
IF sy-subrc IS INITIAL.
ls_header-customergstin = <lfs_rcpt>-stcd3.
ls_header-customercode = <lfs_rcpt>-kunnr.
ls_header-customerlegalname = <lfs_rcpt>-name1 && <lfs_rcpt>-
name2.
ls_header-customertradename = ls_header-customerlegalname.
ls_header-customerpanoraadhaar = ls_header-customergstin+2(10).
ls_header-customerpincode = <lfs_adrc>-post_code1.
ls_header-customerphone = <lfs_adrc>-tel_number.
ls_header-customeremail = <lfs_adrc>-smtp_addr.
CONDENSE lv_cust.
DATA(lv_cus_len) = strlen( lv_cust ).
IF lv_cus_len GT 80.
ls_header-customeraddress1 = <lfs_adrc>-building &&
<lfs_adrc>-floor && <lfs_adrc>-street &&
<lfs_adrc>-house_num1 &&
<lfs_adrc>-house_num2 && <lfs_adrc>-house_num3.
IF ls_header-customeraddress1 IS INITIAL.
ls_header-customeraddress1 = ls_header-customeraddress2.
CLEAR ls_header-customeraddress2.
ENDIF.
ELSE.
ls_header-customeraddress1 = <lfs_adrc>-building &&
<lfs_adrc>-floor && <lfs_adrc>-street && <lfs_adrc>-house_num1 &&
<lfs_adrc>-house_num2 &&
<lfs_adrc>-house_num3 && <lfs_adrc>-str_suppl1 && <lfs_adrc>-str_suppl2 &&
<lfs_adrc>-str_suppl3 &&
<lfs_adrc>-post_code1 && <lfs_adrc>-post_code2 && <lfs_adrc>-post_code3.
ENDIF.
*Section 7
ls_header-sec7igstflag = lc_no.
READ TABLE gt_plant ASSIGNING <lfs_plant> WITH KEY werks =
<lfs_invoice>-werks BINARY SEARCH.
IF sy-subrc IS INITIAL AND lv_sec7_flag EQ abap_true
AND ( <lfs_plant>-land1 EQ lc_country ) AND ( lv_shipto EQ
<lfs_plant>-regio ). " ls_header-shiptostate
READ TABLE gt_tax ASSIGNING FIELD-SYMBOL(<lfs_tax_cd>) WITH KEY
knumv = <lfs_invoice>-knumv
kposn = <lfs_invoice>-posnr
* bill to state
READ TABLE gt_vbpa ASSIGNING <lfs_vbpa> WITH KEY vbeln =
<lfs_invoice>-vbeln parvw = lc_re BINARY SEARCH.
IF sy-subrc IS INITIAL.
READ TABLE gt_rcpt_fi ASSIGNING <lfs_rcpt> WITH KEY kunnr =
<lfs_vbpa>-kunnr BINARY SEARCH.
IF sy-subrc IS INITIAL.
lv_bill_to = <lfs_rcpt>-kunnr.
ENDIF.
ENDIF.
* CR/DR scenario
READ TABLE gt_vbak ASSIGNING <lfs_vbak> WITH KEY vbeln = <lfs_invoice>-
aubel BINARY SEARCH.
IF sy-subrc IS INITIAL.
READ TABLE lt_ordat ASSIGNING FIELD-SYMBOL(<lfs_ordat>) WITH KEY
vbeln = <lfs_vbak>-zuonr+0(10) BINARY SEARCH.
IF sy-subrc IS INITIAL.
ls_item-documentreferencenumber = <lfs_bkpf>-xblnr.
ls_item-preceedinginvoiceno = <lfs_vbak>-zuonr+0(10).
ls_item-preceedinginvoicedt = <lfs_ordat>-fkdat.
* pre-GST
IF <lfs_ordat>-fkdat IS INITIAL.
ls_header-crdrpregst = lc_no.
ELSE.
ls_header-crdrpregst = COND #( WHEN <lfs_ordat>-fkdat LT lv_date
THEN lc_yes
ELSE lc_no ).
ENDIF.
ENDIF.
ENDIF.
IF ls_item-documentreferencenumber IS INITIAL.
READ TABLE gt_bkpf INTO DATA(ls_bkpf) WITH KEY bukrs = <lfs_invoice>-
bukrs belnr = <lfs_invoice>-vbeln BINARY SEARCH.
IF sy-subrc = 0.
ls_item-documentreferencenumber = ls_bkpf-xblnr.
ENDIF.
ENDIF.
* eway bill
READ TABLE gt_eway ASSIGNING FIELD-SYMBOL(<lfs_eway>) WITH TABLE KEY
vbeln = <lfs_invoice>-vgbel.
IF sy-subrc IS INITIAL.
ls_header-transportdocno = <lfs_eway>-bolnr.
ENDIF.
lv_object_name = <lfs_invoice>-vgbel.
ls_header-vehicletype = lv_string.
CLEAR lv_string.
* Vehical num
lcl_helper=>m_read_text(
EXPORTING
id = 'ZVEN'
name = lv_object_name
object = 'VBBK'
IMPORTING
ex_data = lv_string ).
ls_header-vehicleno = lv_string.
CLEAR lv_string.
*Distance
lcl_helper=>m_read_text(
EXPORTING
id = 'ZDIS'
name = lv_object_name
object = 'VBBK'
IMPORTING
ex_data = lv_string ).
ls_header-distance = lv_string.
CLEAR lv_string.
* Transport date
lcl_helper=>m_read_text(
EXPORTING
id = 'ZTRN'
name = lv_object_name
object = 'VBBK'
IMPORTING
ex_data = lv_string ).
* distance
IF ls_header-distance IS INITIAL.
READ TABLE gt_vttk ASSIGNING <lfs_vttk> WITH KEY vbeln =
<lfs_invoice>-vgbel BINARY SEARCH.
IF sy-subrc IS INITIAL.
ls_header-distance = <lfs_vttk>-distz.
ELSE.
READ TABLE gt_eway INTO DATA(ls_route) WITH KEY vbeln =
<lfs_invoice>-vgbel.
IF sy-subrc = 0.
ls_header-distance = ls_route-distz.
ENDIF.
ENDIF.
ENDIF.
** Cancellation scenario
IF <lfs_invoice>-sfakn IS NOT INITIAL.
READ TABLE gt_invoice ASSIGNING <lfs_can> WITH KEY vbeln =
<lfs_invoice>-sfakn BINARY SEARCH.
IF sy-subrc IS INITIAL.
READ TABLE gt_doc_typ ASSIGNING <lfs_gst_doc> WITH KEY fkart =
<lfs_can>-fkart BINARY SEARCH.
IF sy-subrc IS INITIAL.
ls_header-documenttype = <lfs_gst_doc>-doc_type_gst.
ENDIF.
ENDIF.
ENDIF.
* TCS flag
ls_header-tcsflaggst = lc_no.
ls_header-ecomtransactionid = lc_no.
READ TABLE gt_vbpa ASSIGNING <lfs_vbpa> WITH KEY vbeln =
<lfs_invoice>-vbeln parvw = lc_rg BINARY SEARCH.
IF sy-subrc IS INITIAL.
READ TABLE gt_rcpt_fi ASSIGNING <lfs_rcpt> WITH KEY kunnr =
<lfs_vbpa>-kunnr BINARY SEARCH.
IF sy-subrc IS INITIAL AND lv_bill_to NE <lfs_rcpt>-kunnr.
ls_header-ecomgstin = <lfs_rcpt>-stcd1.
ls_header-ecomtransactionid = lc_yes.
ELSE.
*Direct FI Posting
ls_header-documentnumber = <lfs_bkpf>-belnr.
ls_header-documentdate = <lfs_bkpf>-budat.
* Document type
READ TABLE gt_doc_typ ASSIGNING <lfs_gst_doc> WITH KEY blart =
<lfs_bkpf>-blart.
IF sy-subrc IS INITIAL.
ls_header-documenttype = <lfs_gst_doc>-doc_type_gst.
ENDIF.
* Recipient type and reverse charge
READ TABLE gt_bseg_customer ASSIGNING <lfs_bseg_cust> WITH KEY bukrs =
<lfs_bseg>-bukrs belnr = <lfs_bseg>-belnr
gjahr =
<lfs_bseg>-gjahr BINARY SEARCH.
IF sy-subrc IS INITIAL.
READ TABLE gt_customer ASSIGNING <lfs_cust> WITH TABLE KEY customer =
<lfs_bseg_cust>-kunnr.
IF sy-subrc IS NOT INITIAL.
ls_header-revchargeflag = lc_no.
ls_header-claimrefundflag = lc_no.
ls_header-autopoprefund = lc_no.
ELSE.
ls_cust_bseg = <lfs_cust>.
ls_header-revchargeflag = SWITCH #( <lfs_cust>-reverse_charge
WHEN lc_x THEN lc_yes
ELSE lc_no ).
ls_header-claimrefundflag = SWITCH #( <lfs_cust>-claim_refund
WHEN lc_x THEN lc_yes
ELSE lc_no ).
ls_header-autopoprefund = SWITCH #( <lfs_cust>-auto_populate
WHEN lc_x THEN lc_yes
ELSE lc_no ).
lv_sec7_flag = <lfs_cust>-eligible_sec7.
ENDIF.
IF lv_ship_len GT 80.
ls_header-shiptoaddress1 = <lfs_adrc>-building && <lfs_adrc>-
floor && <lfs_adrc>-street &&
<lfs_adrc>-house_num1 && <lfs_adrc>-
house_num2 && <lfs_adrc>-house_num3.
IF ls_header-shiptoaddress1 IS INITIAL.
ls_header-shiptoaddress1 = ls_header-shiptoaddress2.
CLEAR ls_header-shiptoaddress2.
ENDIF.
ELSE.
ls_header-shiptoaddress1 = <lfs_adrc>-building && <lfs_adrc>-
floor && <lfs_adrc>-street && <lfs_adrc>-house_num1 &&
<lfs_adrc>-house_num2 && <lfs_adrc>-
str_suppl1 && <lfs_adrc>-str_suppl2 && <lfs_adrc>-str_suppl3 &&
<lfs_adrc>-post_code1 && <lfs_adrc>-
post_code2 && <lfs_adrc>-post_code3.
ENDIF.
ls_header-customerlegalname = ls_header-shiptolegalname.
ls_header-customertradename = ls_header-shiptotradename.
IF ls_header-customertradename IS INITIAL.
ls_header-customertradename = ls_header-customerlegalname.
ENDIF.
ls_header-customeraddress1 = ls_header-shiptoaddress1.
ls_header-customeraddress2 = ls_header-shiptoaddress2.
ls_header-customergstin = ls_header-shiptogstin.
ls_header-customerlocation = ls_header-shiptolocation.
ls_header-customerpincode = ls_header-shiptopincode.
ls_header-customerstatecode = ls_header-shiptostatecode.
ENDIF.
ENDIF.
IF <lfs_bseg>-werks IS INITIAL.
ls_header-dispatchergstin = ls_header-suppliergstin.
ls_header-dispatcheraddress1 = ls_header-supplieraddress1.
ls_header-dispatcheraddress2 = ls_header-supplieraddress2.
ls_header-dispatcherlocation = ls_header-supplierlocation.
ls_header-dispatcherpincode = ls_header-supplierpincode.
ls_header-dispatcherstatecode = ls_header-supplierstatecode.
ls_header-dispatchertradename = ls_header-suppliertradename.
ENDIF.
* Section 7
ls_header-sec7igstflag = lc_no.
READ TABLE gt_plant ASSIGNING <lfs_plant> WITH KEY werks = <lfs_bseg>-
werks BINARY SEARCH.
IF sy-subrc IS INITIAL AND lv_sec7_flag EQ abap_true AND ( <lfs_plant>-
land1 EQ lc_country )
AND ( lv_shipto EQ <lfs_plant>-regio ).
READ TABLE gt_bset ASSIGNING <lfs_bset> WITH KEY bukrs = <lfs_bseg>-
bukrs belnr = <lfs_bseg>-belnr
gjahr = <lfs_bseg>-
gjahr BINARY SEARCH.
IF sy-subrc IS INITIAL.
READ TABLE gt_cond_typ ASSIGNING <lfs_type> WITH KEY kschl =
<lfs_bset>-kschl BINARY SEARCH.
IF sy-subrc IS INITIAL AND <lfs_type>-gst_type EQ lc_igst.
ls_header-sec7igstflag = lc_yes.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
* pre-GST
IF <lfs_bkpf>-xblnr IS NOT INITIAL.
READ TABLE gt_bkpf_ori ASSIGNING FIELD-SYMBOL(<lfs_bkpf_ori>) WITH KEY
bukrs = pa_bukrs belnr = <lfs_bkpf>-xblnr+0(10)
BINARY
SEARCH.
IF sy-subrc IS INITIAL.
IF <lfs_bkpf_ori>-bldat IS INITIAL.
ls_header-crdrpregst = lc_no.
ELSE.
ls_header-crdrpregst = COND #( WHEN <lfs_bkpf_ori>-bldat LT lv_date
THEN lc_yes
ELSE lc_no ).
ENDIF.
ENDIF.
ENDIF.
ls_header-tcsflaggst = lc_no.
ls_header-ecomtransactionid = lc_no.
ENDAT.
* Item details.
ls_item-productcode = <lfs_bseg>-matnr.
ls_item-plantcode = <lfs_bseg>-werks.
ls_header-profitcentre1 = <lfs_bseg>-prctr.
IF <lfs_bseg>-ktosl EQ 'JOI'.
ls_header-gligst = <lfs_bseg>-hkont.
ELSEIF <lfs_bseg>-ktosl EQ 'JOC'.
ls_header-glcgst = <lfs_bseg>-hkont.
ELSEIF <lfs_bseg>-ktosl EQ 'JOS'.
ls_header-glsgst = <lfs_bseg>-hkont.
ELSEIF <lfs_bseg>-ktosl EQ 'JCA'.
ls_header-gladvaloremcess = <lfs_bseg>-hkont.
ELSEIF <lfs_bseg>-ktosl EQ 'JCS'.
ls_header-glspecificcess = <lfs_bseg>-hkont.
ELSEIF <lfs_bseg>-ktosl EQ 'JCK'.
ls_header-glstatecessspecific = <lfs_bseg>-hkont.
ENDIF.
ls_item-quantity = <lfs_bseg>-menge.
ls_item-accvoucherno = <lfs_bkpf>-belnr.
ls_item-uqc = <lfs_bseg>-meins1.
ls_item-hsn = <lfs_bseg>-steuc.
IF <lfs_bkpf>-awtyp EQ lc_vbrk.
* taxable value, invoice value
READ TABLE gt_invoice ASSIGNING <lfs_invoice> WITH KEY vbeln = <lfs_bkpf>-
awkey+0(10) matnr = <lfs_bseg>-matnr.
IF sy-subrc IS INITIAL.
ls_item-linenumber = <lfs_invoice>-posnr.
ls_header-linenumber = <lfs_invoice>-posnr.
ls_item-productserialnumber = <lfs_invoice>-posnr.
ls_item-totalitemamount = <lfs_invoice>-amt.
ls_item-itemassessableamt = <lfs_invoice>-amt.
ls_item-product_desc = <lfs_invoice>-arktx.
ls_item-productname = <lfs_invoice>-matnr.
ls_item-batchname = <lfs_invoice>-charg.
IF <lfs_type>-gst_type = lc_cgst.
ls_item-cgstrate = <lfs_tax>-kbetr ."/ 10.
ls_item-cgstamount = <lfs_tax>-kwert.
lv_inv_cgst = lv_inv_cgst + ls_item-cgstamount.
lv_tax_total = lv_tax_total + ls_item-cgstamount.
ls_header-glcgst = <lfs_tax>-konts.
ls_item-totalitemamount = ls_item-totalitemamount + ls_item-
cgstamount.
IF <lfs_bseg>-koart = 'D' AND ( <lfs_bseg>-umskz = 'F' OR
<lfs_bseg>-umskz = 'A' ).
ls_item-paidamount = <lfs_bseg>-fwbas.
ENDIF.
ENDIF.
IF <lfs_type>-gst_type = lc_igst.
ls_item-igstrate = <lfs_tax>-kbetr." / 10.
ls_item-igstamount = <lfs_tax>-kwert.
lv_inv_igst = lv_inv_igst + ls_item-igstamount.
lv_tax_total = lv_tax_total + ls_item-igstamount.
ls_header-gligst = <lfs_tax>-konts.
ls_item-totalitemamount = ls_item-totalitemamount + ls_item-
igstamount.
IF <lfs_bseg>-koart = 'D' AND ( <lfs_bseg>-umskz = 'F' OR
<lfs_bseg>-umskz = 'A' ).
ls_item-paidamount = <lfs_bseg>-fwbas.
ENDIF.
ENDIF.
IF <lfs_type>-gst_type = lc_sgst.
ls_item-sgstrate = <lfs_tax>-kbetr." / 10.
ls_item-sgstamount = <lfs_tax>-kwert.
lv_inv_sgst = lv_inv_sgst + ls_item-sgstamount.
lv_tax_total = lv_tax_total + ls_item-sgstamount.
ls_header-glsgst = <lfs_tax>-konts.
ls_item-totalitemamount = ls_item-totalitemamount + ls_item-
sgstamount.
IF <lfs_bseg>-koart = 'D' OR ( <lfs_bseg>-umskz = 'F' OR
<lfs_bseg>-umskz = 'A' OR <lfs_bseg>-umskz = 'T' ).
ls_item-paidamount = <lfs_bseg>-fwbas.
ENDIF.
ENDIF.
IF <lfs_type>-gst_type = lc_adcr.
ls_item-cessadvaloremrate = <lfs_tax>-kbetr." / 10.
ls_item-cessadvaloremamt = <lfs_tax>-kwert.
lv_inv_adv = lv_inv_adv + ls_item-
cessadvaloremamt.
lv_tax_total = lv_tax_total + ls_item-
cessadvaloremamt.
ls_header-gladvaloremcess = <lfs_tax>-konts.
ls_item-totalitemamount = ls_item-totalitemamount + ls_item-
cessadvaloremamt.
IF <lfs_bseg>-koart = 'D' OR ( <lfs_bseg>-umskz = 'F' OR
<lfs_bseg>-umskz = 'A' OR <lfs_bseg>-umskz = 'T' ).
ls_item-paidamount = <lfs_bseg>-fwbas.
ENDIF.
ENDIF.
IF <lfs_type>-gst_type = lc_spcr.
ls_item-cessspecificrate = <lfs_tax>-kbetr." / 10.
ls_item-cessspecificamt = <lfs_tax>-kwert.
lv_inv_spc = lv_inv_spc + ls_item-
cessspecificamt.
lv_tax_total = lv_tax_total + ls_item-
cessspecificamt.
ls_header-glspecificcess = <lfs_tax>-konts.
ls_item-totalitemamount = ls_item-totalitemamount + ls_item-
cessspecificamt.
IF <lfs_bseg>-koart = 'D' OR ( <lfs_bseg>-umskz = 'F' OR
<lfs_bseg>-umskz = 'A' OR <lfs_bseg>-umskz = 'T' ).
ls_item-paidamount = <lfs_bseg>-fwbas.
ENDIF.
ENDIF.
IF <lfs_type>-gst_type = lc_stcs.
ls_item-statecessrate = <lfs_tax>-kbetr ."/ 10.
ls_item-statecessamount = <lfs_tax>-kwert.
lv_inv_stc = lv_inv_stc + ls_item-
statecessamount.
lv_tax_total = lv_tax_total + ls_item-
statecessamount.
ls_header-glstatecessspecific = <lfs_tax>-konts.
ls_item-totalitemamount = ls_item-totalitemamount +
ls_item-statecessamount.
IF <lfs_bseg>-koart = 'D' OR ( <lfs_bseg>-umskz = 'F' OR
<lfs_bseg>-umskz = 'A' OR <lfs_bseg>-umskz = 'T' ).
ls_item-paidamount = <lfs_bseg>-fwbas.
ENDIF.
ENDIF.
IF <lfs_type>-gst_type = 'DISC'.
ls_item-itemdiscount = ls_item-itemdiscount + <lfs_tax>-kwert.
DATA: lv_dis TYPE char20.
lv_dis = ls_item-itemdiscount.
REPLACE ALL OCCURRENCES OF '-' IN lv_dis WITH space.
CONDENSE lv_dis.
ls_item-itemdiscount = lv_dis.
ENDIF.
IF <lfs_type>-gst_type = 'OTHC'.
ls_item-itemothercharges = ls_item-itemothercharges + <lfs_tax>-
kwert.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
CLEAR <lfs_invoice>-matnr.
ENDIF.
ELSE.
ls_item-linenumber = <lfs_bseg>-txgrp.
* HSN
IF <lfs_bseg>-hsn_sac IS NOT INITIAL.
ls_item-hsn = <lfs_bseg>-hsn_sac.
ENDIF.
*invoice amount
lv_invasamt = lv_invasamt + <lfs_bseg>-wrbtr.
* supply type
READ TABLE gt_bset ASSIGNING <lfs_bset>
WITH KEY bukrs = <lfs_bkpf>-bukrs
belnr = <lfs_bkpf>-belnr
gjahr = <lfs_bkpf>-gjahr
mwskz = <lfs_bseg>-mwskz
txgrp = <lfs_bseg>-txgrp
taxps = <lfs_bseg>-taxps
BINARY SEARCH.
IF sy-subrc IS INITIAL.
ls_item-supplytype = m_supply_type_determination_fi(
ls_cust = ls_cust_bseg
ls_data = <lfs_bseg>
lv_type = <lfs_bseg>-sales_type
ls_tax = <lfs_bset>
im_land = lv_bseg_land1
ls_doc = <lfs_bkpf> ).
ENDIF.
ls_item-itemassessableamt = <lfs_bseg>-dmbtr.
ls_item-itemamount = <lfs_bseg>-dmbtr.
ls_item-unitprice = ls_item-itemamount / ls_item-quantity.
IF <lfs_invoice> IS ASSIGNED.
READ TABLE gt_vbak ASSIGNING <lfs_vbak> WITH KEY vbeln = <lfs_invoice>-
aubel BINARY SEARCH.
IF sy-subrc IS INITIAL.
READ TABLE lt_ordat ASSIGNING FIELD-SYMBOL(<lfs_ordat1>) WITH KEY vbeln =
<lfs_vbak>-zuonr+0(10) BINARY SEARCH.
IF sy-subrc IS INITIAL.
ls_item-documentreferencenumber = <lfs_bkpf>-xblnr.
ls_item-preceedinginvoiceno = <lfs_vbak>-zuonr+0(10).
ls_item-preceedinginvoicedt = <lfs_ordat1>-fkdat.
ENDIF.
ENDIF.
IF ls_item-documentreferencenumber IS INITIAL.
READ TABLE gt_bkpf INTO DATA(ls_bkpf1) WITH KEY bukrs = <lfs_invoice>-
bukrs belnr = <lfs_invoice>-vbeln BINARY SEARCH.
IF sy-subrc = 0.
ls_item-documentreferencenumber = ls_bkpf1-xblnr.
ENDIF.
ENDIF.
* isservice
IF ls_item-hsn+0(2) EQ '99'.
ls_item-isservice = lc_yes.
ELSE.
ls_item-isservice = lc_no.
ENDIF.
IF lv_fkart EQ 'G2'.
ls_item-documenttype = 'CR'.
ELSEIF lv_fkart EQ 'L2'.
ls_item-documenttype ='DR'.
ENDIF.
IF ls_item-documenttype IS INITIAL .
ls_item-documenttype ='OTH'.
ENDIF.
DATA(lv_number) = ls_item-preceedinginvoiceno.
DATA(lv_date2) = ls_item-preceedinginvoicedt.
DATA(lv_suptype) = ls_item-supplytype.
IF <lfs_bkpf>-awtyp = 'VBRK'.
IF ls_item-supplytype EQ 'CAN' AND <lfs_invoice> IS ASSIGNED.
ls_item-preceedinginvoiceno = <lfs_invoice>-vbeln.
ls_item-preceedinginvoicedt = <lfs_invoice>-erdat.
ls_header-documentnumber = lv_number.
ls_header-documentdate = <lfs_invoice>-fkdat.
ENDIF.
ELSE." Direct Posting
IF ls_item-supplytype EQ 'CAN' AND <lfs_bkpf>-stblg IS NOT INITIAL.
ls_header-documentnumber = <lfs_bkpf>-stblg.
ls_header-documentdate = <lfs_bkpf>-budat.
ENDIF.
ENDIF.
********Section 7 flag**************
IF ls_item-supplytype IN lr_supply.
ls_header-sec7igstflag = lc_no.
ENDIF.
lv_spell = ls_header-invoicevalue.
IF <lfs_bkpf> IS ASSIGNED.
CALL FUNCTION 'HR_IN_CHG_INR_WRDS'
EXPORTING
amt_in_num = lv_spell
IMPORTING
amt_in_words = ls_header-totalinvoicevalue
EXCEPTIONS
data_type_mismatch = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
IF ls_item-supplytype EQ 'CAN'.
READ TABLE gt_item INTO DATA(ls_itm) WITH KEY accvoucherno = ls_header-
documentnumber.
IF sy-subrc = 0.
IF ls_itm-supplytype EQ 'EXPT' OR ls_itm-supplytype EQ 'EXPWT'.
DATA(lv_can) = abap_true.
ENDIF.
ENDIF.
ENDIF.
DATA(lv_invoice) = ls_header-invoicevalue.
DATA(lv_supplytype) = ls_item-supplytype.
ls_header-steinvoice = 1.
ls_header-stewb = 1.
ls_header-stcompliance = 2.
APPEND ls_header TO gt_header.
CLEAR: ls_header-invoiceassessableamount.
ls_sup-belnr = ls_item-accvoucherno.
ls_sup-supplytype = ls_item-supplytype.
APPEND ls_sup TO lt_sup.
CLEAR:ls_sup.
ls_item-fiscalyear = ls_header-fiscalyear.
ls_item-companycode = ls_header-companycode.
ls_item-accvoucherno = ls_header-accvoucherno.
ls_item-documenttype = ls_header-documenttype.
ls_item-suppliergstin = ls_header-suppliergstin.
AT END OF belnr.
ls_type-sign = lc_include.
ls_type-option = lc_equals.
ls_type-low = 'NON'.
COLLECT ls_type INTO lr_type.
ls_type-sign = lc_include.
ls_type-option = lc_equals.
ls_type-low = 'NIL'.
COLLECT ls_type INTO lr_type.
ls_type-sign = lc_include.
ls_type-option = lc_equals.
ls_type-low = 'EXT'.
COLLECT ls_type INTO lr_type.
IF lw_supplytype IS INITIAL.
lw_supplytype = ls_sup-supplytype.
ELSEIF lw_supplytype = ls_sup-supplytype.
ls_header-derivedsupp = ls_sup-supplytype.
ENDIF.
IF sy-tabix = 1.
lc_supplytype = ls_sup-supplytype.
ELSEIF ls_sup-supplytype IN lr_type.
ls_header-derivedsupp = lc_supplytype.
ENDIF.
ENDLOOP.
CLEAR lt_sup.
IF <lfs_bkpf>-awtyp NE lc_vbrk.
ls_header-invoiceassessableamount = lv_invasamt.
ENDIF.
ls_header-invoiceassessableamount = lv_invassamt.
ls_header-invoiceigstamount = lv_inv_igst.
ls_header-invoicesgstamount = lv_inv_sgst.
ls_header-invoicecgstamount = lv_inv_cgst.
ls_header-invoicecessadvaloremamount = lv_inv_adv.
ls_header-invoicecessspecificamount = lv_inv_spc.
ls_header-invoicestatecessspecificamount = lv_inv_stc.
lv_spell = lv_invoice.
IF <lfs_bkpf> IS ASSIGNED.
CALL FUNCTION 'HR_IN_CHG_INR_WRDS'
EXPORTING
amt_in_num = lv_spell
IMPORTING
amt_in_words = ls_header-totalinvoicevalue
EXCEPTIONS
data_type_mismatch = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
IF lv_plant_ctry NE lv_shipto_ctry.
READ TABLE gt_countrycode ASSIGNING <lfs_country> WITH KEY sapcode =
lv_shipto_ctry BINARY SEARCH.
IF sy-subrc IS INITIAL.
ls_header-countrycode = <lfs_country>-gstcode.
ENDIF.
ELSE .
CLEAR ls_header-invoicevaluefc.
ENDIF.
ls_header-currencycode = <lfs_bkpf>-gstcode.
IF ls_header-documenttype EQ 'BOS'.
READ TABLE gt_header INTO DATA(ls_head) WITH KEY documentnumber =
ls_header-documentnumber.
IF sy-subrc = 0 AND ls_head-documenttype EQ 'INV'.
ls_header-documenttype = 'INV'.
ENDIF.
ELSEIF ls_header-documenttype EQ 'INV'.
READ TABLE gt_header ASSIGNING FIELD-SYMBOL(<ls_head>) WITH KEY
documentnumber = ls_header-documentnumber.
IF sy-subrc = 0 AND <ls_head>-documenttype EQ 'BOS'.
<ls_head>-documenttype = 'INV'.
ENDIF.
ENDIF.
IF ls_header-subsupplytype EQ 'OTH'.
READ TABLE gt_header INTO ls_head WITH KEY documentnumber = ls_header-
documentnumber.
IF sy-subrc = 0 AND ls_head-subsupplytype EQ 'TAX'.
ls_header-subsupplytype = 'TAX'.
ENDIF.
ELSEIF ls_header-subsupplytype EQ 'TAX'.
READ TABLE gt_header ASSIGNING <ls_head> WITH KEY documentnumber =
ls_header-documentnumber.
IF sy-subrc = 0 AND <ls_head>-subsupplytype EQ 'OTH'.
<ls_head>-subsupplytype = 'TAX'.
ENDIF.
ENDIF.
gs_zgst_fi_doc-flag = abap_true.
MODIFY gt_zgst_fi_doc FROM gs_zgst_fi_doc TRANSPORTING flag WHERE belnr EQ
ls_header-accvoucherno.
CLEAR: lv_can.
ENDLOOP.
IF rb_updt EQ abap_true.
MODIFY zeydigi_bte_tab FROM TABLE gt_zgst_fi_doc.
ENDIF.
ENDMETHOD.
METHOD m_export_final_tab.
etab1[] = gt_header[].
etab2[] = gt_item[].
ENDMETHOD.
METHOD m_fill_excel_data.
TRY.
DATA(wa_final) = gt_header[ accvoucherno = ls_item-accvoucherno
linenumber = ls_item-linenumber ].
CATCH cx_sy_itab_line_not_found.
CLEAR: wa_final.
ENDTRY.
CLEAR ls_excel.
ENDLOOP.
METHOD m_export_excel_tab.
ENDMETHOD.
METHOD m_free_local_tab.
ENDMETHOD.
ENDCLASS. "lcl_data