加载中…
个人资料
sap_andy
sap_andy
  • 博客等级:
  • 博客积分:0
  • 博客访问:4,060
  • 关注人气:285
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

PP主数据-工艺路线查看

(2013-01-13 15:00:37)
标签:

工艺路线查看

pp模块

sap

it

分类: SAP常用导入程序

*****************************************************************
*& Program ID/Name:  ZSUBPPR0017      Date written: 2012.10.10
*& Author's name:                     Last update:  2010.10.10
*& Program title:    工艺路线查看
*& Project Name:    
*& Version: 1.0
*---------------------------------------------------------------*
* Description: (Incl. Related Function Area and System)
*
*---------------------------------------------------------------*
* Include:
*
*---------------------------------------------------------------*
* Calls: (RFC and BPI)
*
*---------------------------------------------------------------*
* Function Modules:
*
*---------------------------------------------------------------*
* Table:
*
*---------------------------------------------------------------*
* Change History
*---------------------------------------------------------------*
    Date    Programmer    Corr. #     Description
*****************************************************************

REPORT  zsubppr0017                                                 .
*---------------------------------------------------------------------*
* Data Declarition
*---------------------------------------------------------------------*
TABLES: mapl, crhd, plko, plpo.

DATA: BEGIN OF gt_data OCCURS 0,
        matnr LIKE mapl-matnr,                          "物料
        mfrpn LIKE mara-mfrpn,                          "制造商物料编号
        maktx LIKE makt-maktx,                          "物料描述
        werks LIKE mapl-werks,                          "工厂
        plnty LIKE mapl-plnty,                          "类型
        plnnr LIKE mapl-plnnr,                          "清单组码
        plnal LIKE mapl-plnal,                          "组计数器
        pdatu LIKE plas-datuv,                          "清单组有效自

        plnkn LIKE plpo-plnkn,
        zaehl LIKE plpo-zaehl,
        vornr LIKE plpo-vornr,                          "工序 即 操作号
        arbpl LIKE crhd-arbpl,                          "工作中心
        aktxt LIKE crtx-ktext,                          "工作中心描述
        veran LIKE crhd-veran,                          "车间
        vktxt LIKE tc24-ktext,                          "车间描述
        steus LIKE plpo-steus,                          "控制码
        bmsch LIKE plpo-bmsch,                          "基本数量
        meinh LIKE plpo-meinh,                          "Un
        lar01 LIKE plpo-lar01,                          "活动类 即作业类
        vgw01 LIKE plpo-vgw01,                          "燃料及动力
        vge01 LIKE plpo-vge01,                          "计量单位
        lar02 LIKE plpo-lar02,                          "活动类 即作业类
        vgw02 LIKE plpo-vgw02,                          "直接人工
        vge02 LIKE plpo-vge02,                          "计量单位
        lar03 LIKE plpo-lar03,                          "活动类 即作业类
        vgw03 LIKE plpo-vgw03,                          "制造费用
        vge03 LIKE plpo-vge03,                          "计量单位
        lar04 LIKE plpo-lar04,                          "活动类 即作业类
        vgw04 LIKE plpo-vgw04,                          "辅助材料
        vge04 LIKE plpo-vge04,                          "计量单位
        lar05 LIKE plpo-lar05,                          "活动类 即作业类
        vgw05 LIKE plpo-vgw05,                          "废品损失
        vge05 LIKE plpo-vge05,                          "计量单位
        lar06 LIKE plpo-lar06,                          "活动类 即作业类
        vgw06 LIKE plpo-vgw06,                          "加工节拍
        vge06 LIKE plpo-vge06,                          "计量单位

        losvn LIKE plko-losvn,                          "从批量
        losbs LIKE plko-losbs,                          "到批量
        plnme LIKE plko-plnme,                          "批量单位
        datuv LIKE plpo-datuv,                          "工序有效期始于
        datub LIKE plpo-datuv,                          "工序有效期至
        aennr LIKE plpo-aennr,                          "更改编号
      END OF gt_data.

*---------------------------------------------------------------------*
* Selection-Screen
*---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b.
PARAMETERS: p_datuv LIKE plko-datuv DEFAULT sy-datum OBLIGATORY.
SELECT-OPTIONS: s_matnr FOR mapl-matnr,
                s_werks FOR mapl-werks OBLIGATORY,
                s_veran FOR crhd-veran,
                s_arbpl FOR crhd-arbpl.
SELECTION-SCREEN END OF BLOCK b.
*---------------------------------------------------------------------*
* AT SELECTION-SCREEN
*---------------------------------------------------------------------*
AT SELECTION-SCREEN.
  PERFORM frm_auth_check.

*--------------------------------------------------------------------*
* start-of-selection
*--------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM: frm_get_data,
           frm_show_alv.
*&---------------------------------------------------------------------*
*&      Form  frm_get_data
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
-->  p1        text
<--  p2        text
*----------------------------------------------------------------------*
FORM frm_get_data .
  DATA: lt_mapl LIKE mapl OCCURS 0 WITH HEADER LINE.
  SELECT * INTO TABLE lt_mapl FROM mapl
  WHERE matnr IN s_matnr AND
        werks IN s_werks AND
        loekz = ''.

  DATA: lt_plas LIKE plas OCCURS 0 WITH HEADER LINE,
        lt_plko LIKE plko OCCURS 0 WITH HEADER LINE,
        lt_plpo LIKE coplpo OCCURS 0 WITH HEADER LINE.

  LOOP AT lt_mapl.

    CLEAR: lt_plas, lt_plas[],
           lt_plko, lt_plko[],
           lt_plpo, lt_plpo[].

    CALL FUNCTION 'CUPL_CONFIGURE_ROUTING'
      EXPORTING
        plan_type              = lt_mapl-plnty
        plan_number            = lt_mapl-plnnr
        plan_alternative       = lt_mapl-plnal
        date                   = p_datuv
        instance               = '000000000000000000'
     TABLES
       tplas                  = lt_plas
      TPLFH                  =
      TPLFL                  =
       tplko                  = lt_plko
       tplpo                  = lt_plpo
     EXCEPTIONS
       not_found              = 1
       OTHERS                 = 2.

    IF sy-subrc <> 0.
     MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

    LOOP AT lt_plpo.
      CLEAR gt_data.
      MOVE-CORRESPONDING lt_plpo TO gt_data.

      CLEAR lt_plas.
      READ TABLE lt_plas WITH KEY plnty = lt_plpo-plnty
                                  plnnr = lt_plpo-plnnr
                                  plnkn = lt_plpo-plnkn.
      gt_data-pdatu = lt_plas-datuv.

      CLEAR lt_mapl.
      READ TABLE lt_mapl WITH KEY plnty = lt_plas-plnty
                                  plnnr = lt_plas-plnnr
                                  plnal = lt_plas-plnal.
      gt_data-matnr = lt_mapl-matnr.
      gt_data-werks = lt_mapl-werks.
      gt_data-plnal = lt_mapl-plnal.

      CLEAR lt_plko.
      READ TABLE lt_plko WITH KEY plnty = lt_mapl-plnty
                                  plnnr = lt_mapl-plnnr
                                  plnal = lt_mapl-plnal
                                  zaehl = lt_mapl-zaehl.
      gt_data-losvn = lt_plko-losvn.
      gt_data-losbs = lt_plko-losbs.
      gt_data-plnme = lt_plko-plnme.

    物料描述
      SELECT SINGLE maktx INTO gt_data-maktx FROM makt
      WHERE matnr = gt_data-matnr AND
            spras = sy-langu.
      SELECT SINGLE mfrpn INTO gt_data-mfrpn FROM mara
        WHERE matnr = gt_data-matnr.
    工作中心/负责人
      SELECT SINGLE crhd~arbpl crtx~ktext crhd~veran tc24~ktext
        INTO (gt_data-arbpl, gt_data-aktxt, gt_data-veran, gt_data-vktxt)
      FROM crhd INNER JOIN crtx ON
        crtx~objty = crhd~objty AND
        crtx~objid = crhd~objid AND
        crtx~spras = sy-langu
      LEFT JOIN tc24 ON
        tc24~werks = crhd~werks AND
        tc24~veran = crhd~veran

      WHERE crhd~objty = 'A' AND
            crhd~objid = lt_plpo-arbid.

        过滤车间、工作中心
      IF gt_data-veran NOT IN s_veran OR gt_data-arbpl NOT IN s_arbpl.
        CONTINUE.
      ENDIF.

      APPEND gt_data.
    ENDLOOP.

  ENDLOOP.

  SORT gt_data BY matnr werks plnty plnnr plnal vornr.

* 处理有效至
  DATA: ls_data LIKE gt_data,
        lv_idx LIKE sy-tabix.
  FIELD-SYMBOLS: LIKE gt_data.
  LOOP AT gt_data ASSIGNING .
    lv_idx = sy-tabix.

    lv_idx = lv_idx + 1.
    CLEAR gt_data.
    READ TABLE gt_data INDEX lv_idx.

    -datub = '99991231'.

    IF gt_data-matnr <> -matnr OR gt_data-werks <> -werks OR
       gt_data-plnty <> -plnty OR gt_data-plnnr <> -plnnr OR
       gt_data-plnal <> -plnal OR gt_data-vornr <> -vornr.

      SELECT * FROM plpo INTO CORRESPONDING FIELDS OF TABLE lt_plpo
      WHERE plnty = -plnty AND
            plnnr = -plnnr AND
            plnkn = -plnkn AND
            datuv > -datuv AND
            vornr = -vornr AND
            werks = -werks.

      IF sy-subrc = 0.
        SORT lt_plpo BY datuv.
        READ TABLE lt_plpo INDEX 1.
        -datub = lt_plpo-datuv - 1.
      ENDIF.

    ELSE.
      -datub = gt_data-datuv - 1.
    ENDIF.

  ENDLOOP.

ENDFORM.                    " frm_get_data
*&---------------------------------------------------------------------*
*&      Form  frm_show_alv
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
-->  p1        text
<--  p2        text
*----------------------------------------------------------------------*
FORM frm_show_alv .
  TYPE-POOLS: slis.
  DATA: fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,
        layout   TYPE slis_layout_alv .

* 设置表格字段
  DEFINE macro_field.
    fieldcat-fieldname = &1.
    fieldcat-seltext_l = &2.
    fieldcat-ref_tabname = &3.
    fieldcat-ref_fieldname = &4.
    append fieldcat.
    clear fieldcat.
  END-OF-DEFINITION.

  macro_field: 'MATNR' '物料' 'MARA' 'MATNR',
               'MFRPN' '制造商物料编码' 'MARA' 'MFRPN',
               'MAKTX' '物料描述' 'MAKT' 'MAKTX',
               'WERKS' '工厂' 'T001W' 'WERKS',
               'PLNTY' '清单类型' 'MAPL' 'PLNTY',
               'PLNNR' '清单组码' 'MAPL' 'PLNNR',
               'PLNAL' '组计数器' 'MAPL' 'PLNAL',
               'PDATU' '组有效从' 'PLKO' 'PDATU',
               'VORNR' '工序'     'PLPO' 'VORNR',
               'ARBPL' '工作中心' 'CRHD' 'ARBPL',
               'AKTXT' '工作中心描述' 'CRTX' 'KTEXT',
               'VERAN' '车间'     'CRHD' 'VERAN',
               'VKTXT' '车间描述' 'TC24' 'KTEXT',
               'STEUS' '控制码'   'PLPO' 'STEUS',
               'BMSCH' '基本数量' 'PLPO' 'BMSCH',
               'MEINH' 'Un' 'PLPO' 'MEINH',
               'LAR01' '作业类型' '' '',
               'VGW01' '燃料及动力' 'PLPO' 'VGW01',
               'VGE01' '计量单位' 'PLPO' 'VGE01',
               'LAR02' '作业类型' '' '',
               'VGW02' '直接人工' 'PLPO' 'VGW02',
               'VGE02' '计量单位' 'PLPO' 'VGE02',
               'LAR03' '作业类型' '' '',
               'VGW03' '制造费用' 'PLPO' 'VGW03',
               'VGE03' '计量单位' 'PLPO' 'VGE03',
               'LAR04' '作业类型' '' '',
               'VGW04' '辅助材料' 'PLPO' 'VGW04',
               'VGE04' '计量单位' 'PLPO' 'VGE04',
               'LAR05' '作业类型' '' '',
               'VGW05' '废品损失' 'PLPO' 'VGW05',
               'VGE05' '计量单位' 'PLPO' 'VGE05',
               'LAR06' '作业类型' '' '',
               'VGW06' '加工节拍' 'PLPO' 'VGW06',
               'VGE06' '计量单位' 'PLPO' 'VGE06',
               'LOSVN' '从批量' 'PLKO' 'LOSVN',
               'LOSBS' '到批量' 'PLKO' 'LOSBS',
               'PLNME' '批量单位' 'PLPO' 'PLNME',
               'DATUV' '工序有效期始于' 'PLPO' 'DATUV',
               'DATUB' '工序有效期至' 'PLPO' 'DATUV',
               'AENNR' '工程变更号' 'PLPO' 'AENNR'.

  layout-colwidth_optimize = 'X'.
  layout-window_titlebar = '工艺路线查看'.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program = sy-repid
      is_layout          = layout
      it_fieldcat        = fieldcat[]
    TABLES
      t_outtab           = gt_data
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.
ENDFORM.                    " frm_show_alv
*&---------------------------------------------------------------------*
*&      Form  frm_auth_check
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
-->  p1        text
<--  p2        text
*----------------------------------------------------------------------*
FORM frm_auth_check .
  DATA: lt_t001w LIKE t001w OCCURS 0 WITH HEADER LINE.
  SELECT * INTO TABLE lt_t001w FROM t001w
  WHERE werks IN s_werks.

  DATA: lv_idx LIKE sy-tabix.
  LOOP AT lt_t001w.
    lv_idx = sy-tabix.
    AUTHORITY-CHECK OBJECT 'ZAUTH'
             ID 'BUKRS' DUMMY
             ID 'WERKS' FIELD lt_t001w-werks
             ID 'EKORG' DUMMY
             ID 'VKORG' DUMMY
             ID 'GSBER' DUMMY.
    IF sy-subrc <> 0 .
      DELETE lt_t001w INDEX lv_idx.
    ENDIF.
  ENDLOOP.

  IF lt_t001w[] IS INITIAL.
    MESSAGE '没有权限!' TYPE 'E' .
  ENDIF .
ENDFORM.                    " frm_auth_check

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有