2020.03.08 【ABAP隨筆】- 簡單ALV報表(模板)


今天寫一個簡單的ALV報表吧,僅顯示的那種,這是前兩天剛入門的ABAP小伙伴的小考題,

需求是這樣的:

需求描述:

1.選擇屏幕為:

 

勾選時,才顯示銷售憑證的選項

2.展示訂單,行項目,訂單類型,物料號等信息的ALV展示

3.單擊銷售訂單跳轉到VA03查詢頁面

4.當訂單數目小於10時,用紅色標注

 

 

代碼如下:

*&---------------------------------------------------------------------*
*& Report ZALV_SIMPLE
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zalv_simple.

TABLES:vbak.

TYPES:BEGIN OF gty_data,
        vbeln  TYPE vbak-vbeln,
        posnr  TYPE vbap-posnr,
        auart  TYPE vbak-auart,
        matnr  TYPE vbap-matnr,
        maktx  TYPE makt-maktx,
        kwmeng TYPE vbap-kwmeng,
        scol   TYPE lvc_t_scol, "用來控制單元格顏色
      END OF gty_data.

DATA gs_fieldcat TYPE lvc_s_fcat.
DATA gt_fieldcat TYPE lvc_t_fcat.
DATA gs_layout TYPE lvc_s_layo.

DATA gs_data TYPE gty_data.
DATA gt_data TYPE TABLE OF gty_data.

PARAMETERS p_auart TYPE vbak-auart .

PARAMETERS p_vkorg TYPE vbak-vkorg .

SELECT-OPTIONS:s_erdat FOR vbak-erdat.

PARAMETERS p_cbox AS CHECKBOX USER-COMMAND uc1.

SELECT-OPTIONS:s_vbeln FOR vbak-vbeln MODIF ID md1.

INITIALIZATION.


AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF screen-name = 'P_AUART' OR screen-name = 'P_VKORG'.
      screen-required = '2'.
      MODIFY SCREEN.
    ENDIF.
    IF screen-group1 = 'MD1'.
      IF p_cbox EQ 'X'.
        screen-active = '1'.
      ELSE.
        screen-active = '0'.
      ENDIF.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.


START-OF-SELECTION.
  IF p_auart IS INITIAL OR p_vkorg IS INITIAL.
    MESSAGE '請輸入必填項' TYPE 'S' DISPLAY LIKE 'E'.
    RETURN.
  ENDIF.
  PERFORM frm_get_data.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_get_data .
  DATA ls_scol TYPE lvc_s_scol."控制顏色的結構

  IF p_cbox IS INITIAL.
    CLEAR s_vbeln[].
  ENDIF.

  "抓取銷售訂單,行項目,類型,物料,物料描述,訂單數量
  SELECT a~vbeln,b~posnr,a~auart,b~matnr,c~maktx,b~kwmeng INTO TABLE @DATA(lt_data)
    FROM vbak AS a
    INNER JOIN vbap AS b ON b~vbeln = a~vbeln
    INNER JOIN makt AS c ON c~matnr = b~matnr
  WHERE a~auart = @p_auart
    AND a~vkorg = @p_vkorg
    AND a~erdat IN @s_erdat
    AND a~vbeln IN @s_vbeln
    AND c~spras = @sy-langu.
  IF sy-subrc EQ 0.

    MOVE-CORRESPONDING lt_data[] TO gt_data[].

    LOOP AT gt_data ASSIGNING FIELD-SYMBOL(<fs>) WHERE kwmeng < 10.
      CLEAR ls_scol.
      ls_scol-fname = 'KWMENG'.
      ls_scol-color-col = '6'."6:為紅色 1:強化  0:顏色為背景
      ls_scol-color-int = '1'."6:為紅色 1:強化  0:顏色為背景
      ls_scol-color-inv = '0'."6:為紅色 1:強化  0:顏色為背景

      APPEND ls_scol TO <fs>-scol.
    ENDLOOP.

    gs_layout-sel_mode    = 'D' ."模式
    gs_layout-zebra = 'X'. "ALV表格按斑馬線條紋顯示
    gs_layout-cwidth_opt = 'X'. "將ALV字段寬度設置為最優化
    gs_layout-ctab_fname = 'SCOL'."ALV 控制: 帶有復雜單元格顏色編碼的字段名稱

    PERFORM frm_build_cat.

    PERFORM frm_display.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_BUILD_CAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_build_cat .

  DATA lv_pos TYPE i.
  DATA ls_fieldcat LIKE LINE OF gt_fieldcat.
  DEFINE %%append_fieldcat.
    lv_pos = lv_pos + 1.
    ls_fieldcat-col_pos = lv_pos.
    ls_fieldcat-fieldname = &1."字段名
    ls_fieldcat-coltext = &2."文本
    ls_fieldcat-key = &3."關鍵字
    ls_fieldcat-ref_table = &4."參考的表
    ls_fieldcat-ref_field = &5."參考的字段
  APPEND ls_fieldcat TO gt_fieldcat.
  CLEAR ls_fieldcat.
  END-OF-DEFINITION.
  %%append_fieldcat:
  'VBELN' '' 'X' 'VBAK' 'VBELN',
  'POSNR' '' 'X' 'VBAP' 'POSNR',
  'AUART' '' '' 'VBAK' 'AUART',
  'MATNR' '' '' 'VBAP' 'MATNR',
  'MAKTX' '' '' 'MAKT' 'MAKTX',
  'KWMENG' '' '' 'VBAP' 'KWMENG'.

  READ TABLE gt_fieldcat ASSIGNING FIELD-SYMBOL(<fs>) INDEX 1.
  IF sy-subrc EQ 0.
    <fs>-hotspot = 'X'."激活熱點,單機跳轉功能
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_display .

  "調用FM 顯示報表
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
*     I_INTERFACE_CHECK        = ' '
*     I_BYPASSING_BUFFER       =
*     I_BUFFER_ACTIVE          =
      i_callback_program       = sy-repid
      i_callback_pf_status_set = 'FRM_SET_STATUS' "狀態欄form
      i_callback_user_command  = 'FRM_ALV_USER_COMMAND' "用戶命令form
*     I_CALLBACK_TOP_OF_PAGE   = ' '
*     I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*     I_CALLBACK_HTML_END_OF_LIST       = ' '
*     I_STRUCTURE_NAME         =
*     I_BACKGROUND_ID          = ' '
*     I_GRID_TITLE             =
*     I_GRID_SETTINGS          =
      is_layout_lvc            = gs_layout
      it_fieldcat_lvc          = gt_fieldcat
*     IT_EXCLUDING             =
*     IT_SPECIAL_GROUPS_LVC    =
*     IT_SORT_LVC              =
*     IT_FILTER_LVC            =
*     IT_HYPERLINK             =
*     IS_SEL_HIDE              =
*     I_DEFAULT                = 'X'
*     I_SAVE                   = ' '
*     IS_VARIANT               =
*     IT_EVENTS                =
*     IT_EVENT_EXIT            =
*     IS_PRINT_LVC             =
*     IS_REPREP_ID_LVC         =
*     I_SCREEN_START_COLUMN    = 0
*     I_SCREEN_START_LINE      = 0
*     I_SCREEN_END_COLUMN      = 0
*     I_SCREEN_END_LINE        = 0
*     I_HTML_HEIGHT_TOP        =
*     I_HTML_HEIGHT_END        =
*     IT_ALV_GRAPHICS          =
*     IT_EXCEPT_QINFO_LVC      =
*     IR_SALV_FULLSCREEN_ADAPTER        =
* IMPORTING
*     E_EXIT_CAUSED_BY_CALLER  =
*     ES_EXIT_CAUSED_BY_USER   =
    TABLES
      t_outtab                 = gt_data
* EXCEPTIONS
*     PROGRAM_ERROR            = 1
*     OTHERS                   = 2
    .
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.



ENDFORM.
FORM frm_set_status USING p_extab TYPE slis_t_extab.

  SET PF-STATUS 'ZSTANDARD_FULLSCREEN' . "se41 從程序saplkkbl  狀態STANDARD_FULLSCREEN 復制

ENDFORM.                    " frm_set_status

FORM frm_alv_user_command USING p_ucomm        TYPE sy-ucomm
                                p_rs_selfield  TYPE slis_selfield.
  CASE p_ucomm.
    WHEN '&IC1'."單擊
      READ TABLE gt_data INTO DATA(ls_data) INDEX p_rs_selfield-tabindex.
      IF sy-subrc EQ 0 AND p_rs_selfield-fieldname = 'VBELN'.
        "跳轉畫面
        SET PARAMETER ID: 'AUN' FIELD ls_data-vbeln.
        CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
      ENDIF.
    WHEN OTHERS.
  ENDCASE.
ENDFORM.

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM