SAP/ABAP

Routing maintenance

Denise 2022. 11. 17. 17:25

FUNCTION zpp_routing_comp_allocation.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(IV_PLNTY) TYPE  PLNTY DEFAULT 'N'
*"     REFERENCE(IV_WERKS) TYPE  WERKS_D
*"     REFERENCE(IV_MATNR) TYPE  MATNR
*"     REFERENCE(IV_PLNAL) TYPE  PLNAL
*"     REFERENCE(IV_DATUV) TYPE  DATUV DEFAULT SY-DATUM
*"     REFERENCE(IV_CAPID) TYPE  CAPID DEFAULT 'PP01'
*"     REFERENCE(IV_STLAN) TYPE  STLAN DEFAULT '1'
*"     REFERENCE(IV_STLAL) TYPE  STLAL
*"     REFERENCE(IV_VERID) TYPE  VERID OPTIONAL
*"     REFERENCE(IV_RELOAD) TYPE  BOOLEAN_FLG DEFAULT 'X'
*"  EXPORTING
*"     REFERENCE(EV_SUBRC) TYPE  SY-SUBRC
*"     REFERENCE(EV_MSGTXT) TYPE  ZDK_MSGTXT
*"----------------------------------------------------------------------

  TYPESBEGIN OF lty_s_stpf,
           stlty_w LIKE stpf-stlty_w,
           stlnr_w LIKE stpf-stlnr_w,
           stlal_w LIKE stpf-stlal_w,
           kante_k LIKE stpf-kante_k,
           stlty   LIKE stpf-stlty,
           stlnr   LIKE stpf-stlnr,
           stlal   LIKE stpf-stlal,
           stvkn   LIKE stpf-stvkn,
         END OF lty_s_stpf.
  TYPESlty_t_stpf TYPE TABLE OF lty_s_stpf
                         WITH DEFAULT KEY.

  DATAlv_plnnr     TYPE mapl-plnnr.
  DATAlv_subrc     TYPE sy-subrc.
  DATAlv_plnfl     TYPE plas-plnfl.
  DATAlv_oprid     TYPE oprid.
  DATAlv_tabix     TYPE sy-tabix.

  DATAls_topmat    TYPE cstmat.
  DATAlt_stpf      TYPE lty_t_stpf     WITH HEADER LINE.
  DATAlt_vornr     TYPE zpp_t_oprid    WITH HEADER LINE.

  DATAls_task_id   TYPE cpcl_tsk_ident_type.
  DATAlt_alloc     TYPE cpt_task_list_maint_com.
  DATAlt_allocx    TYPE cpt_task_list_maint_com_x.
  DATAls_alloc     LIKE LINE OF lt_alloc.
  DATAls_allocx    LIKE LINE OF lt_allocx.
  DATAlt_return    TYPE bapiret2_t WITH HEADER LINE.
  DATAlt_tree      TYPE TABLE OF itm_tree_class_data
                          WITH HEADER LINE.

  CLEARev_subrcev_msgtxt.

  CALL FUNCTION 'ZPP_ROUTING_GET_PLNNR'
    EXPORTING
      iv_werks iv_werks
      iv_matnr iv_matnr
    IMPORTING
      ev_plnnr lv_plnnr.

  CALL FUNCTION 'ZPP_ROUTING_ALLOC_DELETE'
    EXPORTING
      iv_werks  iv_werks
      iv_matnr  iv_matnr
      iv_plnty  iv_plnty
      iv_plnnr  lv_plnnr
      iv_plnal  iv_plnal
      iv_datuv  iv_datuv
      iv_reload 'X'
    IMPORTING
      ev_subrc  lv_subrc
      ev_msgtxt ev_msgtxt.
  IF lv_subrc IS NOT INITIAL.
    ev_subrc lv_subrc.
  ENDIF.

  IF ev_subrc IS INITIAL.
    IF iv_reload IS NOT INITIAL.
      CALL FUNCTION 'ZPP_ROUTING_RELOAD'
        EXPORTING
          iv_plnty iv_plnty
          iv_werks iv_werks
          iv_matnr iv_matnr
          iv_datuv iv_datuv
        IMPORTING
          ev_subrc lv_subrc
          ev_plnnr lv_plnnr.
      IF lv_subrc IS NOT INITIAL.
        ev_subrc 1.
        ev_msgtxt 'Reload failed. for allocation'.
        EXIT.
      ENDIF.
    ENDIF.

    CHECK lv_plnnr IS NOT INITIAL.

    ls_task_id-plnty  iv_plnty.
    ls_task_id-plnnr  lv_plnnr.
    ls_task_id-plnal  iv_plnal.

    CALL FUNCTION 'ZPP_ROUTING_READ_OPRID'
      EXPORTING
        is_task   ls_task_id
      IMPORTING
        ev_subrc  ev_subrc
        ev_msgtxt ev_msgtxt
        et_vornr  lt_vornr[].
    IF ev_subrc IS NOT INITIAL.
      EXIT.
    ENDIF.
  ENDIF.

*--- Set components
  IF ev_subrc IS INITIAL.
    PERFORM set_routing_comp_for_create  USING    iv_datuv
                                                  iv_matnr
                                                  iv_werks
                                                  iv_verid
                                                  iv_stlan
                                                  iv_stlal
                                                  ls_task_id
                                         CHANGING ev_subrc
                                                  ev_msgtxt
                                                  lt_vornr[]
                                                  lt_alloc[].

    IF lt_alloc[] IS INITIAL.
      ev_subrc  gc_data_error.
      ev_msgtxt 'Allocation data is invalid.'.
    ELSE.
      CALL FUNCTION 'CPCC_P_TASK_LIST_MAINT_COM'
        EXPORTING
          is_task_id      ls_task_id
          iv_key_date     iv_datuv
          it_comp_alloc   lt_alloc[]
          it_comp_alloc_x lt_allocx[]
          iv_application  iv_capid
          iv_bom_usage    iv_stlan
        CHANGING
          ct_return       lt_return[].

      LOOP AT lt_return.
        CASE lt_return-type.
          WHEN 'E' OR 'A'.
            lv_tabix sy-tabix.
            EXIT.
        ENDCASE.
      ENDLOOP.

      IF lv_tabix IS NOT INITIAL.
        READ TABLE lt_return INDEX lv_tabix.
        ev_subrc 1.
        ev_msgtxt lt_return-message.
        ROLLBACK WORK.
      ELSE.
        CALL FUNCTION 'CP_CC_S_SAVE'
          EXCEPTIONS
            error_at_save 1
            OTHERS        2.
        ev_subrc sy-subrc.
        IF sy-subrc EQ 0.
          ev_msgtxt 'Component allocation adjusted.'.
          COMMIT WORK.
        ELSE.
          ev_msgtxt 'Error Occurred.'.
          ROLLBACK WORK.
        ENDIF.
      ENDIF.
    ENDIF.

  ENDIF.

  LOOP AT lt_vornr.
    lv_oprid lt_vornr-plnkn.
    CALL FUNCTION 'CP_CL_OPR_UNLOCK'
      EXPORTING
        plnty          ls_task_id-plnty
        plnnr          ls_task_id-plnnr
        ident          lv_oprid
      EXCEPTIONS
        foreign_lock   1
        system_failure 2
        OTHERS         3.
    IF sy-subrc <> 0.
* Implement suitable error handling here
    ENDIF.
  ENDLOOP.

ENDFUNCTION.

FUNCTION zpp_routing_get_plnnr.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(IV_WERKS) TYPE  WERKS_D
*"     REFERENCE(IV_MATNR) TYPE  MATNR
*"  EXPORTING
*"     REFERENCE(EV_PLNNR) TYPE  PLNNR
*"----------------------------------------------------------------------

  CLEARev_plnnr.
  SELECT SINGLE plnnr
    INTO ev_plnnr
    FROM mapl
   WHERE werks iv_werks
     AND matnr iv_matnr.

ENDFUNCTION.

FUNCTION zpp_routing_alloc_delete .
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(IV_WERKS) TYPE  WERKS_D
*"     REFERENCE(IV_MATNR) TYPE  MATNR
*"     REFERENCE(IV_PLNTY) TYPE  PLNTY DEFAULT 'N'
*"     REFERENCE(IV_PLNNR) TYPE  PLNNR
*"     REFERENCE(IV_PLNAL) TYPE  PLNAL
*"     REFERENCE(IV_DATUV) TYPE  DATUV DEFAULT SY-DATUM
*"     REFERENCE(IV_CAPID) TYPE  CAPID DEFAULT 'PP01'
*"     REFERENCE(IV_STLAN) TYPE  STLAN DEFAULT '1'
*"     REFERENCE(IV_RELOAD) TYPE  BOOLEAN_FLG DEFAULT 'X'
*"  EXPORTING
*"     REFERENCE(EV_SUBRC) TYPE  SY-SUBRC
*"     REFERENCE(EV_MSGTXT) TYPE  ZDK_MSGTXT
*"----------------------------------------------------------------------

  DATAlv_tabix     TYPE sy-tabix.
  DATAlv_datuv     TYPE datuv.
  DATAlv_vornr     TYPE plpo-vornr.
  DATAlt_plmz      TYPE gty_t_plmz WITH HEADER LINE.
  DATAls_task_id   TYPE cpcl_tsk_ident_type.
  DATAlt_alloc     TYPE cpt_task_list_maint_com.
  DATAlt_allocx    TYPE cpt_task_list_maint_com_x.
  DATAls_alloc     LIKE LINE OF lt_alloc.
  DATAls_allocx    LIKE LINE OF lt_allocx.

  DATAlt_return TYPE bapiret2_t WITH HEADER LINE.

  SELECT z~plnnr z~plnal z~plnfl z~plnkn
         p~vornr
         z~stlty z~stlnr z~stlal z~stlkn
         z~stlty_w
         z~stlnr_w
         z~stlal_w
         m~werks
         m~matnr
         z~stlst
         z~kante
         z~datuv
    INTO CORRESPONDING FIELDS OF TABLE lt_plmz
    FROM plmz AS z
    JOIN plpo AS p
      ON p~plnty z~plnty
     AND p~plnnr z~plnnr
     AND p~plnkn z~plnkn
    JOIN mast AS m
      ON m~stlan gc_stlan
     AND m~stlnr z~stlnr
     AND m~stlal z~stlal
   WHERE z~plnty iv_plnty
     AND z~plnnr iv_plnnr
     AND z~plnal iv_plnal
     AND z~loekz ' '
     AND z~datuv <= iv_datuv.
  CHECK sy-subrc IS INITIAL.
  SORT lt_plmz BY stlnr stlal stlkn.

  IF iv_reload IS NOT INITIAL.
    READ TABLE lt_plmz INDEX 1.
    lv_datuv lt_plmz-datuv.
    CALL FUNCTION 'ZPP_ROUTING_RELOAD'
      EXPORTING
        iv_plnnr iv_plnnr
        iv_datuv lv_datuv
        iv_datub lv_datuv
      IMPORTING
        ev_subrc ev_subrc.
    IF ev_subrc IS NOT INITIAL.
      ev_msgtxt 'Reload failed.'.
      EXIT.
    ENDIF.
  ENDIF.

  ls_task_id-plnty  iv_plnty.
  ls_task_id-plnnr  iv_plnnr.
  ls_task_id-plnal  iv_plnal.

*--- Set components
  PERFORM set_routing_comp_for_delete USING    lv_datuv
                                               iv_matnr
                                               iv_werks
                                               iv_stlan
                                               lt_plmz[]
                                      CHANGING lt_alloc[].

  IF lt_alloc[] IS NOT INITIAL.
    CALL FUNCTION 'CPCC_P_TASK_LIST_MAINT_COM'
      EXPORTING
        is_task_id      ls_task_id
        iv_key_date     lv_datuv
        it_comp_alloc   lt_alloc[]
        it_comp_alloc_x lt_allocx[]
        iv_application  iv_capid
        iv_bom_usage    iv_stlan
      CHANGING
        ct_return       lt_return[].

    LOOP AT lt_return.
      CASE lt_return-type.
        WHEN 'E' OR 'A'.
          lv_tabix sy-tabix.
          EXIT.
      ENDCASE.
    ENDLOOP.

    IF lv_tabix IS NOT INITIAL.
      READ TABLE lt_return INDEX lv_tabix.
      ev_msgtxt lt_return-message.
      ev_subrc  1.
      ROLLBACK WORK.
    ELSE.
      CALL FUNCTION 'CP_CC_S_SAVE'
        EXCEPTIONS
          error_at_save 1
          OTHERS        2.
      ev_subrc sy-subrc.
      IF sy-subrc EQ 0.
        COMMIT WORK.
      ELSE.
        ROLLBACK WORK.
      ENDIF.
    ENDIF.
  ENDIF.

ENDFUNCTION.

FUNCTION zpp_routing_reload.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(IV_PLNTY) TYPE  PLNTY DEFAULT 'N'
*"     REFERENCE(IV_PLNNR) TYPE  PLNNR OPTIONAL
*"     REFERENCE(IR_PLNNR) TYPE  ZPP_R_PLNNR OPTIONAL
*"     REFERENCE(IV_OPRID) TYPE  OPRID OPTIONAL
*"     REFERENCE(IV_VORNR) TYPE  VORNR OPTIONAL
*"     VALUE(IV_WERKS) TYPE  WERKS_D OPTIONAL
*"     VALUE(IV_MATNR) TYPE  MATNR OPTIONAL
*"     REFERENCE(IV_DATUV) TYPE  DATUV OPTIONAL
*"     REFERENCE(IV_DATUB) TYPE  DATUB OPTIONAL
*"  EXPORTING
*"     REFERENCE(EV_SUBRC) TYPE  SY-SUBRC
*"     REFERENCE(EV_PLNNR) TYPE  PLNNR
*"----------------------------------------------------------------------

  DATAlv_datuv       TYPE datum.
  DATAlv_datub       TYPE datum.

  DATAls_cl_workarea TYPE classes_in_workarea.
  DATAls_plnty       TYPE cpsc_plnty_type.
  DATAls_plnnr       TYPE cpsc_plnnr_type.
  DATAls_plnal       TYPE cpsc_plnal_type.
  DATAls_ident       TYPE cpsc_ident_type.
  DATAls_vornr       TYPE cpsc_vornr_type.

  DATAls_tsk_sel     TYPE cpsc_tsk_sel_type.
  DATAls_opr_sel     TYPE cpsc_opr_sel_type.
  DATAlt_rsdswhere   TYPE rsds_twhere WITH HEADER LINE.

  DATAlt_where       TYPE TABLE OF rsdswhere WITH HEADER LINE.

  ls_plnty-sign   'I'.
  ls_plnty-option 'EQ'.
  ls_plnty-low    iv_plnty.
  APPEND ls_plnty TO ls_tsk_sel-plnty.

  IF ir_plnnr[] IS NOT INITIAL.
    APPEND LINES OF ir_plnnr TO ls_tsk_sel-plnnr.
  ELSE.

    IF iv_plnnr IS INITIAL
      AND iv_werks IS NOT INITIAL
      AND iv_matnr IS NOT INITIAL.

      CALL FUNCTION 'ZPP_ROUTING_GET_PLNNR'
        EXPORTING
          iv_werks iv_werks
          iv_matnr iv_matnr
        IMPORTING
          ev_plnnr ev_plnnr.

      IF ev_plnnr IS INITIAL.
        EXIT.
      ENDIF.

      ls_plnnr-sign   'I'.
      ls_plnnr-option 'EQ'.
      ls_plnnr-low    ev_plnnr.
      APPEND ls_plnnr TO ls_tsk_sel-plnnr.
    ELSE.
      IF iv_plnnr IS NOT INITIAL.
        ls_plnnr-sign   'I'.
        ls_plnnr-option 'EQ'.
        ls_plnnr-low    iv_plnnr.
        APPEND ls_plnnr TO ls_tsk_sel-plnnr.
      ENDIF.
    ENDIF.
  ENDIF.

  IF iv_oprid IS NOT INITIAL
    AND iv_vornr IS NOT INITIAL.
    ls_ident-sign   'I'.
    ls_ident-option 'EQ'.
    ls_ident-low    iv_oprid.
    APPEND ls_ident TO ls_opr_sel-ident.

    ls_vornr-sign   'I'.
    ls_vornr-option 'EQ'.
    ls_vornr-low    iv_vornr.
    APPEND ls_vornr TO ls_opr_sel-vornr.

    IF iv_plnnr IS NOT INITIAL.
      CONCATENATE `plnnr = '` iv_plnnr `'` INTO lt_where.
      APPEND lt_where.
    ENDIF.

    lt_rsdswhere-tablename 'PLPO'.
    lt_rsdswhere-where_tab lt_where[].
    APPEND lt_rsdswhere.
    ls_opr_sel-free_where[] lt_rsdswhere[].
  ENDIF.

  CHECK ls_tsk_sel-plnnr[] IS NOT INITIAL.

  ls_cl_workarea-mtk_inarea 'X'.
  ls_cl_workarea-tsk_inarea 'X'.
  ls_cl_workarea-seq_inarea 'X'.
  ls_cl_workarea-opr_inarea 'X'.
  ls_cl_workarea-suo_inarea 'X'.
  ls_cl_workarea-prt_inarea 'X'.
  ls_cl_workarea-com_inarea 'X'.
  ls_cl_workarea-itm_inarea 'X'.
  ls_cl_workarea-bom_inarea 'X'.

  IF iv_datuv IS INITIAL.
    lv_datuv '19000101'.
  ELSE.
    lv_datuv iv_datuv.
  ENDIF.

  IF iv_datub IS INITIAL.
    lv_datub gc_datub_max.
  ELSE.
    lv_datub iv_datub.
  ENDIF.

  CALL FUNCTION 'CP_CC_S_LOAD_COMPLEX_BY_TSK'
    EXPORTING
      i_class                        gc_t410_class
      i_classes_in_workarea          ls_cl_workarea
      i_cpsc_tsk_sel                 ls_tsk_sel
      i_cpsc_opr_sel                 ls_opr_sel
      i_date_from                    lv_datuv
      i_date_to                      lv_datub
    EXCEPTIONS
      workarea_not_found             1
      class_wrong_type               2
      workarea_wrong_type            3
      class_in_workarea_inconsistent 4
      workarea_not_specified         5
      tsk_not_found                  6
      no_selection_criteria          7
      invalid_selection_period       8
      key_date_required_for_ecm      9
      OTHERS                         10.
  IF sy-subrc <> 0.
    ev_subrc sy-subrc.
  ENDIF.

ENDFUNCTION.

FUNCTION zpp_routing_read_oprid.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(IS_TASK) TYPE  CPCL_TSK_IDENT_TYPE
*"  EXPORTING
*"     REFERENCE(EV_SUBRC) TYPE  SY-SUBRC
*"     REFERENCE(EV_MSGTXT) TYPE  ZDK_MSGTXT
*"     REFERENCE(ET_VORNR) TYPE  ZPP_T_OPRID
*"----------------------------------------------------------------------

  SELECT p~vornr p~plnkn
    INTO CORRESPONDING FIELDS OF TABLE et_vornr
    FROM plas AS s
    JOIN plpo AS p
      ON p~plnty s~plnty
     AND p~plnnr s~plnnr
     AND p~plnkn s~plnkn
   WHERE s~plnty is_task-plnty
     AND s~plnnr is_task-plnnr
     AND s~plnal is_task-plnal.
  IF sy-subrc IS INITIAL.
    SORT et_vornr BY vornr.
  ELSE.
    ev_subrc 1.
    ev_msgtxt 'Routing does not exist.'.
    EXIT.
  ENDIF.

ENDFUNCTION.

*----------------------------------------------------------------------*
***INCLUDE LZPP_ROUTINGF01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form set_routing_comp_for_delete
*&---------------------------------------------------------------------*
FORM set_routing_comp_for_delete
                      USING    pv_datuv
                               pv_matnr
                               pv_werks
                               pv_stlan
                               pt_plmz   TYPE gty_t_plmz
                      CHANGING pt_alloc  TYPE cpt_task_list_maint_com.

  DATA: ls_alloc  LIKE LINE OF pt_alloc.
  DATA: ls_plmz   LIKE LINE OF pt_plmz.
  DATA: lt_tree   TYPE gty_t_itm_tree WITH HEADER LINE.

  CLEAR: pt_alloc[].

  CHECK pt_plmz[] IS NOT INITIAL.
  READ TABLE pt_plmz INTO ls_plmz INDEX 1.
  CALL FUNCTION 'CP_CC_S_PROVIDE_ITM_BY_PATH'
    EXPORTING
      i_key_date_s              = pv_datuv
      i_application             = gc_app_capid
      i_material_root           = pv_matnr
      i_plant_root              = pv_werks
      i_usage_root              = pv_stlan
      i_alternative_root        = ls_plmz-stlal_w
      i_flg_path_expand_totally = 'X'
    TABLES
      c_itm_tree_class_data     = lt_tree[].

  CHECK lt_tree[] IS NOT INITIAL.

  LOOP AT lt_tree.
    ls_alloc-maintain_mode    = gc_maint_delete.

    READ TABLE pt_plmz  INTO ls_plmz
                        WITH KEY stlnr = lt_tree-stlnr
                                 stlal = lt_tree-stlal
                                 stlkn = lt_tree-stlkn
                        BINARY SEARCH.
    IF sy-subrc IS INITIAL.
      ls_alloc-operation_id     = ls_plmz-plnkn.
      ls_alloc-activity         = ls_plmz-vornr.
      ls_alloc-sequence_no      = ls_plmz-plnfl.
    ELSE.
      CONTINUE.
    ENDIF.

    ls_alloc-bom_type         = lt_tree-stlty.
    ls_alloc-bom_no           = lt_tree-stlnr.
    ls_alloc-alternative_bom  = lt_tree-stlal.
    ls_alloc-item_id          = lt_tree-stvkn.
    ls_alloc-item_no          = lt_tree-posnr.

    ls_alloc-plant            = pv_werks.
    ls_alloc-material         = pv_matnr.
    ls_alloc-comp_qty         = lt_tree-menge.
    ls_alloc-comp_unit        = lt_tree-meins.

    ls_alloc-bom_type_root    = lt_tree-stlty_w.
    ls_alloc-bom_no_root      = lt_tree-stlnr_w.
    ls_alloc-alternative_bom_root = lt_tree-stlal_w.

    ls_alloc-path             = lt_tree-kante_k.
    ls_alloc-order_lvl        = lt_tree-stufe_k.
    APPEND ls_alloc TO pt_alloc.
  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form set_routing_comp_for_create
*&---------------------------------------------------------------------*
FORM set_routing_comp_for_create
                      USING    pv_datuv
                               pv_matnr
                               pv_werks
                               pv_verid
                               pv_stlan
                               pv_stlal
                               ps_task_id  TYPE cpcl_tsk_ident_type
                      CHANGING pv_subrc
                               pb_msgtxt
                               pt_vornr    TYPE zpp_t_oprid
                               pt_alloc    TYPE cpt_task_list_maint_com.

  CONSTANTS: lc_vornr TYPE vornr VALUE '0010'.

  DATA: lv_vornr  TYPE plpo-vornr.

  DATA: ls_alloc  LIKE LINE OF pt_alloc.
  DATA: ls_vornr  LIKE LINE OF pt_vornr.
  DATA: lt_tree   TYPE gty_t_itm_tree WITH HEADER LINE.

  CLEAR: pt_alloc[].

  CHECK pt_vornr[] IS NOT INITIAL.

  CALL FUNCTION 'CP_CC_S_PROVIDE_ITM_BY_PATH'
    EXPORTING
      i_key_date_s              = pv_datuv
      i_application             = gc_app_capid
      i_material_root           = pv_matnr
      i_plant_root              = pv_werks
      i_usage_root              = pv_stlan
      i_alternative_root        = pv_stlal
      i_flg_path_expand_totally = 'X'
    TABLES
      c_itm_tree_class_data     = lt_tree[].

  CHECK lt_tree[] IS NOT INITIAL.

  LOOP AT lt_tree.
    ls_alloc-maintain_mode    = gc_maint_create.
    ls_alloc-sequence_no      = gc_def_seq_no.

    CALL FUNCTION 'ZPP_ADJUST_VORNR'
      EXPORTING
        iv_sortf = lt_tree-sortf
      IMPORTING
        ev_vornr = lv_vornr.

    READ TABLE pt_vornr INTO ls_vornr
                        WITH KEY vornr = lv_vornr
                        BINARY SEARCH.
    IF sy-subrc IS INITIAL.
      ls_alloc-operation_id     = ls_vornr-plnkn.
      ls_alloc-activity         = ls_vornr-vornr.
    ELSE.
      ls_alloc-activity         = lc_vornr.
    ENDIF.

    ls_alloc-bom_type         = lt_tree-stlty.
    ls_alloc-bom_no           = lt_tree-stlnr.
    ls_alloc-alternative_bom  = lt_tree-stlal.
    ls_alloc-item_id          = lt_tree-stvkn.
    ls_alloc-item_no          = lt_tree-posnr.

    ls_alloc-plant            = pv_werks.
    ls_alloc-material         = pv_matnr.
    ls_alloc-comp_qty         = lt_tree-menge.
    ls_alloc-comp_unit        = lt_tree-meins.

    ls_alloc-bom_type_root    = lt_tree-stlty_w.
    ls_alloc-bom_no_root      = lt_tree-stlnr_w.
    ls_alloc-alternative_bom_root = lt_tree-stlal_w.

    ls_alloc-path             = lt_tree-kante_k.
    ls_alloc-order_lvl        = lt_tree-stufe_k.
    APPEND ls_alloc TO pt_alloc.
  ENDLOOP.

ENDFORM.

'SAP > ABAP' 카테고리의 다른 글

ALV shows 99 columns only  (0) 2023.10.23
Proxy Error : Message.General  (0) 2022.08.03
Hana Error: cannot use duplicate index name  (0) 2022.08.03
ENQUEUE_READ  (0) 2022.06.24
SQL Editor for Hana ( Native )  (0) 2022.06.09