如何使用BAPI_CUSTOMERQUOTATION_CHANGE填写报价-项目级别的净价和净值?

2020-09-19 20:24发布

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

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


大家好,

能否请您告诉我为什么当我使用BAPI_CUSTOMERQUOTATION_CHANGE创建报价项目时,为什么要使用导入结构CONDITIONS_IN和CONDITIONS_INX来维护客户特定物料的净价格和净值,因此bapi都不会填写这些列( 值保持为零),也不会在以下返回错误?

在lt_cond INTO ls_cond中循环,其中sd_doc = ls_items_info-doc_number和itm_number = ls_items_info-itm_number。
如果ls_cond-cond_type不是INITIAL。
MOVE对应于ls_cond CLEAR_ls_cond CLEAR。 。
APPEND将ls_cond_in转换为lt_cond_in。
ENDIF。
ENDLOOP。

lr_descr?= cl_abap_typedescr => describe_by_data(ls_cond_inx)。
lt_details [] = lr_descr-> components []。
LOOP AT lt_cond_in INTO ls_cond_in。
CLEAR Ls_lt_condinx。 ls_comp。
CONCATENATE'LS_COND_INX''-'ls_comp-name INTO lv_field。
如果lv_field NE'LS_COND_INX-ITM_NUMBER'AND lv_field NE'LS_COND_INX-COND_ST_NO'
AND lv_field'-IN_LS_COND NE'LS_COND_INX-COND_TYPE'。
ASSIGN(lv_field)TO
='X'。
ENDIF。
ENDLOOP。

ls_cond_inx-itm_number = ls_cond_in-itm_number。 " insert
APPEND ls_cond_inx TO lt_cond_inx。
ENDLOOP。

ls_header-updateflag ='U'。 " update
ls_logic_switch-cond_handl ='X'。
ls_logic_switch-pricing ='C'。
通话功能'BAPI_CUSTOMERQUOTATION_CHANGE'
导出
salesdocument = p_doc
quotation_header_inx = ls_header > logic_switch = ls_logic_switch
表格
return = lt_return
quotation_item_in = lt_item_in
quotation_item_inx = lt_item_inx
conditions_in = lt_cond_in
conditions_inx = lt_cond_line
quotation_text = lt_texts
extensionex = lt_ext_in。

当未填充来自结构LOGIC_SWITCH的字段PRICING时触发错误,但是当我使用C进行设置(复制手动定价元素并重新确定其他定价元素)时,会创建物料,但净值和净价仍为零 (未填充)。

对此主题有任何意见!

亲切的问候,

安德里亚

capture.jpg (65.7 kB)

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

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


大家好,

能否请您告诉我为什么当我使用BAPI_CUSTOMERQUOTATION_CHANGE创建报价项目时,为什么要使用导入结构CONDITIONS_IN和CONDITIONS_INX来维护客户特定物料的净价格和净值,因此bapi都不会填写这些列( 值保持为零),也不会在以下返回错误?

在lt_cond INTO ls_cond中循环,其中sd_doc = ls_items_info-doc_number和itm_number = ls_items_info-itm_number。
如果ls_cond-cond_type不是INITIAL。
MOVE对应于ls_cond CLEAR_ls_cond CLEAR。 。
APPEND将ls_cond_in转换为lt_cond_in。
ENDIF。
ENDLOOP。

lr_descr?= cl_abap_typedescr => describe_by_data(ls_cond_inx)。
lt_details [] = lr_descr-> components []。
LOOP AT lt_cond_in INTO ls_cond_in。
CLEAR Ls_lt_condinx。 ls_comp。
CONCATENATE'LS_COND_INX''-'ls_comp-name INTO lv_field。
如果lv_field NE'LS_COND_INX-ITM_NUMBER'AND lv_field NE'LS_COND_INX-COND_ST_NO'
AND lv_field'-IN_LS_COND NE'LS_COND_INX-COND_TYPE'。
ASSIGN(lv_field)TO
='X'。
ENDIF。
ENDLOOP。

ls_cond_inx-itm_number = ls_cond_in-itm_number。 " insert
APPEND ls_cond_inx TO lt_cond_inx。
ENDLOOP。

ls_header-updateflag ='U'。 " update
ls_logic_switch-cond_handl ='X'。
ls_logic_switch-pricing ='C'。
通话功能'BAPI_CUSTOMERQUOTATION_CHANGE'
导出
salesdocument = p_doc
quotation_header_inx = ls_header > logic_switch = ls_logic_switch
表格
return = lt_return
quotation_item_in = lt_item_in
quotation_item_inx = lt_item_inx
conditions_in = lt_cond_in
conditions_inx = lt_cond_line
quotation_text = lt_texts
extensionex = lt_ext_in。

当未填充来自结构LOGIC_SWITCH的字段PRICING时触发错误,但是当我使用C进行设置(复制手动定价元素并重新确定其他定价元素)时,会创建物料,但净值和净价仍为零 (未填充)。

对此主题有任何意见!

亲切的问候,

安德里亚

capture.jpg (65.7 kB)
付费偷看设置
发送
2条回答
SC_Yao
1楼 · 2020-09-19 21:05.采纳回答

" bapi既不填充列(值仍然为零),也不在下面返回错误?"

如果BAPI没有返回错误,那么您在哪里从屏幕快照中获得了错误消息? 我很困惑...

假设这是"翻译丢失"的情况,而您的意思是说错误是由BAPI返回的,我建议检查该"计数器"消息是否有长文本。 另外,如果显示"不得填写计数器",那么也许只是不将其填写在您的代码中? 那将是ls_cond_inx-cond_count字段。

否则,您可能可以在调试器中为此消息设置观察点,然后查看确切的位置。 我假设您已经阅读了BAPI的文档,并检查了是否有任何SAP注释。

我还假设这是一个有效的方案,即可以在事务VA22中更改定价。 因为BAPI无法完成事务本身无法完成的工作。

Cikesha
2楼-- · 2020-09-19 21:21

嗨,耶利娜,

感谢您的回答。 实际上,交易VA22的行为是无法填充我用于测试的此类客户物料的净价和净值,因此用户可以手动填充它。 但是VA21中的"带参考复制"选项正在复制值,因此我假设此BAPI也将填写它。 但是我可能会误会,此BAPI只能执行VA22可以执行的操作,而不考虑"带引用复制"的情况。

非常感谢

安德里亚

一周热门 更多>