并行处理中的BAPI_PLANNEDORDER_CREATE不起作用。

2020-09-20 23:15发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,专家

我需要在并行处理模式下使用BAPI_PLANNEDORDER_CREATE的帮助。

通话后我可以看到计划的订单号,但是提交无法正常工作。

请帮忙。

调用功能'BAPI_PLANNEDORDER_CREATE'
开始新任务lv_task
目标'NONE'
在任务结束时执行set_function1_done

***************************************************

*************************************************** *************************
*类型和类型池*
************ ****************************************************** **********
类型:ty_data的开始,
pasch像t460c-pasch,"计划订单类型
plscn像plaf-plscn,"计划版本
matnr像plaf -matnr,"计划材料
plwrk LIKE plaf-plwrk,"计划工厂
pwwrk LIKE plaf-pwwrk,"计划订单的生产工厂
gsmng LIKE plaf-gsmng,"计划总订单量
avmng LIKE plaf-avmng,"固定数量的生产废料
psttr LIKE plaf-psttr,"计划开始的订单开始日期
pedtr LIKE plaf-pedtr,"计划的订单结束日期
pertr LIKE plaf-pertr,"计划订单的计划开业日期
umskz LIKE plaf-umskz,"计划订单的转换指标
auffx LIKE plaf-auffx,"计划订单数据的固化指标
verid LIKE plaf- verid,"生产版本
term1类似于tcx00-term1。" 提前期调度
类型:ty_data的结尾。

类型:ty_log的开头,
description(300),
错误。
类型:ty_log的结尾。
< br>类型:ty_pv_data的开始,
matnr像mkal-matnr,
werks像mkal-werks,
verid像mkal-verid,
bdatu像mkal-bdatu,
adatu像mkal -adatu,
mksp,类似于mkal-mksp,
ty_pv_data的结尾。

类型:tyt_pv_data ty_pv_data的类型表。



******** ****************************************************** ************
*常量*
***************************** ***********************************************
常量:c_x值 'X',
c_i值'I',
c_bt(2)值'BT',
c_sep值'-',
c_s值'S',
c_e值'E ',
c_61(2)值'61',
c_010(3)值'010',
c_1像mkal-mksp值'1',
完成值'X'。 >

*********************************************** *********************************
*内部表*
*********** ************************************************** ****************
数据:
与HEADER LINE相似的HEADERDATA BAPIPLAF_I1 OCCURS 0,与
HEADER LINE相似的api_headerdata LIKE bapiplaf_i1 OCCURS 0与HEADER LINE相似,
pit_headerdata bapiplaf_i1出现0,并且带有标题行,
"带有标题行的it_data类型标准表ty_data,
""带有标题行的ty_data类型标准表ty_data,
pit_data类型zdata,
it_log类型标准表 带有标题行的ty_log。
"带有标题行的ty_log类型标准表。


********************** ******************************************************
*数据声明*
******************************************** ************************************
范围:r_qa_valid FOR sy-datum,
r_pv_valid FOR sy- 基准面。

数据:wa_headerdata类似于bapiplaf_i1,
lt_return类似于bapireturn1的带有表头行的表,
lt_commit_return类似于bapiret2的带有表头线的表,
l_plannedorder类似于bapi_pld l_qty_aux(17),
lv_task TYPE char10,< br> functioncall1类型char10。

数据:lt_comdata与带有标题行的bapi_pldordcomp_i1类似表。



*为Bapi
准备标题数据,将其循环到it_data到pit_data中。
清除pit_headerdata。
*转换物料编号
调用功能'CONVERSION_EXIT_ALPHA_INPUT'
导出
输入= pit_data-matnr
导入
输出= pit_headerdata-material。
< br> pit_headerdata-pldord_profile = pit_data-pasch。
pit_headerdata-plng_scenario_lt = pit_data-plscn。
pit_headerdata-plan_plant = pit_data-plwrk。
pit_headerdata-prod_plant = pit_to-plt pit_data-gsmng。
pit_headerdata-fixed_scrap_qty = pit_data-avmng。
pit_headerdata-order_start_date = pit_data-psttr。
pit_headerdata-order_fin_date = pit_data-pedtr。
pit_headerdata = tr。 > pit_headerdata-conversion_ind = pit_data-umskz。
pit_headerdata-firming_ind = pit_data-auffx。
pit_headerdata-version = pit_data -verid。
pit_headerdata-det_schedule = pit_data-term1。

pit_headerdata-STGE_LOC = pit_data-lgort。
pit_headerdata-MRP_AREA = pit_data-berid。
pit_headerdata-USE_COLL_UPD。
APPEND pit_headerdata。
ENDLOOP。


循环AT pit_headerdata INTO wa_headerdata。

* wa_headerdata-USE_COLL_UPD ='X'。
*
* at LAST。
* wa_headerdata-LAST_ORDER ='X'。
* ENDAT。

刷新lt_comdata。
清除lt_comdata。

l_qty_aux = wa_headerdata-total_plord_qty。

"将wa_headerdata-material移动到lt_comdata-material。


APPEND lt_comdata。
lv_task = sy-tabix。
*创建计划订单
通话功能'BAPI_PLANNEDORDER_CREATE'< br>开始新任务lv_task
" FUNC1'
目标'NONE'
在任务结束时执行set_function1_done

EXPORTING
headerdata = wa_headerdata
*导入< br> *返回= lt_return
*计划订单= l_plannedorder
表格
componentsdata = COMPONENTSDATA。
*记录 eive剩余的异步答复
等到functioncall1 =完成。

IF lt_return-type ne c_e。
" lt_return-type = c_s或lt_return-type ='I'。

*如果创建成功运行,则commit
CALL FUNCTION'BAPI_TRANSACTION_COMMIT'
IMPORTING
return = lt_commit_return。
CALL FUNCTION'DEQUEUE_ALL'。



*准备 日志
清除:pit_log。
CONCATENATE:
" lt_return-message c_sep text-007
" wa_headerdata-material c_sep text-008
" wa_headerdata-plan_plant c_sep text-009
" l_qty_aux
l_plannedorder'成功创建'
INTO pit_log-描述按空格分隔。
追加pit_log。
ELSE。
清除:pit_log。
CONCATENATE text-007 wa_headerdata-material c_sep text-008
wa_headerdata-plan_plant c_sep text-009 l_qty_aux
text-010 lt_return-message
插入到pit_log-描述中,用空格分隔。


将c_x移动到pit_log-err。

APPEND pit_log。
ENDIF。
清除wa_headerdata。
ENDLOOP。

>

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,专家

我需要在并行处理模式下使用BAPI_PLANNEDORDER_CREATE的帮助。

通话后我可以看到计划的订单号,但是提交无法正常工作。

请帮忙。

调用功能'BAPI_PLANNEDORDER_CREATE'
开始新任务lv_task
目标'NONE'
在任务结束时执行set_function1_done

***************************************************

*************************************************** *************************
*类型和类型池*
************ ****************************************************** **********
类型:ty_data的开始,
pasch像t460c-pasch,"计划订单类型
plscn像plaf-plscn,"计划版本
matnr像plaf -matnr,"计划材料
plwrk LIKE plaf-plwrk,"计划工厂
pwwrk LIKE plaf-pwwrk,"计划订单的生产工厂
gsmng LIKE plaf-gsmng,"计划总订单量
avmng LIKE plaf-avmng,"固定数量的生产废料
psttr LIKE plaf-psttr,"计划开始的订单开始日期
pedtr LIKE plaf-pedtr,"计划的订单结束日期
pertr LIKE plaf-pertr,"计划订单的计划开业日期
umskz LIKE plaf-umskz,"计划订单的转换指标
auffx LIKE plaf-auffx,"计划订单数据的固化指标
verid LIKE plaf- verid,"生产版本
term1类似于tcx00-term1。" 提前期调度
类型:ty_data的结尾。

类型:ty_log的开头,
description(300),
错误。
类型:ty_log的结尾。
< br>类型:ty_pv_data的开始,
matnr像mkal-matnr,
werks像mkal-werks,
verid像mkal-verid,
bdatu像mkal-bdatu,
adatu像mkal -adatu,
mksp,类似于mkal-mksp,
ty_pv_data的结尾。

类型:tyt_pv_data ty_pv_data的类型表。



******** ****************************************************** ************
*常量*
***************************** ***********************************************
常量:c_x值 'X',
c_i值'I',
c_bt(2)值'BT',
c_sep值'-',
c_s值'S',
c_e值'E ',
c_61(2)值'61',
c_010(3)值'010',
c_1像mkal-mksp值'1',
完成值'X'。 >

*********************************************** *********************************
*内部表*
*********** ************************************************** ****************
数据:
与HEADER LINE相似的HEADERDATA BAPIPLAF_I1 OCCURS 0,与
HEADER LINE相似的api_headerdata LIKE bapiplaf_i1 OCCURS 0与HEADER LINE相似,
pit_headerdata bapiplaf_i1出现0,并且带有标题行,
"带有标题行的it_data类型标准表ty_data,
""带有标题行的ty_data类型标准表ty_data,
pit_data类型zdata,
it_log类型标准表 带有标题行的ty_log。
"带有标题行的ty_log类型标准表。


********************** ******************************************************
*数据声明*
******************************************** ************************************
范围:r_qa_valid FOR sy-datum,
r_pv_valid FOR sy- 基准面。

数据:wa_headerdata类似于bapiplaf_i1,
lt_return类似于bapireturn1的带有表头行的表,
lt_commit_return类似于bapiret2的带有表头线的表,
l_plannedorder类似于bapi_pld l_qty_aux(17),
lv_task TYPE char10,< br> functioncall1类型char10。

数据:lt_comdata与带有标题行的bapi_pldordcomp_i1类似表。



*为Bapi
准备标题数据,将其循环到it_data到pit_data中。
清除pit_headerdata。
*转换物料编号
调用功能'CONVERSION_EXIT_ALPHA_INPUT'
导出
输入= pit_data-matnr
导入
输出= pit_headerdata-material。
< br> pit_headerdata-pldord_profile = pit_data-pasch。
pit_headerdata-plng_scenario_lt = pit_data-plscn。
pit_headerdata-plan_plant = pit_data-plwrk。
pit_headerdata-prod_plant = pit_to-plt pit_data-gsmng。
pit_headerdata-fixed_scrap_qty = pit_data-avmng。
pit_headerdata-order_start_date = pit_data-psttr。
pit_headerdata-order_fin_date = pit_data-pedtr。
pit_headerdata = tr。 > pit_headerdata-conversion_ind = pit_data-umskz。
pit_headerdata-firming_ind = pit_data-auffx。
pit_headerdata-version = pit_data -verid。
pit_headerdata-det_schedule = pit_data-term1。

pit_headerdata-STGE_LOC = pit_data-lgort。
pit_headerdata-MRP_AREA = pit_data-berid。
pit_headerdata-USE_COLL_UPD。
APPEND pit_headerdata。
ENDLOOP。


循环AT pit_headerdata INTO wa_headerdata。

* wa_headerdata-USE_COLL_UPD ='X'。
*
* at LAST。
* wa_headerdata-LAST_ORDER ='X'。
* ENDAT。

刷新lt_comdata。
清除lt_comdata。

l_qty_aux = wa_headerdata-total_plord_qty。

"将wa_headerdata-material移动到lt_comdata-material。


APPEND lt_comdata。
lv_task = sy-tabix。
*创建计划订单
通话功能'BAPI_PLANNEDORDER_CREATE'< br>开始新任务lv_task
" FUNC1'
目标'NONE'
在任务结束时执行set_function1_done

EXPORTING
headerdata = wa_headerdata
*导入< br> *返回= lt_return
*计划订单= l_plannedorder
表格
componentsdata = COMPONENTSDATA。
*记录 eive剩余的异步答复
等到functioncall1 =完成。

IF lt_return-type ne c_e。
" lt_return-type = c_s或lt_return-type ='I'。

*如果创建成功运行,则commit
CALL FUNCTION'BAPI_TRANSACTION_COMMIT'
IMPORTING
return = lt_commit_return。
CALL FUNCTION'DEQUEUE_ALL'。



*准备 日志
清除:pit_log。
CONCATENATE:
" lt_return-message c_sep text-007
" wa_headerdata-material c_sep text-008
" wa_headerdata-plan_plant c_sep text-009
" l_qty_aux
l_plannedorder'成功创建'
INTO pit_log-描述按空格分隔。
追加pit_log。
ELSE。
清除:pit_log。
CONCATENATE text-007 wa_headerdata-material c_sep text-008
wa_headerdata-plan_plant c_sep text-009 l_qty_aux
text-010 lt_return-message
插入到pit_log-描述中,用空格分隔。


将c_x移动到pit_log-err。

APPEND pit_log。
ENDIF。
清除wa_headerdata。
ENDLOOP。

>

付费偷看设置
发送
6条回答
樱桃小丸子0093
1楼-- · 2020-09-20 23:37

嗨,阿米特,

尝试以这种方式工作

1。 创建一个附加了RFC选项的新功能模块( sap-se37-z-rfc.png ) 然后像下面这样打电话。

通话功能'Z_NEW_RFC'

开始新任务...

目的地空间

...

表格

it_headerdata = ...

...

2。 在新的RFC中调用BAPI_PLANNEDORDER_CREATE ...

呼叫功能'BAPI_PLANNEDORDER_CREATE'

导出

headerdata = ...

导入

return = ...

计划订单= ...

表格

componentsdata = ...

...

* BAPI成功返回

WAIT ='X'的呼叫功能'BAPI_TRANSACTION_COMMIT'。

...

此致

黑丝骑士
2楼-- · 2020-09-20 23:44

嗨,阿米特,你明白了吗?

如果相应的连接(sm59)正常运行,则建议向SAP BASIS解释此问题。

SAP BASIS可以查看相应的RFC和工作流程配置文件参数。

示例:SAP事务RSPFPAR( rfc-profile-parameter.png )。

此致

xfwsx85
3楼-- · 2020-09-20 23:49

我认为您的提交正在影响报表LUW,而不是并行模式启动了BAPI。

检查文档 https://help.sap.com/doc/abapdocu_751_index_htm/ 7.51/zh-CN/abapcall_function_starting.htm

您可以看到DESTINATION插件创建了一个新的Session/LUW,这里是有意义的部分

与每个RFC一样,异步RFC打开一个用户会话。 如果调用程序引发具有不同目的地或任务ID的多个连续异步RFC,或者如果不再存在连接,则将在不同的用户会话中自动并行处理被调用的功能模块。 并行运行应用程序时可以利用此属性。 由于关联的管理工具可能会导致客户端和服务器上的资源瓶颈,因此仅建议使用附加的DESTINATION IN GROUP进行这种并行处理。
 异步RFC触发调用程序中的数据库提交。 更新中的sRFC是对此的例外。

 使用STARTING NEW TASK进行的调用始终使用RFC接口执行,并且始终相应地解释指定为dest的目的地。 这就是为什么与同步RFC不同的是,不能为dest指定仅包含空格的初始字符串或文本字段。

 作为任务传递的任务ID不必对于每个调用都是唯一的。 但是,唯一的任务ID可以帮助识别回调例程中的调用。

 如果错误地在使用PERFORMING加法或CALLING加法指定的回调例程中未使用语句RECEIVE,则连接将保持不变,就像使用加法KEEPING TASK指定RECEIVE一样。  

尝试将两个BAPI(创建一个和提交一个)包装到Z. RFC函数中,并在并行任务中调用它。

哎,真难
4楼-- · 2020-09-20 23:49

正如我在原始答案中所说的,BAPI_PLANNEDORDER_CREATE 和BAPI_TRANSACTION_COMMIT必须位于同一LUW中,您不能在并行任务中调用BAPI_PLANNEDORDER_CREATE,而在主流程中不能具有BAPI_TRANSACTION_COMMIT。

或者您在JAVA端并行化Z..RFC调用,或者在第二个Z..RFC中同时包含两个BAPI,因此在主Z ...中,您可以在并行任务中调用第二个Z...。/p>


我很好奇您要创建多少个"大量"数据的计划订单。

能不能别闹
5楼-- · 2020-09-20 23:52

通话功能'BAPI_TRANSACTION_COMMIT'
导出< br> WAIT ='X'

BAPI提交使用"等待"选项。

haha101010
6楼-- · 2020-09-21 00:01

添加wait ='X'无效。

一周热门 更多>