SD发票 可以修改程序RV60AFZZ增强

***INCLUDE RV60AFZZ .

************************************************************************
*                                                                      *
* This include is reserved for user modifications                      *
* Forms for invoicing                                                  *
* The name of modification modules should begin with 'ZZ'.             *
*                                                                      *
************************************************************************
*       USEREXIT_ACCOUNT_PREP_KOMKCV                                   *
*       USEREXIT_ACCOUNT_PREP_KOMPCV                                   *
*       USEREXIT_NUMBER_RANGE                                          *
*       USEREXIT_PRICING_PREPARE_TKOMK                                 *
*       USEREXIT_PRICING_PREPARE_TKOMP                                 *
************************************************************************

************************************************************************
*       FORM ZZEXAMPLE                                                *
*---------------------------------------------------------------------*
*       text......................................                    *
*---------------------------------------------------------------------*
*FORM ZZEXAMPLE.

*  ...

*ENDFORM.

*eject

*---------------------------------------------------------------------*
*       FORM USEREXIT_ACCOUNT_PREP_KOMKCV                             *
*---------------------------------------------------------------------*
*       This userexit can be used to move additional fields into the  *
*       communication table which is used for account allocation:     *
*       KOMKCV for header fields                                      *
*       This form is called from form KONTENFINDUNG                   *
*---------------------------------------------------------------------*
FORM USEREXIT_ACCOUNT_PREP_KOMKCV.

*  KOMKCV-zzfield = xxxx-zzfield2.

ENDFORM.
*eject

*---------------------------------------------------------------------*
*       FORM USEREXIT_ACCOUNT_PREP_KOMPCV                             *
*---------------------------------------------------------------------*
*       This userexit can be used to move additional fields into the  *
*       communication table which is used for account allocation:     *
*       KOMPCV for item fields                                        *
*       This form is called from form KONTENFINDUNG                   *
*---------------------------------------------------------------------*
FORM USEREXIT_ACCOUNT_PREP_KOMPCV.

*  KOMPCV-zzfield = xxxx-zzfield2.

ENDFORM.
*eject

*---------------------------------------------------------------------*
*       FORM USEREXIT_NUMBER_RANGE                                    *
*---------------------------------------------------------------------*
*       This userexit can be used to determine the numberranges for   *
*       the internal document number.                                 *
*       US_RANGE_INTERN - internal number range                       *
*       This form is called from form LV60AU02                        *
*---------------------------------------------------------------------*
FORM USEREXIT_NUMBER_RANGE  USING US_RANGE_INTERN.

* Example: Number range from TVFK like in standard
* US_RANGE_INTERN = TVFK-NUMKI.
   data: da_rc  like inri -returncode.
   CALL  FUNCTION  'NUMBER_GET_NEXT'
     EXPORTING
      nr_range_nr  US_RANGE_INTERN
      object       'RV_BELEG'
     IMPORTING
      returncode   da_rc
       number       xvbrk -vbeln.
   case da_rc.
     when  '1'.
       message i532  with US_RANGE_INTERN  'RV_BELEG'.
     when  '2'.
       message i533  with US_RANGE_INTERN  'RV_BELEG'.
   endcase.

**更改SD开票编码规则 2012.03.06
   DATA:L_NUMBE  LIKE ZTSD04 -NUMBE.
   DATA:G_VBELN  LIKE VBRK -VBELN.
   DATA:L_VBELN  LIKE VBRK -VBELN.
   DATA:L_VBELN1  LIKE VBRK -VBELN.
   DATA:L_VBELN2  LIKE VBRK -VBELN.
   DATA:L_LINE  TYPE  I.

   SELECT  SINGLE NUMBE  INTO L_NUMBE  FROM ZTSD04
                       WHERE VKORG  VBRK -VKORG.
   IF L_NUMBE  IS  INITIAL.
     MESSAGE  '该销售组织未维护号码段,请联系管理员'  TYPE  'E'.
     EXIT.
   ENDIF.
   DATA: INTERVAL  LIKE NRIV.
   CALL  FUNCTION  'NUMBER_GET_INFO'
     EXPORTING
      NR_RANGE_NR  US_RANGE_INTERN
      OBJECT       'RV_BELEG'
     IMPORTING
      INTERVAL     INTERVAL.

  L_VBELN1  INTERVAL -FROMNUMBER+2 ( 8 ).
   CONCATENATE  L_NUMBE L_VBELN1  INTO L_VBELN1.
   CONDENSE L_VBELN1  NO -GAPS.
  L_VBELN2  INTERVAL -TONUMBER+2 ( 8 ).
   CONCATENATE  L_NUMBE L_VBELN2  INTO L_VBELN2.
   CONDENSE L_VBELN2  NO -GAPS.

   SELECT  MAX VBELN  INTO L_VBELN  FROM VBRK
                       WHERE VBELN > L_VBELN1
                         AND VBELN < L_VBELN2.
   IF L_VBELN  IS  INITIAL.
*    xvbrk-VBELN = xvbrk-VBELN+2(8).
*    CONCATENATE  L_NUMBE xvbrk-VBELN INTO xvbrk-VBELN.
    xvbrk -VBELN  L_VBELN1 +  1.
     CONDENSE xvbrk -VBELN  NO -GAPS.
    L_VBELN  xvbrk -VBELN.
   ELSE.
    L_VBELN  L_VBELN +  1.
     IF L_VBELN+2 ( 8 > INTERVAL -TONUMBER+2 ( 8 ).
       MESSAGE  '该销售组织号码段已用完,请联系管理员'  TYPE  'E'.
       EXIT.
     ENDIF.
   ENDIF.

   LOOP  AT xvbrk.
     IF xvbrk -VBELN+0 ( 1 '$'.
      xvbrk -VBELN  L_VBELN .
      L_VBELN  L_VBELN +  1.
       MODIFY xvbrk.
       EXIT.
     ENDIF.
   ENDLOOP.
   CLEAR: L_VBELN.

ENDFORM.
*eject

*---------------------------------------------------------------------*
*       FORM USEREXIT_PRICING_PREPARE_TKOMK                           *
*---------------------------------------------------------------------*
*       This userexit can be used to move additional fields into the  *
*       communication table which is used for pricing:                *
*       TKOMK for header fields                                       *
*       This form is called from form PREISFINDUNG_VORBEREITEN.       *
*---------------------------------------------------------------------*
FORM USEREXIT_PRICING_PREPARE_TKOMK.

* TKOMK-zzfield = xxxx-zzfield2.

* TKOMK-KUNRE = XVBPA_RE-KUNNR.
* TKOMK-KUNWE = XVBPA_WE-KUNNR.
* TKOMK-KNRZE = XVBPA_RG-KUNNR.

* PERFORM XVBPA_SELECT USING 'VE'.
* TKOMK-VRTNR = XVBPA-PERNR.

* PERFORM XVBPA_SELECT USING 'SP'.
* TKOMK-SPDNR = XVBPA-LIFNR.

* PERFORM XVBPA_SELECT USING 'AP'.
* TKOMK-PARNR = XVBPA-PARNR.

ENDFORM.
*eject

*---------------------------------------------------------------------*
*       FORM USEREXIT_PRICING_PREPARE_TKOMP                           *
*---------------------------------------------------------------------*
*       This userexit can be used to move additional fields into the  *
*       communication table which is used for pricing:                *
*       TKOMP for item fields                                         *
*       This form is called from form PREISFINDUNG_VORBEREITEN.       *
*---------------------------------------------------------------------*
FORM USEREXIT_PRICING_PREPARE_TKOMP.

*  TKOMP-zzfield = xxxx-zzfield2.

ENDFORM.
*eject
<think>好的,用户想知道如何在SAP中实现销售订单创建的增强处理。我需要根据提供的引用内容,整理出一个清晰的步骤。首先,我应该看看用户提供的三个引用,看看里面提到了哪些关键点。 引用[1]提到在创建销售订单时检查抬头长文本必输的增强,使用了函数组SAPLSTXD和特定的内存参数ID。这可能涉及到在保存或读取长文本时的检查逻辑。 引用[2]和[3]都提到了隐式增强点。引用[2]指出增强位置在MV45AF0C_CHANGE_DOCUMENT_CREAT的FORM change_document_create中,而引用[3]提到在程序MV45AFZZ中的FORM userexit_save_document_prepare。这说明有两个不同的增强点:一个是在创建变更文档时,另一个是在保存前的准备阶段。 接下来,我需要将这些信息组织成步骤。首先,用户可能需要了解不同的增强方式,比如隐式增强和用户出口。然后,具体步骤可能包括找到正确的增强点、编写代码、测试等。需要确保每个步骤都清晰,并且引用正确的来源。 同时,用户可能还想知道这些增强点的具体位置,比如如何通过SE38或SE80找到这些程序。例如,FORM userexit_save_document_prepare是在MV45AFZZ程序中,这是一个常见的用户出口,用户可能需要在这里添加自定义逻辑。 另外,引用[1]中的长文本检查可能涉及到特定的函数组和内存参数,需要说明如何获取这些参数并实现必输性检查。这可能包括调用SAP提供的函数或使用内存参数来强制长文本输入。 最后,生成相关问题时要考虑用户可能的后续疑问,比如如何调试增强、其他增强点或权限问题。这些问题可以帮助用户进一步探索相关内容。 需要确保回答结构清晰,分步骤说明,并正确引用每个步骤对应的引用来源。避免技术术语过多,但保持准确性。同时,检查是否符合之前的格式要求,如使用中文,正确使用LaTeX格式等。</think>在SAP中实现销售订单创建的增强处理可通过以下方法实现: ### 一、增强类型与实现路径 1. **用户出口增强**(User Exit) - 在标准程序`MV45AFZZ`中使用预定义的`FORM userexit_save_document_prepare`,这是SAP提供的标准用户出口[^3] ```abap FORM userexit_save_document_prepare. " 添加自定义校验逻辑 IF vbap-posnr = ''. MESSAGE e001(zsd_order) WITH '项目号必填'. ENDIF. ENDFORM. ``` 2. **隐式增强点** - 在包含文件`MV45AF0C_CHANGE_DOCUMENT_CREAT`的`FORM change_document_create`第一行插入代码[^2] $$ \text{增强位置示例:} \quad \text{ENHANCEMENT 1 ZSD_ORDER_ENH.} \quad \text{ENDENHANCEMENT} $$ ### 二、长文本必输性增强(引用[1]实现) 1. **通过函数组`SAPLSTXD`获取文本参数** ```abap DATA: lv_object TYPE thead-tdobject VALUE 'VBBK', lv_id TYPE thead-tdid VALUE 'Z001'. CALL FUNCTION 'STXT_GET_MEMORY_ID' EXPORTING object = lv_object id = lv_id IMPORTING memory_id = lv_memory_id. ``` 2. **在保存前校验长文本** ```abap IF sy-tcode = 'VA01' AND text_is_empty = 'X'. MESSAGE e398(00) WITH '抬头长文本必须填写'. ENDIF. ``` ### 三、增强实现步骤 1. **定位增强点** - 使用事务码`SE38`打开程序`MV45AFZZ` - 使用事务码`SE80`查找包含文件`MV45AF0C_CHANGE_DOCUMENT_CREAT` 2. **代码调试方法** - 在销售订单保存时设置断点`/h` - 跟踪标准程序执行路径找到可插入增强的位置 3. **传输管理** - 通过`SE21`创建增强包 - 使用`CTS`传输请求管理变更
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值