You are on page 1of 8

method ZTIL_INVCRII_SI_IN_BCCL_INVOIC~SI_IN_BCCL_INVOICE.

*** **** INSERT IMPLEMENTATION HERE **** ***


DATA : it_head TYPE ZTIL_INVCRDT_INVOICE_HEADE_TAB,
it_det TYPE ZTIL_INVCRDT_INVOICE_DETAI_TAB,
wa_head TYPE ZTIL_INVCRDT_INVOICE_HEADER_DA,
wa_det TYPE ZTIL_INVCRDT_INVOICE_DETAILS.
DATA : username TYPE usnam,
header_txt TYPE bktxt,
comp_code TYPE bukrs,
doc_date TYPE bldat,
pstng_date TYPE budat,
doc_type TYPE blart,
bus_act TYPE glvor,
invoice_no TYPE xblnr_long.
DATA : it_post TYPE zft_invoice_details,
wa_post TYPE zft_inv_det,
wa_post1 type zft_inv_det.
*Begin of changes by Rajesh on 10.08.2015
DATA: lv_valuepart1 TYPE char8,
lv_valuepart2 TYPE XREF1_HD.
*End of changes by Rajesh on 10.08.2015
*
*
*
*
*
*
*
*
*
*
*
*
*

DATA : count TYPE i.


count = 1 .
WHILE count = 1.
ENDWHILE.
DATA: i TYPE i.
i = 0.
DO .
IF i = 1.
EXIT.
ENDIF.
ENDDO.

it_head = input-mt_invoice-data[].
it_det = input-mt_invoice-invoice_details-item[].
LOOP AT it_head INTO wa_head.
CLEAR : username,
header_txt,
comp_code,
doc_date,
pstng_date,
doc_type,
bus_act,
invoice_no.
username = wa_head-username.
header_txt = wa_head-header_txt.
comp_code = wa_head-comp_code.
CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'
EXPORTING
date_external
= wa_head-doc_date

ACCEPT_INITIAL_DATE
=
IMPORTING
date_internal
= doc_date
EXCEPTIONS
date_external_is_invalid
= 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.
*
DOC_DATE = WA_HEAD-DOC_DATE.
CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'
EXPORTING
date_external
= wa_head-pstng_date
*
ACCEPT_INITIAL_DATE
=
IMPORTING
date_internal
= pstng_date
EXCEPTIONS
date_external_is_invalid
= 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.
*
PSTNG_DATE = WA_HEAD-PSTNG_DATE.
doc_type = wa_head-doc_type.
bus_act = wa_head-bus_act.
invoice_no = wa_head-ref_doc_no_long.
lv_valuepart1 = 'XREF1_HD'.
lv_valuepart2 = wa_head-DEALTYPE.
ENDLOOP.
LOOP AT it_det INTO wa_det WHERE itemno_acc IS NOT INITIAL.
wa_post-itemno_acc = wa_det-itemno_acc.
wa_post-newbs = wa_det-newbs.
wa_post-gl_account = wa_det-gl_account.
wa_post-item_text = wa_det-item_text.
wa_post-customer = wa_det-customer.
wa_post-SP_GL_IND = wa_det-SP_GL_IND.
wa_post-ref_key_1 = wa_det-ref_key_1.
wa_post-ref_key_2 = wa_det-ref_key_2.
wa_post-ref_key_3 = wa_det-ref_key_3.
wa_post-comp_code = wa_det-comp_code.
wa_post-bus_area = wa_det-bus_area.
wa_post-pmnttrms = wa_det-pmnttrms.
wa_post-profit_ctr = wa_det-profit_ctr.
wa_post-curr_type = wa_det-curr_type.
wa_post-currency = wa_det-currency.
wa_post-amt_doccur = wa_det-amt_doccur.
wa_post-alloc_nmbr = wa_det-alloc_nmbr.
wa_post-costcenter = wa_det-costcenter.
wa_post-pymt_meth = wa_det-pymt_meth.
wa_post-businessplace = wa_det-businessplace.
wa_post-tax_code = wa_det-tax_code.
wa_post-exch_rate = wa_det-exch_rate.
APPEND wa_post TO it_post.
ENDLOOP.

*
*
*
*
*
*
*
*
*
*
*
*
*
*
*

DATA : doc_no TYPE char10,


error_text TYPE char200,
reference_no TYPE char30.
CALL FUNCTION 'ZFI_INVOICE'
EXPORTING
USERNAME = USERNAME
HEADER_TXT = HEADER_TXT
COMP_CODE = COMP_CODE
DOC_DATE = DOC_DATE
PSTNG_DATE = PSTNG_DATE
DOC_TYPE = DOC_TYPE
BUS_ACT
= BUS_ACT
INVOICE_NO = INVOICE_NO
IMPORTING
DOC_NO1
= DOC_NO
TABLES
IT_POST

= IT_POST[].

"Duplicate Invoice Code - kush 11.08.2013


*DATA : dup_no type bkpf-belnr.
* SELECT SINGLE BELNR into dup_no
*
from bkpf
*
WHERE XBLNR = invoice_no
*
AND bukrs = comp_code
*
AND bldat = doc_date
*
AND budat = pstng_date.

""""" changes by ashishp2010

DATA : it_bkpf type TABLE OF bkpf,


it_bseg type TABLE OF bseg,
wa_bseg type bseg.
DATA : lv_fiscal type Char4.
CALL FUNCTION 'GM_GET_FISCAL_YEAR'
EXPORTING
I_DATE
= pstng_date
I_FYV
= 'V3'
IMPORTING
E_FY
= lv_fiscal
* EXCEPTIONS
* FISCAL_YEAR_DOES_NOT_EXIST
= 1
* NOT_DEFINED_FOR_DATE
= 2
* OTHERS
= 3
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Select * from bkpf into TABLE it_bkpf where xblnr = invoice_no and
bukrs = comp_code .
if it_bkpf is not INITIAL.
SELECT * from bseg into TABLE it_bseg FOR ALL ENTRIES IN it_bkpf where belnr = i
t_bkpf-belnr

AND

koart = '

and

bukrs = c

and

gjahr = l

D'
omp_code
v_fiscal.
endif.
READ TABLE it_bseg into wa_bseg INDEX 1.
READ TABLE it_post into wa_post1 WITH key CUSTOMER = wa_bseg-kunnr.
READ TABLE it_bseg into wa_bseg with key bschl = wa_post1-NEWBS.

if sy-subrc ne 0.
ashishp2010

*
*

*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*

CALL FUNCTION 'ZFI_INVOICE'


EXPORTING
USERNAME
HEADER_TXT
COMP_CODE
DOC_DATE
PSTNG_DATE
DOC_TYPE
BUS_ACT
INVOICE_NO
LV_VALUEPART1
LV_VALUEPART2
IMPORTING
DOC_NO1
ERROR_TEXT
REFERENCE_NO
TABLES
IT_POST
EXCEPTIONS
01_USERNAME_NOT_FOUND
02_HEADER_TXT_NOT_FOUND
03_COMP_CODE_NOT_FOUND
04_DOC_DATE_NOT_FOUND
05_PSTNG_DATE_NOT_FOUND
06_DOC_TYPE_NOT_FOUND
07_BUS_ACT_NOT_FOUND
08_INVOICE_NO_NOT_FOUND
09_ITEMNO_ACC_NOT_FOUND
10_NEWBS_NOT_FOUND
11_GL_ACCOUNT_NOT_FOUND
12_ITEM_TEXT_NOT_FOUND
13_CUSTOMER_NOT_FOUND
14_REF_KEY_1_NOT_FOUND
15_REF_KEY_2_NOT_FOUND
16_REF_KEY_3_NOT_FOUND
17_COMP_CODE_NOT_FOUND
18_BUS_AREA_NOT_FOUND
19_PMNTTRMS_NOT_FOUND
20_PROFIT_CTR_NOT_FOUND
21_CURR_TYPE_NOT_FOUND
22_CURRENCY_NOT_FOUND

""""" changes by

=
=
=
=
=
=
=
=
=
=

username
header_txt
comp_code
doc_date
pstng_date
doc_type
bus_act
invoice_no
LV_VALUEPART1
LV_VALUEPART2

= doc_no
= error_text
= reference_no
= it_post[]
= 1
= 2
= 3
= 4
= 5
= 6
= 7
= 8
= 9
= 10
= 11
= 12
= 13
= 14
= 15
= 16
= 17
= 18
= 19
= 20
= 21
= 22

*
*
*
*
*

23_AMT_DOCCUR_NOT_FOUND
= 23
24_ALLOC_NMBR_NOT_FOUND
= 24
25_COSTCENTER_NOT_FOUND
= 25
26_PYMT_METH_NOT_FOUND
= 26
27_BUSINESSPLACE_NOT_FOUND
= 27
OTHERS
= 28
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
**
**
*
*
*
**
**
*
**
**
**
**
**
**
**
**
**
**
**
**
**
**
**
*
**
**
**
**
*

CALL FUNCTION 'ZFI_INVOICE'


EXPORTING
username = username
header_txt = header_txt
comp_code = comp_code
doc_date = doc_date
pstng_date = pstng_date
doc_type = doc_type
bus_act
= bus_act
invoice_no = invoice_no
LV_VALUEPART1 = LV_VALUEPART1
LV_VALUEPART2 = LV_VALUEPART1
IMPORTING
doc_no1
= doc_no
error_text
= error_text
reference_no
= reference_no
TABLES
it_post
= it_post[]
EXCEPTIONS
01_USERNAME_NOT_FOUND
= 1
02_HEADER_TXT_NOT_FOUND
= 2
03_comp_code_not_found
= 3
04_doc_date_not_found
= 4
05_pstng_date_not_found
= 5
06_DOC_TYPE_NOT_FOUND
= 6
07_BUS_ACT_NOT_FOUND
= 7
08_invoice_no_not_found
= 8
09_ITEMNO_ACC_NOT_FOUND
= 9
10_NEWBS_NOT_FOUND
= 10
11_GL_ACCOUNT_NOT_FOUND
= 11
12_ITEM_TEXT_NOT_FOUND
= 12
13_CUSTOMER_NOT_FOUND
= 13
14_REF_KEY_1_NOT_FOUND
= 14
15_REF_KEY_2_NOT_FOUND
= 15
16_REF_KEY_3_NOT_FOUND
= 16
17_COMP_CODE_NOT_FOUND
= 17
18_BUS_AREA_NOT_FOUND
= 18
19_PMNTTRMS_NOT_FOUND
= 19
20_PROFIT_CTR_NOT_FOUND
= 20
21_CURR_TYPE_NOT_FOUND
= 21
22_CURRENCY_NOT_FOUND
= 22
23_AMT_DOCCUR_NOT_FOUND
= 23
24_amt_doccur_negative
= 24
25_COSTCENTER_NOT_FOUND
= 25
26_PYMT_METH_NOT_FOUND
= 26
27_BUSINESSPLACE_NOT_FOUND
= 27
OTHERS
= 28
.

DATA : prxy TYPE REF TO zinv_prxyco_si_out_invresp,


it_ret TYPE zinv_prxydt_inv_resp_prxy__tab,
wa_ret TYPE zinv_prxydt_inv_resp_prxy_item,
it_trans TYPE zinv_prxymt_res_prxy.
IF sy-subrc <> 0 OR error_text IS NOT INITIAL.
*
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
*
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

*
*
*
*
*
*
*
*
*

wa_ret-reference_no = reference_no.
wa_ret-doc_no = doc_no.
IF sy-msgid IS NOT INITIAL.
CASE sy-msgid.
WHEN '3'.
wa_ret-error_text = 'COMP_CODE_NOT_FOUND'.
WHEN '4'.
wa_ret-error_text = 'DOC_DATE_NOT_FOUND'.
WHEN '5'.
wa_ret-error_text = 'POSTNG_DATE_NOT_FOUND'.
WHEN '8'.
wa_ret-error_text = 'Invoice_no_not_found'.
WHEN '24'.
wa_ret-error_text = 'AMT_DOCCUR_NEGATIVE'.
ENDCASE.
ELSEIF error_text IS INITIAL AND wa_ret-doc_no IS NOT INITIAL.
CLEAR wa_post.
READ TABLE it_post INTO wa_post WITH KEY newbs = '40'.
IF sy-subrc EQ 0.
wa_ret-error_text = 'Invoice Cancelled'.
ELSE.
wa_ret-error_text = 'Invoice Created'.
ENDIF.
ENDIF.
wa_ret-error_text = sy-msgid.
wa_ret-resp_type = 'INV'.
IF wa_ret-error_text IS INITIAL.
wa_ret-error_text = error_text.
ENDIF.
APPEND wa_ret TO it_ret.
TRY.
CREATE OBJECT prxy.
ENDTRY.
TRY.
it_trans-mt_res_prxy-item = it_ret.
CALL METHOD prxy->si_out_invresp
EXPORTING
output = it_trans.
COMMIT WORK.
CATCH cx_ai_system_fault.
DATA fault TYPE REF TO cx_ai_system_fault.
CREATE OBJECT fault.
WRITE :/ fault->errortext.
ENDTRY.

ELSEIF error_text IS INITIAL.


*
* IF SY-SUBRC = 0.
*
DATA : LV_MESS TYPE CHAR30.
*
CONCATENATE 'Document No.' DOC_NO INTO LV_MESS SEPARATED BY SPACE.
*
MESSAGE LV_MESS TYPE 'I'.
* ENDIF.
*
*
DATA : PRXY TYPE REF TO ZINV_PRXYCO_SI_OUT_INVRESP,
*
IT_RET TYPE ZINV_PRXYDT_INV_RESP_PRXY__TAB,
*
WA_RET TYPE ZINV_PRXYDT_INV_RESP_PRXY_ITEM,
*
IT_TRANS TYPE ZINV_PRXYMT_RES_PRXY.
wa_ret-reference_no = reference_no.
wa_ret-doc_no = doc_no.

CLEAR wa_post.
READ TABLE it_post INTO wa_post WITH KEY newbs = '40'.
IF sy-subrc EQ 0.
wa_ret-error_text = 'Invoice Cancelled'.
ELSE.
wa_ret-error_text = 'Invoice Created'.
ENDIF.
wa_ret-error_text = error_text.
wa_ret-resp_type = 'INV'.
APPEND wa_ret TO it_ret.
TRY.
CREATE OBJECT prxy.
ENDTRY.
TRY.
it_trans-mt_res_prxy-item = it_ret.
CALL METHOD prxy->si_out_invresp
EXPORTING
output = it_trans.
COMMIT WORK.
CATCH cx_ai_system_fault.
DATA fault1 TYPE REF TO cx_ai_system_fault.
CREATE OBJECT fault1.
WRITE :/ fault1->errortext.
ENDTRY.
ENDIF.
Elseif sy-subrc = 0. """"" changes by ashishp2010
wa_ret-reference_no = invoice_no.
wa_ret-doc_no = wa_bseg-belnr.
wa_ret-error_text = 'Duplicate Entry'.
wa_ret-resp_type = 'INV'.
APPEND wa_ret TO it_ret.
TRY.
CREATE OBJECT prxy.

ENDTRY.
TRY.
it_trans-mt_res_prxy-item = it_ret.
CALL METHOD prxy->si_out_invresp
EXPORTING
output = it_trans.
COMMIT WORK.
CATCH cx_ai_system_fault.
data fault2 TYPE REF TO cx_ai_system_fault.
CREATE OBJECT fault1.
WRITE :/ fault2->errortext.
ENDTRY.
endif.
endmethod.

You might also like