物料主数据后台表
MARA 基本视图
MAKT 物料描述
MARM 计量单位
MARC 工厂数据
MARD 仓储数据
MBEW 物料评估
MVKE 销售数据
QMAT 质检相关的表
物料主数据各视图是否有维护都记录在表 MARA 的字段 VPSTA 和 PSTAT 中。通过分析这两个字段,就可以知道该物料主数据各视图的维护状态。和工厂相关的视图在MARC的PSTAT中
PSTAT:只包含手动创建的视图清单 。
VPSTA:这个字段包含为物料所创建的视图,请注意这个字段也包含了为相关视图自动创建的值(例如:Plant stock (X) 和 Storage stock (Z) 是自动创建的) 。
这段引用

说一说BAPI_MATERIAL_SAVEDATA的使用过程
根据配置表扩展创建物料工厂销售分类视图
*&---------------------------------------------------------------------*
*& Form frm_get_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_data .
DATA: lw_zmmt023 TYPE zmmt023,
lv_mmsta TYPE mmsta,
lv_vmsta TYPE vmsta,
ls_marc TYPE marc,
returnmes LIKE bapi_matreturn2 OCCURS 0 WITH HEADER LINE.
DATA: gs_taxclass TYPE bapi_mlan.
DATA: gt_taxclass TYPE STANDARD TABLE OF bapi_mlan,
lt_alloc_list TYPE TABLE OF bapi1003_alloc_list,
lt_class TYPE TABLE OF bapiret2,
ls_class TYPE bapiret2.
DATA lv_objectkeynew TYPE bapi1003_key-object.
DATA lt_return2 TYPE STANDARD TABLE OF bapiret2.
CLEAR: lt_mara,ls_head,gs_sale,gs_salex,ls_plant,ls_plantx,gs_taxclass,gt_taxclass .
SELECT * FROM mara
WHERE ersda IN @s_date
AND created_at_time IN @s_time
AND matnr IN @s_matnr
INTO CORRESPONDING FIELDS OF TABLE @lt_mara.
SORT lt_mara.
DELETE ADJACENT DUPLICATES FROM lt_mara COMPARING ALL FIELDS.
SELECT * FROM zmmt023 INTO TABLE @DATA(lt_zmmt023).
LOOP AT lt_mara ASSIGNING FIELD-SYMBOL(<fs_mara>).
CLEAR ls_head.
ls_head-ind_sector = <fs_mara>-mbrsh. "行业
ls_head-material = <fs_mara>-matnr.
ls_head-material_long = <fs_mara>-matnr.
ls_head-matl_type = <fs_mara>-mtart.
ls_head-basic_view = 'X'.
ls_head-sales_view = 'X'.
LOOP AT lt_zmmt023 INTO lw_zmmt023 . "工厂视图
CLEAR: ls_output,ls_plant,ls_plantx, ls_return,lv_mmsta ,lv_vmsta.
ls_head-storage_view = 'X'.
ls_plant-plant = lw_zmmt023-werks.
ls_plantx-plant = lw_zmmt023-werks.
ls_output-matnr = ls_head-material.
ls_output-werks = lw_zmmt023-werks.
CLEAR:lv_mmsta,ls_marc,returnmes[].
SELECT SINGLE * FROM marc WHERE matnr = @<fs_mara>-matnr AND werks = @lw_zmmt023-werks INTO @ls_marc.
IF sy-subrc = 0.
lv_mmsta = ls_marc-mmsta.
ENDIF.
SELECT SINGLE vmsta FROM mvke WHERE matnr = @<fs_mara>-matnr AND vkorg = @lw_zmmt023-werks INTO @lv_vmsta.
IF lv_mmsta IS INITIAL OR lv_vmsta IS INITIAL.
IF ls_head-matl_type EQ 'Z008' OR ls_head-matl_type EQ 'Z005' .
IF lv_mmsta IS INITIAL .
ls_plant-pur_status = '20'.
ls_plantx-pur_status = abap_true.
ENDIF.
IF lv_vmsta IS INITIAL . "销售视图
gs_sale-sal_status = '20'.
gs_salex-sal_status = 'X'.
ENDIF.
ELSE.
IF lv_mmsta IS INITIAL .
ls_plant-pur_status = '10'.
ls_plantx-pur_status = abap_true.
ENDIF.
IF lv_vmsta IS INITIAL .
gs_sale-sal_status = '10'.
gs_salex-sal_status = 'X'.
ENDIF.
ENDIF.
IF lv_mmsta IS INITIAL.
ls_plant-availcheck = 'Z2'.
ls_plantx-availcheck = 'X'.
ENDIF.
IF lv_vmsta IS INITIAL.
gs_sale-sales_org = lw_zmmt023-werks. "
gs_sale-distr_chan = '00'.
gs_sale-delyg_plnt = lw_zmmt023-werks. "交货工厂
gs_sale-valid_from = sy-datum.
gs_salex-valid_from = 'X'.
IF ls_head-matl_type EQ 'Z009'.
gs_sale-item_cat = 'ZNR1'.
gs_sale-acct_assgt = 'Z1'.
ELSE.
gs_sale-item_cat = 'ZNR3'.
gs_sale-acct_assgt = 'Z2'.
ENDIF.
gs_salex-sales_org = lw_zmmt023-werks.
gs_salex-distr_chan = '00'.
gs_salex-delyg_plnt = 'X'.
gs_salex-item_cat = 'X'.
gs_salex-acct_assgt = 'X'.
"SET_TAXCLASS_DATA
IF lw_zmmt023-werks = '3000'.
gs_taxclass-depcountry = 'MX'.
gs_taxclass-depcountry_iso = 'MX'.
ELSE.
gs_taxclass-depcountry = 'CN'.
gs_taxclass-depcountry_iso = 'CN'.
ENDIF.
gs_taxclass-tax_type_1 = 'MWST'.
gs_taxclass-taxclass_1 = '1'.
APPEND gs_taxclass TO gt_taxclass.
ENDIF.
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
EXPORTING
headdata = ls_head
plantdata = ls_plant
plantdatax = ls_plantx
salesdata = gs_sale
salesdatax = gs_salex
IMPORTING
return = ls_return
TABLES
returnmessages = returnmes[]
taxclassifications = gt_taxclass.
IF ls_return-type = 'S'.
" 提交事务
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ls_output-type = 'S'.
ls_output-message = | { <fs_mara>-matnr }: { ls_return-message }|.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ls_output-type = 'E'.
ls_output-message = | { <fs_mara>-matnr }: { ls_return-message }|.
ENDIF.
READ TABLE returnmes INTO DATA(ls_nmes) WITH KEY type = ' E'.
ls_output-type1 = ls_nmes-type.
ls_output-message1 = ls_nmes-message .
APPEND ls_output TO lt_output.
CLEAR:lw_zmmt023.
ENDIF.
ENDLOOP.
CLEAR:lt_return2,lv_objectkeynew.
"创建分类视图
lv_objectkeynew = <fs_mara>-matnr .
CALL FUNCTION 'BAPI_OBJCL_GETCLASSES'
EXPORTING
objectkey_imp = lv_objectkeynew
objecttable_imp = 'MARA'
classtype_imp = '023'
* READ_VALUATIONS =
* KEYDATE = SY-DATUM
* LANGUAGE = SY-LANGU
TABLES
alloclist = lt_alloc_list
* ALLOCVALUESCHAR =
* ALLOCVALUESCURR =
* ALLOCVALUESNUM =
return = lt_class.
READ TABLE lt_class INTO ls_class WITH KEY type = 'S'.
IF sy-subrc <> 0.
CALL FUNCTION 'BAPI_OBJCL_CREATE'
EXPORTING
objectkeynew = lv_objectkeynew
objecttablenew = 'MARA'
classnumnew = 'Z_BATCH_PURCHASED'
classtypenew = '023'
standardclass = 'X'
TABLES
return = lt_return2.
READ TABLE lt_return2 INTO DATA(ls_return2) WITH KEY type = 'E'.
IF sy-subrc <> 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ls_output-type = 'E'.
ls_output-message = | { <fs_mara>-matnr }: { ls_return2-message }|.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM.
修改创建物料工厂销售分类视图
*&---------------------------------------------------------------------*
*& Form frm_init_screen
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_init_screen .
CLEAR: s_date.
s_date-low = sy-datum.
s_date-high = sy-datum.
APPEND s_date.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_get_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_data .
DATA: ls_head TYPE bapimathead,
ls_plant TYPE bapi_marc,
ls_plantx TYPE bapi_marcx,
lt_return TYPE TABLE OF bapiret2,
lt_mara TYPE TABLE OF mara,
ls_return TYPE bapiret2,
ls_clientdata TYPE bapi_mara,
ls_clientdatax TYPE bapi_marax,
returnmes LIKE bapi_matreturn2 OCCURS 0 WITH HEADER LINE..
DATA: gs_taxclass TYPE bapi_mlan.
DATA: gt_taxclass TYPE STANDARD TABLE OF bapi_mlan,
lt_alloc_list TYPE TABLE OF bapi1003_alloc_list,
lt_class TYPE TABLE OF bapiret2,
ls_class TYPE bapiret2.
DATA lv_objectkeynew TYPE bapi1003_key-object.
DATA lt_return2 TYPE STANDARD TABLE OF bapiret2.
DATA lv_flag TYPE c LENGTH 1.
CLEAR: lt_mbew, lt_marc,lt_mvke,lv_flag .
SELECT * FROM mbew
WHERE matnr IN @s_matnr
AND bwkey IN @s_werks
AND laepr IN @s_date
INTO TABLE @lt_mbew.
SELECT * FROM marc
WHERE matnr IN @s_matnr
AND werks IN @s_werks
INTO TABLE @lt_marc.
SELECT * FROM mvke
WHERE matnr IN @s_matnr
AND vkorg IN @s_werks
INTO TABLE @lt_mvke.
SELECT * FROM mara
WHERE matnr IN @s_matnr
INTO TABLE @lt_mara.
LOOP AT lt_mbew ASSIGNING FIELD-SYMBOL(<fs_mbew>).
IF <fs_mbew>-stprs > '0'.
CLEAR: ls_head,lv_flag.
READ TABLE lt_marc INTO DATA(ls_marc) WITH KEY matnr = <fs_mbew>-matnr werks = <fs_mbew>-bwkey.
IF sy-subrc = 0 AND ls_marc-mmsta <> '20'.
ls_head-basic_view = 'X'.
ls_plant-plant = <fs_mbew>-bwkey.
ls_plantx-plant = <fs_mbew>-bwkey.
ls_plant-pur_status = '20'.
ls_plantx-pur_status = abap_true.
lv_flag = 'X'.
ENDIF.
READ TABLE lt_mvke INTO DATA(ls_mvke) WITH KEY matnr = <fs_mbew>-matnr vkorg = <fs_mbew>-bwkey.
IF sy-subrc = 0 AND ls_mvke-vmsta <> '20'.
ls_head-sales_view = 'X'.
gs_sale-sal_status = '20'.
gs_salex-sal_status = 'X'.
gs_sale-sales_org = <fs_mbew>-bwkey. "
gs_sale-distr_chan = ls_mvke-vtweg.
gs_sale-valid_from = sy-datum.
gs_salex-valid_from = 'X'.
gs_salex-sales_org = <fs_mbew>-bwkey.
gs_salex-distr_chan = ls_mvke-vtweg.
lv_flag = 'X'.
ENDIF.
IF lv_flag = 'X'.
ls_head-material = <fs_mbew>-matnr.
READ TABLE lt_mara INTO DATA(ls_mara) WITH KEY matnr = <fs_mbew>-matnr .
IF sy-subrc = 0.
ls_head-matl_type = ls_mara-mtart.
ls_head-ind_sector = ls_mara-mbrsh.
* ls_clientdata-matl_group = ls_mara-matkl.
* ls_clientdatax-matl_group = 'X'.
ENDIF.
ls_output-matnr = <fs_mbew>-matnr.
ls_output-werks = <fs_mbew>-bwkey.
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
EXPORTING
headdata = ls_head
* clientdata = ls_clientdata
* clientdatax = ls_clientdatax
plantdata = ls_plant
plantdatax = ls_plantx
salesdata = gs_sale
salesdatax = gs_salex
IMPORTING
return = ls_return
TABLES
returnmessages = returnmes[].
* taxclassifications = gt_taxclass.
IF ls_return-type = 'S'.
" 提交事务
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ls_output-type = 'S'.
ls_output-message = | { <fs_mbew>-matnr }: { ls_return-message }|.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ls_output-type = 'E'.
ls_output-message = | { <fs_mbew>-matnr }: { ls_return-message }|.
ENDIF.
READ TABLE returnmes INTO DATA(ls_nmes) WITH KEY type = ' E'.
ls_output-type1 = ls_nmes-type.
ls_output-message1 = ls_nmes-message .
APPEND ls_output TO lt_output.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_output_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_output_alv .
TRY .
cl_salv_table=>factory(
IMPORTING
r_salv_table = go_alv
CHANGING
t_table = lt_output ).
CATCH cx_salv_msg.
ENDTRY.
DATA: lo_tabdescr TYPE REF TO cl_abap_structdescr.
DATA: ls_field_in TYPE dfies,
lt_dfies TYPE ddfields.
DATA:lv_fname TYPE lvc_fname,
lv_short TYPE scrtext_s,
lv_medium TYPE scrtext_m,
lv_long TYPE scrtext_l.
lo_tabdescr ?= cl_abap_structdescr=>describe_by_data( ls_output ).
CALL METHOD cl_salv_data_descr=>read_structdescr
EXPORTING
r_structdescr = lo_tabdescr
RECEIVING
t_dfies = lt_dfies.
PERFORM frm_get_tabname TABLES lt_dfies USING 'ls_output'. "auto get tablename
"===自动赋值fieldcat===
LOOP AT lt_dfies INTO ls_field_in.
CLEAR: gs_fieldcat.
CLEAR: lv_short ,lv_medium ,lv_long ,lv_fname .
MOVE-CORRESPONDING ls_field_in TO gs_fieldcat.
gs_fieldcat-ref_table = ls_field_in-reftable. "参照类型的表,搜索帮助,域控制
gs_fieldcat-ref_field = ls_field_in-reffield. "参照类型字段
IF ls_field_in-tabname IS NOT INITIAL. "当COLTEXT不存在显示FILEDTEXT,如字段没域,只有手工描述的情况.
lv_medium = ls_field_in-scrtext_m .
go_alv->get_columns( )->get_column( lv_fname )->set_medium_text( lv_medium ).
ENDIF.
ENDLOOP.
"自动列宽
go_alv->get_columns( )->set_optimize( 'X' ).
"斑马线
go_alv->get_display_settings( )->set_striped_pattern( 'X' ).
"set selection mode 可以行列进行选择
go_alv->get_selections( )->set_selection_mode( if_salv_c_selection_mode=>row_column ).
*******标准按钮和自定义状态使用一个就好
"标准按钮
go_alv->get_functions( )->set_all( abap_true ). "将激活所以的ALV内置通用按钮
"显示
go_alv->display( ).
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_TABNAME
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LT_DFIES
*& --> P_
*&---------------------------------------------------------------------*
FORM frm_get_tabname TABLES t_dfies TYPE ddfields USING tabname TYPE tfdir-funcname.
" source container
DATA: BEGIN OF ls_abap_source,
line TYPE char300,
END OF ls_abap_source,
lt_abap_source LIKE TABLE OF ls_abap_source.
DATA: lt_fieldinfo_old LIKE fieldinfo OCCURS 10 WITH HEADER LINE.
CLASS cx_sy_read_src_line_too_long DEFINITION LOAD.
DATA: ex_too_long TYPE REF TO cx_sy_read_src_line_too_long.
TRY.
READ REPORT sy-repid INTO lt_abap_source.
CATCH cx_sy_read_src_line_too_long INTO ex_too_long.
MESSAGE '一行代码超过300个字符' TYPE 'S' DISPLAY LIKE 'E'.
ENDTRY.
CALL FUNCTION 'ABAP_SCAN_DATA_DESCRIPTION'
EXPORTING
structure_name = tabname
main_program_name = sy-cprog
i_context = 'X'
TABLES
abap_source = lt_abap_source
ddic_fieldinfo = lt_fieldinfo_old
ddic_fieldinfo2 = gt_fieldinfo
EXCEPTIONS
source_not_accepted = 0
OTHERS = 0.
LOOP AT t_dfies ASSIGNING FIELD-SYMBOL(<lfs_dfies>).
IF <lfs_dfies>-reftable IS INITIAL. "auto set tablename
READ TABLE gt_fieldinfo INTO gs_fieldinfo WITH KEY fieldname = <lfs_dfies>-fieldname.
IF sy-subrc = 0.
SPLIT gs_fieldinfo-name AT '-' INTO <lfs_dfies>-reftable <lfs_dfies>-reffield.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM.
SAP 扩充质量视图BAIP BAPI_MATERIAL_SAVEDATA
MM50也可以查到没有维护的物料视图并复制参照物料工厂视图到另外一个工厂
会计1,成本1,采购,质量视图复制其他工厂到1200
*&---------------------------------------------------------------------*
*& Include ZMME053_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form frm_init_screen
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_init_screen .
CLEAR: s_date.
s_date-low = sy-datum.
s_date-high = sy-datum.
APPEND s_date.
CLEAR: s_time.
s_time-high = '235959'.
APPEND s_time.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_get_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_data.
DATA lt_mara TYPE TABLE OF mara.
DATA lt_marc TYPE TABLE OF marc.
DATA: lt_mbew TYPE TABLE OF mbew,
lt_steuertab TYPE TABLE OF mg03steuer,
gs_taxclass TYPE bapi_mlan,
gt_taxclass TYPE STANDARD TABLE OF bapi_mlan,
ls_mbew TYPE mbew,
ls_return TYPE bapiret2,
ls_plant TYPE bapi_marc,
ls_plantx TYPE bapi_marcx,
returnmes LIKE bapi_matreturn2 OCCURS 0 WITH HEADER LINE,
ls_qmat TYPE qmat,
lt_qmat TYPE TABLE OF qmat.
DATA valuationdata TYPE bapi_mbew. " 评估数据
DATA valuationdatax TYPE bapi_mbewx.
DATA lt_inspectionctrl TYPE TABLE OF bapi1001004_qmat.
DATA ls_inspectionctrl TYPE bapi1001004_qmat.
DATA lt_return TYPE TABLE OF bapiret2.
" TODO: variable is assigned but never used (ABAP cleaner)
DATA ls_tq34 TYPE tq34.
CLEAR: lt_mara, lt_marc, lt_mbew, lt_steuertab, gs_taxclass,gt_taxclass,ls_mbew,ls_return,ls_plant,ls_plantx,returnmes[],
valuationdata, valuationdatax, lt_inspectionctrl, ls_inspectionctrl, lt_return, ls_tq34,ls_qmat.
SELECT * FROM mara
WHERE ersda IN @s_date
AND created_at_time IN @s_time
AND matnr IN @s_matnr
INTO CORRESPONDING FIELDS OF TABLE @lt_mara.
SORT lt_mara BY matnr.
DELETE ADJACENT DUPLICATES FROM lt_mara COMPARING matnr.
IF lt_mara IS INITIAL.
RETURN.
ENDIF.
SELECT a~*
FROM marc AS a
INNER JOIN
@lt_mara AS b ON a~matnr = b~matnr
WHERE a~werks IN ( '1000', '1100' )
INTO CORRESPONDING FIELDS OF TABLE @lt_marc.
SORT lt_marc BY matnr
werks.
DELETE ADJACENT DUPLICATES FROM lt_marc COMPARING matnr werks.
SELECT * FROM mbew
WHERE matnr IN @s_matnr
AND bwkey IN ( '1000', '1100' )
INTO TABLE @lt_mbew.
SORT lt_marc BY matnr
werks.
DELETE ADJACENT DUPLICATES FROM lt_marc COMPARING matnr werks.
LOOP AT lt_marc ASSIGNING FIELD-SYMBOL(<fs_marc>).
READ TABLE lt_mara INTO DATA(ls_mara) WITH KEY matnr = <fs_marc>-matnr BINARY SEARCH.
IF sy-subrc = 0.
ls_head-material = <fs_marc>-matnr.
ls_head-matl_type = ls_mara-mtart.
ls_head-ind_sector = ls_mara-mbrsh.
ls_plant-plant = '1200'.
ls_plantx-plant = '1200'.
ENDIF.
ls_output-matnr = <fs_marc>-matnr.
ls_output-werks = '1200'.
SELECT SINGLE * FROM marc WHERE matnr = @<fs_marc>-matnr AND werks = '1200' INTO @DATA(ls_marc).
IF sy-subrc = 0.
IF ls_marc-pstat NA 'Q'. "质量视图
ls_head-quality_view = 'X'.
ELSEIF ls_marc-pstat NA 'B'. " 会计视图
ls_head-account_view = 'X'.
ELSEIF ls_marc-pstat NA 'G'. " 成本视图
ls_head-cost_view = 'X'. "
ELSEIF ls_marc-pstat NA 'E'. " 采购视图
ls_head-purchase_view = 'X'.
SELECT SINGLE * FROM mvke WHERE vkorg = @<fs_marc>-werks AND matnr = @<fs_marc>-matnr INTO @DATA(ls_mvke).
CLEAR : lt_steuertab,
gs_taxclass.
CALL FUNCTION 'STEUERTAB_IDENTIFY'
EXPORTING vkorg = <fs_marc>-werks
bukrs_vkorg = <fs_marc>-werks
vtweg = ls_mvke-vtweg
TABLES steuertab = lt_steuertab.
LOOP AT lt_steuertab INTO DATA(ls_steuertab).
gs_taxclass-depcountry = ls_steuertab-aland.
gs_taxclass-tax_type_1 = ls_steuertab-tatyp.
gs_taxclass-taxclass_1 = '1'.
APPEND gs_taxclass TO gt_taxclass.
ENDLOOP.
ENDIF.
ENDIF.
IF ls_head-account_view = 'X' OR ls_head-cost_view = 'X'.
CLEAR ls_mbew.
READ TABLE lt_mbew INTO ls_mbew INDEX 1.
" 会计1
CLEAR valuationdata.
valuationdata-val_area = '1200'.
valuationdata-val_class = ls_mbew-bklas. "评估分类
valuationdata-price_ctrl = ls_mbew-vprsv. "价格控制指示符
valuationdata-price_unit = ls_mbew-peinh. "价格单位
valuationdata-moving_pr = ls_mbew-verpr. "周期单位价格
valuationdata-std_price = ls_mbew-stprs. "标准价格
"成本1
valuationdata-qty_struct = ls_mbew-ekalr. "用QS的成本核算
valuationdata-orig_mat = ls_mbew-hkmat. "物料来源
ls_PLANT-LOT_SIZE = <fs_marc>-LOSGR. "成本核算批量
ls_PLANTX-LOT_SIZE = 'X'. "成本核算批量
ls_PLANT-NO_COSTING = <fs_marc>-NCOST. "不计算成本
ls_PLANTX-NO_COSTING = 'X'. "不计算成本
CLEAR valuationdatax.
valuationdatax-val_area = '1200'.
valuationdatax-val_class = 'X'.
valuationdatax-price_ctrl = 'X'.
valuationdatax-price_unit = 'X'.
valuationdatax-moving_pr = 'X'.
valuationdatax-std_price = 'X'.
valuationdatax-qty_struct = 'X'.
valuationdatax-orig_mat = 'X'.
ENDIF.
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
EXPORTING headdata = ls_head
* CLIENTDATA =
* CLIENTDATAX =
plantdata = ls_plant
plantdatax = ls_plantx
* FORECASTPARAMETERS =
* FORECASTPARAMETERSX =
* PLANNINGDATA =
* PLANNINGDATAX =
* STORAGELOCATIONDATA =
* STORAGELOCATIONDATAX =
valuationdata = valuationdata
valuationdatax = valuationdatax
" WAREHOUSENUMBERDATA =
" WAREHOUSENUMBERDATAX =
" SALESDATA =
" SALESDATAX =
" STORAGETYPEDATA =
" STORAGETYPEDATAX =
" FLAG_ONLINE = ' '
" FLAG_CAD_CALL = ' '
" NO_DEQUEUE = ' '
" NO_ROLLBACK_WORK = ' '
" CLIENTDATACWM =
" CLIENTDATACWMX =
" VALUATIONDATACWM =
" VALUATIONDATACWMX =
" MATPLSTADATA =
" MATPLSTADATAX =
" MARC_APS_EXTDATA =
" MARC_APS_EXTDATAX =
IMPORTING return = ls_return
TABLES
" MATERIALDESCRIPTION =
" UNITSOFMEASURE =
" UNITSOFMEASUREX =
" INTERNATIONALARTNOS =
" MATERIALLONGTEXT =
taxclassifications = gt_taxclass
returnmessages = returnmes[].
" PRTDATA =
" PRTDATAX =
" EXTENSIONIN =
" EXTENSIONINX =
" UNITSOFMEASURECWM =
" UNITSOFMEASURECWMX =
" SEGMRPGENERALDATA =
" SEGMRPGENERALDATAX =
" SEGMRPQUANTITYDATA =
" SEGMRPQUANTITYDATAX =
" SEGVALUATIONTYPE =
" SEGVALUATIONTYPEX =
" SEGSALESSTATUS =
" SEGSALESSTATUSX =
" SEGWEIGHTVOLUME =
" SEGWEIGHTVOLUMEX =
" DEMAND_PENALTYDATA =
" DEMAND_PENALTYDATAX =
" NFMCHARGEWEIGHTS =
" NFMCHARGEWEIGHTSX =
" NFMSTRUCTURALWEIGHTS =
" NFMSTRUCTURALWEIGHTSX =
IF ls_return-type = 'S'.
" 提交事务
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING wait = 'X'.
ls_output-type = 'S'.
ls_output-message = | { <fs_marc>-matnr }: { ls_return-message }|.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ls_output-type = 'E'.
ls_output-message = | { <fs_marc>-matnr }: { ls_return-message }|.
ENDIF.
READ TABLE returnmes INTO DATA(ls_nmes) WITH KEY type = ' E'.
ls_output-type1 = ls_nmes-type.
ls_output-message1 = ls_nmes-message.
APPEND ls_output TO lt_output.
IF ls_marc-pstat NA 'Q'.
SELECT * FROM qmat
WHERE matnr = @<fs_marc>-matnr
AND werks = @<fs_marc>-werks
INTO TABLE @lt_qmat.
if lt_qmat is NOT INITIAL.
LOOP AT lt_qmat INTO ls_qmat.
IF ls_marc-pstat NA 'Q' AND <fs_marc>-pstat CA 'Q'.
SELECT * FROM qmat
WHERE matnr = @<fs_marc>-matnr
AND werks = @<fs_marc>-werks
INTO TABLE @lt_qmat.
IF lt_qmat IS NOT INITIAL.
LOOP AT lt_qmat INTO ls_qmat.
ls_inspectionctrl-plant = '1200'.
ls_inspectionctrl-material = <fs_marc>-matnr.
ls_inspectionctrl-insptype = ls_qmat-art.
ls_inspectionctrl-ind_insp_with_tsk_list = ls_qmat-ppl.
ls_inspectionctrl-ind_spec_matspec = ls_qmat-spezueber.
ls_inspectionctrl-ind_spec_config = ls_qmat-conf.
ls_inspectionctrl-ind_spec_batch = ls_qmat-tls.
ls_inspectionctrl-ind_auto_assign = ls_qmat-app.
ls_inspectionctrl-ind_insp_by_charac = ls_qmat-mer.
ls_inspectionctrl-ind_post_to_insp_stock = ls_qmat-insmk.
ls_inspectionctrl-ind_automatic_ud = ls_qmat-ave.
ls_inspectionctrl-sampling_procedure = ls_qmat-stichprver.
ls_inspectionctrl-dyn_modif_rule = ls_qmat-dynregel.
ls_inspectionctrl-insp_percentage = ls_qmat-sproz.
ls_inspectionctrl-ind_100_percent_inspection = ls_qmat-hpz.
ls_inspectionctrl-ind_skips_allowed = ls_qmat-dyn.
ls_inspectionctrl-ind_manual_sample = ls_qmat-mpb.
ls_inspectionctrl-ind_manual_sample_calc = ls_qmat-mst.
ls_inspectionctrl-ind_single_units_possible = ls_qmat-ein.
ls_inspectionctrl-ave_insp_duration = ls_qmat-mpdau.
ls_inspectionctrl-contr_insp_lot_create = ls_qmat-chg.
ls_inspectionctrl-qual_score_procedure = ls_qmat-qkzverf.
ls_inspectionctrl-allowed_scrap_share = ls_qmat-qpmat.
ls_inspectionctrl-ind_insptype_mat_active = 'X'.
ls_inspectionctrl-preferred_insptype = 'X'."首选的检验类型
APPEND ls_inspectionctrl TO lt_inspectionctrl.
CLEAR ls_qmat.
ENDLOOP.
ls_output-matnr = <fs_marc>-matnr.
ls_output-werks = '1200'.
CLEAR lt_return.
CALL FUNCTION 'BAPI_MATINSPCTRL_SAVEREPLICA' " 质量视图里的字段内容
TABLES
return = lt_return
inspectionctrl = lt_inspectionctrl.
READ TABLE lt_return TRANSPORTING NO FIELDS WITH KEY type = 'S'.
IF lt_return IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
APPEND ls_output TO lt_output.
endif.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_output_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_output_alv .
DATA: lo_tabdescr TYPE REF TO cl_abap_structdescr.
DATA: ls_field_in TYPE dfies,
lt_dfies TYPE ddfields.
DATA:lv_fname TYPE lvc_fname,
lv_short TYPE scrtext_s,
lv_medium TYPE scrtext_m,
lv_long TYPE scrtext_l.
TRY .
cl_salv_table=>factory(
IMPORTING
r_salv_table = go_alv
CHANGING
t_table = lt_output ).
CATCH cx_salv_msg.
ENDTRY.
lo_tabdescr ?= cl_abap_structdescr=>describe_by_data( ls_output ).
CALL METHOD cl_salv_data_descr=>read_structdescr
EXPORTING
r_structdescr = lo_tabdescr
RECEIVING
t_dfies = lt_dfies.
PERFORM frm_get_tabname TABLES lt_dfies USING 'ls_output'. "auto get tablename
"===自动赋值fieldcat===
LOOP AT lt_dfies INTO ls_field_in.
CLEAR: gs_fieldcat.
CLEAR: lv_short ,lv_medium ,lv_long ,lv_fname .
MOVE-CORRESPONDING ls_field_in TO gs_fieldcat.
gs_fieldcat-ref_table = ls_field_in-reftable. "参照类型的表,搜索帮助,域控制
gs_fieldcat-ref_field = ls_field_in-reffield. "参照类型字段
IF ls_field_in-tabname IS NOT INITIAL. "当COLTEXT不存在显示FILEDTEXT,如字段没域,只有手工描述的情况.
lv_medium = ls_field_in-scrtext_m .
go_alv->get_columns( )->get_column( lv_fname )->set_medium_text( lv_medium ).
ENDIF.
ENDLOOP.
"自动列宽
go_alv->get_columns( )->set_optimize( 'X' ).
"斑马线
go_alv->get_display_settings( )->set_striped_pattern( 'X' ).
"set selection mode 可以行列进行选择
go_alv->get_selections( )->set_selection_mode( if_salv_c_selection_mode=>row_column ).
*******标准按钮和自定义状态使用一个就好
"标准按钮
go_alv->get_functions( )->set_all( abap_true ). "将激活所以的ALV内置通用按钮
"显示
go_alv->display( ).
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_TABNAME
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LT_DFIES
*& --> P_
*&---------------------------------------------------------------------*
FORM frm_get_tabname TABLES t_dfies TYPE ddfields USING tabname TYPE tfdir-funcname.
" source container
DATA: BEGIN OF ls_abap_source,
line TYPE char300,
END OF ls_abap_source,
lt_abap_source LIKE TABLE OF ls_abap_source.
DATA: lt_fieldinfo_old LIKE fieldinfo OCCURS 10 WITH HEADER LINE.
CLASS cx_sy_read_src_line_too_long DEFINITION LOAD.
DATA: ex_too_long TYPE REF TO cx_sy_read_src_line_too_long.
TRY.
READ REPORT sy-repid INTO lt_abap_source.
CATCH cx_sy_read_src_line_too_long INTO ex_too_long.
MESSAGE '一行代码超过300个字符' TYPE 'S' DISPLAY LIKE 'E'.
ENDTRY.
CALL FUNCTION 'ABAP_SCAN_DATA_DESCRIPTION'
EXPORTING
structure_name = tabname
main_program_name = sy-cprog
i_context = 'X'
TABLES
abap_source = lt_abap_source
ddic_fieldinfo = lt_fieldinfo_old
ddic_fieldinfo2 = gt_fieldinfo
EXCEPTIONS
source_not_accepted = 0
OTHERS = 0.
LOOP AT t_dfies ASSIGNING FIELD-SYMBOL(<lfs_dfies>).
IF <lfs_dfies>-reftable IS INITIAL. "auto set tablename
READ TABLE gt_fieldinfo INTO gs_fieldinfo WITH KEY fieldname = <lfs_dfies>-fieldname.
IF sy-subrc = 0.
SPLIT gs_fieldinfo-name AT '-' INTO <lfs_dfies>-reftable <lfs_dfies>-reffield.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM.
&spm=1001.2101.3001.5002&articleId=151583621&d=1&t=3&u=8950bf0401e740a482e8190dbd8d875f)
605

被折叠的 条评论
为什么被折叠?



