fm报表框架

REPORT ZMMR025.

INCLUDE ZMMR025_F01.

START-OF-SELECTION.

  PERFORM GET_ALV_DATA."数据处理

  PERFORM FIELD_OUTPUT."调用屏幕显示字段方法
***********************************************************************
*结束时间
  PERFORM RUN_LOG.
***********************************************************************
END-OF-SELECTION.
  PERFORM DATA_OUTPUT."调用屏幕输出设置方法
*&---------------------------------------------------------------------*
*& 包含               ZMMR025_T01
*&---------------------------------------------------------------------*
TABLES:EBAN.

TYPES:BEGIN OF TY_SEL,
        SEL(1),              "复选框
        LIGHT  TYPE C LENGTH 10, "红路灯接收
        MSG    TYPE STRING,
        STYL   TYPE LVC_T_STYL,
      END OF TY_SEL.

TYPES:BEGIN OF TY_TAB.
        INCLUDE  TYPE TY_SEL.
        TYPES:BANFN    TYPE EBAN-BANFN,
        EBAKZ    TYPE EBAN-EBAKZ,
        MATNR    TYPE EBAN-MATNR,
        TXZ01    TYPE EBAN-TXZ01,
        WERKS    TYPE EBAN-WERKS,
        BADAT    TYPE EBAN-BADAT,
        AFNAM    TYPE EBAN-AFNAM,
        BNFPO    TYPE EBAN-BNFPO,
        MENGE_PR TYPE EBAN-MENGE,
        BSMNG    TYPE EBAN-BSMNG,
        MEINS    TYPE EBAN-MEINS,
        EBELN    TYPE EKET-EBELN,
        EBELP    TYPE EKET-EBELP,
        MENGE    TYPE EKET-MENGE,
        LOEKZ    TYPE EKPO-LOEKZ,
        EBELN_PO TYPE EKET-EBELN,
        EBELP_PO TYPE EKET-EBELP,
        MENGE_PO TYPE EKET-MENGE,
        NAME1    TYPE T001W-NAME1,
        AEDAT    TYPE EKKO-AEDAT,
        LIFNR    TYPE EKKO-LIFNR,
        EKGRP    TYPE EKKO-EKGRP,
        NAME2    TYPE LFA1-NAME1,
        EKNAM    TYPE T024-EKNAM,
        ZWQSL    TYPE EBAN-MENGE,
      END OF TY_TAB.
DATA:GT_TAB  TYPE TABLE OF TY_TAB,
     OUT_TAB TYPE TABLE OF TY_TAB,
     GW_TAB  TYPE TY_TAB.

FIELD-SYMBOLS <FS_TAB> TYPE TY_TAB.

" 引入宏方式添加屏幕显示字段
DEFINE   ADD_FIELD.
  WA_FIELD-FIELDNAME      = &1.
  WA_FIELD-COLTEXT        = &2.
  WA_FIELD-EDIT           = &3. "设置可编辑
  WA_FIELD-CHECKBOX       = &4. "设置是否选择框
  APPEND WA_FIELD TO IT_FIELD.
END-OF-DEFINITION.
" 声明屏幕显示字段需要的变量
DATA: IT_FIELD TYPE LVC_T_FCAT,
      WA_FIELD TYPE LVC_S_FCAT,
      STYLELIN TYPE LVC_S_STYL.
*-----------------------
*选择屏幕
*-----------------------
SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:S_WERKS FOR EBAN-WERKS,
               S_MATNR FOR EBAN-MATNR,
               S_BANFN FOR EBAN-BANFN,
               S_AFNAM FOR EBAN-AFNAM NO INTERVALS,
               S_BADAT FOR EBAN-BADAT.
SELECTION-SCREEN: END OF BLOCK B1.

PARAMETERS P_RFQ AS CHECKBOX. "修改询价单
*自定义帮助选择事件
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_AFNAM-LOW.
  PERFORM FRM_F4_S_SQZ USING 'S_AFNAM-LOW'.

*&---------------------------------------------------------------------*
*& Form FRM_F4_S_SQZ
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> P_
*&---------------------------------------------------------------------*
FORM FRM_F4_S_SQZ  USING P_SENAME.
  DATA:LT_RETURN TYPE STANDARD TABLE OF DDSHRETVAL WITH HEADER LINE.

  DATA:LV_RETFIELD TYPE HELP_INFO-DYNPROFLD.
  LV_RETFIELD = P_SENAME.

  SELECT DISTINCT AFNAM
  FROM EBAN
  ORDER BY AFNAM
  INTO TABLE @DATA(LT_EBAN).
  DELETE LT_EBAN WHERE AFNAM IS INITIAL.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      RETFIELD    = 'ZFL'
      DYNPPROG    = SY-CPROG
      DYNPNR      = SY-DYNNR
      DYNPROFIELD = LV_RETFIELD
      VALUE_ORG   = 'S'
    TABLES
      VALUE_TAB   = LT_EBAN[]
      RETURN_TAB  = LT_RETURN.
ENDFORM.
*&---------------------------------------------------------------------*
*& 包含               ZMMR025_F01
*&---------------------------------------------------------------------*
FORM GET_ALV_DATA .
  SELECT DISTINCT
       EBAN~BANFN,
       EBAN~EBAKZ,
       EBAN~MATNR,
       EBAN~TXZ01,
       EBAN~WERKS,
       EBAN~BADAT,
       EBAN~AFNAM,
       EBAN~BNFPO,
       EBAN~MENGE AS MENGE_PR,
       EBAN~BSMNG,
       EBAN~MEINS,
       EKET~EBELN,
       EKET~EBELP,
       EKET~MENGE,
       ZEKPO~LOEKZ,
       EKPO~EBELN AS EBELN_PO,
       EKPO~EBELP AS EBELP_PO,
       EKPO~MENGE AS MENGE_PO,
       T001W~NAME1,
       EKKO~AEDAT,
       EKKO~LIFNR,
       EKKO~EKGRP,
       LFA1~NAME1 AS NAME2,
       T024~EKNAM,
       EBAN~MENGE - EBAN~BSMNG AS ZWQSL
      FROM EBAN

    LEFT JOIN EKET ON EKET~BANFN EQ EBAN~BANFN
                  AND EKET~BNFPO EQ EBAN~BNFPO
                  AND EKET~ELDAT IS INITIAL

    LEFT JOIN EKPO AS ZEKPO
                   ON ZEKPO~EBELN EQ EKET~EBELN
                  AND ZEKPO~EBELP EQ EKET~EBELP

    LEFT JOIN EKPO ON EKPO~ANFNR EQ EKET~EBELN
                  AND EKPO~ANFPS EQ EKET~EBELP

    LEFT JOIN T001W ON T001W~WERKS EQ EBAN~WERKS
    LEFT JOIN EKKO ON EKKO~EBELN EQ EKPO~EBELN
    LEFT JOIN LFA1 ON LFA1~LIFNR EQ EKKO~LIFNR
    LEFT JOIN T024 ON T024~EKGRP EQ EKKO~EKGRP
    WHERE EBAN~WERKS IN @S_WERKS
      AND EBAN~MATNR IN @S_MATNR
      AND EBAN~BANFN IN @S_BANFN
      AND EBAN~AFNAM IN @S_AFNAM
      AND EBAN~BADAT IN @S_BADAT
      ORDER BY EBAN~BANFN,EBAN~BNFPO,EKET~EBELN,EKET~EBELP",B~EBELN,B~EBELP
    INTO CORRESPONDING FIELDS OF TABLE @GT_TAB.
  IF SY-SUBRC EQ 0.
    DELETE GT_TAB WHERE LOEKZ EQ 'L'.
    LOOP AT GT_TAB ASSIGNING <FS_TAB>.

      CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
        EXPORTING
          INPUT  = <FS_TAB>-MEINS
*         LANGUAGE             = SY-LANGU
        IMPORTING
*         LONG_TEXT            =
          OUTPUT = <FS_TAB>-MEINS
*         SHORT_TEXT           =
*       EXCEPTIONS
*         UNIT_NOT_FOUND       = 1
*         OTHERS = 2
        .
      IF SY-SUBRC <> 0.
* Implement suitable error handling here
      ENDIF.

*没有关闭标识的采购申请不允许勾选
      IF P_RFQ IS NOT INITIAL AND ( <FS_TAB>-EBAKZ IS INITIAL OR <FS_TAB>-MENGE_PO EQ <FS_TAB>-MENGE_PR ).
        CLEAR <FS_TAB>-STYL.
        <FS_TAB>-SEL = ''.
        STYLELIN-FIELDNAME = 'SEL'. " 需要编辑的列名
        STYLELIN-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. " 设置为不可编辑状态
        APPEND STYLELIN TO <FS_TAB>-STYL.
        CLEAR STYLELIN.
      ENDIF.

    ENDLOOP.
  ENDIF.
ENDFORM.

FORM FIELD_OUTPUT.
  CLEAR:WA_FIELD,IT_FIELD.
  IF P_RFQ IS NOT INITIAL.
    ADD_FIELD 'SEL'            '选择框' 'X' 'X'.
    ADD_FIELD 'LIGHT'          '状态'     '' ''.
    ADD_FIELD 'MSG'            '消息'     '' ''.
  ENDIF.
  ADD_FIELD   'BANFN'  '采购申请'     '' ''.
  ADD_FIELD   'BNFPO'  '申请申请行项'     '' ''.
  ADD_FIELD   'EBAKZ'  '关闭状态'     '' ''.
  ADD_FIELD   'BADAT'  '申请日期'     '' ''.
  ADD_FIELD   'AFNAM'  '申请者'     '' ''.
  ADD_FIELD   'WERKS'  '工厂'     '' ''.
  ADD_FIELD   'NAME1'  '工厂名称'     '' ''.
  ADD_FIELD   'MATNR'  '物料编码'     '' ''.
  ADD_FIELD   'TXZ01'  '物料描述'     '' ''.
  ADD_FIELD   'MEINS'  '申请单位'     '' ''.
  ADD_FIELD   'MENGE_PR'  '申请申请数量'     '' ''.
  ADD_FIELD   'BSMNG'  '订货数量'     '' ''.

  ADD_FIELD   'ZWQSL'  '未清数量'     '' ''.
  ADD_FIELD   'EBELN'  '报价邀请'     '' ''.
  ADD_FIELD   'EBELP'  '报价邀请行号'     '' ''.
  ADD_FIELD   'MENGE'  '报价邀请数量'     '' ''.
  ADD_FIELD   'EBELN_PO'  '采购订单'     '' ''.
  ADD_FIELD   'EBELP_PO'  '采购订单行项'     '' ''.
  ADD_FIELD   'MENGE_PO'  '采购订单数量'     '' ''.
  ADD_FIELD   'AEDAT'  '采购订单日期'     '' ''.
  ADD_FIELD   'LIFNR'  '供应商'     '' ''.
  ADD_FIELD   'NAME2'  '供应商名称'     '' ''.
  ADD_FIELD   'EKGRP'  '采购组'     '' ''.
  ADD_FIELD   'EKNAM'  '采购组描述'     '' ''.

ENDFORM.

FORM DATA_OUTPUT.
  "定义ALV输入时宽度自动适应
  DATA: WA_LAYOUT TYPE LVC_S_LAYO. "设置输出格式,自适应等
  WA_LAYOUT-CWIDTH_OPT = 'X'.    "设置宽度自适应

  WA_LAYOUT-CWIDTH_OPT = 'X'.    "设置宽度自适应
  WA_LAYOUT-BOX_FNAME  = 'SEL'.    "设置复选框字段
  WA_LAYOUT-STYLEFNAME = 'STYL'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' " 调用函数
    EXPORTING
      IT_FIELDCAT_LVC          = IT_FIELD
      IS_LAYOUT_LVC            = WA_LAYOUT  " 设置表单格式
      I_CALLBACK_PROGRAM       = SY-REPID
      I_CALLBACK_PF_STATUS_SET = 'PF_STATUS'
      I_CALLBACK_USER_COMMAND  = 'FRM_USER_COMMAND'
      I_SAVE                   = 'U'
    TABLES
      T_OUTTAB                 = GT_TAB
    EXCEPTIONS
      PROGRAM_ERROR            = 1
      OTHERS                   = 2.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form PF_STATUS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
  IF P_RFQ IS NOT INITIAL.
    SET PF-STATUS 'ZSTATUS'.
  ELSE.
    SET PF-STATUS 'STATUS'.
  ENDIF.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_USER_COMMAND
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM"屏幕流
                       RS_SELFIELD TYPE SLIS_SELFIELD.

  DATA: LR_GRID TYPE REF TO CL_GUI_ALV_GRID.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = LR_GRID.
  CALL METHOD LR_GRID->CHECK_CHANGED_DATA .
  CALL METHOD LR_GRID->REFRESH_TABLE_DISPLAY.

  CASE  R_UCOMM.

    WHEN 'ALL'."全选

      LOOP AT GT_TAB ASSIGNING <FS_TAB>.
        IF <FS_TAB>-LIGHT NE '@08@'.
          <FS_TAB>-SEL = 'X'.
        ENDIF.
      ENDLOOP.

    WHEN 'SAL'."取消全选

      LOOP AT GT_TAB ASSIGNING <FS_TAB>.
        <FS_TAB>-SEL = ''.
      ENDLOOP.


    WHEN 'CHANGE'.

      IF NOT LINE_EXISTS( GT_TAB[ SEL = 'X' ] ).
        MESSAGE I001(00) WITH '请选择需要提交的数据!'.
        RETURN.
      ENDIF.

      PERFORM CHANGE_RFQ.

  ENDCASE.

  "刷新ALV
  CALL METHOD LR_GRID->REFRESH_TABLE_DISPLAY .

ENDFORM.
*&---------------------------------------------------------------------*
*& Form CHANGE_RFQ
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM CHANGE_RFQ .
  DATA(LT_TAB) = GT_TAB[].
  DELETE LT_TAB WHERE EBAKZ IS INITIAL.
  SORT LT_TAB BY BANFN.
  DELETE ADJACENT DUPLICATES FROM LT_TAB COMPARING BANFN.

  DATA:E_CODE TYPE  CHAR1,
       E_MSG  TYPE  STRING.
  LOOP AT LT_TAB INTO GW_TAB.
    CALL FUNCTION 'ZFM_MM_CHANGE_ENQUERY'
      EXPORTING
        I_BANFN = GW_TAB-BANFN
      IMPORTING
        E_CODE  = E_CODE
        E_MSG   = E_MSG.

    LOOP AT GT_TAB ASSIGNING <FS_TAB> WHERE BANFN EQ GW_TAB-BANFN.
      CLEAR <FS_TAB>-STYL.
      <FS_TAB>-MSG = E_MSG.
      IF E_CODE EQ 'S'.
        <FS_TAB>-LIGHT = '@08@'."  Green light; Go; OK
        <FS_TAB>-SEL = ''.
        STYLELIN-FIELDNAME = 'SEL'. " 需要编辑的列名
        STYLELIN-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. " 设置为不可编辑状态
        APPEND STYLELIN TO <FS_TAB>-STYL.
        CLEAR STYLELIN.
      ELSE.
        <FS_TAB>-LIGHT = '@0A@'."  Green light; Go; NO
      ENDIF.

    ENDLOOP.
    CLEAR:GW_TAB,E_CODE,E_MSG.
  ENDLOOP.

ENDFORM.


关键词:

网友评论

发表评论