【EWM】外向交货单过账

4 篇文章 0 订阅
 

FUNCTION ZEWM_FM_POST_DLV.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  TABLES
*"      IT_DLV STRUCTURE  /SCWM/DLV_DOCID_ITEM_STR
*"      ET_RETURN STRUCTURE  BAPIRET2 OPTIONAL
*"  EXCEPTIONS
*"      FAILED
*"----------------------------------------------------------------------
  TYPES:
    BEGIN OF TY_DOCID,  "交货单信息
      DOCID  TYPE /SCDL/DB_PROCH_O-DOCID,   "文档标识
      ITEMID TYPE /SCDL/DB_PROCI_O-ITEMID,  "项目标识
      DOCCAT TYPE /SCDL/DB_PROCH_O-DOCCAT,  "凭证类别
      STATUS_GI TYPE /SCDL/DB_PROCI_O-STATUS_GI,
    END OF TY_DOCID.

  DATA: BEGIN OF LT_REFDOC OCCURS 0,
          REFDOCNO            TYPE /SCDL/DB_REFDOC-REFDOCNO,
          DOCID               TYPE /SCDL/DB_REFDOC-DOCID,
        END OF LT_REFDOC.

  DATA: LO_MESSAGE            TYPE REF TO /SCDL/CL_DM_MESSAGE,
        LT_MESSAGE            TYPE /SCDL/DM_MESSAGE_TAB,
        LT_RCODE              TYPE /SCDL/T_SP_RETURN_CODE,           "#EC NEEDED
        LV_REJECTED           TYPE BOOLE_D.                           "#EC NEEDED
  DATA: LO_DLV_SAVE           TYPE REF TO /SCWM/CL_DLV_MANAGEMENT_PRD.
  DATA: LO_DLV                TYPE REF TO /SCDL/CL_SP_PRD_INB.
  DATA: LT_DLV                TYPE /SCWM/DLV_DOCID_ITEM_TAB.
  DATA: LT_K_HEAD             TYPE /SCDL/T_SP_K_HEAD.

  FIELD-SYMBOLS: <LS_REFDOC>  LIKE LINE OF LT_REFDOC,
                 <LS_DLV>     LIKE LINE OF LT_DLV,
                 <LS_K_HEAD>  LIKE LINE OF LT_K_HEAD,
                 <LS_MESSAGE> LIKE LINE OF LT_MESSAGE.

  DATA:          LS_MESSAGE   TYPE /SCDL/DM_MESSAGE_STR,
                 LV_INDEX     TYPE I,
                 LV_TXT1      TYPE CHAR100.
  DATA:
    LS_RETURN TYPE BAPIRET2.
  DATA:
    LV_TABIX   TYPE SY-TABIX,
    LT_DOCID  TYPE STANDARD TABLE OF TY_DOCID, "交货单
    LS_DOCID  TYPE TY_DOCID.



  FIELD-SYMBOLS:
    <LV_TEXT>      TYPE CHAR100,
    <LS_CALLSTACK> TYPE ABAP_CALLSTACK_LINE.

  CHECK IT_DLV[] IS NOT INITIAL.
  LT_DLV[] = IT_DLV[].

  WAIT UP TO 2 SECONDS. "解决ERP多步骤调用锁

  "获取交货单信息
  REFRESH LT_DOCID.
  SELECT
      H~DOCID     "文档标识
      I~ITEMID   "项目标识
      H~DOCCAT   "凭证类别
      I~STATUS_GI
    INTO CORRESPONDING FIELDS OF TABLE LT_DOCID
    FROM /SCDL/DB_PROCH_O AS H
    JOIN /SCDL/DB_PROCI_O AS I ON I~DOCID = H~DOCID
    JOIN BUT000 AS B ON B~PARTNER_GUID = H~PARTNERTO_ID
     FOR ALL ENTRIES IN LT_DLV
   WHERE I~DOCID = LT_DLV-DOCID.
  SORT LT_DOCID.
  "过滤行项目全过账的交货单
  LOOP AT LT_DLV ASSIGNING FIELD-SYMBOL(<LFS_DLV>).
    LV_TABIX = SY-TABIX.
    LOOP AT LT_DOCID INTO LS_DOCID
      WHERE DOCID = <LFS_DLV>-DOCID
        AND STATUS_GI NE '9'. "不等于过账状态
      EXIT.
    ENDLOOP.
    IF SY-SUBRC = 0.
      CONTINUE.
    ELSE.
      DELETE LT_DLV INDEX LV_TABIX.  "行项目全过账的交货单 过滤 不过账
    ENDIF.
  ENDLOOP.




  IF LO_DLV IS NOT BOUND.
    CREATE OBJECT LO_DLV .
  ENDIF.

  LO_DLV->LOCK(
    EXPORTING INKEYS       = LT_K_HEAD
              LOCKMODE     = /SCDL/IF_SP1_LOCKING=>SC_EXCLUSIVE_LOCK
              ASPECT       = /SCDL/IF_SP_C=>SC_ASP_HEAD
    IMPORTING REJECTED     = LV_REJECTED
              RETURN_CODES = LT_RCODE ).
  IF LT_RCODE[] IS NOT INITIAL.
    READ TABLE LT_RCODE TRANSPORTING NO FIELDS WITH KEY FAILED = ABAP_TRUE.
    IF SY-SUBRC = 0.
      MESSAGE E000(SU) WITH TEXT-E01  "锁定外向交货单失败
        RAISING FAILED.
    ENDIF.
  ENDIF.

  /SCWM/CL_GOODS_MOVEMENT=>POST_DLV(
    EXPORTING
      IT_DLV      = LT_DLV
      IV_GMCAT    = /SCWM/IF_DOCFLOW_C=>SC_GI
    IMPORTING
       EO_MESSAGE = LO_MESSAGE ).

  REFRESH LT_MESSAGE.
  IF LO_MESSAGE IS BOUND.
    LT_MESSAGE = LO_MESSAGE->GET_MESSAGES( ).
  ENDIF.

* 消息
  LOOP AT LT_MESSAGE INTO LS_MESSAGE WHERE MSGTY CA 'EAX'.
    LV_INDEX = SY-TABIX - 1.
    ASSIGN LV_TXT1 INCREMENT LV_INDEX TO <LV_TEXT>.
    MESSAGE ID     LS_MESSAGE-MSGID
            TYPE   LS_MESSAGE-MSGTY
            NUMBER LS_MESSAGE-MSGNO
            WITH   LS_MESSAGE-MSGV1 LS_MESSAGE-MSGV2
                   LS_MESSAGE-MSGV3 LS_MESSAGE-MSGV4
            INTO   <LV_TEXT>.
    MESSAGE E000(SU) WITH <LV_TEXT>
      RAISING FAILED.
  ENDLOOP.

* SAVE DELIVERY
  LO_DLV_SAVE = /SCWM/CL_DLV_MANAGEMENT_PRD=>GET_INSTANCE( ).

  DATA: LV_ROLLBACK_WORK_DONE TYPE XFELD,
        LV_COMMIT_WORK_DONE   TYPE XFELD.

  REFRESH LT_MESSAGE.
  CALL METHOD LO_DLV_SAVE->SAVE
    EXPORTING
      IV_SYNCHRONOUSLY      = ABAP_TRUE
      IV_DO_COMMIT_WORK     = ABAP_TRUE
      IV_WAIT               = ABAP_TRUE
    IMPORTING
      EV_REJECTED           = LV_REJECTED
      EV_ROLLBACK_WORK_DONE = LV_ROLLBACK_WORK_DONE
      EV_COMMIT_WORK_DONE   = LV_COMMIT_WORK_DONE
      ET_MESSAGE            = LT_MESSAGE.

  LOOP AT LT_MESSAGE INTO LS_MESSAGE WHERE MSGTY CA 'EAX'.
    LV_INDEX = SY-TABIX - 1.
    ASSIGN LV_TXT1 INCREMENT LV_INDEX TO <LV_TEXT>.
    MESSAGE ID     LS_MESSAGE-MSGID
            TYPE   LS_MESSAGE-MSGTY
            NUMBER LS_MESSAGE-MSGNO
            WITH   LS_MESSAGE-MSGV1 LS_MESSAGE-MSGV2
                   LS_MESSAGE-MSGV3 LS_MESSAGE-MSGV4
            INTO   <LV_TEXT>.
    MESSAGE E000(SU) WITH <LV_TEXT>
      RAISING FAILED.
  ENDLOOP.

  IF LV_ROLLBACK_WORK_DONE = ABAP_TRUE.
    MESSAGE E000(SU) WITH TEXT-E02 "交货单过账失败
      RAISING FAILED.
  ELSE.
    MESSAGE S000(SU) WITH TEXT-S01."已成功发货过账
  ENDIF.


ENDFUNCTION.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DataFrame的ewm方法是pandas库中的一个函数方法,用于提供指数加权(EW)的计算功能。通过使用ewm方法,可以对数据进行指数加权平均、方差、标准差、相关性和协方差等操作。 在使用ewm方法时,需要提供至少一个参数,即com、span、halflife或alpha。这四个参数中只能选择一个进行设置,不支持同时设置两个或更多参数。其中,com表示指定指数加权的时间间隔,span表示指定指数加权的时间跨度,halflife表示指定指数加权的半衰期,alpha表示指定指数加权的平滑因子。 除了以上参数外,还有一些可选参数可以进行设置,如min_periods、adjust、ignore_na、axis和times。这些参数可以根据需要进行调整以适应具体的计算需求。 下面是一个使用DataFrame的ewm方法的例子: ``` import pandas as pd import numpy as np df = pd.DataFrame({'B': [0, 1, 2, np.nan, 4]}) df.ewm(com=1).mean() df.ewm(span=3).mean() df.ewm(alpha=0.5).mean() df.ewm(halflife=1).mean() ``` 以上代码展示了使用不同参数进行指数加权计算的例子。通过指定不同的参数,可以得到不同的加权结果。 请注意,以上引用中提到的pandas版本号是1.2.2。在不同的版本中,可能会有一些参数的使用方式或默认值发生变化,建议根据具体的版本进行参考。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [DataFrame指数权重窗口ewm使用: DataFrame.ewm([com, span, halflife, …])](https://blog.csdn.net/chenhepg/article/details/114668297)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值