您的位置:首页 > 其它

ca02/ca12 Material Assignment(ca02/ca12分配物料)

2018-02-23 16:21 260 查看
 REPORT  zmkp_api_change_routing.

* global fields, declarations
* ================================================
 INCLUDE fc27date.
 INCLUDE cp_cs_const_message.
 TYPE-POOLS:   cc01,
               cpsc,
               cpcl,
               cmcl,
               czcl,
               cssc,
               cscl.

 TYPES: BEGIN OF create_parameter_type,
          matnr     TYPE mapl-matnr,
          werks     TYPE mapl-werks,
          verwe     TYPE plko-verwe,
          statu     TYPE plko-statu,
          plnme     TYPE plko-plnme,
          steus     TYPE plpo-steus,
          steuf     TYPE plfhd-steuf,
          fhmat     TYPE plfhd-matnr,
          sttag     TYPE plko-datuv,
          number(4) TYPE n.
 TYPES: END OF create_parameter_type.

 DATA g_parameter TYPE create_parameter_type.

* selection screen
* ================================================
 SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-t01.
 PARAMETERS: p_plnty TYPE plko-plnty DEFAULT 'S',
             "task list type
             p_plnnr TYPE plko-plnnr,
             "task list group number
             p_plnal TYPE plko-plnal DEFAULT '1',
             "group counter
             p_sttag TYPE plko-datuv DEFAULT sy-datum.
 "keydate
 SELECTION-SCREEN END OF BLOCK b1.

 SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-t02.
 PARAMETERS: p_matnr TYPE mapl-matnr,
             "material
             p_werks TYPE mapl-werks DEFAULT '1100',
             "plant
             p_verwe TYPE plko-verwe DEFAULT '1',
             "usage
             p_statu TYPE plko-statu DEFAULT '4',
             "status
             p_plnme TYPE plko-plnme DEFAULT 'TAI'.

 SELECTION-SCREEN END OF BLOCK b2.

 g_parameter-matnr = p_matnr.
 g_parameter-werks = p_werks.
 g_parameter-verwe = p_verwe.
 g_parameter-statu = p_statu.
 g_parameter-plnme = p_plnme.
 g_parameter-sttag = p_sttag.

* main program
* ================================================

* 1. load task list into internal EWB-buffer
 PERFORM load_task_list
   USING
     p_plnty
     p_plnnr
     p_plnal
     p_sttag.

* 2. change the loaded task list
 PERFORM change_task_list
   USING
     p_sttag.

* 3. save changed task list to database
 PERFORM save_to_database.

 COMMIT WORK.
 WRITE: / 'program ready.'.

*&———————————————————————*
*&      Form  LOAD_TASK_LIST
*&———————————————————————*
*       load task listr into internal EWB-BUFFER
*———————————————————————-*
*      –>I_PLNTY  task list type
*      –>I_PLNNR  task list number = group number
*      –>I_PLNAL  group counter
*      –>I_STTAG  keydate
*———————————————————————-*
 FORM load_task_list
   USING
     i_plnty LIKE plko-plnty
     i_plnnr LIKE plko-plnnr
     i_plnal LIKE plko-plnal
     i_sttag LIKE plko-datuv.

   DATA: l_classes_in_workarea  LIKE classes_in_workarea,
         l_tsk_plnty_selection  TYPE cpsc_plnty_type,
         lt_tsk_plnty_selection TYPE cpsc_plnty_type OCCURS 0,
         l_tsk_plnnr_selection  TYPE cpsc_plnnr_type,
         lt_tsk_plnnr_selection TYPE cpsc_plnnr_type OCCURS 0,
         l_tsk_plnal_selection  TYPE cpsc_plnal_type,
         lt_tsk_plnal_selection TYPE cpsc_plnal_type OCCURS 0,
         l_tsk_selection        TYPE cpsc_tsk_sel_type.

* objects for loading
   l_classes_in_workarea-mtk_inarea = 'X'.
   l_classes_in_workarea-tsk_inarea = 'X'.
   l_classes_in_workarea-seq_inarea = 'X'.
   l_classes_in_workarea-opr_inarea = 'X'.
   l_classes_in_workarea-suo_inarea = 'X'.
   l_classes_in_workarea-prt_inarea = 'X'.

* fill selection conditions – PLNTY
   CONCATENATE 'I' 'EQ' i_plnty INTO l_tsk_plnty_selection.
   APPEND l_tsk_plnty_selection TO lt_tsk_plnty_selection.
   l_tsk_selection-plnty = lt_tsk_plnty_selection.

   CONCATENATE 'I' 'EQ' i_plnnr INTO l_tsk_plnnr_selection.
   APPEND l_tsk_plnnr_selection TO lt_tsk_plnnr_selection.
   l_tsk_selection-plnnr = lt_tsk_plnnr_selection.

   CONCATENATE 'I' 'EQ' i_plnal INTO l_tsk_plnal_selection.
   APPEND l_tsk_plnal_selection TO lt_tsk_plnal_selection.
   l_tsk_selection-plnal = lt_tsk_plnal_selection.

* load objects into EWB
   CALL FUNCTION 'CP_CC_S_LOAD_COMPLEX_BY_TSK'
     EXPORTING
       i_class                        = 'P'
       i_classes_in_workarea          = l_classes_in_workarea
       i_cpsc_tsk_sel                 = l_tsk_selection
       i_date_from                    = i_sttag
       i_date_to                      = i_sttag
     EXCEPTIONS
       workarea_not_found             = 1
       workarea_wrong_type            = 2
       class_in_workarea_inconsistent = 3
       workarea_not_specified         = 4
       opr_not_found                  = 5
       no_selection_criteria          = 6
       invalid_selection_period       = 7
       key_date_required_for_ecm      = 8
       OTHERS                         = 9.

 ENDFORM.                    " load_task_list

*&———————————————————————*
*&      Form  create_task_list
*&———————————————————————*
*       text
*———————————————————————-*
*      –>I_PARAMETER  text
*———————————————————————-*
 FORM create_task_list
 USING
 i_parameter TYPE create_parameter_type.

   DATA: l_tsk          LIKE tsk_class_data,
         l_opr          LIKE opr_class_data,
         l_vornr(4)     TYPE n,
         l_mtk          LIKE mtk_class_data,
         l_max_vornr(4) TYPE n.

* create task list header
* ===============================================

   CLEAR l_tsk.
   l_tsk-plnty = 'S'.                 "task list type

   l_tsk-plnnr = '50000325'.
   l_tsk-plnal = '01'.
   l_tsk-zaehl = '1'.
   l_tsk-verwe = '1'.
   l_tsk-werks = '1100'.
   l_tsk-statu = '4'.
   l_tsk-plnme = i_parameter-plnme.

   CALL FUNCTION 'CP_CL_S_TSK_CHANGE'
     EXPORTING
       i_ecn_s               = ' '
       i_key_date_s          = i_parameter-sttag
       i_flg_tsk_check       = 'X'
       i_mark_txt_update     = ' '
       i_tsk_class_data      = l_tsk
       i_flg_collect_all_msg = ' '
* IMPORTING
*      E_ECM_DATA_ERROR_TYPE =
     EXCEPTIONS
       task_not_consistent   = 1
       no_authority          = 2
       no_valid_task         = 3
       task_not_locked       = 4
       ecm_data_not_suitable = 5
       OTHERS                = 6.

* material task list allocation
* ===============================================
   l_mtk-plnty = l_tsk-plnty.        "task list type
   l_mtk-plnnr = l_tsk-plnnr.        "task list group
   l_mtk-plnal = l_tsk-plnal.        "group counter
   l_mtk-matnr = i_parameter-matnr.  "material
   l_mtk-werks = i_parameter-werks.  "plant

   CALL FUNCTION 'CZ_CL_S_MTK_CREATE'
     EXPORTING
       i_key_date_s              = i_parameter-sttag
       i_mtk_class_data          = l_mtk
     EXCEPTIONS
       allocation_not_consistent = 1
       no_authority              = 2
       no_authority_for_material = 3
       task_not_locked           = 4
       no_valid_material         = 5
       no_valid_sales_document   = 6
       counter_overflow          = 7
       ident_already_exists      = 8
       no_valid_task             = 9
       path_incomplete           = 10
       ecm_data_not_suitable     = 11
       OTHERS                    = 12.

   WRITE: 'task list group ', l_tsk-plnnr, 'Updated'.

 ENDFORM.                    " create_task_list

*&———————————————————————*
*&      Form  SAVE_TO_DATABASE
*&———————————————————————*
*       save to database
*———————————————————————-*
 FORM save_to_database.
   CALL FUNCTION 'CP_CC_S_SAVE'.
 ENDFORM.                    " save_to_database

*———————————————————————*
*       FORM change_task_list                                         *
*———————————————————————*
*         changes the short text of all operations to
*         'SIMPLE_EWB_TEST'
*———————————————————————*
*         –> i_sttag  keydate                                        *
*———————————————————————*
 FORM change_task_list
 USING
 i_sttag LIKE plko-datuv.

   DATA: lt_opr_class_data LIKE tsk_class_data OCCURS 0,
         l_opr_class_data  LIKE tsk_class_data,
         lt_opr_ident      TYPE cpcl_tsk_tab_type,
*        l_opr_ident TYPE cpcl_tsk_type,
         l_opr_ident       LIKE LINE OF lt_opr_ident,
         lt_opr_lock       TYPE cpcl_tsk_lock_tab_type.

   CALL FUNCTION 'CP_CL_S_TSK_PROVIDE'
* EXPORTING
*   I_DATE_FROM             = DATE-MIN_GRG
*   I_DATE_TO               = DATE-MAX_GRG
*   I_PLNTY                 =
*   I_PLNNR                 =
*   I_PLNAL                 =
*   I_FLG_PROVIDE_INV       = ' '
* IMPORTING
*   E_TSK_INV               =
     TABLES
       e_tsk_class_data = lt_opr_class_data
     EXCEPTIONS
       wrong_key        = 1
       OTHERS           = 2.

* lock the operations and reload operations
   LOOP AT lt_opr_class_data INTO l_opr_class_data.
     MOVE-CORRESPONDING l_opr_class_data TO l_opr_ident.
     APPEND l_opr_ident TO lt_opr_ident.
   ENDLOOP.

   CALL FUNCTION 'CP_CC_S_RELOAD_BY_TSK'
     EXPORTING
       i_flg_set_lock        = 'X'
     IMPORTING
       e_tsk_lock            = lt_opr_lock
     CHANGING
       c_tsk_ident           = lt_opr_ident
     EXCEPTIONS
       reloading_not_allowed = 1
       OTHERS                = 2.

   IF NOT lt_opr_lock[] IS INITIAL.
     WRITE: /'error: some operations are already locked'.
     EXIT.
   ENDIF.

* again: provide all operations from EWB buffer
* reason: between first providing and locking another user can can
* change the operations
   CALL FUNCTION 'CP_CL_S_TSK_PROVIDE'
     TABLES
       e_tsk_class_data = lt_opr_class_data
     EXCEPTIONS
       wrong_key        = 1
       OTHERS           = 2.

* 3. change the task list
   PERFORM create_task_list
     USING
       g_parameter.

 ENDFORM.
 " change_task_list
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: