检验特性创建事务代码QS21
BAPI:BAPI_QPMK_SAVEREPLICA
检验特性创建分为:定性特征和定量特征
先自己手工的用事务代码QS21创建两个,清楚哪些字段必填,定性和定量都有哪些字段
DATA: ls_qpmk TYPE bapiqpmk_qpmk,
lt_qpmk TYPE TABLE OF bapiqpmk_qpmk,
ls_qpmz TYPE bapiqpmk_qpmz,
lt_qpmz TYPE TABLE OF bapiqpmk_qpmz,
ls_qpmt TYPE bapiqpmk_qpmt,
lt_qpmt TYPE TABLE OF bapiqpmk_qpmt,
lt_mstcha_insp_meth TYPE TABLE OF bapiqpmk_qpmz,
ls_mstcha_insp_meth TYPE bapiqpmk_qpmz,
ls_return TYPE bapiret2,
lt_return TYPE TABLE OF bapiret2.
DATA: ls_qmkst TYPE qmkst.
LOOP AT t_data.
CLEAR: ls_qpmk, ls_qpmz, ls_qpmt, ls_return,
lt_qpmk, lt_qpmz, lt_qpmt, lt_return.
CALL FUNCTION 'NUMBER_RANGE_ENQUEUE'
EXPORTING
object = 'QMERKMALE'
EXCEPTIONS
foreign_lock = 1
object_not_found = 2
system_failure = 3
OTHERS = 4.
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr = '01'
object = 'QMERKMALE'
subobject = t_data-werks
quantity = '1'
IMPORTING
* returncode = lt_return
number = t_data-mkmnr.
CALL FUNCTION 'NUMBER_RANGE_DEQUEUE'
EXPORTING
object = 'QMERKMALE'
EXCEPTIONS
object_not_found = 1
OTHERS = 2.
IF t_data-mkmnr IS INITIAL.
t_data-type = 'E'.
t_data-message = '生成主检验特性编号失败'.
MODIFY t_data.
CONTINUE.
ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = t_data-masseinhsw
language = sy-langu
IMPORTING
output = t_data-masseinhsw
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
* ls_qpmk-function = '009'.
ls_qpmk-plant_qpmk = t_data-werks."主检验特性的工厂
ls_qpmk-mstr_char = t_data-mkmnr."主文件检验特性
ls_qpmk-vmstr_char = '000001'.
ls_qpmk-valid_from = t_data-gueltigab."有效起始日期
ls_qpmk-sort_field = t_data-sortfeld."搜索字段
ls_qpmk-status = t_data-loekz."主记录的状态
ls_qmkst-quantitat = t_data-quantitaet. " 数量特性 'X’=定量,空=定性
ls_qpmk-ind_complete = t_data-konsistent."复制模块/参考特性
IF t_data-quantitaet = 'X'."定量
ls_qpmk-dec_places = t_data-stellen."小数点右边的位数(精确的)
ls_qpmk-mesure_unit_quant = t_data-masseinhsw."数量数据存储的测量单位
IF t_data-sollwert IS NOT INITIAL.
ls_qpmk-target_val = t_data-sollwert."一个数量特性的目标值
ls_qpmk-ind_targ_value = 'X'.
ls_qmkst-sollpruef = t_data-sollpruef. " 检查目标值
ENDIF.
IF t_data-toleranzun IS NOT INITIAL.
ls_qpmk-lw_tol_lmt = t_data-toleranzun."规格下限
ls_qpmk-ind_lower_limit = 'X'.
ls_qmkst-tolerunten = t_data-tolerunten. " 规范下限
ENDIF.
IF t_data-toleranzob IS NOT INITIAL.
ls_qpmk-up_tol_lmt = t_data-toleranzob."规格上限
ls_qpmk-ind_upper_limit = 'X'.
ls_qmkst-toleroben = t_data-toleroben. " 规范上限
ENDIF.
ENDIF.
IF t_data-quantitaet IS INITIAL."定性才有
ls_qpmk-def_code_general = t_data-codequal."拒绝的缺陷代码: 一般
ls_qpmk-def_code_grp_general = t_data-codegrqual."一般拒绝的缺陷代码组
ENDIF.
ls_qmkst-messwerte = t_data-quantitaet. " 必须记录计量值
ls_qmkst-pruefkat = t_data-pruefkat. " 要求特性属性的参考
ls_qmkst-pumfkz = '='. " 检验范围
ls_qmkst-lzeitkz = ' '. " 长期检验
ls_qmkst-estukz = t_data-estukz. " 记录类型
ls_qmkst-dokukz = ' '. " 检验结果的必需凭证
ls_qmkst-rzwang = t_data-rzwang. " 特性类别
ls_qmkst-syncro = ' '. " 激活同步
ls_qmkst-addpro = ' '. " 采样数量已增加
ls_qmkst-zerstprf = ' '. " 破坏性检验
ls_qmkst-formelmk = ' '. " 计算的特性
ls_qmkst-stichpr = t_data-stichpr. " 要求采样过程
ls_qmkst-ausslos = ' '. " 质量记分和废品份额的相关特性
ls_qmkst-fixiert = ' '. " 不能修改缺省控制标识
ls_qmkst-bewfhlzhl = ' '. " 记录缺陷数
ls_qmkst-lstkz = ' '. " 控制特性结果 - qm 子系统
ls_qmkst-vorgaend = ' '. " 说明可以被修改
ls_qmkst-pmmzwang = ' '. " 分配所需的测试设备
ls_qmkst-fehlrec = ' '. " 缺陷记录已自动调用
ls_qmkst-aendbeleg = ' '. " 在结果记录期间创建更改凭证
ls_qmkst-qspcmk = t_data-qspcmk. " spc特性
ls_qmkst-keindruck = ' '. " 打印
ls_qmkst-para = ' '. " 控制标识:"参数特性"设置/未设置
ls_qmkst-processmk = ' '. " 处理特征
MOVE ls_qmkst TO ls_qpmk-ind_control.
* call method cl_abap_container_utilities=>fill_container_c
* exporting
* im_value = ls_qmkst
* importing
* ex_container = ls_qpmk-ind_control "Your Bapi field
* exceptions
* illegal_parameter_type = 1
* others = 2.
APPEND ls_qpmk TO lt_qpmk.
IF t_data-pruefkat IS NOT INITIAL."要求特性属性的参考
ls_mstcha_insp_meth-plant_qpmk = t_data-werks.
ls_mstcha_insp_meth-mst_insp_cha = t_data-mkmnr."主文件检验特性
ls_mstcha_insp_meth-vmstr_char = '000001'.
ls_mstcha_insp_meth-valid_from = t_data-gueltigab.
IF t_data-ind_selset_or_codegrp1 IS NOT INITIAL.
ls_mstcha_insp_meth-ind_selset_or_codegrp1 = t_data-ind_selset_or_codegrp1."目录条目是一个选择集
ls_mstcha_insp_meth-cat_type1 = t_data-cat_type1."分配的代码组或选择集的目录类型
ls_mstcha_insp_meth-sel_set1 = t_data-sel_set1."分配的代码组或选择集
ls_mstcha_insp_meth-psel_set1 = t_data-psel_set1."分配的选择集的工厂
ENDIF.
IF t_data-ind_selset_or_codegrp2 IS NOT INITIAL.
ls_mstcha_insp_meth-ind_selset_or_codegrp2 = t_data-ind_selset_or_codegrp2.
ls_mstcha_insp_meth-cat_type2 = t_data-cat_type2.
ls_mstcha_insp_meth-code_group2 = t_data-code_group2.
ls_mstcha_insp_meth-psel_set2 = t_data-psel_set2.
ENDIF.
IF t_data-ind_selset_or_codegrp3 IS NOT INITIAL.
ls_mstcha_insp_meth-ind_selset_or_codegrp3 = t_data-ind_selset_or_codegrp3.
ls_mstcha_insp_meth-cat_type3 = t_data-cat_type3.
ls_mstcha_insp_meth-code_group3 = t_data-code_group3.
ls_mstcha_insp_meth-psel_set3 = t_data-psel_set3.
ENDIF.
IF t_data-ind_selset_or_codegrp4 IS NOT INITIAL.
ls_mstcha_insp_meth-ind_selset_or_codegrp4 = t_data-ind_selset_or_codegrp4.
ls_mstcha_insp_meth-cat_type4 = t_data-cat_type4.
ls_mstcha_insp_meth-code_group4 = t_data-code_group4.
ls_mstcha_insp_meth-psel_set4 = t_data-psel_set4.
ENDIF.
IF t_data-ind_selset_or_codegrp5 IS NOT INITIAL.
ls_mstcha_insp_meth-ind_selset_or_codegrp5 = t_data-ind_selset_or_codegrp5.
ls_mstcha_insp_meth-cat_type5 = t_data-cat_type5.
ls_mstcha_insp_meth-code_group5 = t_data-code_group5.
ls_mstcha_insp_meth-psel_set5 = t_data-psel_set5.
ENDIF.
APPEND ls_mstcha_insp_meth TO lt_mstcha_insp_meth.
ENDIF.
ls_qpmt-plant_qpmk = t_data-werks.
ls_qpmt-mstr_char = t_data-mkmnr.
ls_qpmt-vmstr_char = '000001'.
ls_qpmt-langu = '1'.
ls_qpmt-valid_from = t_data-gueltigab."有效起始日期
ls_qpmt-char_descr = t_data-kurztext.
APPEND ls_qpmt TO lt_qpmt.
CALL FUNCTION 'BAPI_QPMK_SAVEREPLICA'
TABLES
mstcha = lt_qpmk
mstcha_insp_meth = lt_mstcha_insp_meth
mstcha_text = lt_qpmt
return = lt_return.
READ TABLE lt_return INTO ls_return WITH KEY type = 'E'.
IF sy-subrc EQ 0 .
t_data-type = 'E'.
t_data-message = ls_return-message.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
t_data-type = 'S'.
t_data-message = '创建成功'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
MODIFY t_data.
ENDLOOP.