-
ME2DP 创建预付款申请 增强CHECK
BAPI:FPDP_DOWN_PAYMENTS_SUM
方法:IF_EX_DP_CHECK~DPSUM_CHECK
代码如下:
DATA: gs_ekko TYPE ekko,
gt_ekpo TYPE TABLE OF ekpo,
gs_ekpo TYPE ekpo,
gt_dppos TYPE TABLE OF fpdp_s_dppos_alv,
gs_dppos TYPE fpdp_s_dppos_alv.
DATA:lv_flg(1),
lv_kbetr TYPE konp-kbetr,
lv_hsj TYPE ekpo-netwr,
lv_shuilv TYPE konp-kbetr,
lv_dpamt TYPE wrbtr,
lv_chayi TYPE wrbtr,
lt_messages TYPE bapiret2,
lv_str_chayi TYPE char20,
lt_ekbe TYPE STANDARD TABLE OF ekbe,
ls_ekbe TYPE ekbe,
lt_ekbe_1 TYPE STANDARD TABLE OF ekbe
.
"开关增强函数
CALL FUNCTION 'ZUSER_EXIT'
EXPORTING
zxh = '0090'
IMPORTING
zbs = lv_flg.
IF lv_flg IS INITIAL.
gs_ekko = i_control->t_ekko.
gt_ekpo = i_control->t_ekpo.
gt_dppos = i_control->t_dppos.
FIELD-SYMBOLS :<gs_bseg> TYPE bseg.
ASSIGN: ('(FPDP_START)BSEG') TO <gs_bseg>.
READ TABLE gt_ekpo INTO gs_ekpo INDEX 1.
IF sy-subrc = 0.
SELECT SINGLE b~kbetr
INTO lv_kbetr
FROM a003 AS a
INNER JOIN konp AS b
ON a~knumh = b~knumh
WHERE a~mwskz = gs_ekpo-mwskz
AND a~aland = gs_ekko-lands
AND a~kappl = 'TX'
AND a~kschl = 'MWVS'.
lv_shuilv = lv_kbetr / 1000. "税率
lv_hsj = gs_ekpo-netwr * ( 1 + lv_shuilv ). "含税价
"取累计预付款
SELECT ebeln ebelp wrbtr INTO CORRESPONDING FIELDS OF TABLE lt_ekbe
FROM ekbe
WHERE ebeln = gs_ekpo-ebeln
AND ebelp = gs_ekpo-ebelp
AND vgabe = 'A'.
LOOP AT lt_ekbe INTO ls_ekbe.
COLLECT ls_ekbe INTO lt_ekbe_1.
CLEAR: ls_ekbe.
ENDLOOP.
"当前预付款金额
READ TABLE gt_dppos INTO gs_dppos WITH KEY ebelp = gs_ekpo-ebelp.
IF sy-subrc = 0.
lv_dpamt = gs_dppos-dpamt.
CLEAR: gs_dppos.
ENDIF.
READ TABLE lt_ekbe_1 INTO ls_ekbe INDEX 1.
CLEAR:lt_messages,lv_str_chayi.
DELETE et_messages WHERE type = 'E' AND id = '00'.
"当前预付款金额+累计预付款>含税价,则报错
lv_chayi = lv_dpamt + ls_ekbe-wrbtr - lv_hsj.
IF lv_chayi > 0.
lt_messages-type = 'E'.
lt_messages-id = '00'.
lt_messages-number = '001'.
lv_str_chayi = lv_chayi.
CONDENSE lv_str_chayi NO-GAPS.
CONCATENATE '订单' gs_ekpo-ebeln '行' gs_ekpo-ebelp '预付款金额已超出' lv_str_chayi
INTO lt_messages-message_v1.
APPEND lt_messages TO et_messages.
ENDIF.
ENDIF.
ENDIF.