You are on page 1of 8

*&---------------------------------------------------------------------*

*&
Form FRM_KONDI_WERT_602
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
FORM frm_kondi_wert_602.
DATA: zykm
LIKE ykmeng,
laf_komv
TYPE STANDARD TABLE OF komv WITH HEADER LINE ,
lzt_komv
TYPE STANDARD TABLE OF komv WITH HEADER LINE ,
lzs_komv
LIKE LINE OF lzt_komv,
lsf_komv
LIKE LINE OF laf_komv,
zkar_kbetr
LIKE komv-kbetr,
zkalf_kwert
LIKE komv-kwert,
lt_ekpo
TYPE TABLE OF ekpo WITH HEADER LINE,
lv_saswaers
LIKE ekko-waers ,
ls_vbep
TYPE vbep,
lt_rbkp
TYPE TABLE OF rbkp WITH HEADER LINE,
lv_fark
LIKE rbkp-rmwwr,
v_line
TYPE i,
y_line
TYPE i,
gv_log_handle TYPE balloghndl.
DATA: lv_exc_rate
TYPE p DECIMALS 5.
DATA: lv_exc_rate_tmp TYPE p DECIMALS 5.
DATA: BEGIN OF lt_ekbe OCCURS 0,
ebeln LIKE ekbe-ebeln,
ebelp LIKE ekbe-ebelp,
wrbtr LIKE ekbe-wrbtr,
hswae LIKE ekbe-hswae,
menge LIKE ekbe-menge,
bldat LIKE ekbe-bldat,
bamng LIKE ekbe-bamng,
belnr LIKE ekbe-belnr,
waers LIKE ekbe-waers,
vgabe LIKE ekbe-vgabe,
END OF lt_ekbe.
DATA: lv_adim1
lv_adim2
lv_adim3
lv_menge_top
satir
lv_wrbtr_top
DATA: lv_rate
lv_netpr
lv_netpr_temp

TYPE
LIKE
LIKE
LIKE
TYPE
LIKE
LIKE
LIKE
LIKE

p DECIMALS 5 ,
ekbe-wrbtr,
ekbe-wrbtr,
ekbe-menge,
i,
ekbe-wrbtr.
vbak-kurst,
ekpo-netpr,
ekpo-netpr.

IF sy-tcode EQ 'VA01' OR sy-tcode EQ 'VF01' OR


sy-tcode EQ 'VA02' OR sy-tcode EQ 'VA05' .
zykm = ykmeng / 1000 .
REFRESH: lzt_komv,laf_komv,lt_ekpo.
lzt_komv[] = laf_komv[] = xkomv[].
READ TABLE lzt_komv WITH KEY kschl = 'ZKAR' .
zkar_kbetr = ( lzt_komv-kbetr * 10 ) / 1000 .

"modified Yavuz
CLEAR: ls_vbep.
SELECT SINGLE *
WHERE vbeln =
AND posnr =

Kaya tarafndan dzenlendi.


FROM vbep INTO ls_vbep
komp-aubel
komp-aupos.

CHECK ls_vbep-banfn IS NOT INITIAL.


SELECT * FROM ekpo UP TO 100 ROWS INTO TABLE lt_ekpo
WHERE loekz = space
AND banfn = ls_vbep-banfn
AND bnfpo = ls_vbep-bnfpo
ORDER BY aedat DESCENDING.
v_line = lines( lt_ekpo ).
IF v_line > 1 .
*-BEG CHANGE 02.01.2013 14:52:18 Emrah Tolgay
**
& Nolu kalemde birden ok SAS almtr!
*
MESSAGE i052(zsp_dm) WITH xkomv-kposn.
PERFORM log_ekle USING 'ZSP_DM' 'W' '052'
xkomv-kposn '' '' '' gv_log_handle.
*-END CHANGE 02.01.2013 14:52:18
ENDIF.
CLEAR: lv_saswaers.

IF lt_ekpo[] IS NOT INITIAL .


SELECT ebeln ebelp wrbtr hswae menge bldat bamng belnr waers
INTO CORRESPONDING FIELDS OF TABLE lt_ekbe
FROM ekbe FOR ALL ENTRIES IN lt_ekpo
WHERE ebeln EQ lt_ekpo-ebeln
AND ebelp EQ lt_ekpo-ebelp
AND gjahr EQ komk-fkdat(4)
AND vgabe EQ 'P' .

y_line = lines( lt_ekbe ).


IF y_line > 1 AND xkomv-kschl EQ 'ZALF' .
*-BEG CHANGE 02.01.2013 14:53:27 Emrah Tolgay
**
& Nolu kalemde birden ok MIR7 var, dikkate aln!
*
MESSAGE i053(zsp_dm) WITH xkomv-kposn.
PERFORM log_ekle USING 'ZSP_DM' 'W' '053'
xkomv-kposn '' '' '' gv_log_handle.
*-END CHANGE 02.01.2013 14:53:27
ENDIF.

IF sy-subrc <> 0.
CLEAR lt_ekbe.
SELECT ebeln ebelp wrbtr hswae menge bldat bamng
belnr waers vgabe
INTO CORRESPONDING FIELDS OF TABLE lt_ekbe FROM ekbe
FOR ALL ENTRIES IN lt_ekpo
WHERE ebeln EQ lt_ekpo-ebeln
AND ebelp EQ lt_ekpo-ebelp
AND gjahr EQ komk-fkdat(4)
AND vgabe EQ '2' .
ENDIF.

*-BEG

*-END

IF sy-subrc <> 0.
xkomv-kbetr = '0' .
xkomv-kwert = '0' .
MODIFY xkomv .
ELSE .
"begin-----BS 06.11.2012 15:18:11
LOOP AT lt_ekbe.
SELECT belnr rmwwr beznk wmwst1 FROM rbkp
INTO CORRESPONDING FIELDS OF TABLE lt_rbkp
WHERE belnr EQ lt_ekbe-belnr
AND stblg = space .
AND gjahr EQ komk-fkdat(4).
IF sy-subrc NE 0.
DELETE lt_ekbe.
ELSE.
LOOP AT lt_rbkp.
IF lt_ekbe-vgabe EQ '2' .
CLEAR lt_rbkp-beznk.
ENDIF.
lv_fark = lt_rbkp-rmwwr ( lt_rbkp-beznk + lt_rbkp-wmwst1 ).
IF lv_fark EQ 0.
lv_adim1 = 0.
ELSE.
lv_adim1 = lt_rbkp-beznk * 100000 / lv_fark.
ENDIF.
lv_adim2 = lt_ekbe-wrbtr * lv_adim1 / 100000.
lv_adim3 = lv_adim2 + lt_ekbe-wrbtr.
lt_ekbe-wrbtr = lv_adim3.
lv_wrbtr_top = lv_wrbtr_top + lv_adim3 .
10.01.2013 17:24:17 Emrah Tolgay
CLEAR lt_ekpo.
READ TABLE lt_ekpo WITH KEY ebeln = lt_ekbe-ebeln
ebelp = lt_ekbe-ebelp.
IF lt_ekpo-meins NE komp-vrkme.
PERFORM convert_unit USING komp-matnr lt_ekpo-meins
komp-vrkme lt_ekbe-menge
CHANGING lt_ekbe-menge.
ENDIF.
INSERT 10.01.2013 17:24:17
lv_menge_top = lv_menge_top + lt_ekbe-menge.
MODIFY lt_ekbe.
ENDLOOP.
ENDIF.
ENDLOOP.
DESCRIBE TABLE lt_ekbe LINES satir.
"end------INSERT

IF lt_ekbe[] IS INITIAL .
xkomv-kbetr = '0' .
xkomv-kwert = '0' .
MODIFY xkomv .
ENDIF.
LOOP AT lt_ekpo.

CLEAR lt_ekbe.
READ TABLE lt_ekbe WITH KEY ebeln = lt_ekpo-ebeln
ebelp = lt_ekpo-ebelp.
SELECT SINGLE waers FROM ekko INTO lv_saswaers
WHERE ebeln EQ lt_ekpo-ebeln.
IF lt_ekbe-waers IS INITIAL .
lt_ekbe-waers = komk-waerk .
ENDIF.
IF lt_ekbe-bldat IS INITIAL .
lt_ekbe-bldat = komk-fkdat .
ENDIF.
IF komk-waerk NE lt_ekbe-waers AND xkomv-kschl EQ 'ZALF' .
CLEAR: lv_rate.
IF komk-kurst IS INITIAL.
SELECT SINGLE kurst FROM knvv INTO lv_rate
WHERE kunnr EQ komk-kunnr AND
vkorg EQ komk-vkorg AND
vtweg EQ komk-vtweg AND
spart EQ komk-spart.
IF lv_rate IS INITIAL .
lv_rate = 'M'.
ENDIF.
ENDIF.
IF satir > 1 .
LOOP AT lt_ekbe .
PERFORM convert_to_local USING lt_ekbe-bldat
lt_ekbe-wrbtr lt_ekbe-waers komk-waerk lv_rate
CHANGING lv_exc_rate lv_netpr_temp.
lv_netpr = lv_netpr + lv_netpr_temp.
ENDLOOP.
ELSE.
PERFORM convert_to_local USING lt_ekbe-bldat lv_wrbtr_top
lt_ekbe-waers komk-waerk lv_rate
CHANGING lv_exc_rate lv_netpr.
ENDIF.
xkomv-kbetr = 1000 * lv_netpr / lv_menge_top.
xkomv-kwert = ( komp-mgame * ( ( lv_netpr * 1000000 /
lv_menge_top ) ) ) / 1000000.
xkwert = ( komp-mgame * ( ( lv_netpr * 1000000 /
lv_menge_top ) ) ) / 1000000.
ELSEIF komk-waerk EQ lt_ekbe-waers AND xkomv-kschl EQ 'ZALF'.
xkomv-kbetr = 1000 * lv_wrbtr_top / lv_menge_top .
xkomv-kwert = ( komp-mgame * ( ( lv_wrbtr_top * 1000000 /
lv_menge_top ) ) ) / 1000000.
xkwert = ( komp-mgame * ( ( lv_wrbtr_top * 1000000 /
lv_menge_top ) ) ) / 1000000.
ENDIF.
IF komk-waerk NE lt_ekbe-waers AND xkomv-kschl EQ 'ZKRM' .
CLEAR: lv_rate.

IF komk-kurst IS INITIAL.
SELECT SINGLE kurst FROM knvv INTO lv_rate
WHERE kunnr EQ komk-kunnr AND
vkorg EQ komk-vkorg AND
vtweg EQ komk-vtweg AND
spart EQ komk-spart.
IF lv_rate IS INITIAL .
lv_rate = 'M'.
ENDIF.
ENDIF.
IF satir > 1 .
LOOP AT lt_ekbe .
PERFORM convert_to_local USING lt_ekbe-bldat
lt_ekbe-wrbtr lt_ekbe-waers komk-waerk lv_rate
CHANGING lv_exc_rate lv_netpr_temp.
lv_netpr = lv_netpr + lv_netpr_temp.
ENDLOOP.
ELSE.
PERFORM convert_to_local USING lt_ekbe-bldat lv_wrbtr_top
lt_ekbe-waers komk-waerk lv_rate
CHANGING lv_exc_rate_tmp lv_netpr.
ENDIF.

*
*
*
*
*

*
*
*
*
*

READ TABLE laf_komv WITH KEY kschl = 'ZALF' .


IF sy-subrc = 0.
zkalf_kwert = laf_komv-kwert .
xkomv-kbetr = ( ( zkalf_kwert * 1000 / zykm )
* ( 100 + zkar_kbetr ) / 100 ) / 1000 .
xkomv-kwert = ( xkomv-kbetr * zykm ) / 1 .
xkwert = xkomv-kwert.
zkalf_kwert = laf_komv-kwert .
xkomv-kbetr = ( ( zkalf_kwert * 1000 / komp-mgame )
* ( 100 + zkar_kbetr ) / 100 )." / 1000 .
xkomv-kwert = ( xkomv-kbetr * komp-mgame ) / 1000 .
xkwert = xkomv-kwert.
ENDIF.
ELSEIF komk-waerk EQ lt_ekbe-waers AND xkomv-kschl EQ 'ZKRM' .
READ TABLE laf_komv WITH KEY kschl = 'ZALF' .

zkalf_kwert = laf_komv-kwert .
xkomv-kbetr = ( ( zkalf_kwert * 1000 / zykm )
* ( 100 + zkar_kbetr ) / 100 ) / 1000 .
xkomv-kwert = ( xkomv-kbetr * zykm ) / 1 .
xkwert = xkomv-kwert .
zkalf_kwert = laf_komv-kwert .
xkomv-kbetr = ( ( zkalf_kwert * 1000 / komp-mgame )
* ( 100 + zkar_kbetr ) / 100 ) ."/ 1000 .
xkomv-kwert = ( xkomv-kbetr * komp-mgame ) / 1000 .
xkwert = xkomv-kwert .
ENDIF.
*-BEG INSERT 04.10.2013 17:11:17 Emrah Tolgay
*
EKPO tablosunda bir kere dnmemiz yeterli.
EXIT.
*-END INSERT 04.10.2013 17:11:17
ENDLOOP.
ENDIF.

*-BEG CHANGE 31.01.2012 22:55:04 Emrah Tolgay


* MODIFY xkomv.
IF sy-subrc EQ 0.
MODIFY xkomv.
ENDIF.
ENDIF.
*-END CHANGE 31.01.2012 22:55:04
*-BEG INSERT 11.02.2014 15:45:11 Emrah Tolgay
ELSEIF sy-tcode EQ 'VF02'.
*
VF02'de fatura deiiklii yapnca alternatif birim ile allyor
*
ise toplam tutar yanl getiriyordu. O yzden toplam tekrar
*
hesapladk.
IF xkomv-kschl EQ 'ZKRM' OR xkomv-kschl EQ 'ZALF'.
xkomv-kwert = ( xkomv-kbetr * komp-mgame ) / 1000 .
xkwert = xkomv-kwert .
MODIFY xkomv.
ENDIF.
*-END INSERT 11.02.2014 15:45:11
ENDIF.
" Yavuz Kaya tarafndan dzenlendi.
ENDFORM.
"FRM_KONDI_WERT_602
*&---------------------------------------------------------------------*
*&
Form LOG_YARAT
*&---------------------------------------------------------------------*
FORM log_yarat USING p_handle.
DATA ls_log TYPE bal_s_log.
CLEAR p_handle.
* nceden log yaratlmsa tekrar yaratmayalm.
IMPORT p_handle FROM MEMORY ID 'ZZ_LOG' .
CHECK p_handle IS INITIAL.
ls_log-alprog
ls_log-aluser
ls_log-aldate
ls_log-altime

=
=
=
=

sy-repid.
sy-uname.
sy-datum.
sy-uzeit.

CALL FUNCTION 'BAL_LOG_CREATE'


EXPORTING
i_s_log
= ls_log
IMPORTING
e_log_handle
= p_handle
EXCEPTIONS
log_header_inconsistent = 1
OTHERS
= 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* Log belge kaydedilirken MV45AFZZ'de gsterilecek.
EXPORT p_handle TO MEMORY ID 'ZZ_LOG'.
ENDFORM.
"LOG_YARAT
*&---------------------------------------------------------------------*

*&
Form LOG_EKLE
*&---------------------------------------------------------------------*
FORM log_ekle USING ip_msgid ip_msgty ip_msgno ip_msgv1 ip_msgv2
ip_msgv3 ip_msgv4 p_handle.
DATA ls_msg TYPE bal_s_msg.
PERFORM log_yarat USING p_handle.
CLEAR ls_msg.
ls_msg-msgid
ls_msg-msgty
ls_msg-msgno
ls_msg-msgv1
ls_msg-msgv2
ls_msg-msgv3
ls_msg-msgv4

=
=
=
=
=
=
=

ip_msgid.
ip_msgty.
ip_msgno.
ip_msgv1.
ip_msgv2.
ip_msgv3.
ip_msgv4.

CALL FUNCTION 'BAL_LOG_MSG_ADD'


EXPORTING
i_log_handle
= p_handle
i_s_msg
= ls_msg
EXCEPTIONS
log_not_found
= 1
msg_inconsistent = 2
log_is_full
= 3
OTHERS
= 4.
ENDFORM.
"LOG_EKLE
*&---------------------------------------------------------------------*
*&
Form CONVERT_TO_LOCAL
*&---------------------------------------------------------------------*
FORM convert_to_local USING p_bldat p_foreign p_frwcrr p_lccrr p_curtp
CHANGING p_rate p_local.
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
date
= p_bldat
foreign_amount
= p_foreign
foreign_currency = p_frwcrr
local_currency
= p_lccrr
type_of_rate
= p_curtp
IMPORTING
exchange_rate
= p_rate
local_amount
= p_local
EXCEPTIONS
no_rate_found
= 1
overflow
= 2
no_factors_found = 3
no_spread_found = 4
derived_2_times = 5
OTHERS
= 6.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

p_rate = p_rate * -1.


ENDFORM.
"CONVERT_TO_LOCAL
*&---------------------------------------------------------------------*
*&
Form CONVERT_UNIT
*&---------------------------------------------------------------------*
FORM convert_unit USING p_matnr p_in_meins p_out_meins p_in_menge
CHANGING p_out_menge.
CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT'
EXPORTING
i_matnr
= p_matnr
i_in_me
= p_in_meins
i_out_me
= p_out_meins
i_menge
= p_in_menge
IMPORTING
e_menge
= p_out_menge
EXCEPTIONS
error_in_application = 1
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.

"CONVERT_UNIT

You might also like