读取生产订单状态、工序状态(afvc-OBJNR)函数
DATA lt_status TYPE TABLE OF JSTAT WITH HEADER LINE.
select single objnr
into @data(lv_objnr)
from aufk
where aufnr = @et_data-aufnr.
call function 'STATUS_READ'
exporting
objnr = lv_objnr
only_active = 'X' "仅显示激活状态
tables
status = lt_status. "返回的状态表
data(lv_rel) = ''.
loop at lt_status.
if lt_status-stat = 'I0076'. "删除
ls_doc-sttxt = '删除'.
endif.
if lt_status-stat = 'I0002'. "下达
lv_rel = 'X'.
endif.
endloop.
if lv_rel = ''.
return.
endif.
表 vsaufk
select single aufnr
into @data(lv_aufnr2)
from vsaufk
where aufnr = @lv_aufnr and inact = ''
and stat in ('I0045','I0046','I0076','I0012').
if sy-subrc = 0.
message e001(00) with '工单' lv_aufnr '不允许做计划,请与生管确认后再重新为该订单做排程'.
endif.
函数STATUS_TEXT_EDIT可以直接取到和生产订单上显示一样的状态(生产订单上显示的不是所有激活的状态)
perform get_status using ls_out-aufnr changing ls_out-stat.
form get_status using uv_aufnr changing cv_stat.
data:
lv_objnr like jest-objnr,
lv_stat(40).
select single objnr
into lv_objnr
from aufk
where aufnr = uv_aufnr.
if sy-subrc = 0.
call function 'STATUS_TEXT_EDIT'
exporting
objnr = lv_objnr
only_active = 'X'
spras = sy-langu
importing
line = lv_stat
exceptions
object_not_found = 1
others = 2.
if sy-subrc <> 0.
* Implement suitable error handling here
endif.
endif.
cv_stat = lv_stat.
endform.
系统状态在表TJ02中,文本在表TJ02T中,分别为TXT04,TXT30两个字段
常用生产订单状态:
'I0001' "创建 CRTD
'I0002' "释放(下达)REL
'I0009' 已确认 CNF
'I0013' 删除(订单工序状态,就‘删除’两个字)
'I0074' 部分交货 PDLV
'I0012' "完成交货 DLV
'I0076' "删除 标记(生产订单)DEL (也有删除两个字)
'I0043' "冻结
'I0045' "TECO
'I0046' "结算 CLSD 结算状态工单组件全部打上删除标记
I0321 货物移动 GMPS
下达、技术性关闭、结算这三个状态是互斥的
下达和创建互斥
工序状态
CNF I0009 完全报工
PCNF I0010 部分报工
删除 I0013 已删除工序
常用状态表
JEST 单独状态(存放对象号对应的状态)
TJ30用户状态表
TJ02 系统状态
TJ02T系统状态描述
修改状态(函数的必输字段可以传入空值)
CALL FUNCTION 'I_CHANGE_STATUS'
EXPORTING
OBJNR = lt_resb-objnr
ESTAT_INACTIVE = ''
ESTAT_ACTIVE = 'I0013'
* STSMA =
EXCEPTIONS
CANNOT_UPDATE = 1
OTHERS = 2