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

  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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChampaignWolf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值