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 物料编码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值