点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
专家您好,
我需要删除旧的计划行并通过文件创建新的计划行。 我当时正在调频/SAPAPO/DM_PO_CHANGE。
当传递参数'Method'='D'" D进行删除时,计划行将通过FM删除。
但是,当我将文件参数映射到FM/SAPAPO/DM_PO_CHANGE的it_schedule参数时,使用" method"参数=" A"(表示添加的A)来创建新的计划行,则得到" LC_APP_ERROR"(sy-subrc = 3)。 我无法理解需要在it_schedule内部表中填充哪些参数才能创建新的计划行。
目前,我的代码如下所示-
<代码>
将lt_file循环到ls_file中。
ls_schedule -method ='A'。 " A代表添加
ls_schedule-orderid = ls_file-orderid。 "通过将ebeln(计划协议编号)转换为orderid来填充
ls_schedule-itemno = ls_file-itemno。
ls_schedule-schedno = ls_file-schedno。
通话功能'/SAPAPO/DATE_CONVERT_TIMESTAMP'
导出
iv_date = ls_file-avl_date
iv_time = sy-uzeit
导入
ev_timestamp = ls_schedule-avail_time。
通话功能'/SAPAPO/DATE_CONVERT_TIMESTAMP'
导出
iv_date = ls_file-ship_date
iv_time = sy-uzeit
导入
ev_timestamp = ls_schedule-gi_end_time。
ls_schedule-to_org_quantity = ls_file-sch_qty。
ls_schedule-to_ext_fixed = ls_file-fixed。
附加ls_schedule至lt_schedule。
ENDLOOP。
ls_gen_aprm-simversion ='000'。
通话功能'/SAPAPO/DM_PO_CHANGE'
导出
is_gen_params = ls_gen_parm
it_schedule = lt_schedule
导入
et_rc = lt_rc
et_sched_failures = lt_schd_fail
例外情况
lc_connect_failed = 1
lc_com_error = 2
lc_appl_error = 3
其他= 4。
我得到sy-subrc ='3'。
我想在这里添加的一件事是
我正在使用以下方法-
/SAPAPO/CMDS_TPSRC_GET-通过从文件传递EBELN来获取BZQID。
/SAPAPO/PWB_BZQID_GET_ORDER-通过传递从先前FM和IV_ORDER_TYPE ='16'接收的BZQID来获取结构ES_ORDKEY中的ORDERID。
如果我将iv_order_type传递为" 16"(用于调度协议),那么我会在FM/SAPPO/DM_PO_READ中获得日程表行的详细信息,但是如果我将iv_order_type传递为" 17"(发布计划),那么我将在FM/SAPAPO中获得发布日程表/DM_PO_READ。 类型" 16"的ORDERID与类型" 17"的ORDERID不同。
一旦我删除了订单类型" 16"的计划行,那么我就没有获得类型" 16"的订单号,而是只获得了订单类型" 17"的详细信息。
如果这是我无法添加新计划行的原因,那么有人可以建议一种更好的方法吗? 如何使用FM/Class方法删除旧的计划行并创建新的计划行?
致谢
Yayati Ekbote
专家您好,
我找到了一种创建计划行的方法。
<代码>
将lt_file放到ls_file中。
CALL FUNCTION'/SAPAPO/RRP_SOURCES_GET'
导出
iv_pegid = lv_pegid"以前是使用产品和位置找到的
iv_quantity = ls_file-sch_qty
iv_reqdat = ls_file-reqdat
iv_dialog = abap_false
iv_buffer_flg = abap_true
iv_order_create = abap_true
导入
et_source = lt_source
et_sources_valid = lt_src_vld
例外情况
user_canceled = 1
not_qualified = 2
unknown_error = 3
其他= 4。
使用键ebeln = ls_file-ebeln将表lt_src_vld读入数据(ls_src_vld)
ebelp = ls_file-itmno。
如果sy-subrc是INITIAL AND
ls_src_vld不是初始化的。
使用键trpid = ls_src_vld-trpid读取表lt_source到DATA(ls_src)中。
如果sy-subrc是INITIAL AND
ls_src不是INITIAL。
CALL FUNCTION'/SAPAPO/RRP_ORDER_CREATE'
导出
iv_pegid = lv_pegid
iv_quantity = ls_file-sch_qty
iv_scrap = 0
iv_rqmtti = lv_reqtti"日期已转换为时间戳记
iv_startti = lv_strtti"日期已转换为时间戳记
iv_firmed = abap_true
iv_priority = 0
is_source = ls_src
iv_application = lv_app
iv_dialog = abap_false
导入
ev_ordid = ls_srec-ordid
ev_schedid = ls_srec-schedid
ev_ordno = ls_srec-ordno
ev_position_no = ls_srec-posno
ev_line_no = ls_srec-linno
ev_subrc = ls_srec-subrc
ev_actid = ls_srec-actid
ev_io_time = ls_srec-iotim
ev_ippe_id = ls_srec-ippeid
ev_no_inputs = ls_srec-ipno
APPEND将ls_rec转到lt_rec。
清除ls_rec。
ENDLOOP。
在lt_rec INTO ls_rec中将LOOP AT定位到子订阅NE 0。
lv_fail = abap_true。
ENDLOOP。
如果lv_fail均衡器abap_false。
提交工作。
ENDIF。
但是,即使我确实提交工作,新创建的计划行也不会保存到系统中。
请让我知道我想念的东西。
我怀疑某些全局缓冲区表没有被填充。
如果是这种情况,谁能让我知道怎么做?
此致
Yayati Ekbote
已解决。 我使用了/SAPAPO/CL_TDL_LC_DS_DAO类的方法。
顺序使用的方法-
/SCMB/IF_TDL_DAO_GENERAL〜INIT
/SCMB/IF_TDL_DELIVERYSCHEDULE〜SET
/SCMB/IF_TDL_DAO_GENERAL〜SAVE_TO_DB
谢谢!
尊敬的先生,晚上好。 我想从记录集中删除某些记录。 我通过参考您的演示进行了尝试,但是我删除了该集中的所有记录,而不是其中的一些记录。 我很困惑,因为我找不到原因。 您能帮我看看我的代码在哪里吗?
代码附在下面:
创建对象zob_dao_ds。
LS_PARAM-PARAM ='USE_SIMSESSION'。
LTO US_ORDER-LOCIDTO。
。 -SDLID。 -BUYTYPE_CODE。 -SUPPLIER_BUYTYPE_CODE。 -ORIGQTY。 -OPENQTY。 -OPENQTY。 -AVAIL_TIME。 -GR_ -GI_TIME。 -TTYPE。 -FIXED。- FROM_CAT。 -TO_CAT。
回滚工作。
LS_PARAM-VALUE ='-'。
将LS_PARAM附加到LT_PARAM。
清除LS_PARAM。
LS_PARAM-PARAM ='VERSION_ID'。
LS_PARAM-VALUE ='000'。
将LS_PARAM追加到LT_PARAM。
清除LS_PARAM。
尝试。
调用方法ZOB_DAO_DS->/scmb/if_tdl_dao_general〜init
导出
it_init_paramtab = LT_PARAM。
。
捕获/scmb/cx_tdl_dao。
尝试。
清除lv_msg。
尝试。
调用方法ZOB_DAO_DS- >/SCMB/IF_TDL_DELIVERYSCHEDULE〜GET
导出
IV_VRSIOID ='000'
IT_ORDID = LT_ORDID
IT_MATIDLOCID = LT_MATID
* IT_SELPARAMS =
* IV_BUFFER_CTRL =/SCMB/CL
* IV_LOCKFLAG = ABAP_FALSE
导入
ET_ORDER = lt_order
更改
CV_MSGTY = lv_msg
CT_RETURN = lt_return。
捕获/SCMB/CX_TDL_DAO。
ENDTRY。 >
数据LV_ITEMNO类型/SCMB/TDL_DELPS。
数据LV_NO TYPE/SCMB/TDL_RLINE。
数据LS_NO类型/SCMB/TDL_RLINE。
数据LT_NO TYPE标准。/SCMB/TDL_RLINE的表。
*数据ls_item类型/SCMB/TDL_DS_SDL_STR。
清除LV_TABIX。
如果LT_ORDER []不初始化 。
将LT_ORDER放入US_ORDER中。
LS_ORDER-ORDNO = US_ORDER-ORDNO。
LS_ORDER-ITEMNO = US_ORDER-ITEMNO。
LS_ORDER-VRSIOID = US_ORDER-VRSIOID。< br> LS_ORDER-ORDID = US_ORDER-ORDID。
LS_ORDER-LOCIDFROM = US_ORDER-LOCIDFROM。
LS_ORDER-BZQID = US_ORDER-BZQID。
LS_ORDER-TRPID = US_ORDER-TRPID =
LS_ORDER-MATID = US_ORDER-MATID。
LS_ORDER-APPRVL_STATE = US_ORDER-APPRVL_STATE。
LS_ORDER-NOTE_EXISTS = US_ORDER-NOTE_EXISTS。
LV_ITEMNO。
LV_ITEMNO = US_ORDER-ITEMNO。
在GT_IO处循环ORDNO = US_ORDER-ORDNO AND
POSITION_NO = LV_ITEMNO。
调用功能'CONVERSION_EXIT_ALPHA_IN >导出
输入= GT_IO-LINE_NO
导入
输出= GT_IO-LINE_NO
。
清除LV_NO。
LV_NO = GT_IO-LINE_N O.
用键SCHEDNO = LV_NO。
IF SY-SUBRC = 0读取表US_ORDER-ITEM分配
LS_ITEM-SDLID =
LS_ITEM -BUYTYPE_CODE =
LS_ITEM-SUPPLIER_BUYTYPE_CODE =
LS_ITEM-ORIGQTY =
LS_ITEM-RECQTY =。 > LS_ITEM-OPENQTY =
LS_ITEM-OPENQTY =
LS_ITEM-AVAIL_TIME =
LS_ITEM-GR_TIME =
LS_ITEM-GI_TIME =
LS_ITEM-TTYPE =
LS_ITEM-FIXED =
LS_ITEM-FROM_CAT =
LS_ITEM-TO_CAT =
LS_ITEM-SCHEDNO = LV_NO。
将LS_ITEM追加到LS_ORDER-ITEM。
ELSE。
继续。
ENDIF。
CLEAR LS_ITEM。
CLEAR GT_IO。
ENDLOOP。
将LS_ORDER追加到UT_ORDER。
CLEAR LS_ORDER。
CLEAR US_ORDER。
> ENDLOOP。
ENDIF。
如果是Ut_o rder不是INITIAL。
TRY。
呼叫方法ZOB_DAO_DS->/SCMB/IF_TDL_DELIVERYSCHEDULE〜SET
EXPORTING
IV_VRSIOID ='000'
IT_ORDER = Ut_order
CHANGING < br> * CV_MSGTY =
CT_RETURN = ut_return。
。
CATCH/SCMB/CX_TDL_DAO。
ENDTRY。
ENDIF。
TRY。
致电 方法ZOB_DAO_DS->/SCMB/IF_TDL_DELIVERYSCHEDULE〜DELETE
导出
IV_VRSIOID ='000'
IT_ORDID = lt_ORDID
CHANGING
* CV_MSGTY =
CT_RETURN = UT_RETURN。 SCMB/CX_TDL_DAO。
ENDTRY。
TRY。
呼叫方法ZOB_DAO_DS->/SCMB/IF_TDL_DAO_GENERAL〜SAVE_TO_DB
更改
* CV_MSGTY =
CT_RETURN = LT_RETTAB。
。
捕捉/SCMB/CX_TDL_DAO。
ENDTRY。
TRY。
呼叫方法ZOB_DAO_DS->/SCMB/IF_TDL_DAO_GENERAL〜FREE
。
捕捉/SCMB/CX_TDL_DAO。
回滚工作。
ENDTRY。
非常感谢您的帮助。 期待您的回音。
最好的问候!
艾米莉。
一周热门 更多>