vl02n交货序列号校验

在交货过账时,有时需要做一些增强校验,比如检查库存地、交货数量等增强。

通常我们使用一代增强:

增强点:MV50AFZ1

子程序:FORM USEREXIT_SAVE_DOCUMENT_PREPARE.

或者三代增强:LE_SHP_DELIVERY_PROC

这两代基本满足大部分需求,但他们都没有序列号相关数据的传入。

为了对序列号做校验,我们必须要用二代增强:IQSM0004  EXIT_SAPLIPW1_004

传入参数 S4_HEADER_DATA存储序列号对应的交货单行项目信息。

表 S4_IEQUI 存储所有本次有修改更新变动的序列号信息,包括更新前与更新后.

交货单表头没有传入,用内存指针获得。

XOBJK为序列号维护屏幕pai中存储修改前记录的表。

与S4_IEQUI 对比获知修改序列号部分做判断。

代码需求为:退货交货时,校验序列号末尾为TH标识,且前半段序列号存在于系统。

  FIELD-SYMBOLS: <fs_stu>   TYPE any,
                 <fs_lfart> TYPE likp-lfart,
                 <fs_sernr> TYPE equi-sernr,
                 <ft_xobjk> TYPE ANY TABLE.

  DATA: lv_len    TYPE char5,
        lv_before TYPE char20,
        lv_later  TYPE char5.
  DATA: r_sernr  TYPE RANGE OF equi-sernr.

    ASSIGN ('(SAPMV50A)XLIKP') TO <fs_stu>.
    IF <fs_stu> IS ASSIGNED.
      ASSIGN COMPONENT 'LFART' OF STRUCTURE <fs_stu> TO <fs_lfart>.
    ENDIF.
    ASSIGN ('(SAPLIPW1)XOBJK[]') TO <ft_xobjk>.
    IF <ft_xobjk> IS ASSIGNED.
      LOOP AT <ft_xobjk> ASSIGNING FIELD-SYMBOL(<fs_xobjk>).
        ASSIGN COMPONENT 'SERNR' OF STRUCTURE <fs_xobjk> TO <fs_sernr>.
        APPEND VALUE #( sign = 'I' option = 'EQ' low = <fs_sernr> ) TO r_sernr.
      ENDLOOP.
    ENDIF.

    IF <fs_lfart> = 'ZLR'."退货交货单
      DATA(lt_iequi) = s4_iequi[].
      DELETE lt_iequi WHERE SERNR NOT IN r_sernr.
      IF lt_iequi IS NOT INITIAL.
        SELECT equnr, matnr, charge INTO TABLE @DATA(lt_equi)
            FROM equi FOR ALL ENTRIES IN @lt_iequi
            WHERE matnr = @lt_iequi-matnr
              AND charge = @lt_iequi-charge.
        SORT lt_equi BY equnr.
      ENDIF.

      LOOP AT lt_iequi INTO DATA(ls_iequi).
        lv_len = strlen( ls_iequi-sernr ) - 2.
        lv_before = ls_iequi-sernr+0(lv_len).
        lv_later  = ls_iequi-sernr+lv_len(2).
        IF lv_later NE 'TH'.
          CALL FUNCTION 'MESSAGE_STORE'
            EXPORTING
              arbgb = 'Z001'
              msgty = 'E'
              msgv1 = ls_iequi-sernr
              msgv2 = '退货单序列号必须以TH结尾'
              txtnr = '000'.
        ENDIF.
        READ TABLE lt_equi TRANSPORTING NO FIELDS WITH KEY equnr = lv_before BINARY SEARCH.
        IF sy-subrc NE 0.
          CALL FUNCTION 'MESSAGE_STORE'
            EXPORTING
              arbgb = 'Z001'
              msgty = 'E'
              msgv1 = '序列号'
              msgv2 = lv_before
              msgv3 = '在系统中不存在'
              txtnr = '000'.
        ENDIF.
        CLEAR: lv_len,lv_before,lv_later.
      ENDLOOP.
    ENDIF.

参考资源链接:[深入研究K均值算法初始聚类中心选取](https://wenku.youkuaiyun.com/doc/2beijvyova?utm_source=wenku_answer2doc_content) 在K均值聚类算法中,初始聚类中心选择至关重要,它直接影响算法的收敛速度和最终的聚类质量。传统的随机选择方法虽然简单,但容易导致算法收敛到局部最优解。K-means++算法是一种更为高级的初始聚类中心选择方法,它通过更加智能的方式选择初始中心,以期得到更好的聚类效果。 为了实现这一点,K-means++算法采取了一种加权概率策略,具体步骤如下: 1. 首先从数据集中随机选择一个点作为第一个初始聚类中心。 2. 对于数据集中的每一个点x,计算它与最近的已选择聚类中心的距离d(x)。距离d(x)越小,表示点x越接近已选择聚类中心,因此被选为下一个聚类中心的概率越低。 3. 以概率 d(x)^2 / Σ(d(x)^2) 选择下一个聚类中心,其中求和是对数据集中所有点进行的。 4. 重复步骤2和3,直到选择了K个初始聚类中心。 通过这种方式,K-means++算法有效地避免了所有初始聚类中心都落在数据集的某个小区域内的风险,从而提高了算法的全局优化性能。 为了更深入理解K-means++算法的原理和实现过程,建议阅读《深入研究K均值算法初始聚类中心选取》一文。该文献详细探讨了K-means++算法的细节和优势,并通过实例演示了如何在实际中应用该方法以优化聚类效果。通过学习这篇文献,你可以掌握K均值算法的高级技巧,并提升在数据挖掘、模式识别和统计分析等领域的应用能力。 参考资源链接:[深入研究K均值算法初始聚类中心选取](https://wenku.youkuaiyun.com/doc/2beijvyova?utm_source=wenku_answer2doc_content)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值