method ZQM_II_SI_SPCD_REC~SI_SPCD_PROCSS.
*** **** INSERT IMPLEMENTATION HERE **** ***
*->数据定义部分
TYPES:BEGIN OF ty_qamv,
prueflos TYPE qamv-prueflos,
vorglfnr TYPE qamv-vorglfnr,
aufpl TYPE qals-aufpl,
vornr TYPE afvc-vornr,
plnkn TYPE afvc-plnkn,
plnnr TYPE afvc-plnnr,
END OF ty_qamv.
DATA:lt_qamv TYPE TABLE OF ty_qamv,
ls_qamv TYPE ty_qamv.
DATA:ls_req TYPE zqm_dt_spcd_req,
ls_res TYPE zqm_dt_spcd_res,
lt_data TYPE TABLE OF ZQM_DT_SPCD_REQ_DATA,
ls_data TYPE ZQM_DT_SPCD_REQ_DATA.
DATA:lv_insplot TYPE bapi2045l2-insplot,
lv_inspoper TYPE bapi2045l2-inspoper.
DATA:ls_inspoint TYPE bapi2045l4,
lt_inspoint TYPE TABLE OF bapi2045l4.
DATA:ls_char_results TYPE bapi2045d2,
lt_char_results TYPE TABLE OF bapi2045d2.
DATA:ls_sample_results TYPE bapi2045d3,
lt_sample_results TYPE TABLE OF bapi2045d3.
DATA:ls_single_results TYPE bapi2045d4,
lt_single_results TYPE STANDARD TABLE OF bapi2045d4.
DATA:ls_return TYPE bapiret2,
lt_return TYPE TABLE OF bapiret2.
DATA ud_data TYPE bapi2045ud.
DATA:ud_return_data TYPE bapi2045ud_return,
stock_data TYPE bapi2045d_il2,
ls_return1 TYPE bapireturn1.
DATA:re_subrc type sy-subrc,
lv_str type string,
lv_msg type string.
DATA it_return type table of bapiret2 .
lt_data = input-mt_spcd_req-data[].
*->检查数据
LOOP AT lt_data INTO ls_data.
*->检查数据
"先找到能用的工序
SELECT v~prueflos
v~vorglfnr
s~aufpl
a~vornr
a~plnkn
a~plnnr
INTO TABLE lt_qamv
FROM qamv AS v
INNER JOIN qals AS s
ON s~prueflos = v~prueflos
INNER JOIN afvc AS a
ON a~aufpl = s~aufpl
AND a~aplzl = v~vorglfnr
AND a~plnty = 'N'
WHERE v~prueflos EQ ls_data-prueflos.
SORT lt_qamv BY prueflos vorglfnr.
DELETE ADJACENT DUPLICATES FROM lt_qamv COMPARING ALL FIELDS.
LOOP AT lt_qamv INTO ls_qamv.
lv_insplot = ls_qamv-prueflos.
lv_inspoper = ls_qamv-vornr.
"取源检验批的检验结果
CALL FUNCTION 'BAPI_INSPOPER_GETDETAIL'
EXPORTING
insplot = lv_insplot
inspoper = lv_inspoper
read_insppoints = 'X'
read_char_results = 'X'
read_sample_results = 'X'
read_single_results = 'X'
char_filter_no = '1'
max_insppoints = 100
insppoint_from = 0
handheld_application = ' '
IMPORTING
return = ls_return
TABLES
insppoints = lt_inspoint
char_results = lt_char_results
sample_results = lt_sample_results
single_results = lt_single_results.
* get upper limit or below limit from PLMK table
ls_inspoint-insplot = ls_qamv-prueflos. "检验批
ls_inspoint-inspoper = ls_qamv-vornr. "工序
ls_inspoint-psel_set = ls_data-werks. "工厂
ls_inspoint-material = ls_data-matnr. "物料编号
READ TABLE lt_char_results ASSIGNING FIELD-SYMBOL(<fs_results>)
WITH KEY remark = ls_data-prtext.
IF sy-subrc EQ 0.
ls_char_results-start_date = ls_data-prdat. "测试日期
ls_char_results-remark = ls_data-prtext. "测试项目
ls_char_results-mean_value = ls_data-prsvalue. "天平均值
ls_char_results-vals_above = ls_data-gctmax. "公差上限
ls_char_results-vals_below = ls_data-gclow. "公差下限
ls_char_results-mean_value = ls_data-cvalue. "中心值
ls_char_results-evaluation = ls_data-pdjl. "判定结论
ls_char_results-inspector = ls_data-pernr. "检验员
select single
merknr into ls_single_results-inspchar
from plmk
where kurztext = ls_data-prtext
and plnkn = ls_qamv-plnkn
and plnnr = ls_qamv-plnnr
and plnty = 'N'.
ls_single_results-insplot = ls_qamv-prueflos.
ls_single_results-inspoper = ls_qamv-vornr.
ls_single_results-inspchar = <fs_results>-inspchar.
ls_single_results-res_value = ls_data-prsvalue.
ls_single_results-res_no = ls_single_results-inspchar / 10.
APPEND ls_single_results TO lt_single_results.
ENDIF.
CALL FUNCTION 'BAPI_INSPOPER_RECORDRESULTS'
EXPORTING
insplot = lv_insplot
inspoper = lv_inspoper
insppointdata = ls_inspoint
IMPORTING
return = ls_return
TABLES
char_results = lt_char_results
sample_results = lt_sample_results
single_results = lt_single_results
returntable = lt_return.
" attetion:->这个BAPI执行成功后没有返回TYPES S ,只能反向推测,没有'E'则表示成功,但是存在没有'E'也没有成功的情况
READ TABLE lt_return with key type = 'E'
TRANSPORTING NO FIELDS.
IF sy-subrc EQ 0.
"出错的话后面的都不执行,原则上每次只传入一个检验批,设置成TABLE是为了后续改进做准备
LOOP AT lt_return INTO ls_return WHERE type CA 'AEX'.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = ls_return-id
MSGNR = ls_return-number
MSGV1 = ls_return-message_v1
MSGV2 = ls_return-message_v2
MSGV3 = ls_return-message_v3
MSGV4 = ls_return-message_v4
IMPORTING
MESSAGE_TEXT_OUTPUT = lv_str.
lv_msg = COND #( WHEN lv_msg IS INITIAL THEN lv_str else lv_msg && lv_str ).
endloop.
output-mt_spcd_res-o_msgty = 'E'.
output-mt_spcd_res-o_messg = '检验批结果录入错误,报错消息为:' && lv_msg.
RETURN.
ENDIF.
ENDLOOP.
ud_data-insplot = ls_data-prueflos.
ud_data-ud_code = '2'.
ud_data-ud_plant = ls_data-werks.
ud_data-ud_code_group = 'ZCTGIPQC'.
ud_data-ud_selected_set = 'I01'.
* ud_data-ud_stock_posting = 'X'. "是否进行过帐
CALL FUNCTION 'BAPI_INSPLOT_SETUSAGEDECISION'
EXPORTING
number = ls_data-prueflos
ud_data = ud_data
* LANGUAGE =
IMPORTING
ud_return_data = ud_return_data
stock_data = stock_data
return = ls_return1.
clear LV_STR.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = ls_return1-id
MSGNR = ls_return1-number
MSGV1 = ls_return1-message_v1
MSGV2 = ls_return1-message_v2
MSGV3 = ls_return1-message_v3
MSGV4 = ls_return1-message_v4
IMPORTING
MESSAGE_TEXT_OUTPUT = lv_str.
output-mt_spcd_res-o_msgty = ls_return1-type.
output-mt_spcd_res-o_messg = lv_str.
ENDLOOP.
endmethod.