ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 学习代码

学习代码

原创 Linux操作系统 作者:hzq2010 时间:2010-04-16 20:47:35 0 删除 编辑
  SPAN { font-family: "Courier New"; font-size: 10pt; color: #000000; background: #FFFFFF; } .L1S31 { font-style. italic; color: #808080; } .L1S32 { color: #3399FF; } .L1S33 { color: #4DA619; } .L1S52 { color: #0000FF; } *&--------------------------------------------------------------------&*
*&              BYD46C  U P D A T E   P R O J E C T                   &*
*&                                                                    &*
*&   PROGRAM NAME  : ZRPP_08                                          &*
*&   PROGRAM TITLE : 车间生产报表                                     &*
*&   DEVELOPER     : Phoebus Zhang                                    &*
*&   INITIAL DATE  : 2006/12/25                                       &*
*&   PURPOSE       : 车间生产报表                                     &*
*&                                                                    &*
*&----------------------    CHANGE HISOTRY     ---------------------- &*
*& DATE          MODI.         MODEFIER         DESCRIPTION           &*
*& 2006/12/25    DEVK910581    PHOEBUS ZHANG    MODIFIED VERSION      &*
*& 2007/12/12    DEVK916063    PHOEBUS ZHANG    MODIFIED VERSION 2.   &*
*&--------------------------------------------------------------------&*
*------------------------------------------------------------------*
* This program is used to show the collect of workcenter monthly   *
*------------------------------------------------------------------*
REPORT zrpp_08  LINE-SIZE 180
                MESSAGE-ID 00
                NO STANDARD PAGE HEADING.
*------------------------------------------------------------------*
* Define the coresponding tables in the memory.                    *
*------------------------------------------------------------------*
TABLES:
    mara, "Material General Data 物料主数据表
    makt, "Material Descriptions 物料描述表
    mkpf, "Material Doc. Header  物料单头表
    mseg, "Material Doc.         物料单表
    crtx, "Work Center Text      工作中心主数据表
    crhd, "Work Center Header    工作中心头表
    afko, "Production Order      生产订单表
    afru, "Confirmation Order    完工确认表
    t001w,"Plants/Branches       工厂部门主表
    plfl, "Task list - sequences
    mapl, "Material routing (task lists) 物料工艺路线key
    plpo, "operation/activity routing (Task list)工艺路线的工序表
    plas. "selection of operations/activities 工序/作业选择
*------------------------------------------------------------------*
* Define the TYPES OF INTABLE .                                    *
*------------------------------------------------------------------*
TYPES:
    BEGIN OF out2 ,
          matnr LIKE mara-matnr, "物料号              CHAR(18)
          maktx LIKE makt-maktx, "物料描述            CHAR(40)
          arbpl(40) TYPE c,      "工作中心描述        CHAR(40)
          meinh LIKE afru-meinh, "单位                UNIT(4)
          gamng LIKE afko-gamng, "计划数量            quan(13.3)
          gmnga LIKE afru-gmnga, "产出数量            QUAN(13.3)
          grate(7) TYPE p DECIMALS 4,"完成率          pack(14)
          xmnga LIKE afru-xmnga, "报废数量            QUAN(13.3)
          xrate(7) TYPE p DECIMALS 4,"报废率          pack(14)
    END OF out2,
    BEGIN OF out1,
          aufnr LIKE afru-aufnr, "定单号              CHAR(12)
          matnr LIKE mara-matnr, "物料号              CHAR(18)
          arbpl(40) TYPE c,      "工作中心描述        CHAR(40)
          gmnga LIKE afru-gmnga, "产出数量            QUAN(13.3)
          meinh LIKE afru-meinh, "单位                UNIT(4)
          xmnga LIKE afru-xmnga, "废品数量            QUAN(13.3)
    END OF out1,
    BEGIN OF zout,
          matnr LIKE mara-matnr, "物料号              CHAR(12)
          arbpl(40) TYPE c,      "工作中心描述        CHAR(40)
          zmnga LIKE afru-rmnga, "分母                QUAN(13.3)
    END OF zout,
    BEGIN OF inafru,
          aufnr LIKE afru-aufnr, "订单号              CHAR(12)
          budat LIKE afru-budat, "记帐时间            DATS(8)
          werks LIKE afru-werks, "工厂                CHAR(4)
          arbid LIKE afru-arbid, "工作中心号          NUMC(8)
          aplfl LIKE afru-aplfl, "顺序                char(6)
          vornr LIKE afru-vornr, "工序号              CHAR(4)
          stokz LIKE afru-stokz, "冲销标志            char(1)
          gmnga LIKE afru-gmnga, "产出数量            QUAN(13.3)
          meinh LIKE afru-meinh, "单位                UNIT(4)
          xmnga LIKE afru-xmnga, "报废数量            QUAN(13.3)
    END OF inafru,
    BEGIN OF inafko,
          aufnr LIKE afko-aufnr,   "生产订单号         CHAR(12)
          matnr LIKE afpo-matnr,   "产品物料号         CHAR(18)
          gamng LIKE afko-gamng,   "计划数量           quan(13.3)
          dauat LIKE afpo-dauat,   "订单类型
    END OF inafko,
    BEGIN OF itafko,
          matnr LIKE mara-matnr,   "物料号             char(18)
          gamng LIKE afko-gamng,   "计划数量           quan(13.3)
    END OF itafko,
    BEGIN OF itcrhd ,
          werks LIKE crhd-werks,    "工厂              CHAR(4)
          objid LIKE crhd-objid,    "工作中心号        NUMC(8)
          wempf LIKE mseg-wempf,    "工作中心描述      CHAR(12)
    END OF itcrhd,
    BEGIN OF itmakt ,
          matnr LIKE makt-matnr,    "物料号            CHAR(18)
          maktx LIKE makt-maktx,    "物料描述          CHAR(40)
    END OF itmakt,
    BEGIN OF invrnr,
          matnr LIKE mapl-matnr,    "物料号           CHAR(18)
          werks LIKE mapl-werks,    "工厂              CHAR(4)
          vornr LIKE plpo-vornr,    "工序号            CHAR(4)
          plnfl LIKE plfl-plnfl,    "顺序              char(6)
          arbid LIKE plpo-arbid,    "工作中心号        NUMC(8)
          ltxa1 LIKE plpo-ltxa1,    "工序描述         CHAR(40)
          wempf LIKE mseg-wempf,    "工作中心描述     CHAR(12)
    END OF invrnr.
*---------------------------------------------------------------*
*  Define  internal table                                       *
*---------------------------------------------------------------*
DATA:
    c_objid LIKE crhd-objid,
    c_xmnga LIKE afru-xmnga,
    itabzout TYPE STANDARD TABLE OF zout
         INITIAL SIZE 0 WITH HEADER LINE,
    itabout2 TYPE STANDARD TABLE OF out2
         INITIAL SIZE 0 WITH HEADER LINE,   "主表  (1)
    itabout1 TYPE STANDARD TABLE OF out1
         INITIAL SIZE 0 WITH HEADER LINE,   "辅表  (2)
    itabafru TYPE STANDARD TABLE OF inafru
         INITIAL SIZE 0 WITH HEADER LINE,   "完工确认表    (3)
    itabafko TYPE STANDARD TABLE OF inafko
         INITIAL SIZE 0 WITH HEADER LINE,   "生产订单表    (4)
    itabafko1 TYPE STANDARD TABLE OF itafko
         INITIAL SIZE 0 WITH HEADER LINE,   "生产订单表    (5)
    itabcrhd TYPE STANDARD TABLE OF itcrhd
         INITIAL SIZE 0 WITH HEADER LINE,  "工作中心描述表 (6)
    itabvrnr TYPE STANDARD TABLE OF invrnr
         INITIAL SIZE 0 WITH HEADER LINE,  "产品工序表(7)
    itabmakt TYPE STANDARD TABLE OF itmakt
         INITIAL SIZE 0 WITH HEADER LINE.  "物料描述表    (8)

DATA: BEGIN OF it_mapl OCCURS 0,
         matnr LIKE mapl-matnr,    "物料号           CHAR(18)
         werks LIKE mapl-werks,    "工厂              CHAR(4)
         plnnr LIKE mapl-plnnr,
         plnal LIKE mapl-plnal,
         plnty LIKE mapl-plnty,
     END OF it_mapl.

DATA: BEGIN OF it_plfl OCCURS 0,
          plnnr LIKE mapl-plnnr,
          plnal LIKE mapl-plnal,
          plnty LIKE mapl-plnty,
          plnfl LIKE plfl-plnfl,
      END OF it_plfl.

DATA: BEGIN OF it_plas OCCURS 0,
          plnnr LIKE mapl-plnnr,
          plnal LIKE mapl-plnal,
          plnty LIKE mapl-plnty,
          plnfl LIKE plfl-plnfl,
          plnkn LIKE plas-plnkn,
      END OF it_plas.

DATA: BEGIN OF it_plpo OCCURS 0,
          plnty LIKE mapl-plnty,
          plnnr LIKE mapl-plnnr,
          plnkn LIKE plas-plnkn,
          vornr LIKE plpo-vornr,
          arbid LIKE plpo-arbid,
          werks LIKE plpo-werks,
          ltxa1 LIKE plpo-ltxa1,
      END OF it_plpo.
*ALV参数
TYPE-POOLS: slis.
DATA: gd_fieldcat TYPE slis_t_fieldcat_alv.
DATA: sla TYPE slis_layout_alv ,
      ivariant LIKE disvariant,
      i_repid LIKE sy-repid ,
      frepid  LIKE sy-repid.
*---------------------------------------------------------------*
*  Define  select-Options                                       *
*  We also define a block with frame                            *
*---------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE text-001.
SELECT-OPTIONS:
             s_werks FOR t001w-werks OBLIGATORY,  "工厂
             s_objid FOR crtx-objid  NO-DISPLAY,
             s_arbpl FOR crhd-arbpl MATCHCODE OBJECT zarbpl1, "工作中心
             s_date FOR afru-budat OBLIGATORY,    "生产日期段
             s_matnr FOR mara-matnr.   "物料号段
SELECTION-SCREEN END OF BLOCK block1.
* ALV选项
SELECTION-SCREEN BEGIN OF BLOCK block2 WITH FRAME TITLE text-002.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: p_rdlst TYPE c DEFAULT 'X' RADIOBUTTON GROUP grp1.
SELECTION-SCREEN COMMENT 3(25) text-101 FOR FIELD p_rdlst.
SELECTION-SCREEN END   OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: p_rdgrid TYPE c RADIOBUTTON GROUP grp1.
SELECTION-SCREEN COMMENT  3(25) text-102 FOR FIELD p_rdgrid.
SELECTION-SCREEN END   OF LINE.
SELECTION-SCREEN END OF BLOCK block2.
*---------------------------------------------------------------*
*  AT-SELECTION-SCREEN                                          *
* This section is used for user's input and check user's input. *
* If user's input is incorrect,system will give a message.      *
*---------------------------------------------------------------*
AT SELECTION-SCREEN.
  IF NOT s_matnr[] IS INITIAL.
    SELECT matnr FROM mara INTO mara-matnr UP TO 1 ROWS
           WHERE matnr IN s_matnr.
    ENDSELECT.
    IF sy-subrc <> 0.
      IF sy-langu = '1'.
        MESSAGE i208 WITH '物料号错误,请重新输入!'.
        STOP.
      ELSE.
        MESSAGE i208 WITH 'Error material,please re-enter!'.
        STOP.
      ENDIF.
    ENDIF.
  ENDIF.
  IF ( NOT s_matnr[] IS INITIAL ).
    SELECT aufnr FROM afko INTO afko-aufnr UP TO 1 ROWS
          WHERE ( plnbez IN s_matnr
          OR stlbez IN s_matnr ).
    ENDSELECT.
    IF sy-subrc <> 0.
      IF sy-langu = '1'.
        MESSAGE i208 WITH '生产订单号或物料号错误,请重新输入!'.
        STOP.
      ELSE.
        MESSAGE i208 WITH 'Error order or material ,please re-enter!'.
        STOP.
      ENDIF.
    ENDIF.
  ENDIF.
  IF NOT s_werks[] IS INITIAL.
    SELECT werks FROM t001w INTO t001w-werks UP TO 1 ROWS
           WHERE werks IN s_werks.
    ENDSELECT.
    IF sy-subrc <> 0.
      IF sy-langu = '1'.
        MESSAGE i208 WITH '工厂错误,请重新输入!'.
        STOP.
      ELSE.
        MESSAGE i208 WITH 'Error plant,please re-enter!'.
        STOP.
      ENDIF.
    ENDIF.
  ENDIF.
  REFRESH s_objid.
  CLEAR s_objid.
  IF NOT s_arbpl[] IS INITIAL.
    SELECT arbpl FROM crhd INTO crhd-arbpl UP TO 1 ROWS
           WHERE arbpl IN s_arbpl AND werks IN s_werks.
    ENDSELECT.
    IF sy-subrc <> 0.
      IF sy-langu = '1'.
        MESSAGE i208 WITH '工作中心号错误,请重新输入!'.
        STOP.
      ELSE.
        MESSAGE i208 WITH
       'Error workcenter number,please re-enter!'.
        STOP.
      ENDIF.
    ELSE.
      LOOP AT s_arbpl.
        s_objid-sign = s_arbpl-sign.
        s_objid-option = s_arbpl-option.
        IF NOT s_arbpl-low IS INITIAL.
          SELECT objid FROM crhd INTO c_objid
          WHERE arbpl = s_arbpl-low AND werks IN s_werks.
          ENDSELECT.
          s_objid-low = c_objid.
        ENDIF.
        IF NOT s_arbpl-high IS INITIAL.
          SELECT objid FROM crhd INTO c_objid
          WHERE arbpl = s_arbpl-high AND werks IN s_werks.
          ENDSELECT.
          s_objid-high = c_objid.
        ENDIF.
        APPEND s_objid.
      ENDLOOP.
    ENDIF.
  ENDIF.
*---------------------------------------------------------------*
*  TOP-OF-PAGE                                                  *
*  Give the heading of the report for each page                 *
*---------------------------------------------------------------*
TOP-OF-PAGE.
  WRITE: /32  '车间生产月报表'.
  SKIP.
  IF NOT s_date-high IS INITIAL.
    WRITE: /2  ' 日期:',s_date-low,'到',25 s_date-high.
  ELSE.
    WRITE: /2  ' 日期:',s_date-low.
  ENDIF.
  WRITE: 75  '页:',sy-pagno,156  '页:',sy-pagno.
  ULINE AT /2(172).
  WRITE: /2  sy-vline,3(18) '产品号' CENTERED,
          21 sy-vline,22(41) '产品名' CENTERED,
          63 sy-vline,64(5) '单位' CENTERED,
          69 sy-vline,70(12) '工序' CENTERED,
          82 sy-vline,83(18) '计划数量' CENTERED,
         101 sy-vline,102(18) '实际数量' CENTERED,
         120 sy-vline,121(15) '完成率 %' CENTERED,
         136 sy-vline,137(19) '报废数量' CENTERED,
         156 sy-vline,157(16) '报废率 %' CENTERED,
         173 sy-vline.
  ULINE AT /2(172).
*------------------------------------------------------------------*
* INITIALIZATION                                                   *
*------------------------------------------------------------------*
* ALV 所需选项
INITIALIZATION.
  frepid = sy-repid.
*---------------------------------------------------------------*
*  START-OF-SELECTION                                           *
*---------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM frm_auth_check_pp_werks_s(zebc_auth_message) USING s_werks[].
*---------------------------------------------------*
*    ------------    数据输入    --------------     *
*---------------------------------------------------*
*---------------------*
*   选择条件          *
*---------------------*
*   以日期和工作中心范围选择已有的完工确认单到(itabafru)表

*OB PHOEBUS
*优化程序效率,为表AFRU增加索引ZA1.

  SELECT
         aufnr
         budat
         werks
         arbid
         vornr
         stokz
         gmnga
         meinh
         xmnga
         aplfl
  INTO CORRESPONDING FIELDS OF TABLE itabafru
  FROM afru
  WHERE werks IN s_werks
    AND arbid IN s_objid
    AND budat IN s_date.
*   在已有的完工确认单上继续以生产订单号和要求的物料号
*   确认生产单到生产订单表(itabafko)中

  IF NOT itabafru[] IS INITIAL.
    SORT itabafru BY aufnr.

    SELECT
           afko~aufnr
           afpo~matnr
           afko~gamng
           afpo~dauat
    INTO CORRESPONDING FIELDS OF TABLE itabafko
    FROM afpo
    INNER JOIN afko
    ON afpo~aufnr = afko~aufnr
    FOR ALL entries IN itabafru
    WHERE afpo~aufnr = itabafru-aufnr
      AND afpo~matnr IN s_matnr
      AND afpo~posnr = 1
      AND ( NOT ( afpo~dauat = '2003'
               OR afpo~dauat = '3004' ) ).
  ENDIF.

*OE PHOEBUS

*   select afko~aufnr
*          afpo~matnr
*          afko~gamng
*   into table itabafko
*   from afko inner join afpo
*   on afko~aufnr = afpo~aufnr
*   where
*         afko~GsTRP in s_date
*         and afpo~matnr in s_matnr
*         and afpo~posnr = 1.
*   if sy-subrc = 0.
*   endif.
*----------------------------*
*   归结所选的结果           *
*   并去掉相同记录           *
*   若无记录则退出程序       *
*----------------------------*
  SORT itabafko BY  aufnr matnr.
  DELETE ADJACENT DUPLICATES FROM itabafko.
  IF itabafko[] IS INITIAL.
    IF sy-langu = '1'.
      MESSAGE i208 WITH '没有符合条件的记录,请重新输入!'.
      STOP.
    ELSE.
      MESSAGE i208 WITH 'No record found,Please re-enter!'.
      STOP.
    ENDIF.
    STOP.
  ENDIF.
  LOOP AT itabafko.
*    if itabafko-dauat = '2003' or itabafko-dauat = '3004'.
*    else.
    itabafko1-matnr = itabafko-matnr.
    itabafko1-gamng = itabafko-gamng.
    COLLECT itabafko1.
*    endif.
  ENDLOOP.
*-------------------------------------------------------*
*  ----------------   数据处理   --------------------   *
*-------------------------------------------------------*

*----------------------------*
*   以生产订单表中的物料号为 *
*   选择条件选出此物料号的   *
*   所有工序和子工序及描述   *
*----------------------------*

  SELECT matnr werks plnnr plnal  plnty
      INTO TABLE it_mapl FROM mapl
      FOR ALL ENTRIES IN itabafko
      WHERE matnr = itabafko-matnr
         AND werks IN s_werks
         AND plnty = 'N'.

  SELECT plnnr plnal  plnty plnfl
     INTO TABLE it_plfl FROM plfl
     FOR ALL ENTRIES IN it_mapl
     WHERE plnnr = it_mapl-plnnr AND
           plnal = it_mapl-plnal AND
           plnty = it_mapl-plnty.

  SELECT plnnr plnal  plnty plnfl plnkn
     INTO TABLE it_plas FROM plas
     FOR ALL ENTRIES IN it_plfl
     WHERE plnnr = it_plfl-plnnr AND
           plnal = it_plfl-plnal AND
           plnty = it_plfl-plnty AND
           plnfl = it_plfl-plnfl.

  SELECT plnty plnnr plnkn vornr arbid werks ltxa1
     INTO TABLE it_plpo FROM plpo
     FOR ALL ENTRIES IN it_plas
     WHERE plnnr = it_plas-plnnr AND
           plnty = it_plas-plnty AND
           plnkn = it_plas-plnkn.

  LOOP AT it_mapl.
    itabvrnr-matnr = it_mapl-matnr.
    itabvrnr-werks = it_mapl-werks.
    LOOP AT it_plas WHERE plnty = it_mapl-plnty AND
                          plnnr = it_mapl-plnnr AND
                          plnal = it_mapl-plnal .
      itabvrnr-plnfl = it_plas-plnfl.
      LOOP AT it_plpo WHERE plnty = it_plas-plnty AND
                            plnnr = it_plas-plnnr AND
                            plnkn = it_plas-plnkn.
        itabvrnr-vornr = it_plpo-vornr.
        itabvrnr-arbid = it_plpo-arbid.
        itabvrnr-ltxa1 = it_plpo-ltxa1.
        APPEND itabvrnr.
      ENDLOOP.
    ENDLOOP.
  ENDLOOP.
*  sort itabvrnr by matnr werks arbid vornr .
  SORT itabvrnr BY matnr werks plnfl vornr arbid.

* 添加工作中心描述到表中
  IF NOT itabvrnr[] IS INITIAL .
    SELECT werks
           objid
           arbpl
    FROM crhd INTO TABLE itabcrhd
    FOR ALL ENTRIES IN itabvrnr
    WHERE objid = itabvrnr-arbid
      AND werks = itabvrnr-werks.

    SORT itabcrhd BY werks objid.
    DELETE ADJACENT DUPLICATES FROM itabcrhd.
    LOOP AT itabvrnr.
      LOOP AT itabcrhd.
        IF itabvrnr-arbid = itabcrhd-objid
        AND itabvrnr-werks = itabcrhd-werks.
          itabvrnr-wempf = itabcrhd-wempf.
          MODIFY itabvrnr.
        ENDIF.
      ENDLOOP.
    ENDLOOP.
  ENDIF.
  SORT itabvrnr BY matnr werks plnfl vornr arbid.
  LOOP AT itabvrnr .
    IF itabvrnr-ltxa1 = ' ' OR itabvrnr-ltxa1 CS '*000'.
      DELETE itabvrnr.
    ENDIF.
  ENDLOOP.
  SORT itabvrnr BY matnr werks plnfl vornr arbid.

*---------------------------------------*
*   添加物料描述到物料描述表(itabmakt)  *
*---------------------------------------*
  SELECT matnr
         maktx
  INTO TABLE itabmakt FROM makt
  FOR ALL ENTRIES IN itabafko
  WHERE matnr = itabafko-matnr.

  SORT itabmakt BY matnr maktx.
  DELETE ADJACENT DUPLICATES FROM itabmakt.
*----------------------------*
*   以生产订单表为选择条件   *
*----------------------------*

* 对完工确认表处理
  LOOP AT itabafru .
    READ TABLE itabafko WITH KEY aufnr = itabafru-aufnr .
    IF sy-subrc = 0.
      itabout1-matnr = itabafko-matnr.
      itabout1-aufnr = itabafru-aufnr.
*   判断工序
      READ TABLE itabvrnr WITH KEY matnr = itabout1-matnr
                          vornr = itabafru-vornr
                          plnfl = itabafru-aplfl
                          werks = itabafru-werks.
      IF sy-subrc <> 0 .
        itabout1-arbpl = '工序未知'.
        CONTINUE.
      ELSE.
        IF itabvrnr-ltxa1 = ' ' .
          itabout1-arbpl = itabvrnr-wempf.
        ELSE.
          itabout1-arbpl = itabvrnr-ltxa1.
        ENDIF.
      ENDIF.
      IF itabafru-stokz = 'X'.
        itabout1-gmnga = - itabafru-gmnga.
        itabout1-xmnga = - itabafru-xmnga.
      ELSE.
        itabout1-gmnga = itabafru-gmnga.
        itabout1-xmnga = itabafru-xmnga.
      ENDIF.
      itabout1-meinh = itabafru-meinh.
      COLLECT itabout1.
    ENDIF.
  ENDLOOP.

  SORT itabout1 BY aufnr matnr arbpl .

  LOOP AT itabout1 .
    itabout2-matnr = itabout1-matnr.
    itabout2-arbpl = itabout1-arbpl.
    itabout2-gmnga = itabout1-gmnga.
    itabout2-meinh = itabout1-meinh.
    itabout2-xmnga = itabout1-xmnga.
    COLLECT itabout2.
  ENDLOOP.
  LOOP AT itabout2.
    itabzout-matnr = itabout2-matnr.
    itabzout-arbpl = itabout2-arbpl.
    itabzout-zmnga = itabout2-xmnga.
    COLLECT itabzout.
  ENDLOOP.
  LOOP AT itabout2.
* 添加计划数量
    READ TABLE itabafko1 WITH KEY matnr = itabout2-matnr.
    IF sy-subrc = 0.
      itabout2-gamng = itabafko1-gamng.
    ELSE.
      CONTINUE.
    ENDIF.
* 计算报废率
    READ TABLE itabzout WITH KEY matnr = itabout2-matnr
                                 arbpl = itabout2-arbpl.
    IF sy-subrc = 0 .
      c_xmnga = itabout2-gmnga + itabzout-zmnga.
    ENDIF.
    IF  itabout2-gmnga = 0  OR
       itabout2-xmnga = 0  .
    ELSE.
*       c_xmnga = itabout2-gmnga + itabout2-xmnga.
      itabout2-xrate = 100 * itabout2-xmnga / c_xmnga.
    ENDIF.
* 计算完成率
    IF NOT  itabout2-gamng = 0 .
      itabout2-grate = 100 * itabout2-gmnga / itabout2-gamng .
    ENDIF.
* 物料描述
    READ TABLE itabmakt WITH KEY matnr = itabout2-matnr.
    IF sy-subrc = 0 .
      itabout2-maktx = itabmakt-maktx .
    ELSE.
      itabout2-maktx = ' ' .
    ENDIF.
    CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
      EXPORTING
        input  = itabout2-matnr
      IMPORTING
        output = itabout2-matnr.
    MODIFY itabout2.
    CLEAR itabout2.
  ENDLOOP.
*准备输出主表

  IF itabout2[] IS INITIAL.
    MESSAGE i208(00) WITH '对不起,没找到所要查询的数据!!'.
    STOP.
  ELSE.
    SORT itabout2 BY matnr arbpl.
  ENDIF.

  IF p_rdlst = 'X'.
    PERFORM frm_output_report.
  ENDIF.

  IF p_rdgrid = 'X'.
    PERFORM frm_output_ingrid.
  ENDIF.

*-------------------------------------------------------------------*
*       FORM frm_output_ingrid                                      *
*-------------------------------------------------------------------*
*       ........                                                    *
*-------------------------------------------------------------------*
FORM frm_output_ingrid.

  PERFORM fieldcat_init .
  sla-colwidth_optimize = 'X'.
  i_repid = sy-repid.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program = i_repid
      it_fieldcat        = gd_fieldcat[]
      i_save             = 'A'
      is_layout          = sla
    TABLES
      t_outtab           = itabout2[].

ENDFORM.                    " frm_output_ingrid
*-------------------------------------------------------------------*
*       FORM frm_output_report                                      *
*-------------------------------------------------------------------*
*       ........                                                    *
*-------------------------------------------------------------------*
FORM frm_output_report.

  LOOP AT itabout2.
    WRITE: /2  sy-vline,3(18) itabout2-matnr,
       21 sy-vline,itabout2-maktx,
       63 sy-vline,itabout2-meinh,
       69 sy-vline,itabout2-arbpl,
       82 sy-vline,itabout2-gamng,
      101 sy-vline,itabout2-gmnga,
      120 sy-vline,itabout2-grate,
      136 sy-vline,itabout2-xmnga,
      156 sy-vline,itabout2-xrate,
      173 sy-vline.
    ULINE AT /2(172).
  ENDLOOP.

ENDFORM.                    "frm_output_report
*---------------------------------------------------------------------*
*       FORM fieldcat_init                                            *
*---------------------------------------------------------------------*
FORM fieldcat_init .
  PERFORM frm_catlg_set USING:  'MATNR'  '     物料号',
                                'MAKTX'  '物料描述',
                                'ARBPL'  '工作中心描述',
                                'MEINH'  '单位',
*                                'GSTRP'  '基本开始日期',
                                'GAMNG'  '计划数量',
                                'GMNGA'  '产出数量',
*                                'GMNGA_N'  '未完成数量',
                                'GRATE'  '完成率',
                                'XMNGA'  '报废数量',
                                'XRATE'  '报废率'.
*                                'AUFNR'  '生产订单号' .
ENDFORM.                    "fieldcat_init
*---------------------------------------------------------------------*
*       FORM frm_catlg_set                                            *
*---------------------------------------------------------------------*
FORM frm_catlg_set USING p_field
                         p_text.
  DATA: ls_fieldcat TYPE slis_fieldcat_alv.

  ls_fieldcat-fieldname     =  p_field.
  ls_fieldcat-seltext_l     =  p_text.

  APPEND ls_fieldcat TO gd_fieldcat .
  CLEAR ls_fieldcat .
ENDFORM.                    "frm_catlg_set

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23495244/viewspace-659967/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-03-11

  • 博文量
    196
  • 访问量
    205408