简单的ALV介绍,并附有程序

ALV的调用主要由以下几个标准函数实现,所有函数的输入输出参数必须大写,否则系统会出现异常中止,相关函数如下:

  1)REUSE_ALV_FIENDCATALOG_MERGE:根据内表结构返回FIELDCAT字段结构信息,其常用输入输出参数如下:
  EXPORTING项:
      1.I_PROGRAM_NAME:程序名称。
      2.I_INTERNAL_TABNAME:内表名称,必须为输出内表所自定义的STRUCTURE名。
      3.I_STRUCTURE_NAME:直接参考数据字典中所定义的透明表名或STRUCTURE名。
      函数定义时I_INTERNAL_TABNAME或I_STRUCTURE_NAME参数只需一项。
     CHANGING项:
   CT_FIELDCAT:导出FIELDCAT内表数据。

  2)REUSE_ALV_GRID_DISPLAY/REUSE_ALV_LIST_DISPLAY:输出ALV报表,定义其为GRID模式还是LIST模式,两个函数的语法结构一样,其常用输入输出参数如下:
      EXPORT项:
  1.I_CALLBACK_PROGRAM:程序名称。
  2.IS_LAYOUT:程序所定义的LAYOUT名称。
  3.I_GRID_TITLE:定义ALV标题名。 
  4.IT_FIELDCAT:定义FIELDCAT数据。
  5.IT_EVENTS:定义ALV输出事件。
  6.I_CALLBACK_PF_STATUS_SET:定义触发工具栏定义,通常为一个子程序。
  7.I_CALLBACK_USER_COMMAND:其对应值一般为子程序名,在对ALV操作时触发所定义子程序(如某表字段的双击事件)。
  TABLES项(定义输入内表数据):
  1.T_OUTTAB:输入所需显示的内表数据。

 

  3)LAYOUT为一STRUCTURE,其主要字段定义及属性如下:
  1.EDIT:设置ALV是否为可编辑模式。
  2.COLWIDTH_OPTIMIZE:将ALV字段宽度设置为最优化,按实际输出内容宽度自动匹配。
  3.NO_VLINE:输出ALV表格不显示垂直格式。
  4.NO_ULINE_HS:输出ALV表格不显示水平格线。
  5.INFO_FIELDNAME:设置颜色属性。
  6.KEY_HOTSPOT:设置关键字段热点。
  7.NO_COLNAME:是否显示字段名。
  8.ZEBRA:使ALV表格按斑马线间隔条纹方式显示,以便显示效果更有美观。
  9.BOX_FIELDNAME:设置ALV表格是否显示选择按钮字段。
  10.INFO_FIELDNAME:用于设置ALV输出报表每一行的颜色,其参数为输出内表的字段名称,要注意的是使用该属性需要同时在内表中定义一个与该参数所定义字段名相同的字段,例如:
  LAYOUT-INFO_FIELDNAME = 'COLOR'.  
  倘若其数据输出内表名为LT_OUT,则需要在该内表增加一字段“COLOR”,并为其内表每行复制,颜色参数范围C000~C999,例如:
  LT_OUT-COLOR = 'C012'.

  4)FIELDCAT主要属性介绍
  1.KEY:将定义字段设置为KEY值。
  2.ICON:将定义字段以ICON的形式显示。
  3.CHECKBOX:将定义字段以CHECKBOX的形式显示。
  4.JUST:定义字段对齐方式(R)RIGHT、(L)LEFT、(C)CENTER。
  5.IZERO:将定义字段以前导"0"的形式显示。
  6.NO_SIGN:将定义字段符号设置为不显示。
  7.NO_ZERO:定义字段是否显示。
  8.EMPHASIZE:设置字段的颜色。
  9.DO_SUM:对字段进行汇总。
  10.SELTEXT_L/M/S:设置字段名称描述长/中/短。
  11.DDICTXT:设置字段显示字符串。
  12.HOTSPOT:设置字段是否有热点(热点字段显示有下划线)。
  13.NO_OUT:隐藏不需要的字段(NO_OUT = 'X')。

 

*&---------------------------------------------------------------------*
*& Report  Z_ZONG
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  Z_ZONG
       NO STANDARD PAGE HEADING
       LINE-SIZE  200          "输出列表的宽
       LINE-COUNT  65       "输出列表的页长"
       MESSAGE-ID ZFMC01.
TABLES T001W.
TABLES T001.
TABLES T001K.
TABLES T024D.
TABLES MCH1.
TABLES MBEW.

TYPE-POOLS : SLIS.

*----------------------------------------------------------------------*
*  定数定義
*----------------------------------------------------------------------*
CONSTANTS:
  C_UNIT         TYPE C           VALUE 'M',
  C_SPTAG        TYPE ZS703-SPTAG VALUE '00000000',
  C_VRSIO        TYPE ZS703-VRSIO VALUE '000'.
CONSTANTS: C_M TYPE C VALUE 'M'.

*----------------------------------------------------------------------*
*  TYPES定義
*----------------------------------------------------------------------*
* 長期滞留品データ内部テーブル用
TYPES: BEGIN OF T_WA_DATA,
        WERKS      TYPE MARC-WERKS,        "プラント
        DISPO      TYPE MARC-DISPO,        "MRP管理者
        MATNR      TYPE MARA-MATNR,        "品目コード
        CHARG      TYPE MCHB-CHARG,        "ロット番号
        LETZTZUG   TYPE ZS703-LETZTZUG,    "最終入庫日/最終出庫日
        MTART      TYPE MARA-MTART,        "品目タイプ
        BISMT      TYPE MARA-BISMT,        "旧品目コード
        MFRPN      TYPE MARA-MFRPN,        "製造者製品コード
        MAKTX      TYPE MAKT-MAKTX,        "品目テキスト
        LGORT      TYPE MCHB-LGORT,        "保管場所
        CLABS      TYPE MCHB-CLABS,        "利用可能在庫
        CINSM      TYPE MCHB-CINSM,        "品質検査中在庫
        CSPEM      TYPE MCHB-CSPEM,        "保留在庫
       END OF T_WA_DATA.

TYPES: T_I_DATA TYPE STANDARD TABLE OF T_WA_DATA.

*----------------------------------------------------------------------*
*  ALV TABLE 定義
*----------------------------------------------------------------------*
TYPES: BEGIN OF T_ALV,
       CHARG1 TYPE MCHB-CHARG,
       V_CHANGE1(6) TYPE C,
       V_CHANGE1_DATA_LETZTZUG(6)  TYPE C,
       V_MONTH1 LIKE VTBBEWE-ATAGE,
       CLABS1 TYPE MCHB-CLABS,
       CSPEM1 TYPE MCHB-CSPEM,
       CINSM1 TYPE MCHB-CINSM,
       D_NSUM1 TYPE MARD-LABST,
       D_PSUM1 TYPE STPRS,
       W_MAKTX1 TYPE MAKT-MAKTX,        "品目テキスト
       W_MFRPN1 TYPE MARA-MFRPN,        "製造者製品コード
       W_MATNR1 TYPE MARA-MATNR,        "品目コード
       W_BISMT1 TYPE MARA-BISMT,        "旧品目コード
       LGORT1 TYPE T001L-LGORT,    "保管場所
       LGOBE1 TYPE T001L-LGOBE,  "保管場所テキスト
       V_T1 TYPE P,
       V_T11 TYPE P,
       END OF T_ALV.
  TYPES:T_WALV TYPE STANDARD TABLE OF T_ALV.
  DATA:D_ALV TYPE T_WALV.
  DATA:WA_ALV TYPE T_ALV.

 


*----------------------------------------------------------------------*
*在庫数量内部テーブル用
TYPES: BEGIN OF TYP_WA_STOCK,
        MATNR TYPE MATNR,
        WERKS TYPE WERKS_D,
        LGORT TYPE MCHB-LGORT,           "保管場所
        CHARG TYPE CHARG_D,
        CLABS TYPE MCHB-CLABS,           "利用可能在庫
        CINSM TYPE MCHB-CINSM,           "品質検査中在庫
        CSPEM TYPE MCHB-CSPEM,           "保留在庫
       END OF TYP_WA_STOCK,
       TYP_IT_STOCK TYPE STANDARD TABLE OF TYP_WA_STOCK.

*保管場所内部テーブル用
TYPES: BEGIN OF TYP_STOCK0,
        MATNR TYPE MATNR,                "品目コード
        WERKS TYPE WERKS_D,              "プラント
        LGORT TYPE MCHB-LGORT,           "保管場所
        CLABS TYPE MCHB-CLABS,           "利用可能在庫
        CINSM TYPE MCHB-CINSM,           "品質検査中在庫
        CSPEM TYPE MCHB-CSPEM,           "保留在庫
       END OF TYP_STOCK0.
TYPES:TG_TYP_STOCK0 TYPE STANDARD TABLE OF TYP_STOCK0.
DATA: STOCK0 TYPE TG_TYP_STOCK0.
DATA: WA_STOCK0 TYPE TYP_STOCK0.

*プラントデータ内部テーブル用
TYPES : BEGIN OF TYP_STOCK,
        WERKS TYPE T001W-WERKS,
        BWKEY TYPE T001K-BWKEY,
        BUKRS TYPE T001K-BUKRS,
        BUKRS1 TYPE T001-BUKRS,
        NAME1 TYPE T001W-NAME1,
        WAERS TYPE T001-WAERS,
  END OF TYP_STOCK,
       T_STOCK TYPE STANDARD TABLE OF TYP_STOCK.

*保管場所名称内部テーブル用
TYPES: BEGIN OF TYP_SAVE,
           WERKS TYPE T001L-WERKS,
           LGORT TYPE T001L-LGORT,    "保管場所
           LGOBE TYPE T001L-LGOBE,  "保管場所テキスト
           END OF TYP_SAVE,
           T_SAVE TYPE STANDARD TABLE OF TYP_SAVE.

*MRP管理者名内部テーブル用
TYPES: BEGIN OF TYP_MAR,
          WERKS TYPE T024D-WERKS,
          DISPO TYPE T024D-DISPO,   "MRP管理者
          DSNAM TYPE T024D-DSNAM,   "MRP管理者名
          END OF TYP_MAR,
          T_MAR TYPE STANDARD TABLE OF TYP_MAR.


*品目コード/ロットの有効期限を取得する。
TYPES : BEGIN OF TYP_MCH1,
        VFDAT TYPE MCH1-VFDAT,
        END OF TYP_MCH1,
        T_MCH1 TYPE STANDARD TABLE OF TYP_MCH1.


*標準原価取得
TYPES : BEGIN OF TY_MBEW,
        STPRS TYPE MBEW-STPRS , "標準原価"
        PEINH TYPE MBEW-PEINH , "価格単位"
        END OF TY_MBEW,
        T_MBEW TYPE STANDARD TABLE OF TY_MBEW.

 


* SELECT-OPTIONS用
TYPES: BEGIN OF T_WA_SEL,
        WERKS TYPE T001W-WERKS,            "プラント
        LGORT TYPE MARD-LGORT,             "保管場所
        MATNR TYPE MARD-MATNR,             "品目コード
        CHARG TYPE MCHB-CHARG,             "ロット番号
        MTART TYPE MARA-MTART,             "品目タイプ
        MATKL TYPE MARA-MATKL,             "品目グループ
        DISPO TYPE MARC-DISPO,             "MRP管理者
       END OF T_WA_SEL.


*----------------------------------------------------------------------*
*  内部テーブル定義
*----------------------------------------------------------------------*
DATA:
  I_DATA TYPE T_I_DATA.

 

*  ZIDUAN定義
*----------------------------------------------------------------------*
DATA L_JIANTIME TYPE P.
DATA L_STIME TYPE SY-DATLO.

*----------------------------------------------------------------------*
*  变量定義
*----------------------------------------------------------------------*
DATA V_CHANGE(6) TYPE C.
DATA V_CHANGE_DATA_LETZTZUG(6)  TYPE C.
DATA D_NSUM TYPE MARD-LABST.      "合計数量"
DATA D_PSUM TYPE STPRS.                "合計money"

DATA : V_T TYPE P.                            "中间变量"
DATA : V_T1 TYPE P.
DATA : VG_IN(4) TYPE C.

DATA V_MONTH LIKE VTBBEWE-ATAGE.  "滞留期間"

 

DATA:
  LS_LAYOUT   TYPE SLIS_LAYOUT_ALV,
  LT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
  LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
*----------------------------------------------------------------------*
*"中间变量 for 品目コード  出力"
*----------------------------------------------------------------------*
DATA :  W_MAKTX TYPE MAKTX,
           W_MFRPN TYPE MFRPN,
           W_MATNR TYPE MATNR,
           W_BISMT TYPE BISMT.

*----------------------------------------------------------------------*
*  作業領域定義
*----------------------------------------------------------------------*
DATA:
  WA_SEL  TYPE T_WA_SEL.
*  WA_DATA TYPE T_WA_DATA.

DATA:
   L_I_MCHB     TYPE TYP_IT_STOCK,
   L_I_MARD     TYPE TYP_IT_STOCK,
   L_I_DATA     TYPE T_I_DATA,
   L_WA_MCHB    TYPE TYP_WA_STOCK,
   L_WA_MARD    TYPE TYP_WA_STOCK,
   LFLG_DELETE  TYPE FLAG.


DATA D_MCH1 TYPE T_MCH1.
DATA WA_MCH1 TYPE TYP_MCH1.

DATA: L_STOCK TYPE T_STOCK.
DATA: WA_STOCK TYPE TYP_STOCK.

DATA: L_SAVE TYPE  T_SAVE.
DATA: WA_SAVE TYPE TYP_SAVE.

DATA: L_MRP TYPE T_MAR.
DATA: WA_MRP TYPE TYP_MAR.

DATA : D_MBEW TYPE T_MBEW.
DATA : WA_MBEW TYPE TY_MBEW.
DATA : V_VALUE TYPE P.

*----------------------------------------------------------------------*
*  選択画面定義
*----------------------------------------------------------------------*
SELECTION-SCREEN: COMMENT 01(10) TEXT-007.
SELECTION-SCREEN BEGIN OF BLOCK TEXT-007 WITH FRAME.
SELECT-OPTIONS:
  S_WERKS FOR WA_SEL-WERKS OBLIGATORY,     "プラント
  S_LGORT FOR WA_SEL-LGORT,                "保管場所
  S_MATNR FOR WA_SEL-MATNR,                "品目コード
  S_CHARG FOR WA_SEL-CHARG,                "ロット番号
  S_MTART FOR WA_SEL-MTART,                "品目タイプ
  S_MATKL FOR WA_SEL-MATKL,                "品目グループ
  S_DISPO FOR WA_SEL-DISPO.                "MRP管理者

*----------------------------------------------------
* 滞留期間
*----------------------------------------------------
SELECTION-SCREEN: BEGIN  OF  LINE.
SELECTION-SCREEN: COMMENT 01(10) TEXT-002,POSITION 35.
PARAMETERS: P_KIKAN(3) TYPE N OBLIGATORY.
SELECTION-SCREEN: COMMENT 40(10) TEXT-001.
SELECTION-SCREEN: END OF LINE.
*----------------------------------------------------
* 基準日付
*----------------------------------------------------
SELECTION-SCREEN: BEGIN  OF  LINE.
SELECTION-SCREEN: COMMENT 01(10) TEXT-003, POSITION 35.
PARAMETERS: RB_NYUKO RADIOBUTTON GROUP RADI DEFAULT 'X'.
SELECTION-SCREEN: COMMENT 38(12) TEXT-004, POSITION 55.
PARAMETERS: RB_SYKKO RADIOBUTTON GROUP RADI.
SELECTION-SCREEN: COMMENT 58(12) TEXT-005.
SELECTION-SCREEN: END OF LINE.

SELECTION-SCREEN END OF BLOCK TEXT-007.

 


*&---------------------------------------------------------------------*
*&  START-OF-SELECTION
*&---------------------------------------------------------------------*

START-OF-SELECTION.


*&---------------------------------------------------------------------*
PERFORM ALV.
PERFORM ALV_HEAD.

*&---------------------------------------------------------------------*
*&      Form  F_GET_OVERDATE
*&---------------------------------------------------------------------*
*       滞留基準月最終日算出
*----------------------------------------------------------------------*
*      <--L_STIME  滞留基準期間
*----------------------------------------------------------------------
  IF RB_NYUKO <> SPACE.
    VG_IN = '入库)'.
  ELSE.
    VG_IN = '出库)'.
  ENDIF.


  L_JIANTIME = - P_KIKAN.
  CALL FUNCTION 'HR_99S_DATE_PLUS_TIME_UNIT'
    EXPORTING
      I_IDATE               = SY-DATLO
      I_TIME                = L_JIANTIME
      I_TIMEUNIT            = C_M
    IMPORTING
      O_IDATE               = L_STIME
    EXCEPTIONS
      INVALID_PERIOD        = 1
      INVALID_ROUND_UP_RULE = 2
      INTERNAL_ERROR        = 3
      OTHERS                = 4.
  IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

*----------------------------------------------------------------------*

  CALL FUNCTION 'DATE_GET_MONTH_LASTDAY'
    EXPORTING
      I_DATE = L_STIME
    IMPORTING
      E_DATE = L_STIME.


*&---------------------------------------------------------------------*
*&  長期滞留品最終入庫日付データ取得
*&---------------------------------------------------------------------*

* 基準年月が入庫日の場合
  IF RB_NYUKO <> SPACE .
    SELECT   A~WERKS                        "プラント
             B~DISPO                        "MRP管理者
             A~MATNR                        "品目コード
             A~CHARG                        "ロット番号
             A~LETZTZUG                     "最終入庫日
             C~MTART                        "品目タイプ
             C~BISMT                        "旧品目コード
             C~MFRPN                        "製造者製品コード
             D~MAKTX
       FROM ZS703 AS A
       INNER JOIN MARC AS B
       ON A~MATNR = B~MATNR AND
          A~WERKS = B~WERKS
       INNER JOIN MARA AS C
           ON A~MATNR = C~MATNR
        INNER JOIN MAKT AS D
           ON A~MATNR = D~MATNR
            INTO TABLE I_DATA
        WHERE A~MATNR IN S_MATNR
          AND A~WERKS IN S_WERKS
          AND A~CHARG IN S_CHARG
          AND A~VRSIO  = C_VRSIO
          AND A~SPMON  = SPACE
          AND A~SPTAG  = C_SPTAG
          AND A~SPWOC  = SPACE
          AND A~SPBUP  = SPACE
          AND A~SSOUR  = SPACE
          AND B~DISPO IN S_DISPO
          AND C~MTART IN S_MTART
          AND C~MATKL IN S_MATKL
          AND D~SPRAS  = SY-LANGU.
  ELSE.
    SELECT A~WERKS                        "プラント
           B~DISPO                        "MRP管理者
           A~MATNR                        "品目コード
           A~CHARG                        "ロット番号
           A~LETZTZUG                     "最終入庫日
           C~MTART                        "品目タイプ
           C~BISMT                        "旧品目コード
           C~MFRPN                        "製造者製品コード
           D~MAKTX
      FROM ZS703 AS A
     INNER JOIN MARC AS B
     ON A~MATNR = B~MATNR AND
        A~WERKS = B~WERKS
     INNER JOIN MARA AS C
         ON A~MATNR = C~MATNR
      INNER JOIN MAKT AS D
         ON A~MATNR = D~MATNR
       INTO TABLE I_DATA
      WHERE A~MATNR IN S_MATNR
        AND A~WERKS IN S_WERKS
        AND A~CHARG IN S_CHARG
        AND A~VRSIO  = C_VRSIO
        AND A~SPMON  = SPACE
        AND A~SPTAG  = C_SPTAG
        AND A~SPWOC  = SPACE
        AND A~SPBUP  = SPACE
        AND A~SSOUR  = SPACE
        AND B~DISPO IN S_DISPO
        AND C~MTART IN S_MTART
        AND C~MATKL IN S_MATKL
        AND D~SPRAS  = SY-LANGU.
  ENDIF.
*----------------------------------------------------
* 入出庫日が滞留基準月最終日を越えているか、初期値のレコードを削除
*----------------------------------------------------
  DELETE I_DATA WHERE LETZTZUG > L_STIME OR LETZTZUG IS INITIAL.

  IF I_DATA IS INITIAL.
    MESSAGE S464.
    STOP.
  ENDIF.

*&---------------------------------------------------------------------*
*       在庫数量の取得
*----------------------------------------------------------------------*

  FIELD-SYMBOLS:<FS_DATA> TYPE T_WA_DATA.
  SELECT MATNR
         WERKS
         LGORT                         "保管場所
         CHARG
         CLABS                         "利用可能在庫
         CINSM                         "品質検査中在庫
         CSPEM
        INTO TABLE L_I_MCHB                    "保留在庫
    FROM MCHB
      FOR ALL ENTRIES IN  I_DATA
    WHERE MCHB~MATNR  =  I_DATA-MATNR
      AND MCHB~WERKS  =  I_DATA-WERKS
      AND MCHB~LGORT IN S_LGORT
      AND MCHB~CHARG  =  I_DATA-CHARG.

*  SELECT MATNR                     *OLD
*     WERKS
*     LGORT                         "保管場所
*     LABST AS CLABS                "利用可能在庫
*     INSME AS CINSM                "品質検査中在庫
*     SPEME AS CSPEM                "保留在庫
*     INTO CORRESPONDING FIELDS OF  TABLE L_I_MARD
*FROM MARD
*FOR ALL ENTRIES IN  I_DATA
*   WHERE MARD~MATNR  =  I_DATA-MATNR
*     AND MARD~WERKS  =  I_DATA-WERKS
*     AND MARD~LGORT IN S_LGORT.

  SELECT MATNR
      WERKS
      LGORT                         "保管場所
      LABST AS CLABS                "利用可能在庫
      INSME AS CINSM                "品質検査中在庫
      SPEME AS CSPEM                "保留在庫
      INTO TABLE STOCK0
 FROM MARD
 FOR ALL ENTRIES IN  I_DATA
    WHERE MARD~MATNR  =  I_DATA-MATNR
      AND MARD~WERKS  =  I_DATA-WERKS
      AND MARD~LGORT IN S_LGORT.

  LOOP AT I_DATA ASSIGNING <FS_DATA>.
*  ロットがブランクでない場合
    IF <FS_DATA>-CHARG IS NOT INITIAL.
      LOOP AT L_I_MCHB INTO L_WA_MCHB
     WHERE MATNR  = <FS_DATA>-MATNR
       AND WERKS  = <FS_DATA>-WERKS
       AND CHARG  = <FS_DATA>-CHARG.
        <FS_DATA>-LGORT = L_WA_MCHB-LGORT.
        <FS_DATA>-CLABS = L_WA_MCHB-CLABS.
        <FS_DATA>-CINSM = L_WA_MCHB-CINSM.
        <FS_DATA>-CSPEM = L_WA_MCHB-CSPEM.

        APPEND <FS_DATA> TO L_I_DATA .
        CLEAR  L_WA_MCHB.
        LFLG_DELETE = 'X'.
      ENDLOOP.
*ロット番号がブランクの場合 WA_STOCK0
    ELSE.
*      LOOP AT L_I_MARD INTO L_WA_MARD      *OLD
*        WHERE MATNR  = <FS_DATA>-MATNR
*          AND WERKS  = <FS_DATA>-WERKS.
*        <FS_DATA>-LGORT = L_WA_MARD-LGORT.
*        <FS_DATA>-CLABS = L_WA_MARD-CLABS.
*        <FS_DATA>-CINSM = L_WA_MARD-CINSM.
*        <FS_DATA>-CSPEM = L_WA_MARD-CSPEM.
*        APPEND <FS_DATA> TO L_I_DATA.
*        CLEAR L_WA_MARD.
      LOOP AT STOCK0 INTO WA_STOCK0
     WHERE MATNR  = <FS_DATA>-MATNR
       AND WERKS  = <FS_DATA>-WERKS.
        <FS_DATA>-LGORT = WA_STOCK0-LGORT.
        <FS_DATA>-CLABS = WA_STOCK0-CLABS.
        <FS_DATA>-CINSM = WA_STOCK0-CINSM.
        <FS_DATA>-CSPEM = WA_STOCK0-CSPEM.
        APPEND <FS_DATA> TO L_I_DATA.
        CLEAR WA_STOCK0.
        LFLG_DELETE = 'X'.
      ENDLOOP.
    ENDIF.

    IF LFLG_DELETE = 'X'.
      DELETE I_DATA.
      CLEAR LFLG_DELETE.
    ENDIF.
  ENDLOOP.

  APPEND LINES OF L_I_DATA TO I_DATA.

*----------------------------------------------------
*--プラントデータ取得
*--プラント/支店マスタより、プラントデータを取得する。
*----------------------------------------------------

*----------------------------------------------------
*プラントデータを取得する。
*----------------------------------------------------
  SELECT A~WERKS
         A~NAME1
         C~WAERS
         INTO TABLE L_STOCK
         FROM T001W AS A INNER JOIN T001K AS B
         ON A~WERKS = B~BWKEY
         INNER JOIN T001 AS C
         ON B~BUKRS = C~BUKRS
         WHERE A~WERKS IN S_WERKS.

  SORT L_STOCK BY WERKS ASCENDING.


*----------------------------------------------------
*保管場所名称取得
*----------------------------------------------------
  SELECT    WERKS
            LGORT
            LGOBE
INTO TABLE L_SAVE
FROM T001L
WHERE WERKS IN S_WERKS
AND LGORT IN S_LGORT.


*----------------------------------------------------
* 保管場所名称内部テーブルを以下の項目で昇順ソートする
*----------------------------------------------------
  SORT L_SAVE BY WERKS
                 LGORT
                 ASCENDING.

*----------------------------------------------------
* MRP管理者名取得
*----------------------------------------------------
  SELECT WERKS
         DISPO
         DSNAM
INTO TABLE L_MRP
FROM T024D
WHERE WERKS IN S_WERKS
AND DISPO IN S_DISPO.

 

*----------------------------------------------------
* MRP管理者名内部テーブルを以下の項目で昇順ソートする
*----------------------------------------------------
  SORT L_MRP BY WERKS DISPO ASCENDING.


*----------------------------------------------------
*--出力処理
*-- 長期滞留品データ内部テーブルを以下の項目で昇順ソートする。
*----------------------------------------------------
  SORT I_DATA BY WERKS ASCENDING
                 DISPO ASCENDING
                 MAKTX ASCENDING
                 LGORT ASCENDING
                 CHARG ASCENDING.

 

*----------------------------------------------------
*画面出力処理
*----------------------------------------------------
  DATA WA_DATA4 TYPE T_WA_DATA.
  LOOP AT I_DATA INTO WA_DATA4.

    AT END OF WERKS.
      NEW-PAGE.
    ENDAT.
    AT END OF DISPO.
      NEW-PAGE.
    ENDAT.
    IF SY-TABIX > 65.
      NEW-PAGE.
    ENDIF.
  ENDLOOP.


*----------------------------------------------------
*プラント名称内部テーブルを検索し、プラント名称を取得する。
*----------------------------------------------------
  DATA: WA_DATA TYPE T_WA_DATA.
* FIELD-SYMBOLS:<FS_DATB> TYPE T_WA_DATA.

 

*----------------------------------------------------
*--プラント名称を取得する
*----------------------------------------------------
  LOOP AT I_DATA INTO WA_DATA.

*    WRITE : /8(10) WA_DATA-CHARG.

     WA_ALV-CHARG1 = WA_DATA-CHARG.

    READ TABLE L_STOCK INTO WA_STOCK WITH KEY
                     WERKS = WA_DATA-WERKS
                             BINARY SEARCH.

 


*----------------------------------------------------
*MRP管理者名取得
*----------------------------------------------------
    READ TABLE L_MRP INTO WA_MRP  WITH KEY
                     WERKS =  WA_DATA-WERKS
                     DISPO =  WA_DATA-DISPO
                     BINARY SEARCH..

 

*----------------------------------------------------
*有効期限取得
*明細
*----------------------------------------------------
    SELECT SINGLE VFDAT
           FROM MCH1
           INTO WA_MCH1
*           FOR ALL ENTRIES IN I_DATA
           WHERE MCH1~MATNR = WA_DATA-MATNR
             AND MCH1~CHARG = WA_DATA-CHARG.

    V_CHANGE = WA_MCH1-VFDAT+2(6).
*    WRITE : 20(10) V_CHANGE USING EDIT MASK '__/__/__' .
*    ENDSELECT.


      WA_ALV-V_CHANGE1 = V_CHANGE.

*----------------------------------------------------
*入庫/出庫日編集
*----------------------------------------------------
    IF RB_NYUKO <> SPACE.
*      V_CHANGE_DATA_LETZTZUG = WA_DATA-LETZTZUG+2(6).
*      WRITE:38(8) V_CHANGE_DATA_LETZTZUG USING EDIT MASK '__/__/__'.
*    ELSE.
*      WRITE:38(8) V_CHANGE_DATA_LETZTZUG USING EDIT MASK '__/__/__'.
*    ENDIF.

    WA_ALV-V_CHANGE1_DATA_LETZTZUG =  WA_DATA-LETZTZUG+2(6).
    ENDIF.

*----------------------------------------------------
*滞留期間取得
*----------------------------------------------------

    CALL FUNCTION 'FIMA_DAYS_AND_MONTHS_AND_YEARS'
      EXPORTING
        I_DATE_FROM          = WA_DATA-LETZTZUG
*    I_KEY_DAY_FROM       =
        I_DATE_TO            = SY-DATUM
*    I_KEY_DAY_TO         =
*    I_FLG_SEPARATE       = ' '
     IMPORTING
        E_DAYS               = V_MONTH
*    E_MONTHS             =
*    E_YEARS              =
.


*----------------------------------------------------
**滞留期間
*----------------------------------------------------
*    WRITE : 58(10) V_MONTH.

   WA_ALV-V_MONTH1 = V_MONTH.

*----------------------------------------------------
*利用可能在庫/保留在庫/品質検査中在庫取得
*----------------------------------------------------
*    WRITE: /78(10) WA_DATA-CLABS,
*            98(10) WA_DATA-CSPEM ,
*            114(8) WA_DATA-CINSM.

    WA_ALV-CLABS1 = WA_DATA-CLABS.
    WA_ALV-CSPEM1 = WA_DATA-CSPEM.
    WA_ALV-CINSM1 = WA_DATA-CINSM.

*----------------------------------------------------
*標準原価取得
*----------------------------------------------------
    SELECT STPRS PEINH INTO WA_MBEW
                   FROM MBEW FOR ALL ENTRIES IN I_DATA
                   WHERE MATNR = I_DATA-MATNR AND
                         BWKEY = I_DATA-WERKS AND
                         BWTAR = SPACE.
      V_VALUE = WA_MBEW-STPRS / WA_MBEW-PEINH.
*      WRITE V_VALUE NO-GROUPING CURRENCY WA_STOCK-WAERS.
    ENDSELECT.

 

*----------------------------------------------------
*合計数量取得
*----------------------------------------------------
    D_NSUM = WA_DATA-CLABS + WA_DATA-CINSM + WA_DATA-CSPEM.
*    WRITE: 128(8) D_NSUM.

    WA_ALV-D_NSUM1 = D_NSUM.


*----------------------------------------------------
*合計金額取得
*----------------------------------------------------
    D_PSUM = D_PSUM * WA_MBEW-STPRS.

*    WRITE: 136(8) D_PSUM.
    WA_ALV-D_PSUM1 = D_PSUM.

    W_MAKTX = WA_DATA-MAKTX.
    W_MFRPN = WA_DATA-MFRPN.
    W_MATNR = WA_DATA-MATNR.
    W_BISMT = WA_DATA-BISMT.


*----------------------------------------------------
*品目コード  出力
*----------------------------------------------------

    AT NEW MATNR.
*      WRITE:/1(15) W_MAKTX,45(20) W_MFRPN,85(10)  W_MATNR,105(15) W_BISMT.
      WA_ALV-W_MAKTX1 = W_MAKTX.
      WA_ALV-W_MFRPN1 = W_MFRPN.
      WA_ALV-W_BISMT1 = W_BISMT.
    ENDAT.

 

*----------------------------------------------------
*保管場所名称取得
*----------------------------------------------------
    READ TABLE  L_SAVE INTO WA_SAVE WITH KEY WERKS = WA_DATA-WERKS LGORT = WA_DATA-LGORT
                        BINARY SEARCH.
*    WRITE:148(10) WA_SAVE-LGORT,168(10) WA_SAVE-LGOBE.
*    WRITE 128(8) V_VALUE.

       WA_ALV-LGORT1 = WA_SAVE-LGORT.
       WA_ALV-LGOBE1 = WA_SAVE-LGOBE.


*----------------------------------------------------
*品目コード毎合計数量、合計金額
*----------------------------------------------------
    V_T = D_NSUM + V_T. "合計数量
    V_T1 = D_PSUM + V_T1. "合計金額取得

    AT END OF MATNR.

*      WRITE:/140(8)'合計:', 148(10) V_T,158(10) V_T1.

       WA_ALV-V_T1 = V_T.
       WA_ALV-V_T11 = V_T1.

      CLEAR: V_T.

    ENDAT.

APPEND WA_ALV TO D_ALV.

CLEAR WA_ALV.
  ENDLOOP.


CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
 EXPORTING
 IS_LAYOUT     = LS_LAYOUT
 IT_FIELDCAT   = LT_FIELDCAT
  TABLES
    T_OUTTAB  = D_ALV
 EXCEPTIONS
   PROGRAM_ERROR                     = 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.

 

*----------------------------------------------------
*--TOP-OF-PAGE.
*----------------------------------------------------
TOP-OF-PAGE.
  WRITE :/36(36) TEXT-111 ,66(28) TEXT-112,95(10) VG_IN,126(36) TEXT-113.

  WRITE :/1(26) TEXT-114 ,12(30) SY-REPID, 126(30) TEXT-115,137(20) SY-PAGNO.

  WRITE :/1(26) TEXT-116 ,12(30) SY-UNAME, 126(30) TEXT-117,137(20) SY-DATUM,SY-UZEIT.

  WRITE :/1(26) TEXT-118 ,12(30) WA_DATA-DISPO,WA_MRP-DSNAM.

  WRITE :/112(26) TEXT-119 ,122(30) WA_STOCK-WERKS.

  WRITE :/1(26)  TEXT-120,
          40(30) TEXT-121,
          70(30) TEXT-122,
          100(30) TEXT-123.

  WRITE : /8(12) TEXT-124,
          20(10) TEXT-125,
          38(8)  TEXT-126,
          46(6) VG_IN,
          58(10) TEXT-127,
          78(10) TEXT-128,
          98(10) TEXT-129,
          114(8) TEXT-130,
          128(8) TEXT-131,
          136(8) TEXT-132,
          148(10) TEXT-133,
          158(18) TEXT-134,
          178(10) TEXT-135.
*ロット番号 有効期限 X庫日 滞留期間  利用可能  保留在庫    品検中    数量計      金額計 保管場所 保管場所テキスト        処理対策
*&---------------------------------------------------------------------*
*&      Form  ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM ALV .
LS_FIELDCAT-COL_POS     = 1 .
LS_FIELDCAT-FIELDNAME   = 'CHARG1'.
*LS_FIELDCAT-SELTEXT_L   = 'Material Number'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.

LS_FIELDCAT-COL_POS     = 2 .
LS_FIELDCAT-FIELDNAME   = 'V_CHANGE1'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.

LS_FIELDCAT-COL_POS     = 3.
LS_FIELDCAT-FIELDNAME   = 'V_CHANGE1_DATA_LETZTZUG'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.

LS_FIELDCAT-COL_POS     = 4.
LS_FIELDCAT-FIELDNAME   = 'V_MONTH1'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.

LS_FIELDCAT-COL_POS     = 5.
LS_FIELDCAT-FIELDNAME   = 'CLABS1'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.

LS_FIELDCAT-COL_POS     = 6.
LS_FIELDCAT-FIELDNAME   = 'CSPEM1'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.

LS_FIELDCAT-COL_POS     = 7.
LS_FIELDCAT-FIELDNAME   = 'CINSM1'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.

LS_FIELDCAT-COL_POS     = 8.
LS_FIELDCAT-FIELDNAME   = 'D_NSUM1'.

LS_FIELDCAT-COL_POS     = 9.
LS_FIELDCAT-FIELDNAME   = 'D_PSUM1'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.

LS_FIELDCAT-COL_POS     = 10.
LS_FIELDCAT-FIELDNAME   = 'W_MAKTX1'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.

LS_FIELDCAT-COL_POS     = 11.
LS_FIELDCAT-FIELDNAME   = 'W_MFRPN1'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.

LS_FIELDCAT-COL_POS     = 12.
LS_FIELDCAT-FIELDNAME   = 'W_MATNR1'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.

LS_FIELDCAT-COL_POS     = 13.
LS_FIELDCAT-FIELDNAME   = 'W_BISMT1'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.

LS_FIELDCAT-COL_POS     = 14.
LS_FIELDCAT-FIELDNAME   = 'LGORT1'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.

LS_FIELDCAT-COL_POS     = 15.
LS_FIELDCAT-FIELDNAME   = 'LGOBE1'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.

LS_FIELDCAT-COL_POS     = 16.
LS_FIELDCAT-FIELDNAME   = 'V_T1'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.

LS_FIELDCAT-COL_POS     = 17.
LS_FIELDCAT-FIELDNAME   = 'V_T11'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.

LS_LAYOUT-no_colhead = 'X'.

ENDFORM.                    " ALV
*&---------------------------------------------------------------------*
*&      Form  ALV_HEAD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM ALV_HEAD .

ENDFORM.                    " ALV_HEAD

posted @ 2017-08-16 21:54  HARU_ちゃん  阅读(1057)  评论(0编辑  收藏  举报