FUNCTION zpp_fm_016.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" REFERENCE(IV_IFNO) TYPE ZIFNO
*" VALUE(IS_DATA) TYPE ZPPST008
*" EXPORTING
*" VALUE(ES_DATA) TYPE ZPPST008_RETURN
*"----------------------------------------------------------------------
DATA: ls_header TYPE zpptb022_header, "抬头
lt_comp TYPE TABLE OF zpptb022_comp WITH HEADER LINE, "组件
lt_oper TYPE TABLE OF zpptb022_oper WITH HEADER LINE. "工序
DATA: lv_message TYPE zppst008_return-message.
DATA:lv_aufnr TYPE aufk-aufnr.
DATA:lv_plnum TYPE plaf-plnum .
"BAPI信息
DATA: ls_order_create TYPE bapi_pp_order_create,
ls_return TYPE bapiret2,
ls_thead TYPE thead,
lt_ftab TYPE TABLE OF char_132 WITH HEADER LINE,
lt_texts TYPE TABLE OF tline WITH HEADER LINE,
lt_orders TYPE TABLE OF bapi_order_key WITH HEADER LINE.
"修改bapi
DATA:ls_orderdata LIKE bapi_pp_order_change,
ls_orderdatax LIKE bapi_pp_order_changex.
"记录日志
MOVE-CORRESPONDING is_data-header TO ls_header.
ls_header-longtext = ls_header-ZGDWB.
ls_header-ifno = iv_ifno.
IF ls_header-ZDDXQ = '是'.
ls_header-ZDDXQ = 'X'.
ELSE.
ls_header-ZDDXQ = ''.
ENDIF.
MODIFY zpptb022_header FROM ls_header.
"by margin on 2023/08/07 begin(增加 将工单 打上 删除标识 功能)
if ls_header-TXT04 = 'DLFL'.
CLEAR: ls_return,lt_orders,lt_orders[].
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = ls_header-aufnr
IMPORTING
OUTPUT = ls_header-aufnr
.
lt_orders-order_number = ls_header-aufnr.
APPEND lt_orders.
CALL FUNCTION 'BAPI_PRODORD_SET_DELETION_FLAG'
IMPORTING
return = ls_return
TABLES
orders = lt_orders[].
IF ls_return-type CA 'EAX'.
es_data-type1 = 'E'.
es_data-message = es_data-message && '工单删除失败(' && ls_return-message && ').'.
ELSE.
es_data-type1 = 'S'.
es_data-message = es_data-message && '工单已标记删除.'.
ENDIF.
es_data-aufnr = ls_header-aufnr.
"返回结果
UPDATE zpptb022_header SET aufnr = es_data-aufnr
type1 = es_data-type1
message = es_data-message
WHERE ifno = iv_ifno.
COMMIT WORK.
return.
endif.
"end
LOOP AT is_data-components INTO DATA(ls_components).
CLEAR lt_comp.
MOVE-CORRESPONDING ls_components TO lt_comp.
lt_comp-ifno = iv_ifno.
lt_comp-rowno = sy-tabix.
APPEND lt_comp.
ENDLOOP.
MODIFY zpptb022_comp FROM TABLE lt_comp[].
LOOP AT is_data-operations INTO DATA(ls_operations).
CLEAR lt_oper.
MOVE-CORRESPONDING ls_operations TO lt_oper.
lt_oper-ifno = iv_ifno.
lt_oper-rowno = sy-tabix.
APPEND lt_oper.
ENDLOOP.
MODIFY zpptb022_oper FROM TABLE lt_oper[].
COMMIT WORK AND WAIT.
"数据校验
CLEAR es_data."抬头校验
IF ls_header-werks IS INITIAL.
es_data-message = |{ es_data-message }工厂必填;|.
ENDIF.
IF ls_header-txt04 IS INITIAL.
es_data-message = |{ es_data-message }订单状态必填;|.
ENDIF.
IF ls_header-auart IS INITIAL.
es_data-message = |{ es_data-message }订单类型必填;|.
ENDIF.
IF ls_header-plnbez IS INITIAL.
es_data-message = |{ es_data-message }物料编码必填;|.
ENDIF.
IF ls_header-gamng <= 0.
es_data-message = |{ es_data-message }工单数量必填;|.
ENDIF.
IF ls_header-gmein IS INITIAL.
es_data-message = |{ es_data-message }单位必填;|.
ENDIF.
IF ls_header-gstrp IS INITIAL.
es_data-message = |{ es_data-message }开始时间必填;|.
ENDIF.
IF ls_header-gltrp IS INITIAL.
es_data-message = |{ es_data-message }结束时间必填;|.
ENDIF.
IF ls_header-fevor IS INITIAL.
es_data-message = |{ es_data-message }生产主管必填;|.
ENDIF.
IF ls_header-verid IS INITIAL.
es_data-message = |{ es_data-message }生产版本必填;|.
ENDIF.
* IF LS_HEADER-STLAL IS INITIAL.
* ES_DATA-MESSAGE = |{ ES_DATA-MESSAGE }备选BOM必填;|.
* ENDIF.
IF es_data-message IS NOT INITIAL.
es_data-message = |抬头:{ es_data-message } |.
ENDIF.
LOOP AT lt_comp."组件校验
CLEAR lv_message.
IF lt_comp-werks IS INITIAL.
lv_message = |{ lv_message }工厂必填;|.
ENDIF.
IF lt_comp-matnr IS INITIAL.
lv_message = |{ lv_message }物料编码必填;|.
ENDIF.
IF lt_comp-postp IS INITIAL.
lv_message = |{ lv_message }项目类别必填;|.
ENDIF.
IF lt_comp-bdmng <= 0.
lv_message = |{ lv_message }需求数量必填;|.
ENDIF.
IF lt_comp-erfme IS INITIAL.
lv_message = |{ lv_message }单位必填;|.
ENDIF.
IF lt_comp-vornr IS INITIAL.
lv_message = |{ lv_message }工序必填;|.
ENDIF.
IF lv_message IS NOT INITIAL.
es_data-message = |{ es_data-message }组件第{ lt_comp-rowno }行:{ lv_message }|.
EXIT.
ENDIF.
ENDLOOP.
LOOP AT lt_oper."工序校验
CLEAR lv_message.
IF lt_oper-vornr IS INITIAL.
lv_message = |{ lv_message }工序必填;|.
ENDIF.
IF lt_oper-arbpl IS INITIAL.
lv_message = |{ lv_message }工作中心必填;|.
ENDIF.
IF lt_oper-steus IS INITIAL.
lv_message = |{ lv_message }控制码必填;|.
ENDIF.
IF lt_oper-ltxa1 IS INITIAL.
lv_message = |{ lv_message }工序名称必填;|.
ENDIF.
IF lt_oper-bmsch <= 0.
lv_message = |{ lv_message }基本数量必填;|.
ENDIF.
IF lt_oper-mgvrg <= 0.
lv_message = |{ lv_message }工序数量必填;|.
ENDIF.
IF lv_message IS NOT INITIAL.
es_data-message = |{ es_data-message }工序第{ lt_comp-rowno }行:{ lv_message }|.
EXIT.
ENDIF.
ENDLOOP.
IF es_data-message IS NOT INITIAL.
"返回结果
es_data-type1 = 'E'.
UPDATE zpptb022_header SET type1 = es_data-type1
message = es_data-message
WHERE ifno = iv_ifno.
COMMIT WORK.
EXIT.
ENDIF.
"处理数据,创建工单
CLEAR es_data.
* 如果APS传输AUFNR=AFKO-AUFNR,就是工单修改,如果AUFNR=PLAF-PLNUM,就是计划订单转生成订单,AUFNR=‘’就是新建工单
IF ls_header-aufnr IS NOT INITIAL.
lv_aufnr = ls_header-aufnr.
lv_aufnr = |{ lv_aufnr ALPHA = IN }|.
SELECT SINGLE COUNT(*) FROM afko WHERE aufnr EQ lv_aufnr.
IF sy-subrc EQ 0. "工单修改
CASE ls_header-auart.
WHEN 'Z002' OR 'Z006' OR 'Z003' OR 'Z004' OR 'Z001' OR 'Z005'OR 'Z008' OR 'Z009'.
CLEAR: ls_orderdata, ls_orderdatax,ls_return.
* ls_orderdata-plant = ls_header-werks.
* ls_orderdata-planning_plant = ls_header-werks.
"TJ02T-TXT04 TXT04 订单状态 新工单默认CRTD不需要修改,如果是REL则需要BAPI执行释放
* ls_orderdata-order_type = ls_header-auart.
* ls_header-plnbez = |{ ls_header-plnbez ALPHA = IN WIDTH = 18 }|.
* ls_orderdata-material = ls_header-plnbez.
"MAKT-MAKTX MAKTX 物料描述 :不需要
ls_orderdata-quantity = ls_header-gamng.
ls_orderdata-quantity_uom = ls_header-gmein.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = ls_orderdata-quantity_uom
* LANGUAGE = SY-LANGU
IMPORTING
OUTPUT = ls_orderdata-quantity_uom
* EXCEPTIONS
* UNIT_NOT_FOUND = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ls_orderdata-basic_start_date = ls_header-gstrp.
ls_orderdata-basic_end_date = ls_header-gltrp.
* ls_orderdata-sales_order = ls_header-kdauf.
* ls_orderdata-sales_order_item = ls_header-kdpos.
ls_orderdata-prod_version = ls_header-verid.
ls_orderdatax-quantity = 'X'.
ls_orderdatax-quantity_uom = 'X'.
ls_orderdatax-basic_start_date = 'X'.
ls_orderdatax-basic_end_date = 'X'.
ls_orderdatax-prod_version = 'X'.
"AFKO-STLAL STLAL 备选BOM :目前不需要,只是用于核对数据
CALL FUNCTION 'BAPI_PRODORD_CHANGE'
EXPORTING
number = lv_aufnr
orderdata = ls_orderdata
orderdatax = ls_orderdatax
IMPORTING
return = ls_return
* ORDER_TYPE =
* ORDER_STATUS =
* MASTER_DATA_READ =
* TABLES
* FSH_BUNDLES =
.
IF ls_return-type = 'E' OR ls_return-type = 'A'.
es_data-type1 = 'E'.
es_data-message = ls_return-message.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
es_data-aufnr = lv_aufnr.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
WAIT UP TO '0.5' SECONDS.
UPDATE aufk SET zprolin = ls_header-zprolin
zcomment = ls_header-zcomment
zkhck = ls_header-zkhck
ZDDXQ = ls_header-ZDDXQ
zaps = ls_header-zaps
ZSH = ls_header-LOT
ZXZ = ls_header-STAGE
zporder = ls_header-zporder
zkssk = ls_header-zkssk
zissk = ls_header-zissk
ZBZ1 = ls_header-ZBZ1
ZBZ2 = ls_header-ZBZ2
ZBZSJ = ls_header-ZBZSJ
" 添加字段 ZZZXQSJ 后道上线日期 20231208
ZZZXQSJ = ls_header-ZZZXQSJ
WHERE aufnr = es_data-aufnr.
IF ls_header-zsnno IS NOT INITIAL.
UPDATE aufk SET
zsnno = ls_header-zsnno
WHERE aufnr = es_data-aufnr.
ENDIF.
UPDATE afko SET fevor = ls_header-fevor WHERE aufnr = es_data-aufnr.
es_data-type1 = 'S'.
es_data-message = '工单修改成功.'.
* "更新长文本
IF ls_header-longtext IS NOT INITIAL.
ls_thead-tdobject = 'AUFK'. "文本对象
ls_thead-tdid = 'KOPF'. "文本id
ls_thead-tdspras = sy-langu. "语言
CONCATENATE sy-mandt es_data-aufnr INTO ls_thead-tdname.
CALL FUNCTION 'SCMS_STRING_TO_FTEXT'
EXPORTING
text = ls_header-longtext
TABLES
ftext_tab = lt_ftab[].
LOOP AT lt_ftab.
lt_texts-tdline = lt_ftab.
APPEND lt_texts.
ENDLOOP.
CALL FUNCTION 'SAVE_TEXT'
EXPORTING
client = sy-mandt
header = ls_thead
savemode_direct = 'X'
TABLES
lines = lt_texts[].
IF sy-subrc EQ 0.
UPDATE aufk SET ltext = '1' WHERE aufnr = es_data-aufnr.
ELSE.
es_data-message = es_data-message && '但长文本更新失败.'.
ENDIF.
ENDIF.
"REL释放订单
IF ls_header-txt04 = 'REL'.
CLEAR: ls_return,lt_orders,lt_orders[].
lt_orders-order_number = es_data-aufnr.
APPEND lt_orders.
CALL FUNCTION 'BAPI_PRODORD_RELEASE'
IMPORTING
return = ls_return
TABLES
orders = lt_orders[].
IF ls_return-type CA 'EAX'.
es_data-message = es_data-message && '但工单下达失败(' && ls_return-message && ').'.
ENDIF.
ENDIF.
""begin 增加生产工单 on 20240425 by ZHOUZQ
""end
"组件变更、工序变更
IF ls_header-auart = 'Z003' OR ls_header-auart = 'Z004'.
IF lt_comp[] IS NOT INITIAL AND es_data-type1 <> 'E'."组件变更
CALL FUNCTION 'ZPP_FM_009_COMP'
EXPORTING
iv_aufnr = es_data-aufnr
TABLES
it_comp = lt_comp[]
CHANGING
cs_data = es_data.
ENDIF.
IF lt_oper[] IS NOT INITIAL AND es_data-type1 <> 'E'."工序变更
CALL FUNCTION 'ZPP_FM_009_OPER'
EXPORTING
iv_aufnr = es_data-aufnr
TABLES
it_oper = lt_oper[]
CHANGING
cs_data = es_data.
ENDIF.
ENDIF.
"删除工单
IF es_data-type1 = 'E'.
CALL FUNCTION 'DEQUEUE_ESORDER' "解锁
EXPORTING
aufnr = es_data-aufnr
EXCEPTIONS
OTHERS = 1.
CLEAR: ls_return,lt_orders,lt_orders[].
lt_orders-order_number = es_data-aufnr.
APPEND lt_orders.
CALL FUNCTION 'BAPI_PRODORD_SET_DELETION_FLAG'
IMPORTING
return = ls_return
TABLES
orders = lt_orders[].
IF ls_return-type CA 'EAX'.
es_data-message = es_data-message && '.工单删除失败(' && ls_return-message && ').'.
ELSE.
es_data-message = es_data-message && '.工单已标记删除.'.
ENDIF.
ENDIF.
ENDIF.
WHEN OTHERS.
es_data-type1 = 'E'.
es_data-message = '接口不支持该类型工单的创建.'.
ENDCASE.
ELSE.
ls_header-aufnr = |{ ls_header-aufnr ALPHA = OUT }|.
lv_plnum = ls_header-aufnr.
lv_plnum = |{ lv_plnum ALPHA = IN }|.
SELECT SINGLE COUNT(*) FROM plaf WHERE plnum EQ lv_plnum.
IF sy-subrc EQ 0. "计划订单转生成订单
DATA ls_ret TYPE bapireturn1.
ls_orderdata-quantity = ls_header-gamng.
ls_orderdata-quantity_uom = ls_header-gmein.
ls_orderdata-basic_start_date = ls_header-gstrp.
ls_orderdata-basic_end_date = ls_header-gltrp.
* ls_orderdata-sales_order = ls_header-kdauf.
* ls_orderdata-sales_order_item = ls_header-kdpos.
ls_orderdata-prod_version = ls_header-verid.
CALL FUNCTION 'BAPI_PLANNEDORDER_CHANGE'
EXPORTING
plannedorder = lv_plnum "计划订单
headerdata = VALUE bapiplaf_i2(
total_plord_qty = ls_header-gamng "数量
base_uom = ls_header-gmein "单位
version = ls_header-verid "版本
order_start_date = ls_header-gstrp " 日期
order_fin_date = ls_header-gltrp " 日期
firming_ind = 'X' " 标识必打,不然转单bapi报错
conversion_ind = 'X' ) " 标识必打,不然转单bapi报错
headerdatax = VALUE bapiplaf_i2x(
* base_uom = 'X'
version = 'X'
total_plord_qty = 'X'
order_start_date = 'X'
order_fin_date = 'X'
firming_ind = 'X'
conversion_ind = 'X' )
IMPORTING
return = ls_ret.
IF ls_ret-type EQ 'S'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ELSE.
es_data-type1 = 'E'.
es_data-message = ls_return-message.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
CHECK es_data-type1 NE 'E'.
CALL FUNCTION 'BAPI_PRODORD_CREATE_FROM_PLORD'
EXPORTING
planned_order = lv_plnum
order_type = ls_header-auart
* ORDER_NUMBER =
IMPORTING
return = ls_return
production_order = es_data-aufnr.
* PROD_ORDER_TYPE =
.
IF es_data-aufnr IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
WAIT UP TO '0.5' SECONDS.
UPDATE aufk SET zprolin = ls_header-zprolin
zcomment = ls_header-zcomment
zkhck = ls_header-zkhck
ZDDXQ = ls_header-ZDDXQ
zaps = ls_header-zaps
zporder = ls_header-zporder
zkssk = ls_header-zkssk
zissk = ls_header-zissk
ZBZ1 = ls_header-ZBZ1
ZBZ2 = ls_header-ZBZ2
ZBZSJ = ls_header-ZBZSJ
" 添加字段 ZZZXQSJ 后道上线日期 20231208
ZZZXQSJ = ls_header-ZZZXQSJ
WHERE aufnr = es_data-aufnr. IF ls_header-zsnno IS NOT INITIAL.
UPDATE aufk SET
zsnno = ls_header-zsnno
WHERE aufnr = es_data-aufnr.
ENDIF.
UPDATE afko SET fevor = ls_header-fevor WHERE aufnr = es_data-aufnr.
es_data-type1 = 'S'.
es_data-message = '计划订单转化成功.'.
* "更新长文本
IF ls_header-longtext IS NOT INITIAL.
ls_thead-tdobject = 'AUFK'. "文本对象
ls_thead-tdid = 'KOPF'. "文本id
ls_thead-tdspras = sy-langu. "语言
CONCATENATE sy-mandt es_data-aufnr INTO ls_thead-tdname.
CALL FUNCTION 'SCMS_STRING_TO_FTEXT'
EXPORTING
text = ls_header-longtext
TABLES
ftext_tab = lt_ftab[].
LOOP AT lt_ftab.
lt_texts-tdline = lt_ftab.
APPEND lt_texts.
ENDLOOP.
CALL FUNCTION 'SAVE_TEXT'
EXPORTING
client = sy-mandt
header = ls_thead
savemode_direct = 'X'
TABLES
lines = lt_texts[].
IF sy-subrc EQ 0.
UPDATE aufk SET ltext = '1' WHERE aufnr = es_data-aufnr.
ELSE.
es_data-message = es_data-message && '但长文本更新失败.'.
ENDIF.
ENDIF.
""begin 增加生产工单 on 20240425 by ZHOUZQ
* "REL释放订单
* IF ls_header-txt04 = 'REL'.
* CLEAR: ls_return,lt_orders,lt_orders[].
* lt_orders-order_number = es_data-aufnr.
* APPEND lt_orders.
* CALL FUNCTION 'BAPI_PRODORD_RELEASE'
* IMPORTING
* return = ls_return
* TABLES
* orders = lt_orders[].
* IF ls_return-type CA 'EAX'.
* es_data-message = es_data-message && '但工单下达失败(' && ls_return-message && ').'.
* ENDIF.
* ENDIF.
""end
"组件变更、工序变更
IF ls_header-auart = 'Z003' OR ls_header-auart = 'Z004'.
IF lt_comp[] IS NOT INITIAL AND es_data-type1 <> 'E'."组件变更
CALL FUNCTION 'ZPP_FM_009_COMP'
EXPORTING
iv_aufnr = es_data-aufnr
TABLES
it_comp = lt_comp[]
CHANGING
cs_data = es_data.
ENDIF.
IF lt_oper[] IS NOT INITIAL AND es_data-type1 <> 'E'."工序变更
CALL FUNCTION 'ZPP_FM_009_OPER'
EXPORTING
iv_aufnr = es_data-aufnr
TABLES
it_oper = lt_oper[]
CHANGING
cs_data = es_data.
ENDIF.
ENDIF.
"删除工单
IF es_data-type1 = 'E'.
CALL FUNCTION 'DEQUEUE_ESORDER' "解锁
EXPORTING
aufnr = es_data-aufnr
EXCEPTIONS
OTHERS = 1.
CLEAR: ls_return,lt_orders,lt_orders[].
lt_orders-order_number = es_data-aufnr.
APPEND lt_orders.
CALL FUNCTION 'BAPI_PRODORD_SET_DELETION_FLAG'
IMPORTING
return = ls_return
TABLES
orders = lt_orders[].
IF ls_return-type CA 'EAX'.
es_data-message = es_data-message && '.工单删除失败(' && ls_return-message && ').'.
ELSE.
es_data-message = es_data-message && '.工单已标记删除.'.
ENDIF.
ENDIF.
ELSE.
es_data-type1 = 'E'.
es_data-message = ls_return-message.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
ELSE.
es_data-type1 = 'E'.
es_data-message = '单据号在SAP中找不到对应工单和计划订单.'.
ENDIF.
ENDIF.
ELSE.
CASE ls_header-auart.
WHEN 'Z002' OR 'Z006' OR 'Z003' OR 'Z004' OR 'Z001' OR 'Z005' OR 'Z008' OR 'Z009'.
CLEAR: ls_order_create,ls_return.
ls_order_create-plant = ls_header-werks.
ls_order_create-planning_plant = ls_header-werks.
"TJ02T-TXT04 TXT04 订单状态 新工单默认CRTD不需要修改,如果是REL则需要BAPI执行释放
ls_order_create-order_type = ls_header-auart.
ls_header-plnbez = |{ ls_header-plnbez ALPHA = IN WIDTH = 18 }|.
ls_order_create-material = ls_header-plnbez.
"MAKT-MAKTX MAKTX 物料描述 :不需要
ls_order_create-quantity = ls_header-gamng.
ls_order_create-quantity_uom = ls_header-gmein.
ls_order_create-basic_start_date = ls_header-gstrp.
ls_order_create-basic_end_date = ls_header-gltrp.
ls_order_create-sales_order = ls_header-kdauf.
ls_order_create-sales_order_item = ls_header-kdpos.
ls_order_create-prod_version = ls_header-verid.
"AFKO-STLAL STLAL 备选BOM :目前不需要,只是用于核对数据
CALL FUNCTION 'BAPI_PRODORD_CREATE'
EXPORTING
orderdata = ls_order_create
IMPORTING
return = ls_return
order_number = es_data-aufnr.
IF es_data-aufnr IS INITIAL.
es_data-type1 = 'E'.
es_data-message = ls_return-message.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
" sn码修改注释取消 20240105 byHEJT START
DATA:LINLOCZPPTB037 TYPE ZPPTB037.
DATA:STRRESULT TYPE CHAR20.
CALL FUNCTION 'ZFMSN'
EXPORTING
aufnr = es_data-aufnr
auart = ls_header-auart
plnbez = ls_header-plnbez
gstrp = ls_header-gstrp
IMPORTING
RESULT = STRRESULT
LINZPPTB037 = LINLOCZPPTB037
.
" sn码修改注释取消 20240105 byHEJT END
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
WAIT UP TO '0.5' SECONDS.
UPDATE aufk SET zprolin = ls_header-zprolin
zcomment = ls_header-zcomment
zkhck = ls_header-zkhck
ZDDXQ = ls_header-ZDDXQ
zaps = ls_header-zaps
zporder = ls_header-zporder
zkssk = ls_header-zkssk
zissk = ls_header-zissk
ZBZ1 = ls_header-ZBZ1
ZBZ2 = ls_header-ZBZ2
ZBZSJ = ls_header-ZBZSJ
" 添加字段 ZZZXQSJ 后道上线日期 20231208
ZZZXQSJ = ls_header-ZZZXQSJ
WHERE aufnr = es_data-aufnr.
IF ls_header-zsnno IS NOT INITIAL.
UPDATE aufk SET
zsnno = ls_header-zsnno
WHERE aufnr = es_data-aufnr.
ENDIF.
UPDATE afko SET fevor = ls_header-fevor WHERE aufnr = es_data-aufnr.
es_data-type1 = 'S'.
es_data-message = '工单创建成功.'.
* "更新长文本
IF ls_header-longtext IS NOT INITIAL.
ls_thead-tdobject = 'AUFK'. "文本对象
ls_thead-tdid = 'KOPF'. "文本id
ls_thead-tdspras = sy-langu. "语言
CONCATENATE sy-mandt es_data-aufnr INTO ls_thead-tdname.
CALL FUNCTION 'SCMS_STRING_TO_FTEXT'
EXPORTING
text = ls_header-longtext
TABLES
ftext_tab = lt_ftab[].
LOOP AT lt_ftab.
lt_texts-tdline = lt_ftab.
APPEND lt_texts.
ENDLOOP.
CALL FUNCTION 'SAVE_TEXT'
EXPORTING
client = sy-mandt
header = ls_thead
savemode_direct = 'X'
TABLES
lines = lt_texts[].
IF sy-subrc EQ 0.
UPDATE aufk SET ltext = '1' WHERE aufnr = es_data-aufnr.
ELSE.
es_data-message = es_data-message && '但长文本更新失败.'.
ENDIF.
ENDIF.
* "REL释放订单
IF ls_header-txt04 = 'REL'.
CLEAR: ls_return,lt_orders,lt_orders[].
lt_orders-order_number = es_data-aufnr.
APPEND lt_orders.
CALL FUNCTION 'BAPI_PRODORD_RELEASE'
IMPORTING
return = ls_return
TABLES
orders = lt_orders[].
IF ls_return-type CA 'EAX'.
es_data-message = es_data-message && '但工单下达失败(' && ls_return-message && ').'.
ENDIF.
ENDIF.
"组件变更、工序变更
IF ls_header-auart = 'Z003' OR ls_header-auart = 'Z004'.
IF lt_comp[] IS NOT INITIAL AND es_data-type1 <> 'E'."组件变更
CALL FUNCTION 'ZPP_FM_009_COMP'
EXPORTING
iv_aufnr = es_data-aufnr
TABLES
it_comp = lt_comp[]
CHANGING
cs_data = es_data.
ENDIF.
IF lt_oper[] IS NOT INITIAL AND es_data-type1 <> 'E'."工序变更
CALL FUNCTION 'ZPP_FM_009_OPER'
EXPORTING
iv_aufnr = es_data-aufnr
TABLES
it_oper = lt_oper[]
CHANGING
cs_data = es_data.
ENDIF.
ENDIF.
"删除工单
IF es_data-type1 = 'E'.
CALL FUNCTION 'DEQUEUE_ESORDER' "解锁
EXPORTING
aufnr = es_data-aufnr
EXCEPTIONS
OTHERS = 1.
CLEAR: ls_return,lt_orders,lt_orders[].
lt_orders-order_number = es_data-aufnr.
APPEND lt_orders.
CALL FUNCTION 'BAPI_PRODORD_SET_DELETION_FLAG'
IMPORTING
return = ls_return
TABLES
orders = lt_orders[].
IF ls_return-type CA 'EAX'.
es_data-message = es_data-message && '.工单删除失败(' && ls_return-message && ').'.
ELSE.
es_data-message = es_data-message && '.工单已标记删除.'.
ENDIF.
ENDIF.
ENDIF.
WHEN OTHERS.
es_data-type1 = 'E'.
es_data-message = '接口不支持该类型工单的创建.'.
ENDCASE.
ENDIF.
"返回结果
UPDATE zpptb022_header SET aufnr = es_data-aufnr
type1 = es_data-type1
message = es_data-message
WHERE ifno = iv_ifno.
COMMIT WORK.
ENDFUNCTION.
有问题的代码在318-330行这个地方
"REL释放订单
IF ls_header-txt04 = 'REL'.
CLEAR: ls_return,lt_orders,lt_orders[].
lt_orders-order_number = es_data-aufnr.
APPEND lt_orders.
CALL FUNCTION 'BAPI_PRODORD_RELEASE'
IMPORTING
return = ls_return
TABLES
orders = lt_orders[].
IF ls_return-type CA 'EAX'.
es_data-message = es_data-message && '但工单下达失败(' && ls_return-message && ').'.
ENDIF.
ENDIF.
如何用其他的方式修改我上述完整代码中存在问题的代码,并且解决在启用了可用性检查的情况下即使缺料也可以正常下达工单变成REL。修改318-330行,由调用BAPI_PRODORD_RELEASE改为其他的形式可以解决问题