注
先用BAPI_PROCORDCONF_GET_TT_PROP取一个工序的数据(额定工时)
但是测试发现有的工单工时没取出来,现在手工算了
然后用
BAPI_PRODORDCONF_CREATE_TT 生产订单报工
demo
*报工
loop at gt_alv.
* read table gt_aufm_sum with key aufnr = gt_alv-aufnr binary search.
* if sy-subrc = 0.
* 1.需要更新的数据设置
clear propose.
* propose-quantity = cn_flagx. "更新数量
propose-date_and_time = cn_flagx. "更新作业时间
propose-goodsmovement = cn_flagx. "更新货物移动
* 2.作业时间
clear: timetickets,timetickets[].
timetickets-conf_no = gt_alv-rueck. "确认
* timetickets-orderid = gt_alv-aufnr. "工单号
* timetickets-operation = gt_alv-vornr. "工序号
* timetickets-sequence = gt_alv-aplfl. "
timetickets-yield = gt_alv-menge. "工单生产数量
append timetickets.
clear timetickets.
* 3.货物移动属性
* 第一次赋值,用于获取相关默认属性值
clear: goodsmovements,goodsmovements[].
goodsmovements-orderid = gt_alv-aufnr. "生产订单号
goodsmovements-order_itno = gt_alv-vornr. "工序号
append goodsmovements.
clear goodsmovements.
* 4.调用BAPI,获取默认属性值
call function 'BAPI_PRODORDCONF_GET_TT_PROP'
exporting
propose = propose
importing
return = return
tables
timetickets = timetickets
goodsmovements = goodsmovements
link_conf_goodsmov = link_conf_goodsmov
detail_return = return_detail.
* 5.输出异常信息
* if return-type = 'E' or return-type = 'A'.
* concatenate '错误:' return-message into return-message.
* lv_result = cn_flagx.
* endif.
*
* loop at return_detail where type is not initial.
* if return_detail-type = 'E' or return_detail-type = 'A'.
* concatenate '错误:' return_detail-message into return-message.
* lv_result = cn_flagx.
* endif.
* endloop.
loop at timetickets.
timetickets-postg_date = gt_alv-budat.
timetickets-conf_activity1 = gt_alv-vgw01 * gt_alv-menge. "有些工单读不到标准工时
timetickets-conf_acti_unit1 = gt_alv-vge01.
timetickets-conf_activity2 = gt_alv-vgw02 * gt_alv-menge.
timetickets-conf_acti_unit2 = gt_alv-vge02.
timetickets-conf_activity3 = gt_alv-vgw03 * gt_alv-menge.
timetickets-conf_acti_unit3 = gt_alv-vge03.
timetickets-conf_activity4 = gt_alv-vgw04 * gt_alv-menge.
timetickets-conf_acti_unit4 = gt_alv-vge04.
timetickets-conf_activity5 = gt_alv-vgw05 * gt_alv-menge.
timetickets-conf_acti_unit5 = gt_alv-vge05.
timetickets-conf_activity6 = gt_alv-vgw06 * gt_alv-menge.
timetickets-conf_acti_unit6 = gt_alv-vge06.
modify timetickets.
endloop.
* 7. 调用BAPI,报工确认
clear: return, return[].
clear: return_detail, return_detail[].
call function 'BAPI_PRODORDCONF_CREATE_TT'
exporting
post_wrong_entries = '1'
testrun = '' "标识为 X,则为试运行 不提交至系统
importing
return = return
tables
timetickets = timetickets
goodsmovements = goodsmovements
link_conf_goodsmov = link_conf_goodsmov
detail_return = return_detail.
clear lv_result.
read table return with key type = 'E'.
if sy-subrc = 0.
concatenate '错误:' return-message into return-message.
lv_result = cn_flagx.
endif.
loop at return_detail where type is not initial.
if return_detail-type = 'E' or return_detail-type = 'A'.
concatenate '错误:' return_detail-message into return-message.
lv_result = cn_flagx.
endif.
endloop.
if lv_result ne cn_flagx.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
gt_alv-rtype = 'S'.
gt_alv-rtmsg = '成功'.
*合计产线数量
read table timetickets index 1.
lt_ztpp0032n-zzline = gt_alv-zzline.
lt_ztpp0032n-budat = gt_alv-budat.
lt_ztpp0032n-lmnga = gt_alv-menge.
lt_ztpp0032n-ism01 = timetickets-conf_activity1..
lt_ztpp0032n-aedat = sy-datum.
lt_ztpp0032n-aezet = sy-uzeit.
lt_ztpp0032n-aenam = sy-uname.
append lt_ztpp0032n.
else.
call function 'BAPI_TRANSACTION_ROLLBACK'.
gt_alv-rtype = 'E'.
gt_alv-rtmsg = return-message.
endif.
* endif.
modify gt_alv.
endloop.