‎2007 Sep 18 11:20 AM
Why F0014 (ZUONR) in the FORM f4_bills_discounting is not showing the value.Its showing boxes or ascii characters. But in my internal table i.e. lt_tab i have values for the field ZUONR. I am sending the code. Can any1 help me?
-
REPORT zfb005_realisation.
DATA : w_belnr LIKE bseg-belnr,
w_kunag LIKE vbrk-kunag,
w_flag,
wa_bsis_xx LIKE bsis,
wa_bseg_xx LIKE bseg.
----
----
Internal tables Begin with IT_ *
----
DATA : BEGIN OF it_t012 OCCURS 0,
hbkid LIKE t012-hbkid,
banks LIKE t012-banks,
bankl LIKE t012-bankl,
END OF it_t012.
DATA : BEGIN OF it_bnka OCCURS 0,
bankl LIKE bnka-bankl,
banka LIKE bnka-banka,
END OF it_bnka.
DATA : r_hbkid TYPE RANGE OF bseg-hbkid WITH HEADER LINE,
r_hbkid_b TYPE RANGE OF bseg-hbkid WITH HEADER LINE,
r_hkont TYPE RANGE OF bsis-hkont WITH HEADER LINE.
DATA : it_bdcdata LIKE STANDARD TABLE OF bdcdata WITH HEADER LINE,
it_bdcmsg LIKE STANDARD TABLE OF bdcmsgcoll WITH HEADER LINE.
----
Parameters Begin with PR_ *
----
Bill Discounting
SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE text-b01.
PARAMETERS : pr_bukrs LIKE bkpf-bukrs OBLIGATORY VALUE CHECK,
pr_gjahr LIKE bkpf-gjahr OBLIGATORY,
pr_hbkid LIKE t012-hbkid OBLIGATORY,
pr_budat LIKE bkpf-budat OBLIGATORY,
pr_bldat LIKE bkpf-bldat OBLIGATORY,
pr_belnr LIKE bkpf-belnr OBLIGATORY,
pr_zuonr LIKE bsis-zuonr OBLIGATORY,
pr_valut LIKE bseg-valut OBLIGATORY,
pr_oamt TYPE bseg-wrbtr OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b01.
Invoice Document
SELECTION-SCREEN BEGIN OF BLOCK b02 WITH FRAME TITLE text-b02.
PARAMETERS : pr_vbeln LIKE vbrk-vbeln MODIF ID a11,
pr_netwr LIKE vbrk-netwr MODIF ID a11, "+ECDK902801
pr_waers LIKE bkpf-waers MODIF ID a11,
pr_kunag LIKE vbrk-kunag MODIF ID a11,
pr_name LIKE kna1-name1 MODIF ID a11.
SELECTION-SCREEN END OF BLOCK b02.
Currency exchange rate
SELECTION-SCREEN BEGIN OF BLOCK b03 WITH FRAME TITLE text-b03.
PARAMETERS : pr_kurs1 LIKE bkpf-kursf ,
pr_kurs2 LIKE bkpf-kursf,
pr_amt TYPE wrbtv.
SELECTION-SCREEN END OF BLOCK b03.
----
Initialisation *
----
INITIALIZATION.
PERFORM clear_all.
----
At Selection-Screen Output *
----
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF screen-group1 = 'A11'.
screen-input = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
----
At selection-screen on value request *
----
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pr_hbkid.
*-Drop down list for house bank
PERFORM f4_house_bank.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pr_belnr.
*-Drop down list for bills discounting
PERFORM f4_bills_discounting.
----
At Selection-Screen *
----
AT SELECTION-SCREEN.
*-Check if Invoice Document or Currency blank
*-Must use drop down list of bills discounting
IF pr_vbeln IS INITIAL OR pr_waers IS INITIAL OR w_flag IS INITIAL.
MESSAGE e208(00) WITH text-e08.
ENDIF.
*-Enter Exch.rate ( Inv Curr - USD ) if invoice currency is not 'USD'
IF pr_waers <> 'USD' AND pr_kurs1 IS INITIAL.
MESSAGE e208(00) WITH text-e09.
ENDIF.
*-Validate house bank
PERFORM validate_house_bank.
*-Validate bills discounting currency
PERFORM validate_bill_belnr.
*-Enter Exch.rate ( USD - INR ) if bills discounting doc. curr is 'INR'
IF wa_bsis_xx-waers EQ 'INR' AND pr_kurs2 IS INITIAL.
MESSAGE e208(00) WITH text-e10.
ENDIF.
*-Current account amount
IF wa_bsis_xx-waers EQ 'INR' AND pr_waers EQ 'USD'.
IF pr_amt IS INITIAL.
MESSAGE e208(00) WITH text-e11.
ENDIF.
ELSE.
CLEAR pr_amt.
ENDIF.
***********************************************************************
S T A R T O F S E L E C T I O N *
***********************************************************************
START-OF-SELECTION.
IF wa_bseg_xx-zfbdt > sy-datum.
MESSAGE i398(00) WITH text-w02 wa_bseg_xx-zfbdt text-w03 sy-datum.
ENDIF.
IF pr_waers <> wa_bsis_xx-waers.
MESSAGE i398(00) WITH text-t02 pr_waers text-t03 wa_bsis_xx-waers.
ENDIF.
*-Calling FB05 BDC for doc type z4
PERFORM create_document.
***********************************************************************
E N D O F S E L E C T I O N *
***********************************************************************
END-OF-SELECTION.
IF wa_bsis_xx-waers EQ 'INR' OR pr_waers NE 'USD'.
*---Check it_bdcmsg for successful posting
CLEAR it_bdcmsg.
READ TABLE it_bdcmsg WITH KEY msgtyp = 'S'
msgid = 'F5'
msgnr = '312'.
IF sy-subrc = 0.
CLEAR w_belnr.
MOVE it_bdcmsg-msgv1 TO w_belnr.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = w_belnr
IMPORTING
output = w_belnr.
MESSAGE i398(00) WITH text-i03 w_belnr text-i04 text-i05.
*-----Calling FB05 BDC for document type Z5
PERFORM create_document_z5 USING w_belnr.
ELSE.
MESSAGE i208(00) WITH text-i02.
ENDIF.
ENDIF.
***********************************************************************
E N D O F S E L E C T I O N *
***********************************************************************
*eject
&----
*& Form F4_HOUSE_BANK
&----
Custom F4 help for House Bank
----
--> p1 text
<-- p2 text
----
FORM f4_house_bank .
*-Local declaration
DATA : l_dyname LIKE d020s-prog,
l_dynumb LIKE d020s-dnum,
l_retfie LIKE dfies-fieldname,
l_bukrs LIKE bkpf-bukrs,
lt_dynpf LIKE STANDARD TABLE OF dynpread WITH HEADER LINE.
DATA : BEGIN OF lt_tab OCCURS 0,
bukrs LIKE t012k-bukrs, "-ECDK902801
hbkid LIKE t012k-hbkid,
banka LIKE bnka-banka, "+ECDK902801
END OF lt_tab.
*-Read Company code from selection screen
MOVE sy-repid TO l_dyname.
l_dynumb = '1000'.
lt_dynpf-fieldname = 'PR_BUKRS'.
APPEND lt_dynpf.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = l_dyname
dynumb = l_dynumb
TABLES
dynpfields = lt_dynpf
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
invalid_parameter = 7
undefind_error = 8
double_conversion = 9
stepl_not_found = 10
OTHERS = 11.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
READ TABLE lt_dynpf INDEX 1.
CHECK sy-subrc EQ 0.
MOVE lt_dynpf-fieldvalue TO l_bukrs.
*>>>>> Start of ECDK902801 : Added Bank name
*---Get house bank for given comapny code on selection screen
SELECT bukrs hbkid INTO TABLE lt_tab FROM t012
WHERE bukrs = l_bukrs
AND hbkid LIKE '9%'.
SELECT ahbkid bbanka INTO TABLE lt_tab
FROM t012 AS a
INNER JOIN bnka AS b
ON bbanks = abanks
AND bbankl = abankl
WHERE a~bukrs = l_bukrs
AND a~hbkid LIKE '9%'.
*<<<<<< End of ECDK902801
IF sy-subrc = 0.
MOVE 'HBKID' TO l_retfie.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = l_retfie
dynpprog = 'ZFB005_REALISATION_SMART'
dynpnr = '1000'
dynprofield = 'PR_HBKID'
value_org = 'S'
TABLES
value_tab = lt_tab
EXCEPTIONS
parameter_error = 1
no_values_found = 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.
ENDIF.
ENDIF.
ENDFORM. " F4_HOUSE_BANK
&----
*& Form validate_house_bank
&----
Validate house bank
----
--> p1 text
<-- p2 text
----
FORM validate_house_bank .
DATA : l_hbkid LIKE t012-hbkid.
SELECT SINGLE hbkid INTO l_hbkid FROM t012
WHERE bukrs = pr_bukrs
AND hbkid = pr_hbkid
AND spras = 'EN'.
IF sy-subrc <> 0.
MESSAGE e208(00) WITH text-001.
ENDIF.
IF pr_hbkid(1) <> '9'.
MESSAGE e398(00) WITH text-001 text-003 space space.
ENDIF.
ENDFORM. " validate_house_bank
&----
*& Form f4_bills_discounting
&----
F4 help for bills discounting document
----
--> p1 text
<-- p2 text
----
FORM f4_bills_discounting .
*-table for F4
DATA : BEGIN OF lt_tab OCCURS 0,
blart LIKE bsis-blart,
belnr LIKE bsis-belnr,
budat LIKE bsis-budat,
zfbdt LIKE bsis-zfbdt, "+ECDK902801
hkont LIKE bseg-hkont,
hbkid LIKE bseg-hbkid,
xblnr LIKE bkpf-xblnr,
waerk LIKE vbrk-waerk,
kunag LIKE vbrk-kunag,
name1 LIKE kna1-name1, "+ECDK902801
banka LIKE bnka-banka, "-ECDK902801
waers LIKE bsis-waers,
wrbtr LIKE bseg-wrbtr,
bal LIKE bseg-wrbtr,
zuonr type bseg-zuonr, "KD1
END OF lt_tab .
*-----fetch data from bseg
DATA : BEGIN OF lt_bseg OCCURS 0,
belnr LIKE bseg-belnr,
buzei LIKE bseg-buzei,
gjahr LIKE bseg-gjahr,
hbkid LIKE bseg-hbkid,
wrbtr LIKE bseg-wrbtr,
zuonr LIKE BSEG-ZUONR,
END OF lt_bseg.
DATA : l_dyname LIKE d020s-prog,
l_dynumb LIKE d020s-dnum,
l_retfie LIKE dfies-fieldname,
l_bukrs LIKE bkpf-bukrs,
l_gjahr LIKE bsis-gjahr,
ll_gjahr LIKE bsis-gjahr,
l_budat LIKE bkpf-budat,
l_tabix LIKE sy-tabix,
l_belnr LIKE bkpf-belnr,
l_vbeln LIKE vbrk-vbeln, "+ECDK902801
l_xblnr LIKE bkpf-xblnr,
ll_xblnr LIKE bkpf-xblnr,
l_hbkid LIKE bseg-hbkid,
ls_z2 LIKE bkpf,
ls_not_z4 LIKE bkpf,
l_netwr(21), "+ECDK902801
l_waers TYPE waers, "+ECDK902801
l_kunnr TYPE kunnr, "+ECDK902801
l_name TYPE kna1-name1,
lt_dynpf LIKE STANDARD TABLE OF dynpread WITH HEADER LINE,
lt_tab1 LIKE STANDARD TABLE OF lt_tab WITH HEADER LINE.
DATA: BEGIN OF lt_f4hlp OCCURS 1.
INCLUDE STRUCTURE dynpread.
DATA: END OF lt_f4hlp.
DATA : ltt_bkpf TYPE STANDARD TABLE OF bkpf WITH HEADER LINE,
lttt_bkpf TYPE bkpf ,
ltt_bseg TYPE STANDARD TABLE OF bseg WITH HEADER LINE,
ll_wrbtr TYPE bseg-wrbtr,
l_bal TYPE bseg-wrbtr,
l_bal1(20).
*-Read Company code from selection screen
MOVE sy-repid TO l_dyname.
l_dynumb = '1000'.
lt_dynpf-fieldname = 'PR_BUKRS'.
APPEND lt_dynpf.
lt_dynpf-fieldname = 'PR_GJAHR'.
APPEND lt_dynpf.
lt_dynpf-fieldname = 'PR_HBKID'.
APPEND lt_dynpf.
lt_dynpf-fieldname = 'PR_BUDAT'.
APPEND lt_dynpf.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = l_dyname
dynumb = l_dynumb
TABLES
dynpfields = lt_dynpf
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
invalid_parameter = 7
undefind_error = 8
double_conversion = 9
stepl_not_found = 10
OTHERS = 11.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
READ TABLE lt_dynpf WITH KEY fieldname = 'PR_BUKRS'.
IF sy-subrc = 0.
l_bukrs = lt_dynpf-fieldvalue.
ENDIF.
READ TABLE lt_dynpf WITH KEY fieldname = 'PR_GJAHR'.
IF sy-subrc = 0.
l_gjahr = lt_dynpf-fieldvalue.
ENDIF.
READ TABLE lt_dynpf WITH KEY fieldname = 'PR_HBKID'.
IF sy-subrc = 0.
l_hbkid = lt_dynpf-fieldvalue.
ENDIF.
READ TABLE lt_dynpf WITH KEY fieldname = 'PR_BUDAT'.
IF sy-subrc = 0.
CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'
EXPORTING
date_external = lt_dynpf-fieldvalue
IMPORTING
date_internal = lt_dynpf-fieldvalue
EXCEPTIONS
date_external_is_invalid = 1
OTHERS = 2.
IF sy-subrc = 0.
WRITE lt_dynpf-fieldvalue TO l_budat.
ENDIF.
ENDIF.
CHECK l_bukrs <> space AND l_hbkid <> space AND NOT l_budat IS INITIAL.
*---Get dep house bank from limit table
CLEAR: r_hbkid, r_hbkid[].
PERFORM get_dep_house_bank_gl TABLES r_hbkid
USING l_bukrs l_hbkid l_budat.
*---Get data from BSIS for XX
SELECT abelnr abuzei abudat ablart ahkont awaers awrbtr bxblnr
azfbdt azuonr
INTO CORRESPONDING FIELDS OF TABLE lt_tab
FROM bsis AS a
INNER JOIN bkpf AS b
ON abelnr = bbelnr AND abukrs = bbukrs AND agjahr = bgjahr
WHERE a~bukrs EQ l_bukrs
AND a~hkont IN r_hkont
AND a~gjahr EQ l_gjahr
AND a~blart EQ 'XX'
AND b~xreversal EQ space
.
IF sy-subrc <> 0.
*----
Do Nothing
ENDIF.
*---Get data from BSAS for XX
SELECT abelnr abuzei abudat ablart ahkont awaers awrbtr bxblnr
azfbdt azuonr
APPENDING CORRESPONDING FIELDS OF TABLE lt_tab
FROM bsas AS a
INNER JOIN bkpf AS b
ON abelnr = bbelnr AND abukrs = bbukrs AND agjahr = bgjahr
WHERE a~bukrs EQ l_bukrs
AND a~hkont IN r_hkont
AND a~gjahr EQ l_gjahr
AND a~blart EQ 'XX'
AND b~xreversal EQ space.
IF sy-subrc <> 0.
*----
Do Nothing
ENDIF.
*---Get data from BSIS for Z3
CLEAR : lt_tab1, lt_tab1[].
SELECT a~belnr a~buzei a~budat a~blart a~hkont a~waers a~wrbtr b~xblnr
a~zfbdt a~zuonr
INTO CORRESPONDING FIELDS OF TABLE lt_tab1
FROM bsis AS a
INNER JOIN bkpf AS b
ON a~belnr = b~belnr AND a~bukrs = b~bukrs AND a~gjahr = b~gjahr
WHERE a~bukrs EQ l_bukrs
AND a~hkont IN r_hkont
AND a~gjahr EQ l_gjahr
AND a~blart EQ 'Z3'
AND b~xreversal EQ space
.
IF sy-subrc = 0.
CLEAR l_tabix.
LOOP AT lt_tab1.
l_tabix = sy-tabix.
CLEAR: l_belnr, ls_z2.
MOVE lt_tab1-xblnr(10) TO l_belnr.
CLEAR ll_gjahr.
CONCATENATE '20' lt_tab1-xblnr+14(2) INTO ll_gjahr.
SELECT SINGLE * INTO ls_z2 FROM bkpf
WHERE bukrs = l_bukrs
AND belnr = l_belnr
AND gjahr GE ll_gjahr
AND blart = 'Z2'.
IF sy-subrc <> 0.
DELETE lt_tab1 INDEX l_tabix.
CONTINUE.
ENDIF.
CLEAR: ls_not_z4, l_belnr.
MOVE ls_z2-xblnr(10) TO l_belnr.
CLEAR ll_gjahr.
CONCATENATE '20' ls_z2-xblnr+14(2) INTO ll_gjahr.
SELECT SINGLE * INTO ls_not_z4 FROM bkpf
WHERE bukrs = l_bukrs
AND belnr = l_belnr
AND gjahr GE ll_gjahr
AND blart <> 'Z4'.
IF sy-subrc <> 0.
DELETE lt_tab1 INDEX l_tabix.
CONTINUE.
ENDIF.
MOVE ls_not_z4-xblnr(10) TO lt_tab1-xblnr.
CONCATENATE '20' ls_not_z4-xblnr+14(2) INTO ll_gjahr.
------------------------------------------
*-------customer number from invoicing document
CLEAR lt_tab1-kunag.
SELECT SINGLE kunag waerk INTO (lt_tab1-kunag, lt_tab1-waerk)
FROM vbrk
WHERE vbeln = lt_tab1-xblnr.
IF sy-subrc <> 0.
SELECT SINGLE kunnr pswsl INTO (lt_tab1-kunag, lt_tab1-waerk)
FROM bseg
WHERE bukrs = l_bukrs
AND belnr = lt_tab1-xblnr
AND gjahr = ll_gjahr.
ENDIF.
IF sy-subrc = 0.
*>>>>> Start of ECDK902801 : Added to fetch customer name
CLEAR lt_tab1-name1.
SELECT SINGLE name1 INTO lt_tab1-name1 FROM kna1
WHERE kunnr = lt_tab1-kunag.
IF sy-subrc <> 0.
*----
Do nothing
ENDIF.
*<<<<< End of ECDK902801
MODIFY lt_tab1 INDEX l_tabix TRANSPORTING xblnr kunag waerk name1.
ENDIF.
ENDLOOP.
IF NOT lt_tab1[] IS INITIAL.
APPEND LINES OF lt_tab1[] TO lt_tab[].
ENDIF.
CLEAR: lt_tab1, lt_tab1[].
ENDIF.
IF lt_tab[] IS INITIAL.
MESSAGE s208(00) WITH text-w01.
ELSE.
*-----Get data from BSEG
CLEAR: lt_bseg, lt_bseg[].
SELECT belnr buzei gjahr hbkid wrbtr
INTO TABLE lt_bseg
FROM bseg
FOR ALL ENTRIES IN lt_tab
WHERE bukrs = l_bukrs
AND belnr = lt_tab-belnr
AND gjahr = l_gjahr
AND bschl = '50'
AND hbkid IN r_hbkid_b.
IF sy-subrc = 0.
*-------Process data
CLEAR: lt_tab.
LOOP AT lt_tab.
l_tabix = sy-tabix.
CLEAR: lt_bseg, l_bal.
READ TABLE lt_bseg WITH KEY belnr = lt_tab-belnr
gjahr = l_gjahr.
IF sy-subrc = 0.
CLEAR ll_gjahr.
CONCATENATE '20' lt_tab-xblnr+14(2) INTO ll_gjahr.
MOVE lt_tab-xblnr(10) TO lt_tab-xblnr.
CLEAR l_xblnr.
CONCATENATE lt_tab-belnr l_bukrs l_gjahr+2(2) INTO l_xblnr.
IF lt_tab-blart EQ 'Z3'.
CLEAR : ltt_bkpf, ltt_bkpf[], ll_wrbtr.
SELECT * INTO TABLE ltt_bkpf FROM bkpf
WHERE bukrs = l_bukrs
AND gjahr GE l_gjahr
AND xblnr = l_xblnr
AND blart EQ 'Z4'
AND xreversal EQ space.
IF sy-subrc EQ 0.
LOOP AT ltt_bkpf.
IF lt_tab-waers <> ltt_bkpf-waers.
CLEAR : lttt_bkpf, ll_xblnr.
CONCATENATE ltt_bkpf-belnr l_bukrs l_gjahr+2(2) INTO ll_xblnr.
SELECT SINGLE * INTO lttt_bkpf FROM bkpf
WHERE bukrs = l_bukrs
AND gjahr GE l_gjahr
AND xblnr = ll_xblnr
AND blart EQ 'Z5'
AND xreversal EQ space.
IF sy-subrc EQ 0.
ltt_bkpf = lttt_bkpf.
MODIFY ltt_bkpf.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
IF ltt_bkpf[] IS NOT INITIAL.
CLEAR : ltt_bseg, ltt_bseg[].
SELECT * INTO TABLE ltt_bseg FROM bseg
FOR ALL ENTRIES IN ltt_bkpf
WHERE bukrs = ltt_bkpf-bukrs
AND belnr = ltt_bkpf-belnr
AND gjahr = ltt_bkpf-gjahr
AND bschl = '40'
AND hkont IN r_hkont.
IF sy-subrc EQ 0.
LOOP AT ltt_bseg.
ll_wrbtr = ll_wrbtr + ltt_bseg-wrbtr.
ENDLOOP.
ENDIF.
ENDIF.
CLEAR l_bal.
l_bal = lt_bseg-wrbtr - ll_wrbtr.
IF l_bal LE 0 .
DELETE lt_tab INDEX l_tabix.
CONTINUE.
ENDIF.
ENDIF.
IF lt_tab-blart = 'XX'.
**********************************************************************************************
CLEAR l_belnr.
SELECT belnr INTO l_belnr FROM bkpf UP TO 1 ROWS
WHERE bukrs = l_bukrs
AND gjahr GE l_gjahr
AND xblnr = l_xblnr
AND blart EQ 'Z2'
AND xreversal EQ space.
ENDSELECT.
IF sy-subrc = 0 AND NOT l_belnr IS INITIAL.
DELETE lt_tab INDEX l_tabix.
CONTINUE.
ENDIF.
CLEAR : ltt_bkpf, ltt_bkpf[], ll_wrbtr.
SELECT * INTO TABLE ltt_bkpf FROM bkpf
WHERE bukrs = l_bukrs
AND gjahr GE l_gjahr
AND xblnr = l_xblnr
AND blart EQ 'Z4'
AND xreversal EQ space.
IF sy-subrc EQ 0.
LOOP AT ltt_bkpf.
IF lt_tab-waers <> ltt_bkpf-waers.
CLEAR : lttt_bkpf, ll_xblnr.
CONCATENATE ltt_bkpf-belnr l_bukrs l_gjahr+2(2) INTO ll_xblnr.
SELECT SINGLE * INTO lttt_bkpf FROM bkpf
WHERE bukrs = l_bukrs
AND gjahr GE l_gjahr
AND xblnr = ll_xblnr
AND blart EQ 'Z5'
AND xreversal EQ space.
IF sy-subrc EQ 0.
ltt_bkpf = lttt_bkpf.
MODIFY ltt_bkpf.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
IF ltt_bkpf[] IS NOT INITIAL.
CLEAR : ltt_bseg, ltt_bseg[].
SELECT * INTO TABLE ltt_bseg FROM bseg
FOR ALL ENTRIES IN ltt_bkpf
WHERE bukrs = ltt_bkpf-bukrs
AND belnr = ltt_bkpf-belnr
AND gjahr = ltt_bkpf-gjahr
AND bschl = '40'
AND hkont IN r_hkont.
IF sy-subrc EQ 0.
LOOP AT ltt_bseg.
ll_wrbtr = ll_wrbtr + ltt_bseg-wrbtr.
ENDLOOP.
ENDIF.
ENDIF.
CLEAR l_bal.
l_bal = lt_bseg-wrbtr - ll_wrbtr.
IF l_bal LE 0 .
DELETE lt_tab INDEX l_tabix.
CONTINUE.
ENDIF.
*----
customer number from invoicing document
SELECT SINGLE kunag waerk INTO (lt_tab-kunag, lt_tab-waerk) FROM vbrk
WHERE vbeln = lt_tab-xblnr.
IF sy-subrc <> 0.
SELECT SINGLE kunnr pswsl INTO (lt_tab-kunag, lt_tab-waerk)
FROM bseg
WHERE bukrs = l_bukrs
AND belnr = lt_tab-xblnr
AND gjahr = ll_gjahr.
ENDIF.
IF sy-subrc = 0.
*>>>>> Start of ECDK902801 : Added to get customer name1
CLEAR lt_tab-name1.
SELECT SINGLE name1 INTO lt_tab-name1 FROM kna1
WHERE kunnr = lt_tab-kunag.
IF sy-subrc <> 0.
*----
Do nothing
ENDIF.
*<<<<< End of ECDK902801
ENDIF.
ELSE.
CLEAR l_bal.
l_bal = lt_bseg-wrbtr.
ENDIF.
lt_tab-wrbtr = lt_bseg-wrbtr.
lt_tab-hbkid = lt_bseg-hbkid.
lt_tab-bal = l_bal.
*>>>>> Start of ECDK902801 : Deleted house bank description
*----
House bank description
CLEAR it_t012.
READ TABLE it_t012 WITH KEY hbkid = lt_tab-hbkid.
IF sy-subrc = 0.
CLEAR it_bnka.
READ TABLE it_bnka WITH KEY bankl = it_t012-bankl.
IF sy-subrc = 0.
lt_tab-banka = it_bnka-banka.
ENDIF.
ENDIF.
*<<<<< End of ECDK902801
MODIFY lt_tab INDEX l_tabix TRANSPORTING xblnr hbkid kunag waerk wrbtr name1 bal.
ELSE.
DELETE lt_tab INDEX l_tabix.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.
IF lt_tab[] IS INITIAL.
MESSAGE s208(00) WITH text-w01.
ELSE.
MOVE 'BELNR' TO l_retfie.
SORT lt_tab BY belnr budat.
DATA : lt_ftab LIKE STANDARD TABLE OF dfies .
DATA : lt_rtab LIKE STANDARD TABLE OF ddshretval WITH HEADER LINE.
DATA : lt_dynm LIKE STANDARD TABLE OF dselc WITH HEADER LINE.
lt_dynm-fldname = 'F0002'.
lt_dynm-dyfldname = 'PR_BELNR'.
APPEND lt_dynm.
lt_dynm-fldname = 'F0007'.
lt_dynm-dyfldname = 'PR_VBELN'.
APPEND lt_dynm.
lt_dynm-fldname = 'F0008'.
lt_dynm-dyfldname = 'PR_WAERS'.
APPEND lt_dynm.
lt_dynm-fldname = 'F0009'.
lt_dynm-dyfldname = 'PR_KUNAG'.
APPEND lt_dynm.
lt_dynm-fldname = 'F0010'.
lt_dynm-dyfldname = 'PR_NAME'.
APPEND lt_dynm.
lt_dynm-fldname = 'F0013'.
lt_dynm-dyfldname = 'PR_OAMT'.
APPEND lt_dynm.
PERFORM field_lable USING lt_ftab.
*---Display data in drop down list
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = l_retfie
dynpprog = 'ZFB005_REALISATION_SMART'
dynpnr = '1000'
dynprofield = 'PR_BELNR'
value_org = 'S'
TABLES
value_tab = lt_tab
field_tab = lt_ftab
return_tab = lt_rtab
dynpfld_mapping = lt_dynm
EXCEPTIONS
parameter_error = 1
no_values_found = 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.
CLEAR w_kunag.
READ TABLE lt_rtab WITH KEY retfield = 'PR_KUNAG'.
IF sy-subrc = 0.
w_kunag = lt_rtab-fieldval.
ENDIF.
CLEAR l_name.
READ TABLE lt_rtab WITH KEY retfield = 'PR_NAME'.
IF sy-subrc = 0.
l_name = lt_rtab-fieldval.
ENDIF.
*>>>>> Start of ECDK902801 : Added to display Invoice amt
CLEAR l_waers.
READ TABLE lt_rtab WITH KEY retfield = 'PR_WAERS'.
IF sy-subrc = 0.
l_waers = lt_rtab-fieldval.
ENDIF.
CLEAR l_bal.
READ TABLE lt_rtab WITH KEY retfield = 'PR_OAMT'.
IF sy-subrc = 0.
l_bal1 = lt_rtab-fieldval.
MOVE lt_rtab-fieldval TO l_bal1.
ENDIF.
CLEAR l_belnr.
READ TABLE lt_rtab WITH KEY retfield = 'PR_BELNR'.
IF sy-subrc = 0.
l_belnr = lt_rtab-fieldval.
ENDIF.
READ TABLE lt_rtab WITH KEY retfield = 'PR_VBELN'.
IF sy-subrc = 0.
l_vbeln = lt_rtab-fieldval.
SELECT SINGLE netwr INTO pr_netwr FROM vbrk
WHERE vbeln = l_vbeln.
IF sy-subrc <> 0.
SELECT SINGLE wrbtr INTO pr_netwr
FROM bseg
WHERE bukrs = l_bukrs
AND belnr = l_vbeln
AND gjahr = l_gjahr.
ENDIF.
ENDIF.
lt_f4hlp-fieldname = 'PR_BELNR'.
MOVE l_belnr TO lt_f4hlp-fieldvalue.
APPEND lt_f4hlp.
*
lt_f4hlp-fieldname = 'PR_VBELN'.
MOVE l_vbeln TO lt_f4hlp-fieldvalue.
APPEND lt_f4hlp.
*
lt_f4hlp-fieldname = 'PR_NETWR'.
MOVE pr_netwr TO l_netwr.
MOVE l_netwr TO lt_f4hlp-fieldvalue.
APPEND lt_f4hlp.
*
lt_f4hlp-fieldname = 'PR_WAERS'.
IF l_waers IS INITIAL.
SELECT SINGLE waers INTO l_waers FROM bkpf
WHERE belnr EQ l_vbeln.
IF sy-subrc <> 0.
*----
Do nothing
ENDIF.
ENDIF.
MOVE l_waers TO lt_f4hlp-fieldvalue.
APPEND lt_f4hlp.
lt_f4hlp-fieldname = 'PR_KUNAG'.
MOVE w_kunag TO lt_f4hlp-fieldvalue.
APPEND lt_f4hlp.
*
lt_f4hlp-fieldname = 'PR_NAME'.
MOVE l_name TO lt_f4hlp-fieldvalue.
APPEND lt_f4hlp.
lt_f4hlp-fieldname = 'PR_OAMT'.
WRITE l_bal1 TO lt_f4hlp-fieldvalue.
APPEND lt_f4hlp.
lt_f4hlp-fieldname = 'PR_VALUT'.
WRITE l_bal1 TO lt_f4hlp-fieldvalue.
APPEND lt_f4hlp.
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
dyname = 'ZFB005_EALISATION_SMART_Z4'
dynumb = '1000'
TABLES
dynpfields = lt_f4hlp
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
undefind_error = 7
OTHERS = 8.
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.
End of ECDK902801
w_flag = 'C'.
ENDFORM. " f4_bills_discounting
&----
*& Form validate_bill_belnr
&----
Validate bills discounting currecncy document
----
--> p1 text
<-- p2 text
----
FORM validate_bill_belnr .
DATA : l_belnr LIKE bsis-belnr.
DATA : l_xblnr LIKE bkpf-xblnr.
DATA : ll_xblnr LIKE bkpf-xblnr.
DATA : l_bal TYPE wrbtr.
DATA : ltt_bkpf TYPE STANDARD TABLE OF bkpf WITH HEADER LINE.
DATA : lttt_bkpf TYPE bkpf.
DATA : ltt_bseg TYPE STANDARD TABLE OF bseg WITH HEADER LINE.
DATA : ll_wrbtr TYPE bseg-wrbtr.
IF r_hbkid[] IS INITIAL.
PERFORM get_dep_house_bank_gl TABLES r_hbkid
USING pr_bukrs pr_hbkid pr_budat.
ENDIF.
CLEAR wa_bsis_xx.
SELECT * INTO wa_bsis_xx UP TO 1 ROWS
FROM bsis
WHERE bukrs EQ pr_bukrs
AND hkont IN r_hkont
AND belnr EQ pr_belnr
AND gjahr EQ pr_gjahr
AND ( blart EQ 'XX' OR blart EQ 'Z3' ).
ENDSELECT.
IF sy-subrc <> 0.
CLEAR wa_bsis_xx.
MESSAGE e208(00) WITH text-e01.
ENDIF.
CLEAR wa_bseg_xx.
SELECT SINGLE * INTO wa_bseg_xx FROM bseg
WHERE bukrs = wa_bsis_xx-bukrs
AND belnr = wa_bsis_xx-belnr
AND buzei = wa_bsis_xx-buzei
AND gjahr = wa_bsis_xx-gjahr
AND bschl = '50'
AND hbkid IN r_hbkid
.
IF sy-subrc <> 0.
CLEAR wa_bsis_xx.
MESSAGE e208(00) WITH text-e01.
ENDIF.
SELECT SINGLE belnr INTO l_belnr FROM bkpf
WHERE bukrs = wa_bsis_xx-bukrs
AND belnr = wa_bsis_xx-belnr
AND gjahr = wa_bsis_xx-gjahr
AND xreversal <> 1.
IF sy-subrc <> 0.
CLEAR: wa_bsis_xx, wa_bseg_xx.
MESSAGE e208(00) WITH text-e07.
ENDIF.
CLEAR l_xblnr.
CONCATENATE wa_bsis_xx-belnr wa_bsis_xx-bukrs wa_bsis_xx-gjahr+2(2)
INTO l_xblnr.
SELECT belnr INTO l_belnr FROM bkpf UP TO 1 ROWS
WHERE bukrs = wa_bsis_xx-bukrs
AND gjahr GE wa_bsis_xx-gjahr
AND xblnr = l_xblnr
AND blart EQ 'Z2'
AND xreversal EQ space.
ENDSELECT.
IF sy-subrc = 0 AND NOT l_belnr IS INITIAL.
MESSAGE e398(00) WITH l_belnr 'Z2 document created for' pr_belnr space.
ENDIF.
CLEAR : ltt_bkpf, ltt_bkpf[], ll_wrbtr.
SELECT * INTO TABLE ltt_bkpf FROM bkpf
WHERE bukrs = wa_bsis_xx-bukrs
AND gjahr GE wa_bsis_xx-gjahr
AND xblnr = l_xblnr
AND blart EQ 'Z4'
AND xreversal EQ space.
IF sy-subrc EQ 0.
LOOP AT ltt_bkpf.
IF wa_bsis_xx-waers <> ltt_bkpf-waers.
CLEAR : lttt_bkpf, ll_xblnr.
CONCATENATE ltt_bkpf-belnr wa_bsis_xx-bukrs wa_bsis_xx-gjahr+2(2) INTO ll_xblnr.
SELECT SINGLE * INTO lttt_bkpf FROM bkpf
WHERE bukrs = wa_bsis_xx-bukrs
AND gjahr GE wa_bsis_xx-gjahr
AND xblnr = ll_xblnr
AND blart EQ 'Z5'
AND xreversal EQ space.
IF sy-subrc EQ 0.
ltt_bkpf = lttt_bkpf.
MODIFY ltt_bkpf.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
IF ltt_bkpf[] IS NOT INITIAL.
CLEAR : ltt_bseg, ltt_bseg[].
SELECT * INTO TABLE ltt_bseg FROM bseg
FOR ALL ENTRIES IN ltt_bkpf
WHERE bukrs = ltt_bkpf-bukrs
AND belnr = ltt_bkpf-belnr
AND gjahr = ltt_bkpf-gjahr
AND bschl = '40'
AND hkont IN r_hkont.
IF sy-subrc EQ 0.
LOOP AT ltt_bseg.
ll_wrbtr = ll_wrbtr + ltt_bseg-wrbtr.
ENDLOOP.
ENDIF.
ENDIF.
CLEAR l_bal.
l_bal = wa_bsis_xx-wrbtr - ll_wrbtr.
IF pr_oamt > l_bal.
MESSAGE e398(00) WITH 'Outstanding amount' pr_oamt 'is greater than balance amount' l_bal.
ENDIF.
ENDFORM. " validate_bill_belnr
&----
*& Form GET_DEP_HOUSE_BANK_GL
&----
text
----
-->P_R_HBKID text
-->P_L_BUKRS text
-->P_L_HBKID text
-->P_L_BUDAT text
----
FORM get_dep_house_bank_gl TABLES p_r_hbkid STRUCTURE r_hbkid
USING p_l_bukrs TYPE bukrs
p_l_hbkid TYPE hbkid
p_l_budat TYPE budat.
DATA : BEGIN OF lt_depbank OCCURS 0,
dep_housebank LIKE zft006_limit-dep_housebank,
END OF lt_depbank.
DATA : BEGIN OF lt_t012k OCCURS 0,
hkont LIKE t012k-hkont,
wekon LIKE t012k-wekon,
END OF lt_t012k.
*-Get dependent house bank from limit table
SELECT DISTINCT dep_housebank INTO TABLE lt_depbank FROM zft006_limit
WHERE bukrs = p_l_bukrs
AND hbkid = p_l_hbkid
AND zdate LE p_l_budat.
IF sy-subrc = 0.
LOOP AT lt_depbank.
p_r_hbkid-sign = 'I'.
p_r_hbkid-option = 'EQ'.
p_r_hbkid-low = lt_depbank-dep_housebank.
APPEND p_r_hbkid.
ENDLOOP.
ENDIF.
*-Get GL Account
IF NOT p_r_hbkid[] IS INITIAL.
CLEAR: lt_t012k, lt_t012k[].
SELECT hkont wekon FROM t012k
INTO CORRESPONDING FIELDS OF TABLE lt_t012k
WHERE bukrs = p_l_bukrs
AND hbkid IN p_r_hbkid.
IF sy-subrc = 0.
CLEAR: r_hkont, r_hkont[].
LOOP AT lt_t012k.
r_hkont-sign = 'I'.
r_hkont-option = 'EQ'.
IF NOT lt_t012k-hkont IS INITIAL.
r_hkont-low = lt_t012k-hkont.
APPEND r_hkont.
ENDIF.
IF NOT lt_t012k-wekon IS INITIAL.
r_hkont-low = lt_t012k-wekon.
APPEND r_hkont.
ENDIF.
ENDLOOP.
ENDIF.
SORT r_hkont BY low.
DELETE ADJACENT DUPLICATES FROM r_hkont.
ENDIF.
IF r_hkont[] IS INITIAL.
MESSAGE s208(00) WITH text-w01.
ENDIF.
IF NOT p_r_hbkid[] IS INITIAL.
CLEAR: it_t012, it_t012[].
SELECT hbkid banks bankl
INTO TABLE it_t012
FROM t012
WHERE bukrs = p_l_bukrs
AND hbkid IN p_r_hbkid.
IF sy-subrc = 0.
CLEAR : it_bnka, it_bnka[].
SELECT bankl banka
INTO TABLE it_bnka
FROM bnka
FOR ALL ENTRIES IN it_t012
WHERE banks = it_t012-banks
AND bankl = it_t012-bankl.
IF sy-subrc <> 0.
*----
Do Nothing
ENDIF.
ENDIF.
ENDIF.
*-Get dependent house bank from limit table
CLEAR: lt_depbank, lt_depbank[].
SELECT DISTINCT dep_housebank INTO TABLE lt_depbank FROM zft006_limit
WHERE bukrs = p_l_bukrs
AND hbkid = p_l_hbkid
AND dep_housebank LIKE 'B%'
AND zdate LE p_l_budat.
IF sy-subrc = 0.
CLEAR: r_hbkid_b, r_hbkid_b[].
LOOP AT lt_depbank.
r_hbkid_b-sign = 'I'.
r_hbkid_b-option = 'EQ'.
r_hbkid_b-low = lt_depbank-dep_housebank.
APPEND r_hbkid_b.
ENDLOOP.
ENDIF.
ENDFORM. " GET_DEP_HOUSE_BANK_GL
&----
*& Form create_document
&----
create accounting document Z4
----
-->text
----
FORM create_document.
DATA : l_xblnr LIKE bkpf-xblnr,
l_sgtxt LIKE bseg-sgtxt,
l_wrbtr LIKE bsis-wrbtr,
l_xrbtr(7) TYPE p,
l_xref1 LIKE bseg-xref1,
l_ukurs LIKE tcurr-ukurs,
l_dec LIKE tcurx-currdec.
DATA : l_dmbe2 TYPE bsis-dmbe2.
CLEAR : it_bdcdata, it_bdcmsg.
REFRESH : it_bdcdata, it_bdcmsg.
CONCATENATE pr_belnr pr_bukrs pr_gjahr+2(2) INTO l_xblnr.
*-First Screen
PERFORM bdc_dynpro USING 'SAPMF05A' '0122'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RF05A-NEWKO'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_field USING 'BKPF-BLDAT' pr_bldat.
PERFORM bdc_field USING 'BKPF-BLART' 'Z4'.
PERFORM bdc_field USING 'BKPF-BUKRS' pr_bukrs.
PERFORM bdc_field USING 'BKPF-BUDAT' pr_budat.
PERFORM bdc_field USING 'BKPF-WAERS' pr_waers.
IF pr_waers <> 'USD'.
PERFORM bdc_field USING 'BKPF-KURSF' pr_kurs1.
ENDIF.
PERFORM bdc_field USING 'BKPF-XBLNR' l_xblnr.
PERFORM bdc_field USING 'RF05A-XPOS1(02)' 'X'.
*-Line items and GL Account
PERFORM bdc_field USING 'RF05A-NEWBS' '40'.
IF pr_waers <> 'USD' OR wa_bsis_xx-waers <> 'USD'.
IF pr_waers EQ 'INR' AND wa_bsis_xx-waers EQ 'INR'.
PERFORM bdc_field USING 'RF05A-NEWKO' wa_bsis_xx-hkont.
ELSE.
PERFORM bdc_field USING 'RF05A-NEWKO' '1215000900'.
ENDIF.
ELSE.
PERFORM bdc_field USING 'RF05A-NEWKO' wa_bsis_xx-hkont.
ENDIF.
*-Amount and Bank reference
PERFORM bdc_dynpro USING 'SAPMF05A' '0300'.
PERFORM bdc_field USING 'BDC_CURSOR' 'BSEG-WRBTR'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ZK'.
*-Convert amount into USD
CLEAR l_wrbtr.
l_wrbtr = pr_oamt + pr_amt.
IF pr_waers <> 'USD' AND wa_bsis_xx-waers = 'USD'. " case3 EUR - USD
l_wrbtr = l_wrbtr * pr_kurs1.
l_wrbtr = ABS( l_wrbtr ).
ELSEIF pr_waers <> 'USD' AND wa_bsis_xx-waers = 'INR'. " case4 EUR - INR
l_wrbtr = l_wrbtr / pr_kurs2.
l_wrbtr = ABS( l_wrbtr ).
PERFORM convert_currency USING 'M' 'USD' pr_waers
CHANGING l_ukurs.
IF l_ukurs IS INITIAL.
MESSAGE i398(00) WITH text-i01 pr_waers space space.
EXIT.
ENDIF.
l_wrbtr = l_wrbtr * l_ukurs.
l_wrbtr = ABS( l_wrbtr ).
ELSEIF pr_waers = 'USD' AND wa_bsis_xx-waers = 'INR'. " case2 USD - INR
l_ukurs = 1 / pr_kurs2.
l_wrbtr = l_wrbtr / pr_kurs2.
l_wrbtr = ABS( l_wrbtr ).
ENDIF.
*-Get decimals places
CLEAR l_dec.
CALL FUNCTION 'FWOS_CURRENCY_DECIMALS_READ'
EXPORTING
i_currency = pr_waers
IMPORTING
e_decimals = l_dec.
IF l_dec EQ 0.
MOVE l_wrbtr TO l_xrbtr.
PERFORM bdc_field USING 'BSEG-WRBTR' l_xrbtr.
ELSE.
PERFORM bdc_field USING 'BSEG-WRBTR' l_wrbtr.
ENDIF.
PERFORM bdc_field USING 'BSEG-ZUONR' pr_zuonr.
CLEAR l_sgtxt.
CONCATENATE text-t01 pr_belnr INTO l_sgtxt
SEPARATED BY space.
PERFORM bdc_field USING 'BSEG-SGTXT' l_sgtxt.
SY-DATLO = pr_valut.
PERFORM bdc_field USING 'BSEG-VALUT' pr_valut.
*-Business Area
PERFORM bdc_dynpro USING 'SAPLKACB' '0002'.
PERFORM bdc_field USING 'BDC_CURSOR' 'COBL-GSBER'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ENTE'.
PERFORM bdc_field USING 'COBL-GSBER' wa_bseg_xx-gsber.
*-House bank
PERFORM bdc_dynpro USING 'SAPMF05A' '0330'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RF05A-NEWKO'.
PERFORM bdc_field USING 'BDC_OKCODE' '=SL'.
CLEAR l_xref1.
CONCATENATE pr_belnr pr_gjahr+2(2) INTO l_xref1.
PERFORM bdc_field USING 'BSEG-XREF1' l_xref1.
CLEAR l_dmbe2.
IF pr_waers <> 'USD' OR wa_bsis_xx-waers <> 'USD'.
l_dmbe2 = pr_oamt + pr_amt.
ELSE.
l_dmbe2 = ( ( wa_bseg_xx-dmbe2 * pr_oamt ) / wa_bseg_xx-dmbtr ) + ( pr_amt * pr_kurs2 ).
ENDIF.
PERFORM bdc_field USING 'BSEG-DMBE2' l_dmbe2.
PERFORM bdc_field USING 'BSEG-HBKID' wa_bseg_xx-hbkid.
*-clearing document
PERFORM bdc_dynpro USING 'SAPMF05A' '0710'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RF05A-XPOS1(03)'.
PERFORM bdc_field USING 'BDC_OKCODE' '=PA'.
PERFORM bdc_field USING 'RF05A-AGBUK' pr_bukrs.
PERFORM bdc_field USING 'RF05A-AGKON' w_kunag.
PERFORM bdc_field USING 'RF05A-AGKOA' 'D'.
PERFORM bdc_field USING 'RF05A-XNOPS' 'X'.
PERFORM bdc_field USING 'RF05A-XPOS1(03)' 'X'.
PERFORM bdc_dynpro USING 'SAPMF05A' '0731'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RF05A-SEL02(01)'.
PERFORM bdc_field USING 'BDC_OKCODE' '=PA'.
PERFORM bdc_field USING 'RF05A-SEL01(01)' pr_vbeln.
PERFORM bdc_field USING 'RF05A-SEL02(01)' pr_vbeln.
PERFORM bdc_dynpro USING 'SAPDF05X' '3100'.
PERFORM bdc_field USING 'BDC_OKCODE' '=AB'.
*
*
PERFORM bdc_dynpro USING 'SAPMF05A' '0700'.
PERFORM bdc_field USING 'BDC_OKCODE' '=BS'.
CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
EXPORTING
tcode = 'FB05'
mode_val = 'E'
update_val = 'S'
TABLES
using_tab = it_bdcdata
mess_tab = it_bdcmsg
EXCEPTIONS
call_transaction_denied = 1
tcode_invalid = 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.
ENDFORM. " create_document
************************************************************************
Form bdc_dynpro
************************************************************************
text
************************************************************************
-->PROGRAM
-->DYNPRO text
************************************************************************
FORM bdc_dynpro USING program TYPE bdc_prog
dynpro TYPE bdc_dynr.
it_bdcdata-program = program.
it_bdcdata-dynpro = dynpro.
it_bdcdata-dynbegin = 'X'.
APPEND it_bdcdata.
CLEAR it_bdcdata.
ENDFORM. " bdc_dynpro
************************************************************************
Form bdc_field
************************************************************************
-->FNAM Field Name
-->FVAL Field Value
************************************************************************
FORM bdc_field USING fnam TYPE fnam_____4
fval TYPE any.
it_bdcdata-fnam = fnam.
it_bdcdata-fval = fval.
WRITE fval TO it_bdcdata-fval LEFT-JUSTIFIED.
APPEND it_bdcdata.
CLEAR it_bdcdata.
ENDFORM. " bdc_field
&----
*& Form create_document_z5
&----
Create Accounting document
----
-->P_W_BELNR text
----
FORM create_document_z5 USING p_w_belnr TYPE belnr_d.
DATA : l_xblnr LIKE bkpf-xblnr,
l_sgtxt LIKE bseg-sgtxt,
l_xref1 LIKE bseg-xref1,
l_hkont LIKE bseg-hkont,
l_wrbtr LIKE bseg-wrbtr.
CLEAR : it_bdcdata, it_bdcmsg.
REFRESH : it_bdcdata, it_bdcmsg.
CONCATENATE p_w_belnr pr_bukrs pr_gjahr+2(2) INTO l_xblnr.
*-First Screen
PERFORM bdc_dynpro USING 'SAPMF05A' '0122'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RF05A-NEWKO'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_field USING 'BKPF-BLDAT' pr_bldat.
PERFORM bdc_field USING 'BKPF-BLART' 'Z5'.
PERFORM bdc_field USING 'BKPF-BUKRS' pr_bukrs.
PERFORM bdc_field USING 'BKPF-BUDAT' pr_budat.
IF wa_bsis_xx-waers EQ 'USD'.
PERFORM bdc_field USING 'BKPF-WAERS' 'USD'.
ELSEIF wa_bsis_xx-waers EQ 'INR'.
PERFORM bdc_field USING 'BKPF-WAERS' 'INR'.
PERFORM bdc_field USING 'BKPF-KURSF' pr_kurs2.
ENDIF.
PERFORM bdc_field USING 'BKPF-XBLNR' l_xblnr.
PERFORM bdc_field USING 'RF05A-XPOS1(02)' 'X'.
*-Line items and GL Account
PERFORM bdc_field USING 'RF05A-NEWBS' '40'.
SELECT wekon INTO l_hkont FROM t012k UP TO 1 ROWS
WHERE bukrs = pr_bukrs
AND hbkid = wa_bseg_xx-hbkid
AND waers = wa_bsis_xx-waers.
ENDSELECT.
IF sy-subrc = 0.
PERFORM bdc_field USING 'RF05A-NEWKO' l_hkont.
ENDIF.
*-Amount and Bank reference
PERFORM bdc_dynpro USING 'SAPMF05A' '0300'.
PERFORM bdc_field USING 'BDC_CURSOR' 'BSEG-WRBTR'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ZK'.
CLEAR l_wrbtr.
SELECT wrbtr INTO l_wrbtr FROM bseg UP TO 1 ROWS
WHERE bukrs = pr_bukrs
AND belnr = p_w_belnr
AND gjahr = pr_gjahr
AND bschl = '40'.
ENDSELECT.
*-Amount
l_wrbtr = pr_oamt.
IF wa_bsis_xx-waers EQ 'INR' AND pr_waers EQ 'USD'. "CASE 2 USD-INR
l_wrbtr = l_wrbtr * pr_kurs2 .
l_wrbtr = ABS( l_wrbtr ).
l_wrbtr = wa_bsis_xx-wrbtr.
*
*
ELSEIF wa_bsis_xx-waers EQ 'INR' AND pr_waers NE 'USD'. "CASE4 EUR - INR
l_wrbtr = wa_bsis_xx-wrbtr.
*
ELSEIF wa_bsis_xx-waers EQ 'USD' AND pr_waers NE 'USD'. "CASE3 EUR -USD
l_wrbtr = wa_bsis_xx-wrbtr.
*
ENDIF.
PERFORM bdc_field USING 'BSEG-WRBTR' l_wrbtr.
PERFORM bdc_field USING 'BSEG-ZUONR' pr_zuonr.
CLEAR l_sgtxt.
CONCATENATE text-t01 pr_belnr INTO l_sgtxt
SEPARATED BY space.
PERFORM bdc_field USING 'BSEG-SGTXT' l_sgtxt.
SY-DATLO = pr_valut.
PERFORM bdc_field USING 'BSEG-VALUT' pr_valut.
*-Business Area
PERFORM bdc_dynpro USING 'SAPLKACB' '0002'.
PERFORM bdc_field USING 'BDC_CURSOR' 'COBL-GSBER'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ENTE'.
PERFORM bdc_field USING 'COBL-GSBER' wa_bseg_xx-gsber.
*-House bank
PERFORM bdc_dynpro USING 'SAPMF05A' '0330'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RF05A-NEWKO'.
PERFORM bdc_field USING 'BDC_OKCODE' '=SL'.
CLEAR l_xref1.
CONCATENATE pr_belnr pr_gjahr+2(2) INTO l_xref1.
PERFORM bdc_field USING 'BSEG-XREF1' l_xref1.
PERFORM bdc_field USING 'BSEG-HBKID' wa_bseg_xx-hbkid.
*-clearing document
PERFORM bdc_dynpro USING 'SAPMF05A' '0710'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RF05A-XPOS1(03)'.
PERFORM bdc_field USING 'BDC_OKCODE' '=PA'.
PERFORM bdc_field USING 'RF05A-AGBUK' pr_bukrs.
PERFORM bdc_field USING 'RF05A-AGKON' '1215000900'.
PERFORM bdc_field USING 'RF05A-AGKOA' 'S'.
PERFORM bdc_field USING 'RF05A-XNOPS' 'X'.
PERFORM bdc_field USING 'RF05A-XPOS1(03)' 'X'.
PERFORM bdc_dynpro USING 'SAPMF05A' '0731'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RF05A-SEL02(01)'.
PERFORM bdc_field USING 'BDC_OKCODE' '=PA'.
PERFORM bdc_field USING 'RF05A-SEL01(01)' p_w_belnr.
PERFORM bdc_field USING 'RF05A-SEL02(01)' p_w_belnr.
PERFORM bdc_dynpro USING 'SAPDF05X' '3100'.
PERFORM bdc_field USING 'BDC_OKCODE' '=AB'.
PERFORM bdc_dynpro USING 'SAPMF05A' '0700'.
PERFORM bdc_field USING 'BDC_OKCODE' '=BS'.
*
PERFORM bdc_dynpro USING 'SAPMF05A' '0700'.
PERFORM bdc_field USING 'BDC_OKCODE' '=BU'.
CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
EXPORTING
tcode = 'FB05'
mode_val = 'E'
update_val = 'S'
TABLES
using_tab = it_bdcdata
mess_tab = it_bdcmsg
EXCEPTIONS
call_transaction_denied = 1
tcode_invalid = 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.
ENDFORM. " create_document_z5
&----
*& Form convert_currency
&----
convert_currency
----
-->P_W_BELNR text
----
FORM convert_currency USING p_type TYPE kurst_curr
p_fcurr TYPE fcurr_curr
p_tcurr TYPE tcurr_curr
CHANGING p_ukurs TYPE ukurs_curr.
DATA : l_gdatu LIKE tcurr-gdatu,
l_ukurs LIKE tcurr-ukurs,
l_type TYPE kurst_curr.
CALL FUNCTION 'CONVERSION_EXIT_INVDT_INPUT'
EXPORTING
input = pr_budat
IMPORTING
output = l_gdatu.
MOVE p_type TO l_type.
IF p_tcurr EQ 'EUR' OR p_fcurr EQ 'EUR'.
l_type = 'EURX'.
ENDIF.
CLEAR p_ukurs.
SELECT ukurs INTO p_ukurs UP TO 1 ROWS
FROM tcurr
WHERE kurst = l_type
AND fcurr = p_fcurr
AND tcurr = p_tcurr
AND gdatu LE l_gdatu.
ENDSELECT.
IF sy-subrc <> 0.
CLEAR l_ukurs.
SELECT ukurs INTO l_ukurs UP TO 1 ROWS
FROM tcurr
WHERE kurst = l_type
AND fcurr = p_tcurr
AND tcurr = p_fcurr
AND gdatu LE l_gdatu.
ENDSELECT.
IF sy-subrc = 0.
p_ukurs = 1 / l_ukurs.
ENDIF.
ENDIF.
IF p_ukurs < 0.
CLEAR l_ukurs.
l_ukurs = 1 / p_ukurs.
CLEAR p_ukurs.
MOVE l_ukurs TO p_ukurs.
ENDIF.
p_ukurs = ABS( p_ukurs ).
ENDFORM. "convert_currency
&----
*& Form CLEAR_ALL
&----
text
----
--> p1 text
<-- p2 text
----
FORM clear_all .
CLEAR: r_hbkid,
r_hbkid[],
r_hkont,
r_hkont[],
r_hbkid_b,
r_hbkid_b[],
w_belnr,
w_kunag,
wa_bsis_xx,
wa_bseg_xx,
it_t012,
it_t012[],
it_bnka,
it_bnka[],
it_bdcdata,
it_bdcdata[],
it_bdcmsg,
it_bdcmsg[],
w_flag.
ENDFORM. " CLEAR_ALL
*Any declarations for classes, methods and interfaces. *
*********************----
E N D O F A B A P *
*********************----
&----
*& Form field_lable
&----
text
----
-->P_LT_FTAB text
----
FORM field_lable USING p_lt_ftab TYPE table .
DATA : lwa_mapping TYPE dfies.
DATA : lw_tabname TYPE ddobjname .
DATA : lw_fieldname TYPE dfies-lfieldname .
REFRESH p_lt_ftab.
*--BLART
PERFORM get_field_info USING 'BSIS' 'BLART'
CHANGING lwa_mapping.
lwa_mapping-fieldname = 'F0001'.
lwa_mapping-position = 1.
lwa_mapping-offset = 0.
APPEND lwa_mapping TO p_lt_ftab.
*--BELNR
PERFORM get_field_info USING 'BSIS' 'BELNR'
CHANGING lwa_mapping.
lwa_mapping-fieldname = 'F0002'.
lwa_mapping-position = 2.
lwa_mapping-offset = 4.
APPEND lwa_mapping TO p_lt_ftab.
*--BUDAT
PERFORM get_field_info USING 'BSIS' 'BUDAT'
CHANGING lwa_mapping.
lwa_mapping-fieldname = 'F0003'.
lwa_mapping-position = 3.
lwa_mapping-offset = 24.
APPEND lwa_mapping TO p_lt_ftab.
*--ZFBDT
PERFORM get_field_info USING 'BSIS' 'ZFBDT'
CHANGING lwa_mapping.
lwa_mapping-fieldname = 'F0004'.
lwa_mapping-position = 4.
lwa_mapping-offset = 40.
APPEND lwa_mapping TO p_lt_ftab.
*--HKONT
PERFORM get_field_info USING 'BSEG' 'HKONT'
CHANGING lwa_mapping.
lwa_mapping-fieldname = 'F0005'.
lwa_mapping-position = 5.
lwa_mapping-offset = 56.
APPEND lwa_mapping TO p_lt_ftab.
*--HBKID
PERFORM get_field_info USING 'BSEG' 'HBKID'
CHANGING lwa_mapping.
lwa_mapping-fieldname = 'F0006'.
lwa_mapping-position = 6.
lwa_mapping-offset = 76.
APPEND lwa_mapping TO p_lt_ftab.
*--XBLNR
PERFORM get_field_info USING 'BKPF' 'XBLNR'
CHANGING lwa_mapping.
lwa_mapping-fieldname = 'F0007'.
lwa_mapping-position = 7.
lwa_mapping-offset = 86.
lwa_mapping-reptext = text-h07.
lwa_mapping-fieldtext = text-h07.
lwa_mapping-scrtext_s = text-h07.
lwa_mapping-scrtext_m = text-h07.
lwa_mapping-scrtext_l = text-h07.
APPEND lwa_mapping TO p_lt_ftab.
*--WAERK
PERFORM get_field_info USING 'VBRK' 'WAERK'
CHANGING lwa_mapping.
lwa_mapping-fieldname = 'F0008'.
lwa_mapping-position = 8.
lwa_mapping-offset = 118.
lwa_mapping-reptext = text-h08.
lwa_mapping-fieldtext = text-h08.
lwa_mapping-scrtext_s = text-h08.
lwa_mapping-scrtext_m = text-h08.
lwa_mapping-scrtext_l = text-h08.
APPEND lwa_mapping TO p_lt_ftab.
*--KUNAG
PERFORM get_field_info USING 'VBRK' 'KUNAG'
CHANGING lwa_mapping.
lwa_mapping-fieldname = 'F0009'.
lwa_mapping-position = 9.
lwa_mapping-offset = 128.
APPEND lwa_mapping TO p_lt_ftab.
*--NAME1
PERFORM get_field_info USING 'KNA1' 'NAME1'
CHANGING lwa_mapping.
lwa_mapping-fieldname = 'F0010'.
lwa_mapping-position = 10.
lwa_mapping-offset = 148.
lwa_mapping-reptext = text-h10.
lwa_mapping-fieldtext = text-h10.
lwa_mapping-scrtext_s = text-h10.
lwa_mapping-scrtext_m = text-h10.
lwa_mapping-scrtext_l = text-h10.
APPEND lwa_mapping TO p_lt_ftab.
*--WAERS
PERFORM get_field_info USING 'BSIS' 'WAERS'
CHANGING lwa_mapping.
lwa_mapping-fieldname = 'F0011'.
lwa_mapping-position = 11.
lwa_mapping-offset = 218.
APPEND lwa_mapping TO p_lt_ftab.
*--WRBTR
PERFORM get_field_info USING 'BSEG' 'WRBTR'
CHANGING lwa_mapping.
lwa_mapping-fieldname = 'F0012'.
lwa_mapping-position = 12.
lwa_mapping-offset = 228.
lwa_mapping-reptext = text-h12.
lwa_mapping-fieldtext = text-h12.
lwa_mapping-scrtext_s = text-h12.
lwa_mapping-scrtext_m = text-h12.
lwa_mapping-scrtext_l = text-h12.
APPEND lwa_mapping TO p_lt_ftab.
*--WRBTR
PERFORM get_field_info USING 'BSEG' 'WRBTR'
CHANGING lwa_mapping.
lwa_mapping-fieldname = 'F0013'.
lwa_mapping-position = 13.
lwa_mapping-offset = 235.
lwa_mapping-reptext = text-h13.
lwa_mapping-fieldtext = text-h13.
lwa_mapping-scrtext_s = text-h13.
lwa_mapping-scrtext_m = text-h13.
lwa_mapping-scrtext_l = text-h13.
APPEND lwa_mapping TO p_lt_ftab.
PERFORM get_field_info USING 'BSIS' 'ZUONR'
CHANGING lwa_mapping.
lwa_mapping-fieldname = 'F0014'.
lwa_mapping-position = 14.
lwa_mapping-offset = 247.
lwa_mapping-reptext = text-h14.
lwa_mapping-fieldtext = text-h14.
lwa_mapping-scrtext_s = text-h14.
lwa_mapping-scrtext_m = text-h14.
lwa_mapping-scrtext_l = text-h14.
APPEND lwa_mapping TO p_lt_ftab.
ENDFORM. " field_lable
&----
*& Form get_field_info
&----
text
----
-->P_3773 text
-->P_3774 text
<--P_LWA_MAPPING text
----
FORM get_field_info USING value(p_tabname)
value(p_fieldname)
CHANGING p_lwa_mapping.
Get Field attributes
CLEAR p_lwa_mapping.
CALL FUNCTION 'DDIF_FIELDINFO_GET'
EXPORTING
tabname = p_tabname
lfieldname = p_fieldname
IMPORTING
dfies_wa = p_lwa_mapping
EXCEPTIONS
not_found = 1
internal_error = 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.
ENDFORM. " get_field_info
‎2007 Sep 18 12:06 PM
‎2007 Sep 18 12:31 PM
hi
Witout databse tables made by you its not possible to debug the program.
you need to use debugger that will clear you the problem.
Aditya
‎2007 Sep 18 1:06 PM