- 在vbak中附加结构中增强字段 ,注意事先不需要创建结构,否则输入你创建的结构名是会报错:结构已存在
- 在结构bape_vbak同时增强相同的字段、同时在bape_vbakx结构中增强一个字段名相同但类型为char1的字段
- 在vbakkoz、vbakkozx中重复第2步的操作
- 调用bapi:BAPI_SALESORDER_CHANGE修改订单 ,一下代码修改vbak的增强字段zsostats的值为99 ,同时修改行项目的计划行的需求类型为CN
* Header CLEAR: ls_headerx, ls_header. ls_headerx-updateflag = 'U'. CLEAR ls_bape_vbak. ls_bape_vbak-vbeln = pv_vbeln . ls_bape_vbak-zsostats = '99' . CLEAR ls_bape_vbakx. ls_bape_vbakx-vbeln = pv_vbeln . ls_bape_vbakx-zsostats = 'X' . it_parex-structure = 'BAPE_VBAK'. it_parex+30 = ls_bape_vbak. APPEND it_parex. it_parex-structure = 'BAPE_VBAKX'. it_parex+30 = ls_bape_vbakx. APPEND it_parex. SELECT * INTO TABLE lt_vbap FROM vbap WHERE vbeln = pv_vbeln . LOOP AT lt_vbap INTO ls_vbap. CLEAR ls_schdl . ls_schdl-itm_number = ls_vbap-posnr. ls_schdl-sched_line = '0001'. ls_schdl-sched_type = 'CN' . APPEND ls_schdl TO lt_schdl . CLEAR ls_schdlx . ls_schdlx-itm_number = ls_vbap-posnr. ls_schdlx-sched_line = '0001'. ls_schdlx-sched_type = 'X' . ls_schdlx-updateflag = 'U' . APPEND ls_schdlx TO lt_schdlx . * CLEAR ls_item . * ls_item-itm_number = ls_vbap-posnr. * APPEND ls_item TO lt_item . * CLEAR ls_itemx . * ls_itemx-itm_number = ls_vbap-posnr. * ls_schdlx-updateflag = 'U' . * APPEND ls_itemx TO lt_itemx . ENDLOOP. CALL FUNCTION 'BAPI_SALESORDER_CHANGE' EXPORTING salesdocument = pv_vbeln order_header_in = ls_header order_header_inx = ls_headerx TABLES return = lt_return * order_item_in = lt_item * order_item_inx = lt_itemx * order_text = lt_text schedule_lines = lt_schdl schedule_linesx = lt_schdlx extensionin = it_parex. SORT lt_return BY type . READ TABLE lt_return INTO ls_return WITH KEY type = 'E' BINARY SEARCH . IF sy-subrc EQ 0. pv_type = 'E' . CLEAR :lv_message, lv_msgno,lv_msgv1 ,lv_msgv2, lv_msgv3,lv_msgv4 . lv_msgno = ls_return-number . lv_msgv1 = ls_return-message_v1 . lv_msgv2 = ls_return-message_v2 . lv_msgv3 = ls_return-message_v3 . lv_msgv4 = ls_return-message_v4 . CALL FUNCTION 'RP_READ_T100' EXPORTING arbgb = ls_return-id msgnr = lv_msgno msgv1 = lv_msgv1 msgv2 = lv_msgv2 msgv3 = lv_msgv3 msgv4 = lv_msgv4 sprsl = sy-langu IMPORTING text = lv_message. pv_message = lv_message . CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' . ELSE. pv_type = 'S' . CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. ENDIF.
-
如果不在vbakkoz、vbakkozx中增强相同字段话,增强字段的值是写不进去的
-
以此类推 行项目的增强修改增强字段的为vbap、bape_vbap、bape_vbapx、vbapxoz、vbapxozx
-
在sap s/4 hana中订单的条件数据不在表konv中,而是在表prcd_elements中
-
取订单详情的bapi为BAPISDORDER_GETDETAILEDLIST,一下代码是为了取条件数据的。改bapi可以一次取多个订单的数据
lv_bapi_view-sdcond = 'X' . LOOP AT pt_data. CLEAR ls_sales_documents . ls_sales_documents-vbeln = pt_data-vbeln . APPEND ls_sales_documents TO lt_sales_documents . ENDLOOP. CALL FUNCTION 'BAPISDORDER_GETDETAILEDLIST' EXPORTING i_bapi_view = lv_bapi_view * I_MEMORY_READ = * I_WITH_HEADER_CONDITIONS = ' ' TABLES sales_documents = lt_sales_documents * ORDER_HEADERS_OUT = * ORDER_ITEMS_OUT = * ORDER_SCHEDULES_OUT = * ORDER_BUSINESS_OUT = * ORDER_PARTNERS_OUT = * ORDER_ADDRESS_OUT = * ORDER_STATUSHEADERS_OUT = * ORDER_STATUSITEMS_OUT = order_conditions_out = pt_order_conditions * ORDER_COND_HEAD = * ORDER_COND_ITEM = * ORDER_COND_QTY_SCALE = * ORDER_COND_VAL_SCALE = * ORDER_CONTRACTS_OUT = * ORDER_TEXTHEADERS_OUT = * ORDER_TEXTLINES_OUT = * ORDER_FLOWS_OUT = * ORDER_CFGS_CUREFS_OUT = * ORDER_CFGS_CUCFGS_OUT = * ORDER_CFGS_CUINS_OUT = * ORDER_CFGS_CUPRTS_OUT = * ORDER_CFGS_CUVALS_OUT = * ORDER_CFGS_CUBLBS_OUT = * ORDER_CFGS_CUVKS_OUT = * ORDER_BILLINGPLANS_OUT = * ORDER_BILLINGDATES_OUT = * ORDER_CREDITCARDS_OUT = * EXTENSIONOUT = .
-
以上是销售订单抬头的字段增强,再扩展一下,行项目的字段增强,除了在表vbap中增强以外,还要在结构vbapkoz、vbapkozx增强字段,要注意的是vbapkozx中增强字段类型要使用char1或char01 ,不要使用BAPIUPDATE,订单修改的bapi中写死了只识别char1和char01 ,在这种情况下,参数order_item_inx-updateflag = 'U'无效,修改不了增强的字段;此情况也可以绕过,参数设置order_item_inx-updateflag = 'I'。bapi的参数中增强使用bape_vbap和bape_vbapx两个结构。还有要注意的是如果要修改订单行项目的数量 需要 order_item_in 和 schedule_lines ,行项目数据和计划行数据同时修改才可以生效
SAP 销售订单的字段增强
最新推荐文章于 2024-08-29 13:53:09 发布