Download as pdf or txt
Download as pdf or txt
You are on page 1of 97

06.10.

2020 working with program 1

*& *
*& Report ZREP_EINV_EWAY_REPORT
*& *
*&
*& *
REPORT zrep_einv_eway_report.
* Type Pool declartion
TYPE-POOLS: icon.
* Includes
INCLUDE zrep_einv_eway_report_top.
INCLUDE zrep_einv_eway_report_class.
INCLUDE zrep_einv_eway_report_sel.
INCLUDE zrep_einv_eway_report_forms.
* Initialization
INITIALIZATION.
* Fetch User configuration based on selection
PERFORM fetch_user_config.
* Fetch all domain Values
PERFORM fetch_domain_values.
AT SELECTION-SCREEN OUTPUT.
* Selection screen comments
WRITE icon_message_information AS ICON TO icon.
WRITE icon_message_information AS ICON TO icon1.
WRITE icon_message_information AS ICON TO icon2.
WRITE icon_message_information AS ICON TO icon3.
PERFORM set_module_value.
* Start of selection
START-OF-SELECTION.
* Get all required data
PERFORM get_data.
* If data available to dosplay call screen
IF gt_final IS NOT INITIAL.
CALL SCREEN 9000.
ELSE.
* Message
MESSAGE 'No data for given selection'(m01) TYPE 'I'.
LEAVE LIST-PROCESSING.
ENDIF.
* Includes
INCLUDE zrep_einv_eway_report_statuo01.
INCLUDE zrep_einv_eway_report_user_i01.
*& *
*& Include ZREP_EINV_EWAY_REPORT_TOP
*& *
TYPE-POOLS: vrm.
* Type declarations
TYPES: BEGIN OF ty_zst_einv_api_struct,
transporter_id TYPE char20,
transporter_name TYPE char50,
transportation_mode TYPE zde_t_mode,
transportation_distance TYPE char10,
transporter_document_number TYPE char15,
transporter_document_date TYPE char10,
vehicle_number TYPE char12,
vehicle_type TYPE zde_v_type,
extend_validity_reason TYPE zde_ext_reason,
extend_remarks TYPE char100,
remaining_distance TYPE char10,
from_pincode TYPE char10,
consignment_status TYPE zde_consign_sts,
transit_type TYPE zde_transit_type,
address_line1 TYPE char50,
address_line2 TYPE char50,
06.10.2020 working with program 1

address_line3 TYPE char50,


reason_code_for_vehicle_updati TYPE zde_veh_reason,
reason_for_vehicle_updation TYPE char50,
zport_code TYPE char6,
END OF ty_zst_einv_api_struct.
* Type declarations
TYPES : BEGIN OF ty_wb2_v_vbrk_vbrp2,
vbeln TYPE vbeln_vf,
vbeln_i TYPE vbeln_vf,
posnr_i TYPE posnr_vf,
fkart TYPE fkart,
fktyp TYPE fktyp,
vbtyp TYPE fktyp,
waerk TYPE waerk,
vkorg TYPE vkorg,
vtweg TYPE vtweg,
knumv TYPE knumv,
fkdat TYPE fkdat,
gjahr TYPE gjahr,
kurrf TYPE kurrf,
land1 TYPE lland,
bukrs TYPE bukrs,
netwr TYPE netwr,
ernam TYPE ernam,
kunrg TYPE kunrg,
kunag TYPE kunag,
xblnr TYPE xblnr_v1,
zuonr TYPE ordnr_v,
fksto TYPE fksto,
bupla TYPE bupla,
fkimg_i TYPE fkimg,
meins_i TYPE meins,
kursk_i TYPE kursk,
netwr_i TYPE netwr_fp,
vgbel_i TYPE vgbel,
matnr_i TYPE matnr,
arktx_i TYPE arktx,
charg_i TYPE charg_d,
pstyv_i TYPE pstyv,
werks_i TYPE werks_d,
ean11_i TYPE ean11,
prctr_i TYPE prctr,
mwsbp_i TYPE mwsbp,
END OF ty_wb2_v_vbrk_vbrp2,
BEGIN OF ty_wb2_v_likp_lips2,
vbeln TYPE vbeln_vl,
vbeln_iTYPE vbeln_vl ,
posnr_iTYPE posnr_vl ,
ernam TYPE ernam,
vkorg TYPE vkorg,
lfart TYPE lfart,
lfdat TYPE lfdat_v,
vbtyp TYPE vbtyp,
kunnr TYPE kunwe,
kunag TYPE kunag,
fkdat TYPE fkdat,
knumv TYPE knumv,
waerk TYPE waerk,
lifnr TYPE elifn,
bldat TYPE bldat,
netwr TYPE netwr_ak,
werks TYPE empfw,
xblnr TYPE xblnr_li kp,
06.10.2020 working with program 1

matnr_iTYPE matnr,
matkl_i TYPE matkl,
werks_iTYPE werks_d,
lgort_iTYPE lgort_d,
charg_iTYPE charg_d,
lfimg_iTYPE lfimg,
meins_iTYPE meins,
vrkme_iTYPE vrkme,
ntgew_iTYPE ntgew_15 ,
brgew_iTYPE brgew_15 ,
arktx_i TYPE arktx,
vbelv_iTYPE vbelv,
posnv_iTYPE posnv,
vgbel_iTYPE vgbel,
vgpos_iTYPE vgpos,
gsber_iTYPE gsber,
prctr_iTYPE prctr,
netpr_iTYPE netpr,
netwr_i TYPE netwr,
lfgja_i TYPE lfgja,
END OF ty_wb2_v_likp_lips2,
BEGIN OF ty_konv,
knumvTYPE knumv,
kposnTYPE kposn,
kschl TYPE kscha,
kbetr TYPE kbetr,
kwert TYPE kwert,
END OF ty_konv,
BEGIN OF ty_ewaybill,
bukrs TYPE bukrs,
doctyp TYPE j_1ig_doctyp,
docno TYPE j_1ig_ docno,
gjahr TYPE gjahr,
ebillno TYPE j_1ig_ ebillno,
egen_dat TYPE j_1ig_egendat,
egen_timeTYPE j_1ig_ egentime,
vdfmdate TYPE j_1ig_vdfmdate,
vdtodate TYPE j_1ig_vdtodate,
vdtotime TYPE j_1ig_vdtotime,
status TYPE j_1ig_stat,
ernam TYPE ernam,
erdat TYPE erdat,
aenam TYPE aenam,
aedat TYPE aedat,
END OF ty_ewaybill,
BEGIN OF ty_marc,
matnr TYPE matnr,
werks TYPE werks_d,
steuc TYPE steuc,
END OF ty_marc,
BEGIN OF ty_vbfa,
vbelvTYPE vbeln_von,
posnvTYPE posnr_von,
vbelnTYPE vbeln_nach ,
END OF ty_vbfa,
BEGIN OF ty_wb2_v_vbak_vbap2,
vbeln TYPE vbeln_va,
vbeln_i TYPE vbeln_va,
posnr_i TYPE posnr_va,
audat TYPE audat,
bstnk TYPE bstnk,
bstdk TYPE bstdk,
ihrez TYPE ihrez,
06.10.2020 working with program 1

bname TYPE bname_v,


END OF ty_wb2_v_vbak_vbap2,
BEGIN OF ty_gstin,
bukrs TYPE bukrs,
branch TYPE j_1bbranc_,
gstin TYPE j_1igstcd 3,
END OF ty_gstin.
TYPES: BEGIN OF ty_kna1,
kunnr TYPE kunnr,
land1 TYPE land1_gp,
name1 TYPE name1_gp,
name2 TYPE name2_gp,
ort01 TYPE ort01_gp,
pstlz TYPE pstlz,
regio TYPE regio,
stras TYPE stras_gp,
telf1 TYPE telf1,
adrnr TYPE adrnr,
stcd3 TYPE stcd3,
END OF ty_kna1.
TYPES:BEGIN OF ty_t005u,
sprasTYPE spras,
land1TYPE land1,
blandTYPE regio,
bezeiTYPE bezei20,
END OF ty_t005u.
TYPES:BEGIN OF ty_adrc,
addrnumber TYPE ad_addrnum,
tel_number TYPE ad_tlnmbr1,
END OF ty_adrc,
BEGIN OF ty_vbpa,
vbelnTYPE vbeln,
posnrTYPE posnr,
parvwTYPE parvw,
kunnrTYPE kunnr,
lifnrTYPE lifnr,
adrnrTYPE adrnr,
END OF ty_vbpa.
*Dispatch and Ship to Party
TYPES:BEGIN OF ty_likp,
vbeln TYPE vbeln_vl,
kunnrTYPE kunwe,
END OF ty_likp.
TYPES : BEGIN OF ty_adr6,
addrnumber TYPE ad_addrnum,
smtp_addr TYPE ad_smtpadr,
END OF ty_adr6.
TYPES:BEGIN OF ty_doctyp,
bukrs TYPE bukrs,
zmodule TYPE zde_zmod ule,
fkart TYPE zde_doct y,
vtext TYPE bezei40 ,
sup_type TYPE zde_sup_type,
sub_type TYPE zde_sub_type,
edoc_type TYPE zde_edoc_type,
einv TYPE zde_einv,
eway TYPE zde_eway,
accpost TYPE zde_accp ost,
senderr TYPE zde_send err,
instgen TYPE zde_inst gen,
batch TYPE zde_batc h,
END OF ty_doctyp,
BEGIN OF ty_user_config,
06.10.2020 working with program 1

bukrs TYPE bukrs,


zmoduleTYPE zde_zmodul e,
fkart TYPE zde_docty,
werks TYPE werks_d,
prctr TYPE prctr,
gen_aprTYPE syuname,
blk_usrTYPE zde_block,
END OF ty_user_config,
BEGIN OF ty_api,
apiid TYPE zde_apiid,
apiprov TYPE zde_apiprov,
END OF ty_api,
BEGIN OF ty_doc_uom,
edoc_uom TYPE zde_edoc_uom,
meins TYPE meins,
END OF ty_doc_uom,
BEGIN OF ty_export,
zport_code TYPE char6,
zport TYPE cha r50,
land1 TYPE lan d1,
zport_state TYPE reg io,
zport_address1 TYPEcha r100,
zport_address2 TYPEcha r100,
zport_place TYPE cha r30,
zport_pincode TYPE pst lz,
END OF ty_export.
TYPES: BEGIN OF ty_final,
vbeln TYPE vbrk-vbeln,
gjahr TYPE vbrk-gjahr,
fkart TYPE vbrk-fkart,
fktyp TYPE vbrk-fktyp,
vbtyp TYPE vbrk-vbtyp,
vkorg TYPE vbrk-vkorg,
vtweg TYPE vbrk-vtweg,
fkdat(10) TYPE c,
kunrg TYPE vbrk-kunrg,
check_box(1) ,
ack_no TYPE j_1ig_invrefnum-ack_no,
ack_dt TYPE j_1ig_invrefnum-ack_date,
qr_code TYPE string,
irn TYPE string,
sign_inv TYPE string,
accs_token TYPE string,
canc_dt TYPE char10,
status TYPE char10,
t_id TYPE char20,
t_name TYPE char50,
t_doc_no TYPE char15,
t_date TYPE char10,
t_mode TYPE zteway_transport-t_mode,
t_distance TYPE char10,
t_r_distance TYPE char10,
t_ext_valid_reason TYPE zteway_transport-t_ext_valid_reason,
t_ext_valid_remarks TYPE char100,
t_consignment_status TYPE zteway_transport-t_consignment_status,
t_from_pin TYPE char10,
t_transit_type TYPE zteway_transport-t_transit_type,
t_address1 TYPE char50,
t_address2 TYPE char50,
t_address3 TYPE char50,
v_number TYPE char12,
v_type TYPE zteway_transport-v_type,
eway_print TYPE string,
06.10.2020 working with program 1

eway_error TYPE string,


v_reason_code TYPE zteway_transport-v_reason_code,
v_reason TYPE char50,
eway_num TYPE j_1ig_ebillno,
eway_date TYPE char10,
eway_v_from TYPE char10,
eway_v_to TYPE char10,
eway_v_time TYPE char8,
eway_status TYPE char10,
eway_canc_dt TYPE char10,
c_reason_code TYPE zteway_transport-c_reason_code,
c_reason TYPE char120,
werks TYPE werks_d,
prctr TYPE prctr,
doc_ernam TYPE ernam,
ernam TYPE ernam,
erdat TYPE char10,
erzet TYPE char8,
eway_ernam TYPE ernam,
eway_erdat TYPE char10,
eway_erzet TYPE char8,
bupla TYPE bupla,
bukrs TYPE bukrs,
sup_gstin TYPE j_1igstcd3,
invval TYPE dmbtr,
taxamt TYPE dmbtr,
tax TYPE dmbtr,
odnno TYPE xblnr_v1,
kunnr TYPE kunnr,
name1 TYPE name1_gp,
ship_to TYPE kunnr,
ship_to_name TYPE name1_gp,
trans_code TYPE kunnr,
trans_gstin TYPE j_1igstcd3,
igst_amt TYPE dmbtr,
sgst_amt TYPE dmbtr,
cgst_amt TYPE dmbtr,
cess_amt TYPE dmbtr,
icon(4) TYPE c,
eway_icon(4) TYPE c,
fkdat_db TYPE vbrk-fkdat,
zport_code TYPE char6,
einv_error TYPE string,
e_reason_code TYPE zteinv_details-e_reason_code,
e_reason TYPE char120,
mod TYPE zteinv_doctyp-zmodule,
einv TYPE xfeld,
eway TYPE xfeld,
ship_gstin TYPE char20,
einv_print TYPE string,
END OF ty_final,
BEGIN OF ty_t001w1,
werks TYPE t001w-werks,
name1 TYPE t001w-name1,
name2 TYPE t001w-name2,
stras TYPE t001w-stras,
pstlz TYPE t001w-pstlz,
ort01 TYPE t001w-ort01,
land1 TYPE t001w-land1,
regio TYPE t001w-regio,
counc TYPE t001w-counc,
cityc TYPE t001w-cityc,
adrnr TYPE t001w-adrnr,
06.10.2020 working with program 1

spras TYPE t001w-spras,


zone1 TYPE t001w-zone1,
j_1bbranch TYPE t001w-j_1bbranch,
END OF ty_t001w1,
BEGIN OF ty_j_1bbranch,
bukrs TYPE j_1bbranch-bukrs,
branch TYPE j_1bbranch-branch,
name TYPE j_1bbranch-name,
adrnr TYPE j_1bbranch-adrnr,
gstin TYPE j_1bbranch-gstin,
END OF ty_j_1bbranch,
BEGIN OF ty_lfa1,
lifnr TYPE lfa1-lifnr,
land1 TYPE lfa1-land1,
name1 TYPE lfa1-name1,
name2 TYPE lfa1-name2,
name3 TYPE lfa1-name3,
name4 TYPE lfa1-name4,
ort01 TYPE lfa1-ort01,
pstlz TYPE lfa1-pstlz,
regio TYPE lfa1-regio,
stras TYPE lfa1-stras,
adrnr TYPE lfa1-adrnr,
stcd3 TYPE lfa1-stcd3,
END OF ty_lfa1,
BEGIN OF ty_bkpf1,
bukrs TYPE bkpf-bukrs,
belnr TYPE bkpf-belnr,
gjahr TYPE bkpf-gjahr,
blart TYPE bkpf-blart,
bldat TYPE bkpf-bldat,
budat TYPE bkpf-budat,
tcode TYPE bkpf-tcode,
xblnr TYPE bkpf-xblnr,
bktxt TYPE bkpf-bktxt,
awtyp TYPE bkpf-awtyp,
awkey TYPE bkpf-awkey,
END OF ty_bkpf1,
BEGIN OF ty_bseg1,
bukrs TYPE bseg-bukrs,
belnr TYPE bseg-belnr,
gjahr TYPE bseg-gjahr,
buzei TYPE bseg-buzei,
buzid TYPE bseg-buzid,
bschl TYPE bseg-bschl,
koart TYPE bseg-koart,
shkzg TYPE bseg-shkzg,
dmbtr TYPE bseg-dmbtr,
txgrp TYPE bseg-txgrp,
ktosl TYPE bseg-ktosl,
ebeln TYPE bseg-ebeln,
ebelp TYPE bseg-ebelp,
taxps TYPE bseg-taxps,
END OF ty_bseg1,
BEGIN OF ty_tvarvc,
nameTYPE rvari_vnam,
type TYPE rsscr_kind,
numb TYPE tvarv_numb,
sign TYPE tvarv_sign,
opti TYPE tvarv_opti,
low TYPE rvari_val_255,
high TYPE rvari_val_255,
END OF ty_tvarvc.
06.10.2020 working with program 1

* Data declartion for screen


DATA: zst_einv_api_struct TYPE ty_zst_einv_api_struct.
* Internal table/ varibale declarations declarations
DATA: gt_tvarvc TYPE TABLE OF ty_tvarvc,
gt_invrefnum TYPE STANDARD TABLE OF j_1ig_invrefnum,
gs_layout TYPE slis_layout_alv,
gs_fcat TYPE slis_fieldcat_alv,
gt_fcat TYPE STANDARD TABLE OF slis_fieldcat_alv,
gw_final TYPE ty_final,
gt_final TYPE TABLE OF ty_final,
gt_kna1 TYPE TABLE OF ty_kna1,
gt_adrc TYPE TABLE OF ty_adrc,
gt_adr6 TYPE TABLE OF ty_adr6,
gt_wb2_v_vbrk_vbrp2 TYPE TABLE OF ty_wb2_v_vbrk_vbrp2,
gt_wb2_v_likp_lips2 TYPE TABLE OF ty_wb2_v_likp_lips2,
gt_zteway_transport TYPE TABLE OF zteway_transport,
gw_zteway_transport TYPE zteway_transport,
gt_zteinv_details TYPE TABLE OF zteinv_details,
gt_api TYPE TABLE OF ty_api,
gt_appvr TYPE TABLE OF zteinv_appvr,
gt_doctyp TYPE TABLE OF ty_doctyp,
gt_user_config TYPE TABLE OF ty_user_config,
gt_wb2_v_vbak_vbap2 TYPE TABLE OF ty_wb2_v_vbak_vbap2,
gt_vbfa TYPE TABLE OF ty_vbfa,
gt_konv TYPE TABLE OF ty_konv,
gt_ewaybill TYPE TABLE OF ty_ewaybill,
gw_ewaybill TYPE ty_ewaybill,
gt_marc TYPE TABLE OF ty_marc,
gt_t005u TYPE STANDARD TABLE OF ty_t005u,
gt_doc_uom TYPE TABLE OF ty_doc_uom,
gt_export TYPE TABLE OF ty_export,
gt_lfa1m TYPE TABLE OF ty_lfa1,
gw_lfa1 TYPE ty_lfa1,
gt_bkpfm TYPE TABLE OF ty_bkpf1,
gt_bseg TYPE TABLE OF ty_bseg1,
*Seller Details
gt_t001w TYPE TABLE OF ty_t001w1,
gt_adrc_s TYPE TABLE OF ty_adrc,
gt_adr6_s TYPE TABLE OF ty_adr6,
gt_t005u_s TYPE TABLE OF ty_t005u,
gt_gstin TYPE TABLE OF ty_j_1bbranch,
sl_werks TYPE RANGE OF vbrp-werks,
ss_werks LIKE LINE OF sl_werks,
sl_fkart TYPE RANGE OF vbrk-fkart,
ss_fkart LIKE LINE OF sl_fkart,
gt_wc TYPE TABLE OF zwc_inv,
gt_eway_data TYPE TABLE OF zeway_data.
DATA: gt_supply_values TYPE TABLE OF dd07v,
gt_sub_supply_values TYPE TABLE OF dd07v,
gt_doctyp_values TYPE TABLE OF dd07v,
gt_cancel_values TYPE TABLE OF dd07v,
gt_t_mode_values TYPE TABLE OF dd07v,
gt_v_type_values TYPE TABLE OF dd07v,
gt_t_ext_reason_values TYPE TABLE OF dd07v,
gt_t_consignment_status_values TYPE TABLE OF dd07v,
gt_t_transit_type_values TYPE TABLE OF dd07v,
gt_v_reason_values TYPE TABLE OF dd07v.
*Dispatch and Ship Details
DATA : gt_likp TYPE TABLE OF ty_likp,
gt_kna1_d TYPE TABLE OF ty_kna1,
gt_t005u_d TYPE TABLE OF ty_t005u,
gt_adrc_d TYPE TABLE OF ty_adrc,
gt_vbpa TYPE TABLE OF ty_vbpa,
06.10.2020 working with program 1

gt_lfa1 TYPE TABLE OF lfa1,


gt_makt TYPE TABLE OF makt,
gw_makt TYPE makt.
DATA: gt_einv_api_hdr TYPE ztt_einv_api_struct,
gt_einv_api_itm TYPE ztt_einv_api_struct_itm.
DATA: gt_eway_api_hdr TYPE ztt_eway_api_struct,
gt_eway_api_itm TYPE ztt_eway_api_struct_itm.
DATA: gv_date TYPE sydatum,
gv_doc TYPE j_1ig_docno,
gv_odn TYPE xblnr_alt,
gv_bp TYPE bupla,
gv_stat TYPE j_1ig_irn_status,
gv_werks TYPE werks_d,
gv_docty TYPE zde_docty,
gv_prctr TYPE prctr.
DATA:gw_token TYPE string,
gw_return TYPE string,
ga_return TYPE string,
gt_messages TYPE bapiret2_t,
gw_message TYPE bapiret2.
DATA: gv_e_comm TYPE sy-ucomm,
gv_eway TYPE xfeld,
gv_einv TYPE xfeld.
DATA: gref_alv_container TYPE REF TO cl_gui_custom_container,
gref_alv_grid TYPE REF TO cl_gui_alv_grid,
ok_code LIKE sy-ucomm,
gt_fieldcat TYPE lvc_t_fcat.
DATA:gt_index TYPE lvc_t_row,
gt_row TYPE lvc_t_roid.
* Constant declarations
CONSTANTS:
gc_sd(2) TYPE c VALUE 'SD',
gc_mm(2) TYPE c VALUE 'MM',
gc_fi(2) TYPE c VALUE 'FI',
gc_sgst(4) TYPE c VALUE 'JISG',
gc_cgst(4) TYPE c VALUE 'JICG',
gc_igst(4) TYPE c VALUE 'JIIG',
gc_kschl_joig TYPE kscha VALUE 'JOIG',
gc_kschl_jocg TYPE kscha VALUE 'JOCG',
gc_kschl_josg TYPE kscha VALUE 'JOSG',
gc_kschl_joug TYPE kscha VALUE 'JOUG',
gc_kschl_cess TYPE kscha VALUE 'CESS',
gc_kschl_zy19 TYPE kscha VALUE 'ZY19',
gc_kschl_zr00 TYPE kscha VALUE 'ZR00',
gc_sign(1) TYPE c VALUE 'I',
gc_equal(2) TYPE c VALUE 'EQ',
gc_einv TYPE ui_func VALUE 'EINV',
gc_eway TYPE ui_func VALUE 'EWAY',
gc_edit TYPE ui_func VALUE 'EWAYT',
gc_btn_type_2 TYPE tb_btype VALUE '2',
gc_btn_type_0 TYPE tb_btype VALUE '0',
gc_icon_einv TYPE iconname VALUE '@UO@',
gc_icon_eway TYPE iconname VALUE '@0K@',
gc_icon_edit TYPE iconname VALUE '@HL@',
gc_icon_39 TYPE iconname VALUE '@39@',
gc_icon_jz TYPE iconname VALUE '@JZ@',
gc_icon_08 TYPE iconname VALUE '@08@',
gc_icon_b2 TYPE iconname VALUE '@B2@',
gc_icon_0a TYPE iconname VALUE '@0A@',
gc_icon_0w TYPE iconname VALUE '@0W@',
gc_ucomm_einv TYPE sy-ucomm VALUE 'EINV',
gc_ucomm_eway TYPE sy-ucomm VALUE 'EWAY',
gc_ucomm_einvg TYPE sy-ucomm VALUE 'EINVG',
06.10.2020 working with program 1

gc_ucomm_einvc TYPE sy-ucomm VALUE 'EINVC',


gc_ucomm_einvi TYPE sy-ucomm VALUE 'EINVI',
gc_ucomm_eeayg TYPE sy-ucomm VALUE 'EEAYG',
gc_ucomm_eeayb TYPE sy-ucomm VALUE 'EEAYB',
gc_ucomm_ewayu TYPE sy-ucomm VALUE 'EWAYU',
gc_ucomm_ewayv TYPE sy-ucomm VALUE 'EWAYV',
gc_ucomm_ewaye TYPE sy-ucomm VALUE 'EWAYE',
gc_ucomm_ewayc TYPE sy-ucomm VALUE 'EWAYC',
gc_ucomm_ewayp TYPE sy-ucomm VALUE 'EWAYP',
gc_ucomm_einvp TYPE sy-ucomm VALUE 'EINVP',
gc_ucomm_ewayt TYPE sy-ucomm VALUE 'EWAYT',
gc_fcode_einvg TYPE ui_func VALUE 'EINVG',
gc_fcode_einvc TYPE ui_func VALUE 'EINVC',
gc_fcode_eeayg TYPE ui_func VALUE 'EEAYG',
gc_fcode_eeayb TYPE ui_func VALUE 'EEAYB',
gc_fcode_ewayp TYPE ui_func VALUE 'EWAYP',
gc_fcode_einvp TYPE ui_func VALUE 'EINVP',
gc_fcode_ewayu TYPE ui_func VALUE 'EWAYU',
gc_fcode_ewayv TYPE ui_func VALUE 'EWAYV',
gc_fcode_ewaye TYPE ui_func VALUE 'EWAYE',
gc_fcode_ewayc TYPE ui_func VALUE 'EWAYC',
gc_land1_in TYPE land1 VALUE 'IN',
gc_vbtyp_v TYPE vbtyp_v VALUE 'C',
gc_spras_en TYPE spras VALUE 'EN',
gc_apiid_token TYPE zde_apiid VALUE 'ACC_TOKEN',
gc_irn_sts_act TYPE j_1ig_irn_status VALUE 'ACT',
gc_irn_sts_err TYPE j_1ig_irn_status VALUE 'ERR',
gc_irn_sts_cnl TYPE j_1ig_irn_status VALUE 'CNL',
gc_eway_sts_a TYPE j_1ig_stat VALUE 'A',
gc_eway_sts_e TYPE j_1ig_stat VALUE 'E',
gc_eway_sts_c TYPE j_1ig_stat VALUE 'C',
gc_v_type_1 TYPE zde_v_type VALUE '1',
gc_periv_v3 TYPE periv VALUE 'V3',
gc_parvw_we TYPE parvw VALUE 'WE',
gc_parvw_re TYPE parvw VALUE 'RE',
gc_lay_mode_a TYPE lvc_libox VALUE 'A',
gc_alv_save_a TYPE char01 VALUE 'A',
gc_sup_type_b2b TYPE char10 VALUE '"B2B"',
gc_sup_type_expwp TYPE char10 VALUE '"EXPWP"',
gc_charge_y TYPE char10 VALUE '"Y"',
gc_charge_n TYPE char10 VALUE '"N"',
gc_docty_inv TYPE char15 VALUE 'INV',
gc_apiid_usrgstin TYPE zde_apiid VALUE 'USRGSTIN',
gc_apiid_eusrgstin TYPE zde_apiid VALUE 'E_USRGSTIN',
gc_apiid_esupgstin TYPE zde_apiid VALUE 'E_SUPGSTIN',
gc_apiid_ebuygstin TYPE zde_apiid VALUE 'E_BUYGSTIN',
gc_gstin_urp TYPE char20 VALUE '"URP"',
gc_export_place TYPE char100 VALUE '"OTHER COUNTRY"',
gc_exp_state TYPE char100 VALUE '96',
gc_ttype_shg TYPE char10 VALUE '"SHG"',
gc_ttype_reg TYPE char10 VALUE '"REG"',
gc_tdid_0002 TYPE tdid VALUE '0002',
gc_tobject_vbbk TYPE tdobject VALUE 'VBBK',
gc_service_y TYPE char5 VALUE '"Y"',
gc_service_n TYPE char5 VALUE '"N"',
gc_pstyv_tad TYPE pstyv VALUE 'TAD',
gc_attr_einv TYPE char100 VALUE '"EINV"',
gc_msgid_01 TYPE sy-msgid VALUE '01',
gc_msgno_319 TYPE sy-msgno VALUE '319',
gc_mtype_s TYPE bapi_mtype VALUE 'S',
gc_mtype_e TYPE bapi_mtype VALUE 'E',
gc_tmode_5 TYPE zde_t_mode VALUE '5',
gc_sub_suptyp_exp TYPE char30 VALUE '"EXPORT"',
06.10.2020 working with program 1

gc_gen_sts_1 TYPE char15 VALUE '"1"',


gc_dsource_erp TYPE char20 VALUE '"ERP"',
gc_ewaysts_abc TYPE char5 VALUE '"ABC"',
gc_ewaysts_ac TYPE char5 VALUE '"AC"',
gc_eway_print TYPE char5 VALUE '"Y"',
gc_okcode_furt TYPE char10 VALUE 'FURT',
gc_fname_crec_code TYPE fieldname VALUE 'C_REASON_CODE',
gc_fname_crec TYPE fieldname VALUE 'C_REASON',
gc_fname_erec_code TYPE fieldname VALUE 'E_REASON_CODE',
gc_fname_erec TYPE fieldname VALUE 'E_REASON',
gc_form_eway TYPE char30 VALUE 'USER_COMMAND_EWAY_CANCEL',
gc_form_einv TYPE char30 VALUE 'USER_COMMAND_EINV_CANCEL',
gc_tname_einv TYPE tabname VALUE 'ZTEINV_DETAILS',
gc_tname_eway TYPE tabname VALUE 'ZTEWAY_TRANSPORT',
gc_curr_inr TYPE waers VALUE 'INR',
gc_var_unit TYPE rvari_vnam VALUE 'ZEDOC_UNIT',
gc_var_disc TYPE rvari_vnam VALUE 'ZEDOC_DISC'.
*& *
*& Include ZREP_EINV_EWAY_REPORT_CLASS
*& *
* Data declartion for class
DATA:lw_tool TYPE stb_button,
lw_menu TYPE stb_btnmnu.
DATA:dg_dyndoc_id TYPE REF TO cl_dd_document,
dg_splitter TYPE REF TO cl_gui_splitter_container,
dg_parent_grid TYPE REF TO cl_gui_container,
dg_html_cntrl TYPE REF TO cl_gui_html_viewer,
dg_parent_html TYPE REF TO cl_gui_container.
* Class defenition
CLASS lcl_event DEFINITION .
PUBLIC SECTION.
METHODS :toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object,
user_command FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm,
menu FOR EVENT menu_button OF cl_gui_alv_grid
IMPORTING e_object
e_ucomm ,
handle_print_top_of_page
FOR EVENT print_top_of_page OF
cl_gui_alv_grid,
handle_top_of_page FOR EVENT top_of_page OF
cl_gui_alv_grid IMPORTING e_dyndoc_id,
handle_hotspot_click FOR EVENT hotspot_click OF
cl_gui_alv_grid IMPORTING e_row_id e_column_id.
ENDCLASS.
DATA: go_obj TYPE REF TO lcl_event.
* Class Implementation
CLASS lcl_event IMPLEMENTATION.
* Toolbar
METHOD toolbar.
READ TABLE gt_doctyp TRANSPORTING NO FIELDS WITH KEY einv = abap_true.
IF sy-subrc IS INITIAL.
lw_tool-function = gc_einv.
lw_tool-text = 'E-Invoice Generation'(040).
lw_tool-butn_type = gc_btn_type_2.
lw_tool-icon = gc_icon_einv.
APPEND lw_tool TO e_object->mt_toolbar.
ENDIF.
READ TABLE gt_doctyp TRANSPORTING NO FIELDS WITH KEY eway = abap_true.
IF sy-subrc IS INITIAL.
lw_tool-function = gc_eway.
lw_tool-text = 'E-Way Bill Generation'(041).
06.10.2020 working with program 1

lw_tool-butn_type = gc_btn_type_2.
lw_tool-icon = gc_icon_eway.
APPEND lw_tool TO e_object->mt_toolbar.
lw_tool-function = gc_edit.
lw_tool-text = 'Edit Transporter (SAP Only)'(042).
lw_tool-icon = gc_icon_edit.
lw_tool-butn_type = gc_btn_type_0.
APPEND lw_tool TO e_object->mt_toolbar.
ENDIF.
ENDMETHOD. "DISPLAY
* Menu
METHOD menu .
IF e_ucomm = gc_ucomm_einv.
CALL METHOD e_object->add_function
EXPORTING
fcode = gc_fcode_einvg
text = 'Generate E-Invoice'(043).
* icon = gc_icon_39.
CALL METHOD e_object->add_function
EXPORTING
fcode = gc_fcode_einvc
text = 'Cancel E-Invoice'(044).
CALL METHOD e_object->add_function
EXPORTING
fcode = gc_fcode_einvp
text = 'Download E-Invoice'(118).
.
ENDIF.
IF e_ucomm = gc_ucomm_eway.
CALL METHOD e_object->add_function
EXPORTING
fcode = gc_fcode_eeayg
text = 'Generate E-Way Bill(Part A & B)'.
CALL METHOD e_object->add_function
EXPORTING
fcode = gc_fcode_eeayb
text = 'Generate E-Way Bill(Part A)'.
CALL METHOD e_object->add_function
EXPORTING
fcode = gc_fcode_ewayp
text = 'Download E-Way Bill'.
CALL METHOD e_object->add_function
EXPORTING
fcode = gc_fcode_ewayu
text = 'Update E-Way Bill Transporter'.
CALL METHOD e_object->add_function
EXPORTING
fcode = gc_fcode_ewayv
text = 'Update E-Way Bill Vehicle No.'.
CALL METHOD e_object->add_function
EXPORTING
fcode = gc_fcode_ewaye
text = 'Extend E-Way Bill Validity'.
.
CALL METHOD e_object->add_function
EXPORTING
fcode = gc_fcode_ewayc
text = 'Cancel E-Way Bill'.
ENDIF.
ENDMETHOD.
* User Command
METHOD user_command.
DATA: lw_index TYPE lvc_s_row,
06.10.2020 working with program 1

lv_val TYPE xfeld.


gv_e_comm = e_ucomm.
CASE e_ucomm.
WHEN gc_ucomm_einvg.
PERFORM einvoice_generate.
WHEN gc_ucomm_einvc.
PERFORM einvoice_cancel_old.
WHEN gc_ucomm_einvp.
PERFORM ewaybill_print USING 'X'.
WHEN gc_ucomm_eeayg OR gc_ucomm_eeayb.
PERFORM ewaybill_generate.
WHEN gc_ucomm_ewayu.
PERFORM ewaybill_update_transporter.
WHEN gc_ucomm_ewayv.
PERFORM ewaybill_update_vehicle.
WHEN gc_ucomm_ewaye.
PERFORM ewaybill_extend.
WHEN gc_ucomm_ewayc.
PERFORM ewaybill_cancel_old.
WHEN gc_ucomm_ewayp.
PERFORM ewaybill_print USING ''.
WHEN gc_ucomm_ewayt.
PERFORM check_selected_data CHANGING lv_val.
IF lv_val IS INITIAL.
CALL SCREEN 9001 STARTING AT 20 20 ENDING AT 120 75.
ELSE.
MESSAGE 'Please select at least one document to edit Transporter details'(007) TYPE 'I'.
EXIT.
ENDIF.
ENDCASE.
ENDMETHOD. "USER_COMMAND
* Top-of-Page
METHOD handle_print_top_of_page.
IF sy-pagno = 1.
ENDIF.
ENDMETHOD.
* Handle Top-of-page
METHOD handle_top_of_page.
PERFORM top_of_page USING dg_dyndoc_id.
ENDMETHOD.
* Hotsspot click
METHOD handle_hotspot_click.
IF e_column_id = 'VBELN'.
PERFORM handle_hotspot_on_vbeln USING e_row_id. " Subroutine to handle hotspot on customer number
ENDIF.
ENDMETHOD.
ENDCLASS. "LCL_EVENT IMPLEMENTATION
*& *
*& Form TOP_OF_PAGE
*& *
* text
* *
* > p1 text
* < p2 text
* *
FORM top_of_page USING dg_dyndoc_id TYPE REF TO cl_dd_document.
DATA : dl_text(255) TYPE c,
lv_line TYPE i,
lv_lines TYPE char10.
* Populating header to top-of-page
READ TABLE gt_final INTO gw_final INDEX 1.
CALL METHOD dg_dyndoc_id->add_text
EXPORTING
06.10.2020 working with program 1

text = 'E-Invoice/E-Way Bill Register'(052)


sap_style = cl_dd_area=>heading.
CALL METHOD dg_dyndoc_id->new_line.
CLEAR : dl_text.
CONCATENATE 'Company Code:'(053) gw_final-bukrs
INTO dl_text SEPARATED BY space.
PERFORM add_text USING dl_text.
* Add new-line
CALL METHOD dg_dyndoc_id->new_line.
CLEAR : dl_text.
CONCATENATE 'Generator/Approver:'(054) sy-uname
INTO dl_text SEPARATED BY space.
PERFORM add_text USING dl_text.
CALL METHOD dg_dyndoc_id->new_line.
CLEAR : dl_text.
DESCRIBE TABLE gt_final LINES lv_line.
lv_lines = lv_line.
CONCATENATE 'No of Record(s):'(055) lv_lines
INTO dl_text SEPARATED BY space.
PERFORM add_text USING dl_text.
CALL METHOD dg_dyndoc_id->new_line.
* Populating data to html control
PERFORM html.
ENDFORM.
*& *
*& Form ADD_TEXT
*& *
* text
* *
* >P_DL_TEXT text
* *
FORM add_text USING p_text TYPE sdydo_text_element.
* Adding text
CALL METHOD dg_dyndoc_id->add_text
EXPORTING
text = p_text
sap_emphasis = cl_dd_area=>heading.
ENDFORM.
*& *
*& Form HTML
*& *
* text
* *
* > p1 text
* < p2 text
* *
FORM html .
DATA : dl_length TYPE i, " Length
dl_background_id TYPE sdydo_key VALUE space. " Background_id
* Creating html control
IF dg_html_cntrl IS INITIAL.
CREATE OBJECT dg_html_cntrl
EXPORTING
parent = dg_parent_html.
ENDIF.
* Reuse_alv_grid_commentary_set
CALL FUNCTION 'REUSE_ALV_GRID_COMMENTARY_SET'
EXPORTING
document = dg_dyndoc_id
bottom = space
IMPORTING
length = dl_length.
* Get TOP->HTML_TABLE ready
06.10.2020 working with program 1

CALL METHOD dg_dyndoc_id->merge_document.


* Set wallpaper
CALL METHOD dg_dyndoc_id->set_document_background
EXPORTING
picture_id = dl_background_id.
* Connect TOP document to HTML-Control
dg_dyndoc_id->html_control = dg_html_cntrl.
* Display TOP document
CALL METHOD dg_dyndoc_id->display_document
EXPORTING
reuse_control = 'X'
parent = dg_parent_html
EXCEPTIONS
html_display_error = 1.
IF sy-subrc NE 0.
MESSAGE 'Error in displaying top-of-page'(036) TYPE 'I'.
ENDIF.
ENDFORM.
*& *
*& Form HANDLE_HOTSPOT_ON_VBELN
*& *
* text
* *
* >P_E_ROW_ID text
* *
FORM handle_hotspot_on_vbeln USING p_e_row_id.
*& *
*& Form HANDLE_HOTSPOT_ON_VBELN
*& *
* text
* *
* >P_E_ROW_ID text
* *
DATA: lw_final TYPE ty_final.
READ TABLE gt_final INTO lw_final INDEX p_e_row_id.
IF sy-subrc IS INITIAL.
IF lw_final-mod = gc_sd.
CALL FUNCTION 'AUTHORITY_CHECK_TCODE'
EXPORTING
tcode = 'VF03'
EXCEPTIONS
ok = 1
not_ok = 2
OTHERS = 3.
IF sy-subrc <> 1.
MESSAGE 'You are not a authorised User for VF03'(056) TYPE 'I'.
EXIT.
ELSEIF sy-subrc = 1.
SET PARAMETER ID 'VF' FIELD lw_final-vbeln.
CALL TRANSACTION 'VF03' AND SKIP FIRST SCREEN.
ENDIF.
ENDIF.
ENDIF.
ENDFORM.
*& *
*& Include ZREP_EINV_EWAY_REPORT_SEL
*& *
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-t01. .
PARAMETERS: p_ccode TYPE bukrs OBLIGATORY,
p_fyear TYPE gjahr OBLIGATORY,
p_mod(10) AS LISTBOX VISIBLE LENGTH 30 OBLIGATORY.
SELECT-OPTIONS:
s_werks FOR gv_werks NO INTERVALS,
06.10.2020 working with program 1

s_prctr FOR gv_prctr MODIF ID m1,


s_docty FOR gv_docty NO INTERVALS,
s_doc FOR gv_doc,
s_date FOR gv_date OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-t04. .
*Usage guidlines comment:
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(5) icon.
SELECTION-SCREEN COMMENT 6(50) TEXT-t02.
SELECTION-SCREEN END OF LINE.
*E-Invoice comment:
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(5) icon1.
SELECTION-SCREEN COMMENT 6(50) TEXT-t03.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 8(50) TEXT-t05.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 8(50) TEXT-t06.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 8(50) TEXT-t09.
SELECTION-SCREEN END OF LINE.
*E-Way Bill Comment:
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(5) icon2.
SELECTION-SCREEN COMMENT 6(50) TEXT-t10.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 8(50) TEXT-t11.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 8(50) TEXT-t12.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 8(50) TEXT-t13.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 8(50) TEXT-t14.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 8(50) TEXT-t15.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 8(50) TEXT-t09.
SELECTION-SCREEN END OF LINE.
*Pre-requisites Comment:
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(5) icon3.
SELECTION-SCREEN COMMENT 6(50) TEXT-t16.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 8(79) TEXT-t17.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 8(79) TEXT-t18.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 8(79) TEXT-t19.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b2.
06.10.2020 working with program 1

AT SELECTION-SCREEN .
AT SELECTION-SCREEN ON p_ccode.
IF gt_user_config IS INITIAL.
MESSAGE 'E-Invooice/E-way bill configuration is empty for your login'(000) TYPE 'E'.
ELSE.
READ TABLE gt_user_config TRANSPORTING NO FIELDS WITH KEY bukrs = p_ccode.
IF sy-subrc IS NOT INITIAL.
MESSAGE 'You are not authorized for given company code'(001) TYPE 'E'.
ENDIF.
ENDIF.
AT SELECTION-SCREEN ON p_mod.
IF gt_user_config IS INITIAL.
MESSAGE 'E-Invooice/E-way bill configuration is empty for your login'(002) TYPE 'E'.
ELSE.
READ TABLE gt_user_config TRANSPORTING NO FIELDS WITH KEY zmodule = p_mod.
IF sy-subrc IS NOT INITIAL.
MESSAGE 'You are not authorized for given Module'(003) TYPE 'E'.
ENDIF.
ENDIF.
AT SELECTION-SCREEN ON s_werks.
IF gt_user_config IS INITIAL.
MESSAGE 'E-Invooice/E-way bill configuration is empty for your login'(004) TYPE 'E'.
ELSE.
LOOP AT s_werks.
READ TABLE gt_user_config TRANSPORTING NO FIELDS WITH KEY werks = s_werks-low.
IF sy-subrc IS NOT INITIAL.
MESSAGE 'You are not authorized for given Plant'(005) TYPE 'E'.
ENDIF.
ENDLOOP.
ENDIF.
AT SELECTION-SCREEN ON s_docty.
IF gt_user_config IS INITIAL.
MESSAGE 'E-Invooice/E-way bill configuration is empty for your login'(006) TYPE 'E'.
ELSE.
LOOP AT s_docty.
READ TABLE gt_user_config TRANSPORTING NO FIELDS WITH KEY fkart = s_docty-low.
IF sy-subrc IS NOT INITIAL.
MESSAGE 'You are not authorized for given Document Type'(011) TYPE 'E'.
ENDIF.
ENDLOOP.
ENDIF.
*& *
*& Include ZREP_EINV_EWAY_REPORT_FORMS
*& *
*& *
*& Form GET_DATA
*& *
*& text
*& *
*& > p1 text
*& < p2 text
*& *
FORM get_data .
DATA:lw_user_config TYPE ty_user_config.
* Get document related configuration data
SELECT bukrs
zmodule
fkart
vtext
sup_type
sub_type
edoc_type
einv
06.10.2020 working with program 1

eway
accpost
senderr
instgen
batch FROM zteinv_doct yp
INTO TABLE gt_doctyp
WHERE bukrs EQ p_ccode AND
zmodule EQ p_mod AND
fkart IN s_docty AND
batch EQ abap_true.
IF sy-subrc IS NOT INITIAL.
MESSAGE 'Batch generation config is empty for the given selection'(008) TYPE 'E'.
ENDIF.
* Get generator/Approver data
SELECT bukrs
zmodule
fkart
werks
prctr
gen_apr
blk_usr FROM zteinv_appvr
INTO TABLE gt_user_config
WHERE bukrs EQ p_ccode AND
zmodule EQ p_mod AND
fkart IN s_docty AND
werks IN s_werks AND
prctr IN s_prctr AND
gen_apr = sy-uname.
IF sy-subrc IS NOT INITIAL.
MESSAGE 'Config is empty for the given selection'(009) TYPE 'E'.
ENDIF.
* get the API data
SELECT apiid apiprov FROM zteinv_api INTO TABLE gt_api.
IF p_mod = gc_sd.
* collect the billing type and plant details
CLEAR:sl_fkart,sl_werks.
IF gt_user_config IS NOT INITIAL.
LOOP AT gt_user_config INTO lw_user_config WHERE zmodule = gc_sd
AND fkart IN s_docty.
ss_fkart-sign = gc_sign.
ss_fkart-option = gc_equal.
ss_fkart-low = lw_user_config-fkart.
APPEND ss_fkart TO sl_fkart.
CLEAR:ss_fkart.
ss_werks-sign = gc_sign.
ss_werks-option = gc_equal.
ss_werks-low = lw_user_config-werks.
APPEND ss_werks TO sl_werks.
CLEAR ss_werks.
ENDLOOP.
SORT sl_fkart.
DELETE ADJACENT DUPLICATES FROM sl_fkart COMPARING ALL FIELDS.
SORT sl_werks.
DELETE ADJACENT DUPLICATES FROM sl_werks COMPARING ALL FIELDS.
ENDIF.
PERFORM process_sd_data.
PERFORM process_sd_data_delivery.
ENDIF.
ENDFORM.
*& *
*& Form SET_MODULE_VALUE
*& *
* text
06.10.2020 working with program 1

* *
* > p1 text
* < p2 text
* *
FORM set_module_value .
DATA:lt_values TYPE TABLE OF dd07v,
ls_value TYPE dd07v,
lv_name TYPE vrm_id,
lt_list TYPE vrm_values,
lw_mod_value LIKE LINE OF lt_list.
CALL FUNCTION 'GET_DOMAIN_VALUES'
EXPORTING
domname = 'ZDOM_ZMODULE'
TABLES
values_tab = lt_values
EXCEPTIONS
no_values_found = 1
OTHERS = 2.
IF sy-subrc = 0.
LOOP AT lt_values INTO ls_value.
lw_mod_value-key = ls_value-domvalue_l.
lw_mod_value-text = ls_value-ddtext.
APPEND lw_mod_value TO lt_list.
ENDLOOP.
lv_name = 'P_MOD'.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = lv_name
values = lt_list.
ENDIF.
ENDFORM.
*& *
*& Form FETCH_USER_CONFIG
*& *
* text
* *
* > p1 text
* < p2 text
* *
FORM fetch_user_config .
DATA:lw_token TYPE string,
lw_return TYPE string,
wa_return TYPE string,
lt_messages TYPE bapiret2_t,
lw_message TYPE bapiret2.
* get approver details
SELECT bukrs
zmodule
fkart
werks
prctr
gen_apr
blk_usr FROM zteinv_appvr INTO TABLE gt_user_config WHERE gen_apr = sy-uname AND
blk_usr EQ ''.
IF sy-subrc IS NOT INITIAL.
* Through error message
EXIT.
ENDIF.
*** Fetch UOM Mapping
SELECT edoc_uom meins FROM ztdoc_uom INTO TABLE gt_doc_uom WHERE edoc_uom IS NOT NULL.
* Get export port details.
SELECT zport_code
zport
06.10.2020 working with program 1

land1
zport_state
zport_address1
zport_address2
zport_place
zport_pincode FROM ztedoc_export INTO TABLE gt_export WHERE land1 = gc_land1_in.
*** generate token
CLEAR:gw_token,lw_return.
* SELECT SINGLE apiuri FROM zteinv_api INTO gw_token WHERE apiid = gc_apiid_token.
* IF sy-subrc IS NOT INITIAL.
* IF gw_token IS INITIAL.
* CALL FUNCTION 'ZFM_EINVOICE_OAUTH_API'
* IMPORTING
* ex_token = gw_token
* ex_return = lw_return
* et_messages = lt_messages.
* ENDIF.
* ENDIF.
ENDFORM.
*& *
*& Form SD_PROCESS_DATA
*& *
* text
* *
* > p1 text
* < p2 text
* *
FORM process_sd_data .
DATA: lw_invrefnum TYPE j_1ig_invrefnum,
lw_wb2_v_vbrk_vbrp2 TYPE ty_wb2_v_vbrk_vbrp2,
lw_kna1 LIKE LINE OF gt_kna1,
lw_gstin LIKE LINE OF gt_gstin,
lv_internal_date TYPE sy-datum,
lw_konv TYPE ty_konv,
lw_ewaybill TYPE ty_ewaybill,
ls_zteway_transport TYPE zteway_transport,
ls_zteinv_details TYPE zteinv_details,
lw_vbpa TYPE ty_vbpa,
lw_kna1_d TYPE ty_kna1,
lw_lfa1 TYPE lfa1,
lt_likp TYPE TABLE OF ty_likp,
lv_gjahr(4) TYPE c,
lt_vbrk_vbrp TYPE TABLE OF ty_wb2_v_vbrk_vbrp2,
lw_vbrk_vbrp2 TYPE ty_wb2_v_vbrk_vbrp2,
lw_doctyp TYPE ty_doctyp,
lt_sd_header TYPE TABLE OF ty_wb2_v_vbrk_vbrp2,
lt_vbrk_export TYPE TABLE OF ty_wb2_v_vbrk_vbrp2,
lv_index TYPE sy-tabix,
lv_rate TYPE kbetr,
lv_dmbtr TYPE dmbtr,
lw_eway_data TYPE zeway_data,
lw_wc LIKE LINE OF gt_wc.
DATA:rt_name TYPE RANGE OF rvari_vnam,
rs_name LIKE LINE OF rt_name.
*& Get Invocies for E-invocie and E-way bill
IF s_prctr IS NOT INITIAL.
SELECT vbeln vbeln_i posnr_i fkart fktyp vbtyp waerk vkorg
vtweg knumv fkdat gjahr kurrf land1 bukrs netwr ernam kunrg
kunag xblnr zuonr fksto bupla fkimg_i meins_i kursk_i
netwr_i vgbel_i matnr_i arktx_i charg_i pstyv_i werks_i ean11_i prctr_i mwsbp_i
FROM wb2_v_vbrk_vbrp2
INTO TABLE gt_wb2_v_vbrk_vbrp2
WHERE fkart IN sl_fkart
06.10.2020 working with program 1

AND vbeln IN s_doc


AND fkdat IN s_date
AND bukrs = p_ccode
AND werks_i IN sl_werks
AND prctr_i IN s_prctr.
ELSE.
SELECT vbeln vbeln_i posnr_i fkart fktyp vbtyp waerk vkorg
vtweg knumv fkdat gjahr kurrf land1 bukrs netwr ernam kunrg
kunag xblnr zuonr fksto bupla fkimg_i meins_i kursk_i
netwr_i vgbel_i matnr_i arktx_i charg_i pstyv_i werks_i ean11_i prctr_i mwsbp_i
FROM wb2_v_vbrk_vbrp2
INTO TABLE gt_wb2_v_vbrk_vbrp2
WHERE fkart IN sl_fkart
AND vbeln IN s_doc
AND fkdat IN s_date
AND bukrs = p_ccode
AND werks_i IN sl_werks.
ENDIF.
IF gt_wb2_v_vbrk_vbrp2 IS NOT INITIAL.
lt_sd_header = gt_wb2_v_vbrk_vbrp2.
SORT lt_sd_header BY bukrs fkart vbeln.
DELETE ADJACENT DUPLICATES FROM lt_sd_header COMPARING bukrs fkart vbeln.
IF lt_sd_header IS NOT INITIAL.
* Get WC valus
SELECT * FROM zwc_inv INTO TABLE gt_wc FOR ALL ENTRIES IN lt_sd_header
WHERE vbeln = lt_sd_header-vbeln.
* Get transporter GSTIN
SELECT * FROM zeway_data INTO TABLE gt_eway_data FOR ALL ENTRIES IN lt_sd_header
WHERE vbeln = lt_sd_header-vbeln.
* Condition value
SELECT knumv kposn kschl kbetr kwert FROM konv INTO TABLE gt_konv
FOR ALL ENTRIES IN lt_sd_header
WHERE knumv = lt_sd_header-knumv
AND kinak = abap_false.
IF sy-subrc IS INITIAL.
SORT gt_konv BY knumv kposn kschl.
ENDIF.
* Eway bill
SELECT bukrs
doctyp
docno
gjahr
ebillno
egen_dat
egen_time
vdfmdate
vdtodate
vdtotime
status
ernam
erdat
aenam
aedat FROM j_1ig_ewaybill INTO TABLE gt_ewaybill
FOR ALL ENTRIES IN lt_sd_header
WHERE bukrs = lt_sd_header-bukrs
AND doctyp = lt_sd_header-fkart
AND docno = lt_sd_header-vbeln.
IF sy-subrc IS INITIAL.
SORT gt_ewaybill DESCENDING BY egen_dat egen_time.
ENDIF.
* Document Flow Details
SELECT vbelv posnv vbeln FROM vbfa
INTO TABLE gt_vbfa
06.10.2020 working with program 1

FOR ALL ENTRIES IN lt_sd_header


WHERE vbeln = lt_sd_header-vbeln
AND vbtyp_v = gc_vbtyp_v.
* GSTIN deatils
SELECT bukrs branch name adrnr gstin
FROM j_1bbranch
INTO TABLE gt_gstin FOR ALL ENTRIES IN lt_sd_header
WHERE bukrs = lt_sd_header-bukrs
AND branch = lt_sd_header-bupla.
* Get Transporter details from Z-Table
SELECT * FROM zteway_transport INTO TABLE gt_zteway_transport
FOR ALL ENTRIES IN lt_sd_header
WHERE bukrs = lt_sd_header-bukrs
AND doctyp = lt_sd_header-fkart
AND docno = lt_sd_header-vbeln.
IF sy-subrc IS INITIAL.
SORT gt_zteway_transport BY bukrs doctyp docno.
ENDIF.
* Get e-invoice details from Z-Table
SELECT * FROM zteinv_details INTO TABLE gt_zteinv_details
FOR ALL ENTRIES IN lt_sd_header
WHERE bukrs = lt_sd_header-bukrs
AND doctyp = lt_sd_header-fkart
AND docno = lt_sd_header-vbeln.
IF sy-subrc IS INITIAL.
SORT gt_zteinv_details BY bukrs docno doctyp.
ENDIF.
* Select partners
SELECT vbeln posnr parvw kunnr lifnr adrnr
FROM vbpa INTO TABLE gt_vbpa
FOR ALL ENTRIES IN lt_sd_header
WHERE vbeln = lt_sd_header-vbeln.
*Buyer Details
IF gt_vbpa IS NOT INITIAL.
SORT gt_vbpa BY vbeln parvw.
SELECT kunnr land1 name1 name2 ort01 pstlz
regio stras telf1 adrnr stcd3
FROM kna1 INTO TABLE gt_kna1
FOR ALL ENTRIES IN gt_vbpa
WHERE kunnr = gt_vbpa-kunnr.
IF sy-subrc EQ 0.
SORT gt_kna1 BY kunnr.
SELECT spras land1 bland bezei FROM t005u
INTO TABLE gt_t005u
FOR ALL ENTRIES IN gt_kna1
WHERE land1 EQ gt_kna1-land1
AND bland EQ gt_kna1-regio
AND spras EQ sy-langu.
SELECT addrnumber tel_number FROM adrc
INTO TABLE gt_adrc
FOR ALL ENTRIES IN gt_kna1
WHERE addrnumber = gt_kna1-adrnr.
IF sy-subrc IS INITIAL.
SELECT addrnumber smtp_addr FROM adr6
INTO TABLE gt_adr6
FOR ALL ENTRIES IN gt_adrc
WHERE addrnumber = gt_adrc-addrnumber.
ENDIF.
ENDIF.
ENDIF.
SELECT * FROM j_1ig_invrefnum
INTO TABLE gt_invrefnum
FOR ALL ENTRIES IN lt_sd_header
06.10.2020 working with program 1

WHERE bukrs EQ lt_sd_header-bukrs


AND docno EQ lt_sd_header-vbeln
AND doc_type EQ lt_sd_header-fkart.
IF sy-subrc EQ 0.
SORT gt_invrefnum DESCENDING.
ENDIF.
lt_vbrk_export = lt_sd_header.
DELETE lt_vbrk_export WHERE waerk = gc_curr_inr.
IF lt_vbrk_export IS NOT INITIAL.
SELECT bukrs
belnr
gjahr
blart
bldat
budat
tcode
xblnr
bktxt
awtyp
awkey FROM bkpf INTO TABLE gt_bkpfm
FOR ALL ENTRIES IN lt_vbrk_export
WHERE bukrs = p_ccode
AND xblnr = lt_vbrk_export-xblnr.
IF gt_bkpfm IS NOT INITIAL.
SELECT bukrs
belnr
gjahr
buzei
buzid
bschl
koart
shkzg
dmbtr
txgrp
ktosl
ebeln
ebelp
taxps FROM bseg INTO TABLE gt_bseg
FOR ALL ENTRIES IN gt_bkpfm
WHERE bukrs = gt_bkpfm-bukrs
AND belnr = gt_bkpfm-belnr
AND gjahr = gt_bkpfm-gjahr.
ENDIF.
ENDIF.
ENDIF.
* Get material details for HSN, and other fields
SELECT matnr werks steuc FROM marc INTO TABLE gt_marc
FOR ALL ENTRIES IN gt_wb2_v_vbrk_vbrp2
WHERE matnr = gt_wb2_v_vbrk_vbrp2-matnr_i
AND werks = gt_wb2_v_vbrk_vbrp2-werks_i.
IF sy-subrc IS INITIAL.
SORT gt_marc BY matnr werks.
ENDIF.
* Order Details
IF gt_vbfa IS NOT INITIAL.
SELECT vbeln vbeln_i posnr_i audat bstnk bstdk ihrez bname
FROM wb2_v_vbak_vbap2
INTO TABLE gt_wb2_v_vbak_vbap2
FOR ALL ENTRIES IN gt_vbfa
WHERE vbeln = gt_vbfa-vbelv.
IF sy-subrc IS INITIAL.
SORT gt_wb2_v_vbak_vbap2 BY vbeln posnr_i.
ENDIF.
06.10.2020 working with program 1

ENDIF.
* Dispatch and Ship Details
CLEAR:lt_sd_header.
lt_sd_header = gt_wb2_v_vbrk_vbrp2.
SORT lt_sd_header BY vgbel_i.
DELETE ADJACENT DUPLICATES FROM lt_sd_header COMPARING vgbel_i.
IF lt_sd_header IS NOT INITIAL.
SELECT vbeln kunnr FROM likp
INTO TABLE gt_likp
FOR ALL ENTRIES IN lt_sd_header
WHERE vbeln EQ lt_sd_header-vgbel_i.
IF gt_likp IS NOT INITIAL.
SELECT kunnr land1 name1 name2 ort01 pstlz regio stras telf1 adrnr stcd3
FROM kna1 INTO TABLE gt_kna1_d
FOR ALL ENTRIES IN gt_likp
WHERE kunnr = gt_likp-kunnr.
IF sy-subrc EQ 0.
* Region text
SELECT spras land1 land1 bezei FROM t005u
INTO TABLE gt_t005u_d
FOR ALL ENTRIES IN gt_kna1_d
WHERE land1 EQ gc_land1_in
AND bland EQ gt_kna1_d-regio
AND spras EQ sy-langu.
* Address details
SELECT addrnumber tel_number FROM adrc
INTO TABLE gt_adrc_d
FOR ALL ENTRIES IN gt_kna1_d
WHERE addrnumber = gt_kna1_d-adrnr.
ENDIF.
ENDIF.
ENDIF.
*Seller Details
CLEAR lt_sd_header.
lt_sd_header = gt_wb2_v_vbrk_vbrp2.
SORT lt_sd_header BY werks_i.
DELETE ADJACENT DUPLICATES FROM lt_sd_header COMPARING werks_i.
IF lt_sd_header IS NOT INITIAL.
SELECT werks name1 name2 stras pstlz ort01 land1 regio
counc cityc adrnr spras zone1 j_1bbranch
FROM t001w
INTO TABLE gt_t001w
FOR ALL ENTRIES IN lt_sd_header
WHERE werks EQ lt_sd_header-werks_i.
IF sy-subrc EQ 0.
SORT gt_t001w BY werks.
* Region text
SELECT spras land1 bland bezei FROM t005u
INTO TABLE gt_t005u_s
FOR ALL ENTRIES IN gt_t001w
WHERE land1 EQ gt_t001w-land1
AND bland EQ gt_t001w-regio
AND spras EQ sy-langu.
* Address details
SELECT addrnumber tel_number FROM adrc
INTO TABLE gt_adrc_s
FOR ALL ENTRIES IN gt_t001w
WHERE addrnumber = gt_t001w-adrnr.
IF sy-subrc EQ 0.
SELECT addrnumber smtp_addr
FROM adr6
INTO TABLE gt_adr6_s
FOR ALL ENTRIES IN gt_adrc_s
06.10.2020 working with program 1

WHERE addrnumber = gt_adrc_s-addrnumber.


ENDIF.
ENDIF.
ENDIF.
* Export region
IF gt_export IS NOT INITIAL.
SELECT spras land1 bland bezei FROM t005u
APPENDING TABLE gt_t005u
FOR ALL ENTRIES IN gt_export
WHERE land1 EQ gt_export-land1
AND bland EQ gt_export-zport_state
AND spras EQ sy-langu.
ENDIF.
* get unit rates and discounts
rs_name-sign = gc_sign.
rs_name-option = gc_equal.
rs_name-low = gc_var_unit.
APPEND rs_name TO rt_name.
rs_name-low = gc_var_disc.
APPEND rs_name TO rt_name.
SELECT name type numb sign opti low high
FROM tvarvc INTO TABLE gt_tvarvc
WHERE name IN rt_name.
SORT gt_wb2_v_vbrk_vbrp2 BY vbeln.
lt_vbrk_vbrp = gt_wb2_v_vbrk_vbrp2.
DELETE ADJACENT DUPLICATES FROM lt_vbrk_vbrp COMPARING vbeln.
LOOP AT lt_vbrk_vbrp INTO lw_wb2_v_vbrk_vbrp2.
CLEAR:lw_invrefnum.
READ TABLE gt_invrefnum INTO lw_invrefnum WITH KEY bukrs = lw_wb2_v_vbrk_vbrp2-bukrs
docno = lw_wb2_v_vbrk_vbrp2-vbeln
doc_type = lw_wb2_v_vbrk_vbrp2-fkart.
IF sy-subrc = 0.
gw_final-ack_no = lw_invrefnum-ack_no.
IF lw_invrefnum-ack_date IS NOT INITIAL.
lv_internal_date = lw_invrefnum-ack_date.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = lv_internal_date
IMPORTING
date_external = gw_final-ack_dt
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Date conversion error'(m02) TYPE 'I'.
ENDIF.
ENDIF.
gw_final-qr_code = lw_invrefnum-signed_qrcode.
gw_final-irn = lw_invrefnum-irn.
gw_final-sign_inv = lw_invrefnum-signed_inv.
gw_final-ernam = lw_invrefnum-ernam.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = lw_invrefnum-erdat
IMPORTING
date_external = gw_final-erdat
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Date conversion error'(m02) TYPE 'I'.
ENDIF.
gw_final-erzet = lw_invrefnum-erzet.
06.10.2020 working with program 1

IF lw_invrefnum-cancel_date IS NOT INITIAL.


lv_internal_date = lw_invrefnum-cancel_date.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = lv_internal_date
IMPORTING
date_external = gw_final-canc_dt
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Date conversion error'(m02) TYPE 'I'.
ENDIF.
ENDIF.
IF lw_invrefnum-irn_status EQ gc_irn_sts_act.
gw_final-status = 'Success'(060).
gw_final-icon = gc_icon_08.
ELSEIF lw_invrefnum-irn_status EQ gc_irn_sts_err.
gw_final-status = 'Error'(061).
gw_final-icon = gc_icon_0a.
ELSEIF lw_invrefnum-irn_status EQ gc_irn_sts_cnl.
gw_final-status = 'Cancelled'(062).
gw_final-icon = gc_icon_0w.
ENDIF.
ENDIF.
CLEAR ls_zteinv_details.
READ TABLE gt_zteinv_details INTO ls_zteinv_details WITH KEY
bukrs = lw_wb2_v_vbrk_vbrp2-bukrs
docno = lw_wb2_v_vbrk_vbrp2-vbeln
doctyp = lw_wb2_v_vbrk_vbrp2-fkart.
* BINARY SEARCH.
IF sy-subrc = 0.
gw_final-einv_print = ls_zteinv_details-einv_pdf.
IF gw_final-status = 'Error'(061).
gw_final-einv_error = ls_zteinv_details-einv_error.
ELSE.
gw_final-eway_error = ' '.
ENDIF.
ENDIF.
CLEAR:lw_ewaybill.
READ TABLE gt_ewaybill INTO lw_ewaybill WITH KEY bukrs = lw_wb2_v_vbrk_vbrp2-bukrs
docno = lw_wb2_v_vbrk_vbrp2-vbeln
doctyp = lw_wb2_v_vbrk_vbrp2-fkart.
IF sy-subrc = 0.
gw_final-eway_num = lw_ewaybill-ebillno.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = lw_ewaybill-egen_dat
IMPORTING
date_external = gw_final-eway_date
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Date conversion error'(m02) TYPE 'I'.
ENDIF.
gw_final-eway_ernam = lw_ewaybill-ernam.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = lw_ewaybill-erdat
IMPORTING
date_external = gw_final-eway_erdat
EXCEPTIONS
06.10.2020 working with program 1

date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Date conversion error'(m02) TYPE 'I'.
ENDIF.
IF lw_ewaybill-status EQ gc_eway_sts_c.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = lw_ewaybill-aedat
IMPORTING
date_external = gw_final-eway_canc_dt
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Date conversion error'(m02) TYPE 'I'.
ENDIF.
ELSE.
gw_final-eway_canc_dt = 0.
ENDIF.
gw_final-eway_erzet = lw_ewaybill-egen_time.
* Valid from
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = lw_ewaybill-vdfmdate
IMPORTING
date_external = gw_final-eway_v_from
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Date conversion error'(m02) TYPE 'I'.
ENDIF.
* Valid To
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = lw_ewaybill-vdtodate
IMPORTING
date_external = gw_final-eway_v_to
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Date conversion error'(m02) TYPE 'I'.
ENDIF.
gw_final-eway_v_time = lw_ewaybill-vdtotime.
IF lw_ewaybill-status = gc_eway_sts_a.
gw_final-eway_status = 'Success'(060).
gw_final-eway_icon = gc_icon_08.
ELSEIF lw_ewaybill-status = gc_eway_sts_a.
gw_final-eway_status = 'Error'(061).
gw_final-eway_icon = gc_icon_0a.
ELSEIF lw_ewaybill-status = gc_eway_sts_c.
gw_final-eway_status = 'Cancelled'(062).
gw_final-eway_icon = gc_icon_0w.
ENDIF.
ENDIF.
READ TABLE gt_zteway_transport INTO ls_zteway_transport WITH KEY
bukrs = lw_wb2_v_vbrk_vbrp2-bukrs
docno = lw_wb2_v_vbrk_vbrp2-vbeln
doctyp = lw_wb2_v_vbrk_vbrp2-fkart
BINARY SEARCH.
IF sy-subrc = 0.
06.10.2020 working with program 1

gw_final-t_id = ls_zteway_transport-t_id.
gw_final-t_name = ls_zteway_transport-t_name.
gw_final-t_doc_no = ls_zteway_transport-t_doc_no.
IF ls_zteway_transport-t_date IS NOT INITIAL.
CONCATENATE ls_zteway_transport-t_date+6(2) '/'
ls_zteway_transport-t_date+4(2) '/'
ls_zteway_transport-t_date+0(4)
INTO gw_final-t_date.
ENDIF.
gw_final-t_mode = ls_zteway_transport-t_mode.
gw_final-t_distance = ls_zteway_transport-t_distance.
gw_final-v_number = ls_zteway_transport-v_number.
gw_final-v_type = ls_zteway_transport-v_type.
IF gw_final-v_type IS INITIAL.
gw_final-v_type = gc_v_type_1..
ENDIF.
gw_final-eway_print = ls_zteway_transport-eway_print.
IF gw_final-eway_status = 'Error'(061).
gw_final-eway_error = ls_zteway_transport-eway_error.
ELSE.
gw_final-eway_error = ' '.
ENDIF.
gw_final-t_r_distance = ls_zteway_transport-t_r_distance.
gw_final-t_ext_valid_reason = ls_zteway_transport-t_ext_valid_reason.
gw_final-t_ext_valid_remarks = ls_zteway_transport-t_ext_valid_remarks.
gw_final-t_from_pin = ls_zteway_transport-t_from_pin.
gw_final-t_consignment_status = ls_zteway_transport-t_consignment_status.
gw_final-t_transit_type = ls_zteway_transport-t_transit_type.
gw_final-t_address1 = ls_zteway_transport-t_address1.
gw_final-t_address2 = ls_zteway_transport-t_address2.
gw_final-t_address3 = ls_zteway_transport-t_address3.
gw_final-v_reason_code = ls_zteway_transport-v_reason_code.
gw_final-v_reason = ls_zteway_transport-v_reason.
gw_final-c_reason_code = ls_zteway_transport-c_reason_code.
gw_final-c_reason = ls_zteway_transport-c_reason.
gw_final-zport_code = ls_zteway_transport-zport_code.
ELSE.
* Document number
DATA: lt_lines TYPE STANDARD TABLE OF tline,
lw_lines TYPE tline,
lv_tdname TYPE thead-tdname.
lv_tdname = lw_wb2_v_vbrk_vbrp2-vbeln.
CALL FUNCTION 'READ_TEXT'
EXPORTING
client = sy-mandt
id = 'Z003'
language = sy-langu
name = lv_tdname
object = gc_tobject_vbbk
TABLES
lines = lt_lines
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF sy-subrc = 0.
READ TABLE lt_lines INTO lw_lines INDEX 1.
IF sy-subrc IS INITIAL.
06.10.2020 working with program 1

gw_final-t_doc_no = lw_lines-tdline.
ENDIF.
ENDIF.
* Document Date
CALL FUNCTION 'READ_TEXT'
EXPORTING
client = sy-mandt
id = 'Z004'
language = sy-langu
name = lv_tdname
object = gc_tobject_vbbk
TABLES
lines = lt_lines
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF sy-subrc = 0.
READ TABLE lt_lines INTO lw_lines INDEX 1.
IF sy-subrc IS INITIAL.
gw_final-t_date = lw_lines-tdline.
IF gw_final-t_date IS NOT INITIAL.
CONCATENATE ls_zteway_transport-t_date+6(2) '/'
ls_zteway_transport-t_date+4(2) '/'
ls_zteway_transport-t_date+0(4)
INTO gw_final-t_date.
ENDIF.
ENDIF.
ENDIF.
* mode
CALL FUNCTION 'READ_TEXT'
EXPORTING
client = sy-mandt
id = 'Z005'
language = sy-langu
name = lv_tdname
object = gc_tobject_vbbk
TABLES
lines = lt_lines
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF sy-subrc = 0.
READ TABLE lt_lines INTO lw_lines INDEX 1.
IF sy-subrc IS INITIAL.
gw_final-t_mode = lw_lines-tdline.
ENDIF.
ENDIF.
* Vehicle number
CALL FUNCTION 'READ_TEXT'
EXPORTING
client = sy-mandt
06.10.2020 working with program 1

id = 'Z006'
language = sy-langu
name = lv_tdname
object = gc_tobject_vbbk
TABLES
lines = lt_lines
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF sy-subrc = 0.
READ TABLE lt_lines INTO lw_lines INDEX 1.
IF sy-subrc IS INITIAL.
gw_final-v_number = lw_lines-tdline.
ENDIF.
ENDIF.
* Transporter name
CALL FUNCTION 'READ_TEXT'
EXPORTING
client = sy-mandt
id = 'Z015'
language = sy-langu
name = lv_tdname
object = gc_tobject_vbbk
TABLES
lines = lt_lines
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF sy-subrc = 0.
READ TABLE lt_lines INTO lw_lines INDEX 1.
IF sy-subrc IS INITIAL.
gw_final-t_name = lw_lines-tdline.
ENDIF.
ENDIF.
* Transporter Id
READ TABLE gt_eway_data INTO lw_eway_data WITH KEY vbeln = lw_wb2_v_vbrk_vbrp2-vbeln
fkdat = lw_wb2_v_vbrk_vbrp2-fkdat.
IF sy-subrc IS INITIAL.
gw_final-t_id = lw_eway_data-stcd3.
ENDIF.
ENDIF.
gw_final-vbeln = lw_wb2_v_vbrk_vbrp2-vbeln.
gw_final-gjahr = lw_wb2_v_vbrk_vbrp2-gjahr.
gw_final-fkart = lw_wb2_v_vbrk_vbrp2-fkart.
gw_final-fktyp = lw_wb2_v_vbrk_vbrp2-fktyp.
gw_final-vbtyp = lw_wb2_v_vbrk_vbrp2-vbtyp.
gw_final-vkorg = lw_wb2_v_vbrk_vbrp2-vkorg.
gw_final-vtweg = lw_wb2_v_vbrk_vbrp2-vtweg.
IF lw_wb2_v_vbrk_vbrp2-fkdat IS NOT INITIAL.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
06.10.2020 working with program 1

date_internal = lw_wb2_v_vbrk_vbrp2-fkdat
IMPORTING
date_external = gw_final-fkdat
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Date conversion error'(m02) TYPE 'I'.
ENDIF.
gw_final-fkdat_db = lw_wb2_v_vbrk_vbrp2-fkdat.
ENDIF.
gw_final-kunrg = lw_wb2_v_vbrk_vbrp2-kunrg.
gw_final-werks = lw_wb2_v_vbrk_vbrp2-werks_i.
gw_final-prctr = lw_wb2_v_vbrk_vbrp2-prctr_i.
gw_final-doc_ernam = lw_wb2_v_vbrk_vbrp2-ernam.
gw_final-bupla = lw_wb2_v_vbrk_vbrp2-bupla.
gw_final-odnno = lw_wb2_v_vbrk_vbrp2-xblnr.
gw_final-bukrs = lw_wb2_v_vbrk_vbrp2-bukrs.
* Get Fiscl year
CALL FUNCTION 'GM_GET_FISCAL_YEAR'
EXPORTING
i_date = lw_wb2_v_vbrk_vbrp2-fkdat
i_fyv = gc_periv_v3
IMPORTING
e_fy = lv_gjahr
EXCEPTIONS
fiscal_year_does_not_exist = 1
not_defined_for_date = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ELSE.
gw_final-gjahr = lv_gjahr.
ENDIF.
* Ship to details
CLEAR:lw_vbpa.
READ TABLE gt_vbpa INTO lw_vbpa WITH KEY vbeln = lw_wb2_v_vbrk_vbrp2-vbeln
parvw = gc_parvw_we
BINARY SEARCH.
IF sy-subrc EQ 0.
CLEAR:lw_kna1_d.
READ TABLE gt_kna1 INTO lw_kna1_d WITH KEY kunnr = lw_vbpa-kunnr BINARY SEARCH.
IF sy-subrc EQ 0.
gw_final-ship_to = lw_kna1_d-kunnr.
gw_final-ship_to_name = lw_kna1_d-name1.
ENDIF.
ENDIF.
READ TABLE gt_gstin INTO lw_gstin WITH KEY bukrs = gw_final-bukrs
branch = gw_final-bupla.
IF sy-subrc IS INITIAL.
gw_final-sup_gstin = lw_gstin-gstin.
ENDIF.
READ TABLE gt_kna1 INTO lw_kna1 WITH KEY kunnr = gw_final-kunrg BINARY SEARCH.
IF sy-subrc IS INITIAL.
gw_final-kunnr = lw_kna1-kunnr.
gw_final-name1 = lw_kna1-name1.
gw_final-ship_gstin = lw_kna1-stcd3.
ENDIF.
READ TABLE gt_doctyp INTO lw_doctyp WITH KEY bukrs = p_ccode
zmodule = gc_sd
fkart = gw_final-fkart.
IF sy-subrc IS INITIAL.
gw_final-einv = lw_doctyp-einv.
06.10.2020 working with program 1

gw_final-eway = lw_doctyp-eway.
ENDIF.
gw_final-mod = gc_sd.
READ TABLE gt_wb2_v_vbrk_vbrp2 INTO lw_vbrk_vbrp2 WITH KEY vbeln = lw_wb2_v_vbrk_vbrp2-vbeln.
IF sy-subrc = 0.
lv_index = sy-tabix.
* Work contract
READ TABLE gt_wc INTO lw_wc WITH KEY vbeln = lw_wb2_v_vbrk_vbrp2-vbeln.
IF sy-subrc IS INITIAL.
LOOP AT gt_wc INTO lw_wc WHERE vbeln = lw_wb2_v_vbrk_vbrp2-vbeln.
gw_final-taxamt = gw_final-taxamt + lw_wc-value.
gw_final-tax = gw_final-tax + lw_wc-igst + lw_wc-cgst + lw_wc-sgst.
gw_final-igst_amt = gw_final-igst_amt + lw_wc-igst.
gw_final-cgst_amt = gw_final-cgst_amt + lw_wc-cgst.
gw_final-sgst_amt = gw_final-sgst_amt + lw_wc-sgst.
ENDLOOP.
ELSE.
LOOP AT gt_wb2_v_vbrk_vbrp2 INTO lw_vbrk_vbrp2 FROM lv_index.
IF lw_vbrk_vbrp2-vbeln NE lw_wb2_v_vbrk_vbrp2-vbeln.
EXIT.
ENDIF.
gw_final-taxamt = gw_final-taxamt + lw_vbrk_vbrp2-netwr_i.
gw_final-tax = gw_final-tax + lw_vbrk_vbrp2-mwsbp_i.
"IGST Tax amount
READ TABLE gt_konv INTO lw_konv WITH KEY knumv = lw_vbrk_vbrp2-knumv
kposn = lw_vbrk_vbrp2-posnr_i
kschl = gc_kschl_joig
BINARY SEARCH.
IF sy-subrc EQ 0.
CLEAR lv_dmbtr.
PERFORM calculate_tax USING lw_vbrk_vbrp2-knumv
lw_vbrk_vbrp2-posnr_i
gc_kschl_joig
CHANGING lv_dmbtr
lv_rate.
gw_final-igst_amt = gw_final-igst_amt + lv_dmbtr.
ENDIF.
"CGST Tax amount
CLEAR lv_dmbtr.
READ TABLE gt_konv INTO lw_konv WITH KEY knumv = lw_vbrk_vbrp2-knumv
kposn = lw_vbrk_vbrp2-posnr_i
kschl = gc_kschl_jocg
BINARY SEARCH.
IF sy-subrc EQ 0.
PERFORM calculate_tax USING lw_vbrk_vbrp2-knumv
lw_vbrk_vbrp2-posnr_i
gc_kschl_jocg
CHANGING lv_dmbtr
lv_rate.
gw_final-cgst_amt = gw_final-cgst_amt + lv_dmbtr.
ENDIF.
"SGST Tax amount
CLEAR lv_dmbtr.
READ TABLE gt_konv INTO lw_konv WITH KEY knumv = lw_vbrk_vbrp2-knumv
kposn = lw_vbrk_vbrp2-posnr_i
kschl = gc_kschl_josg
BINARY SEARCH.
IF sy-subrc EQ 0.
PERFORM calculate_tax USING lw_vbrk_vbrp2-knumv
lw_vbrk_vbrp2-posnr_i
gc_kschl_josg
CHANGING lv_dmbtr
lv_rate.
06.10.2020 working with program 1

gw_final-sgst_amt = gw_final-sgst_amt + lv_dmbtr.


ENDIF.
"CESS Tax amount
READ TABLE gt_konv INTO lw_konv WITH KEY knumv = lw_vbrk_vbrp2-knumv
kposn = lw_vbrk_vbrp2-posnr_i
kschl = gc_kschl_cess
BINARY SEARCH.
IF sy-subrc EQ 0.
gw_final-cess_amt = gw_final-cess_amt + lw_konv-kwert.
ENDIF.
ENDLOOP.
ENDIF.
gw_final-invval = gw_final-taxamt + gw_final-tax .
ENDIF.
APPEND gw_final TO gt_final.
CLEAR : gw_final.
ENDLOOP.
ENDIF.
ENDFORM.
*& *
*& Form PROCESS_SD_DATA_DELIVERY
*& *
* text
* *
* > p1 text
* < p2 text
* *
FORM process_sd_data_delivery .
DATA: lw_invrefnum TYPE j_1ig_invrefnum,
lw_wb2_v_likp_lips2 TYPE ty_wb2_v_likp_lips2,
lw_kna1 LIKE LINE OF gt_kna1,
lw_gstin LIKE LINE OF gt_gstin.
DATA: lv_internal_date TYPE sy-datum,
lw_konv TYPE ty_konv,
lv_gjahr(4) TYPE c,
lw_likp TYPE ty_likp,
lw_lfa1 TYPE lfa1,
lw_doctyp TYPE ty_doctyp.
DATA: lw_ewaybill TYPE ty_ewaybill.
DATA: ls_zteway_transport TYPE zteway_transport.
DATA: ls_zteinv_details TYPE zteinv_details.
DATA:lt_likp_lips2 TYPE TABLE OF ty_wb2_v_likp_lips2,
lw_likp_lips2 TYPE ty_wb2_v_likp_lips2,
lt_delivery_header TYPE TABLE OF ty_wb2_v_likp_lips2,
lv_index TYPE sy-tabix.
*& Get deliveries for E-Way Bill
IF s_prctr IS NOT INITIAL.
SELECT vbeln vbeln_i posnr_i ernam vkorg lfart lfdat vbtyp kunnr kunag
fkdat knumv waerk lifnr bldat netwr werks xblnr matnr_i matkl_i
werks_i lgort_i charg_i lfimg_i meins_i vrkme_i ntgew_i brgew_i
arktx_i vbelv_i posnv_i vgbel_i vgpos_i gsber_i prctr_i
netpr_i netwr_i lfgja_i
FROM wb2_v_likp_lips2
INTO TABLE gt_wb2_v_likp_lips2
FOR ALL ENTRIES IN gt_user_config
WHERE lfart = gt_user_config-fkart
AND vbeln IN s_doc
AND fkdat IN s_date
AND werks_i = gt_user_config-werks
AND prctr_i IN s_prctr.
ELSE.
SELECT vbeln vbeln_i posnr_i ernam vkorg lfart lfdat vbtyp kunnr kunag
fkdat knumv waerk lifnr bldat netwr werks xblnr matnr_i matkl_i
06.10.2020 working with program 1

werks_i lgort_i charg_i lfimg_i meins_i vrkme_i ntgew_i brgew_i


arktx_i vbelv_i posnv_i vgbel_i vgpos_i gsber_i prctr_i
netpr_i netwr_i lfgja_i
FROM wb2_v_likp_lips
INTO TABLE gt_wb2_v_likp_lips2
FOR ALL ENTRIES IN gt_user_config
WHERE lfart = gt_user_config-fkart
AND vbeln IN s_doc
AND fkdat IN s_date
AND werks_i = gt_user_config-werks.
ENDIF.
IF gt_wb2_v_likp_lips2 IS NOT INITIAL.
lt_delivery_header = gt_wb2_v_likp_lips2.
SORT lt_delivery_header BY lfart vbeln.
DELETE ADJACENT DUPLICATES FROM lt_delivery_header COMPARING lfart vbeln.
IF lt_delivery_header IS NOT INITIAL .
* Eway bill
SELECT bukrs doctyp docno gjahr ebillno egen_dat egen_time vdfmdate vdtodate
vdtotime status ernam erdat aenam aedat
FROM j_1ig_ewaybill APPENDING TABLE gt_ewaybill
FOR ALL ENTRIES IN lt_delivery_header
WHERE bukrs = p_ccode
AND doctyp = lt_delivery_header-lfart
AND docno = lt_delivery_header-vbeln.
IF sy-subrc IS INITIAL.
SORT gt_ewaybill DESCENDING BY egen_dat egen_time.
ENDIF.
* Get Transporter details from Z-Table
SELECT * FROM zteway_transport INTO TABLE gt_zteway_transport
FOR ALL ENTRIES IN lt_delivery_header
WHERE bukrs = p_ccode
AND doctyp = lt_delivery_header-lfart
AND docno = lt_delivery_header-vbeln.
IF sy-subrc IS INITIAL.
SORT gt_zteway_transport BY bukrs doctyp docno.
ENDIF.
* Select partners
SELECT vbeln posnr parvw kunnr lifnr
adrnr FROM vbpa APPE NDING TABLE gt_vbpa FOR ALL ENTRIES IN lt_delivery_header
WHERE vbeln = lt_delivery_header-vbeln.
*Buyer Details
IF sy-subrc IS INITIAL.
SORT gt_vbpa BY vbeln parvw.
SELECT kunnr land1 name1 name2 ort01 pstlz regio
stras telf1 adrnr stcd3
FROM kna1
APPENDING TABLE gt_kna1
FOR ALL ENTRIES IN gt_vbpa
WHERE kunnr = gt_vbpa-kunnr.
IF sy-subrc EQ 0.
SORT gt_kna1 BY kunnr.
SELECT spras land1 bland bezei FROM t005u
APPENDING TABLE gt_t005u
FOR ALL ENTRIES IN gt_kna1
WHERE land1 EQ gt_kna1-land1
AND bland EQ gt_kna1-regio
AND spras EQ sy-langu.
SELECT addrnumber tel_number FROM adrc
APPENDING TABLE gt_adrc
FOR ALL ENTRIES IN gt_kna1
WHERE addrnumber = gt_kna1-adrnr.
IF sy-subrc IS INITIAL.
SELECT addrnumber smtp_addr FROM adr6
06.10.2020 working with program 1

APPENDING TABLE gt_adr6


FOR ALL ENTRIES IN gt_adrc
WHERE addrnumber = gt_adrc-addrnumber.
ENDIF.
ENDIF.
ENDIF.
SELECT * FROM j_1ig_invrefnum
APPENDING TABLE gt_invrefnum
FOR ALL ENTRIES IN lt_delivery_header
WHERE bukrs EQ p_ccode
AND docno EQ lt_delivery_header-vbeln
AND doc_type EQ lt_delivery_header-lfart.
IF sy-subrc EQ 0.
SORT gt_invrefnum BY bukrs docno doc_year doc_type.
ENDIF.
ENDIF.
* Get material details for HSN, and other fields
SELECT matnr werks steuc FROM marc APPENDING TABLE gt_marc
FOR ALL ENTRIES IN gt_wb2_v_likp_lips2
WHERE matnr = gt_wb2_v_likp_lips2-matnr_i
AND werks = gt_wb2_v_likp_lips2-werks_i.
IF sy-subrc IS INITIAL.
SORT gt_marc BY matnr werks.
ENDIF.
* GSTIN deatils
SELECT bukrs branch name adrnr gstin
FROM j_1bbranch
APPENDING TABLE gt_gstin
WHERE bukrs = p_ccode.
CLEAR:lt_delivery_header.
lt_delivery_header = gt_wb2_v_likp_lips2.
SORT lt_delivery_header BY kunnr.
DELETE ADJACENT DUPLICATES FROM lt_delivery_header COMPARING kunnr.
IF lt_delivery_header IS NOT INITIAL.
SELECT kunnr land1 name1 name2 ort01 pstlz regio
stras telf1 adrnr stcd3
FROM kna1
APPENDING TABLE gt_kna1_d
FOR ALL ENTRIES IN gt_wb2_v_likp_lips2
WHERE kunnr = gt_wb2_v_likp_lips2-kunnr.
IF sy-subrc EQ 0.
SELECT spras
land1
bland
bezei FROM t005u
APPENDING TABLE gt_t005u_d
FOR ALL ENTRIES IN gt_kna1_d
WHERE land1 EQ gc_land1_in
AND bland EQ gt_kna1_d-regio
AND spras EQ sy-langu.
SELECT addrnumber tel_number FROM adrc
APPENDING TABLE gt_adrc_d
FOR ALL ENTRIES IN gt_kna1_d
WHERE addrnumber = gt_kna1_d-adrnr.
ENDIF.
ENDIF.
*Seller Details
CLEAR:lt_delivery_header.
lt_delivery_header = gt_wb2_v_likp_lips2.
SORT lt_delivery_header BY werks_i.
DELETE ADJACENT DUPLICATES FROM lt_delivery_header COMPARING werks_i.
IF lt_delivery_header IS NOT INITIAL.
SELECT werks name1 name2 stras pstlz ort01 land1
06.10.2020 working with program 1

regio counc cityc adrnr spras zone1


j_1bbranch FROM t001w
APPENDING TABLE gt_t001w
FOR ALL ENTRIES IN gt_wb2_v_likp_lips2
WHERE werks EQ gt_wb2_v_likp_lips2-werks_i.
IF sy-subrc EQ 0.
SORT gt_t001w BY werks.
SELECT spras land1 bland bezei FROM t005u
APPENDING TABLE gt_t005u_s
FOR ALL ENTRIES IN gt_t001w
WHERE land1 EQ gt_t001w-land1
AND bland EQ gt_t001w-regio
AND spras EQ sy-langu.
SELECT addrnumber tel_number FROM adrc
APPENDING TABLE gt_adrc_s
FOR ALL ENTRIES IN gt_t001w
WHERE addrnumber = gt_t001w-adrnr.
IF sy-subrc EQ 0.
SELECT addrnumber smtp_addr FROM adr6
APPENDING TABLE gt_adr6_s
FOR ALL ENTRIES IN gt_adrc_s
WHERE addrnumber = gt_adrc_s-addrnumber.
ENDIF.
ENDIF.
ENDIF.
SORT gt_wb2_v_likp_lips2 BY vbeln.
lt_likp_lips2 = gt_wb2_v_likp_lips2.
DELETE ADJACENT DUPLICATES FROM lt_likp_lips2 COMPARING vbeln.
LOOP AT gt_wb2_v_likp_lips2 INTO lw_wb2_v_likp_lips2.
CLEAR:lw_invrefnum.
READ TABLE gt_invrefnum INTO lw_invrefnum WITH KEY bukrs = p_ccode
docno = lw_wb2_v_likp_lips2-vbeln
doc_type = lw_wb2_v_likp_lips2-lfart.
IF sy-subrc = 0.
gw_final-ack_no = lw_invrefnum-ack_no.
IF lw_invrefnum-ack_date IS NOT INITIAL.
lv_internal_date = lw_invrefnum-ack_date.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = lv_internal_date
IMPORTING
date_external = gw_final-ack_dt
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Date conversion error'(m02) TYPE 'I'.
ENDIF.
ENDIF.
gw_final-qr_code = lw_invrefnum-signed_qrcode.
gw_final-irn = lw_invrefnum-irn.
gw_final-sign_inv = lw_invrefnum-signed_inv.
gw_final-ernam = lw_invrefnum-ernam.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = lw_invrefnum-erdat
IMPORTING
date_external = gw_final-erdat
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Date conversion error'(m02) TYPE 'I'.
06.10.2020 working with program 1

ENDIF.
gw_final-erzet = lw_invrefnum-erzet.
IF lw_invrefnum-cancel_date IS NOT INITIAL.
lv_internal_date = lw_invrefnum-cancel_date.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = lv_internal_date
IMPORTING
date_external = gw_final-canc_dt
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Date conversion error'(m02) TYPE 'I'.
ENDIF.
ENDIF.
IF lw_invrefnum-irn_status EQ gc_irn_sts_act.
gw_final-status = 'Success'(060).
gw_final-icon = gc_icon_08.
ELSEIF lw_invrefnum-irn_status EQ gc_irn_sts_err.
gw_final-status = 'Error'(061).
gw_final-icon = gc_icon_0a.
ELSEIF lw_invrefnum-irn_status EQ gc_irn_sts_cnl.
gw_final-status = 'Cancelled'(062).
gw_final-icon = gc_icon_0w.
ENDIF.
ENDIF.
CLEAR ls_zteinv_details.
READ TABLE gt_zteinv_details INTO ls_zteinv_details WITH KEY
bukrs = p_ccode
docno = lw_wb2_v_likp_lips2-vbeln
doctyp = lw_wb2_v_likp_lips2-lfart.
IF sy-subrc = 0.
IF gw_final-status = 'Error'(061).
gw_final-einv_error = ls_zteinv_details-einv_error.
ELSE.
gw_final-einv_error = ' '.
ENDIF.
ENDIF.
CLEAR:lw_ewaybill.
READ TABLE gt_ewaybill INTO lw_ewaybill WITH KEY bukrs = p_ccode
docno = lw_wb2_v_likp_lips2-vbeln
doctyp = lw_wb2_v_likp_lips2-lfart.
IF sy-subrc = 0.
gw_final-eway_num = lw_ewaybill-ebillno.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = lw_ewaybill-egen_dat
IMPORTING
date_external = gw_final-eway_date
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Date conversion error'(m02) TYPE 'I'.
ENDIF.
gw_final-eway_ernam = lw_ewaybill-ernam.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = lw_ewaybill-erdat
IMPORTING
date_external = gw_final-eway_erdat
EXCEPTIONS
06.10.2020 working with program 1

date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Date conversion error'(m02) TYPE 'I'.
ENDIF.
IF lw_ewaybill-status EQ gc_eway_sts_c.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = lw_ewaybill-aedat
IMPORTING
date_external = gw_final-eway_canc_dt
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Date conversion error'(m02) TYPE 'I'.
ENDIF.
ELSE.
gw_final-eway_canc_dt = 0.
ENDIF.
gw_final-eway_erzet = lw_ewaybill-egen_time.
* Valid from
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = lw_ewaybill-vdfmdate
IMPORTING
date_external = gw_final-eway_v_from
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Date conversion error'(m02) TYPE 'I'.
ENDIF.
* Valid To
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = lw_ewaybill-vdtodate
IMPORTING
date_external = gw_final-eway_v_to
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Date conversion error'(m02) TYPE 'I'.
ENDIF.
gw_final-eway_v_time = lw_ewaybill-vdtotime.
IF lw_ewaybill-status = gc_eway_sts_a.
gw_final-eway_status = 'Success'(060).
gw_final-eway_icon = gc_icon_08.
ELSEIF lw_ewaybill-status = gc_eway_sts_e.
gw_final-eway_status = 'Error'(061).
gw_final-eway_icon = gc_icon_0a.
ELSEIF lw_ewaybill-status = gc_eway_sts_c.
gw_final-eway_status = 'Cancelled'(062).
gw_final-eway_icon = gc_icon_0w.
ENDIF.
ENDIF.
READ TABLE gt_zteway_transport INTO ls_zteway_transport WITH KEY
bukrs = p_ccode
docno = lw_wb2_v_likp_lips2-vbeln
doctyp = lw_wb2_v_likp_lips2-lfart
BINARY SEARCH.
IF sy-subrc = 0.
06.10.2020 working with program 1

gw_final-t_id = ls_zteway_transport-t_id.
gw_final-t_name = ls_zteway_transport-t_name.
gw_final-t_doc_no = ls_zteway_transport-t_doc_no.
IF ls_zteway_transport-t_date IS NOT INITIAL.
CONCATENATE ls_zteway_transport-t_date+6(2) '/'
ls_zteway_transport-t_date+4(2) '/'
ls_zteway_transport-t_date+0(4)
INTO gw_final-t_date.
ENDIF.
gw_final-t_mode = ls_zteway_transport-t_mode.
gw_final-t_distance = ls_zteway_transport-t_distance.
gw_final-v_number = ls_zteway_transport-v_number.
gw_final-v_type = ls_zteway_transport-v_type.
gw_final-t_r_distance = ls_zteway_transport-t_r_distance.
gw_final-t_ext_valid_reason = ls_zteway_transport-t_ext_valid_reason.
gw_final-t_ext_valid_remarks = ls_zteway_transport-t_ext_valid_remarks.
gw_final-t_from_pin = ls_zteway_transport-t_from_pin.
gw_final-t_consignment_status = ls_zteway_transport-t_consignment_status.
gw_final-t_transit_type = ls_zteway_transport-t_transit_type.
gw_final-t_address1 = ls_zteway_transport-t_address1.
gw_final-t_address2 = ls_zteway_transport-t_address2.
gw_final-t_address3 = ls_zteway_transport-t_address3.
gw_final-v_reason_code = ls_zteway_transport-v_reason_code.
gw_final-v_reason = ls_zteway_transport-v_reason.
gw_final-c_reason_code = ls_zteway_transport-c_reason_code.
gw_final-c_reason = ls_zteway_transport-c_reason.
gw_final-zport_code = ls_zteway_transport-zport_code.
ELSE.
* Customer specific logic
ENDIF.
gw_final-vbeln = lw_wb2_v_likp_lips2-vbeln.
gw_final-fkart = lw_wb2_v_likp_lips2-lfart.
gw_final-vbtyp = lw_wb2_v_likp_lips2-vbtyp.
gw_final-vkorg = lw_wb2_v_likp_lips2-vkorg.
IF lw_wb2_v_likp_lips2-fkdat IS NOT INITIAL.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = lw_wb2_v_likp_lips2-fkdat
IMPORTING
date_external = gw_final-fkdat
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Date conversion error'(m02) TYPE 'I'.
ENDIF.
gw_final-fkdat_db = lw_wb2_v_likp_lips2-fkdat.
ENDIF.
gw_final-kunrg = lw_wb2_v_likp_lips2-kunnr.
gw_final-werks = lw_wb2_v_likp_lips2-werks_i.
gw_final-prctr = lw_wb2_v_likp_lips2-prctr_i.
gw_final-doc_ernam = lw_wb2_v_likp_lips2-ernam.
gw_final-odnno = lw_wb2_v_likp_lips2-xblnr.
gw_final-bukrs = p_ccode.
* Get Fiscal year
CALL FUNCTION 'GM_GET_FISCAL_YEAR'
EXPORTING
i_date = lw_wb2_v_likp_lips2-fkdat
i_fyv = gc_periv_v3
IMPORTING
e_fy = lv_gjahr
EXCEPTIONS
fiscal_year_does_not_exist = 1
06.10.2020 working with program 1

not_defined_for_date = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE 'Fiscal Year not found'(m03) TYPE 'I'.
ELSE.
gw_final-gjahr = lv_gjahr.
ENDIF.
READ TABLE gt_gstin INTO lw_gstin WITH KEY bukrs = gw_final-bukrs.
IF sy-subrc IS INITIAL.
gw_final-sup_gstin = lw_gstin-gstin.
ENDIF.
READ TABLE gt_kna1 INTO lw_kna1 WITH KEY kunnr = gw_final-kunrg BINARY SEARCH.
IF sy-subrc IS INITIAL.
gw_final-kunnr = lw_kna1-kunnr.
gw_final-name1 = lw_kna1-name1.
gw_final-ship_gstin = lw_kna1-stcd3.
ENDIF.
READ TABLE gt_doctyp INTO lw_doctyp WITH KEY bukrs = p_ccode
zmodule = gc_sd
fkart = gw_final-fkart.
IF sy-subrc IS INITIAL.
gw_final-einv = lw_doctyp-einv.
gw_final-eway = lw_doctyp-eway.
ENDIF.
gw_final-mod = gc_sd.
READ TABLE gt_wb2_v_likp_lips2 INTO lw_likp_lips2 WITH KEY vbeln = lw_wb2_v_likp_lips2-vbeln.
IF sy-subrc IS INITIAL.
lv_index = sy-tabix.
LOOP AT gt_wb2_v_likp_lips2 INTO lw_likp_lips2 FROM lv_index.
IF lw_likp_lips2-vbeln NE lw_wb2_v_likp_lips2-vbeln.
EXIT.
ENDIF.
gw_final-taxamt = gw_final-taxamt + lw_likp_lips2-netwr.
"IGST Tax amount
READ TABLE gt_konv INTO lw_konv WITH KEY knumv = lw_likp_lips2-knumv
kposn = lw_likp_lips2-posnr_i
kschl = gc_kschl_joig
BINARY SEARCH.
IF sy-subrc EQ 0.
gw_final-igst_amt = gw_final-igst_amt + lw_konv-kwert.
ENDIF.
"CGST Tax amount
READ TABLE gt_konv INTO lw_konv WITH KEY knumv = lw_likp_lips2-knumv
kposn = lw_likp_lips2-posnr_i
kschl = gc_kschl_jocg
BINARY SEARCH.
IF sy-subrc EQ 0.
gw_final-cgst_amt = gw_final-cgst_amt + lw_konv-kwert.
ENDIF.
"SGST Tax amount
READ TABLE gt_konv INTO lw_konv WITH KEY knumv = lw_likp_lips2-knumv
kposn = lw_likp_lips2-posnr_i
kschl = gc_kschl_josg
BINARY SEARCH.
IF sy-subrc IS NOT INITIAL.
READ TABLE gt_konv INTO lw_konv WITH KEY knumv = lw_likp_lips2-knumv
kposn = lw_likp_lips2-posnr_i
kschl = gc_kschl_joug
BINARY SEARCH.
ENDIF.
IF sy-subrc EQ 0.
gw_final-sgst_amt = gw_final-sgst_amt + lw_konv-kwert.
ENDIF.
06.10.2020 working with program 1

"CESS Tax amount


READ TABLE gt_konv INTO lw_konv WITH KEY knumv = lw_likp_lips2-knumv
kposn = lw_likp_lips2-posnr_i
kschl = gc_kschl_cess
BINARY SEARCH.
IF sy-subrc EQ 0.
gw_final-cess_amt = gw_final-cess_amt + lw_konv-kwert.
ENDIF.
ENDLOOP.
ENDIF.
gw_final-invval = gw_final-taxamt + gw_final-cgst_amt + gw_final-sgst_amt + gw_final-igst_amt + gw_final-cess_amt.
APPEND gw_final TO gt_final.
CLEAR : gw_final.
ENDLOOP.
ENDIF.
ENDFORM.
*& *
*& Form FETCH_DOMAIN_VALUES
*& *
* text
* *
* > p1 text
* < p2 text
* *
FORM fetch_domain_values .
CALL FUNCTION 'GET_DOMAIN_VALUES'
EXPORTING
domname = 'ZDOM_SUP_TYPE'
TABLES
values_tab = gt_supply_values
EXCEPTIONS
no_values_found = 1
OTHERS = 2.
IF sy-subrc = 0.
ENDIF.
CALL FUNCTION 'GET_DOMAIN_VALUES'
EXPORTING
domname = 'ZDOM_SUB_TYPE'
TABLES
values_tab = gt_sub_supply_values
EXCEPTIONS
no_values_found = 1
OTHERS = 2.
IF sy-subrc = 0.
ENDIF.
CALL FUNCTION 'GET_DOMAIN_VALUES'
EXPORTING
domname = 'ZDOM_EDOC_TYPE'
TABLES
values_tab = gt_doctyp_values
EXCEPTIONS
no_values_found = 1
OTHERS = 2.
IF sy-subrc = 0.
ENDIF.
CALL FUNCTION 'GET_DOMAIN_VALUES'
EXPORTING
domname = 'ZDOM_CANCEL_REASON'
TABLES
values_tab = gt_cancel_values
EXCEPTIONS
no_values_found = 1
OTHERS = 2.
06.10.2020 working with program 1

IF sy-subrc = 0.
ENDIF.
CALL FUNCTION 'GET_DOMAIN_VALUES'
EXPORTING
domname = 'ZDOM_T_MODE'
TABLES
values_tab = gt_t_mode_values
EXCEPTIONS
no_values_found = 1
OTHERS = 2.
IF sy-subrc = 0.
ENDIF.
CALL FUNCTION 'GET_DOMAIN_VALUES'
EXPORTING
domname = 'ZDOM_EXT_REASON'
TABLES
values_tab = gt_t_ext_reason_values
EXCEPTIONS
no_values_found = 1
OTHERS = 2.
IF sy-subrc = 0.
ENDIF.
CALL FUNCTION 'GET_DOMAIN_VALUES'
EXPORTING
domname = 'ZDOM_V_TYPE'
TABLES
values_tab = gt_v_type_values
EXCEPTIONS
no_values_found = 1
OTHERS = 2.
IF sy-subrc = 0.
ENDIF.
CALL FUNCTION 'GET_DOMAIN_VALUES'
EXPORTING
domname = 'ZDOM_CONSIGN_STS'
TABLES
values_tab = gt_t_consignment_status_values
EXCEPTIONS
no_values_found = 1
OTHERS = 2.
IF sy-subrc = 0.
ENDIF.
CALL FUNCTION 'GET_DOMAIN_VALUES'
EXPORTING
domname = 'ZDOM_TRANSIT_TYPE'
TABLES
values_tab = gt_t_transit_type_values
EXCEPTIONS
no_values_found = 1
OTHERS = 2.
IF sy-subrc = 0.
ENDIF.
CALL FUNCTION 'GET_DOMAIN_VALUES'
EXPORTING
domname = 'ZDOM_VEH_REASON'
TABLES
values_tab = gt_v_reason_values
EXCEPTIONS
no_values_found = 1
OTHERS = 2.
IF sy-subrc = 0.
ENDIF.
ENDFORM.
06.10.2020 working with program 1

*& *
*& Form POPUP_TO_CONFIRM_WITH_INPUT
*& *
* text
* *
* >P_VL_PROGRAM text
* >P_VL_FORMNAME text
* >P_VL_POPUP_TITLE text
* >P_VL_OKPUSHBUTTON text
* >P_VL_BUTTONICON text
* >P_LT_SVAL text
* *
FORM popup_to_confirm_with_input USING p_vl_program TYPE sy-repid
p_vl_formname TYPE char30
p_vl_popup_title TYPE char30
p_vl_okpushbutton TYPE svalbutton-buttontext
p_vl_buttonicon TYPE icon-name
p_lt_sval TYPE ty_sval.
CALL FUNCTION 'POPUP_GET_VALUES_USER_BUTTONS'
EXPORTING
formname = p_vl_formname
programname = p_vl_program
popup_title = p_vl_popup_title
ok_pushbuttontext = p_vl_okpushbutton
icon_ok_push = p_vl_buttonicon
TABLES
fields = p_lt_sval
EXCEPTIONS
error_in_fields = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
**************************************************************************************
*************************************************************************************
FORM calculate_tax USING i_knumv
i_posnr
i_kschl
CHANGING e_value
e_rate.
DATA:lv_advance TYPE kwert,
lw_konv LIKE LINE OF gt_konv.
CLEAR lv_advance.
READ TABLE gt_konv INTO lw_konv WITH KEY knumv = i_knumv
kposn = i_posnr
kschl = 'ZAGH'.
IF sy-subrc IS INITIAL.
lv_advance = lw_konv-kwert * -1.
ENDIF.
READ TABLE gt_konv INTO lw_konv WITH KEY knumv = i_knumv
kposn = i_posnr
kschl = i_kschl.
IF sy-subrc IS INITIAL.
e_rate = lw_konv-kbetr / 10.
IF lv_advance IS NOT INITIAL.
lv_advance = lv_advance * e_rate / 100.
ENDIF.
e_value = lw_konv-kwert + lv_advance.
ENDIF.
ENDFORM.
* *
***INCLUDE ZREP_EINV_EWAY_REPORT_STATUO01.
06.10.2020 working with program 1

* *
*& *
*& Module STATUS_9000 OUTPUT
*& *
* text
* *
MODULE status_9000 OUTPUT.
SET PF-STATUS '9000'.
SET TITLEBAR '9000'.
DATA: lt_variant TYPE disvariant,
lw_layout TYPE lvc_s_layo.
DATA:o_eventreceiver TYPE REF TO lcl_event.
CLEAR lw_layout.
lw_layout-zebra = space.
lw_layout-cwidth_opt = abap_true.
lw_layout-sel_mode = gc_lay_mode_a."'A'.
* Create Controls
IF gref_alv_container IS NOT BOUND.
CREATE OBJECT gref_alv_container
EXPORTING
container_name = 'CUST_ALV'.
CREATE OBJECT dg_dyndoc_id
EXPORTING
style = 'ALV_GRID'.
* Create Splitter for custom_container
CREATE OBJECT dg_splitter
EXPORTING
parent = gref_alv_container
rows = 2
columns = 1.
* Split the custom_container to two containers and move the reference
* to receiving containers g_parent_html and g_parent_grid
"i am allocating the space for grid and top of page
CALL METHOD dg_splitter->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = dg_parent_html.
CALL METHOD dg_splitter->get_container
EXPORTING
row = 2
column = 1
RECEIVING
container = dg_parent_grid.
"you can set the height of it
* Set height for g_parent_html
CALL METHOD dg_splitter->set_row_height
EXPORTING
id = 1
height = 20.
"from here as usual..you need to specify parent as splitter part
"which we alloted for grid
CREATE OBJECT gref_alv_grid
EXPORTING
i_parent = dg_parent_grid.
IF gref_alv_container IS BOUND.
* Populate Field Catalog
PERFORM get_fieldcatalog.
CREATE OBJECT go_obj.
IF go_obj IS BOUND.
SET HANDLER : go_obj->toolbar FOR gref_alv_grid,
go_obj->user_command FOR gref_alv_grid,
06.10.2020 working with program 1

go_obj->menu FOR gref_alv_grid,


go_obj->handle_top_of_page FOR gref_alv_grid,
go_obj->handle_hotspot_click FOR gref_alv_grid.
lt_variant-report = sy-repid.
lt_variant-username = sy-uname.
lt_variant-handle = 'GRID'.
CALL METHOD gref_alv_grid->set_table_for_first_display
EXPORTING
is_layout = lw_layout
is_variant = lt_variant
i_save = gc_alv_save_a
CHANGING
it_outtab = gt_final[]
it_fieldcatalog = gt_fieldcat[].
ENDIF.
ENDIF.
ELSE.
CALL METHOD gref_alv_grid->refresh_table_display
EXCEPTIONS
finished = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Table refresh error'(012) TYPE 'I'.
ENDIF.
ENDIF.
CALL METHOD gref_alv_grid->list_processing_events
EXPORTING
i_event_name = 'TOP_OF_PAGE'
i_dyndoc_id = dg_dyndoc_id.
ENDMODULE.
*& *
*& Form GET_FIELDCATALOG
*& *
* text
* *
* > p1 text
* < p2 text
* *
FORM get_fieldcatalog .
REFRESH: gt_fieldcat.
* Document
PERFORM fill_fieldcatalog USING 'E-Invoice Status'(086) 'ICON' 'GT_FINAL' '7' 'X'.
PERFORM fill_fieldcatalog USING 'E-Way Status'(102) 'EWAY_ICON' 'GT_FINAL' '7' 'X'.
PERFORM fill_fieldcatalog USING 'Supplier GSTIN'(063) 'SUP_GSTIN' 'GT_FINAL' '20' 'X'.
PERFORM fill_fieldcatalog USING 'Plant'(064) 'WERKS' 'GT_FINAL' '6' 'X'.
PERFORM fill_fieldcatalog USING 'Document Number'(065) 'VBELN' 'GT_FINAL' '15' 'X'.
PERFORM fill_fieldcatalog USING 'Document Date'(066) 'FKDAT' 'GT_FINAL' '15' 'X'.
PERFORM fill_fieldcatalog USING 'Doc Type'(067) 'FKART' 'GT_FINAL' '10' ''.
PERFORM fill_fieldcatalog USING 'Created By'(068) 'DOC_ERNAM' 'GT_FINAL' '12' ''.
PERFORM fill_fieldcatalog USING 'GST Invoice No'(069) 'ODNNO' 'GT_FINAL' '16' ''.
IF p_mod = gc_sd.
PERFORM fill_fieldcatalog USING 'Customer'(070) 'KUNNR' 'GT_FINAL' '12' ''.
PERFORM fill_fieldcatalog USING 'Customer Name'(071) 'NAME1' 'GT_FINAL' '20' ''.
PERFORM fill_fieldcatalog USING 'Customer GSTIN'(117) 'SHIP_GSTIN' 'GT_FINAL' '20' ''.
ELSEIF p_mod = gc_mm.
PERFORM fill_fieldcatalog USING 'Vendor'(072) 'KUNNR' 'GT_FINAL' '12' ''.
PERFORM fill_fieldcatalog USING 'Vendor Name'(073) 'NAME1' 'GT_FINAL' '20' ''.
ENDIF.
PERFORM fill_fieldcatalog USING 'Ship To'(074) 'SHIP_TO' 'GT_FINAL' '12' ''.
PERFORM fill_fieldcatalog USING 'Ship To Name'(075) 'SHIP_TO_NAME' 'GT_FINAL' '20' ''.
* Values
PERFORM fill_fieldcatalog USING 'Invoice Value'(076) 'INVVAL' 'GT_FINAL' '15' ''.
PERFORM fill_fieldcatalog USING 'Taxable Value'(077) 'TAXAMT' 'GT_FINAL' '15' ''.
06.10.2020 working with program 1

PERFORM fill_fieldcatalog USING 'CGST'(078) 'CGST_AMT' 'GT_FINAL' '15' ''.


PERFORM fill_fieldcatalog USING 'SGST'(079) 'SGST_AMT' 'GT_FINAL' '15' ''.
PERFORM fill_fieldcatalog USING 'IGST'(080) 'IGST_AMT' 'GT_FINAL' '15' ''.
PERFORM fill_fieldcatalog USING 'CESS'(081) 'CESS_AMT' 'GT_FINAL' '15' ''.
* E-Invoice
READ TABLE gt_doctyp TRANSPORTING NO FIELDS WITH KEY einv = abap_true.
IF sy-subrc IS INITIAL.
PERFORM fill_fieldcatalog USING 'Ack No'(082) 'ACK_NO' 'GT_FINAL' '15' ''.
PERFORM fill_fieldcatalog USING 'Ack Date'(083) 'ACK_DT' 'GT_FINAL' '15' ''.
PERFORM fill_fieldcatalog USING 'IRN'(084) 'IRN' 'GT_FINAL' '25' ''.
PERFORM fill_fieldcatalog USING 'Cancel Date'(085) 'CANC_DT' 'GT_FINAL' '12' ''.
PERFORM fill_fieldcatalog USING 'Error description'(087) 'EINV_ERROR' 'GT_FINAL' '50' ''.
PERFORM fill_fieldcatalog USING 'Created By'(088) 'ERNAM' 'GT_FINAL' '12' ''.
PERFORM fill_fieldcatalog USING 'Created Date'(089) 'ERDAT' 'GT_FINAL' '10' ''.
PERFORM fill_fieldcatalog USING 'Created Time'(090) 'ERZET' 'GT_FINAL' '8' ''.
ENDIF.
* E-Way Bill
READ TABLE gt_doctyp TRANSPORTING NO FIELDS WITH KEY eway = abap_true.
IF sy-subrc IS INITIAL.
PERFORM fill_fieldcatalog USING 'Transporter ID'(091) 'T_ID' 'GT_FINAL' '15' ''.
PERFORM fill_fieldcatalog USING 'Transporter Name'(092) 'T_NAME' 'GT_FINAL' '20' ''.
PERFORM fill_fieldcatalog USING 'Mode'(093) 'T_MODE' 'GT_FINAL' '5' ''.
PERFORM fill_fieldcatalog USING 'Document No'(094) 'T_DOC_NO' 'GT_FINAL' '15' ''.
PERFORM fill_fieldcatalog USING 'Document Date'(095) 'T_DATE' 'GT_FINAL' '12' ''.
* PERFORM fill_fieldcatalog USING 'Distance in KM' 'T_DISTANCE' 'GT_FINAL' '5' ''.
PERFORM fill_fieldcatalog USING 'Vehicle No'(096) 'V_NUMBER' 'GT_FINAL' '20' ''.
PERFORM fill_fieldcatalog USING 'Vehicle Type'(097) 'V_TYPE' 'GT_FINAL' '20' ''.
PERFORM fill_fieldcatalog USING 'E-Waybill No'(098) 'EWAY_NUM' 'GT_FINAL' '15' ''.
PERFORM fill_fieldcatalog USING 'E-Way date'(099) 'EWAY_DATE' 'GT_FINAL' '15' ''.
PERFORM fill_fieldcatalog USING 'Valid Upto'(100) 'EWAY_V_TO' 'GT_FINAL' '10' ''.
PERFORM fill_fieldcatalog USING 'Cancel Date'(101) 'EWAY_CANC_DT' 'GT_FINAL' '10' ''.
PERFORM fill_fieldcatalog USING 'Error description'(103) 'EWAY_ERROR' 'GT_FINAL' '50' ''.
PERFORM fill_fieldcatalog USING 'Created By'(104) 'EWAY_ERNAM' 'GT_FINAL' '12' ''.
PERFORM fill_fieldcatalog USING 'Created Date'(105) 'EWAY_ERDAT' 'GT_FINAL' '10' ''.
PERFORM fill_fieldcatalog USING 'Created Time'(106) 'EWAY_ERZET' 'GT_FINAL' '8' ''.
ENDIF.
ENDFORM.
*& *
*& Form FILL_FIELDCATALOG
*& *
* text
* *
* >P_0707 text
* >P_0708 text
* >P_0709 text
* >P_0710 text
* *
FORM fill_fieldcatalog USING VALUE(p_0707)
VALUE(p_0708)
VALUE(p_0709)
VALUE(p_0710)
VALUE(p_0711).
DATA: lw_fcat TYPE lvc_s_fcat.
CLEAR: lw_fcat.
lw_fcat-reptext = p_0707.
lw_fcat-fieldname = p_0708.
lw_fcat-ref_table = p_0709.
lw_fcat-outputlen = p_0710.
lw_fcat-key = p_0711.
IF lw_fcat-fieldname = 'ICON'.
lw_fcat-icon = 'X'.
ENDIF.
IF lw_fcat-fieldname EQ 'INVVAL' OR
06.10.2020 working with program 1

lw_fcat-fieldname EQ 'TAXAMT' OR
lw_fcat-fieldname EQ 'CGST_AMT' OR
lw_fcat-fieldname EQ 'SGST_AMT' OR
lw_fcat-fieldname EQ 'IGST_AMT' OR
lw_fcat-fieldname EQ 'CESS_AMT'.
lw_fcat-do_sum = 'X'.
ENDIF.
IF lw_fcat-fieldname = 'VBELN'.
lw_fcat-hotspot = 'X'.
ENDIF.
APPEND lw_fcat TO gt_fieldcat.
ENDFORM.
*& *
*& Module STATUS_9001 OUTPUT
*& *
* text
* *
MODULE status_9001 OUTPUT.
SET PF-STATUS '9001_STATUS'.
SET TITLEBAR '9001_TITLE'.
PERFORM set_distance.
PERFORM set_port_det.
ENDMODULE.
*& *
*& Form SET_DISTANCE
*& *
* text
* *
* > p1 text
* < p2 text
* *
FORM set_distance .
DATA:lw_index LIKE LINE OF gt_index,
lv_val TYPE xfeld.
FIELD-SYMBOLS <gw_final> TYPE ty_final.
PERFORM check_selected_data CHANGING lv_val.
IF lv_val IS INITIAL.
LOOP AT gt_index INTO lw_index.
READ TABLE gt_final ASSIGNING <gw_final> INDEX lw_index-index.
IF sy-subrc IS INITIAL AND <gw_final>-t_distance IS INITIAL.
IF <gw_final>-t_distance IS NOT INITIAL.
zst_einv_api_struct-transportation_distance = <gw_final>-t_distance.
ENDIF.
ENDIF.
zst_einv_api_struct-transporter_id = <gw_final>-t_id.
zst_einv_api_struct-transporter_name = <gw_final>-t_name.
zst_einv_api_struct-transportation_mode = <gw_final>-t_mode.
zst_einv_api_struct-transportation_distance = <gw_final>-t_distance.
zst_einv_api_struct-transporter_document_number = <gw_final>-t_doc_no.
CONCATENATE <gw_final>-t_date+6(4)
<gw_final>-t_date+3(2)
<gw_final>-t_date+0(2)
INTO zst_einv_api_struct-transporter_document_date.
zst_einv_api_struct-vehicle_number = <gw_final>-v_number.
zst_einv_api_struct-vehicle_type = <gw_final>-v_type.
IF zst_einv_api_struct-vehicle_type IS INITIAL.
zst_einv_api_struct-vehicle_type = gc_v_type_1.
ENDIF.
zst_einv_api_struct-reason_code_for_vehicle_updati = <gw_final>-v_reason_code.
zst_einv_api_struct-reason_for_vehicle_updation = <gw_final>-v_reason.
zst_einv_api_struct-remaining_distance = <gw_final>-t_r_distance.
zst_einv_api_struct-extend_validity_reason = <gw_final>-t_ext_valid_reason.
zst_einv_api_struct-extend_remarks = <gw_final>-t_ext_valid_remarks.
06.10.2020 working with program 1

zst_einv_api_struct-from_pincode = <gw_final>-t_from_pin.
zst_einv_api_struct-consignment_status = <gw_final>-t_consignment_status.
zst_einv_api_struct-transit_type = <gw_final>-t_transit_type.
zst_einv_api_struct-address_line1 = <gw_final>-t_address1.
zst_einv_api_struct-address_line2 = <gw_final>-t_address2.
zst_einv_api_struct-address_line3 = <gw_final>-t_address3.
zst_einv_api_struct-zport_code = <gw_final>-zport_code.
ENDLOOP.
ENDIF.
ENDFORM.
*& *
*& Form SET_PORT_DET
*& *
* text
* *
* > p1 text
* < p2 text
* *
FORM set_port_det .
DATA:lt_list TYPE vrm_values,
lw_list TYPE vrm_value,
lt_port TYPE TABLE OF ty_export,
ls_port TYPE ty_export.
CLEAR:lt_list,lt_port.
SELECT zport_code zport land1 zport_state
zport_address1 zport_address2
zport_place zport_pincode
FROM ztedoc_export INTO TABLE lt_port WHERE land1 = gc_land1_in..
IF sy-subrc IS INITIAL.
LOOP AT lt_port INTO ls_port.
lw_list-key = ls_port-zport_code.
lw_list-text = ls_port-zport.
APPEND lw_list TO lt_list.
ENDLOOP.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = 'ZST_EINV_API_STRUCT-ZPORT_CODE'
values = lt_list
EXCEPTIONS
id_illegal_name = 1
OTHERS = 2.
ENDIF.
ENDFORM.
* *
***INCLUDE ZREP_EINV_EWAY_REPORT_USER_I01.
* *
*& *
*& Module USER_COMMAND_9000 INPUT
*& *
* text
* *
MODULE user_command_9000 INPUT.
CASE sy-ucomm.
WHEN 'BACK' OR 'CANCEL' OR 'EXIT'.
PERFORM exit_program.
ENDCASE.
ENDMODULE.
*& *
*& Form CHECK_SELECTED_DATA
*& *
* text
* *
* > p1 text
06.10.2020 working with program 1

* < p2 text
* *
FORM check_selected_data CHANGING p_val.
DATA:
lv_line TYPE i.
CLEAR:gt_index,gt_row.
CALL METHOD gref_alv_grid->get_selected_rows
IMPORTING
et_index_rows = gt_index
et_row_no = gt_row.
DESCRIBE TABLE gt_row LINES lv_line.
IF lv_line IS INITIAL.
p_val = abap_true.
MESSAGE 'Please select atleast one document'(013) TYPE 'I'.
EXIT.
ENDIF.
ENDFORM.
FORM set_selected_data.
IF gt_index IS NOT INITIAL.
CALL METHOD gref_alv_grid->set_selected_rows
EXPORTING
it_index_rows = gt_index
it_row_no = gt_row.
ENDIF.
ENDFORM.
*& *
*& Form EINVOICE_GENERATE
*& *
* text
* *
* > p1 text
* < p2 text
* *
FORM einvoice_generate .
DATA: lw_index TYPE lvc_s_row,
lv_val TYPE xfeld,
lw_token TYPE string,
lw_return TYPE string,
wa_return TYPE string,
lt_messages TYPE bapiret2_t,
lw_message TYPE bapiret2,
lt_show_message TYPE esp1_message_tab_type,
lw_show_message LIKE LINE OF lt_show_message,
lt_invref TYPE TABLE OF j_1ig_invrefnum,
lw_invref TYPE j_1ig_invrefnum,
lt_einv_details TYPE TABLE OF zteinv_details,
lw_einv_details TYPE zteinv_details,
lw_kna1 TYPE ty_kna1,
lw_t005u TYPE ty_t005u,
lw_adrc TYPE ty_adrc,
lw_adr6 TYPE ty_adr6,
lw_export TYPE ty_export,
lw_vbfa TYPE ty_vbfa,
lw_wb2_v_vbak_vbap2 TYPE ty_wb2_v_vbak_vbap2,
lv_reverse_charge TYPE i VALUE 1,
*Seller Details
lw_t001w TYPE ty_t001w1,
lw_adrc_s TYPE ty_adrc,
lw_t005u_s TYPE ty_t005u,
lw_adr6_s TYPE ty_adr6,
lw_wb2_v_vbrk_vbrp2 TYPE ty_wb2_v_vbrk_vbrp2,
lw_bkpfm TYPE ty_bkpf1,
lw_bseg TYPE ty_bseg1,
06.10.2020 working with program 1

lw_marc TYPE ty_marc,


lv_export TYPE xfeld,
*Dispatch and Ship Details
lw_likp TYPE ty_likp,
lw_kna1_d TYPE ty_kna1,
lw_t005u_d TYPE ty_t005u,
lw_adrc_d TYPE ty_adrc,
lt_lines TYPE STANDARD TABLE OF tline,
lw_lines TYPE tline,
lv_index TYPE sy-tabix,
lw_einv_api_hdr TYPE zst_einv_api_struct,
lw_einv_api_itm TYPE zst_einv_api_struct_itm,
lw_einv_api_itm1 TYPE zst_einv_api_struct_itm,
lw_einv_api_itm2 TYPE zst_einv_api_struct_itm,
ls_doctyp TYPE zveinv_doctyp,
ls_values TYPE dd07v,
lv_count TYPE i,
lt_api_hdr TYPE ztt_einv_api_struct,
lt_api_itm TYPE ztt_einv_api_struct_itm,
lv_answer TYPE c,
lw_usrgstin TYPE ty_api,
lw_vbpa TYPE ty_vbpa,
lw_konv TYPE ty_konv,
lw_gstrate TYPE kbetr,
ls_doc_uom TYPE ty_doc_uom,
lv_output_uom TYPE meins,
lw_doctyp TYPE ty_doctyp,
lw_tvarvc TYPE ty_tvarvc,
lv_tdname TYPE thead-tdname,
lv_unit_price TYPE dmbtr,
lv_exp_curr TYPE xfeld,
lv_dmbtr TYPE dmbtr,
lv_rate TYPE dmbtr,
lv_item_amt TYPE dmbtr,
lv_roundoff TYPE dmbtr,
lw_wc TYPE zwc_inv.
DATA: lv_total_assessable_value TYPE wertv13,
lv_total_cgst_value TYPE wertv13,
lv_total_sgst_value TYPE wertv13,
lv_total_igst_value TYPE wertv13,
lv_total_invoice_value TYPE wertv13,
lv_total_cess_value TYPE wertv13,
lv_total_cess_nonadvol_value TYPE wertv13.
DATA: lv_supply_type TYPE char10 VALUE 'O',
lv_document_type TYPE char10 VALUE 1,
lv_sub_supply_type TYPE char10 VALUE 1,
lv_document_number TYPE i VALUE 2,
lv_date TYPE sy-datum.
FIELD-SYMBOLS <gw_final> TYPE ty_final.
CLEAR: lt_messages,lt_invref,lt_api_hdr,lt_api_itm,gt_einv_api_hdr,gt_einv_api_itm.
PERFORM check_selected_data CHANGING lv_val.
IF lv_val IS INITIAL.
PERFORM call_popup USING text-t20 text-t21
CHANGING lv_answer.
IF lv_answer = '1'.
LOOP AT gt_index INTO lw_index.
CLEAR:lw_wb2_v_vbrk_vbrp2.
READ TABLE gt_final INTO gw_final INDEX lw_index-index.
IF sy-subrc IS INITIAL AND gw_final-irn IS INITIAL AND gw_final-einv = abap_true.
IF p_mod = gc_sd.
READ TABLE gt_wb2_v_vbrk_vbrp2 INTO lw_wb2_v_vbrk_vbrp2 WITH KEY vbeln = gw_final-vbeln.
IF sy-subrc = 0.
IF lw_wb2_v_vbrk_vbrp2-fksto NE abap_true.
06.10.2020 working with program 1

lv_index = sy-tabix.
lv_total_assessable_value = 0.
lv_total_cgst_value = 0.
lv_total_sgst_value = 0.
lv_total_igst_value = 0.
lv_total_invoice_value = 0.
lv_total_cess_value = 0.
lv_total_cess_nonadvol_value = 0.
CLEAR:lw_einv_api_hdr-total_assessable_value,lw_einv_api_hdr-total_cgst_value,lw_einv_api_hdr-total_sgst_value,lw_einv_api_hdr-total_igst_value,
lw_einv_api_hdr-total_invoice_value,lw_einv_api_hdr-total_cess_value,lw_einv_api_hdr-total_cess_nonadvol_value.
CLEAR: lv_total_assessable_value,lv_total_igst_value, lv_total_cgst_value,lv_total_sgst_value, lv_total_cess_value,lv_total_cess_nonadvol_value, lv_total_invoice_value.
LOOP AT gt_wb2_v_vbrk_vbrp2 INTO lw_wb2_v_vbrk_vbrp2 FROM lv_index.
IF lw_wb2_v_vbrk_vbrp2-vbeln NE gw_final-vbeln.
EXIT.
ENDIF.
lw_einv_api_hdr-vbeln = lw_wb2_v_vbrk_vbrp2-vbeln.
lw_einv_api_hdr-bukrs = lw_wb2_v_vbrk_vbrp2-bukrs.
lw_einv_api_hdr-doc_year = gw_final-gjahr.
lw_einv_api_hdr-doc_type = lw_wb2_v_vbrk_vbrp2-fkart.
*Data to send to the API IN JSON Scheme
READ TABLE gt_api INTO lw_usrgstin WITH KEY apiid = gc_apiid_usrgstin.
IF sy-subrc IS INITIAL.
lw_einv_api_hdr-user_gstin = lw_usrgstin-apiprov.
ELSE.
lw_einv_api_hdr-user_gstin = gw_final-sup_gstin.
ENDIF.
CONCATENATE '"' lw_einv_api_hdr-user_gstin '"' INTO lw_einv_api_hdr-user_gstin.
lw_einv_api_hdr-supply_type = gc_sup_type_b2b.
CASE lv_reverse_charge.
WHEN 1.
lw_einv_api_hdr-charge_type = gc_charge_n.
WHEN 2.
lw_einv_api_hdr-charge_type = gc_charge_y.
ENDCASE.
lw_einv_api_hdr-ecommerce_gstin = '""'.
CASE lv_document_number.
WHEN 1. "Billing Number as same as ODN
lw_einv_api_hdr-document_number = lw_wb2_v_vbrk_vbrp2-vbeln.
WHEN 2. "ODN
lw_einv_api_hdr-document_number = lw_wb2_v_vbrk_vbrp2-xblnr.
ENDCASE.
SHIFT lw_einv_api_hdr-document_number LEFT DELETING LEADING '0'.
IF lw_wb2_v_vbrk_vbrp2-fkdat IS NOT INITIAL.
CONCATENATE lw_wb2_v_vbrk_vbrp2-fkdat+6(2) '/'
lw_wb2_v_vbrk_vbrp2-fkdat+4(2) '/'
lw_wb2_v_vbrk_vbrp2-fkdat+0(4)
INTO lw_einv_api_hdr-document_date. "Required "Document Date "[2][0][1-2][0-9]-[0-1][0-9]-[0-3][0-9]" Y
ENDIF.
READ TABLE gt_doctyp INTO lw_doctyp WITH KEY fkart = lw_wb2_v_vbrk_vbrp2-fkart
bukrs = lw_wb2_v_vbrk_vbrp2-bukrs
zmodule = gc_sd.
IF sy-subrc = 0.
lw_einv_api_hdr-document_type = lw_doctyp-edoc_type.
ELSE.
lw_einv_api_hdr-document_type = gc_docty_inv.
ENDIF.
CONCATENATE '"' lw_einv_api_hdr-document_type '"' INTO lw_einv_api_hdr-document_type.
CONCATENATE '"' lw_einv_api_hdr-document_number '"' INTO lw_einv_api_hdr-document_number.
CONCATENATE '"' lw_einv_api_hdr-document_date '"' INTO lw_einv_api_hdr-document_date.
**Begin of seller_details
CLEAR: lw_t001w, lw_adrc_s, lw_adr6_s.
READ TABLE gt_t001w INTO lw_t001w WITH KEY werks = lw_wb2_v_vbrk_vbrp2-werks_i BINARY SEARCH.
IF sy-subrc EQ 0.
06.10.2020 working with program 1

READ TABLE gt_adrc_s INTO lw_adrc_s WITH KEY addrnumber = lw_t001w-adrnr.


READ TABLE gt_adr6_s INTO lw_adr6_s WITH KEY addrnumber = lw_adrc_s-addrnumber.
READ TABLE gt_api INTO lw_usrgstin WITH KEY apiid = gc_apiid_usrgstin.
IF sy-subrc IS INITIAL.
lw_einv_api_hdr-gstin_s = lw_usrgstin-apiprov.
ELSE.
lw_einv_api_hdr-gstin_s = gw_final-sup_gstin.
ENDIF.
CONCATENATE '"' lw_einv_api_hdr-gstin_s '"' INTO lw_einv_api_hdr-gstin_s.
CONCATENATE '"' lw_t001w-name1 '"' INTO lw_einv_api_hdr-legal_name_s . "Legalname Y "Required
CONCATENATE '"' lw_t001w-name1 '"' INTO lw_einv_api_hdr-trade_name_s . "Tradename N
CONCATENATE '"' lw_t001w-name2 '"' INTO lw_einv_api_hdr-address1_s . "Building no. y "Required
CONCATENATE '"' lw_t001w-stras '"' INTO lw_einv_api_hdr-address2_s . "Building name N
CONCATENATE '"' lw_t001w-ort01 '"' INTO lw_einv_api_hdr-location_s . "Location Y "Required
lw_einv_api_hdr-pincode_s = lw_t001w-pstlz . "Pincode Y "Required
CLEAR:lw_t005u_s.
READ TABLE gt_t005u_s INTO lw_t005u_s WITH KEY bland = lw_t001w-regio.
IF sy-subrc EQ 0.
TRANSLATE lw_t005u_s-bezei TO UPPER CASE.
CONCATENATE '"' lw_t005u_s-bezei '"' INTO lw_einv_api_hdr-state_code_s . "State code Y "Required
ENDIF.
CONCATENATE '"' lw_adrc_s-tel_number+0(10) '"' INTO lw_einv_api_hdr-phone_number_s. "Phone or Mobile No. N
CONCATENATE '"' lw_adr6_s-smtp_addr '"' INTO lw_einv_api_hdr-email_s. "Email ID "Email-Id N
ENDIF.
**End of seller_details
**Begin of buyer_details
CLEAR:lw_kna1, lw_adrc, lw_adr6.
READ TABLE gt_vbpa INTO lw_vbpa WITH KEY vbeln = lw_wb2_v_vbrk_vbrp2-vbeln
parvw = gc_parvw_re
BINARY SEARCH.
IF sy-subrc = 0.
READ TABLE gt_kna1 INTO lw_kna1 WITH KEY kunnr = lw_vbpa-kunnr BINARY SEARCH.
IF sy-subrc EQ 0.
READ TABLE gt_adrc INTO lw_adrc WITH KEY addrnumber = lw_kna1-adrnr.
READ TABLE gt_adr6 INTO lw_adr6 WITH KEY addrnumber = lw_adrc-addrnumber.
CONCATENATE '"' lw_kna1-stcd3 '"' INTO lw_einv_api_hdr-gstin_b .
CONCATENATE '"' lw_kna1-name1 '"' INTO lw_einv_api_hdr-legal_name_b.
CONCATENATE '"' lw_kna1-name1 '"' INTO lw_einv_api_hdr-trade_name_b .
CONCATENATE '"' lw_kna1-name1 '"' INTO lw_einv_api_hdr-address1_b.
CONCATENATE '"' lw_kna1-name2 '"' INTO lw_einv_api_hdr-address2_b.
CONCATENATE '"' lw_kna1-ort01 '"' INTO lw_einv_api_hdr-location_b.
lw_einv_api_hdr-pincode_b = lw_kna1-pstlz.
lw_einv_api_hdr-place_of_supply_b = lw_kna1-regio.
CONCATENATE '"' lw_einv_api_hdr-place_of_supply_b '"' INTO lw_einv_api_hdr-place_of_supply_b.
CLEAR:lw_t005u.
READ TABLE gt_t005u INTO lw_t005u WITH KEY bland = lw_kna1-regio.
IF sy-subrc EQ 0.
TRANSLATE lw_t005u-bezei TO UPPER CASE.
CONCATENATE '"' lw_t005u-bezei '"' INTO lw_einv_api_hdr-state_code_b.
lw_einv_api_hdr-place_of_supply_b = lw_einv_api_hdr-state_code_b. "State code Y
ENDIF.
CONCATENATE '"' lw_adrc-tel_number+0(10) '"' INTO lw_einv_api_hdr-phone_number_b. "Phone or Mobile No. N
CONCATENATE '"' lw_adr6-smtp_addr '"' INTO lw_einv_api_hdr-email_b.
IF lw_t001w-land1 NE lw_kna1-land1.
lw_einv_api_hdr-gstin_b = gc_gstin_urp.
READ TABLE gt_export INTO lw_export WITH KEY zport_code = gw_final-zport_code.
IF sy-subrc IS INITIAL.
CONCATENATE '"' lw_export-zport_address1 '"' INTO lw_einv_api_hdr-address1_b.
CONCATENATE '"' lw_export-zport_address2 '"' INTO lw_einv_api_hdr-address2_b.
CONCATENATE '"' lw_export-zport_place '"' INTO lw_einv_api_hdr-location_b.
lw_einv_api_hdr-pincode_b = lw_export-zport_pincode.
CLEAR:lw_t005u.
READ TABLE gt_t005u INTO lw_t005u WITH KEY bland = lw_export-zport_state.
06.10.2020 working with program 1

IF sy-subrc EQ 0.
TRANSLATE lw_t005u-bezei TO UPPER CASE.
CONCATENATE '"' lw_t005u-bezei '"' INTO lw_einv_api_hdr-state_code_b.
ENDIF.
ENDIF.
lw_einv_api_hdr-pincode_b = '999999'.
lw_einv_api_hdr-place_of_supply_b = gc_export_place.
lw_einv_api_hdr-state_code_b = gc_exp_state.
ENDIF.
ENDIF.
ENDIF.
**End of buyer_details
*begin of dispatch_details
CONCATENATE '"' lw_t001w-name1 '"' INTO lw_einv_api_hdr-comapny_name_d.
CONCATENATE '"' lw_t001w-name2 '"' INTO lw_einv_api_hdr-address1_d .
CONCATENATE '"' lw_t001w-stras '"' INTO lw_einv_api_hdr-address2_d .
CONCATENATE '"' lw_t001w-ort01 '"' INTO lw_einv_api_hdr-location_d .
IF lw_t001w-pstlz IS NOT INITIAL.
lw_einv_api_hdr-pincode_d = lw_t001w-pstlz .
ENDIF.
CLEAR:lw_t005u_d.
READ TABLE gt_t005u_s INTO lw_t005u_s WITH KEY bland = lw_t001w-regio.
IF sy-subrc EQ 0.
TRANSLATE lw_t005u_s-bezei TO UPPER CASE.
CONCATENATE '"' lw_t005u_s-bezei '"' INTO lw_einv_api_hdr-state_code_d .
ENDIF.
*begin of dispatch_details.
*
**Begin of ship_details
CLEAR:lw_vbpa.
READ TABLE gt_vbpa INTO lw_vbpa WITH KEY vbeln = lw_wb2_v_vbrk_vbrp2-vbeln
parvw = gc_parvw_we
BINARY SEARCH.
IF sy-subrc EQ 0.
CLEAR:lw_kna1_d.
READ TABLE gt_kna1 INTO lw_kna1_d WITH KEY kunnr = lw_vbpa-kunnr BINARY SEARCH.
IF sy-subrc EQ 0.
CONCATENATE '"' lw_kna1_d-stcd3 '"' INTO lw_einv_api_hdr-gstin_sh .
CONCATENATE '"' lw_kna1_d-name1 '"' INTO lw_einv_api_hdr-legal_name_sh.
CONCATENATE '"' lw_kna1_d-name1 '"' INTO lw_einv_api_hdr-trade_name_sh. CONCATENATE '"' lw_kna1_d-name2 '"'
CONCATENATE '"' lw_kna1_d-stras '"' INTO lw_einv_api_hdr-address1_sh .
CONCATENATE '"' lw_kna1_d-name2 '"' INTO lw_einv_api_hdr-address2_sh .
IF lw_kna1_d-name2 IS NOT INITIAL AND lw_kna1_d-stras IS INITIAL.
lw_einv_api_hdr-address1_sh = lw_einv_api_hdr-address2_sh .
ENDIF.
CONCATENATE '"' lw_kna1_d-ort01 '"' INTO lw_einv_api_hdr-location_sh .
IF lw_kna1_d-pstlz IS NOT INITIAL.
lw_einv_api_hdr-pincode_sh = lw_einv_api_hdr-pincode_b .
ENDIF.
CLEAR:lw_t005u_d.
READ TABLE gt_t005u INTO lw_t005u_d WITH KEY bland = lw_kna1_d-regio.
IF sy-subrc EQ 0.
TRANSLATE lw_t005u_d-bezei TO UPPER CASE.
lw_einv_api_hdr-state_code_sh = lw_einv_api_hdr-state_code_b.
ENDIF.
CLEAR lv_export.
IF lw_t001w-land1 NE lw_kna1_d-land1.
lv_export = abap_true.
lw_einv_api_hdr-gstin_sh = gc_gstin_urp.
READ TABLE gt_export INTO lw_export WITH KEY zport_code = gw_final-zport_code.
IF sy-subrc IS INITIAL.
CONCATENATE '"' lw_export-zport_address1 '"' INTO lw_einv_api_hdr-address1_sh.
CONCATENATE '"' lw_export-zport_address2 '"' INTO lw_einv_api_hdr-address2_sh.
06.10.2020 working with program 1

CONCATENATE '"' lw_export-zport_place '"' INTO lw_einv_api_hdr-location_sh.


lw_einv_api_hdr-pincode_sh = lw_export-zport_pincode.
CLEAR:lw_t005u_d.
READ TABLE gt_t005u INTO lw_t005u_d WITH KEY bland = lw_export-zport_state.
IF sy-subrc EQ 0.
TRANSLATE lw_t005u_d-bezei TO UPPER CASE.
CONCATENATE '"' lw_t005u_d-bezei '"' INTO lw_einv_api_hdr-state_code_sh.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
*End of ship_details
IF lw_kna1-kunnr NE lw_kna1_d-kunnr .
lw_einv_api_hdr-transaction_type = gc_ttype_shg.
ELSEIF lw_kna1-kunnr EQ lw_kna1_d-kunnr.
lw_einv_api_hdr-transaction_type = gc_ttype_reg.
ENDIF.
*Begin of export_details
IF lw_t001w-land1 NE lw_kna1-land1. "Seller and Buyer country is different, then its export
lw_einv_api_hdr-supply_type = gc_sup_type_expwp.
lw_einv_api_hdr-ship_bill_number = lw_einv_api_hdr-document_number.
lw_einv_api_hdr-ship_bill_date = lw_einv_api_hdr-document_date.
CONCATENATE '"' lw_kna1-land1 '"' INTO lw_einv_api_hdr-country_code.
CONCATENATE '"' lw_wb2_v_vbrk_vbrp2-waerk '"' INTO lw_einv_api_hdr-foreign_currency.
CONCATENATE '"' ' ' '"' INTO lw_einv_api_hdr-refund_claim.
CONCATENATE '"' ' ' '"' INTO lw_einv_api_hdr-port_code .
ELSE.
CONCATENATE '"' ' ' '"' INTO lw_einv_api_hdr-ship_bill_number.
CONCATENATE '"' ' ' '"' INTO lw_einv_api_hdr-ship_bill_date.
CONCATENATE '"' ' ' '"' INTO lw_einv_api_hdr-country_code.
CONCATENATE '"' ' ' '"' INTO lw_einv_api_hdr-foreign_currency.
CONCATENATE '"' ' ' '"' INTO lw_einv_api_hdr-refund_claim.
CONCATENATE '"' ' ' '"' INTO lw_einv_api_hdr-port_code .
ENDIF.
*End of export_details
**Begin of payment_details
CONCATENATE '"' ' ' '"' INTO lw_einv_api_hdr-bank_account_number.
CONCATENATE ' ' '0' ' ' INTO lw_einv_api_hdr-paid_balance_amount.
CONCATENATE ' ' '0' ' ' INTO lw_einv_api_hdr-credit_days.
CONCATENATE '"' ' ' '"' INTO lw_einv_api_hdr-credit_transfer.
CONCATENATE '"' ' ' '"' INTO lw_einv_api_hdr-direct_debit.
CONCATENATE '"' ' ' '"' INTO lw_einv_api_hdr-branch_or_ifsc.
CONCATENATE '"' ' ' '"' INTO lw_einv_api_hdr-payment_mode.
CONCATENATE '"' ' ' '"' INTO lw_einv_api_hdr-payee_name.
CONCATENATE '"' ' ' '"' INTO lw_einv_api_hdr-payment_due_date.
CONCATENATE '"' ' ' '"' INTO lw_einv_api_hdr-payment_instruction .
CONCATENATE '"' ' ' '"' INTO lw_einv_api_hdr-payment_term.
**End of payment_details
lv_tdname = gw_final-vbeln.
CALL FUNCTION 'READ_TEXT'
EXPORTING
client = sy-mandt
id = gc_tdid_0002
language = sy-langu
name = lv_tdname
object = gc_tobject_vbbk
TABLES
lines = lt_lines
EXCEPTIONS
id = 1
language = 2
name = 3
06.10.2020 working with program 1

not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF sy-subrc <> 0.
* Implement suitable error handling here
CONCATENATE '"' '' '"' INTO lw_einv_api_hdr-invoice_remarks. "Required
ELSE.
READ TABLE lt_lines INTO lw_lines INDEX 1.
CONCATENATE '"' lw_lines-tdline '"' INTO lw_einv_api_hdr-invoice_remarks. "Required
ENDIF.
*Begin of reference_details
lw_einv_api_hdr-invoice_period_start_date = lw_einv_api_hdr-document_date.
lw_einv_api_hdr-invoice_period_end_date = lw_einv_api_hdr-document_date.
**Begin of preceding_document_details
lw_einv_api_hdr-reference_of_original_invoice = lw_einv_api_hdr-document_number.
lw_einv_api_hdr-preceding_invoice_date = lw_einv_api_hdr-document_date.
lw_einv_api_hdr-other_reference = '""'.
*End of preceding_document_details
*End of reference_details
*Begin of contract Details,
CLEAR: lw_vbfa, lw_wb2_v_vbak_vbap2.
READ TABLE gt_vbfa INTO lw_vbfa WITH KEY vbeln = gw_final-vbeln.
IF sy-subrc EQ 0.
READ TABLE gt_wb2_v_vbak_vbap2 INTO lw_wb2_v_vbak_vbap2 WITH KEY vbeln = lw_vbfa-vbelv
posnr_i = lw_vbfa-posnv
BINARY SEARCH.
IF sy-subrc EQ 0.
CONCATENATE '"' lw_wb2_v_vbak_vbap2-vbeln '"' INTO lw_einv_api_hdr-receipt_advice_number .
IF lw_wb2_v_vbak_vbap2-audat IS NOT INITIAL.
CONCATENATE '"' lw_wb2_v_vbak_vbap2-audat+6(2) '/'
lw_wb2_v_vbak_vbap2-audat+4(2) '/'
lw_wb2_v_vbak_vbap2-audat+0(4)
'"' INTO lw_einv_api_hdr-receipt_advice_date .
ENDIF.
CONCATENATE '"' lw_wb2_v_vbrk_vbrp2-charg_i '"' INTO lw_einv_api_hdr-batch_reference_number.
CONCATENATE '"' lw_wb2_v_vbak_vbap2-bname '"' INTO lw_einv_api_hdr-contract_reference_number.
CONCATENATE '"' lw_wb2_v_vbak_vbap2-ihrez '"' INTO lw_einv_api_hdr-other_reference_c.
lw_einv_api_hdr-project_reference_number = '""'.
CONCATENATE '"' lw_wb2_v_vbak_vbap2-bstnk '"' INTO lw_einv_api_hdr-vendor_po_reference_number.
IF lw_wb2_v_vbak_vbap2-bstdk IS NOT INITIAL.
CONCATENATE '"' lw_wb2_v_vbak_vbap2-bstdk+6(2) '/'
lw_wb2_v_vbak_vbap2-bstdk+4(2) '/'
lw_wb2_v_vbak_vbap2-bstdk+0(4)
'"' INTO lw_einv_api_hdr-vendor_po_reference_date.
ELSE.
lw_einv_api_hdr-vendor_po_reference_date = '""'.
ENDIF.
"End of contract_details
ENDIF.
ENDIF.
*Begin of'"additional_document_details"
lw_einv_api_hdr-supporting_document_url = '""'.
lw_einv_api_hdr-supporting_document = '""'.
lw_einv_api_hdr-additional_information = '""'.
*End of'"additional_document_details"
*Begin of value_details
********************* dafault all values to 0 ******************************
lw_einv_api_hdr-total_assessable_value = '0'.
lw_einv_api_hdr-total_cgst_value = '0'.
lw_einv_api_hdr-total_sgst_value = '0'.
lw_einv_api_hdr-total_igst_value = '0'.
06.10.2020 working with program 1

lw_einv_api_hdr-total_cess_value = '0'.
lw_einv_api_hdr-total_cess_nonadvol_value = '0'.
lw_einv_api_hdr-total_invoice_value = '0'.
lw_einv_api_hdr-total_cess_value_of_state = '0'.
lw_einv_api_hdr-round_off_amount = '0'.
lw_einv_api_hdr-total_invoice_value_additional = '0'.
lw_einv_api_hdr-total_other_charge = '0'.
********************* dafault all values to 0 ******************************
lw_einv_api_hdr-total_assessable_value = '1'. "Required
****************************************************************************************************************************************************
*Begin of item_list
********************* dafault all values to 0 ******************************
lw_einv_api_itm-quantity = '0'.
lw_einv_api_itm-free_quantity = '0'.
lw_einv_api_itm-unit_price = '0'.
lw_einv_api_itm-total_amount = '0'.
lw_einv_api_itm-pre_tax_value = '0'.
lw_einv_api_itm-discount = '0'.
lw_einv_api_itm-other_charge = '0'.
lw_einv_api_itm-gst_rate = '0'.
lw_einv_api_itm-igst_amount = '0'.
lw_einv_api_itm-cgst_amount = '0'.
lw_einv_api_itm-sgst_amount = '0'.
lw_einv_api_itm-cess_rate = '0'.
lw_einv_api_itm-cess_amount = '0'.
lw_einv_api_itm-cess_nonadvol_value = '0'.
lw_einv_api_itm-state_cess_rate = '0'.
lw_einv_api_itm-state_cess_amount = '0'.
lw_einv_api_itm-state_cess_nonadvol_amount = '0'.
lw_einv_api_itm-total_item_value = '0'.
********************* dafault all values to 0 ******************************
* check for export currency
CLEAR lv_exp_curr.
IF lw_wb2_v_vbrk_vbrp2-waerk NE 'INR'.
lv_exp_curr = abap_true.
ENDIF.
lw_einv_api_itm-bukrs = lw_wb2_v_vbrk_vbrp2-bukrs.
lw_einv_api_itm-doc_year = gw_final-gjahr.
lw_einv_api_itm-doc_type = lw_wb2_v_vbrk_vbrp2-fkart.
lw_einv_api_itm-document_type = lw_wb2_v_vbrk_vbrp2-fkart .
lw_einv_api_itm-document_number = lw_einv_api_hdr-document_number .
SHIFT lw_einv_api_itm-document_number LEFT DELETING LEADING '0'.
IF lw_wb2_v_vbrk_vbrp2-fkdat IS NOT INITIAL.
CONCATENATE lw_wb2_v_vbrk_vbrp2-fkdat+6(2) '/'
lw_wb2_v_vbrk_vbrp2-fkdat+4(2) '/'
lw_wb2_v_vbrk_vbrp2-fkdat+0(4)
INTO lw_einv_api_itm-document_date.
ENDIF.
CONCATENATE '"' lw_einv_api_itm-document_type '"' INTO lw_einv_api_itm-document_type.
CONCATENATE '"' lw_einv_api_itm-document_date '"' INTO lw_einv_api_itm-document_date.
CONCATENATE '"' lw_wb2_v_vbrk_vbrp2-posnr_i '"' INTO lw_einv_api_itm-item_serial_number .
REPLACE ALL OCCURRENCES OF '"' IN lw_wb2_v_vbrk_vbrp2-arktx_i WITH space.
CONCATENATE '"' lw_wb2_v_vbrk_vbrp2-arktx_i '"' INTO lw_einv_api_itm-product_description .
CONCATENATE '"' lw_wb2_v_vbrk_vbrp2-land1 '"' INTO lw_einv_api_itm-country_origin."'"52"'.
"get billing item text object VBBP
CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
EXPORTING
input = lw_wb2_v_vbrk_vbrp2-matnr_i
IMPORTING
output = lw_wb2_v_vbrk_vbrp2-matnr_i.
CONCATENATE '"' lw_wb2_v_vbrk_vbrp2-matnr_i '"' INTO lw_einv_api_itm-order_line_reference.
CONCATENATE '"' lw_wb2_v_vbrk_vbrp2-matnr_i '"' INTO lw_einv_api_itm-product_serial_number.
* '"batch details":' '{'
06.10.2020 working with program 1

CONCATENATE '"' lw_wb2_v_vbrk_vbrp2-charg_i '"' INTO lw_einv_api_itm-name." = '"aaa"'. "Required


lw_einv_api_itm-expiry_date = '" "'.
lw_einv_api_itm-warranty_date = '" "'.
*Begin of attribute_details"
lw_einv_api_itm-item_attribute_details = gc_attr_einv.
lw_einv_api_itm-item_attribute_value = gc_attr_einv.
*End of of attribute_details"
lw_einv_api_itm-free_quantity = '0'.
lw_einv_api_itm-bar_code = '""'.
READ TABLE gt_wc INTO lw_wc WITH KEY vbeln = lw_wb2_v_vbrk_vbrp2-vbeln.
IF sy-subrc IS INITIAL.
CLEAR:lw_einv_api_itm1,lv_count.
LOOP AT gt_wc INTO lw_wc WHERE vbeln = lw_wb2_v_vbrk_vbrp2-vbeln.
lw_einv_api_itm1 = lw_einv_api_itm.
lv_count = lv_count + 1.
IF lv_count = 1.
lw_einv_api_itm1-is_service = gc_service_n.
lw_einv_api_itm1-item_serial_number = '"1"'.
ELSEIF lv_count = 2.
lw_einv_api_itm1-is_service = gc_service_y.
lw_einv_api_itm1-item_serial_number = '"2"'.
ENDIF.
CONCATENATE '"' lw_wc-hsn_code '"' INTO lw_einv_api_itm1-hsn_code.
CONCATENATE '"' lw_wc-itm_desc '"' INTO lw_einv_api_itm1-product_description .
lw_einv_api_itm1-quantity = '1'.
lw_einv_api_itm1-unit = '"NOS"'.
lw_einv_api_itm1-unit_price = '1.00'.
lw_einv_api_itm1-total_amount = lw_wc-value.
CONDENSE:lw_einv_api_itm1-unit_price,lw_einv_api_itm1-total_amount.
lw_einv_api_itm1-discount = '0'.
lw_einv_api_itm1-assessable_value = lw_einv_api_itm1-total_amount - lw_einv_api_itm1-discount.
CONDENSE lw_einv_api_itm1-assessable_value.
lv_total_assessable_value = lv_total_assessable_value + lw_einv_api_itm1-assessable_value.
lw_einv_api_itm1-gst_rate = lw_wc-tax_per.
lw_einv_api_itm1-igst_amount = lw_wc-igst.
CONDENSE:lw_einv_api_itm1-gst_rate,lw_einv_api_itm1-igst_amount.
lv_total_igst_value = lv_total_igst_value + lw_einv_api_itm1-igst_amount.
lw_einv_api_itm1-cgst_amount = lw_wc-cgst.
CONDENSE:lw_einv_api_itm1-cgst_amount.
lv_total_cgst_value = lv_total_cgst_value + lw_einv_api_itm1-cgst_amount.
lw_einv_api_itm1-sgst_amount = lw_wc-sgst.
CONDENSE:lw_einv_api_itm1-sgst_amount.
lv_total_sgst_value = lv_total_sgst_value + lw_einv_api_itm1-sgst_amount.
lw_einv_api_itm1-cess_rate = '0'.
lw_einv_api_itm1-cess_amount ='0'.
lv_total_cess_value = lv_total_cess_value + lw_einv_api_itm1-cess_amount.
lw_einv_api_itm1-cess_nonadvol_value = '0'.
lv_total_cess_nonadvol_value = lv_total_cess_nonadvol_value + lw_einv_api_itm1-cess_nonadvol_value.
lw_einv_api_itm1-total_item_value = ( lw_einv_api_itm1-assessable_value +
lw_einv_api_itm1-cgst_amount +
lw_einv_api_itm1-sgst_amount +
lw_einv_api_itm1-cess_amount +
lw_einv_api_itm1-igst_amount +
lw_einv_api_itm1-state_cess_amount +
lw_einv_api_itm1-cess_nonadvol_value ).
CONDENSE:lw_einv_api_itm1-total_item_value.
lv_total_invoice_value = lv_total_invoice_value +
lw_einv_api_itm1-total_item_value.
APPEND lw_einv_api_itm1 TO gt_einv_api_itm.
CLEAR:lw_einv_api_itm1 .
ENDLOOP.
EXIT.
ENDIF.
06.10.2020 working with program 1

* Normal items
lw_einv_api_itm-is_service = gc_service_n.
PERFORM service_item USING "lw_wb2_v_vbrk_vbrp2-posnr_i
lw_wb2_v_vbrk_vbrp2-vkorg
lw_wb2_v_vbrk_vbrp2-fkart
lw_wb2_v_vbrk_vbrp2-matnr_i
CHANGING lw_einv_api_itm-is_service.
CONCATENATE '"' lw_wb2_v_vbrk_vbrp2-ean11_i '"' INTO lw_einv_api_itm-hsn_code.
"Quantity
lw_einv_api_itm-quantity = lw_wb2_v_vbrk_vbrp2-fkimg_i . "'1'.
*Unit
CLEAR lv_output_uom.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
EXPORTING
input = lw_wb2_v_vbrk_vbrp2-meins_i
IMPORTING
output = lv_output_uom
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
READ TABLE gt_doc_uom INTO ls_doc_uom WITH KEY meins = lv_output_uom.
IF sy-subrc EQ 0.
CONCATENATE '"' ls_doc_uom-edoc_uom '"' INTO lw_einv_api_itm-unit.
ELSE.
READ TABLE gt_doc_uom INTO ls_doc_uom WITH KEY meins = lw_wb2_v_vbrk_vbrp2-meins_i.
IF sy-subrc IS INITIAL.
CONCATENATE '"' ls_doc_uom-edoc_uom '"' INTO lw_einv_api_itm-unit.
ELSE.
CONCATENATE '"' lw_wb2_v_vbrk_vbrp2-meins_i '"' INTO lw_einv_api_itm-unit.
ENDIF.
ENDIF.
* Unit Price
IF lw_wb2_v_vbrk_vbrp2-fkimg_i IS NOT INITIAL .
CLEAR:lv_rate,lv_dmbtr,lv_item_amt.
IF lv_exp_curr IS NOT INITIAL.
lv_rate = lw_wb2_v_vbrk_vbrp2-netwr_i / lw_wb2_v_vbrk_vbrp2-fkimg_i.
lv_rate = lv_rate * lw_wb2_v_vbrk_vbrp2-kurrf.
lw_einv_api_itm-unit_price = lv_rate.
lw_einv_api_itm-total_amount = lw_wb2_v_vbrk_vbrp2-netwr_i *
lw_wb2_v_vbrk_vbrp2-kurrf.
ELSE.
lv_rate = lw_wb2_v_vbrk_vbrp2-netwr_i / lw_wb2_v_vbrk_vbrp2-fkimg_i.
lw_einv_api_itm-unit_price = lv_rate.
lw_einv_api_itm-total_amount = lw_wb2_v_vbrk_vbrp2-netwr_i.
lv_item_amt = lw_wb2_v_vbrk_vbrp2-netwr_i + lw_wb2_v_vbrk_vbrp2-mwsbp_i.
ENDIF.
CONDENSE:lw_einv_api_itm-unit_price,lw_einv_api_itm-total_amount.
ENDIF.
lw_einv_api_itm-pre_tax_value = '0'.
CONDENSE:lw_einv_api_itm-pre_tax_value.
"Discount amount
LOOP AT gt_tvarvc INTO lw_tvarvc WHERE name = gc_var_disc.
READ TABLE gt_konv INTO lw_konv WITH KEY knumv = lw_wb2_v_vbrk_vbrp2-knumv
kposn = lw_wb2_v_vbrk_vbrp2-posnr_i
kschl = lw_tvarvc-low.
IF sy-subrc EQ 0.
lw_konv-kbetr = lw_konv-kbetr * -1.
lw_einv_api_itm-discount = lw_einv_api_itm-discount + lw_konv-kwert.
ENDIF.
ENDLOOP.
06.10.2020 working with program 1

IF lv_exp_curr IS NOT INITIAL AND lw_einv_api_itm-discount IS NOT INITIAL.


lw_einv_api_itm-discount = lw_einv_api_itm-discount * lw_wb2_v_vbrk_vbrp2-kurrf.
ENDIF.
CONDENSE:lw_einv_api_itm-discount.
lw_einv_api_itm-other_charge = '0'.
lw_einv_api_itm-assessable_value = lw_einv_api_itm-total_amount -
lw_einv_api_itm-discount. "Required
CONDENSE:lw_einv_api_itm-assessable_value,lw_einv_api_itm-other_charge.
lv_total_assessable_value = lv_total_assessable_value + lw_einv_api_itm-assessable_value.
CLEAR:lw_gstrate.
"IGST Tax amount
READ TABLE gt_konv INTO lw_konv WITH KEY knumv = lw_wb2_v_vbrk_vbrp2-knumv
kposn = lw_wb2_v_vbrk_vbrp2-posnr_i
kschl = gc_kschl_joig.
IF sy-subrc EQ 0.
* lw_gstrate = lw_konv-kbetr / 10. "Required
* lw_einv_api_itm-igst_amount = lw_konv-kwert.
PERFORM calculate_tax USING lw_wb2_v_vbrk_vbrp2-knumv
lw_wb2_v_vbrk_vbrp2-posnr_i
gc_kschl_joig
CHANGING lw_einv_api_itm-igst_amount
lw_gstrate.
IF lv_exp_curr IS NOT INITIAL.
lw_einv_api_itm-igst_amount = lw_einv_api_itm-igst_amount * lw_wb2_v_vbrk_vbrp2-kurrf.
ENDIF.
CONDENSE:lw_einv_api_itm-gst_rate,lw_einv_api_itm-igst_amount.
lv_total_igst_value = lv_total_igst_value + lw_einv_api_itm-igst_amount.
ENDIF.
"CGST Tax amount
READ TABLE gt_konv INTO lw_konv WITH KEY knumv = lw_wb2_v_vbrk_vbrp2-knumv
kposn = lw_wb2_v_vbrk_vbrp2-posnr_i
kschl = gc_kschl_jocg.
IF sy-subrc EQ 0.
PERFORM calculate_tax USING lw_wb2_v_vbrk_vbrp2-knumv
lw_wb2_v_vbrk_vbrp2-posnr_i
gc_kschl_jocg
CHANGING lw_einv_api_itm-cgst_amount
lw_einv_api_itm-gst_rate.
* lw_einv_api_itm-gst_rate = lw_konv-kbetr / 10. "Required
CONDENSE lw_einv_api_itm-gst_rate.
ADD lw_einv_api_itm-gst_rate TO lw_gstrate.
* lw_einv_api_itm-cgst_amount = lw_konv-kwert.
IF lv_exp_curr IS NOT INITIAL.
lw_einv_api_itm-cgst_amount = lw_einv_api_itm-cgst_amount * lw_wb2_v_vbrk_vbrp2-kurrf.
ENDIF.
CONDENSE:lw_einv_api_itm-gst_rate ,lw_einv_api_itm-cgst_amount.
lv_total_cgst_value = lv_total_cgst_value + lw_einv_api_itm-cgst_amount.
ENDIF.
"SGST Tax amount
READ TABLE gt_konv INTO lw_konv WITH KEY knumv = lw_wb2_v_vbrk_vbrp2-knumv
kposn = lw_wb2_v_vbrk_vbrp2-posnr_i
kschl = gc_kschl_josg.
IF sy-subrc IS NOT INITIAL.
READ TABLE gt_konv INTO lw_konv WITH KEY knumv = lw_wb2_v_vbrk_vbrp2-knumv
kposn = lw_wb2_v_vbrk_vbrp2-posnr_i
kschl = gc_kschl_joug.
ENDIF.
IF sy-subrc EQ 0.
PERFORM calculate_tax USING lw_wb2_v_vbrk_vbrp2-knumv
lw_wb2_v_vbrk_vbrp2-posnr_i
gc_kschl_josg
CHANGING lw_einv_api_itm-sgst_amount
lw_einv_api_itm-gst_rate.
06.10.2020 working with program 1

IF lv_exp_curr IS NOT INITIAL.


lw_einv_api_itm-sgst_amount = lw_einv_api_itm-sgst_amount * lw_wb2_v_vbrk_vbrp2-kurrf.
ENDIF.
* lw_einv_api_itm-gst_rate = lw_konv-kbetr / 10. "Required
CONDENSE lw_einv_api_itm-gst_rate.
ADD lw_einv_api_itm-gst_rate TO lw_gstrate.
* lw_einv_api_itm-sgst_amount = lw_konv-kwert.
CONDENSE:lw_einv_api_itm-gst_rate,lw_einv_api_itm-sgst_amount.
lv_total_sgst_value = lv_total_sgst_value + lw_einv_api_itm-sgst_amount.
ENDIF.
"CESS
READ TABLE gt_konv INTO lw_konv WITH KEY knumv = lw_wb2_v_vbrk_vbrp2-knumv
kposn = lw_wb2_v_vbrk_vbrp2-posnr_i
kschl = gc_kschl_cess.
IF sy-subrc EQ 0.
lw_einv_api_itm-cess_rate = lw_konv-kbetr / 10. "Required
lw_einv_api_itm-cess_amount = lw_konv-kwert.
IF lv_exp_curr IS NOT INITIAL.
lw_einv_api_itm-cess_amount = lw_einv_api_itm-cess_amount * lw_wb2_v_vbrk_vbrp2-kurrf.
ENDIF.
CONDENSE:lw_einv_api_itm-cess_rate,lw_einv_api_itm-cess_amount.
lv_total_cess_value = lv_total_cess_value + lw_einv_api_itm-cess_amount.
ENDIF.
"cess_nonadvol_amount
READ TABLE gt_konv INTO lw_konv WITH KEY knumv = lw_wb2_v_vbrk_vbrp2-knumv
kposn = lw_wb2_v_vbrk_vbrp2-posnr_i
kschl = 'CENO'.
IF sy-subrc EQ 0.
lw_einv_api_itm-cess_nonadvol_value = lw_konv-kwert.
IF lv_exp_curr IS NOT INITIAL.
lw_einv_api_itm-cess_nonadvol_value = lw_einv_api_itm-cess_nonadvol_value * lw_wb2_v_vbrk_vbrp2-kurrf.
ENDIF.
CONDENSE:lw_einv_api_itm-cess_nonadvol_value.
lv_total_cess_nonadvol_value = lv_total_cess_nonadvol_value + lw_einv_api_itm-cess_nonadvol_value.
ENDIF.
lw_einv_api_itm-total_item_value = ( lw_einv_api_itm-assessable_value +
lw_einv_api_itm-cgst_amount +
lw_einv_api_itm-sgst_amount +
lw_einv_api_itm-cess_amount +
lw_einv_api_itm-igst_amount +
lw_einv_api_itm-state_cess_amount +
lw_einv_api_itm-cess_nonadvol_value ).
CONDENSE:lw_einv_api_itm-total_item_value.
lw_einv_api_itm-gst_rate = lw_gstrate.
CONDENSE:lw_einv_api_itm-gst_rate.
* round off value
* CLEAR : lv_roundoff.
* IF lv_item_amt NE lw_einv_api_itm-total_item_value.
* lv_roundoff = lv_item_amt - lw_einv_api_itm-total_item_value.
* ENDIF.
lv_total_invoice_value = lv_total_invoice_value +
lw_einv_api_itm-total_item_value.
* lv_roundoff.
*End of item_list
APPEND lw_einv_api_itm TO gt_einv_api_itm.
CLEAR:lw_einv_api_itm .
ENDLOOP.
lw_einv_api_hdr-total_assessable_value = lv_total_assessable_value.
lw_einv_api_hdr-total_cgst_value = lv_total_cgst_value.
lw_einv_api_hdr-total_sgst_value = lv_total_sgst_value.
lw_einv_api_hdr-total_igst_value = lv_total_igst_value .
lw_einv_api_hdr-total_invoice_value = lv_total_invoice_value.
lw_einv_api_hdr-total_cess_value = lv_total_cess_value.
06.10.2020 working with program 1

lw_einv_api_hdr-total_cess_nonadvol_value = lv_total_cess_nonadvol_value.
CONDENSE:lw_einv_api_hdr-total_assessable_value,lw_einv_api_hdr-total_cgst_value,lw_einv_api_hdr-total_sgst_value,lw_einv_api_hdr-total_igst_value,
lw_einv_api_hdr-total_invoice_value,lw_einv_api_hdr-total_cess_value,lw_einv_api_hdr-total_cess_nonadvol_value.
APPEND lw_einv_api_hdr TO gt_einv_api_hdr.
CLEAR:lw_einv_api_hdr.
ELSE.
MESSAGE 'Document is cancelled' TYPE 'I'.
ENDIF.
ENDIF.
ENDIF.
ELSE.
MESSAGE 'Please select appropriate documents for E-Doc generation'(039) TYPE 'I'.
ENDIF.
ENDLOOP.
IF gt_einv_api_hdr IS NOT INITIAL.
SORT gt_einv_api_hdr .
SORT gt_einv_api_itm .
DELETE ADJACENT DUPLICATES FROM gt_einv_api_hdr COMPARING ALL FIELDS.
DELETE ADJACENT DUPLICATES FROM gt_einv_api_itm COMPARING ALL FIELDS.
lt_api_hdr = gt_einv_api_hdr .
lt_api_itm = gt_einv_api_itm .
CLEAR:lw_token,lw_return.
IF gw_token IS NOT INITIAL.
lw_token = gw_token.
ELSE.
CALL FUNCTION 'ZFM_EINVOICE_OAUTH_API'
IMPORTING
ex_token = lw_token
ex_return = lw_return
et_messages = lt_messages.
ENDIF.
IF lw_token IS NOT INITIAL." AND lw_return EQ 'S'.
CALL FUNCTION 'ZFM_EINVOICE_GENERATE_API'
EXPORTING
im_token = lw_token
im_api_hdr = lt_api_hdr
im_api_itm = lt_api_itm
IMPORTING
ex_return = lw_return
ex_invref = lt_invref
ex_messages = lt_messages
ex_einv_details = lt_einv_details.
IF lt_invref IS NOT INITIAL."lw_return EQ 'S'.
MODIFY j_1ig_invrefnum FROM TABLE lt_invref.
IF sy-subrc EQ 0.
MODIFY zteinv_details FROM TABLE lt_einv_details.
LOOP AT lt_invref INTO lw_invref.
READ TABLE gt_final ASSIGNING <gw_final> WITH KEY vbeln = lw_invref-docno.
IF sy-subrc IS INITIAL.
<gw_final>-irn = lw_invref-irn.
<gw_final>-ack_no = lw_invref-ack_no.
IF lw_invref-ack_date IS NOT INITIAL.
lv_date = lw_invref-ack_date.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = lv_date
IMPORTING
date_external = <gw_final>-ack_dt
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Date conversion error'(m02) TYPE 'I'.
06.10.2020 working with program 1

ENDIF.
ENDIF.
<gw_final>-ernam = lw_invref-ernam.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = lw_invref-erdat
IMPORTING
date_external = <gw_final>-erdat
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Date conversion error'(m02) TYPE 'I'.
ENDIF.
<gw_final>-erzet = lw_invref-erzet.
IF lw_invref-irn_status = gc_irn_sts_act.
<gw_final>-status = 'Success'(060).
<gw_final>-icon = gc_icon_08.
<gw_final>-einv_error = space.
ELSEIF lw_invref-irn_status = gc_irn_sts_err.
<gw_final>-status = 'Error'(061).
<gw_final>-icon = gc_icon_0a.
READ TABLE lt_einv_details INTO lw_einv_details WITH KEY docno = lw_invref-docno.
IF sy-subrc IS INITIAL.
<gw_final>-einv_error = lw_einv_details-einv_error.
ENDIF.
ELSEIF lw_invref-irn_status = gc_irn_sts_cnl.
<gw_final>-status = 'Cancelled'(062).
<gw_final>-icon = gc_icon_0w.
ENDIF.
ENDIF.
ENDLOOP.
* COmmit work
COMMIT WORK.
CALL METHOD gref_alv_grid->refresh_table_display
EXCEPTIONS
finished = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Table refresh error'(012) TYPE 'I'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
CLEAR lt_show_message.
IF lt_messages IS NOT INITIAL.
LOOP AT lt_messages INTO lw_message.
IF lw_message-type IS NOT INITIAL.
lw_show_message-msgid = gc_msgid_01.
lw_show_message-msgty = lw_message-type.
lw_show_message-msgno = gc_msgno_319.
lw_show_message-msgv1 = lw_message-message_v1.
lw_show_message-msgv2 = lw_message-message_v2.
lw_show_message-msgv3 = lw_message-message_v3.
lw_show_message-msgv4 = lw_message-message_v4.
APPEND lw_show_message TO lt_show_message.
ENDIF.
ENDLOOP.
CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP'
TABLES
i_message_tab = lt_show_message.
ENDIF.
ELSE.
06.10.2020 working with program 1

ENDIF.
ENDIF.
ENDIF.
ENDFORM.
* *
* FORM EXIT_PROGRAM *
* *
FORM exit_program.
CALL METHOD gref_alv_container->free.
LEAVE TO SCREEN 0.
ENDFORM.
*& *
*& Form EINVOICE_CANCEL
*& *
* text
* *
* > p1 text
* < p2 text
* *
FORM einvoice_cancel USING p_lv_reason_code
p_lv_reason.
DATA:lw_token TYPE string,
lw_return TYPE string,
wa_return TYPE string,
lt_messages TYPE bapiret2_t,
lw_message TYPE bapiret2,
lt_show_message TYPE esp1_message_tab_type,
lw_show_message LIKE LINE OF lt_show_message,
lt_invref TYPE TABLE OF j_1ig_invrefnum,
lw_invref TYPE j_1ig_invrefnum,
lw_index LIKE LINE OF gt_index,
lv_val TYPE xfeld,
lv_answer TYPE c,
lv_gstin TYPE kna1-stcd3,
lv_reason TYPE char20,
lv_remarks TYPE char255,
ls_values TYPE dd07v,
lv_internal_date TYPE sy-datum,
lw_usrgstin TYPE ty_api.
FIELD-SYMBOLS <gw_final> TYPE ty_final.
PERFORM check_selected_data CHANGING lv_val.
IF lv_val IS INITIAL.
LOOP AT gt_index INTO lw_index.
READ TABLE gt_final INTO gw_final INDEX lw_index-index.
IF sy-subrc IS INITIAL AND gw_final-irn IS NOT INITIAL.
lv_gstin = gw_final-sup_gstin.
SELECT * FROM j_1ig_invrefnum APPENDING TABLE lt_invref
WHERE bukrs = gw_final-bukrs AND
docno = gw_final-vbeln AND
doc_type = gw_final-fkart AND
irn = gw_final-irn.
ENDIF.
ENDLOOP.
READ TABLE gt_api INTO lw_usrgstin WITH KEY apiid = gc_apiid_usrgstin.
IF sy-subrc IS INITIAL.
lv_gstin = lw_usrgstin-apiprov.
ENDIF.
IF lt_invref IS NOT INITIAL.
CLEAR:lw_token,lw_return.
IF gw_token IS NOT INITIAL.
lw_token = gw_token.
ELSE.
CALL FUNCTION 'ZFM_EINVOICE_OAUTH_API'
06.10.2020 working with program 1

IMPORTING
ex_token = lw_token
ex_return = lw_return
et_messages = lt_messages.
ENDIF.
IF lw_token IS NOT INITIAL.
CONCATENATE '"' p_lv_reason_code '"' INTO lv_reason.
CONCATENATE '"' p_lv_reason '"' INTO lv_remarks.
CONCATENATE '"' lv_gstin '"' INTO lv_gstin.
CALL FUNCTION 'ZFM_EINVOICE_CANCEL_API'
EXPORTING
im_token = lw_token
im_invref = lt_invref
im_gstin = lv_gstin
im_reason = lv_reason
im_remarks = lv_remarks
IMPORTING
ex_return = lw_return
ex_invref = lt_invref
ex_messages = lt_messages.
IF lt_invref IS NOT INITIAL."lw_return EQ 'S'.
MODIFY j_1ig_invrefnum FROM TABLE lt_invref.
LOOP AT lt_invref INTO lw_invref.
READ TABLE gt_final ASSIGNING <gw_final> WITH KEY vbeln = lw_invref-docno.
IF sy-subrc IS INITIAL.
IF lw_invref-cancel_date IS NOT INITIAL.
lw_invref-irn_status = gc_irn_sts_cnl.
UPDATE zteinv_details SET e_reason_code = p_lv_reason_code
e_reason = p_lv_reason
aenam = sy-uname
aedat = sy-datum
WHERE bukrs = lw_invref-bukrs AND
docno = lw_invref-docno AND
doctyp = lw_invref-doc_type AND
gjahr = lw_invref-doc_year.
IF sy-subrc IS INITIAL.
lv_internal_date = lw_invref-cancel_date.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = lv_internal_date
IMPORTING
date_external = <gw_final>-canc_dt
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Date conversion error'(m02) TYPE 'I'.
ENDIF.
ENDIF.
* ENDIF.
ENDIF.
IF lw_invref-irn_status = gc_irn_sts_act.
<gw_final>-status = 'Success'(060).
<gw_final>-icon = gc_icon_08.
ELSEIF lw_invref-irn_status = gc_irn_sts_err.
<gw_final>-status = 'Error'(061).
<gw_final>-icon = gc_icon_0a.
ELSEIF lw_invref-irn_status = gc_irn_sts_cnl.
<gw_final>-status = 'Cancelled'(062).
<gw_final>-icon = gc_icon_0w.
ENDIF.
ENDIF.
ENDLOOP.
06.10.2020 working with program 1

* Commit work
COMMIT WORK.
CALL METHOD gref_alv_grid->refresh_table_display
EXCEPTIONS
finished = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Table refresh error'(012) TYPE 'I'.
ENDIF.
* ENDIF.
ENDIF.
ENDIF.
CLEAR lt_show_message.
IF lt_messages IS NOT INITIAL.
LOOP AT lt_messages INTO lw_message.
lw_show_message-msgid = gc_msgid_01.
lw_show_message-msgty = lw_message-type.
lw_show_message-msgno = gc_msgno_319.
lw_show_message-msgv1 = lw_message-message_v1.
lw_show_message-msgv2 = lw_message-message_v2.
lw_show_message-msgv3 = lw_message-message_v3.
lw_show_message-msgv4 = lw_message-message_v4.
APPEND lw_show_message TO lt_show_message.
ENDLOOP.
CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP'
TABLES
i_message_tab = lt_show_message.
ENDIF.
ELSE.
MESSAGE 'Please select appropriate documents for E-Invoice cancellation'(014) TYPE 'I'.
ENDIF.
ENDIF.
ENDFORM.
*& *
*& Form CALL_POPUP
*& *
* text
* *
* >P_TEXT_T20 text
* >P_TEXT_T21 text
* *
FORM call_popup USING p_text_t20
p_text_t21
CHANGING p_text_t22 TYPE c.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = p_text_t20
text_question = p_text_t21
text_button_1 = 'Yes'(107)
text_button_2 = 'No'(108)
display_cancel_button = abap_true
IMPORTING
answer = p_text_t22
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.
*& *
*& Module USER_COMMAND_9001 INPUT
06.10.2020 working with program 1

*& *
* text
* *
MODULE user_command_9001 INPUT.
DATA:lw_index LIKE LINE OF gt_index.
DATA:lv_answer TYPE c.
FIELD-SYMBOLS <gw_final> TYPE ty_final.
DATA: lt_zteway_transport TYPE TABLE OF zteway_transport,
ls_zteway_transport TYPE zteway_transport.
CASE sy-ucomm.
WHEN 'OK'.
PERFORM call_popup USING text-t23 text-t30
CHANGING lv_answer.
IF lv_answer = '1'.
LOOP AT gt_index INTO lw_index.
READ TABLE gt_final ASSIGNING <gw_final> INDEX lw_index-index.
IF sy-subrc IS INITIAL.
<gw_final>-t_id = zst_einv_api_struct-transporter_id.
<gw_final>-t_name = zst_einv_api_struct-transporter_name.
<gw_final>-t_mode = zst_einv_api_struct-transportation_mode.
<gw_final>-t_distance = zst_einv_api_struct-transportation_distance.
<gw_final>-t_doc_no = zst_einv_api_struct-transporter_document_number.
IF zst_einv_api_struct-transporter_document_date IS NOT INITIAL.
CONCATENATE zst_einv_api_struct-transporter_document_date+6(2) '/'
zst_einv_api_struct-transporter_document_date+4(2) '/'
zst_einv_api_struct-transporter_document_date+0(4)
INTO <gw_final>-t_date.
ENDIF.
CONDENSE zst_einv_api_struct-vehicle_number NO-GAPS.
<gw_final>-v_number = zst_einv_api_struct-vehicle_number.
<gw_final>-v_type = zst_einv_api_struct-vehicle_type.
<gw_final>-t_r_distance = zst_einv_api_struct-remaining_distance.
<gw_final>-t_ext_valid_reason = zst_einv_api_struct-vehicle_type.
<gw_final>-t_ext_valid_remarks = zst_einv_api_struct-extend_remarks.
<gw_final>-t_from_pin = zst_einv_api_struct-from_pincode.
<gw_final>-t_consignment_status = zst_einv_api_struct-consignment_status.
<gw_final>-t_transit_type = zst_einv_api_struct-transit_type.
IF zst_einv_api_struct-transportation_mode NE gc_tmode_5.
<gw_final>-t_transit_type = space.
ENDIF.
<gw_final>-t_address1 = zst_einv_api_struct-address_line1.
<gw_final>-t_address2 = zst_einv_api_struct-address_line2.
<gw_final>-t_address3 = zst_einv_api_struct-address_line3.
<gw_final>-v_reason_code = zst_einv_api_struct-reason_code_for_vehicle_updati.
<gw_final>-v_reason = zst_einv_api_struct-reason_for_vehicle_updation.
<gw_final>-zport_code = zst_einv_api_struct-zport_code.
ENDIF.
ls_zteway_transport-bukrs = <gw_final>-bukrs.
ls_zteway_transport-doctyp = <gw_final>-fkart.
ls_zteway_transport-docno = <gw_final>-vbeln.
ls_zteway_transport-gjahr = <gw_final>-gjahr.
ls_zteway_transport-t_id = <gw_final>-t_id.
ls_zteway_transport-t_name = <gw_final>-t_name.
ls_zteway_transport-t_doc_no = <gw_final>-t_doc_no.
ls_zteway_transport-t_date = zst_einv_api_struct-transporter_document_date.
ls_zteway_transport-t_mode = <gw_final>-t_mode.
ls_zteway_transport-t_distance = <gw_final>-t_distance.
ls_zteway_transport-v_number = <gw_final>-v_number.
ls_zteway_transport-v_type = <gw_final>-v_type.
ls_zteway_transport-t_r_distance = <gw_final>-t_r_distance.
ls_zteway_transport-t_ext_valid_reason = <gw_final>-t_ext_valid_reason.
ls_zteway_transport-t_ext_valid_remarks = <gw_final>-t_ext_valid_remarks.
ls_zteway_transport-t_from_pin = <gw_final>-t_from_pin.
06.10.2020 working with program 1

ls_zteway_transport-t_consignment_status = <gw_final>-t_consignment_status.
ls_zteway_transport-t_transit_type = <gw_final>-t_transit_type.
ls_zteway_transport-t_address1 = <gw_final>-t_address1.
ls_zteway_transport-t_address2 = <gw_final>-t_address2.
ls_zteway_transport-t_address3 = <gw_final>-t_address3.
ls_zteway_transport-v_reason_code = <gw_final>-v_reason_code.
ls_zteway_transport-v_reason = <gw_final>-v_reason.
ls_zteway_transport-zport_code = <gw_final>-zport_code.
ls_zteway_transport-eway_print = <gw_final>-eway_print.
ls_zteway_transport-eway_error = <gw_final>-eway_error.
READ TABLE gt_zteway_transport TRANSPORTING NO FIELDS WITH KEY bukrs = <gw_final>-bukrs
doctyp = <gw_final>-fkart
docno = <gw_final>-vbeln.
IF sy-subrc IS INITIAL.
ls_zteway_transport-aenam = sy-uname.
ls_zteway_transport-aedat = sy-datum.
ELSE.
ls_zteway_transport-ernam = sy-uname.
ls_zteway_transport-erdat = sy-datum.
ENDIF.
* APPEND ls_zteway_transport TO lt_zteway_transport.
MODIFY zteway_transport FROM ls_zteway_transport.
IF sy-subrc IS NOT INITIAL.
MESSAGE 'Data update error'(022) TYPE 'I'.
ENDIF.
ENDLOOP.
CALL METHOD gref_alv_grid->refresh_table_display
EXCEPTIONS
finished = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Table refresh error'(012) TYPE 'I'.
ENDIF.
PERFORM set_selected_data.
LEAVE TO SCREEN 0.
ENDIF.
WHEN 'CANCEL'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE.
*& *
*& Form EWAYBILL_GENERATE
*& *
* text
* *
* > p1 text
* < p2 text
* *
FORM ewaybill_generate.
DATA:lw_index TYPE lvc_s_row,
lv_val TYPE xfeld,
lv_answer TYPE c,
lv_index TYPE sy-tabix,
lw_token TYPE string,
lw_return TYPE string,
wa_return TYPE string,
lt_messages TYPE bapiret2_t,
lw_message TYPE bapiret2,
lt_show_message TYPE esp1_message_tab_type,
lw_show_message LIKE LINE OF lt_show_message,
lw_etransport TYPE zteway_transport,
lt_ewaybill TYPE TABLE OF j_1ig_ewaybill,
lw_ewaybill TYPE j_1ig_ewaybill,
06.10.2020 working with program 1

lt_eway_transport TYPE TABLE OF zteway_transport,


ls_eway_transport TYPE zteway_transport,
lw_wb2_v_vbrk_vbrp2 TYPE ty_wb2_v_vbrk_vbrp2,
lw_wb2_v_likp_lips2 TYPE ty_wb2_v_likp_lips2,
ls_doc_uom TYPE ty_doc_uom,
ls_doctyp TYPE ty_doctyp,
lv_output_uom TYPE meins,
lt_api_hdr TYPE ztt_eway_api_struct,
lt_api_itm TYPE ztt_eway_api_struct_itm,
lw_eway_api_hdr TYPE zst_eway_api_struct,
lw_eway_api_itm TYPE zst_eway_api_struct_itm,
lw_t001w TYPE ty_t001w1,
lw_t005u_s TYPE ty_t005u,
lw_kna1 TYPE ty_kna1,
lw_kna1_sh TYPE ty_kna1,
lw_t005u TYPE ty_t005u,
lw_adrc TYPE ty_adrc,
lw_adr6 TYPE ty_adr6,
lw_marc TYPE ty_marc,
ls_export TYPE ty_export,
lw_vbpa TYPE ty_vbpa,
lw_usrgstin TYPE ty_api,
lw_konv TYPE ty_konv,
ls_values TYPE dd07v,
lv_error TYPE xfeld,
lv_string TYPE string,
lv_vbeln TYPE vbrk-vbeln,
lv_export TYPE xfeld,
lv_amount TYPE kwert.
DATA: lv_supply_type TYPE char10 VALUE 'O',
lv_document_type TYPE char10 VALUE 1,
lv_sub_supply_type TYPE char10 VALUE 1,
lv_document_number TYPE i VALUE 2.
DATA: lv_total_invoice_value TYPE netwr,
lv_total_sgst_value TYPE netwr,
lv_total_cgst_value TYPE netwr,
lv_total_igst_value TYPE netwr,
lv_total_cess_value TYPE netwr,
lv_total_cessnoval_value TYPE netwr,
lv_total_taxable_value TYPE netwr.
FIELD-SYMBOLS: <gw_final> TYPE ty_final,
<lw_ewaybill> TYPE j_1ig_ewaybill.
CLEAR: lt_messages,lt_ewaybill,lt_api_hdr,lt_api_itm,gt_eway_api_hdr,gt_eway_api_itm,lt_show_message.
PERFORM check_selected_data CHANGING lv_val.
IF lv_val IS INITIAL.
CLEAR lv_error.
IF lv_error IS INITIAL.
PERFORM call_popup USING text-t23 text-t24
CHANGING lv_answer.
IF lv_answer = '1'.
LOOP AT gt_index INTO lw_index.
READ TABLE gt_final INTO gw_final INDEX lw_index-index.
IF sy-subrc IS INITIAL AND ( gw_final-eway_num IS INITIAL OR gw_final-eway_status = 'Cancelled'(062) )
AND gw_final-eway = abap_true.
IF p_mod = gc_sd.
READ TABLE gt_wb2_v_vbrk_vbrp2 INTO lw_wb2_v_vbrk_vbrp2 WITH KEY vbeln = gw_final-vbeln.
IF sy-subrc = 0.
IF lw_wb2_v_vbrk_vbrp2-fksto NE abap_true.
lv_index = sy-tabix.
*** Reset header value for every document
lv_total_invoice_value = 0.
lv_total_sgst_value = 0.
lv_total_cgst_value = 0.
06.10.2020 working with program 1

lv_total_igst_value = 0.
lv_total_cess_value = 0.
lv_total_cessnoval_value = 0.
lv_total_taxable_value = 0.
LOOP AT gt_wb2_v_vbrk_vbrp2 INTO lw_wb2_v_vbrk_vbrp2 FROM lv_index.
IF lw_wb2_v_vbrk_vbrp2-vbeln NE gw_final-vbeln.
EXIT.
ENDIF.
********************************* Begin of Fill header derails ***********************************************
lw_eway_api_hdr-bukrs = lw_wb2_v_vbrk_vbrp2-bukrs.
READ TABLE gt_api INTO lw_usrgstin WITH KEY apiid = gc_apiid_eusrgstin.
IF sy-subrc IS INITIAL.
CONCATENATE '"' lw_usrgstin-apiprov '"' INTO lw_eway_api_hdr-user_gstin.
ELSE.
CONCATENATE '"' gw_final-sup_gstin '"' INTO lw_eway_api_hdr-user_gstin.
ENDIF.
READ TABLE gt_doctyp INTO ls_doctyp WITH KEY fkart = lw_wb2_v_vbrk_vbrp2-fkart.
IF sy-subrc EQ 0.
lv_supply_type = ls_doctyp-sup_type.
lv_sub_supply_type = ls_doctyp-sub_type.
lv_document_type = ls_doctyp-edoc_type.
ENDIF.
*& Supply Type
READ TABLE gt_supply_values INTO ls_values WITH KEY domvalue_l = lv_supply_type.
IF sy-subrc EQ 0.
TRANSLATE ls_values-ddtext TO UPPER CASE.
CONCATENATE '"' ls_values-ddtext '"' INTO lw_eway_api_hdr-supply_type.
ENDIF.
*& Sub Supply Type
READ TABLE gt_sub_supply_values INTO ls_values WITH KEY domvalue_l = lv_sub_supply_type.
IF sy-subrc EQ 0.
TRANSLATE ls_values-ddtext TO UPPER CASE.
CONCATENATE '"' ls_values-ddtext '"' INTO lw_eway_api_hdr-sub_supply_type.
CONCATENATE '"' ls_values-ddtext '"' INTO lw_eway_api_hdr-sub_supply_description.
ENDIF.
*& Document Type
READ TABLE gt_doctyp_values INTO ls_values WITH KEY domvalue_l = lv_document_type.
IF sy-subrc EQ 0.
TRANSLATE ls_values-ddtext TO UPPER CASE.
CONCATENATE '"' ls_values-ddtext '"' INTO lw_eway_api_hdr-document_type.
ENDIF.
CONCATENATE '"' gw_final-gjahr '"' INTO lw_eway_api_hdr-doc_year.
CASE lv_document_number.
WHEN 1. "Billing Number as same as ODN
CONCATENATE '"' lw_wb2_v_vbrk_vbrp2-vbeln '"' INTO lw_eway_api_hdr-document_number.
WHEN 2. "ODN
CONCATENATE '"' lw_wb2_v_vbrk_vbrp2-xblnr '"' INTO lw_eway_api_hdr-document_number.
ENDCASE.
lw_eway_api_hdr-vbeln = lw_wb2_v_vbrk_vbrp2-vbeln.
CONCATENATE '"'
lw_wb2_v_vbrk_vbrp2-fkdat+6(2) '/'
lw_wb2_v_vbrk_vbrp2-fkdat+4(2) '/'
lw_wb2_v_vbrk_vbrp2-fkdat+0(4)
'"' INTO lw_eway_api_hdr-document_date.
*** Supplier details
CLEAR: lw_t001w. ", lw_adrc_s, lw_adr6_s.
READ TABLE gt_t001w INTO lw_t001w WITH KEY werks = lw_wb2_v_vbrk_vbrp2-werks_i BINARY SEARCH.
IF sy-subrc EQ 0.
READ TABLE gt_api INTO lw_usrgstin WITH KEY apiid = gc_apiid_esupgstin.
IF sy-subrc IS INITIAL.
CONCATENATE '"' lw_usrgstin-apiprov '"' INTO lw_eway_api_hdr-gstin_of_consignor.
ELSE.
CONCATENATE '"' gw_final-sup_gstin '"' INTO lw_eway_api_hdr-gstin_of_consignor.
06.10.2020 working with program 1

ENDIF.
CONCATENATE '"' lw_t001w-name1 '"' INTO lw_eway_api_hdr-legal_name_of_consignor.
CONCATENATE '"' lw_t001w-name2 '"' INTO lw_eway_api_hdr-address1_of_consignor.
CONCATENATE '"' lw_t001w-stras '"' INTO lw_eway_api_hdr-address2_of_consignor.
CONCATENATE '"' lw_t001w-ort01 '"' INTO lw_eway_api_hdr-place_of_consignor.
CONCATENATE '"' lw_t001w-pstlz '"' INTO lw_eway_api_hdr-pincode_of_consignor.
CLEAR:lw_t005u_s.
READ TABLE gt_t005u_s INTO lw_t005u_s WITH KEY bland = lw_t001w-regio.
IF sy-subrc EQ 0.
TRANSLATE lw_t005u_s-bezei TO UPPER CASE.
CONCATENATE '"' lw_t005u_s-bezei '"' INTO lw_eway_api_hdr-state_of_consignor.
ENDIF.
CONCATENATE '"' lw_t005u_s-bezei '"' INTO lw_eway_api_hdr-actual_from_state_name.
ENDIF.
*** Buyer details
CLEAR:lw_kna1, lw_adrc, lw_adr6.
READ TABLE gt_vbpa INTO lw_vbpa WITH KEY vbeln = lw_wb2_v_vbrk_vbrp2-vbeln
parvw = gc_parvw_re
BINARY SEARCH.
IF sy-subrc IS INITIAL.
READ TABLE gt_kna1 INTO lw_kna1 WITH KEY kunnr = lw_vbpa-kunnr BINARY SEARCH.
IF sy-subrc EQ 0.
READ TABLE gt_api INTO lw_usrgstin WITH KEY apiid = gc_apiid_ebuygstin.
IF sy-subrc IS INITIAL.
CONCATENATE '"' lw_usrgstin-apiprov '"' INTO lw_eway_api_hdr-gstin_of_consignee.
ELSE.
IF lw_kna1-stcd3 IS NOT INITIAL.
CONCATENATE '"' lw_kna1-stcd3 '"' INTO lw_eway_api_hdr-gstin_of_consignee.
ELSE.
lw_eway_api_hdr-gstin_of_consignee = gc_gstin_urp.
ENDIF.
ENDIF.
CONCATENATE '"' lw_kna1-name1 '"' INTO lw_eway_api_hdr-legal_name_of_consignee.
CLEAR:lw_t005u.
READ TABLE gt_t005u INTO lw_t005u WITH KEY bland = lw_kna1-regio.
IF sy-subrc EQ 0.
TRANSLATE lw_t005u-bezei TO UPPER CASE.
CONCATENATE '"' lw_t005u-bezei '"' INTO lw_eway_api_hdr-actual_to_state_name.
ENDIF.
CONCATENATE '"' lw_t005u-bezei '"' INTO lw_eway_api_hdr-state_of_supply.
READ TABLE gt_vbpa INTO lw_vbpa WITH KEY vbeln = lw_wb2_v_vbrk_vbrp2-vbeln
parvw = gc_parvw_we
BINARY SEARCH.
IF sy-subrc IS INITIAL.
READ TABLE gt_kna1 INTO lw_kna1 WITH KEY kunnr = lw_vbpa-kunnr BINARY SEARCH.
IF sy-subrc IS INITIAL.
READ TABLE gt_adrc INTO lw_adrc WITH KEY addrnumber = lw_kna1-adrnr.
READ TABLE gt_adr6 INTO lw_adr6 WITH KEY addrnumber = lw_adrc-addrnumber.
CONCATENATE '"' lw_kna1-stras '"' INTO lw_eway_api_hdr-address1_of_consignee.
CONCATENATE '"' lw_kna1-name2 '"' INTO lw_eway_api_hdr-address2_of_consignee.
CONCATENATE '"' lw_kna1-ort01 '"' INTO lw_eway_api_hdr-place_of_consignee.
CONCATENATE '"' lw_kna1-pstlz '"' INTO lw_eway_api_hdr-pincode_of_consignee.
CLEAR:lw_t005u.
READ TABLE gt_t005u INTO lw_t005u WITH KEY bland = lw_kna1-regio.
IF sy-subrc EQ 0.
TRANSLATE lw_t005u-bezei TO UPPER CASE.
CONCATENATE '"' lw_t005u-bezei '"' INTO lw_eway_api_hdr-actual_to_state_name.
ENDIF.
* Set the export flag
CLEAR lv_export.
IF lw_t001w-land1 NE lw_kna1-land1.
lv_export = abap_true.
ENDIF.
06.10.2020 working with program 1

IF lw_eway_api_hdr-sub_supply_type = gc_sub_suptyp_exp OR
lv_export = abap_true.
lw_eway_api_hdr-state_of_supply = gc_export_place.
lw_eway_api_hdr-gstin_of_consignee = gc_gstin_urp.
READ TABLE gt_export INTO ls_export WITH KEY zport_code = gw_final-zport_code.
IF sy-subrc IS INITIAL..
CONCATENATE '"' ls_export-zport_address1 '"' INTO lw_eway_api_hdr-address1_of_consignee.
CONCATENATE '"' ls_export-zport_address2 '"' INTO lw_eway_api_hdr-address2_of_consignee.
CONCATENATE '"' ls_export-zport_place '"' INTO lw_eway_api_hdr-place_of_consignee.
CONCATENATE '"' ls_export-zport_pincode '"' INTO lw_eway_api_hdr-pincode_of_consignee.
CLEAR:lw_t005u.
READ TABLE gt_t005u INTO lw_t005u WITH KEY bland = ls_export-zport_state.
IF sy-subrc EQ 0.
TRANSLATE lw_t005u-bezei TO UPPER CASE.
CONCATENATE '"' lw_t005u-bezei '"' INTO lw_eway_api_hdr-actual_to_state_name.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
*** Value details
"default value
lw_eway_api_hdr-other_value = '0'.
lw_eway_api_hdr-total_invoice_value = '0'.
lw_eway_api_hdr-taxable_amount = '0'.
lw_eway_api_hdr-cgst_amount = '0'.
lw_eway_api_hdr-sgst_amount = '0'.
lw_eway_api_hdr-igst_amount = '0'.
lw_eway_api_hdr-cess_amount = '0'.
lw_eway_api_hdr-cess_nonadvol_value = '0'.
* Transaction Type
IF ( ( lw_eway_api_hdr-state_of_consignor = lw_eway_api_hdr-actual_from_state_name ) AND
( lw_eway_api_hdr-state_of_supply = lw_eway_api_hdr-actual_to_state_name ) ).
lw_eway_api_hdr-transaction_type = 1.
ELSEIF ( ( lw_eway_api_hdr-state_of_consignor = lw_eway_api_hdr-actual_from_state_name ) AND
( lw_eway_api_hdr-state_of_supply NE lw_eway_api_hdr-actual_to_state_name ) ).
lw_eway_api_hdr-transaction_type = 2.
ELSEIF ( ( lw_eway_api_hdr-state_of_consignor NE lw_eway_api_hdr-actual_from_state_name ) AND
( lw_eway_api_hdr-state_of_supply = lw_eway_api_hdr-actual_to_state_name ) ).
lw_eway_api_hdr-transaction_type = 3.
ELSEIF ( ( lw_eway_api_hdr-state_of_consignor NE lw_eway_api_hdr-actual_from_state_name ) AND
( lw_eway_api_hdr-state_of_supply NE lw_eway_api_hdr-actual_to_state_name ) ).
lw_eway_api_hdr-transaction_type = 4.
ENDIF.
CONDENSE lw_eway_api_hdr-transaction_type.
lw_eway_api_hdr-generate_status = gc_gen_sts_1.
lw_eway_api_hdr-data_source = gc_dsource_erp.
CONCATENATE '"' sy-uname '"' INTO lw_eway_api_hdr-user_ref.
CONCATENATE '"' lw_kna1-ort01 '"' INTO lw_eway_api_hdr-location_code.
*& Generate E-Way Bill Part A & Part B.
IF gv_e_comm EQ gc_ucomm_eeayg.
lw_eway_api_hdr-eway_bill_status = gc_ewaysts_abc.
ELSE.
*& Generate E-Way Bill Part A only.
lw_eway_api_hdr-eway_bill_status = gc_ewaysts_ac.
ENDIF.
*& Auto print E-way Bill
lw_eway_api_hdr-auto_print = gc_eway_print.
CONCATENATE '"' lw_adr6-smtp_addr '"' INTO lw_eway_api_hdr-email.
*** Transport details
CONCATENATE '"' gw_final-t_id '"' INTO lw_eway_api_hdr-transporter_id.
06.10.2020 working with program 1

CONCATENATE '"' gw_final-t_name '"' INTO lw_eway_api_hdr-transporter_name.


READ TABLE gt_t_mode_values INTO ls_values WITH KEY domvalue_l = gw_final-t_mode.
IF sy-subrc EQ 0.
TRANSLATE ls_values-ddtext TO UPPER CASE.
CONCATENATE '"' ls_values-ddtext '"' INTO lw_eway_api_hdr-transportation_mode.
ELSE.
lw_eway_api_hdr-transportation_mode = '" "'.
ENDIF.
CONCATENATE '"' gw_final-t_distance '"' INTO lw_eway_api_hdr-transportation_distance.
CONCATENATE '"' gw_final-t_doc_no '"' INTO lw_eway_api_hdr-transporter_document_number.
CONCATENATE '"' gw_final-t_date '"' INTO lw_eway_api_hdr-transporter_document_date.
CONCATENATE '"' gw_final-v_number '"' INTO lw_eway_api_hdr-vehicle_number.
READ TABLE gt_v_type_values INTO ls_values WITH KEY domvalue_l = gw_final-v_type.
IF sy-subrc EQ 0.
TRANSLATE ls_values-ddtext TO UPPER CASE.
CONCATENATE '"' ls_values-ddtext '"' INTO lw_eway_api_hdr-vehicle_type.
ENDIF.
********************************* End of Fill header derails ***********************************************
********************************** Begin of Fill item derails ************************************************
*** Rest item tax rate
lw_eway_api_itm-cgst_rate = '0'.
lw_eway_api_itm-sgst_rate = '0'.
lw_eway_api_itm-igst_rate = '0'.
lw_eway_api_itm-cess_rate = '0'.
lw_eway_api_itm-cessnonadvol = '0'.
lw_eway_api_itm-bukrs = lw_eway_api_hdr-bukrs.
lw_eway_api_itm-document_number = lw_eway_api_hdr-document_number.
lw_eway_api_itm-doc_year = lw_eway_api_hdr-doc_year.
lw_eway_api_itm-document_type = lw_eway_api_hdr-document_type.
lw_eway_api_itm-document_date = lw_eway_api_hdr-document_date.
CONCATENATE '"' lw_wb2_v_vbrk_vbrp2-matnr_i '"' INTO lw_eway_api_itm-product_name.
CONCATENATE '"' lw_wb2_v_vbrk_vbrp2-arktx_i '"' INTO lw_eway_api_itm-product_description.
* READ TABLE gt_marc INTO lw_marc WITH KEY matnr = lw_wb2_v_vbrk_vbrp2-matnr_i
* werks = lw_wb2_v_vbrk_vbrp2-werks_i
* BINARY SEARCH.
* IF sy-subrc EQ 0.
* CONCATENATE '"' lw_marc-steuc '"' INTO lw_eway_api_itm-hsn_code.
* ENDIF.
CONCATENATE '"' lw_wb2_v_vbrk_vbrp2-ean11_i '"' INTO lw_eway_api_itm-hsn_code.
lw_eway_api_itm-quantity = lw_wb2_v_vbrk_vbrp2-fkimg_i.
CLEAR lv_output_uom.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
EXPORTING
input = lw_wb2_v_vbrk_vbrp2-meins_i
IMPORTING
output = lv_output_uom
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
READ TABLE gt_doc_uom INTO ls_doc_uom WITH KEY meins = lv_output_uom.
IF sy-subrc EQ 0.
CONCATENATE '"' ls_doc_uom-edoc_uom '"' INTO lw_eway_api_itm-unit_of_product.
ELSE.
READ TABLE gt_doc_uom INTO ls_doc_uom WITH KEY meins = lw_wb2_v_vbrk_vbrp2-meins_i.
IF sy-subrc IS INITIAL.
CONCATENATE '"' ls_doc_uom-edoc_uom '"' INTO lw_eway_api_itm-unit_of_product.
ENDIF.
ENDIF.
"Item Amount
lw_eway_api_itm-taxable_amount = lw_wb2_v_vbrk_vbrp2-netwr_i.
06.10.2020 working with program 1

"CGST Tax amount


CLEAR lv_amount.
READ TABLE gt_konv INTO lw_konv WITH KEY knumv = lw_wb2_v_vbrk_vbrp2-knumv
kposn = lw_wb2_v_vbrk_vbrp2-posnr_i
kschl = gc_kschl_jocg.
IF sy-subrc EQ 0.
PERFORM calculate_tax USING lw_wb2_v_vbrk_vbrp2-knumv
lw_wb2_v_vbrk_vbrp2-posnr_i
gc_kschl_jocg
CHANGING lv_amount
lw_eway_api_itm-cgst_rate.
lv_total_cgst_value = lv_total_cgst_value + lv_amount.
* lw_eway_api_itm-cgst_rate = lw_konv-kbetr / 10.
* lv_total_cgst_value = lv_total_cgst_value + lw_konv-kwert.
ENDIF.
"SGST Tax amount
CLEAR lv_amount.
READ TABLE gt_konv INTO lw_konv WITH KEY knumv = lw_wb2_v_vbrk_vbrp2-knumv
kposn = lw_wb2_v_vbrk_vbrp2-posnr_i
kschl = gc_kschl_josg.
IF sy-subrc IS NOT INITIAL .
READ TABLE gt_konv INTO lw_konv WITH KEY knumv = lw_wb2_v_vbrk_vbrp2-knumv
kposn = lw_wb2_v_vbrk_vbrp2-posnr_i
kschl = gc_kschl_joug.
ENDIF.
IF sy-subrc EQ 0.
PERFORM calculate_tax USING lw_wb2_v_vbrk_vbrp2-knumv
lw_wb2_v_vbrk_vbrp2-posnr_i
gc_kschl_josg
CHANGING lv_amount
lw_eway_api_itm-sgst_rate.
lv_total_sgst_value = lv_total_sgst_value + lv_amount.
* lw_eway_api_itm-sgst_rate = lw_konv-kbetr / 10.
* lv_total_sgst_value = lv_total_sgst_value + lw_konv-kwert.
ENDIF.
"IGST Tax amount
CLEAR lv_amount.
READ TABLE gt_konv INTO lw_konv WITH KEY knumv = lw_wb2_v_vbrk_vbrp2-knumv
kposn = lw_wb2_v_vbrk_vbrp2-posnr_i
kschl = gc_kschl_joig.
IF sy-subrc EQ 0.
PERFORM calculate_tax USING lw_wb2_v_vbrk_vbrp2-knumv
lw_wb2_v_vbrk_vbrp2-posnr_i
gc_kschl_joig
CHANGING lv_amount
lw_eway_api_itm-igst_rate.
lv_total_igst_value = lv_total_igst_value + lv_amount.
* lw_eway_api_itm-igst_rate = lw_konv-kbetr / 10.
* lv_total_igst_value = lv_total_igst_value + lw_konv-kwert.
ENDIF.
"CESS Tax amount
READ TABLE gt_konv INTO lw_konv WITH KEY knumv = lw_wb2_v_vbrk_vbrp2-knumv
kposn = lw_wb2_v_vbrk_vbrp2-posnr_i
kschl = gc_kschl_cess.
IF sy-subrc EQ 0.
lw_eway_api_itm-cess_rate = lw_konv-kbetr / 10.
lv_total_cess_value = lv_total_cess_value + lw_konv-kwert.
ENDIF.
lw_eway_api_itm-cessnonadvol = 0.
lv_total_cessnoval_value = lv_total_cessnoval_value + 0.
lv_total_taxable_value = lv_total_taxable_value + lw_wb2_v_vbrk_vbrp2-netwr_i.
APPEND lw_eway_api_itm TO gt_eway_api_itm.
CLEAR:lw_eway_api_itm.
06.10.2020 working with program 1

*********************************** End of Fill item derails ************************************************


ENDLOOP.
**** Header total values
lw_eway_api_hdr-total_invoice_value = lv_total_taxable_value +
lv_total_cgst_value +
lv_total_sgst_value +
lv_total_igst_value +
lv_total_cess_value +
lv_total_cessnoval_value.
lw_eway_api_hdr-other_value = 0.
lw_eway_api_hdr-taxable_amount = lv_total_taxable_value.
lw_eway_api_hdr-cgst_amount = lv_total_cgst_value.
lw_eway_api_hdr-sgst_amount = lv_total_sgst_value.
lw_eway_api_hdr-igst_amount = lv_total_igst_value.
lw_eway_api_hdr-cess_amount = lv_total_cess_value.
lw_eway_api_hdr-cess_nonadvol_value = lv_total_cessnoval_value.
APPEND lw_eway_api_hdr TO gt_eway_api_hdr.
CLEAR:lw_eway_api_hdr.
ELSE.
MESSAGE 'Please select appropriate documents for E-Doc generation'(039) TYPE 'I'.
ENDIF.
**** Header total values
* Delivery Challan
ELSE.
READ TABLE gt_wb2_v_likp_lips2 INTO lw_wb2_v_likp_lips2 WITH KEY vbeln = gw_final-vbeln.
IF sy-subrc = 0.
lv_index = sy-tabix.
*** Reset header value for every document
lv_total_invoice_value = 0.
lv_total_sgst_value = 0.
lv_total_cgst_value = 0.
lv_total_igst_value = 0.
lv_total_cess_value = 0.
lv_total_cessnoval_value = 0.
lv_total_taxable_value = 0.
LOOP AT gt_wb2_v_likp_lips2 INTO lw_wb2_v_likp_lips2 FROM lv_index.
IF lw_wb2_v_likp_lips2-vbeln NE gw_final-vbeln.
EXIT.
ENDIF.
********************************* Begin of Fill header derails ***********************************************
lw_eway_api_hdr-bukrs = p_ccode.
READ TABLE gt_api INTO lw_usrgstin WITH KEY apiid = gc_apiid_eusrgstin.
IF sy-subrc IS INITIAL.
CONCATENATE '"' lw_usrgstin-apiprov '"' INTO lw_eway_api_hdr-user_gstin.
ELSE.
CONCATENATE '"' gw_final-sup_gstin '"' INTO lw_eway_api_hdr-user_gstin.
ENDIF.
READ TABLE gt_doctyp INTO ls_doctyp WITH KEY fkart = lw_wb2_v_likp_lips2-lfart.
IF sy-subrc EQ 0.
lv_supply_type = ls_doctyp-sup_type.
lv_sub_supply_type = ls_doctyp-sub_type.
lv_document_type = ls_doctyp-edoc_type.
ENDIF.
*& Supply Type
READ TABLE gt_supply_values INTO ls_values WITH KEY domvalue_l = lv_supply_type.
IF sy-subrc EQ 0.
TRANSLATE ls_values-ddtext TO UPPER CASE.
CONCATENATE '"' ls_values-ddtext '"' INTO lw_eway_api_hdr-supply_type.
ENDIF.
*& Sub Supply Type
READ TABLE gt_sub_supply_values INTO ls_values WITH KEY domvalue_l = lv_sub_supply_type.
IF sy-subrc EQ 0.
TRANSLATE ls_values-ddtext TO UPPER CASE.
06.10.2020 working with program 1

CONCATENATE '"' ls_values-ddtext '"' INTO lw_eway_api_hdr-sub_supply_type.


CONCATENATE '"' ls_values-ddtext '"' INTO lw_eway_api_hdr-sub_supply_description.
ENDIF.
*& Document Type
READ TABLE gt_doctyp_values INTO ls_values WITH KEY domvalue_l = lv_document_type.
IF sy-subrc EQ 0.
TRANSLATE ls_values-ddtext TO UPPER CASE.
CONCATENATE '"' ls_values-ddtext '"' INTO lw_eway_api_hdr-document_type.
ENDIF.
CONCATENATE '"' lw_wb2_v_likp_lips2-lfgja_i '"' INTO lw_eway_api_hdr-doc_year.
CASE lv_document_number.
WHEN 1. "Billing Number as same as ODN
CONCATENATE '"' lw_wb2_v_likp_lips2-vbeln '"' INTO lw_eway_api_hdr-document_number.
WHEN 2. "ODN
CONCATENATE '"' lw_wb2_v_likp_lips2-xblnr '"' INTO lw_eway_api_hdr-document_number.
ENDCASE.
lw_eway_api_hdr-vbeln = lw_wb2_v_likp_lips2-vbeln.
CONCATENATE '"'
lw_wb2_v_likp_lips2-fkdat+6(2) '/'
lw_wb2_v_likp_lips2-fkdat+4(2) '/'
lw_wb2_v_likp_lips2-fkdat+0(4)
'"' INTO lw_eway_api_hdr-document_date.
*** Supplier details
CLEAR: lw_t001w.
READ TABLE gt_t001w INTO lw_t001w WITH KEY werks = lw_wb2_v_likp_lips2-werks_i BINARY SEARCH.
IF sy-subrc EQ 0.
READ TABLE gt_api INTO lw_usrgstin WITH KEY apiid = gc_apiid_esupgstin.
IF sy-subrc IS INITIAL.
CONCATENATE '"' lw_usrgstin-apiprov '"' INTO lw_eway_api_hdr-gstin_of_consignor.
ELSE.
CONCATENATE '"' gw_final-sup_gstin '"' INTO lw_eway_api_hdr-gstin_of_consignor.
ENDIF.
CONCATENATE '"' lw_t001w-name1 '"' INTO lw_eway_api_hdr-legal_name_of_consignor.
CONCATENATE '"' lw_t001w-name2 '"' INTO lw_eway_api_hdr-address1_of_consignor.
CONCATENATE '"' lw_t001w-stras '"' INTO lw_eway_api_hdr-address2_of_consignor.
CONCATENATE '"' lw_t001w-ort01 '"' INTO lw_eway_api_hdr-place_of_consignor.
CONCATENATE '"' lw_t001w-pstlz '"' INTO lw_eway_api_hdr-pincode_of_consignor.
CLEAR:lw_t005u_s.
READ TABLE gt_t005u_s INTO lw_t005u_s WITH KEY bland = lw_t001w-regio.
IF sy-subrc EQ 0.
TRANSLATE lw_t005u_s-bezei TO UPPER CASE.
CONCATENATE '"' lw_t005u_s-bezei '"' INTO lw_eway_api_hdr-state_of_consignor.
ENDIF.
CONCATENATE '"' lw_t005u_s-bezei '"' INTO lw_eway_api_hdr-actual_from_state_name.
ELSE.
ENDIF.
*** Buyer details
CLEAR:lw_kna1, lw_adrc, lw_adr6.
READ TABLE gt_kna1 INTO lw_kna1 WITH KEY kunnr = lw_wb2_v_likp_lips2-kunag BINARY SEARCH.
IF sy-subrc EQ 0.
READ TABLE gt_api INTO lw_usrgstin WITH KEY apiid = gc_apiid_ebuygstin.
IF sy-subrc IS INITIAL.
CONCATENATE '"' lw_usrgstin-apiprov '"' INTO lw_eway_api_hdr-gstin_of_consignee.
ELSE.
CONCATENATE '"' lw_kna1-stcd3 '"' INTO lw_eway_api_hdr-gstin_of_consignee.
ENDIF.
READ TABLE gt_adrc INTO lw_adrc WITH KEY addrnumber = lw_kna1-adrnr.
READ TABLE gt_adr6 INTO lw_adr6 WITH KEY addrnumber = lw_adrc-addrnumber.
CONCATENATE '"' lw_kna1-name1 '"' INTO lw_eway_api_hdr-legal_name_of_consignee.
CONCATENATE '"' lw_kna1-stras '"' INTO lw_eway_api_hdr-address1_of_consignee.
CONCATENATE '"' lw_kna1-name2 '"' INTO lw_eway_api_hdr-address2_of_consignee.
CONCATENATE '"' lw_kna1-ort01 '"' INTO lw_eway_api_hdr-place_of_consignee.
CONCATENATE '"' lw_t001w-pstlz '"' INTO lw_eway_api_hdr-pincode_of_consignee.
06.10.2020 working with program 1

CLEAR:lw_t005u.
READ TABLE gt_t005u INTO lw_t005u WITH KEY bland = lw_kna1-regio.
IF sy-subrc EQ 0.
TRANSLATE lw_t005u-bezei TO UPPER CASE.
CONCATENATE '"' lw_t005u-bezei '"' INTO lw_eway_api_hdr-state_of_supply.
ENDIF.
CONCATENATE '"' lw_t005u-bezei '"' INTO lw_eway_api_hdr-actual_to_state_name.
ENDIF.
*** Value details
"default value
lw_eway_api_hdr-other_value = '0'.
lw_eway_api_hdr-total_invoice_value = '0'.
lw_eway_api_hdr-taxable_amount = '0'.
lw_eway_api_hdr-cgst_amount = '0'.
lw_eway_api_hdr-sgst_amount = '0'.
lw_eway_api_hdr-igst_amount = '0'.
lw_eway_api_hdr-cess_amount = '0'.
lw_eway_api_hdr-cess_nonadvol_value = '0'.
CONCATENATE '"' 'REGULAR' '"' INTO lw_eway_api_hdr-transaction_type.
CONCATENATE '"' '1' '"' INTO lw_eway_api_hdr-generate_status.
CONCATENATE '"' 'ERP' '"' INTO lw_eway_api_hdr-data_source.
CONCATENATE '"' sy-uname '"' INTO lw_eway_api_hdr-user_ref.
CONCATENATE '"' lw_kna1-ort01 '"' INTO lw_eway_api_hdr-location_code.
*& Generate E-Way Bill Part A & Part B.
IF gv_e_comm EQ 'EEAYG'.
CONCATENATE '"' 'ABC' '"' INTO lw_eway_api_hdr-eway_bill_status.
ELSE.
*& Generate E-Way Bill Part A only.
CONCATENATE '"' 'AC' '"' INTO lw_eway_api_hdr-eway_bill_status.
ENDIF.
*& Auto print E-way Bill
CONCATENATE '"' 'Y' '"' INTO lw_eway_api_hdr-auto_print.
CONCATENATE '"' lw_adr6-smtp_addr '"' INTO lw_eway_api_hdr-email.
*** Transport details
CONCATENATE '"' gw_final-t_id '"' INTO lw_eway_api_hdr-transporter_id.
CONCATENATE '"' gw_final-t_name '"' INTO lw_eway_api_hdr-transporter_name.
READ TABLE gt_t_mode_values INTO ls_values WITH KEY domvalue_l = gw_final-t_mode.
IF sy-subrc EQ 0.
TRANSLATE ls_values-ddtext TO UPPER CASE.
CONCATENATE '"' ls_values-ddtext '"' INTO lw_eway_api_hdr-transportation_mode.
ENDIF.
CONCATENATE '"' gw_final-t_distance '"' INTO lw_eway_api_hdr-transportation_distance.
CONCATENATE '"' gw_final-t_doc_no '"' INTO lw_eway_api_hdr-transporter_document_number.
CONCATENATE '"' gw_final-t_date '"' INTO lw_eway_api_hdr-transporter_document_date.
CONCATENATE '"' gw_final-v_number '"' INTO lw_eway_api_hdr-vehicle_number.
READ TABLE gt_v_type_values INTO ls_values WITH KEY domvalue_l = gw_final-v_type.
IF sy-subrc EQ 0.
TRANSLATE ls_values-ddtext TO UPPER CASE.
CONCATENATE '"' ls_values-ddtext '"' INTO lw_eway_api_hdr-vehicle_type.
ENDIF.
********************************* End of Fill header derails ***********************************************
********************************** Begin of Fill item derails ************************************************
*** Rest item tax rate
lw_eway_api_itm-cgst_rate = '0'.
lw_eway_api_itm-sgst_rate = '0'.
lw_eway_api_itm-igst_rate = '0'.
lw_eway_api_itm-cess_rate = '0'.
lw_eway_api_itm-cessnonadvol = '0'.
lw_eway_api_itm-bukrs = lw_eway_api_hdr-bukrs.
lw_eway_api_itm-document_number = lw_eway_api_hdr-document_number.
lw_eway_api_itm-doc_year = lw_eway_api_hdr-doc_year.
lw_eway_api_itm-document_type = lw_eway_api_hdr-document_type.
lw_eway_api_itm-document_date = lw_eway_api_hdr-document_date.
06.10.2020 working with program 1

CONCATENATE '"' lw_wb2_v_likp_lips2-matnr_i '"' INTO lw_eway_api_itm-product_name.


CONCATENATE '"' lw_wb2_v_likp_lips2-arktx_i '"' INTO lw_eway_api_itm-product_description.
READ TABLE gt_marc INTO lw_marc WITH KEY matnr = lw_wb2_v_likp_lips2-matnr_i
werks = lw_wb2_v_likp_lips2-werks_i
BINARY SEARCH.
IF sy-subrc EQ 0.
CONCATENATE '"' lw_marc-steuc '"' INTO lw_eway_api_itm-hsn_code.
ENDIF.
lw_eway_api_itm-quantity = lw_wb2_v_likp_lips2-lfimg_i.
CLEAR lv_output_uom.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
EXPORTING
input = lw_wb2_v_likp_lips2-meins_i
IMPORTING
output = lv_output_uom
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
READ TABLE gt_doc_uom INTO ls_doc_uom WITH KEY meins = lv_output_uom.
IF sy-subrc EQ 0.
CONCATENATE '"' ls_doc_uom-edoc_uom '"' INTO lw_eway_api_itm-unit_of_product.
ENDIF.
"Item Amount
lw_eway_api_itm-taxable_amount = lw_wb2_v_likp_lips2-netwr_i.
"CGST Tax amount
READ TABLE gt_konv INTO lw_konv WITH KEY knumv = lw_wb2_v_likp_lips2-knumv
kposn = lw_wb2_v_likp_lips2-posnr_i
kschl = gc_kschl_jocg
BINARY SEARCH.
IF sy-subrc EQ 0.
lw_eway_api_itm-cgst_rate = lw_konv-kbetr / 10.
lv_total_cgst_value = lv_total_cgst_value + lw_konv-kwert.
ENDIF.
"SGST Tax amount
READ TABLE gt_konv INTO lw_konv WITH KEY knumv = lw_wb2_v_likp_lips2-knumv
kposn = lw_wb2_v_likp_lips2-posnr_i
kschl = gc_kschl_josg
BINARY SEARCH.
IF sy-subrc EQ 0.
lw_eway_api_itm-sgst_rate = lw_konv-kbetr / 10.
lv_total_sgst_value = lv_total_sgst_value + lw_konv-kwert.
ENDIF.
"IGST Tax amount
READ TABLE gt_konv INTO lw_konv WITH KEY knumv = lw_wb2_v_likp_lips2-knumv
kposn = lw_wb2_v_likp_lips2-posnr_i
kschl = gc_kschl_joig
BINARY SEARCH.
IF sy-subrc EQ 0.
lw_eway_api_itm-igst_rate = lw_konv-kbetr / 10.
lv_total_igst_value = lv_total_igst_value + lw_konv-kwert.
ENDIF.
"CESS Tax amount
READ TABLE gt_konv INTO lw_konv WITH KEY knumv = lw_wb2_v_likp_lips2-knumv
kposn = lw_wb2_v_likp_lips2-posnr_i
kschl = gc_kschl_cess
BINARY SEARCH.
IF sy-subrc EQ 0.
lw_eway_api_itm-cess_rate = lw_konv-kbetr / 10.
lv_total_cess_value = lv_total_cess_value + lw_konv-kwert.
ENDIF.
06.10.2020 working with program 1

lw_eway_api_itm-cessnonadvol = 0.
lv_total_cessnoval_value = lv_total_cessnoval_value + 0.
lv_total_taxable_value = lv_total_taxable_value + lw_wb2_v_likp_lips2-netwr.
APPEND lw_eway_api_itm TO gt_eway_api_itm.
CLEAR:lw_eway_api_itm.
*********************************** End of Fill item derails ************************************************
ENDLOOP.
lw_eway_api_hdr-total_invoice_value = lv_total_taxable_value +
lv_total_cgst_value +
lv_total_sgst_value +
lv_total_igst_value +
lv_total_cess_value +
lv_total_cessnoval_value.
lw_eway_api_hdr-other_value = 0.
lw_eway_api_hdr-taxable_amount = lv_total_taxable_value.
lw_eway_api_hdr-cgst_amount = lv_total_cgst_value.
lw_eway_api_hdr-sgst_amount = lv_total_sgst_value.
lw_eway_api_hdr-igst_amount = lv_total_igst_value.
lw_eway_api_hdr-cess_amount = lv_total_cess_value.
lw_eway_api_hdr-cess_nonadvol_value = lv_total_cessnoval_value.
APPEND lw_eway_api_hdr TO gt_eway_api_hdr.
CLEAR:lw_eway_api_hdr.
ENDIF.
ENDIF.
ENDIF.
ELSE.
MESSAGE 'Please select appropriate documents for E-Doc generation'(039) TYPE 'I'.
ENDIF.
ENDLOOP.
IF gt_eway_api_hdr IS NOT INITIAL.
SORT gt_eway_api_hdr .
SORT gt_eway_api_itm .
DELETE ADJACENT DUPLICATES FROM gt_eway_api_hdr COMPARING ALL FIELDS.
DELETE ADJACENT DUPLICATES FROM gt_einv_api_itm COMPARING ALL FIELDS.
lt_api_hdr = gt_eway_api_hdr .
lt_api_itm = gt_eway_api_itm .
CLEAR lv_error.
CALL FUNCTION 'ZFM_EWAY_BILL_VALIDATION'
EXPORTING
im_ucomm = gv_e_comm
im_api_header = gt_eway_api_hdr
IMPORTING
ex_error = lv_error.
IF lv_error = ' '.
CLEAR:lw_token,lw_return.
IF gw_token IS NOT INITIAL.
lw_token = gw_token.
ELSE.
CALL FUNCTION 'ZFM_EINVOICE_OAUTH_API'
IMPORTING
ex_token = lw_token
ex_return = lw_return
et_messages = lt_messages.
ENDIF.
IF lw_token IS NOT INITIAL.
CALL FUNCTION 'ZFM_EWAY_BILL_GENERATE_API'
EXPORTING
im_token = lw_token
im_api_header = lt_api_hdr
im_api_item = lt_api_itm
IMPORTING
ex_return = lw_return
ex_messages = lt_messages
06.10.2020 working with program 1

ex_ewaybill = lt_ewaybill
ex_eway_transport = lt_eway_transport.
IF lt_ewaybill IS NOT INITIAL.
LOOP AT lt_ewaybill ASSIGNING <lw_ewaybill>.
READ TABLE gt_final INTO gw_final WITH KEY vbeln = <lw_ewaybill>-docno.
IF sy-subrc = 0.
<lw_ewaybill>-gjahr = gw_final-gjahr.
<lw_ewaybill>-doctyp = gw_final-fkart.
ENDIF.
ENDLOOP.
MODIFY j_1ig_ewaybill FROM TABLE lt_ewaybill.
IF sy-subrc EQ 0.
COMMIT WORK.
LOOP AT lt_ewaybill INTO lw_ewaybill.
READ TABLE gt_final ASSIGNING <gw_final> WITH KEY vbeln = lw_ewaybill-docno.
IF sy-subrc IS INITIAL.
<gw_final>-eway_num = lw_ewaybill-ebillno.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = lw_ewaybill-egen_dat
IMPORTING
date_external = <gw_final>-eway_date
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Date conversion error'(m02) TYPE 'I'.
ENDIF.
<gw_final>-eway_ernam = lw_ewaybill-ernam.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = lw_ewaybill-erdat
IMPORTING
date_external = <gw_final>-eway_erdat
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Date conversion error'(m02) TYPE 'I'.
ENDIF.
<gw_final>-eway_erzet = lw_ewaybill-egen_time.
*Valid upto
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = lw_ewaybill-vdtodate
IMPORTING
date_external = <gw_final>-eway_v_to
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Date conversion error'(m02) TYPE 'I'.
ENDIF.
IF lw_ewaybill-status = gc_eway_sts_a.
<gw_final>-eway_status = 'Success'(060).
<gw_final>-eway_icon = gc_icon_08.
<gw_final>-eway_error = space.
ELSEIF lw_ewaybill-status = gc_eway_sts_e.
<gw_final>-eway_status = 'Error'(061).
<gw_final>-eway_icon = gc_icon_0a.
ELSEIF lw_ewaybill-status = gc_eway_sts_c.
<gw_final>-eway_status = 'Cancelled'(062).
<gw_final>-eway_icon = gc_icon_0w.
06.10.2020 working with program 1

ENDIF.
ENDIF.
ENDLOOP.
CLEAR lt_show_message.
IF lt_messages IS NOT INITIAL.
LOOP AT gt_index INTO lw_index.
READ TABLE gt_final ASSIGNING <gw_final> INDEX lw_index-index.
IF sy-subrc EQ 0.
CLEAR: lv_string,lw_etransport.
LOOP AT lt_messages INTO lw_message WHERE message_v3 = <gw_final>-vbeln.
lw_show_message-msgid = gc_msgid_01.
lw_show_message-msgty = lw_message-type.
lw_show_message-msgno = gc_msgno_319.
lw_show_message-msgv1 = lw_message-message_v1.
lw_show_message-msgv2 = lw_message-message_v2.
lw_show_message-msgv3 = lw_message-message_v3.
lw_show_message-msgv4 = lw_message-message_v4.
APPEND lw_show_message TO lt_show_message.
IF lw_message-type = gc_mtype_s.
READ TABLE lt_eway_transport INTO ls_eway_transport WITH KEY docno = <gw_final>-vbeln.
IF sy-subrc IS INITIAL.
<gw_final>-eway_print = ls_eway_transport-eway_print.
ELSE.
<gw_final>-eway_print = lw_message-message_v4.
ENDIF.
UPDATE zteway_transport SET eway_print = <gw_final>-eway_print
WHERE bukrs = <gw_final>-bukrs AND
gjahr = <gw_final>-gjahr AND
docno = lw_message-message_v3 AND
doctyp = <gw_final>-fkart.
IF sy-subrc IS NOT INITIAL.
MOVE-CORRESPONDING <gw_final> TO lw_etransport.
lw_etransport-t_date = <gw_final>-fkdat_db.
lw_etransport-doctyp = <gw_final>-fkart.
lw_etransport-docno = <gw_final>-vbeln.
lw_etransport-gjahr = <gw_final>-gjahr.
READ TABLE lt_eway_transport INTO ls_eway_transport WITH KEY docno = <gw_final>-vbeln.
IF sy-subrc IS INITIAL.
<gw_final>-eway_print = ls_eway_transport-eway_print.
ELSE.
<gw_final>-eway_print = lw_message-message_v4.
ENDIF.
lw_etransport-gjahr = <gw_final>-eway_print.
lw_etransport-ernam = sy-uname.
lw_etransport-erdat = sy-datum.
MODIFY zteway_transport FROM lw_etransport.
IF sy-subrc IS NOT INITIAL.
MESSAGE 'Data update error'(022) TYPE 'I'.
ENDIF.
ENDIF.
CONTINUE.
ELSEIF lw_message-type = gc_mtype_e.
CONCATENATE lv_string lw_message-message INTO lv_string SEPARATED BY ' '.
ENDIF.
ENDLOOP.
IF lv_string IS NOT INITIAL.
<gw_final>-eway_error = lv_string.
UPDATE zteway_transport SET eway_error = lv_string
WHERE bukrs = <gw_final>-bukrs AND
gjahr = <gw_final>-gjahr AND
docno = lw_message-message_v3 AND
doctyp = <gw_final>-fkart.
IF sy-subrc IS NOT INITIAL.
06.10.2020 working with program 1

MOVE-CORRESPONDING <gw_final> TO lw_etransport.


lw_etransport-t_date = <gw_final>-fkdat_db.
lw_etransport-doctyp = <gw_final>-fkart.
lw_etransport-docno = <gw_final>-vbeln.
lw_etransport-ernam = sy-uname.
lw_etransport-erdat = sy-datum.
MODIFY zteway_transport FROM lw_etransport.
IF sy-subrc IS NOT INITIAL.
MESSAGE 'Data update error'(022) TYPE 'I'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
CALL METHOD gref_alv_grid->refresh_table_display
EXCEPTIONS
finished = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Table refresh error'(012) TYPE 'I'.
ENDIF.
CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP'
TABLES
i_message_tab = lt_show_message.
ENDIF.
ENDIF.
ENDIF.
ELSE.
MESSAGE 'Access token generation error'(015) TYPE 'I'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDFORM.
*& *
*& Form EWAYBILL_UPDATE
*& *
* text
* *
* > p1 text
* < p2 text
* *
FORM ewaybill_update_transporter.
*
* DATA:lv_index TYPE sy-tabix.
*
DATA:lw_token TYPE string,
lw_return TYPE string,
wa_return TYPE string,
lt_messages TYPE bapiret2_t,
lw_message TYPE bapiret2,
lt_show_message TYPE esp1_message_tab_type,
lw_show_message LIKE LINE OF lt_show_message,
lt_ewaybill TYPE TABLE OF j_1ig_ewaybill,
lw_ewaybill TYPE j_1ig_ewaybill,
lw_index TYPE lvc_s_row,
lv_val TYPE xfeld,
lv_answer TYPE c,
lw_usrgstin TYPE ty_api,
lt_eway_upd_transporter_api TYPE ztt_eway_bill_updat_trn_id_str,
06.10.2020 working with program 1

ls_eway_upd_transporter_api TYPE zst_eway_bill_updat_trn_id_str,


lt_eway_ext_validity TYPE ztt_eway_bill_extend_validity,
ls_eway_ext_validity TYPE zst_eway_bill_extend_validity,
lv_return TYPE xfeld.
FIELD-SYMBOLS <gw_final> TYPE ty_final.
CLEAR: lt_messages,lt_ewaybill,lt_eway_upd_transporter_api.
PERFORM check_selected_data CHANGING lv_val.
IF lv_val IS INITIAL.
PERFORM call_popup USING text-t23 text-t25
CHANGING lv_answer.
IF lv_answer = '1'.
LOOP AT gt_index INTO lw_index.
READ TABLE gt_final INTO gw_final INDEX lw_index-index.
IF sy-subrc IS INITIAL AND gw_final-eway_num IS NOT INITIAL AND gw_final-eway_icon = gc_icon_08.
********************************* Begin of Fill header derails ***********************************************
READ TABLE gt_api INTO lw_usrgstin WITH KEY apiid = gc_apiid_eusrgstin.
IF sy-subrc IS INITIAL.
CONCATENATE '"' lw_usrgstin-apiprov '"' INTO ls_eway_upd_transporter_api-user_gstin.
ELSE.
CONCATENATE '"' gw_final-sup_gstin '"' INTO ls_eway_upd_transporter_api-user_gstin.
ENDIF.
ls_eway_upd_transporter_api-ebillno = gw_final-eway_num.
CONCATENATE '"' gw_final-t_id '"' INTO ls_eway_upd_transporter_api-transporter_id.
CONCATENATE '"' gw_final-t_name '"' INTO ls_eway_upd_transporter_api-transporter_name.
********************************* End of Fill header derails ***********************************************
APPEND ls_eway_upd_transporter_api TO lt_eway_upd_transporter_api.
CLEAR:ls_eway_upd_transporter_api.
ENDIF.
ENDLOOP.
IF lt_eway_upd_transporter_api IS NOT INITIAL.
SORT lt_eway_upd_transporter_api.
DELETE ADJACENT DUPLICATES FROM lt_eway_upd_transporter_api COMPARING ALL FIELDS.
CLEAR lv_return.
CALL FUNCTION 'ZFM_EWAY_BILL_VALIDATION'
EXPORTING
im_ucomm = gc_ucomm_ewayu
im_api_transport = lt_eway_upd_transporter_api
IMPORTING
ex_error = lv_return.
IF lv_return = ' '.
CLEAR:lw_token,lw_return.
IF gw_token IS NOT INITIAL.
lw_token = gw_token.
ELSE.
CALL FUNCTION 'ZFM_EINVOICE_OAUTH_API'
IMPORTING
ex_token = lw_token
ex_return = lw_return
et_messages = lt_messages.
ENDIF.
IF lw_token IS NOT INITIAL.
CALL FUNCTION 'ZFM_EWAY_BILL_UPD_TRANSID_API'
EXPORTING
im_token = lw_token
im_api_data = lt_eway_upd_transporter_api
IMPORTING
ex_return = lw_return
ex_messages = lt_messages
ex_api_data = lt_eway_ext_validity.
IF lt_eway_ext_validity IS NOT INITIAL."lw_return EQ 'S'.
LOOP AT lt_eway_ext_validity INTO ls_eway_ext_validity.
READ TABLE gt_final INTO gw_final WITH KEY eway_num = ls_eway_ext_validity-ewaybillno.
IF sy-subrc = 0.
06.10.2020 working with program 1

lw_ewaybill-bukrs = gw_final-bukrs.
lw_ewaybill-docno = gw_final-vbeln.
lw_ewaybill-gjahr = gw_final-gjahr.
lw_ewaybill-doctyp = gw_final-fkart.
lw_ewaybill-ebillno = ls_eway_ext_validity-ewaybillno.
lw_ewaybill-aenam = sy-uname.
lw_ewaybill-aedat = sy-datum.
UPDATE j_1ig_ewaybill SET aenam = lw_ewaybill-aenam
aedat = lw_ewaybill-aedat
WHERE bukrs = lw_ewaybill-bukrs AND
docno = lw_ewaybill-docno AND
doctyp = lw_ewaybill-doctyp AND
gjahr = lw_ewaybill-gjahr AND
ebillno = lw_ewaybill-ebillno.
IF sy-subrc = 0.
APPEND lw_ewaybill TO lt_ewaybill.
ENDIF.
ENDIF.
ENDLOOP.
IF sy-subrc EQ 0.
COMMIT WORK.
CALL METHOD gref_alv_grid->refresh_table_display
EXCEPTIONS
finished = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Table refresh error'(012) TYPE 'I'.
ENDIF.
CLEAR lt_show_message.
IF lt_messages IS NOT INITIAL.
LOOP AT lt_messages INTO lw_message.
lw_show_message-msgid = gc_msgid_01.
lw_show_message-msgty = lw_message-type.
lw_show_message-msgno = gc_msgno_319.
lw_show_message-msgv1 = lw_message-message_v1.
lw_show_message-msgv2 = lw_message-message_v2.
lw_show_message-msgv3 = lw_message-message_v3.
lw_show_message-msgv4 = lw_message-message_v4.
APPEND lw_show_message TO lt_show_message.
ENDLOOP.
CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP'
TABLES
i_message_tab = lt_show_message.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ELSE.
MESSAGE 'Please select appropriate documents for E-Waybill update'(016) TYPE 'I'.
ENDIF.
ENDIF.
ENDIF.
ENDFORM.
*& *
*& Form EWAYBILL_EXTEND
*& *
* text
* *
* > p1 text
* < p2 text
* *
FORM ewaybill_extend .
06.10.2020 working with program 1

DATA:lw_index TYPE lvc_s_row,


lv_val TYPE xfeld,
lv_answer TYPE c,
lw_token TYPE string,
lw_return TYPE string,
wa_return TYPE string,
lt_messages TYPE bapiret2_t,
lw_message TYPE bapiret2,
lt_show_message TYPE esp1_message_tab_type,
lw_show_message LIKE LINE OF lt_show_message,
lt_ewaybill TYPE TABLE OF j_1ig_ewaybill,
lw_ewaybill TYPE j_1ig_ewaybill,
lw_wb2_v_vbrk_vbrp2 TYPE ty_wb2_v_vbrk_vbrp2,
lt_eway_ext_valid_api TYPE ztt_eway_bill_ext_valid_api,
ls_eway_ext_valid_api TYPE zst_eway_bill_ext_valid_api,
lt_eway_ext_validity TYPE ztt_eway_bill_extend_validity,
ls_eway_ext_validity TYPE zst_eway_bill_extend_validity,
lw_t001w TYPE ty_t001w1,
lw_t005u_s TYPE ty_t005u,
lw_usrgstin TYPE ty_api,
ls_values TYPE dd07v,
lv_return TYPE xfeld.
FIELD-SYMBOLS <gw_final> TYPE ty_final.
CLEAR: lt_messages,lt_ewaybill,lt_eway_ext_valid_api.
PERFORM check_selected_data CHANGING lv_val.
IF lv_val IS INITIAL.
PERFORM call_popup USING text-t23 text-t26
CHANGING lv_answer.
IF lv_answer = '1'.
LOOP AT gt_index INTO lw_index.
READ TABLE gt_final INTO gw_final INDEX lw_index-index.
IF sy-subrc IS INITIAL AND gw_final-eway_num IS NOT INITIAL.
********************************* Begin of Fill header derails ***********************************************
ls_eway_ext_valid_api-ebillno = gw_final-eway_num.
READ TABLE gt_api INTO lw_usrgstin WITH KEY apiid = gc_apiid_eusrgstin.
IF sy-subrc IS INITIAL.
CONCATENATE '"' lw_usrgstin-apiprov '"' INTO ls_eway_ext_valid_api-user_gstin.
ELSE.
CONCATENATE '"' gw_final-sup_gstin '"' INTO ls_eway_ext_valid_api-user_gstin.
ENDIF.
CONCATENATE '"' gw_final-v_number '"' INTO ls_eway_ext_valid_api-vehicle_number.
*** Supplier details
CLEAR: lw_t001w.
READ TABLE gt_t001w INTO lw_t001w WITH KEY werks = gw_final-werks BINARY SEARCH.
IF sy-subrc EQ 0.
CONCATENATE '"' lw_t001w-ort01 '"' INTO ls_eway_ext_valid_api-place_of_consignor.
CLEAR:lw_t005u_s.
READ TABLE gt_t005u_s INTO lw_t005u_s WITH KEY bland = lw_t001w-regio.
IF sy-subrc EQ 0.
TRANSLATE lw_t005u_s-bezei TO UPPER CASE.
CONCATENATE '"' lw_t005u_s-bezei '"' INTO ls_eway_ext_valid_api-state_of_consignor.
ENDIF.
ELSE.
ENDIF.
READ TABLE gt_t_mode_values INTO ls_values WITH KEY domvalue_l = gw_final-t_mode.
IF sy-subrc EQ 0.
TRANSLATE ls_values-ddtext TO UPPER CASE.
CONCATENATE '"' ls_values-ddtext '"' INTO ls_eway_ext_valid_api-transportation_mode.
ENDIF.
CONCATENATE '"' gw_final-t_r_distance '"' INTO ls_eway_ext_valid_api-remaining_distance.
CONCATENATE '"' gw_final-t_doc_no '"' INTO ls_eway_ext_valid_api-transporter_document_number.
CONCATENATE '"' gw_final-t_date '"' INTO ls_eway_ext_valid_api-transporter_document_date.
READ TABLE gt_t_ext_reason_values INTO ls_values WITH KEY domvalue_l = gw_final-t_ext_valid_reason.
06.10.2020 working with program 1

IF sy-subrc EQ 0.
TRANSLATE ls_values-ddtext TO UPPER CASE.
CONCATENATE '"' ls_values-ddtext '"' INTO ls_eway_ext_valid_api-extend_validity_reason.
ENDIF.
CONCATENATE '"' gw_final-t_ext_valid_remarks '"' INTO ls_eway_ext_valid_api-extend_remarks.
ls_eway_ext_valid_api-from_pincode = gw_final-t_from_pin.
CONCATENATE '"' gw_final-t_consignment_status '"' INTO ls_eway_ext_valid_api-consignment_status.
*& Transit is moving or not
IF gw_final-eway_v_to GT sy-datum.
READ TABLE gt_t_transit_type_values INTO ls_values WITH KEY domvalue_l = gw_final-t_transit_type.
IF sy-subrc EQ 0.
TRANSLATE ls_values-ddtext TO UPPER CASE.
CONCATENATE '"' ls_values-ddtext '"' INTO ls_eway_ext_valid_api-transit_type.
ENDIF.
IF gw_final-t_transit_type IS INITIAL.
CONCATENATE '"' ' ' '"' INTO ls_eway_ext_valid_api-transit_type.
ENDIF.
CONCATENATE '"' gw_final-t_address1 '"' INTO ls_eway_ext_valid_api-address_line1.
CONCATENATE '"' gw_final-t_address2 '"' INTO ls_eway_ext_valid_api-address_line2.
CONCATENATE '"' gw_final-t_address3 '"' INTO ls_eway_ext_valid_api-address_line3.
ELSE.
CONCATENATE '"' ' ' '"' INTO ls_eway_ext_valid_api-transit_type.
CONCATENATE '"' ' ' '"' INTO ls_eway_ext_valid_api-address_line1.
CONCATENATE '"' ' ' '"' INTO ls_eway_ext_valid_api-address_line2.
CONCATENATE '"' ' ' '"' INTO ls_eway_ext_valid_api-address_line3.
ENDIF.
********************************* End of Fill header derails ***********************************************
APPEND ls_eway_ext_valid_api TO lt_eway_ext_valid_api.
CLEAR:ls_eway_ext_valid_api.
ENDIF.
ENDLOOP.
IF lt_eway_ext_valid_api IS NOT INITIAL.
SORT lt_eway_ext_valid_api.
DELETE ADJACENT DUPLICATES FROM lt_eway_ext_valid_api COMPARING ALL FIELDS.
CALL FUNCTION 'ZFM_EWAY_BILL_VALIDATION'
EXPORTING
im_ucomm = gc_ucomm_ewaye
im_api_extend = lt_eway_ext_valid_api
IMPORTING
ex_error = lv_return.
CLEAR:lw_token,lw_return.
IF gw_token IS NOT INITIAL.
lw_token = gw_token.
ELSE.
CALL FUNCTION 'ZFM_EINVOICE_OAUTH_API'
IMPORTING
ex_token = lw_token
ex_return = lw_return
et_messages = lt_messages.
ENDIF.
IF lw_token IS NOT INITIAL." AND lw_return EQ 'S'.
CALL FUNCTION 'ZFM_EWAY_BILL_EXTEND_VALID_API'
EXPORTING
im_token = lw_token
im_api_data = lt_eway_ext_valid_api
IMPORTING
ex_return = lw_return
ex_messages = lt_messages
ex_exd_details = lt_eway_ext_validity.
IF lt_eway_ext_validity IS NOT INITIAL."lw_return EQ 'S'.
LOOP AT lt_eway_ext_validity INTO ls_eway_ext_validity.
READ TABLE gt_final ASSIGNING <gw_final> WITH KEY eway_num = ls_eway_ext_validity-ewaybillno.
IF sy-subrc = 0.
06.10.2020 working with program 1

IF ls_eway_ext_validity-validupto IS NOT INITIAL.


lw_ewaybill-bukrs = <gw_final>-bukrs.
lw_ewaybill-docno = <gw_final>-vbeln.
lw_ewaybill-gjahr = <gw_final>-gjahr.
lw_ewaybill-doctyp = <gw_final>-fkart.
lw_ewaybill-ebillno = ls_eway_ext_validity-ewaybillno.
lw_ewaybill-vdtodate = ls_eway_ext_validity-validupto.
lw_ewaybill-aenam = sy-uname.
lw_ewaybill-aedat = sy-datum.
UPDATE j_1ig_ewaybill SET vdtodate = lw_ewaybill-vdtodate
aenam = lw_ewaybill-aenam
aedat = lw_ewaybill-aedat
WHERE bukrs = lw_ewaybill-bukrs AND
docno = lw_ewaybill-docno AND
doctyp = lw_ewaybill-doctyp AND
gjahr = lw_ewaybill-gjahr AND
ebillno = lw_ewaybill-ebillno.
IF sy-subrc = 0.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = lw_ewaybill-vdtodate
IMPORTING
date_external = <gw_final>-eway_v_to
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Data Conversion is incomplete' TYPE 'I'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
IF sy-subrc EQ 0.
COMMIT WORK.
CALL METHOD gref_alv_grid->refresh_table_display
EXCEPTIONS
finished = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Table refresh error'(012) TYPE 'I'.
ENDIF.
CLEAR lt_show_message.
IF lt_messages IS NOT INITIAL.
LOOP AT lt_messages INTO lw_message.
lw_show_message-msgid = gc_msgid_01.
lw_show_message-msgty = lw_message-type.
lw_show_message-msgno = gc_msgno_319.
lw_show_message-msgv1 = lw_message-message_v1.
lw_show_message-msgv2 = lw_message-message_v2.
lw_show_message-msgv3 = lw_message-message_v3.
lw_show_message-msgv4 = lw_message-message_v4.
APPEND lw_show_message TO lt_show_message.
ENDLOOP.
CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP'
TABLES
i_message_tab = lt_show_message.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ELSE.
MESSAGE 'Please select appropriate documents for E-Waybill extension'(017) TYPE 'I'.
06.10.2020 working with program 1

ENDIF.
ENDIF.
ENDIF.
ENDFORM.
*& *
*& Form EWAYBILL_CANCEL
*& *
* text
* *
* > p1 text
* < p2 text
* *
FORM ewaybill_cancel USING p_lv_reason_code
p_lv_reason.
DATA:lw_token TYPE string,
lw_return TYPE string,
wa_return TYPE string,
lt_messages TYPE bapiret2_t,
lw_message TYPE bapiret2,
lt_show_message TYPE esp1_message_tab_type,
lw_show_message LIKE LINE OF lt_show_message,
lt_ewaybill TYPE TABLE OF j_1ig_ewaybill,
lw_ewaybill TYPE j_1ig_ewaybill,
lt_eway_cancel_api TYPE ztt_eway_bill_cancel_str,
ls_eway_cancel_api TYPE zst_eway_bill_cancel_str,
lt_eway_cancel TYPE ztt_eway_bill_cancel_out_str,
ls_eway_cancel TYPE zst_eway_bill_cancel_out_str,
lw_usrgstin TYPE ty_api,
ls_values TYPE dd07v.
FIELD-SYMBOLS <gw_final> TYPE ty_final.
CLEAR: lt_messages,lt_ewaybill,lt_eway_cancel_api.
LOOP AT gt_index INTO lw_index.
READ TABLE gt_final INTO gw_final INDEX lw_index-index.
IF sy-subrc IS INITIAL AND gw_final-eway_num IS NOT INITIAL.
********************************* Begin of Fill header derails ***********************************************
READ TABLE gt_api INTO lw_usrgstin WITH KEY apiid = gc_apiid_eusrgstin.
IF sy-subrc IS INITIAL.
CONCATENATE '"' lw_usrgstin-apiprov '"' INTO ls_eway_cancel_api-user_gstin.
ELSE.
CONCATENATE '"' gw_final-sup_gstin '"' INTO ls_eway_cancel_api-user_gstin.
ENDIF.
ls_eway_cancel_api-ebillno = gw_final-eway_num.
ls_eway_cancel_api-data_source = gc_dsource_erp.
READ TABLE gt_cancel_values INTO ls_values WITH KEY domvalue_l = p_lv_reason_code.
IF sy-subrc EQ 0.
TRANSLATE ls_values-ddtext TO UPPER CASE.
CONCATENATE '"' ls_values-ddtext '"' INTO ls_eway_cancel_api-reason_of_cancel.
ENDIF.
CONCATENATE '"' p_lv_reason '"' INTO ls_eway_cancel_api-cancel_remark.
********************************* End of Fill header derails ***********************************************
APPEND ls_eway_cancel_api TO lt_eway_cancel_api.
CLEAR:ls_eway_cancel_api.
ENDIF.
ENDLOOP.
IF lt_eway_cancel_api IS NOT INITIAL.
SORT lt_eway_cancel_api.
DELETE ADJACENT DUPLICATES FROM lt_eway_cancel_api COMPARING ALL FIELDS.
CLEAR:lw_token,lw_return.
IF gw_token IS NOT INITIAL.
lw_token = gw_token.
ELSE.
CALL FUNCTION 'ZFM_EINVOICE_OAUTH_API'
IMPORTING
06.10.2020 working with program 1

ex_token = lw_token
ex_return = lw_return
et_messages = lt_messages.
ENDIF.
IF lw_token IS NOT INITIAL.
CALL FUNCTION 'ZFM_EWAY_BILL_CANCEL_API'
EXPORTING
im_token = lw_token
im_api_data = lt_eway_cancel_api
IMPORTING
ex_return = lw_return
ex_messages = lt_messages
ex_ewaybill_cancel = lt_eway_cancel.
IF lt_eway_cancel IS NOT INITIAL.
LOOP AT lt_eway_cancel INTO ls_eway_cancel.
READ TABLE gt_final ASSIGNING <gw_final> WITH KEY eway_num = ls_eway_cancel-ewaybillno.
IF sy-subrc = 0.
lw_ewaybill-bukrs = gw_final-bukrs.
lw_ewaybill-docno = gw_final-vbeln.
lw_ewaybill-gjahr = gw_final-gjahr.
lw_ewaybill-doctyp = gw_final-fkart.
lw_ewaybill-ebillno = ls_eway_cancel-ewaybillno.
lw_ewaybill-aenam = sy-uname.
lw_ewaybill-aedat = sy-datum.
lw_ewaybill-status = gw_final-eway_status.
IF ls_eway_cancel-canceldate IS NOT INITIAL.
lw_ewaybill-status = gc_eway_sts_c.
UPDATE j_1ig_ewaybill SET status = lw_ewaybill-status
aenam = lw_ewaybill-aenam
aedat = lw_ewaybill-aedat
WHERE bukrs = lw_ewaybill-bukrs AND
docno = lw_ewaybill-docno AND
doctyp = lw_ewaybill-doctyp AND
gjahr = lw_ewaybill-gjahr AND
ebillno = lw_ewaybill-ebillno.
IF sy-subrc = 0.
UPDATE zteway_transport SET c_reason_code = p_lv_reason_code
c_reason = p_lv_reason
aenam = lw_ewaybill-aenam
aedat = lw_ewaybill-aedat
WHERE bukrs = lw_ewaybill-bukrs AND
docno = lw_ewaybill-docno AND
doctyp = lw_ewaybill-doctyp AND
gjahr = lw_ewaybill-gjahr.
IF sy-subrc IS INITIAL.
<gw_final>-eway_status = 'Cancelled'(062).
<gw_final>-eway_icon = gc_icon_0w.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = sy-datum
IMPORTING
date_external = <gw_final>-eway_canc_dt
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Data Conversion is incomplete' TYPE 'I'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
06.10.2020 working with program 1

COMMIT WORK.
CALL METHOD gref_alv_grid->refresh_table_display
EXCEPTIONS
finished = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Table refresh error'(012) TYPE 'I'.
ENDIF.
CLEAR lt_show_message.
IF lt_messages IS NOT INITIAL.
LOOP AT lt_messages INTO lw_message.
lw_show_message-msgid = gc_msgid_01.
lw_show_message-msgty = lw_message-type.
lw_show_message-msgno = gc_msgno_319.
lw_show_message-msgv1 = lw_message-message_v1.
lw_show_message-msgv2 = lw_message-message_v2.
lw_show_message-msgv3 = lw_message-message_v3.
lw_show_message-msgv4 = lw_message-message_v4.
APPEND lw_show_message TO lt_show_message.
ENDLOOP.
CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP'
TABLES
i_message_tab = lt_show_message.
ENDIF.
ENDIF.
ENDIF.
ELSE.
MESSAGE 'Please select appropriate documents to cancel E-Waybill'(018) TYPE 'I'.
ENDIF.
ENDFORM.
*& *
*& Form EWAYBILL_UPDATE_VEHICLE
*& *
* text
* *
* > p1 text
* < p2 text
* *
FORM ewaybill_update_vehicle .
DATA:lw_index TYPE lvc_s_row,
lv_val TYPE xfeld,
lv_answer TYPE c.
DATA:lv_index TYPE sy-tabix.
DATA:lw_token TYPE string,
lw_return TYPE string,
wa_return TYPE string,
lt_messages TYPE bapiret2_t,
lw_message TYPE bapiret2,
lt_show_message TYPE esp1_message_tab_type,
lw_show_message LIKE LINE OF lt_show_message.
DATA:lt_ewaybill TYPE TABLE OF j_1ig_ewaybill,
lw_ewaybill TYPE j_1ig_ewaybill.
DATA :lw_wb2_v_vbrk_vbrp2 TYPE ty_wb2_v_vbrk_vbrp2.
DATA: lt_eway_upd_vehile_api TYPE ztt_eway_bill_updat_vehno_str,
ls_eway_upd_vehile_api TYPE zst_eway_bill_updat_vehno_str.
DATA: lt_eway_ext_validity TYPE ztt_eway_bill_extend_validity,
ls_eway_ext_validity TYPE zst_eway_bill_extend_validity.
DATA: lw_t001w TYPE ty_t001w1,
lw_t005u_s TYPE ty_t005u.
DATA:lw_usrgstin TYPE ty_api,
lv_datum TYPE sydatum.
FIELD-SYMBOLS <gw_final> TYPE ty_final.
DATA: ls_values TYPE dd07v.
06.10.2020 working with program 1

DATA:lv_return TYPE xfeld.


CLEAR: lt_messages,lt_ewaybill,lt_eway_upd_vehile_api.
PERFORM check_selected_data CHANGING lv_val.
IF lv_val IS INITIAL.
PERFORM call_popup USING text-t23 text-t25
CHANGING lv_answer.
IF lv_answer = '1'.
LOOP AT gt_index INTO lw_index.
READ TABLE gt_final INTO gw_final INDEX lw_index-index.
IF sy-subrc IS INITIAL AND gw_final-eway_num IS NOT INITIAL AND gw_final-eway_icon = gc_icon_08..
********************************* Begin of Fill header derails ***********************************************
READ TABLE gt_api INTO lw_usrgstin WITH KEY apiid = gc_apiid_eusrgstin.
IF sy-subrc IS INITIAL.
CONCATENATE '"' lw_usrgstin-apiprov '"' INTO ls_eway_upd_vehile_api-user_gstin.
ELSE.
CONCATENATE '"' gw_final-sup_gstin '"' INTO ls_eway_upd_vehile_api-user_gstin.
ENDIF.
ls_eway_upd_vehile_api-ebillno = gw_final-eway_num.
ls_eway_upd_vehile_api-data_source = gc_dsource_erp.
CONCATENATE '"' gw_final-v_number '"' INTO ls_eway_upd_vehile_api-vehicle_number.
READ TABLE gt_v_type_values INTO ls_values WITH KEY domvalue_l = gw_final-v_type.
IF sy-subrc EQ 0.
TRANSLATE ls_values-ddtext TO UPPER CASE.
CONCATENATE '"' ls_values-ddtext '"' INTO ls_eway_upd_vehile_api-vehicle_type.
ENDIF.
*** Supplier details
CLEAR: lw_t001w. ", lw_adrc_s, lw_adr6_s.
READ TABLE gt_t001w INTO lw_t001w WITH KEY werks = gw_final-werks BINARY SEARCH.
IF sy-subrc EQ 0.
CONCATENATE '"' lw_t001w-ort01 '"' INTO ls_eway_upd_vehile_api-place_of_consignor.
CLEAR:lw_t005u_s.
READ TABLE gt_t005u_s INTO lw_t005u_s WITH KEY bland = lw_t001w-regio.
IF sy-subrc EQ 0.
TRANSLATE lw_t005u_s-bezei TO UPPER CASE.
CONCATENATE '"' lw_t005u_s-bezei '"' INTO ls_eway_upd_vehile_api-state_of_consignor.
ENDIF.
ENDIF.
*** Transport details
READ TABLE gt_t_mode_values INTO ls_values WITH KEY domvalue_l = gw_final-t_mode.
IF sy-subrc EQ 0.
TRANSLATE ls_values-ddtext TO UPPER CASE.
CONCATENATE '"' ls_values-ddtext '"' INTO ls_eway_upd_vehile_api-transportation_mode.
ENDIF.
CONCATENATE '"' gw_final-t_doc_no '"' INTO ls_eway_upd_vehile_api-transporter_document_number.
CONCATENATE '"' gw_final-t_date '"' INTO ls_eway_upd_vehile_api-transporter_document_date.
READ TABLE gt_v_reason_values INTO ls_values WITH KEY domvalue_l = gw_final-v_reason_code.
IF sy-subrc EQ 0.
TRANSLATE ls_values-ddtext TO UPPER CASE.
CONCATENATE '"' ls_values-ddtext '"' INTO ls_eway_upd_vehile_api-reason_code_for_vehicle_updati.
ENDIF.
CONCATENATE '"' gw_final-v_reason '"' INTO ls_eway_upd_vehile_api-reason_for_vehicle_updation.
********************************* End of Fill header derails ***********************************************
APPEND ls_eway_upd_vehile_api TO lt_eway_upd_vehile_api.
CLEAR:ls_eway_upd_vehile_api.
ENDIF.
ENDLOOP.
IF lt_eway_upd_vehile_api IS NOT INITIAL.
SORT lt_eway_upd_vehile_api.
DELETE ADJACENT DUPLICATES FROM lt_eway_upd_vehile_api COMPARING ALL FIELDS.
CLEAR lv_return.
CALL FUNCTION 'ZFM_EWAY_BILL_VALIDATION'
EXPORTING
im_ucomm = gc_ucomm_ewayv
06.10.2020 working with program 1

im_api_vehicle = lt_eway_upd_vehile_api
IMPORTING
ex_error = lv_return.
IF lv_return = ' '.
CLEAR:lw_token,lw_return.
IF gw_token IS NOT INITIAL.
lw_token = gw_token.
ELSE.
CALL FUNCTION 'ZFM_EINVOICE_OAUTH_API'
IMPORTING
ex_token = lw_token
ex_return = lw_return
et_messages = lt_messages.
ENDIF.
IF lw_token IS NOT INITIAL." AND lw_return EQ 'S'.
CALL FUNCTION 'ZFM_EWAY_BILL_UPD_VEHL_NO_API'
EXPORTING
im_token = lw_token
im_api_data = lt_eway_upd_vehile_api
IMPORTING
ex_return = lw_return
ex_messages = lt_messages
ex_api_data = lt_eway_ext_validity.
IF lt_eway_ext_validity IS NOT INITIAL."lw_return EQ 'S'.
LOOP AT lt_eway_ext_validity INTO ls_eway_ext_validity.
READ TABLE gt_final ASSIGNING <gw_final> WITH KEY eway_num = ls_eway_ext_validity-ewaybillno.
IF sy-subrc = 0.
IF ls_eway_ext_validity-validupto IS NOT INITIAL.
lw_ewaybill-bukrs = gw_final-bukrs.
lw_ewaybill-docno = gw_final-vbeln.
lw_ewaybill-gjahr = gw_final-gjahr.
lw_ewaybill-doctyp = gw_final-fkart.
lw_ewaybill-ebillno = ls_eway_ext_validity-ewaybillno.
lw_ewaybill-vdtodate = ls_eway_ext_validity-validupto.
lw_ewaybill-vdtotime = ls_eway_ext_validity-vdtotime.
UPDATE j_1ig_ewaybill SET vdtodate = lw_ewaybill-vdtodate
vdtotime = lw_ewaybill-vdtotime
aenam = sy-uname
aedat = sy-datum
WHERE bukrs = lw_ewaybill-bukrs AND
docno = lw_ewaybill-docno AND
doctyp = lw_ewaybill-doctyp AND
gjahr = lw_ewaybill-gjahr AND
ebillno = lw_ewaybill-ebillno.
IF sy-subrc = 0.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = lw_ewaybill-vdtodate
IMPORTING
date_external = <gw_final>-eway_v_to
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Date convertion error'(010) TYPE 'I'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
IF sy-subrc EQ 0.
COMMIT WORK.
CALL METHOD gref_alv_grid->refresh_table_display
06.10.2020 working with program 1

EXCEPTIONS
finished = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Table refresh error'(012) TYPE 'I'.
ENDIF.
CLEAR lt_show_message.
IF lt_messages IS NOT INITIAL.
LOOP AT lt_messages INTO lw_message.
lw_show_message-msgid = gc_msgid_01.
lw_show_message-msgty = lw_message-type.
lw_show_message-msgno = gc_msgno_319.
lw_show_message-msgv1 = lw_message-message_v1.
lw_show_message-msgv2 = lw_message-message_v2.
lw_show_message-msgv3 = lw_message-message_v3.
lw_show_message-msgv4 = lw_message-message_v4.
APPEND lw_show_message TO lt_show_message.
ENDLOOP.
CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP'
TABLES
i_message_tab = lt_show_message.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ELSE.
MESSAGE 'Please select appropriate documents for E-Waybill update'(016) TYPE 'I'.
ENDIF.
ENDIF.
ENDIF.
ENDFORM.
*& *
*& Form EWAYBILL_PRINT
*& *
* text
* *
* > p1 text
* < p2 text
* *
FORM ewaybill_print USING iv_flag.
DATA:lw_index TYPE lvc_s_row,
lv_val TYPE xfeld,
lv_answer TYPE c.
DATA:lv_index TYPE sy-tabix.
DATA:lw_token TYPE string,
lw_return TYPE string,
wa_return TYPE string,
lt_messages TYPE bapiret2_t,
lw_message TYPE bapiret2,
lt_show_message TYPE esp1_message_tab_type,
lw_show_message LIKE LINE OF lt_show_message.
DATA: lv_url TYPE string.
DATA: lo_http_client TYPE REF TO if_http_client,
lv_service TYPE string,
lv_result TYPE string,
lo_ixml TYPE REF TO if_ixml.
* DATA: ls_config TYPE zteinv_api.
DATA:lt_ewaybill TYPE TABLE OF j_1ig_ewaybill,
lw_ewaybill TYPE j_1ig_ewaybill.
DATA:lw_eway_transport TYPE zteway_transport.
FIELD-SYMBOLS <gw_final> TYPE ty_final.
CLEAR: lt_messages,lt_ewaybill.
06.10.2020 working with program 1

CLEAR lv_url.
PERFORM check_selected_data CHANGING lv_val.
IF lv_val IS INITIAL.
IF iv_flag IS INITIAL.
PERFORM call_popup USING text-t23 text-t29
CHANGING lv_answer.
ELSE.
PERFORM call_popup USING text-t20 text-t31
CHANGING lv_answer.
ENDIF.
IF lv_answer = '1'.
LOOP AT gt_index INTO lw_index.
READ TABLE gt_final INTO gw_final INDEX lw_index-index.
CLEAR lv_url.
IF iv_flag IS INITIAL.
IF gw_final-eway_num IS NOT INITIAL.
CONCATENATE 'https://'(109) gw_final-eway_print '.pdf'(110) INTO lv_url.
ENDIF.
ELSE.
IF gw_final-irn IS NOT INITIAL.
lv_url = gw_final-einv_print.
ENDIF.
ENDIF.
IF lv_url IS NOT INITIAL.
CONDENSE lv_url NO-GAPS.
CALL METHOD cl_gui_frontend_services=>execute
EXPORTING
document = lv_url
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
MESSAGE 'Pdf couldn not find'(023) TYPE 'I'.
ENDIF.
ENDIF.
********************************* Begin of Fill header derails ***********************************************
********************************* End of Fill header derails ***********************************************
ENDLOOP.
CLEAR lt_show_message.
IF lt_messages IS NOT INITIAL.
LOOP AT lt_messages INTO lw_message.
lw_show_message-msgid = '01'.
lw_show_message-msgty = lw_message-type.
lw_show_message-msgno = '319'.
lw_show_message-msgv1 = lw_message-message_v1.
lw_show_message-msgv2 = lw_message-message_v2.
lw_show_message-msgv3 = lw_message-message_v3.
lw_show_message-msgv4 = lw_message-message_v4.
APPEND lw_show_message TO lt_show_message.
ENDLOOP.
CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP'
TABLES
i_message_tab = lt_show_message.
ENDIF.
ENDIF.
* ELSE.
* MESSAGE 'Please select appropriate documents for E-Waybill print'(020) TYPE 'I'.
ENDIF.
* ENDIF.
ENDFORM.
*& *
*& Form USER_COMMAND_EWAY_CANCEL
*& *
* text
06.10.2020 working with program 1

* *
* > p1 text
* < p2 text
* *
FORM user_command_eway_cancel TABLES ifields TYPE ty_sval
USING ok_code_save
error
h_show_popup.
DATA: ls_ifields TYPE sval.
DATA:lv_reason_code TYPE zde_cancel_reason,
lv_reason TYPE char120.
CASE ok_code_save.
WHEN gc_okcode_furt.
LOOP AT ifields INTO ls_ifields.
IF ls_ifields-fieldname = gc_fname_crec_code."'C_REASON_CODE'.
lv_reason_code = ls_ifields-value.
ELSEIF ls_ifields-fieldname = gc_fname_crec."'C_REASON'.
lv_reason = ls_ifields-value.
ENDIF.
ENDLOOP.
PERFORM ewaybill_cancel USING lv_reason_code lv_reason.
WHEN OTHERS.
ENDCASE.
ENDFORM.
*& *
*& Form EWAYBILL_CANCEL_OLD
*& *
* text
* *
* > p1 text
* < p2 text
* *
FORM ewaybill_cancel_old .
DATA: lv_val TYPE xfeld.
DATA: vl_program TYPE sy-repid,
vl_formname TYPE char30,
vl_popup_title TYPE char30,
vl_okpushbutton TYPE svalbutton-buttontext,
vl_buttonicon TYPE icon-name,
lt_sval TYPE ty_sval,
lv_msg TYPE xfeld,
lv_answer TYPE c,
lw_final TYPE ty_final.
FIELD-SYMBOLS:<ls_sval> TYPE sval.
PERFORM check_selected_data CHANGING lv_val.
IF lv_val IS INITIAL.
PERFORM call_popup USING text-t23 text-t22
CHANGING lv_answer.
IF lv_answer = '1'.
CLEAR lv_msg.
LOOP AT gt_index INTO lw_index.
READ TABLE gt_final INTO lw_final INDEX lw_index-index.
IF sy-subrc IS INITIAL AND lw_final-eway_icon = gc_icon_0w.
MESSAGE 'Document already cancelled'(037) TYPE 'I'.
lv_msg = abap_true.
EXIT.
ENDIF.
ENDLOOP.
IF lv_msg IS INITIAL.
*& Add title & FORMNAME for Cancel pop-up
vl_program = sy-repid.
vl_formname = 'USER_COMMAND_EWAY_CANCEL'.
vl_popup_title = 'Confirm to cancel E-way Bill'(114).
06.10.2020 working with program 1

vl_okpushbutton = 'Cancel E-Way Bill'(116).


vl_buttonicon = gc_icon_b2.
*& Add two fields to input cancel reason
APPEND INITIAL LINE TO lt_sval ASSIGNING <ls_sval>.
<ls_sval>-tabname = 'ZTEWAY_TRANSPORT'.
<ls_sval>-fieldname = 'C_REASON_CODE'.
<ls_sval>-field_obl = abap_true.
<ls_sval>-fieldtext = 'Reason for cancel'(113).
APPEND INITIAL LINE TO lt_sval ASSIGNING <ls_sval>.
<ls_sval>-tabname = 'ZTEWAY_TRANSPORT'.
<ls_sval>-fieldname = 'C_REASON'.
<ls_sval>-field_obl = abap_true.
<ls_sval>-fieldtext = 'Remarks'(115).
PERFORM popup_to_confirm_with_input USING vl_program
vl_formname
vl_popup_title
vl_okpushbutton
vl_buttonicon
lt_sval.
ENDIF.
ENDIF.
ENDIF.
ENDFORM.
*& *
*& Form EWAYBILL_CANCEL_OLD
*& *
* text
* *
* > p1 text
* < p2 text
* *
FORM einvoice_cancel_old .
DATA:lv_val TYPE xfeld,
vl_program TYPE sy-repid,
vl_formname TYPE char30,
vl_popup_title TYPE char30,
vl_okpushbutton TYPE svalbutton-buttontext,
vl_buttonicon TYPE icon-name,
lt_sval TYPE ty_sval,
lw_index TYPE lvc_s_row,
lv_msg TYPE xfeld,
lv_answer TYPE c,
lw_final TYPE ty_final.
FIELD-SYMBOLS:<ls_sval> TYPE sval.
PERFORM check_selected_data CHANGING lv_val.
IF lv_val IS INITIAL.
PERFORM call_popup USING text-t20 text-t22
CHANGING lv_answer.
IF lv_answer = 1.
CLEAR lv_msg.
LOOP AT gt_index INTO lw_index.
READ TABLE gt_final INTO lw_final INDEX lw_index-index.
IF sy-subrc IS INITIAL AND lw_final-icon = gc_icon_0w.
MESSAGE 'Document already cancelled'(037) TYPE 'I'.
lv_msg = abap_true.
EXIT.
ENDIF.
ENDLOOP.
IF lv_msg IS INITIAL.
*& Add title & FORMNAME for Cancel pop-up
vl_program = sy-repid.
vl_formname = 'USER_COMMAND_EINV_CANCEL'.
vl_popup_title = 'Confirm to cancel E-Invoice'(111).
06.10.2020 working with program 1

vl_okpushbutton = 'Cancel E-Invoice'(112).


vl_buttonicon = '@B2@'."gc_icon_b2.
*& Add two fields to input cancel reason
APPEND INITIAL LINE TO lt_sval ASSIGNING <ls_sval>.
<ls_sval>-tabname = 'ZTEINV_DETAILS'."gc_tname_einv.
<ls_sval>-fieldname = 'E_REASON_CODE'.
<ls_sval>-field_obl = abap_true.
<ls_sval>-fieldtext = 'Reason for cancel'(113).
APPEND INITIAL LINE TO lt_sval ASSIGNING <ls_sval>.
<ls_sval>-tabname = 'ZTEINV_DETAILS'.
<ls_sval>-fieldname = 'E_REASON'.
<ls_sval>-field_obl = abap_true.
<ls_sval>-fieldtext = 'Remarks'(115).
PERFORM popup_to_confirm_with_input USING vl_program
vl_formname
vl_popup_title
vl_okpushbutton
vl_buttonicon
lt_sval.
ENDIF.
ENDIF.
ENDIF.
ENDFORM.
*& Form USER_COMMAND_EINVOICE_CANCEL
*& *
* text
* *
* > p1 text
* < p2 text
* *
FORM user_command_einv_cancel TABLES ifields TYPE ty_sval
USING ok_code_save
error
h_show_popup.
DATA: ls_ifields TYPE sval.
DATA:lv_reason_code TYPE zde_cancel_reason,
lv_reason TYPE char120.
CASE ok_code_save.
WHEN gc_okcode_furt.
LOOP AT ifields INTO ls_ifields.
IF ls_ifields-fieldname = 'E_REASON_CODE'.
lv_reason_code = ls_ifields-value.
ELSEIF ls_ifields-fieldname = 'E_REASON'.
lv_reason = ls_ifields-value.
ENDIF.
ENDLOOP.
PERFORM einvoice_cancel USING lv_reason_code lv_reason.
WHEN OTHERS.
ENDCASE.
ENDFORM.
FORM service_item USING "i_posnr_i
i_vkorg
i_fkart
i_matnr_i
CHANGING
lw_einv_api_itm-is_service.
TYPES : BEGIN OF ty_mara,
matnr TYPE mara-matnr,
mtart TYPE mara-mtart,
END OF ty_mara.
DATA : wa_mara TYPE ty_mara,
it_mara TYPE TABLE OF ty_mara.
SELECT SINGLE matnr mtart FROM mara INTO wa_mara WHERE matnr = i_matnr_i.
06.10.2020 working with program 1

IF wa_mara-matnr+0(1) = '0'.
SHIFT wa_mara-matnr LEFT DELETING LEADING '0'.
IF wa_mara-matnr+0(1) = '1'.
lw_einv_api_itm-is_service = gc_service_y.
ENDIF.
ELSEIF wa_mara-mtart = 'DIEN'.
lw_einv_api_itm-is_service = gc_service_y.
ENDIF.
IF i_vkorg = '1030' OR i_vkorg = '1040' OR i_vkorg = '4040' OR i_vkorg = '5020' OR i_vkorg = '9030'.
lw_einv_api_itm-is_service = gc_service_y.
ENDIF.
IF i_fkart = 'ZCS' OR i_fkart = 'ZCSE' OR i_fkart = 'ZERC' OR i_fkart = 'NCS' OR i_fkart = 'NCSE'.
lw_einv_api_itm-is_service = gc_service_y.
ENDIF.
ENDFORM.

You might also like