• SAP 多料号展BOM


    ************************************************************************
    *程式代號:ZPP0031R
    *程式名稱:多料號展 BOM
    *         -------- -----------------------------------------------------
    *         20160204 程式建立                              By Bruce
    ************************************************************************
    REPORT  zpp0031r MESSAGE-ID ok.

    TABLES: stpox,mara,marc,sktext,afko,stko,makt,plmz,mapl,
            plpo,drat,mast.

    TYPE-POOLS: slis.
    DATA: layout TYPE slis_layout_alv.
    DATA: fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.

    DATA: selpool TYPE TABLE OF cstmat WITH HEADER LINE.
    DATA: dstst_flg LIKE csdata-xfeld.
    DATA: matcat TYPE TABLE OF cscmat WITH HEADER LINE.
    DATA: stb TYPE STANDARD TABLE OF stpox WITH HEADER LINE.
    DATAreturn TYPE TABLE OF bapireturn WITH HEADER LINE.
    DATA: return1 TYPE TABLE OF bapiret1 WITH HEADER LINE.

    TYPES:BEGIN OF itabs,
            matnr      LIKE mara-matnr,
            stufe      LIKE stb-stufe,      "LEVEL
            posnr      LIKE stb-posnr,      "ITEM
            matkl      LIKE mara-matkl,
            idnrk      LIKE stb-idnrk,      "METERIAL
            chname     LIKE sktext-maktx,  "CHINESE NAME
            en_name    LIKE sktext-maktx"ENGLISH NAME
            maktx      LIKE stb-ojtxp,
            maktx2(80TYPE c,
            potx1      LIKE stb-potx1,      "SIZE
            meins      LIKE stb-meins,      "UNIT
            mmein      LIKE stb-meins,      "Base Unit
            quan       TYPE p DECIMALS 4,   "QUANTITY
            datuv      LIKE stb-datuv,
            bmeng      LIKE stko-bmeng,
            alpgr      LIKE stpo-alpgr,
            aennr      LIKE stb-aennr,
            stlkn      LIKE stb-stlkn,
            mtart      LIKE mara-mtart"Material Type
            nfmat      LIKE marc-nfmat,
            ewahr      LIKE stb-ewahr,
            ltxa1      LIKE plpo-ltxa1,
            wegxx      LIKE stb-wegxx,
            mstae      LIKE stpox-mstae,
            dismm      LIKE stpox-dismm,
            ktext      LIKE stpox-potx1,
          END OF itabs.
    DATA: itab TYPE itabs OCCURS WITH HEADER LINE.

    DATA: t_stlnr         LIKE stpo-stlnr,
          p_name          LIKE makt-maktx,
          old_stlst       LIKE stko-stlst,
          t_datuv         LIKE stb-datuv,
          p_maktx         LIKE stb-ojtxp,
          p_plnkn         LIKE plmz-plnkn,
          p_ltxa1         LIKE plpo-ltxa1,
          t_idnrk         LIKE stb-idnrk,
          t_maktx         LIKE sktext-maktx,
          t_stufe         LIKE stb-stufe VALUE 0,
          amount_internal LIKE wmto_s-amount,
          amount_display  LIKE wmto_s-amount,
          foreign_amount  LIKE bapieine-net_price,
          p_matnr         LIKE mara-matnr,
          m_text(70)      TYPE c.

    DATABEGIN OF ritab OCCURS 0,
            stufe LIKE stb-stufe,
            plnnr LIKE mapl-plnnr,
            plnal LIKE mapl-plnal,
          END OF ritab.

    DATAid     LIKE thead-tdid,
          name   LIKE thead-tdname,
          langw  LIKE thead-tdspras,
          object LIKE thead-tdobject.
    DATAlines LIKE TABLE OF tline WITH HEADER LINE.

    SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE text-001.
    PARAMETERS:p_werks LIKE marc-werks OBLIGATORY MEMORY ID wrk.
    SELECT-OPTIONS:s_matnr FOR mara-matnr OBLIGATORY NO INTERVALS.
    *PARAMETERS:p_matnr LIKE mara-matnr OBLIGATORY DEFAULT 'T07SN0707054A'.
    PARAMETERS:p_app    LIKE tc04-capid DEFAULT 'PP01' OBLIGATORY,
               p_altbom LIKE stpox-stlal DEFAULT '01',
               p_stlan  LIKE stpox-stlan DEFAULT '1' OBLIGATORY,
               p_datuv  LIKE stko-datuv DEFAULT sy-datum OBLIGATORY,
               p_reqm   LIKE stpox-menge  DEFAULT 1.
    PARAMETERS p_scrap LIKE csdata-xfeld.
    SELECTION-SCREEN COMMENT /1(79) text2.
    *SELECTION-SCREEN COMMENT /1(60) text1.
    SELECTION-SCREEN END OF BLOCK block1.

    DEFINE alv_spec.
      fieldcat-fieldname = &1.
      fieldcat-seltext_l = &2.
      APPEND fieldcat.
      CLEAR fieldcat.
    END-OF-DEFINITION.

    AT SELECTION-SCREEN.

    AT SELECTION-SCREEN OUTPUT.
    *  text1 ='注意:畫面參數不同的 BOM, 請勿一起下載, 以免下載資料有錯.'.
      IF SY-langu ='M'.
        text2 ='效能:一次下載過多 BOM, 會造成報表逾時, 無法產生下載資料.'.
      ELSE.
        text2 ='Performance:Download too BOM, the report will timeout.'.
      ENDIF.

    START-OF-SELECTION.
      LOOP AT s_matnr.
        p_matnr = s_matnr-low.
        CLEAR:m_text,t_stlnr.
    *--check material number plant exist?
        SELECT SINGLE * FROM marc WHERE matnr = p_matnr AND werks = p_werks.
        IF sy-subrc <> 0.
          CONCATENATE p_matnr ' Not material exist, check your input !'
            INTO m_text.
          MESSAGE m_text TYPE 'I'.
          CONTINUE.
        ENDIF.
    *--check material number status?
        SELECT SINGLE * FROM mara WHERE matnr = p_matnr AND lvorm 'X'.
        IF sy-subrc 0.
          CONCATENATE p_matnr ' This material number has been deleted.'
            INTO m_text.
          MESSAGE m_text TYPE 'I'.
          CONTINUE.
        ENDIF.
    *-- check bom use and get out record
        SELECT SINGLE * FROM mast WHERE matnr = p_matnr AND werks  = p_werks
                                   AND stlan = p_stlan AND stlal = p_altbom.
        IF sy-subrc <> 0.
          CONCATENATE p_matnr
          ' Input data errors or mismatched, please re-enter.' INTO m_text.
          MESSAGE m_text TYPE 'I'.
          CONTINUE.
        ENDIF.
        MOVE mast-stlnr TO t_stlnr.

        SELECT SINGLE stlst INTO old_stlst FROM stko WHERE stlnr EQ t_stlnr.
        IF old_stlst '02'.
          UPDATE stko SET stlst '01' WHERE stlnr = t_stlnr.
          MESSAGE 'Note! This is not active BOM.' TYPE 'I'.
        ENDIF.
        PERFORM exp_bom.       "展BOM
        PERFORM append_result"資料彙總
        IF old_stlst '02'.
          SELECT SINGLE stlnr INTO t_stlnr FROM mast
           WHERE matnr = p_matnr AND werks = p_werks
            AND stlan = p_stlan AND stlal = p_altbom.
          UPDATE stko SET stlst '02' WHERE stlnr = t_stlnr.
        ENDIF.
      ENDLOOP.
    *------------------------OUTPUT START-----------------------------------
    END-OF-SELECTION.
      PERFORM output_alv TABLES itab.
      PERFORM free_itab.

    TOP-OF-PAGE.

    *&---------------------------------------------------------------------*
    *&      Form  APPEND_RESULT
    *&---------------------------------------------------------------------*
    FORM append_result.
      itab-stufe 0.
      itab-posnr ''.
      itab-idnrk = p_matnr.
      SELECT SINGLE maktx INTO itab-maktx
      FROM makt WHERE matnr = p_matnr AND spras 'E'.
      APPEND itab.
      CLEAR itab.
      SELECT SINGLE plnnr plnal INTO (ritab-plnnr,ritab-plnalFROM mapl
        WHERE matnr = p_matnr AND werks = p_werks AND plnty 'N'
        AND loekz <> 'X'.
      ritab-stufe 1.
      APPEND ritab.
      CLEAR ritab.

      LOOP AT stb.
        t_stufe = itab-stufe + 1"往下展時才做插入半成品標示紀錄
        IF itab-idnrk <> ''"跳開迴圈第一次
          IF t_stufe = stb-stufe.
    * WEGXX是多層 BOM 展開時,半成品未展開前的項目序號
            IF itab-wegxx = stb-vwegx.
              t_idnrk = itab-idnrk.
              t_maktx = itab-maktx.
              CLEAR itab"清除其他欄位
              itab-idnrk = t_idnrk.
              itab-maktx = t_maktx.
    *          APPEND itab."插入半成品標示紀錄
    * 紀錄 Routing 查詢物料分配的站別用
              SELECT SINGLE plnnr plnal INTO (ritab-plnnr,ritab-plnal)
                FROM mapl WHERE matnr = t_idnrk AND werks = p_werks
                AND plnty 'N' AND loekz <> 'X'.
              ritab-stufe = stb-stufe.
              APPEND ritab.
              CLEAR ritab.
              CLEAR:t_idnrk,t_maktx.
            ENDIF.
          ENDIF.
        ENDIF.
        CLEAR:itab,t_stufe.
        MOVE:stb-stufe TO itab-stufe,
             stb-posnr TO itab-posnr,
             stb-idnrk TO itab-idnrk,
             stb-ojtxp TO itab-maktx,
             stb-mngko TO itab-quan,
             stb-meins TO itab-meins,
             stb-mmein TO itab-mmein,
             stb-alpgr TO itab-alpgr,
             stb-nfmat TO itab-nfmat,
             stb-ewahr TO itab-ewahr,
             stb-wegxx TO itab-wegxx,
             stb-mstae TO itab-mstae,
             stb-dismm TO itab-dismm,
             p_matnr   TO itab-matnr.
        PERFORM long_desc.
        PERFORM comp_alloc"查 Routing 物料分配的站別
        IF itab-idnrk ='' AND stb-postp 'T'.
          itab-ktext = stb-potx1.
        ENDIF.

    *    IF stb-aennr IS NOT INITIAL.
    *      MOVE : '加'      TO itab-matkl,
    *             stb-datuv TO itab-datuv.
    *    ENDIF.
    *    IF stb-aenra IS NOT INITIAL.
    *      MOVE : stb-aenra TO itab-aennr,
    *             '刪'      TO itab-matkl,
    *             stb-datub TO itab-datuv.
    *    ENDIF.

        APPEND itab.
      ENDLOOP.
      REFRESH ritab.
      CLEAR itab.
    ENDFORM.                    " APPEND_RESULT
    *&---------------------------------------------------------------------*
    *&      Form  COMP_ALLOC
    *&---------------------------------------------------------------------*
    FORM comp_alloc.
      CLEAR p_plnkn.
      READ TABLE ritab WITH KEY stufe = stb-stufe.
    * stb-stlkn不要用,跟 plmz 的 stlkn 不一致
      SELECT SINGLE plnkn INTO p_plnkn FROM plmz "Routing 物料分配的站別
        WHERE stlty = stb-stlty AND stlnr = stb-stlnr AND stlal = p_altbom
        AND werk_stl = p_werks AND  plnty 'N' AND plnnr = ritab-plnnr
        AND plnal = ritab-plnal AND stlkn = stb-stvkn.
      SELECT SINGLE ltxa1 INTO itab-ltxa1 FROM plpo "站別名稱
        WHERE werks = p_werks AND  plnty 'N'
        AND plnnr = ritab-plnnr AND plnkn = p_plnkn.
    ENDFORM.               " EOMP_ALLOC
    *&---------------------------------------------------------------------*
    *&      Form  EXP_BOM
    *&---------------------------------------------------------------------*
    FORM exp_bom.
      TRANSLATE p_matnr TO UPPER CASE.
      CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
        EXPORTING
          capid                 = p_app
          datuv                 = p_datuv
          ehndl                 '2'
          mtnrv                 = p_matnr
          mehrs                 'X'
          mmory                 '1'
          stlal                 = p_altbom
          stlan                 = p_stlan
          werks                 = p_werks
          emeng                 = p_reqm  "DEFAULT 0 則 FM 不會將數量除以基礎數量
          auskz                 = p_scrap
        IMPORTING
          topmat                = selpool
          dstst                 = dstst_flg
        TABLES
          stb                   = stb
          matcat                = matcat
        EXCEPTIONS
          alt_not_found         1
          call_invalid          2
          material_not_found    3
          missing_authorization 4
          no_bom_found          5
          no_plant_data         6
          no_suitable_bom_found 7
          conversion_error      8
          OTHERS                9.
    ENDFORM.               " EXPORT_BOM
    *&---------------------------------------------------------------------*
    *&      Form  LONG_DESC
    *----------------------------------------------------------------------*
    FORM long_desc.
      id 'GRUN'.
      langw 'EN'.
      name = stb-idnrk.
      object 'MATERIAL'.

      CALL FUNCTION 'READ_TEXT'
        EXPORTING
          id                      id
          language                = langw
          name                    = name
          object                  = object
        TABLES
          lines                   lines
        EXCEPTIONS
          id                      1
          language                2
          name                    3
          not_found               4
          object                  5
          reference_check         6
          wrong_access_to_archive 7
          OTHERS                  8.

      READ TABLE lines INDEX 1.
      itab-maktx2 lines-tdline.
      REFRESH lines.
      CLEAR lines.
    ENDFORM.                " LONG_DESC
    *&---------------------------------------------------------------------*
    *&      Form  OUTPUT_ALV
    *&---------------------------------------------------------------------*
    FORM output_alv TABLES itab.

      CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
        EXPORTING
          i_program_name         = sy-repid
          i_inclname             = sy-repid
          i_internal_tabname     'itab'
          i_client_never_display 'X'
          i_bypassing_buffer     'X'
          i_buffer_active        ' '
        CHANGING
          ct_fieldcat            = fieldcat[]
        EXCEPTIONS
          inconsistent_interface 1
          program_error          2
          OTHERS                 3.

      alv_spec'MATNR' 'Product'.
      alv_spec'STUFE' 'Level'.
      alv_spec'POSNR' 'Item'.
      alv_spec'IDNRK' 'Materials'.
      alv_spec'KTEXT' 'BOM Comp DESC '.
      alv_spec'MSTAE' 'Status'.
      alv_spec'dismm' 'MRP'.
      alv_spec'MAKTX' 'Description'.
      alv_spec'MAKTX2' 'Long Description'.
      alv_spec'LTXA1' 'Operation'.
      alv_spec'ALPGR' 'ALT Group'.
      alv_spec'EWAHR' 'Percentage'.
      alv_spec'QUAN' 'QTY'.
      fieldcat-fieldname 'MMEIN'.
      fieldcat-qfieldname 'MMEIN'.
      fieldcat-seltext_l 'BasicU'.
      APPEND fieldcat.
      CLEAR:fieldcat.
      fieldcat-fieldname 'MEINS'.
      fieldcat-qfieldname 'MEINS'.
      fieldcat-seltext_l 'UM'.
      APPEND fieldcat.
      CLEAR:fieldcat.

      layout-zebra             'X'.
      layout-detail_popup      'X'.
      layout-colwidth_optimize 'X'.

      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
          i_callback_program = sy-repid
          it_fieldcat        = fieldcat[]
          is_layout          = layout
          i_save             'X'
        TABLES
          t_outtab           = itab
        EXCEPTIONS
          program_error      1
          OTHERS             2.
    ENDFORM.                   " OUTPUT_ALV
    *----------------
    * FORM free_itab
    *----------------
    FORM free_itab.
      FREE:itab,selpool,ritab,dstst_flg,stb,return,return1.
    ENDFORM.       "free_itab

  • 相关阅读:
    【Selenium IDE】下载安装Chrome和Firefox插件IDE ide了解就行 不是重点 重点是写脚本
    调用接口时,生产环境,路径加斜杠“/”和不加的区别
    WPF 踩坑笔记12 DataGrid触发选中行事件
    WPF 踩坑笔记11 线程取消
    WPF 踩坑笔记10 ListBox异步动态加载
    WPF 踩坑笔记9 直接打印
    思维的体操
    【洛谷 P4213】 【模板】杜教筛(Sum)
    【洛谷 P2257】 YY的GCD(莫比乌斯反演)
    【洛谷 P4980】 【模板】Pólya 定理
  • 原文地址:https://www.cnblogs.com/coderfarmer/p/13408530.html
Copyright © 2020-2023  润新知