PP 缺料分析表

************************************************************************
* PROGRAM NAME        : 缺料表                                         *
* APPLICATION NAME    : PP-DV                                          *
* SUBSYSTEM           :                                                *
* AUTHOR              : Gerald                                         *
* TRANSACTION         : ypp11                                          *
* PROGRAM TYPE        : Report                                         *
* INPUT FILES         :                                                *
* OUTPUT FILES        :                                                *
* PROGRAM ID          : yppr0011                                       *
*&---------------------------------------------------------------------*
*& REVISION LOG                                                        *
*& LOG#       DATE         AUTHOR               DESCRIPTION            *
*& ----       ----          ------               -----------           *
*&  001      2006/12/07    Gerald              created                 *
************************************************************************
*& 修改日期:2010.06.02
*& 修 改 人:zhouxu V1.0
*& 修改原因:1 將屏幕選擇字段bom全展,與虛擬件全展虛擬件展一層分配
*&到同一radiobutton組。
REPORT  yppr0011
NO STANDARD PAGE HEADING
        LINE-SIZE 1023
*       LINE-COUNT 30(4)
        MESSAGE-ID pp.
*MESSAGE-ID 1000.
*&---------------------------------------------------*
*& TABLES                                            *
*&---------------------------------------------------*
TABLES:makt,
       caufv,
       afko,
       mard,
       mast,
       plpo,
       rkpf,
       rc29l,
       stpox,
       cscmat,
       stpo.

INCLUDE yalvclude1.
*TYPE-POOLS slis.
*DATA progname LIKE sy-repid.

DATA: BEGIN OF choose_data_get1,
aufnr LIKE afko-aufnr,
plnbez LIKE afko-plnbez,
werks LIKE mast-werks,
ernam LIKE caufv-ernam,
auart LIKE caufv-auart,
END OF choose_data_get1.

DATA: BEGIN OF choose_data_get21 OCCURS 0,
matnr LIKE mast-matnr,
werks LIKE mast-werks,
idnrk LIKE stpo-idnrk,"BOM 組件
*STLNR LIKE STPO-STLNR,"物料單
mmein LIKE stpox-mmein, "庫存單位
meins LIKE stpox-meins, "BOM單位
bmeng LIKE stpox-mnglg,
mnglg LIKE stpox-mnglg, "庫存單位用量
menge LIKE stpox-menge, "BOM單位用量
dumps(2) TYPE c,
alpos(2) TYPE c,
rgekz(2) TYPE c,
alprf(2) TYPE c,
END OF choose_data_get21.

DATA bom_itab LIKE stpox OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF bom_itab_get OCCURS 0,
idnrk LIKE stpox-idnrk,
mtart LIKE  stpox-mtart,
ojtxp LIKE  stpox-ojtxp,
werks LIKE  stpox-werks,
mmein LIKE stpox-mmein, "庫存單位
meins LIKE stpox-meins, "BOM單位
mnglg LIKE stpox-mnglg, "庫存單位用量
menge LIKE stpox-menge, "BOM單位用量
dumps(2) TYPE c,
alpos(2) TYPE c,
rgekz(2) TYPE c,
alprf(2) TYPE c,
END OF bom_itab_get.

DATA: BEGIN OF bom_itab_gett OCCURS 0,
idnrk LIKE stpox-idnrk,
mtart LIKE  stpox-mtart,
ojtxp LIKE  stpox-ojtxp,
werks LIKE  stpox-werks,
mmein LIKE stpox-mmein, "庫存單位
meins LIKE stpox-meins, "BOM單位
mnglg LIKE stpox-mnglg, "庫存單位用量
menge LIKE stpox-menge, "BOM單位用量
dumps(2) TYPE c,
alpos(2) TYPE c,
rgekz(2) TYPE c,
alprf(2) TYPE c,
END OF bom_itab_gett.

DATA: BEGIN OF choose_data_get2 OCCURS 0,
matnr LIKE mast-matnr,
werks LIKE mast-werks,
idnrk LIKE stpo-idnrk,"BOM 組件
stlnr LIKE stpo-stlnr,"物料單
mmein LIKE stpox-mmein, "庫存單位
meins LIKE stpox-meins, "BOM單位
mnglg LIKE stpox-mnglg, "庫存單位用量
menge LIKE stpox-menge, "BOM單位用量
dumps(2) TYPE c,
alpos(2) TYPE c,
rgekz(2) TYPE c,
alprf(2) TYPE c,
END OF choose_data_get2.


DATA: BEGIN OF get_data_get3 OCCURS 0,
matnr LIKE mard-matnr,
maktx LIKE makt-maktx, "組建描述
mmein LIKE stpox-mmein, "庫存單位
meins LIKE stpox-meins, "BOM單位
mnglg LIKE stpox-mnglg, "庫存單位用量
menge LIKE stpox-menge, "BOM單位用量
mtart LIKE stpox-mtart,
ktext LIKE m_crama-ktext,"工作中心
lgort LIKE mard-lgort,"庫存地點
lgobe LIKE t001l-lgobe,"庫存地點描述
labst LIKE mard-labst,"非限制
llabst LIKE mard-labst,"短缺數量
insme LIKE mard-insme,"質量檢查中
einme LIKE mard-einme,"限制使用的
speme LIKE mard-speme,"凍結的
txt   LIKE v_auart-txt,"車間
dumps(2) TYPE c,
alpos(2) TYPE c,
rgekz(2) TYPE c,
alprf(2) TYPE c,
werks LIKE mast-werks, "工廠
END OF get_data_get3.

DATA: BEGIN OF get_data_get6 OCCURS 0,
matnr LIKE mard-matnr,
maktx LIKE makt-maktx, "組建描述
mmein LIKE stpox-mmein, "庫存單位
meins LIKE stpox-meins, "BOM單位
mnglg LIKE stpox-mnglg, "庫存單位用量
menge LIKE stpox-menge, "BOM單位用量
mtart LIKE stpox-mtart,
ktext LIKE m_crama-ktext,"工作中心
lgort LIKE mard-lgort,"庫存地點
lgobe LIKE t001l-lgobe,"庫存地點描述
labst LIKE mard-labst,"非限制
llabst LIKE mard-labst,"短缺數量
insme LIKE mard-insme,"質量檢查中
einme LIKE mard-einme,"限制使用的
speme LIKE mard-speme,"凍結的
txt   LIKE v_auart-txt,"車間
werks LIKE mast-werks, "工廠
dumps(2) TYPE c,
alpos(2) TYPE c,
rgekz(2) TYPE c,
alprf(2) TYPE c,
END OF get_data_get6.

DATA: BEGIN OF get_data_get7 OCCURS 0,
matnr LIKE mard-matnr,
maktx LIKE makt-maktx, "組建描述
mmein LIKE stpox-mmein, "庫存單位
mtart LIKE stpox-mtart,
ktext LIKE m_crama-ktext,"工作中心
lgort LIKE mard-lgort,"庫存地點
lgobe LIKE t001l-lgobe,"庫存地點描述
labst LIKE mard-labst,"非限制
llabst LIKE mard-labst,"短缺數量
insme LIKE mard-insme,"質量檢查中
einme LIKE mard-einme,"限制使用的
speme LIKE mard-speme,"凍結的
txt   LIKE v_auart-txt,"車間
werks LIKE mast-werks, "工廠
dumps(2) TYPE c,
alpos(2) TYPE c,
rgekz(2) TYPE c,
alprf(2) TYPE c,
END OF get_data_get7.
DATA: BEGIN OF get_data_get8 OCCURS 0,
matnr LIKE mard-matnr,
maktx LIKE makt-maktx, "組建描述
mtart LIKE stpox-mtart,
mmein LIKE stpox-mmein, "庫存單位
meins LIKE stpox-meins, "BOM單位
mnglg LIKE stpox-mnglg, "庫存單位用量
menge LIKE stpox-menge, "BOM單位用量
ktext LIKE m_crama-ktext,"工作中心
lgort LIKE mard-lgort,"庫存地點
lgobe LIKE t001l-lgobe,"庫存地點描述
labst LIKE mard-labst,"非限制
*LLABST(15) TYPE C,"短缺數量
llabst LIKE mard-labst,"短缺數量
insme LIKE mard-insme,"質量檢查中
einme LIKE mard-einme,"限制使用的
speme LIKE mard-speme,"凍結的
txt   LIKE v_auart-txt,"車間
werks LIKE mast-werks, "工廠
dumps(2) TYPE c,
alpos(2) TYPE c,
rgekz(2) TYPE c,
alprf(2) TYPE c,
END OF get_data_get8.
DATA: choose_data_get LIKE choose_data_get1 OCCURS 0 WITH HEADER LINE.
PARAMETERS: p_werks LIKE bseg-werks DEFAULT 'LN01' OBLIGATORY. "發貨工廠
SELECTION-SCREEN BEGIN OF BLOCK scr WITH FRAME TITLE text-010.
SELECT-OPTIONS: s_lgort FOR mard-lgort NO INTERVALS.
SELECT-OPTIONS:  p_fname FOR rc29l-emeng NO INTERVALS.
SELECT-OPTIONS: s_matnr FOR makt-matnr.  "需要查找的物料範圍
SELECTION-SCREEN END OF BLOCK scr.


SELECTION-SCREEN BEGIN OF BLOCK scrr WITH FRAME TITLE text-010.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: llabst TYPE c RADIOBUTTON GROUP grp1.
SELECTION-SCREEN POSITION 20.
PARAMETERS: lllabstt TYPE c RADIOBUTTON GROUP grp1 DEFAULT 'X'.
SELECTION-SCREEN COMMENT 3(15) text-b10 FOR FIELD llabst.
SELECTION-SCREEN COMMENT 30(15) text-b13 FOR FIELD lllabstt.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: llabston  LIKE am07m-xlabst.
SELECTION-SCREEN POSITION 20.
**"mod v1.0 zhouxu
PARAMETERS: lllabst LIKE am07m-xlabst RADIOBUTTON GROUP grp1.
SELECTION-SCREEN COMMENT 3(15) text-b12 FOR FIELD llabston.
SELECTION-SCREEN COMMENT 30(15) text-b11 FOR FIELD lllabst.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK scrr.

* add by lkj 2008/12/12
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE t2.
PARAMETERS : bom_a RADIOBUTTON GROUP bom TYPE c,   "生產BOM
             bom_b RADIOBUTTON GROUP bom TYPE c.   "設計BOM
SELECTION-SCREEN END OF BLOCK b2.
* add by lkj 2008/12/12

INITIALIZATION.
  t2 = 'BOM類別'.
  AUTHORITY-CHECK OBJECT 'YREPORT'
    ID 'BUKRS' FIELD 'HL01'
    ID 'WERKS' FIELD 'LN01'.
  IF sy-subrc NE 0.
    MESSAGE e005(ymess) WITH 'No Authorization!'.
  ENDIF.

*AT SELECTION-SCREEN.

START-OF-SELECTION.
  PERFORM bom_get_check.
  PERFORM bom_get_data1 TABLES choose_data_get21.
  PERFORM bom_get_data  TABLES choose_data_get21.
  PERFORM bom_get_data_count TABLES bom_itab_get.
  PERFORM bom_get_data2 TABLES get_data_get6.
  PERFORM bom_get_data6 TABLES get_data_get6.
  PERFORM bom_get_data8 TABLES get_data_get8.
* PERFORM GET_DATA_GET8.
  PERFORM sub_list_data TABLES get_data_get8.
*&---------------------------------------------------------------------*
*&      Form  BOM_GET_CHECK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM bom_get_check.
  DATA: x TYPE i.
  DATA: z TYPE i.

  LOOP AT s_matnr.
    x = x + 1.
  ENDLOOP.

  LOOP AT p_fname.
    z = z + 1.
  ENDLOOP.
  IF x NE z.
    MESSAGE i899 WITH '數量的條目與物料條目不同,請檢查!'.
    LEAVE TO TRANSACTION 'YPP11'.
  ENDIF.
ENDFORM.                    "BOM_GET_CHECK

*&---------------------------------------------------------------------*
*&      Form  BOM_GET_DATA1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->L_BOM_GET  text
*----------------------------------------------------------------------*
FORM bom_get_data1 TABLES l_bom_get STRUCTURE choose_data_get21.
  DATA: i TYPE i.
  LOOP AT s_matnr.
    l_bom_get-matnr = s_matnr-low.
    APPEND l_bom_get.
    CLEAR  l_bom_get.
  ENDLOOP.

  LOOP AT l_bom_get.
    i = i + 1.
    LOOP AT p_fname.
      READ TABLE p_fname INDEX i.
      l_bom_get-bmeng = p_fname-low.
    ENDLOOP.
    MODIFY l_bom_get.
    CLEAR  l_bom_get.
  ENDLOOP.
ENDFORM.                    "BOM_GET_DATA1
*&---------------------------------------------------------------------*
*&      Form  BOM_GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->L_BOM_GET  text
*----------------------------------------------------------------------*
FORM bom_get_data TABLES l_bom_get STRUCTURE choose_data_get21.
  DATA: x(1) TYPE c,
        sobsl LIKE marc-sobsl,
        y(1) TYPE c.
  IF lllabst = 'X'.
    x = 'X'.
  ELSE.
    x = ''.
  ENDIF.


  LOOP AT choose_data_get21.
* 區分生產與設計BOM取數  LKJ 2008/12/12
    IF bom_a = 'X'.
      CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
        EXPORTING
          aumng                 = 0
          capid                 = 'PP01'
          datuv                 = sy-datum
          mehrs                 = x
          mtnrv                 = choose_data_get21-matnr
          stlan                 = '1'
          werks                 = p_werks
          auskz                 = 'X'
          emeng                 = choose_data_get21-bmeng
        TABLES
          stb                   = bom_itab
        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.
    ELSE.
      CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
        EXPORTING
          aumng                 = 0
          capid                 = 'PP01'
          datuv                 = sy-datum
          mehrs                 = x
          mtnrv                 = choose_data_get21-matnr
          stlan                 = '2'
          werks                 = p_werks
          auskz                 = 'X'
          emeng                 = choose_data_get21-bmeng
        TABLES
          stb                   = bom_itab
        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.
    ENDIF.

    LOOP AT bom_itab.
      bom_itab_get-idnrk          = bom_itab-idnrk.
      bom_itab_get-mtart          = bom_itab-mtart.
      bom_itab_get-ojtxp          = bom_itab-ojtxp.
      bom_itab_get-werks          = bom_itab-werks.
      bom_itab_get-mmein          = bom_itab-mmein. "庫存單位
      bom_itab_get-meins          = bom_itab-meins. "BOM單位
      bom_itab_get-mnglg          = bom_itab-mnglg. "庫存單位用量
      bom_itab_get-menge          = bom_itab-menge. "BOM單位用量
      bom_itab_get-dumps          = bom_itab-dumps. "虛擬料號
      bom_itab_get-alpos          = bom_itab-alpos. "替代料
      bom_itab_get-rgekz          = bom_itab-rgekz. "反衝
      bom_itab_get-alprf          = bom_itab-alprf. "替代關係
      APPEND bom_itab_get.
      CLEAR  bom_itab_get.
    ENDLOOP.
  ENDLOOP.
*---------------BEING ADD ZHOUXU V1.0-----------------------*
  IF    lllabst = 'X'.
    RETURN.
  ENDIF.
*---------------END ADD ZHOUXU V1.0  -----------------------*
  IF llabst = 'X'.
    y = 'X'.
  ENDIF.
  IF lllabstt = 'X'.
    y = ' '.
  ENDIF.
  LOOP AT bom_itab_get.
    CLEAR sobsl.
    SELECT SINGLE sobsl
    INTO sobsl
    FROM marc
    WHERE matnr = bom_itab_get-idnrk.
    IF sobsl = '50'.
      bom_itab_gett-idnrk = bom_itab_get-idnrk.
      bom_itab_gett-mtart = bom_itab_get-mtart.
      bom_itab_gett-ojtxp = bom_itab_get-ojtxp.
      bom_itab_gett-werks = bom_itab_get-werks.
      bom_itab_gett-mmein = bom_itab_get-mmein. "庫存單位
      bom_itab_gett-meins = bom_itab_get-meins. "BOM單位
      bom_itab_gett-mnglg = bom_itab_get-mnglg. "庫存單位用量
      bom_itab_gett-menge = bom_itab_get-menge. "BOM單位用量
      bom_itab_gett-dumps = bom_itab_get-dumps. "庫存單位用量
      bom_itab_gett-alpos = bom_itab_get-alpos. "BOM單位用量
      bom_itab_gett-rgekz = bom_itab_get-rgekz. "BOM單位用量
      bom_itab_gett-alprf = bom_itab_get-alprf. "優先級
      APPEND bom_itab_gett.
      CLEAR  bom_itab_gett.
    ENDIF.
  ENDLOOP.

  LOOP AT bom_itab_gett.
* 區分生產與設計BOM取數  LKJ 2008/12/12
    IF bom_a = 'X'.
      CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
        EXPORTING
          aumng                 = 0
          capid                 = 'PP01'
          datuv                 = sy-datum
          mehrs                 = y
          mtnrv                 = bom_itab_gett-idnrk
          stlan                 = '1'
          werks                 = p_werks
          auskz                 = 'X'
          emeng                 = bom_itab_gett-mnglg
        TABLES
          stb                   = bom_itab
        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.
    ELSE.
      CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
        EXPORTING
          aumng                 = 0
          capid                 = 'PP01'
          datuv                 = sy-datum
          mehrs                 = y
          mtnrv                 = bom_itab_gett-idnrk
          stlan                 = '2'
          werks                 = p_werks
          auskz                 = 'X'
          emeng                 = bom_itab_gett-mnglg
        TABLES
          stb                   = bom_itab
        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.
    ENDIF.

    LOOP AT bom_itab.
      bom_itab_get-idnrk          = bom_itab-idnrk.
      bom_itab_get-mtart          = bom_itab-mtart.
      bom_itab_get-ojtxp          = bom_itab-ojtxp.
      bom_itab_get-werks          = bom_itab-werks.
      bom_itab_get-mmein          = bom_itab-mmein. "庫存單位
      bom_itab_get-meins          = bom_itab-meins. "BOM單位
      bom_itab_get-mnglg          = bom_itab-mnglg. "庫存單位用量
      bom_itab_get-menge          = bom_itab-menge. "BOM單位用量
      bom_itab_get-dumps          = bom_itab-dumps. "虛擬鍵
      bom_itab_get-alpos          = bom_itab-alpos. "優先級別
      bom_itab_get-rgekz          = bom_itab-rgekz. "優先級別
      bom_itab_get-alprf          = bom_itab-alprf. "優先級別
      APPEND bom_itab_get.
      CLEAR  bom_itab_get.
    ENDLOOP.
  ENDLOOP.
ENDFORM.                    "BOM_GET_DATA
*&---------------------------------------------------------------------*
*&      Form  BOM_GET_DATA_COUNT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->L_BOM_GET  text
*----------------------------------------------------------------------*
FORM bom_get_data_count TABLES l_bom_get STRUCTURE bom_itab_get.
  DATA: mnglg TYPE p DECIMALS 5,
        menge TYPE p DECIMALS 5.

*            BOM_ITAB_GET-MMEIN          = BOM_ITAB-MMEIN. "庫存單位
*            BOM_ITAB_GET-MEINS          = BOM_ITAB-MEINS. "BOM單位
*            BOM_ITAB_GET-MNGLG          = BOM_ITAB-MNGLG. "庫存單位用量
*            BOM_ITAB_GET-MNGKO          = BOM_ITAB-MNGKO. "BOM單位用量
  DATA: idnrk(20) TYPE c,
        mtart(6) TYPE c,
        ojtxp(40) TYPE c,
        werks(10) TYPE c,
        mmein(6) TYPE c,
        meins(6) TYPE c,
        dumps(2) TYPE c,
        alpos(2) TYPE c,
        rgekz(2) TYPE c,
        alprf(2) TYPE c.
  SORT bom_itab_get DESCENDING BY idnrk ASCENDING.
  LOOP AT bom_itab_get.
    idnrk = l_bom_get-idnrk.
    mtart = l_bom_get-mtart.
    ojtxp = l_bom_get-ojtxp.
    werks = l_bom_get-werks.
    mmein = l_bom_get-mmein.
    meins = l_bom_get-meins.
    dumps = l_bom_get-dumps.
    alpos = l_bom_get-alpos.
    rgekz = l_bom_get-rgekz.
    alprf = l_bom_get-alprf.
    AT NEW idnrk.
      CLEAR mnglg.
      CLEAR menge.
    ENDAT.
    mnglg = mnglg + l_bom_get-mnglg.
    menge = menge + l_bom_get-menge.
    AT END OF idnrk.
      get_data_get3-matnr = idnrk.
      get_data_get3-mtart = mtart.
      get_data_get3-maktx = ojtxp.
      get_data_get3-werks = werks.
      get_data_get3-mmein = mmein.
      get_data_get3-meins = meins.
      get_data_get3-mnglg = mnglg.
      get_data_get3-menge = menge.
      get_data_get3-dumps = dumps.
      get_data_get3-alpos = alpos.
      get_data_get3-rgekz = rgekz.
      get_data_get3-alprf = alprf.
      APPEND get_data_get3.
      CLEAR  get_data_get3.
    ENDAT.
  ENDLOOP.
ENDFORM.                    "BOM_GET_DATA_COUNT

*&---------------------------------------------------------------------*
*&      Form  BOM_GET_DATA2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->L_BOM_GET  text
*----------------------------------------------------------------------*
FORM bom_get_data2 TABLES l_bom_get STRUCTURE get_data_get6.
  DATA y TYPE i.
  LOOP AT get_data_get3.
    SELECT lgort labst insme einme speme
       FROM mard
       INTO (l_bom_get-lgort,l_bom_get-labst,l_bom_get-insme,
       l_bom_get-einme,l_bom_get-speme)
       WHERE matnr = get_data_get3-matnr
         AND lgort IN s_lgort
         AND lvorm NE 'X'.
      get_data_get6-matnr = get_data_get3-matnr.
      get_data_get6-mtart = get_data_get3-mtart.
      get_data_get6-maktx = get_data_get3-maktx.
      get_data_get6-werks = get_data_get3-werks.
      get_data_get6-mmein = get_data_get3-mmein.
      get_data_get6-meins = get_data_get3-meins.
      get_data_get6-mnglg = get_data_get3-mnglg.
      get_data_get6-menge = get_data_get3-menge.
      get_data_get6-dumps = get_data_get3-dumps.
      get_data_get6-alpos = get_data_get3-alpos.
      get_data_get6-rgekz = get_data_get3-rgekz.
      get_data_get6-alprf = get_data_get3-alprf.
      APPEND get_data_get6.
      CLEAR  get_data_get6.
    ENDSELECT.
  ENDLOOP.
  SORT get_data_get6 ASCENDING BY matnr mtart werks DESCENDING.
  SORT get_data_get3 ASCENDING BY matnr mtart werks DESCENDING.
  LOOP AT get_data_get6.
    LOOP AT get_data_get3.
      DELETE get_data_get3 WHERE
      matnr = get_data_get6-matnr
      AND mtart = get_data_get6-mtart
      AND maktx = get_data_get6-maktx
      AND werks = get_data_get6-werks
      AND meins = get_data_get6-meins
      AND mmein = get_data_get6-mmein.
    ENDLOOP.
  ENDLOOP.
  LOOP AT get_data_get3.
    get_data_get6-matnr = get_data_get3-matnr.
    get_data_get6-mtart = get_data_get3-mtart.
    get_data_get6-maktx = get_data_get3-maktx.
    get_data_get6-werks = get_data_get3-werks.
    get_data_get6-mmein = get_data_get3-mmein.
    get_data_get6-meins = get_data_get3-meins.
    get_data_get6-mnglg = get_data_get3-mnglg.
    get_data_get6-menge = get_data_get3-menge.
    get_data_get6-dumps = get_data_get3-dumps.
    get_data_get6-alpos = get_data_get3-alpos.
    get_data_get6-rgekz = get_data_get3-rgekz.
    get_data_get6-alprf = get_data_get3-alprf.
    APPEND  get_data_get6.
    CLEAR   get_data_get6.
  ENDLOOP.

*    SORT L_BOM_GET ASCENDING BY MATNR  MNGKO DESCENDING.
ENDFORM.                    "BOM_GET_DATA2

*&---------------------------------------------------------------------*
*&      Form  BOM_GET_DATA6
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->L_BOM_GET  text
*----------------------------------------------------------------------*
FORM bom_get_data6 TABLES l_bom_get STRUCTURE get_data_get6.
  LOOP AT l_bom_get.
    SELECT SINGLE ktext
       INTO l_bom_get-ktext
       FROM m_crama
       INNER JOIN crhd ON crhd~arbpl = m_crama~arbpl
                      AND m_crama~werks = crhd~werks
                      AND m_crama~verwe = crhd~verwe
       INNER JOIN plpo ON plpo~arbid = crhd~objid
       INNER JOIN mapl ON mapl~werks = plpo~werks
                      AND mapl~plnty = plpo~plnty
                      AND mapl~plnnr = plpo~plnnr
                      AND mapl~zaehl = plpo~zaehl
       WHERE mapl~matnr = l_bom_get-matnr.

    SELECT SINGLE lgobe
       INTO l_bom_get-lgobe
       FROM t001l
       WHERE lgort = l_bom_get-lgort.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        input  = l_bom_get-matnr
      IMPORTING
        output = l_bom_get-matnr.
    MODIFY l_bom_get.
    CLEAR  l_bom_get.
  ENDLOOP.
ENDFORM.                    "BOM_GET_DATA6
*&---------------------------------------------------------------------*
*&      Form  BOM_GET_DATA8
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->L_BOM_GET  text
*----------------------------------------------------------------------*
FORM bom_get_data8 TABLES l_bom_get STRUCTURE get_data_get8.
  DATA: mmngko TYPE p.
  DATA: matnr(20) TYPE c,
        maktx(40) TYPE c,
        werks(10) TYPE c,
        meins(6) TYPE c,
        mtart(6) TYPE c,
        llabst TYPE p DECIMALS 5,
        labst TYPE p DECIMALS 5,
        insme TYPE p DECIMALS 5,
        speme TYPE p DECIMALS 5,
        einme TYPE p DECIMALS 5,
        mngko TYPE p DECIMALS 5,
        mmein(6) TYPE c,
        mnglg TYPE p DECIMALS 5,
        menge TYPE p DECIMALS 5,
        dumps(2) TYPE c,
        alpos(2) TYPE c,
        rgekz(2) TYPE c,
        alprf(2) TYPE c,
        t_tab_a(15) TYPE c,
        t_tab_b(15) TYPE c,
        t_tab_c(15) TYPE c,
        t_tab_d(15) TYPE c.
  IF llabston = 'X'.
    DELETE get_data_get6 WHERE alprf = '02'.
  ENDIF.
  LOOP AT get_data_get6.
    matnr = get_data_get6-matnr.
    maktx = get_data_get6-maktx.
    werks = get_data_get6-werks.
    meins = get_data_get6-meins.
    mmein = get_data_get6-mmein.
    mtart = get_data_get6-mtart.
    mnglg = get_data_get6-mnglg.
    menge = get_data_get6-menge.
    dumps = get_data_get6-dumps.
    alpos = get_data_get6-alpos.
    rgekz = get_data_get6-rgekz.
    alprf = get_data_get6-alprf.
    AT NEW matnr.
      CLEAR labst.
      CLEAR insme.
      CLEAR speme.
      CLEAR einme.
      CLEAR llabst.
      CLEAR t_tab_a.
    ENDAT.
    labst = labst + get_data_get6-labst.
    insme = insme + get_data_get6-insme.
    speme = speme + get_data_get6-speme.
    einme = einme + get_data_get6-einme.
    AT END OF matnr.
*      t_tab_B = INSME
*      t_tab_C = SPEME
*      t_tab_D = EINME
      llabst = mnglg - labst.
      t_tab_a = llabst.
      PERFORM frm_change_sign CHANGING t_tab_a.
      l_bom_get-matnr = matnr.
      l_bom_get-maktx = maktx.
      l_bom_get-werks = werks.
      l_bom_get-mtart = mtart.
      l_bom_get-meins = meins.
      l_bom_get-mmein = mmein.
      l_bom_get-llabst = t_tab_a.
      l_bom_get-labst = labst.
      l_bom_get-insme = insme.
      l_bom_get-einme = einme.
      l_bom_get-speme = speme.
      l_bom_get-mnglg = mnglg.
      l_bom_get-menge = menge.
      l_bom_get-dumps = dumps.
      l_bom_get-alpos = alpos.
      l_bom_get-rgekz = rgekz.
      l_bom_get-alprf = alprf.
      APPEND l_bom_get.
      CLEAR  l_bom_get.
    ENDAT.
  ENDLOOP.
  DELETE ADJACENT DUPLICATES FROM l_bom_get.
ENDFORM.                    "BOM_GET_DATA8
*FORM GET_DATA_GET8.
*     DATA: XXX(10) TYPE C.
*     LOOP AT GET_DATA_GET8.
*     SELECT SINGLE MEINS
*       INTO GET_DATA_GET8-MEINS
*       FROM MARA
*       INNER JOIN MARC ON MARC~MATNR = MARA~MATNR
*       WHERE MARA~MATNR = GET_DATA_GET8-MATNR
*         AND MARC~WERKS = p_werks.
**     MODIFY GET_DATA_GET8.
**     CLEAR  GET_DATA_GET8.
*     ENDLOOP.
*ENDFORM.
FORM sub_list_data TABLES l_bom_get STRUCTURE get_data_get8.
  REFRESH  i_fieldcat.
  add_filed 'GET_DATA_GET8' 'MATNR' '物料編碼' '40 ' '2' '' ''.
  add_filed 'GET_DATA_GET8' 'MAKTX' '物料描述' '40' '3' '' ''.
  add_filed 'GET_DATA_GET8' 'WERKS'  '工廠' '40' '5' '' ''.
  add_filed 'GET_DATA_GET8' 'MTART'  '物料類型' '40' '5' '' ''.
  add_filed 'GET_DATA_GET8' 'MEINS'  'BOM基本單位' '40' '9' '' ''.
  add_filed 'GET_DATA_GET8' 'MMEIN'  '庫存基本單位' '40'  '11' '' ''.
  add_filed 'GET_DATA_GET8' 'MENGE'  '組件需求量(BOM單位)' '40' '10' ''
  ''.
  add_filed 'GET_DATA_GET8' 'MNGLG'  '組件需求量(庫存單位)' '40' '10' ''
  ''.
*  add_filed 'GET_DATA_GET8' 'LGOBE'  '庫存地點描述' 'L'  '12' '' ''.
  add_filed 'GET_DATA_GET8' 'LLABST'  '短缺數量' '40' '13' '' ''.
  add_filed 'GET_DATA_GET8' 'LABST'  '非限制' '40' '13' '' ''.
  add_filed 'GET_DATA_GET8' 'INSME'  '質量檢查(IQC)'  '40' '14' '' ''.
  add_filed 'GET_DATA_GET8' 'EINME'  '限制使用的' '40' '15' '' ''.
  add_filed 'GET_DATA_GET8' 'SPEME'  '已凍結' '40' '15' '' ''.
  add_filed 'GET_DATA_GET8' 'DUMPS'  '虛擬鍵' '40' '15' '' ''.
  add_filed 'GET_DATA_GET8' 'RGEKZ'  '反衝料' '40' '15' '' ''.
  add_filed 'GET_DATA_GET8' 'ALPOS'  '替代料' '40' '15' '' ''.
  add_filed 'GET_DATA_GET8' 'ALPRF'  '替代關係' '40' '15' '' ''.
  display_data get_data_get8 ''.
ENDFORM.                    "SUB_LIST_DATA

*&---------------------------------------------------------------------*
*&      Form  frm_change_sign
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->VALUE(P_CHANGE)  text
*----------------------------------------------------------------------*
FORM frm_change_sign CHANGING value(p_change).
  IF p_change CA '-'.
    CONCATENATE '-' p_change INTO p_change.
    CONDENSE p_change NO-GAPS.
    SHIFT p_change RIGHT DELETING TRAILING ' -'.
*     SHIFT p_change by 1 places left.
  ELSEIF p_change NA '123456789'.
    p_change = ''.
  ENDIF.
ENDFORM.                    "frm_change_sign
*&---------------------------------------------------------------------*
*&      Form  USERCOMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->R_UCOMM      text
*      -->RS_SELFIELD  text
*----------------------------------------------------------------------*
FORM usercommand  USING r_ucomm LIKE sy-ucomm
                           rs_selfield TYPE slis_selfield.
  CASE r_ucomm.
    WHEN '&IC1'.
      CASE rs_selfield-sel_tab_field.
        WHEN  'GET_DATA_GET8-MATNR'.
          SET PARAMETER ID 'MAT' FIELD rs_selfield-value.
          CALL TRANSACTION 'MMBE' AND SKIP FIRST SCREEN.
      ENDCASE.
    WHEN OTHERS.
  ENDCASE.
ENDFORM.                    "USERCOMMAND

 

 

 

 

text symbols

010 選擇屏幕
B10 虛擬鍵全展
B11 BOM全展
B12 刪除替代關係
B13 虛擬鍵一層

 

selections text

BOM_A 生產BOM
BOM_B 設計BOM(試產)
LLABST 虛擬鍵展
LLABSTON ?...
LLLABST BOM全展
LLLABSTT 刪除替代關係
P_FNAME 計劃數量
P_WERKS 工廠
S_LGORT 倉庫
S_MATNR 物料編碼

發佈了36 篇原創文章 · 獲贊 4 · 訪問量 39萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章