STO GR Based Based auto Invoice Post
My requirement is to post a GRN-based invoice using a BAPI in SAP ABAP.
*&---------------------------------------------------------------------**& Report ZFI_STO_GRBASE
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zfi_sto_grbase_new.
TABLES : mseg,ekpo,ekbe,vbfa,t001w.
TYPES : BEGIN OF t_data,
sno TYPE i,
mblnr TYPE mblnr,
inv_date TYPE bldat,
post_date(10),
ref_doc_no TYPE xblnr,
currency TYPE waers,
vend_no TYPE hkont,
sgtxt TYPE sgtxt,
tax_amt TYPE bapidoccur,
gl_amt TYPE bapidoccur,
net_value TYPE bapidoccur,
bupla TYPE bupla,
profit_ctr TYPE prctr,
taxcode TYPE mwskz,
line_id TYPE mb_line_id,
ebeln TYPE ebeln,
ebelp TYPE ebelp,
ref1 TYPE xblnr,
END OF t_data.
TYPES : BEGIN OF gty_bkpf,
vbeln TYPE bkpf-xblnr,
bupla TYPE bupla,
blart TYPE blart,
fkdat TYPE fkdat,
END OF gty_bkpf.
TYPES : BEGIN OF ty_msg,
sno TYPE i,
type TYPE char10,
mblnr TYPE mblnr,
doc_no TYPE belnr_d,
gjahr TYPE gjahr,
msg TYPE bapi_msg,
accnt TYPE lifnr,
END OF ty_msg.
DATA:
gt_msg TYPE TABLE OF ty_msg,
gs_msg TYPE ty_msg.
DATA: gt_bkpf1 TYPE TABLE OF gty_bkpf.
DATA: lv_ven_amt TYPE wrbtr,
lv_net_amt TYPE wrbtr.
DATA: t_final TYPE TABLE OF t_data,
tt_final TYPE t_data.
DATA: sno TYPE i.
*** Bapi Declarations
DATA:
ls_header TYPE bapiache09,
lt_gl_acc TYPE TABLE OF bapiacgl09,
ls_gl_acc TYPE bapiacgl09,
lt_acc_pay TYPE TABLE OF bapiacap09,
ls_acc_pay TYPE bapiacap09,
lt_curr TYPE TABLE OF bapiaccr09,
ls_curr TYPE bapiaccr09,
lt_tax TYPE TABLE OF bapiactx09,
ls_tax TYPE bapiactx09,
lt_accountwt TYPE TABLE OF bapiacwt09,
ls_accountwt TYPE bapiacwt09,
lt_return TYPE TABLE OF bapiret2,
ls_return TYPE bapiret2,
lt_criteria TYPE bapiackec9_tab,
lv_obj_typ LIKE bapiache09-obj_type,
lv_obj_key LIKE bapiache09-obj_key,
lv_obj_sys LIKE bapiache09-obj_sys,
lv_item_no TYPE posnr_acc,
* lv_amt TYPE wrbtr,
lt_cust TYPE TABLE OF bapiacar09,
ls_cust TYPE bapiacar09,
* *** calculation tax code decalrations
lv_taxtot TYPE bset-fwste,
lv_taxded TYPE bset-fwste,
lt_mwdat TYPE TABLE OF rtax1u15.
* *** extension fill for posting key
DATA: lt_extension2 TYPE TABLE OF bapiparex,
ls_extension2 TYPE bapiparex.
DATA:lv_fiscal_year TYPE gjahr.
*DATA : sno TYPE i .
*** Constant Declaration
CONSTANTS: c_cc TYPE bukrs VALUE '****'.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-002.
PARAMETERS: p_grn RADIOBUTTON GROUP rb1 USER-COMMAND grn DEFAULT 'X',
p_obd RADIOBUTTON GROUP rb1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-003.
SELECT-OPTIONS : s_budat FOR mseg-budat_mkpf MODIF ID grn .
PARAMETERS: p_date TYPE budat.
SELECT-OPTIONS : s_ref FOR ekbe-belnr MODIF ID obd.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN END OF BLOCK b1.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF p_grn = abap_true.
IF screen-group1 = 'OBD'.
screen-active = 0.
MODIFY SCREEN.
ENDIF.
ELSEIF p_obd = abap_true.
IF screen-group1 = 'GRN'.
screen-active = 0.
MODIFY SCREEN.
ENDIF.
ENDIF.
ENDLOOP.
AT SELECTION-SCREEN.
IF p_date IS INITIAL AND sy-ucomm = 'ONLI'.
MESSAGE 'Posting date mandatory' TYPE 'E'.
ENDIF.
START-OF-SELECTION .
*** Get Data
PERFORM get_data.
*** Call bapi
PERFORM fill_bdc.
*** Display ALV
PERFORM display_alv.
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM get_data .
DATA: lr_mblnr TYPE RANGE OF mblnr.
IF s_budat-low GT p_date.
MESSAGE 'Posting date should alway be greterthan equal to the GRN Date' TYPE 'I' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
IF p_grn = abap_true.
IF s_budat IS NOT INITIAL.
SELECT mblnr,
budat_mkpf,
line_id,
ebeln,
ebelp,
bwart,
matnr,
smbln
FROM mseg INTO TABLE @DATA(gt_mseg)
WHERE budat_mkpf IN @s_budat
AND bwart IN ( '101', '102' ).
lr_mblnr = VALUE #( FOR ls_mseg_temp IN gt_mseg WHERE ( smbln IS NOT INITIAL )
( sign = 'I'
option = 'EQ'
low = ls_mseg_temp-smbln ) ).
DELETE gt_mseg WHERE bwart = '102'.
IF lr_mblnr IS NOT INITIAL.
DELETE gt_mseg WHERE mblnr IN lr_mblnr.
ENDIF.
ENDIF.
IF NOT gt_mseg IS INITIAL.
SELECT ebeln,
ebelp,
vgabe,
belnr,
buzei,
matnr
FROM ekbe INTO TABLE @DATA(gt_ekbe)
FOR ALL ENTRIES IN @gt_mseg
WHERE ebeln = @gt_mseg-ebeln
AND ebelp = @gt_mseg-ebelp
AND vgabe = '8'.
ENDIF.
ELSEIF p_obd = abap_true.
IF s_ref IS NOT INITIAL.
SELECT ebeln,
ebelp,
vgabe,
belnr,
buzei,
matnr
FROM ekbe INTO TABLE @DATA(lt_ekbe)
WHERE belnr IN @s_ref
AND vgabe = '8'.
ENDIF.
IF NOT lt_ekbe IS INITIAL.
SELECT ebeln,
ebelp,
vgabe,
gjahr,
belnr,
buzei,
matnr
FROM ekbe INTO TABLE @DATA(gt_ekbe_mblnr)
FOR ALL ENTRIES IN @lt_ekbe
WHERE ebeln = @lt_ekbe-ebeln
AND ebelp = @lt_ekbe-ebelp
AND vgabe = '1'.
ENDIF.
IF gt_ekbe_mblnr IS NOT INITIAL.
SELECT mblnr,
budat_mkpf,
line_id,
ebeln,
ebelp,
bwart,
matnr,
smbln
FROM mseg INTO TABLE @gt_mseg
FOR ALL ENTRIES IN @gt_ekbe_mblnr
WHERE mblnr EQ @gt_ekbe_mblnr-belnr
AND gjahr EQ @gt_ekbe_mblnr-gjahr
AND ebeln EQ @gt_ekbe_mblnr-ebeln
AND ebelp EQ @gt_ekbe_mblnr-ebelp
AND bwart IN ( '101', '102' ).
lr_mblnr = VALUE #( FOR ls_mseg_temp IN gt_mseg WHERE ( smbln IS NOT INITIAL )
( sign = 'I'
option = 'EQ'
low = ls_mseg_temp-smbln ) ).
DELETE gt_mseg WHERE bwart = '102'.
IF lr_mblnr IS NOT INITIAL.
DELETE gt_mseg WHERE mblnr IN lr_mblnr.
ENDIF.
ENDIF.
ENDIF.
IF gt_mseg IS NOT INITIAL .
SELECT a~ebeln,
a~ebelp,
a~pstyp,
a~werks,
b~reswk,
c~regio,
d~regio AS regio1
FROM ekpo AS a INNER JOIN ekko AS b
ON a~ebeln = b~ebeln
INNER JOIN t001w AS c
ON c~werks = a~werks
INNER JOIN t001w AS d
ON d~werks = b~reswk
INTO TABLE @DATA(gt_ekpo)
FOR ALL ENTRIES IN @gt_mseg
WHERE a~ebeln = @gt_mseg-ebeln
AND a~ebelp = @gt_mseg-ebelp
AND a~pstyp = '7'
AND c~regio <> d~regio.
ENDIF.
IF p_obd = abap_true.
APPEND LINES OF lt_ekbe TO gt_ekbe.
ENDIF.
IF NOT gt_ekbe IS INITIAL.
SELECT vbelv,
posnv,
vbtyp_n,
vbeln,
posnn,
matnr
FROM vbfa INTO TABLE @DATA(gt_vbfa)
FOR ALL ENTRIES IN @gt_ekbe
WHERE vbelv = @gt_ekbe-belnr
AND vbtyp_n = 'M'.
ENDIF.
IF NOT gt_vbfa IS INITIAL.
SELECT vbeln,
posnr,
netwr,
mwsbp,
erdat,
waerk,
matnr,
mwskz
FROM vbrp INTO TABLE @DATA(gt_vbrp)
FOR ALL ENTRIES IN @gt_vbfa
WHERE vbeln = @gt_vbfa-vbeln
AND posnr = @gt_vbfa-posnn.
IF sy-subrc = 0.
SORT gt_vbrp BY vbeln.
ENDIF.
ENDIF.
IF gt_vbrp IS NOT INITIAL.
SELECT vbeln,
bupla,
blart,
knumv,
fkdat,
netwr,
xblnr,
mwsbk
FROM vbrk INTO TABLE @DATA(gt_vbrk)
FOR ALL ENTRIES IN @gt_vbrp
WHERE vbeln = @gt_vbrp-vbeln.
ENDIF.
IF NOT gt_vbrk IS INITIAL.
SELECT knumv,
kposn,
mwsk1
FROM prcd_elements
INTO TABLE @DATA(lt_prcd_elements)
FOR ALL ENTRIES IN @gt_vbrk
WHERE knumv EQ @gt_vbrk-knumv.
ENDIF.
IF NOT lt_prcd_elements IS INITIAL.
SELECT * FROM
zfi_taxcode
INTO TABLE @DATA(lt_zfi_taxcode)
FOR ALL ENTRIES IN @lt_prcd_elements
WHERE output_tax EQ @lt_prcd_elements-mwsk1.
ENDIF.
SORT:
gt_ekpo BY ebeln ebelp,
gt_ekbe BY ebeln ebelp,
gt_vbfa BY vbelv posnv,
gt_vbrp BY vbeln posnr,
gt_vbrk BY vbeln,
lt_prcd_elements BY knumv kposn.
**** Final Data
LOOP AT gt_mseg INTO DATA(ls_mseg).
tt_final-mblnr = ls_mseg-mblnr.
tt_final-line_id = ls_mseg-line_id.
tt_final-ebeln = ls_mseg-ebeln.
tt_final-ebelp = ls_mseg-ebelp.
READ TABLE gt_ekpo INTO DATA(gs_ekpo) WITH KEY ebeln = ls_mseg-ebeln
ebelp = ls_mseg-ebelp BINARY SEARCH.
IF sy-subrc = 0.
tt_final-sno = sno = sno + 1.
tt_final-vend_no = |{ gs_ekpo-reswk ALPHA = IN }|.
tt_final-profit_ctr = |{ gs_ekpo-werks ALPHA = IN }|.
IF gs_ekpo IS NOT INITIAL.
SELECT SINGLE * FROM t001w INTO @DATA(lv_bupla)
WHERE werks EQ @gs_ekpo-werks.
IF sy-subrc = 0.
tt_final-bupla = lv_bupla-j_1bbranch.
ENDIF.
ENDIF.
CONCATENATE p_date+6(2) '.'
p_date+4(2) '.'
p_date+0(4)
INTO tt_final-post_date.
tt_final-ref_doc_no = ls_mseg-mblnr.
READ TABLE gt_ekbe INTO DATA(gs_ekbe) WITH KEY ebeln = gs_ekpo-ebeln
ebelp = gs_ekpo-ebelp BINARY SEARCH.
IF sy-subrc = 0.
READ TABLE gt_vbfa INTO DATA(gs_vbfa) WITH KEY vbelv = gs_ekbe-belnr
posnv = gs_ekbe-buzei BINARY SEARCH.
READ TABLE gt_vbrp INTO DATA(gs_vbrp) WITH KEY vbeln = gs_vbfa-vbeln
posnr = gs_vbfa-posnn BINARY SEARCH.
IF sy-subrc = 0.
tt_final-inv_date = gs_vbrp-erdat.
tt_final-sgtxt = gs_vbrp-vbeln.
tt_final-currency = gs_vbrp-waerk.
tt_final-tax_amt = gs_vbrp-mwsbp.
READ TABLE gt_vbrk INTO DATA(gs_vbrk) WITH KEY vbeln = gs_vbfa-vbeln BINARY SEARCH.
IF sy-subrc = 0.
tt_final-ref1 = gs_vbrk-xblnr.
READ TABLE lt_prcd_elements INTO DATA(ls_prcd_elements) WITH KEY knumv = gs_vbrk-knumv
kposn = gs_vbrp-posnr BINARY SEARCH.
IF sy-subrc = 0.
READ TABLE lt_zfi_taxcode INTO DATA(ls_zfi_taxcode) WITH KEY output_tax = ls_prcd_elements-mwsk1.
IF sy-subrc = 0.
tt_final-taxcode = ls_zfi_taxcode-input_tax.
ENDIF.
ENDIF.
ENDIF.
IF gs_vbrp-netwr = 0.
tt_final-net_value = '0.01'.
tt_final-taxcode = 'I8'.
ELSE.
tt_final-net_value = gs_vbrp-netwr.
ENDIF.
ENDIF.
ENDIF.
APPEND tt_final TO t_final.
CLEAR: tt_final,gs_vbrp,gs_vbfa,gs_ekpo,gs_ekbe,ls_zfi_taxcode.
CLEAR:lv_bupla.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form fill_bapi
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM fill_bdc .
CONSTANTS: c_struct TYPE te_struc VALUE 'XREF1_HD'.
DATA:date_internal(10),
lv_count TYPE i.
gv_count TYPE i.
DATA(gt_final) = t_final.
SORT t_final BY mblnr.
DELETE ADJACENT DUPLICATES FROM t_final COMPARING mblnr .
LOOP AT t_final INTO DATA(gs_final).
gv_count = gv_count + 1.
*** Header Data Declaration
CLEAR:ls_header.
ls_header-username = sy-uname.
ls_header-doc_type = 'ZB' .
ls_header-comp_code = c_cc.
ls_header-doc_date = gs_final-inv_date.
CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'
EXPORTING
date_external = gs_final-post_date
IMPORTING
date_internal = date_internal.
ls_header-pstng_date = date_internal.
ls_header-ref_doc_no = gs_final-ref_doc_no. " Pass ekbe-Mblnr
ls_header-header_txt = gs_final-sgtxt. " Reference Document No
"Get Fiscal Year
CALL FUNCTION 'GET_CURRENT_YEAR'
EXPORTING
bukrs = c_cc
date = ls_header-pstng_date
IMPORTING
curry = lv_fiscal_year.
SELECT SINGLE * FROM bkpf INTO @DATA(ls_bkpf)
WHERE xblnr EQ @ls_header-ref_doc_no
AND gjahr EQ @lv_fiscal_year
AND blart EQ 'ZB'.
IF sy-subrc EQ 0.
gs_msg-sno = gs_final-sno.
gs_msg-type = icon_led_red.
gs_msg-msg = |Duplicate record found for Reference#{ ls_bkpf-bukrs }/{ ls_bkpf-belnr }/{ ls_bkpf-gjahr }|.
gs_msg-gjahr = lv_fiscal_year.
APPEND: gs_msg TO gt_msg.
CLEAR: gs_msg.
CONTINUE.
ENDIF.
*** populate the extension table
ls_extension2-structure = c_struct.
ls_extension2-valuepart1 = lv_count + 1.
ls_extension2-valuepart2 = gs_final-ref1. "reference Key1 Update
APPEND ls_extension2 TO lt_extension2.
CLEAR: ls_extension2.
*** Items Declarations
LOOP AT gt_final ASSIGNING FIELD-SYMBOL(<fs_final>) WHERE mblnr = gs_final-mblnr.
APPEND INITIAL LINE TO lt_gl_acc ASSIGNING FIELD-SYMBOL(<ls_gl_acc>).
<ls_gl_acc>-itemno_acc = lv_item_no = lv_item_no + 1.
<ls_gl_acc>-gl_account = '0000000000'.
<ls_gl_acc>-item_text = |{ <fs_final>-ref_doc_no }/{ <fs_final>-line_id }|.
<ls_gl_acc>-comp_code = c_cc.
<ls_gl_acc>-profit_ctr = |{ <fs_final>-profit_ctr ALPHA = IN }|.
<ls_gl_acc>-tax_code = <fs_final>-taxcode.
<ls_gl_acc>-businessplace = <fs_final>-bupla.
<ls_gl_acc>-itemno_tax = lv_item_no.
<ls_gl_acc>-alloc_nmbr = |{ <fs_final>-ebeln }/{ <fs_final>-ebelp }|.
APPEND INITIAL LINE TO lt_curr ASSIGNING FIELD-SYMBOL(<ls_curr>).
<ls_curr>-itemno_acc = lv_item_no.
<ls_curr>-currency = <fs_final>-currency.
<ls_curr>-amt_doccur = <fs_final>-net_value.
SELECT SINGLE *
FROM ska1
INTO @DATA(ls_ska1)
WHERE saknr = @<ls_gl_acc>-gl_account
AND ktopl = @c_cc.
SELECT SINGLE *
FROM cskb
INTO @DATA(ls_cskb)
WHERE kstar = @<ls_gl_acc>-gl_account
AND kokrs = @c_cc.
IF ls_ska1-xbilk = abap_false.
IF ls_cskb-katyp = '11'.
APPEND INITIAL LINE TO lt_criteria ASSIGNING FIELD-SYMBOL(<ls_criteria>).
<ls_criteria>-itemno_acc = lv_item_no.
<ls_criteria>-fieldname = 'WERKS'.
<ls_criteria>-character = <fs_final>-profit_ctr.
ELSEIF ls_cskb-katyp = '01'.
* <ls_gl_acc>-costcenter = |{ <gs_data>-cost_center ALPHA = IN }|.
ENDIF.
ENDIF.
CLEAR: lv_net_amt, lt_mwdat.
IF <fs_final>-taxcode IS NOT INITIAL .
lv_net_amt = <fs_final>-net_value .
EXPORT lv_bupla FROM <fs_final>-bupla TO MEMORY ID 'BUPLA'.
CALL FUNCTION 'CALCULATE_TAX_FROM_NET_AMOUNT'
EXPORTING
i_bukrs = c_cc
i_mwskz = <fs_final>-taxcode
i_waers = 'INR'
i_wrbtr = lv_net_amt
IMPORTING
e_fwste = lv_taxtot
e_fwast = lv_taxded
TABLES
t_mwdat = lt_mwdat
EXCEPTIONS
bukrs_not_found = 1
country_not_found = 2
mwskz_not_defined = 3
mwskz_not_valid = 4
ktosl_not_found = 5
kalsm_not_found = 6
parameter_error = 7
knumh_not_found = 8
kschl_not_found = 9
unknown_error = 10
account_not_found = 11
txjcd_not_valid = 12
tdt_error = 13
txa_error = 14
OTHERS = 15.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.
LOOP AT lt_mwdat ASSIGNING FIELD-SYMBOL(<ls_mwdat>).
CHECK <ls_mwdat>-wmwst NE 0.
lv_item_no = lv_item_no + 1.
APPEND INITIAL LINE TO lt_tax ASSIGNING FIELD-SYMBOL(<ls_acctax>).
IF <ls_acctax> IS ASSIGNED.
<ls_acctax>-itemno_acc = lv_item_no.
<ls_acctax>-gl_account = <ls_mwdat>-hkont .
<ls_acctax>-tax_code = <fs_final>-taxcode.
<ls_acctax>-tax_rate = <ls_mwdat>-msatz.
<ls_acctax>-cond_key = <ls_mwdat>-kschl.
<ls_acctax>-acct_key = <ls_mwdat>-ktosl.
<ls_acctax>-direct_tax = abap_true.
<ls_acctax>-itemno_tax = lv_item_no.
APPEND INITIAL LINE TO lt_curr ASSIGNING FIELD-SYMBOL(<ls_curr_amt>).
IF <ls_curr_amt> IS ASSIGNED.
<ls_curr_amt>-itemno_acc = lv_item_no.
<ls_curr_amt>-curr_type = '00'.
<ls_curr_amt>-currency = <fs_final>-currency.
<ls_curr_amt>-amt_doccur = <ls_mwdat>-wmwst.
<ls_curr_amt>-amt_base = <ls_mwdat>-wmwst.
ENDIF.
ENDIF.
ENDLOOP.
lv_ven_amt = lv_ven_amt + lv_taxtot + lv_net_amt.
ENDLOOP.
ls_acc_pay-itemno_acc = lv_item_no = lv_item_no + 1.
ls_acc_pay-vendor_no = |{ <fs_final>-vend_no ALPHA = IN }|.
ls_acc_pay-alloc_nmbr = |{ <fs_final>-ebeln }/{ <fs_final>-ebelp }|.
ls_acc_pay-item_text = |{ <fs_final>-ref_doc_no }/{ <fs_final>-line_id }|.
ls_acc_pay-businessplace = <fs_final>-bupla.
ls_acc_pay-sectioncode = c_cc.
ls_acc_pay-tax_code = <fs_final>-taxcode.
APPEND: ls_acc_pay TO lt_acc_pay.
ls_curr-itemno_acc = lv_item_no.
ls_curr-currency = <fs_final>-currency.
ls_curr-amt_doccur = lv_ven_amt * -1.
APPEND: ls_curr TO lt_curr.
CLEAR ls_curr.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_CHECK'
EXPORTING
documentheader = ls_header
TABLES
accountgl = lt_gl_acc
accountpayable = lt_acc_pay
accounttax = lt_tax
currencyamount = lt_curr
extension2 = lt_extension2
criteria = lt_criteria
return = lt_return.
gs_msg-mblnr = ls_header-ref_doc_no.
LOOP AT lt_return INTO ls_return WHERE type = 'E'.
gs_msg-sno = gs_final-sno.
gs_msg-msg = ls_return-message.
gs_msg-type = 'E'.
APPEND: gs_msg TO gt_msg.
CLEAR: gs_msg.
ENDLOOP.
READ TABLE lt_return TRANSPORTING NO FIELDS WITH KEY type = 'E'.
IF sy-subrc NE 0.
SET UPDATE TASK LOCAL.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
documentheader = ls_header
IMPORTING
obj_type = lv_obj_typ
obj_key = lv_obj_key
obj_sys = lv_obj_sys
TABLES
accountgl = lt_gl_acc
accountpayable = lt_acc_pay
accounttax = lt_tax
currencyamount = lt_curr
extension2 = lt_extension2
criteria = lt_criteria
return = lt_return.
READ TABLE lt_return INTO ls_return WITH KEY type = 'E'.
IF sy-subrc NE 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
gs_msg-sno = gs_final-sno.
gs_msg-doc_no = lv_obj_key(10).
gs_msg-gjahr = lv_obj_key+14(4).
gs_msg-type = icon_green_light.
gs_msg-msg = |Document posted successfully:{ lv_obj_key }|.
APPEND gs_msg TO gt_msg.
CLEAR: gs_msg.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
LOOP AT lt_return INTO ls_return WHERE type = 'E'.
gs_msg-sno = gs_final-sno.
gs_msg-msg = ls_return-message.
gs_msg-type = icon_red_light.
APPEND: gs_msg TO gt_msg.
CLEAR: gs_msg.
ENDLOOP.
ENDIF.
ENDIF.
CLEAR: ls_header,
lt_curr,
lt_tax,
lt_extension2,
lt_gl_acc,
lt_acc_pay,
lt_return,
lt_criteria,
lv_item_no,
lv_ven_amt.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form display_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM display_alv .
TYPE-POOLS:
slis.
DATA:
ls_fieldcat TYPE slis_fieldcat_alv,
ls_layout TYPE slis_layout_alv.
DATA:
lt_fieldcat TYPE slis_t_fieldcat_alv.
DATA:
lv_program TYPE sy-repid.
IF gt_msg IS NOT INITIAL.
DATA:
lo_column TYPE REF TO cl_salv_column_table.
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = DATA(lo_salv) " Basis Class Simple ALV Tables
CHANGING
t_table = gt_msg.
DATA(lo_functions) = lo_salv->get_functions( ).
lo_functions->set_all( ).
DATA(lo_columns) = lo_salv->get_columns( ).
lo_columns->set_optimize( ).
lo_column ?= lo_columns->get_column( 'TYPE' ).
lo_column->set_icon( if_salv_c_bool_sap=>true ).
lo_column->set_long_text( 'Status' ).
lo_column->set_alignment( if_salv_c_alignment=>centered ).
lo_column->set_output_length( 20 ).
lo_column ?= lo_columns->get_column( 'SNO' ).
lo_column->set_long_text( 'Serial Number' ).
lo_column->set_medium_text( 'Serial Number' ).
lo_column->set_output_length( 10 ).
lo_column ?= lo_columns->get_column( 'DOC_NO' ).
lo_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
* DATA(lo_events) = lo_salv->get_event( ).
*
* SET HANDLER on_link_click FOR lo_events.
lo_salv->display( ).
CATCH cx_salv_msg INTO DATA(lx_salv_msg). " ALV: General Error Class with Message
CATCH cx_salv_data_error INTO DATA(lx_salv_data_error). " ALV: General Error Class (Checked in Syntax Check)
CATCH cx_salv_not_found INTO DATA(lx_salv_not_found). " ALV: General Error Class (Checked in Syntax Check)
CATCH cx_salv_existing INTO DATA(lx_salv_existing). " ALV: General Error Class (Checked in Syntax Check)
ENDTRY.
ELSE.
MESSAGE 'No errors found' TYPE 'I'.
ENDIF.
ENDFORM.
return = lt_return.
READ TABLE lt_return INTO ls_return WITH KEY type = 'E'.
IF sy-subrc NE 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
gs_msg-sno = gs_final-sno.
gs_msg-doc_no = lv_obj_key(10).
gs_msg-gjahr = lv_obj_key+14(4).
gs_msg-type = icon_green_light.
gs_msg-msg = |Document posted successfully:{ lv_obj_key }|.
APPEND gs_msg TO gt_msg.
CLEAR: gs_msg.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
LOOP AT lt_return INTO ls_return WHERE type = 'E'.
gs_msg-sno = gs_final-sno.
gs_msg-msg = ls_return-message.
gs_msg-type = icon_red_light.
APPEND: gs_msg TO gt_msg.
CLEAR: gs_msg.
ENDLOOP.
ENDIF.
ENDIF.
CLEAR: ls_header,
lt_curr,
lt_tax,
lt_extension2,
lt_gl_acc,
lt_acc_pay,
lt_return,
lt_criteria,
lv_item_no,
lv_ven_amt.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form display_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM display_alv .
TYPE-POOLS:
slis.
DATA:
ls_fieldcat TYPE slis_fieldcat_alv,
ls_layout TYPE slis_layout_alv.
DATA:
lt_fieldcat TYPE slis_t_fieldcat_alv.
DATA:
lv_program TYPE sy-repid.
IF gt_msg IS NOT INITIAL.
DATA:
lo_column TYPE REF TO cl_salv_column_table.
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = DATA(lo_salv) " Basis Class Simple ALV Tables
CHANGING
t_table = gt_msg.
DATA(lo_functions) = lo_salv->get_functions( ).
lo_functions->set_all( ).
DATA(lo_columns) = lo_salv->get_columns( ).
lo_columns->set_optimize( ).
lo_column ?= lo_columns->get_column( 'TYPE' ).
lo_column->set_icon( if_salv_c_bool_sap=>true ).
lo_column->set_long_text( 'Status' ).
lo_column->set_alignment( if_salv_c_alignment=>centered ).
lo_column->set_output_length( 20 ).
lo_column ?= lo_columns->get_column( 'SNO' ).
lo_column->set_long_text( 'Serial Number' ).
lo_column->set_medium_text( 'Serial Number' ).
lo_column->set_output_length( 10 ).
lo_column ?= lo_columns->get_column( 'DOC_NO' ).
lo_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
* DATA(lo_events) = lo_salv->get_event( ).
*
* SET HANDLER on_link_click FOR lo_events.
lo_salv->display( ).
CATCH cx_salv_msg INTO DATA(lx_salv_msg). " ALV: General Error Class with Message
CATCH cx_salv_data_error INTO DATA(lx_salv_data_error). " ALV: General Error Class (Checked in Syntax Check)
CATCH cx_salv_not_found INTO DATA(lx_salv_not_found). " ALV: General Error Class (Checked in Syntax Check)
CATCH cx_salv_existing INTO DATA(lx_salv_existing). " ALV: General Error Class (Checked in Syntax Check)
ENDTRY.
ELSE.
MESSAGE 'No errors found' TYPE 'I'.
ENDIF.
ENDFORM.
Note: We are implementing the user exit because when the document is posted, it hits the same GL account number for all document postings
**** User Exit For Business Place: J_1I7_GET_BUSINESS_PLACE
*$*$-Start: (1)---------------------------------------------------------------------------------$*$*
ENHANCEMENT 1 ZFI_UPDATE_BUSINESS_PALCE. "active version
IMPORT lv_bupla TO ls_j_1bbranch FROM MEMORY ID 'BUPLA'.
ENDENHANCEMENT.
*$*$-End: (1)---------------------------------------------------------------------------------$*$*
ENDFUNCTION.
ENHANCEMENT 1 ZFI_UPDATE_BUSINESS_PALCE. "active version
IMPORT lv_bupla TO ls_j_1bbranch FROM MEMORY ID 'BUPLA'.
ENDENHANCEMENT.
*$*$-End: (1)---------------------------------------------------------------------------------$*$*
ENDFUNCTION.
BADI IMPLIMENTATION NAME: BADI_ACC_DOCUMENT (Extension to update reference 1 in header text)
Comments
Post a Comment