SAP 采购订单计划行 交货日期 增强赋值

IF_EX_ME_PROCESS_PO_CUST~PROCESS_SCHEDULE

DATA: ls_poitem   TYPE mepoitem.
DATA: ls_jhh   TYPE meposchedule.
DATA: ls_poitemc TYPE REF TO if_purchase_order_item_mm.
DATA: lto_jhh TYPE purchase_order_schedules.
DATA: jhh_obj TYPE purchase_order_schedule.
DATA: ls_jhh2 TYPE meposchedule.
DATA: is_persistent TYPE mmpur_bool.
DATA: lt_eket TYPE TABLE OF eket.
DATA: ls_eket TYPE eket.
DATA: lv_flag.

***计划行拆分行时,新
行交期不用带出PR原始交期,参考被拆分行交期 20230608-yuchengyi-begin
IF is_persistent = ‘’ AND ( sy-tcode = ‘ME23N’ OR sy-tcode = ‘ME22N’). "新增计划行
REFRESH lt_eket.
SELECT * INTO TABLE lt_eket FROM eket WHERE ebeln = ls_jhh-ebeln AND ebelp = ls_jhh-ebelp.
IF sy-subrc = 0.

    CALL METHOD ls_poitemc->get_schedules
      RECEIVING
        re_schedules = lto_jhh.

    CLEAR lv_flag.
    LOOP AT lto_jhh INTO jhh_obj.
      CLEAR:ls_jhh2.
      ls_jhh2 = jhh_obj-schedule->get_data( ).

      IF ls_jhh2-etenr <> ls_jhh-etenr. "待保存eket缓存表循环行 <> 当前新增计划行
        READ TABLE lt_eket INTO ls_eket WITH KEY ebeln = ls_jhh2-ebeln
                                                 ebelp = ls_jhh2-ebelp
                                                 etenr = ls_jhh2-etenr.
        IF sy-subrc = 0. "待保存eket缓存表循环行在eket表存在,说明为当前已存在计划行
          IF ls_jhh2-menge + ls_jhh-menge = ls_eket-menge.  "待保存eket缓存表循环行数量 + 当前新增计划行数量 = 当前eket表对应计划行的数量
            ls_jhh-eindt = ls_eket-eindt.
            ls_jhh-eeind = ls_eket-eindt.
            im_schedule->set_data( ls_jhh ).
            lv_flag = 'X'.
            EXIT.
          ENDIF.
        ENDIF.
      ENDIF.
    ENDLOOP.

    IF lv_flag = ''. "放宽条件,不用数量相等
      LOOP AT lto_jhh INTO jhh_obj.
        CLEAR:ls_jhh2.
        ls_jhh2 = jhh_obj-schedule->get_data( ).

        IF ls_jhh2-etenr <> ls_jhh-etenr. "待保存eket缓存表循环行 <> 当前新增计划行
          READ TABLE lt_eket INTO ls_eket WITH KEY ebeln = ls_jhh2-ebeln
                                                   ebelp = ls_jhh2-ebelp
                                                   etenr = ls_jhh2-etenr.
          IF sy-subrc = 0. "待保存eket缓存表循环行在eket表存在,说明为当前已存在计划行
            IF ls_jhh2-menge <> ls_eket-menge.  "待保存eket缓存表循环行数量 <> 当前eket表对应计划行的数量 说明次行被拆分
              ls_jhh-eindt = ls_eket-eindt.
              ls_jhh-eeind = ls_eket-eindt.
              im_schedule->set_data( ls_jhh ).
              EXIT.
            ENDIF.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDIF.

  ENDIF.
ENDIF.

***计划行拆分行时,新行交期不用带出PR原始交期,参考被拆分行交期 20230608-yuchengyi-begin

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值