SAP ABAP VA02销售订单保存前增强

1、SE38打开程序MV45AFZZ

2、 找到FORM userexit_save_document_prepare.

3、编写代码

示例一:

ENHANCEMENT 2  ZCD_SO_SAVE_CHECK.    "active version
***** ADD BY ZJ 20221026 START 检查非源头订单禁止修改
  DATA:ls_zsdt031 TYPE zsdt031,
       lv_zrfcid TYPE zrfcid,
       lt_zsdt008 TYPE TABLE OF zsdt008,
       ls_zsdt008 TYPE zsdt008.
  IF ( sy-tcode = 'VA02' OR sy-tcode = 'VA03' ).
    SELECT SINGLE * INTO ls_zsdt008 FROM zsdt008 WHERE objkey = vbak-vbeln
                                                          AND objtype = 'SO'.

    IF sy-subrc = 0.

      SELECT SINGLE objkey INTO @DATA(lv_objkey) FROM zsdt008 WHERE zrfcid = @ls_zsdt008-zrfcid
                                                                AND canum = '0010'.
      IF sy-subrc = 0.
        SELECT SINGLE bukrs INTO @DATA(lv_bukrs) FROM ekko WHERE ebeln = @lv_objkey.
        IF sy-subrc = 0.
          SELECT SINGLE zbs INTO @DATA(lv_zbs) FROM zsdt031 WHERE bukrs = @lv_bukrs
                                                              AND objtype = 'PO'.
          IF lv_zbs = 'Y'.
             IF ls_zsdt008-canum > 10.
               MESSAGE '非源头订单不能够更改' TYPE 'E'.
             ENDIF.
          ENDIF.
        ENDIF.
      ENDIF.
    ENDIF.

*    SELECT SINGLE * FROM zsdt031 INTO ls_zsdt031 WHERE bukrs = vbak-vkorg
*                                                 AND objtype = 'SO'.
*    IF ls_zsdt031-zbs = 'Y'.
*      SELECT SINGLE * INTO ls_zsdt008 FROM zsdt008 WHERE objkey = vbak-vbeln
*                                                   AND objtype = 'SO'.
*      IF sy-subrc = 0.
*        IF ls_zsdt008-canum > 10.
*          MESSAGE '非源头订单不能够更改' TYPE 'E'.
*        ENDIF.
*      ENDIF.
*    ENDIF.
  ENDIF.

***** ADD BY ZJ 20221026 END 检查非源头订单禁止修改
ENDENHANCEMENT.

 示例二:

FORM userexit_save_document_prepare.
*{   INSERT         S4DK900377                                        1
***>>>BEG ERP360

  DATA:lv_zbs1 TYPE c.

  SELECT SINGLE zbs INTO lv_zbs1 FROM zuser_exit WHERE zxh = '0007'.
*  IF lv_zbs1 = ''.
    IF sy-tcode = 'VA02'.
      DATA:user_line  LIKE  bsvx-sttxt.
      DATA:e_stsma  LIKE  jsto-stsma.
      DATA:wa_xvbap LIKE xvbap.
      DATA:tab1 LIKE vbap.
      DATA:tab2 LIKE vbap.
      DATA:GV_AUART LIKE VBAK-AUART.

      LOOP AT xvbap INTO wa_xvbap.

        "销售订单类型ZKE1的修改不受审核情况限制。
        SELECT SINGLE AUART INTO GV_AUART FROM VBAK WHERE VBELN = WA_XVBAP-VBELN.
        IF GV_AUART = 'ZKE1'.
           EXIT.
        ENDIF.

        CLEAR:user_line,
              e_stsma .
*        IF NOT vbak-objnr IS INITIAL AND wa_xvbap-updkz <> '' AND wa_xvbap-updkz <> 'I'.
          SELECT SINGLE * INTO tab1 FROM vbap  WHERE vbeln = wa_xvbap-vbeln AND posnr = wa_xvbap-posnr.
          MOVE-CORRESPONDING wa_xvbap TO tab2.
          IF tab2-netwr <>  tab1-netwr OR tab2-matnr <> tab1-matnr.
            CALL FUNCTION 'STATUS_TEXT_EDIT'
              EXPORTING
                client           = sy-mandt
                flg_user_stat    = 'X'
                objnr            = vbak-objnr
                only_active      = 'X'
                spras            = sy-langu
                bypass_buffer    = 'X'
              IMPORTING
*               ANW_STAT_EXISTING       =
                e_stsma          = e_stsma
*               LINE             =
                user_line        = user_line
*               STONR            =
              EXCEPTIONS
                object_not_found = 1
                OTHERS           = 2.

            IF sy-subrc = 0 AND user_line <> '创建' .
              MESSAGE '销售订单已审批,不允许修改!' TYPE 'E'.
            ENDIF.
          ENDIF.
*        ENDIF.
      ENDLOOP.
    ENDIF.
*  ENDIF.

  DATA: lt_vbep TYPE STANDARD TABLE OF vbepvb,
        ls_vbep LIKE LINE OF lt_vbep.

  lt_vbep = xvbep[].

  LOOP AT xvbap.

    READ TABLE lt_vbep INTO ls_vbep WITH KEY vbeln = xvbap-vbeln
                                             posnr = xvbap-posnr.

    IF xvbap-zzeindt1 IS INITIAL.

      xvbap-zzeindt1 = ls_vbep-edatu.

    ENDIF.

    IF xvbap-zzeindt2 IS INITIAL.

      xvbap-zzeindt2 = ls_vbep-edatu.

    ENDIF.

    IF xvbap-zzeindt1 = xvbap-zzeindt2.

      xvbap-zzeindt2 = ls_vbep-edatu.

    ENDIF.

    MODIFY xvbap TRANSPORTING zzeindt1 zzeindt2.

  ENDLOOP.
***<<<END ERP360
*}   INSERT


ENDFORM.

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ABAP(Advanced Business Application Programming)是一种用于SAP系统开发的高级商务应用编程语言。在ABAP中,我们可以使用BDC(Batch Data Communication)技术来批量创建销售订单。 批量创建销售订单可以大大提高工作效率,为复杂的销售业务场景提供了便利。下面是一种基本的批量创建销售订单的方法: 1. 准备数据:首先,我们需要准备好销售订单的相关数据,包括客户号、物料号、数量、价格等信息。可以将这些数据存储在一个Excel表格或者文本文件中。 2. 编写ABAP程序:使用ABAP程序来读取准备好的数据文件,并通过BDC技术将数据批量导入到SAP系统中。ABAP程序可以根据具体的业务需求来编写,包括读取数据文件、验证数据的有效性、填写订单的各个字段、保存订单等操作。 3. 运行ABAP程序:将编写好的ABAP程序运行起来,程序将自动读取准备的数据文件,对数据进行处理,并批量创建销售订单。 4. 验证结果:创建完成后,我们可以通过SAP系统中的相应事务码(如VA03)来验证订单的正确性和完整性。可以逐个查看订单的详细信息,并确保数据导入的准确性。 需要注意的是,批量创建销售订单需要谨慎操作,确保准备的数据准确无误,并对ABAP程序进行充分的测试。批量导入数据,可以设置一些验证规则和控制机制,以避免错误数据的导入。 总结来说,使用ABAP编程语言,我们可以编写程序实现批量创建销售订单的功能。这样可以提高工作效率,还可以适应复杂的销售业务需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值