ME2DP 创建预付款申请增强/F-47 增强

  • 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.

猜你喜欢

转载自blog.csdn.net/weixin_55593130/article/details/114252482