ABAP随笔-入门简单ALV-(附单元格颜色控制)

2022-06-27 16:53:10 浏览数 (2)

01

入门简单那ALV

今天写一个简单的ALV报表吧,仅显示的那种,这是前两天刚入门的ABAP小伙伴的小考题,

需求是这样的:

需求描述:

1.选择屏幕为:

勾选时,才显示销售凭证的选项

2.展示订单,行项目,订单类型,物料号等信息的ALV展示

3.单击销售订单跳转到VA03查询页面

4.当订单数目小于10时,用红色标注

ALV效果如下

代码如下所示:

代码语言:javascript复制
*&------------------------------------------------ ---------------------*

*& 报告 ZALV_SIMPLE

*&------------------------------------------------ ---------------------*

*&

*&------------------------------------------------ ---------------------*

报告 zalv_simple。

表:vbak。类型:开始gty_data  , vbeln 类型 vbak - vbeln ,         posnr  类型 vbap - posnr ,         auart  类型 vbak - auart ,         matnr  类型 vbap - matnr ,         maktx  类型 makt - maktx ,         kwmeng 类型 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 - PARAMETERS 类型 
vbak - vkorg  。
选择选项:用于 vbak  - erdat的s_erdat 。
参数 p_cbox 作为 CHECKBOX  USER-COMMAND  uc1 。
选择选项: s_vbeln  FOR  vbak - vbeln MODIF  ID  md1 。
初始化。
在 选择屏幕 输出。在屏幕上 
  循环 。IF 屏幕-名称 =  'P_AUART'  OR 屏幕
    -名称 =  'P_VKORG' 。
      屏幕-必需 =  '2' 。
      修改 屏幕。
    结束语。
    IF 屏幕- group1  =  'MD1' 。
      如果 p_cbox  EQ  'X' 。
        屏幕-活动 =  '1' 。
      否则。
        屏幕-活动 =  '0' 。
      结束语。
      修改 屏幕。
    结束语。
  结束循环。
开始选择。
  如果 p_auart 是 初始 的或 p_vkorg 是 初始的。
    MESSAGE  '请输入必填项'  TYPE  'S'  DISPLAY  LIKE  'E' .
    返回。
  结束语。执行
  frm_get_data  。
*&------------------------------------------------ -----------------*
*& 表格 FRM_GET_DATA
*&---------------------------------------- ---------------------------------------*
*& 文字
*&----- -------------------------------------------------- ----------*
*& --> p1 文本
*& <-- p2 文本
*&------------------------------------------------ -----------------*形成 
frm_get_data  。
  数据 ls_scol 类型 lvc_s_scol 。“控制颜色的结构
  IF  p_cbox  IS  IN . CLEAR  s_vbeln [] . . . . ” 抓取订单,订单数量,行,销售,物料,物料描述SELECT  a ~ vbeln , b ~ posnr , a ~ auart , b ~ matnr , c ~ maktx , b ~ kwmeng  INTO 
    
  
  
  TABLE  @ DATA ( lt_data )
    从 vbak 作为 
    内部 连接​​vbap在 b  ~ vbeln  =  a ~ vbeln 内部 连接​​makt 作为 c 在 c ~ matnr  =  b ~ matnr 哪里 a ~ auart =  @p_auart AND  a ~ vkorg  =  @p_vkorg  _ _ _和 一个~ erdat  
     
  
    
    在 @s_erdat
    和 a ~ vbeln 在 @s_vbeln
    和 c ~ spras  =  @sy - langu中。
  如果 sy - subrc  EQ  0 。
    将 lt_data  [] 移动到 gt_data[] 。
    在gt_data 循环 分配 字段 -符号( < fs> )  ,其中 kwmeng  <  10 。清除 ls_scol 。      ls_scol - fname 
      
=  'KWMENG' .
      ls_scol -颜色- 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'  。"
-斑马 =  'X' 。 “ALV表格
斑马线显示    gs_layout - cwidth_opt  =  'X' 。  ”将ALV字段设置为最优化
    gs_layout - ctab_fname  =  'SCOL' 。"ALV:复杂单元格颜色控制字段的名称
    PERFORM  frm_build_cat .
    PERFORM  frm_display .
  ENDIF .
ENDFORM .
*&------------------------ -----------------------------------------*
*& 表格 FRM_BUILD_CAT
*&-- -------------------------------------------------- -------------*
*& 文字
*&------------------------------------------------ -----------------*
*& --> p1 文本
*& <-- p2 文本
*&---------------- --------------------------------------------------*形成 
frm_build_cat  。

  数据 lv_pos 类型 i 。数据 ls_fieldcat 像 gt_fieldcat 的行 。定义 %%append_fieldcat 。    lv_pos  =  lv_pos    1 。    ls_fieldcat - col_pos  =  lv_pos 。    ls_fieldcat -字段 名=  &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 。清除 ls_fieldcat 。定义结束。  %%append_fieldcat :'VBELN'  ''  '  X''VBAK''VBELN  ' ,'POSNR'  ''  '  X''VBAP''POSNR  ' ,'AUART'  ''  ''  ' 
  
  
  

  
  
  
  ''  ''  '  VBAP''MATNR ' ,'MAKTX'  ''  '  '  'MAKT''MAKTX' ,'KWMENG'  ''  '  '  'VBAP''KWMENG' 。读取 表 gt_fieldcat 分配 字段-符号( <fs> ) 索引 1 。如果 sy - subrc  EQ  0 。    <fs> -热点 =  'X' 。" 激活热点,单机跳转功能ENDIF . 结束形式。
  
  

  
  

  


*&------------------------------------------------ ----------------*
*& 表格 FRM_DISPLAY
*&--------------------------- -------------------------------------*
*& 文字
*&-------- -------------------------------------------------- -------*
*& --> p1 文本
*& <-- p2 文本
*&-------------------------- --------------------------------------*形成 
frm_display  。"调用FM显示报表CALL  FUNCTION  'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING * I_INTERFACE_CHECK = ' '

  
  
    



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 =
* IB_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_ENSTART_COMN =
* 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 。如果 sy - subrc <>  0 。* 在此处实施适当的错误处理ENDIF 。结束形式。
    




    
  

  

“
FORM  frm_set_status  USING  p_extab  TYPE  slis_t_extab . SET  PF-STATUS  'ZSTANDARD_FULLSCREEN'  。  ”se41 状态程序从saplkkbl 状态STANDARD_FULLSCREEN 复制即可ENDFORM .                    “frm_set_status ”命令形式 frm_alv_user_command 使用 p_ucomm        类型 sy - ucomm                                 p_rs_selfield  类型 slis_selfield 。案例 p_ucomm 。当 '&IC1' 。“点击阅读 表 
  




  
    
      gt_data  INTO  DATA ( ls_data ) 索引 p_rs_selfield - tabindex 。如果 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 .
      
        
        
        
      
    
  结束语。
结束形式。

0 人点赞