更改生产订单版本 ,功能类似/SAPAPO/RRP2
ORM frm_update_verion USING ps_planord TYPE ty_planord.
DATA:lt_orders TYPE /sapapo/om_order_ext_tab,
lt_activities TYPE /sapapo/om_tab_act,
lt_source TYPE /sapapo/sources_tab,
ls_pdskey TYPE bapi10014pdskey,
lt_pdskeys LIKE TABLE OF ls_pdskey,
ls_gen_params TYPE /sapapo/om_gen_params,
lv_message TYPE char80,
ls_pds_mode TYPE bapi10014pdsmodeo,
lt_pds_modes LIKE TABLE OF ls_pds_mode,
lt_return LIKE TABLE OF bapiret2,
lt_order TYPE /sapapo/om_ordid_tab,
lt_aoint TYPE TABLE OF /sapapo/pt_aoint_str,
ls_res_head TYPE /sapapo/cres_res_head_plant.
CHECK ps_planord-ordid IS NOT INITIAL.
READ TABLE gt_ext_outputs INTO DATA(ls_ext_outputs) WITH KEY orderid = ps_planord-ordid BINARY SEARCH.
IF ls_ext_outputs IS NOT INITIAL.
CALL FUNCTION '/SAPAPO/RRP_SOURCES_GET'
EXPORTING
iv_pegid = ls_ext_outputs-pegid
IMPORTING
et_source = lt_source
EXCEPTIONS
user_canceled = 1.
READ TABLE gt_ordkeys INTO DATA(ls_ordkey) WITH KEY ordid = ps_planord-ordid BINARY SEARCH.
READ TABLE gt_ordmaps INTO DATA(ls_ordmap) WITH KEY ordid = ps_planord-ordid BINARY SEARCH.
LOOP AT lt_source INTO DATA(ls_source).
DATA(lv_len) = strlen( ls_source-name ) - 3.
DATA(lv_verid) = ls_source-name+lv_len(3).
IF lv_verid NE ps_planord-verid.
CONTINUE.
ENDIF.
SELECT SINGLE vrsioex INTO @DATA(l_vrsionex) FROM /sapapo/apo01 WHERE vrsioid = @ls_source-versid.
ls_pdskey-pds_name = ls_source-name.
ls_pdskey-pds_usage = 'P'.
ls_pdskey-planning_version = l_vrsionex.
APPEND ls_pdskey TO lt_pdskeys.
EXIT.
ENDLOOP.
IF lt_pdskeys IS INITIAL.
MESSAGE e059(zpp01) WITH ls_ordkey-ordno INTO lv_message.
CALL FUNCTION '/SAPAPO/OM_MESSAGES_SY_STORE'.
EXIT.
ENDIF.
CALL FUNCTION 'BAPI_PDSSRVAPS_GETLIST'
EXPORTING
logical_system = ls_ordmap-logsys
TABLES
pds_key = lt_pdskeys
pds_mode = lt_pds_modes
return = lt_return.
IF lt_pds_modes[] IS INITIAL.
LOOP AT lt_return INTO DATA(ls_return).
CALL FUNCTION '/SAPAPO/OM_MESSAGES_SY_STORE'
EXPORTING
iv_msgty = ls_return-type
iv_msgid = ls_return-id
iv_msgno = ls_return-number
iv_msgv1 = ls_return-message_v1
iv_msgv2 = ls_return-message_v2
iv_msgv3 = ls_return-message_v3
iv_msgv4 = ls_return-message_v4
iv_write_message = gc_false.
ENDLOOP.
ENDIF.
CALL FUNCTION '/SAPAPO/CRES_RESOURCE_READ'
EXPORTING
i_resuid = ls_ext_outputs-main_resource
IMPORTING
e_res_head = ls_res_head
EXCEPTIONS
not_qualified = 1
not_found = 2
simversid_is_initial = 3
location_not_found = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE w060(zpp01) WITH ls_ordkey-ordno INTO lv_message.
CALL FUNCTION '/SAPAPO/OM_MESSAGES_SY_STORE'
EXPORTING
iv_write_message = gc_false.
ENDIF.
READ TABLE lt_pds_modes INTO ls_pds_mode WITH KEY resource = ls_res_head-name.
IF sy-subrc = 0.
READ TABLE lt_source INTO ls_source WITH KEY name = ls_pds_mode-pds_name .
IF sy-subrc = 0.
CALL FUNCTION '/SAPAPO/RRP_ORDER_SET_SOURCE'
EXPORTING
iv_ordid = ps_planord-ordid
iv_position_no = ps_planord-posno
iv_line_no = ps_planord-linno
iv_application = gs_heur_settings-heur_pps-application
iv_trpid = ls_source-trpid
iv_ttype = ls_source-ttype
iv_beskz = ls_source-beskz
EXCEPTIONS
order_not_changable = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE e061(zpp01) WITH ls_ordkey-ordno INTO lv_message.
CALL FUNCTION '/SAPAPO/OM_MESSAGES_SY_STORE'.
ELSE.
MESSAGE s062(zpp01) WITH ls_ordkey-ordno INTO lv_message.
CALL FUNCTION '/SAPAPO/OM_MESSAGES_SY_STORE'.
APPEND ps_planord-ordid TO gt_object_keys-orderid_tab.
ENDIF.
ENDIF.
ENDIF.
ELSE.
MESSAGE e060(/sapapo/rrp) INTO lv_message.
CALL FUNCTION '/SAPAPO/OM_MESSAGES_SY_STORE' EXPORTING iv_write_message = gc_false.
ENDIF.
ENDFORM.
更改订单数量
FORM frm_update_qty CHANGING ps_planord TYPE ty_planord
e_changed_objects TYPE /sapapo/heur_changed_objects
e_object_keys TYPE /sapapo/heur_object_keys
ps_ztpp128 STRUCTURE ztpp128.
DATA:
ls_ext_io_key TYPE /sapapo/om_ext_io_key,
lt_io_key TYPE /sapapo/om_io_key_tab,
lt_changed_pegids TYPE /sapapo/om_pegid_tab,
lt_changed_capreq TYPE /sapapo/om_cap_req_pt_tab,
lv_new_orderid TYPE /sapapo/orderuid,
ls_ordkey TYPE /sapapo/ordkey,
lv_message TYPE char80.
"DATA(lo_ppds) = NEW zcl_ppds_inf( ).
DATA lv_ptime TYPE /sapapo/real_menge.
DATA lt_aoext TYPE /sapapo/seq_aoext_tab.
DATA lv_astad TYPE /sapapo/pt_astad. "活动开始日期
DATA lv_bmsch_org TYPE zde_bmsch.
DATA lv_new_qty TYPE /sapapo/real_menge.
DATA ls_heur_settings TYPE /sapapo/heur_settings.
lv_ptime = ps_planord-ptime / 3600.
lv_bmsch_org = COND #( WHEN lv_ptime IS NOT INITIAL THEN ps_planord-quant / lv_ptime ELSE 0 ).
lv_new_qty = COND #( WHEN lv_bmsch_org IS INITIAL OR ps_ztpp128-bmsch IS INITIAL THEN ps_planord-quant
ELSE ( ps_ztpp128-bmsch / lv_bmsch_org ) * ps_planord-quant ).
ps_planord-real_quantity = lv_new_qty .
ps_planord-real_quantity_org = ps_planord-quant.
IF ps_planord-real_quantity EQ ps_planord-real_quantity_org .
EXIT.
ENDIF.
READ TABLE gt_ext_outputs INTO DATA(ls_ext_outputs) WITH KEY orderid = ps_planord-ordid BINARY SEARCH.
READ TABLE gt_aoextseq INTO DATA(ls_aoextseq) WITH KEY ordno = ps_planord-ordno actyp = 'S' .
MOVE-CORRESPONDING gs_heur_settings TO ls_heur_settings.
CONVERT DATE ls_aoextseq-astad TIME ls_aoextseq-astat INTO TIME STAMP ls_heur_settings-heur_pps-starttime TIME ZONE sy-zonlo.
CALL FUNCTION '/SAPAPO/RRP_ORDER_CHANGE_INTAC'
EXPORTING
iv_orderid = ps_planord-ordid
iv_position_no = ps_planord-posno
iv_line_no = ps_planord-linno
iv_is_input_node = ls_ext_outputs-is_input_node
iv_real_quantity_new = ps_planord-real_quantity
"iv_endtime = gs_heur_settings-heur_pps-endtime
is_heur_settings = ls_heur_settings
iv_application = gs_heur_settings-heur_pps-application
iv_dialog = abap_false
IMPORTING
et_changed_ios = lt_io_key
et_changed_pegids = lt_changed_pegids
et_changed_cap_reqs = lt_changed_capreq
ev_new_orderid = lv_new_orderid
EXCEPTIONS
order_not_changable = 1
error_message = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE e064(zpp01) WITH ps_planord-ordno INTO lv_message.
CALL FUNCTION '/SAPAPO/OM_MESSAGES_SY_STORE'.
ELSE.
MESSAGE s063(zpp01) WITH ps_planord-ordno INTO lv_message.
CALL FUNCTION '/SAPAPO/OM_MESSAGES_SY_STORE'.
ENDIF.
APPEND LINES OF lt_io_key TO e_changed_objects-io_key_tab.
APPEND LINES OF lt_changed_pegids TO e_changed_objects-pegid_tab.
APPEND LINES OF lt_changed_capreq TO e_changed_objects-cap_req_pt_tab.
IF lv_new_orderid IS NOT INITIAL.
APPEND lv_new_orderid TO e_object_keys-orderid_tab.
ENDIF.
ENDFORM.
固定计划订单日期
FORM frm_order_fix USING pt_planord TYPE tt_planord.
DATA ls_exclude_fields TYPE /sapapo/om_exclude_fields.
DATA lt_opr TYPE /sapapo/dm_opr_tab.
DATA lt_fix_act TYPE /sapapo/om_tab_act.
DATA lt_activities TYPE /sapapo/om_tab_act.
DATA lt_return TYPE bapiret2_t.
DATA lv_message TYPE string.
DATA lv_simsession TYPE /sapapo/om_simsession.
ls_exclude_fields-slacktime = 'X'.
ls_exclude_fields-devquantity = 'X'.
SORT pt_planord BY ordid.
DELETE ADJACENT DUPLICATES FROM pt_planord COMPARING ordid.
LOOP AT pt_planord INTO DATA(ls_planord).
REFRESH: lt_activities[],lt_opr[],lt_fix_act.
CALL FUNCTION '/SAPAPO/RRP_LC_ORDER_GET_DATA'
EXPORTING
iv_order = ls_planord-ordid
is_exclude_fields = ls_exclude_fields
iv_simversion = gv_simid
IMPORTING
et_activities = lt_activities[]
et_opr = lt_opr
EXCEPTIONS
error_message = 1.
READ TABLE lt_opr WITH KEY oprnr = 9000 INTO DATA(ls_opr).
IF sy-subrc EQ 0.
READ TABLE lt_activities[] INTO DATA(ls_act) WITH KEY oprcounter = ls_opr-oprcounter
acttype = 'P'.
IF sy-subrc EQ 0.
ls_act-act_status = 2.
APPEND ls_act TO lt_fix_act.
ELSE.
CONTINUE.
ENDIF.
ENDIF.
CALL FUNCTION '/SAPAPO/OM_MESSAGES_INITIALIZE'.
CALL FUNCTION '/SAPAPO/RRP_SIMSESSION_CREATE'
EXPORTING
iv_simid = gv_simid
IMPORTING
ev_simsession = lv_simsession.
CALL FUNCTION '/SAPAPO/EFPL_OPERATIONS_FIX'
EXPORTING
i_simsessid = lv_simsession
i_simverid = gv_simid
TABLES
i_act_fix_tab = lt_fix_act
EXCEPTIONS
operation_already_fixed = 1
interval_not_valid = 2
operation_not_fixed = 3.
CALL FUNCTION '/SAPAPO/OM_MESSAGES_GET'
IMPORTING
et_messages = lt_return.
LOOP AT lt_return INTO DATA(ls_return) WHERE type EQ 'A' OR type EQ 'E'.
EXIT.
ENDLOOP.
IF sy-subrc EQ 0.
MESSAGE e067(zpp01) WITH ls_planord-ordno INTO lv_message.
lv_message = |{ lv_message } { ls_return-message }|.
CALL FUNCTION '/SAPAPO/OM_MESSAGES_SY_STORE'.
ELSE.
MESSAGE s068(zpp01) WITH ls_planord-ordno INTO lv_message.
lv_message = |{ lv_message } { ls_return-message }|.
CALL FUNCTION '/SAPAPO/OM_MESSAGES_SY_STORE'.
* CALL FUNCTION '/SAPAPO/TSIM_SIMULATION_MERGE'
* EXCEPTIONS
* lc_error = 1
* OTHERS = 2.
ENDIF.
CLEAR lt_return.
ENDLOOP.
ENDFORM.