原文链接:https://blog.csdn.net/m0_53515083/article/details/124063376
需求:CRM系统创建预报订单后发送SAP,SAP根据该预报订单再生成一个新预报订单
第一步:配置输出类型(事务码NACE)
选择V1销售,点击输出类型。
点击新条目
在一般数据里填写输出的程序名和子程序名。
缺省值:设置调度时间:1、2(发送定期的计划作业)是在DEBUG时需要设置的,4是上线后,在VA21保存时会触发的设置
传播媒介:选择“特殊功能”
其他页签根据项目需要设置 。本需求不设置
第二步:配置过程
选择V1销售,点击过程。
选择ZV1000:蒙牛订单输出,点击控制
进入如下界面
新建步骤60,点击需求列,弹出左图,选择例程编号2:订单确认
第三步:程序开发
自建SE38程序ZMSDR218C,代码如下:
*&---------------------------------------------------------------------*
*& Form create_forecast_order
*&---------------------------------------------------------------------*
* 创建预报订单函数
*----------------------------------------------------------------------*
* -->RETURN_CODE 返回值
* -->US_SCREEN text
*----------------------------------------------------------------------*
FORM CREATE_FORECAST_ORDER USING RETURN_CODE US_SCREEN.
DATA: LT_VBAK TYPE TABLE OF TY_VBAK,
LS_VBAK TYPE TY_VBAK,
LS_TEMP TYPE TY_VBAK,
LV_SUBRC TYPE SY-SUBRC.
CHECK US_SCREEN IS INITIAL.
RETURN_CODE = 1.
CHECK NAST-OBJKY IS NOT INITIAL.
"判断so单号是否存在
PERFORM FRM_CHECK_SO USING NAST-OBJKY.
CHECK GS_VBAK IS NOT INITIAL.
"校验该销售订单是创建还是修改
SELECT SINGLE * FROM ZTSD0804 INTO GS_ZTSD0804 WHERE ZFDDLX = 'SO' AND VBELN = GS_VBAK-VBELN.
IF SY-SUBRC = 0 AND GS_ZTSD0804-ZFVBELN_NEW IS NOT INITIAL.
GV_ZFOPT = 'B'. "操作代码:B:修改订单
"判断预销售组织,分销渠道,工厂是否维护在 ZTSD0805 表中
PERFORM FRM_CHECK_ZTSD0228.
CHECK GS_ZTSD0228 IS NOT INITIAL.
"同步修改预报订单
* PERFORM frm_chg_so.
ELSE.
GV_ZFOPT = 'A'. "操作代码:A:创建/生成订单
"判断预报订单生成默认参数是否激活
PERFORM FRM_CHECK_ZTSD0228.
IF GS_ZTSD0228-ZCRMACT IS INITIAL. "CRM自动创建激活
PERFORM FRM_SET_LOG USING 'X' '0' ''.
RETURN.
ENDIF.
"VBAK-VBELN = VBPA-VBELN,VBPA-PARVW = ZC ,
"VBPA-KUNNR 的值不为空,则创建预报订单
PERFORM FRM_CHECK_VBPA.
"创建预报订单
PERFORM FRM_CRE_SO CHANGING RETURN_CODE.
ENDIF.
ENDFORM. "create_forecast_order
第四步:运行&调试
调试运行: se38运行程序:RSNAST00,这个对照的后台表是:NAST. 在VA22进入某个订单时做个配置会有一条数据加到NAST表里,只有NAST表里有值才能通过这个程序来调用DEBUG。
VA22做配置,附加->输出->表头->编辑
把ZCFO类型手工加入进去(只有DEBUG时需要手工加,NACE设置为立即执行是会系统自动加的)
预报订单由CRM系统通过中间件技术传过来的时候,会自动触发这个OUTPUT。