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 .
结束语。
结束形式。