ABAP ALV红绿黄灯5步

1.TYPE-POOL引入ICON;

TYPE-POOLS:SLIS,ICON.

2.定义一个指示灯字段;

FLG       TYPE CHAR4,

3.ALV FIELD_SET显示指示灯;

USING 'FLG'  ''   '15' '' '' '',

4.FORM FIELD_SET指示灯传值;

FORM FIELD_SET USING P_FIELDNAME
                     P_ICON.
  GW_FIELDCAT-ICON          = P_ICON.
  APPEND GW_FIELDCAT TO GT_FIELDCAT.
  CLEAR GW_FIELDCAT.
ENDFORM.

5.根据数据处理逻辑,指示灯字段赋值;

WA_ALV-FLG = ICON_LED_GREEN.

一个具体使用实例

*&---------------------------------------------------------------------*
*& Report ZEWM006
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZEWMR007.

TYPE-POOLS:SLIS,ICON.
TABLES:LIKP,SSCRFIELDS.

TYPES:BEGIN OF TY_ALV,
        FLG       TYPE CHAR4,
        SEL       TYPE C,
        ZTYPE     TYPE C,
        ZTITLE    TYPE CHAR30,
        VBELN     TYPE LIKP-VBELN,
        POSNR     TYPE LIPS-POSNR,
        VBELV     TYPE VBFA-VBELV,
        MATNR     TYPE LIPS-MATNR,
        ARKTX     TYPE LIPS-ARKTX,
        LFIMG     TYPE LIPS-LFIMG,
        VRKME     TYPE LIPS-VRKME,
        LGNUM     TYPE LIKP-LGNUM,
        LNUMT     TYPE T300T-LNUMT,
        LGORT     TYPE LIPS-LGORT,
        LGOBE     TYPE T001L-LGOBE,
        KUNNR     TYPE LIKP-KUNNR,
        LIFNR     TYPE LIKP-LIFNR,
        NAME_K    TYPE BUT000-NAME_ORG1, "客户描述
        NAME_L    TYPE BUT000-NAME_ORG1, "供应商描述
        NAME      TYPE BUT000-NAME_ORG1, "打印文件表头
        NAME_ORG1 TYPE BUT000-NAME_ORG1, "ALV最终输出
      END OF TY_ALV,

      BEGIN OF TY_LIKP,
        ZTITLE TYPE CHAR30,
        ZTYPE  TYPE CHAR1,
        VBELN  TYPE LIKP-VBELN,
        VBELV  TYPE VBFA-VBELV,
        LGNUM  TYPE LIKP-LGNUM,
        LNUMT  TYPE T300T-LNUMT,
        LGORT  TYPE LIPS-LGORT,
        LGOBE  TYPE T001L-LGOBE,
        KUNNR  TYPE LIKP-KUNNR,
        LIFNR  TYPE LIKP-LIFNR,
        NAME_K TYPE BUT000-NAME_ORG1,
        NAME_L TYPE BUT000-NAME_ORG1,
        NAME   TYPE BUT000-NAME_ORG1,
      END OF TY_LIKP,

      BEGIN OF TY_LIPS,
        VBELN TYPE LIPS-VBELN,
        POSNR TYPE LIPS-POSNR,
        MATNR TYPE LIPS-MATNR,
        ARKTX TYPE LIPS-ARKTX,
        LFIMG TYPE LIPS-LFIMG,
        VRKME TYPE LIPS-VRKME,
        LGORT TYPE LIPS-LGORT,
      END OF TY_LIPS.
DATA:GT_LIKP   TYPE TABLE OF TY_LIKP,
     WA_LIKP   TYPE TY_LIKP,
     GT_T300T  TYPE TABLE OF T300T,
     WA_T300T  TYPE T300T,
     GT_T001L  TYPE TABLE OF T001L,
     WA_T001L  TYPE T001L,
     GT_BUT_K  TYPE TABLE OF BUT000,
     WA_BUT_K  TYPE BUT000,
     GT_BUT_L  TYPE TABLE OF BUT000,
     WA_BUT_L  TYPE BUT000,
     GT_LIPS   TYPE TABLE OF TY_LIPS,
     WA_LIPS   TYPE TY_LIPS,
     GT_ALV    TYPE TABLE OF TY_ALV,
     WA_ALV    TYPE TY_ALV,
     WA_DOCID1 TYPE /SCDL/DB_REFDOC-DOCID,
     WA_DOCID2 TYPE /SCDL/DB_REFDOC-DOCID,
     WA_DOCID3 TYPE /SCDL/DB_REFDOC-DOCID.

DATA: GW_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
      GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
      G_LAYOUT    TYPE SLIS_LAYOUT_ALV,
      LS_EVENTS   TYPE SLIS_ALV_EVENT,
      LT_EVENTS   TYPE SLIS_T_EVENT.


SELECTION-SCREEN BEGIN OF BLOCK BK1 WITH FRAME.
SELECT-OPTIONS:
      S_VBELN FOR LIKP-VBELN OBLIGATORY.
SELECTION-SCREEN END OF BLOCK BK1.
SELECTION-SCREEN BEGIN OF BLOCK BK2 WITH FRAME.
PARAMETERS:R_JHD RADIOBUTTON GROUP AA DEFAULT 'X'.
PARAMETERS:R_ZCD RADIOBUTTON GROUP AA.
SELECTION-SCREEN END OF BLOCK BK2.


INITIALIZATION."(初始化)

AT SELECTION-SCREEN."(屏幕跳出前)

START-OF-SELECTION."(取数据)
  IF R_JHD = 'X'."交货单
    PERFORM FRM_GETDATA.
  ELSE."产成品装车清单

  ENDIF.

  PERFORM FRM_LAYOUT_BUILD.
  PERFORM FRM_FIELD_BUILD.
  PERFORM FRM_DATA_OUT.


END-OF-SELECTION."(展示数据)

TOP-OF-PAGE."(普通报表输出页头)

END-OF-PAGE."(普通报表输出页尾)



*-------------------------------------------------------------------------------
*FORM
*-------------------------------------------------------------------------------
FORM FRM_GETDATA.
  "取抬头数据
  SELECT A~VBELN
         B~VBELV
         A~LGNUM
         A~KUNNR
         A~LIFNR
  INTO CORRESPONDING FIELDS OF TABLE GT_LIKP
  FROM LIKP AS A
  LEFT JOIN VBFA AS B ON A~VBELN = B~VBELN
  WHERE A~VBELN IN S_VBELN
  AND A~LGNUM IN ('HZY','HZC').

  IF GT_LIKP IS NOT INITIAL.

    "获取行项目数据
    SELECT VBELN POSNR MATNR ARKTX LFIMG VRKME
           LGORT
    INTO CORRESPONDING FIELDS OF TABLE GT_LIPS
    FROM LIPS
    FOR ALL ENTRIES IN GT_LIKP
    WHERE VBELN = GT_LIKP-VBELN.

    SELECT *
    INTO CORRESPONDING FIELDS OF TABLE GT_T300T
    FROM T300T
    FOR ALL ENTRIES IN GT_LIKP
    WHERE LGNUM = GT_LIKP-LGNUM
    AND SPRAS = SY-LANGU.

    SELECT *
    INTO CORRESPONDING FIELDS OF TABLE GT_T001L
    FROM T001L
    FOR ALL ENTRIES IN GT_LIPS
    WHERE LGORT = GT_LIPS-LGORT.

    SELECT PARTNER NAME_ORG1
    INTO CORRESPONDING FIELDS OF TABLE GT_BUT_K
    FROM BUT000
    FOR ALL ENTRIES IN GT_LIKP
    WHERE PARTNER = GT_LIKP-KUNNR.

    SELECT PARTNER NAME_ORG1
    INTO CORRESPONDING FIELDS OF TABLE GT_BUT_L
    FROM BUT000
    FOR ALL ENTRIES IN GT_LIKP
    WHERE PARTNER = GT_LIKP-LIFNR.
  ELSE.
    MESSAGE '输入的交货单不存在!' TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.

  "处理抬头数据
  LOOP AT GT_LIKP INTO WA_LIKP.

    READ TABLE GT_LIPS INTO WA_LIPS WITH KEY VBELN = WA_LIKP-VBELN.
    IF SY-SUBRC = 0.
      WA_LIKP-LGORT = WA_LIPS-LGORT.
    ENDIF.

    READ TABLE GT_T001L INTO WA_T001L WITH KEY LGORT = WA_LIKP-LGORT.
    IF SY-SUBRC = 0.
      WA_LIKP-LGOBE = WA_T001L-LGOBE.
    ENDIF.

    READ TABLE GT_T300T INTO WA_T300T WITH KEY LGNUM = WA_LIKP-LGNUM.
    IF SY-SUBRC = 0 AND WA_T300T-LGNUM NE 'HZY'."原材料仓描述 = 仓库描述+库存地点描述
      WA_LIKP-LNUMT = WA_T300T-LNUMT.
    ELSEIF SY-SUBRC = 0 AND WA_T300T-LGNUM = 'HZY'.
      CONCATENATE WA_T300T-LNUMT WA_LIKP-LGOBE INTO WA_LIKP-LNUMT SEPARATED BY '-'.
    ENDIF.

    READ TABLE GT_BUT_K INTO WA_BUT_K WITH KEY PARTNER = WA_LIKP-KUNNR.
    IF SY-SUBRC = 0.
      WA_LIKP-NAME_K = WA_BUT_K-NAME_ORG1.
    ENDIF.

    READ TABLE GT_BUT_L INTO WA_BUT_L WITH KEY PARTNER = WA_LIKP-LIFNR.
    IF SY-SUBRC = 0.
      WA_LIKP-NAME_L = WA_BUT_L-NAME_ORG1.
    ENDIF.

    IF R_JHD = 'X'.
      SELECT SINGLE DOCID INTO WA_DOCID1
      FROM /SCDL/DB_REFDOC
      WHERE REFDOCNO = WA_LIKP-VBELN.
      SELECT SINGLE DOCID INTO WA_DOCID2
      FROM /SCDL/DB_PROCH_O
      WHERE DOCID = WA_DOCID1.
      SELECT SINGLE DOCID INTO WA_DOCID3
      FROM /SCDL/DB_PROCH_I
      WHERE DOCID = WA_DOCID1.

      IF WA_DOCID2 IS NOT INITIAL.
        WA_LIKP-ZTITLE = '出库交货单'.
        WA_LIKP-NAME = WA_LIKP-NAME_K.
        WA_LIKP-ZTYPE = 'O'.
      ELSEIF WA_DOCID3 IS NOT INITIAL.
        WA_LIKP-ZTITLE = '入库交货单'.
        WA_LIKP-NAME = WA_LIKP-NAME_L.
        WA_LIKP-ZTYPE = 'I'.
      ENDIF.
    ELSE.
      WA_LIKP-ZTITLE = '产成品装车清单'.
    ENDIF.

    MODIFY GT_LIKP FROM WA_LIKP.
    CLEAR:WA_LIKP,WA_T300T,WA_T001L,WA_BUT_K,WA_LIPS,WA_BUT_L,
          WA_DOCID1,WA_DOCID2,WA_DOCID3.
  ENDLOOP.

  LOOP AT GT_LIPS INTO WA_LIPS.
    WA_ALV-VBELN = WA_LIPS-VBELN.
    WA_ALV-POSNR = WA_LIPS-POSNR.
    WA_ALV-MATNR = WA_LIPS-MATNR.
    WA_ALV-ARKTX = WA_LIPS-ARKTX.
    WA_ALV-LFIMG = WA_LIPS-LFIMG.
    WA_ALV-VRKME = WA_LIPS-VRKME.
    READ TABLE GT_LIKP INTO WA_LIKP WITH KEY VBELN = WA_ALV-VBELN.
    WA_ALV-ZTYPE = WA_LIKP-ZTYPE.
    WA_ALV-VBELV = WA_LIKP-VBELV.
    WA_ALV-LGNUM = WA_LIKP-LGNUM.
    WA_ALV-LGORT = WA_LIKP-LGORT.
    WA_ALV-LGOBE = WA_LIKP-LGOBE.
    WA_ALV-ZTITLE = WA_LIKP-ZTITLE.
    WA_ALV-KUNNR = WA_LIKP-KUNNR.
    WA_ALV-LIFNR = WA_LIKP-LIFNR.
    WA_ALV-NAME_K = WA_LIKP-NAME_K.
    WA_ALV-NAME_L = WA_LIKP-NAME_L.
    WA_ALV-NAME = WA_LIKP-NAME.

    IF WA_ALV-ZTYPE = 'O'."出库交货单
      WA_ALV-LNUMT = WA_LIKP-LNUMT."发货方
      WA_ALV-NAME_ORG1 = WA_LIKP-NAME_K."收货方
    ELSEIF WA_ALV-ZTYPE = 'I'."入库交货单
      WA_ALV-LNUMT = WA_LIKP-NAME_L."发货方
      WA_ALV-NAME_ORG1 = WA_LIKP-LNUMT."收货方
    ENDIF.
    APPEND WA_ALV TO GT_ALV.
    CLEAR:WA_LIKP,WA_LIPS,WA_ALV.
  ENDLOOP.
  SORT GT_ALV BY VBELN POSNR.

ENDFORM.


FORM FRM_LAYOUT_BUILD .
  G_LAYOUT-BOX_FIELDNAME        = 'SEL'.  " 选择模式,在最左端有选择按钮
  G_LAYOUT-COLWIDTH_OPTIMIZE    = 'X'.    " 自动调整列宽
  G_LAYOUT-ZEBRA                = 'X'.    " 表格斑马线
  G_LAYOUT-INFO_FIELDNAME       = 'CLR'.

  LS_EVENTS-FORM = 'DATA_CHANGED_METHOD'.
  LS_EVENTS-NAME = 'DATA_CHANGED'.
  APPEND LS_EVENTS TO LT_EVENTS.
ENDFORM.

FORM FRM_FIELD_BUILD .
  CLEAR GT_FIELDCAT.
  PERFORM FIELD_SET:
                   USING 'FLG'  ''   '15' '' '' '',
                   USING 'VBELN'  '交货单号'   '15' '' '' '',
                   USING 'POSNR'  '行号'   '15' '' '' '',
                   USING 'VBELV'  '先前凭证'   '15' '' '' '',
                   USING 'MATNR'  '物料编码'   '15' '' '' '',
                   USING 'ARKTX'  '物料名称'   '15' '' '' '',
                   USING 'LFIMG'  '数量'   '15' '' '' '',
                   USING 'VRKME'  '单位'   '15' '' '' '',
                   USING 'LNUMT'  '发货方'   '15' '' '' '',
                   USING 'NAME_ORG1'  '收货方'   '15' '' '' ''.

ENDFORM.

FORM FRM_DATA_OUT.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM       = SY-REPID
      IS_LAYOUT                = G_LAYOUT
      IT_FIELDCAT              = GT_FIELDCAT
      I_SAVE                   = 'A'
      I_CALLBACK_PF_STATUS_SET = 'FRM_STATE'
      I_CALLBACK_USER_COMMAND  = 'FRM_USER_COMMAND'
      IT_EVENTS                = LT_EVENTS
    TABLES
      T_OUTTAB                 = GT_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.

ENDFORM.

FORM FRM_STATE USING RT_EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'STANDARD'.
ENDFORM.

FORM FRM_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
                             SELFIELD TYPE SLIS_SELFIELD.
  DATA: LR_GRID TYPE REF TO CL_GUI_ALV_GRID.
  DATA L_TABIX LIKE SY-TABIX.

*  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
*    IMPORTING
*      E_GRID = LR_GRID.
*  CALL METHOD LR_GRID->CHECK_CHANGED_DATA.
  SELFIELD-REFRESH = 'X'.
*  SELFIELD-ROW_STABLE = 'X'.
*  SELFIELD-COL_STABLE = 'X'.
  READ TABLE GT_ALV INTO WA_ALV INDEX SELFIELD-TABINDEX.
  CHECK SY-SUBRC = 0.
  CASE R_UCOMM.
    WHEN 'ZPRINT'.
      PERFORM FRM_PRINT.
  ENDCASE.
ENDFORM.

FORM FIELD_SET USING P_FIELDNAME
                     P_SELTEXT_L
                     P_OUTPUTLEN
                     P_HOTSPOT
                     P_CHECKBOX
                     P_ICON.
  GW_FIELDCAT-FIELDNAME     = P_FIELDNAME .
  GW_FIELDCAT-SELTEXT_L     = P_SELTEXT_L .
  GW_FIELDCAT-OUTPUTLEN     = P_OUTPUTLEN .
  GW_FIELDCAT-HOTSPOT       = P_HOTSPOT.
  GW_FIELDCAT-CHECKBOX      = P_CHECKBOX.
  GW_FIELDCAT-ICON          = P_ICON.
  APPEND GW_FIELDCAT TO GT_FIELDCAT.
  CLEAR GW_FIELDCAT.
ENDFORM.


FORM FRM_PRINT.

  DATA:FM_NAME               TYPE  RS38L_FNAM,
       GT_LIPS_O             TYPE TABLE OF ZSEWM002,
       WA_LIPS_O             TYPE ZSEWM002,
       WA_LIKP_O             TYPE ZSEWM001,
       LS_OUTPUT_OPTIONS     TYPE SSFCOMPOP,
       LS_CONTROL_PARAMETERS TYPE SSFCTRLOP,
       LS_OUTPUT_INFO        TYPE SSFCRESCL,
       ZLINE                 TYPE CHAR3,
       LS_CHECK              TYPE TY_ALV,
       LT_CHECK              TYPE TABLE OF TY_ALV.

  "检查
  CLEAR:LT_CHECK,LS_CHECK.
  LOOP AT GT_ALV INTO WA_ALV WHERE SEL = 'X'.
    LS_CHECK-VBELN = WA_ALV-VBELN.
    COLLECT LS_CHECK INTO LT_CHECK.
  ENDLOOP.
  IF SY-SUBRC <> 0.
    MESSAGE '请选择需要打印的数据!' TYPE 'E'.
  ENDIF.
  IF LINES( LT_CHECK ) > 1.
    MESSAGE '不同交货单不能一起打印!' TYPE 'E'.
  ENDIF.
  LOOP AT GT_ALV INTO WA_ALV WHERE SEL = 'X'.
    "READ TABLE GT_ALV INTO WA_ALV WITH KEY SEL = 'X'.
    WA_LIKP_O-ZTITLE = WA_ALV-ZTITLE.
    WA_LIKP_O-VBELN = WA_ALV-VBELN.
    WA_LIKP_O-VBELV = WA_ALV-VBELV.
    WA_LIKP_O-LGNUM = WA_ALV-LGNUM.
    WA_LIKP_O-LNUMT = WA_ALV-LNUMT.
    WA_LIKP_O-LGORT = WA_ALV-LGORT.
    WA_LIKP_O-LGOBE = WA_ALV-LGOBE.
    WA_LIKP_O-KUNNR = WA_ALV-KUNNR.
    WA_LIKP_O-LIFNR = WA_ALV-LIFNR.
    WA_LIKP_O-NAME_K = WA_ALV-NAME_K.
    WA_LIKP_O-NAME_L = WA_ALV-NAME_L.
    WA_LIKP_O-NAME = WA_ALV-NAME_ORG1.

    ZLINE = 0.
    LOOP AT GT_LIPS INTO WA_LIPS WHERE VBELN = WA_LIKP_O-VBELN.
      WA_LIPS_O-ZLINE = ZLINE + 1.
      ZLINE = ZLINE + 1.
      WA_LIPS_O-VBELN = WA_LIPS-VBELN.
      WA_LIPS_O-POSNR = WA_LIPS-POSNR.
      WA_LIPS_O-MATNR = WA_LIPS-MATNR.
      WA_LIPS_O-ARKTX = WA_LIPS-ARKTX.
      WA_LIPS_O-LFIMG = WA_LIPS-LFIMG.
      WA_LIPS_O-VRKME = WA_LIPS-VRKME.
      WA_LIPS_O-LGORT = WA_LIPS-LGORT.
      APPEND WA_LIPS_O TO GT_LIPS_O.
      CLEAR:WA_LIPS,WA_LIPS_O.
    ENDLOOP.

    CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
      EXPORTING
        FORMNAME           = 'ZSFEWM010'
      IMPORTING
        FM_NAME            = FM_NAME
      EXCEPTIONS
        NO_FORM            = 1
        NO_FUNCTION_MODULE = 2
        OTHERS             = 3.

    LS_OUTPUT_OPTIONS-TDDEST = 'LP01'.        "假脱机: 输出设备
    LS_OUTPUT_OPTIONS-TDIMMED = 'X'.          "立即假脱机打印
    LS_OUTPUT_OPTIONS-TDDELETE = 'X'.        "立即假脱机删除

    "打开假脱机队列
    CALL FUNCTION 'SSF_OPEN'
      EXPORTING
        OUTPUT_OPTIONS     = LS_OUTPUT_OPTIONS
        CONTROL_PARAMETERS = LS_CONTROL_PARAMETERS
        USER_SETTINGS      = ''
      EXCEPTIONS
        FORMATTING_ERROR   = 1
        INTERNAL_ERROR     = 2
        SEND_ERROR         = 3
        USER_CANCELED      = 4
        OTHERS             = 5.

    IF SY-SUBRC <> 0.
      RETURN.
    ENDIF.

    LS_CONTROL_PARAMETERS-NO_OPEN = 'X'.
    LS_CONTROL_PARAMETERS-NO_CLOSE = 'X'.


    CALL FUNCTION FM_NAME
      EXPORTING
        CONTROL_PARAMETERS = LS_CONTROL_PARAMETERS
        OUTPUT_OPTIONS     = LS_OUTPUT_OPTIONS
        USER_SETTINGS      = ' '
        WA_LIKP_O          = WA_LIKP_O
      IMPORTING
        JOB_OUTPUT_INFO    = LS_OUTPUT_INFO
      TABLES
        GT_LIPS_O          = GT_LIPS_O
      EXCEPTIONS
        FORMATTING_ERROR   = 1
        INTERNAL_ERROR     = 2
        SEND_ERROR         = 3
        USER_CANCELED      = 4.

    "关闭假脱机队列
    CALL FUNCTION 'SSF_CLOSE'
      IMPORTING
        JOB_OUTPUT_INFO  = LS_OUTPUT_INFO
      EXCEPTIONS
        FORMATTING_ERROR = 1
        INTERNAL_ERROR   = 2
        SEND_ERROR       = 3
        OTHERS           = 4.
    WA_ALV-FLG = ICON_LED_GREEN.
    MODIFY GT_ALV FROM WA_ALV TRANSPORTING FLG.
    CLEAR:WA_ALV, WA_LIKP_O.
  ENDLOOP.

ENDFORM.

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值