入职后从0开始学习abap,在此记录开发的第一个简单报表:生产订单工序查询报表
通过单选框分别显示订单信息,工序信息,组件信息
REPORT ytest_01.
*声明表
TABLES:aufk,afko.
*结构
TYPES:
BEGIN OF ty_alv,
werks TYPE aufk-werks, "工厂
aufnr TYPE aufk-aufnr, "订单号
stlbez TYPE afko-stlbez, "物料号
maktx TYPE makt-maktx, "物料描述
auart TYPE aufk-auart, "订单类型
gamng TYPE afko-gamng, "订单数量
igmng TYPE afko-igmng, "确认数量
wemng TYPE afpo-wemng, "交货数量
rmnga TYPE afko-rmnga, "返工数量
iasmg TYPE afko-iasmg, "报废数量
gmein TYPE afko-gmein, "单位
erdat TYPE aufk-erdat, "创建日期
ftrmi TYPE afko-ftrmi, "下达日期
sttxt TYPE bsvx-sttxt, "系统状态
END OF ty_alv,
BEGIN OF ty_alv2,
werks TYPE aufk-werks,
aufnr TYPE aufk-aufnr,
stlbez TYPE afko-stlbez,
maktx TYPE makt-maktx,
vornr TYPE afvc-vornr, "工序号
ktsch TYPE afvc-ktsch, "文本码
ltxa1 TYPE afvc-ltxa1, "工序短文本
bmsch TYPE afvv-bmsch, "工序数量
meinh TYPE afvv-meinh, "工序单位
vgw01 TYPE afvv-vgw01, "标准人工工时
vgw02 TYPE afvv-vgw02, "标准机械工时
vge01 TYPE afvv-vge01, "时间单位
END OF ty_alv2,
BEGIN OF ty_alv3,
werks TYPE aufk-werks,
aufnr TYPE aufk-aufnr,
stlbez TYPE afko-stlbez,
maktx TYPE makt-maktx,
posnr TYPE resb-posnr, "项目号
matnr TYPE resb-matnr, "组件物料
s_maktx TYPE makt-maktx, "组件物料描述
bdmng TYPE resb-bdmng, "需求数量
enmng TYPE resb-enmng, "提货数量
meins TYPE resb-meins, "单位
avoau TYPE resb-avoau, "工序报废
alpgr TYPE resb-alpgr, "组
alprf TYPE resb-alprf, "优先级
vornr TYPE resb-vornr, "工序
END OF ty_alv3.
*表
DATA:
gt_alv TYPE STANDARD TABLE OF ty_alv,
gt_alv2 TYPE STANDARD TABLE OF ty_alv2,
gt_alv3 TYPE STANDARD TABLE OF ty_alv3.
*变量
DATA:
gv_program TYPE sy-repid,
gs_layout TYPE lvc_s_layo,
gt_fcat TYPE lvc_t_fcat.
*选择屏幕
SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME.
SELECT-OPTIONS : s_werks FOR aufk-werks OBLIGATORY NO-EXTENSION, "工厂
s_stlbez FOR afko-stlbez NO-EXTENSION, "物料号
s_aufnr FOR aufk-aufnr NO-EXTENSION, "订单号
s_auart FOR aufk-auart NO-EXTENSION, "订单类型
s_ftrmi FOR afko-ftrmi NO-EXTENSION. "下达日期
PARAMETERS : r_rad1 RADIOBUTTON GROUP g1 DEFAULT 'X' USER-COMMAND uc,
r_rad2 RADIOBUTTON GROUP g1,
r_rad3 RADIOBUTTON GROUP g1.
SELECTION-SCREEN END OF BLOCK a.
START-OF-SELECTION.
PERFORM frm_main.
*主处理
FORM frm_main.
IF r_rad1 = 'X'.
PERFORM frm_data_get.
PERFORM frm_data_display.
ELSEIF r_rad2 = 'X'.
PERFORM frm_data_get2.
PERFORM frm_data_display2.
ELSEIF r_rad3 = 'X'.
PERFORM frm_data_get3.
PERFORM frm_data_display3.
ENDIF.
ENDFORM.
*取数
FORM frm_data_get .
SELECT a~aufnr
a~werks
a~auart
a~erdat
b~stlbez
b~ftrmi
b~gamng
b~gmein
b~igmng
b~iasmg
b~rmnga
c~wemng
d~maktx
FROM aufk AS a INNER JOIN afko AS b
ON a~aufnr = b~aufnr
INNER JOIN afpo AS c
ON a~aufnr = c~aufnr
INNER JOIN makt AS d
ON b~stlbez = d~matnr
AND d~spras = sy-langu
INTO CORRESPONDING FIELDS OF TABLE gt_alv
WHERE a~werks IN s_werks
AND b~stlbez IN s_stlbez
AND a~aufnr IN s_aufnr
AND a~auart IN s_auart
AND b~ftrmi IN s_ftrmi.
SORT gt_alv by aufnr.
ENDFORM.
FORM frm_data_get2 .
SELECT a~werks
a~aufnr
b~stlbez
c~maktx
d~vornr
d~ktsch
d~ltxa1
e~bmsch
e~meinh
e~vgw01
e~vgw02
e~vge01
FROM aufk AS a INNER JOIN afko AS b
ON a~aufnr = b~aufnr
INNER JOIN makt AS c
ON b~stlbez = c~matnr
INNER JOIN afvc AS d
ON b~aufpl = d~aufpl
INNER JOIN afvv AS e
ON d~aplzl = e~aplzl
AND d~aufpl = e~aufpl
INTO CORRESPONDING FIELDS OF TABLE gt_alv2
WHERE a~werks IN s_werks
AND b~stlbez IN s_stlbez
AND a~aufnr IN s_aufnr
AND a~auart IN s_auart
AND b~ftrmi IN s_ftrmi.
SORT gt_alv2 by aufnr vornr.
ENDFORM.
FORM frm_data_get3 .
SELECT a~werks
a~aufnr
b~stlbez
c~maktx
d~posnr
d~matnr
d~bdmng
d~enmng
d~meins
d~avoau
d~alpgr
d~alprf
d~vornr
FROM aufk AS a INNER JOIN afko AS b
ON a~aufnr = b~aufnr
INNER JOIN makt AS c
ON b~stlbez = c~matnr
INNER JOIN resb AS d
ON b~aufnr = d~aufnr
AND b~rsnum = d~rsnum
AND d~xloek <> 0
INTO CORRESPONDING FIELDS OF TABLE gt_alv3
WHERE a~werks IN s_werks
AND b~stlbez IN s_stlbez
AND a~aufnr IN s_aufnr
AND a~auart IN s_auart
AND b~ftrmi IN s_ftrmi.
SORT gt_alv3 by aufnr posnr.
ENDFORM.
*显示
FORM frm_data_display .
** 布局结构设置
CLEAR gs_layout.
gs_layout-zebra = 'X'. "使ALV表格按斑马线间隔条码方式显示
gs_layout-cwidth_opt = 'X'. "自动优化列宽
gs_layout-sel_mode = 'A'. "选择模式,A-选择按钮,space-空白 “A”在最左端有选择按钮
CLEAR gt_fcat.
PERFORM frm_fieldcat_set
USING: 'WERKS' '工厂',
'AUFNR' '订单号',
'STLBEZ' '物料号',
'MAKTX' '物料描述',
'AUART' '订单类型',
'GAMNG' '订单数量',
'IGMNG' '确认数量',
'WEMNG' '交货数量',
'RMNGA' '返工数量',
'IASMG' '报废数量',
'GMEIN' '单位',
'ERDAT' '创建日期',
'FTRMI' '下达日期',
'STTXT' '系统状态'.
gv_program = sy-repid.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = gv_program
** i_callback_pf_status_set = 'SET_PF_STATUS'
** i_callback_user_command = 'USER_COMMAND'
* i_save = 'A'
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_fcat
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_data_display2 .
CLEAR gs_layout.
gs_layout-zebra = 'X'.
gs_layout-cwidth_opt = 'X'.
gs_layout-sel_mode = 'A'.
CLEAR gt_fcat.
PERFORM frm_fieldcat_set
USING: 'WERKS' '工厂',
'AUFNR' '订单号',
'STLBEZ' '物料号',
'MAKTX' '物料描述',
'VORNR' '工序号',
'KTSCH' '文本码',
'LTXA1' '工序短文本',
'BMSCH' '工序数量',
'MEINH' '工序单位',
'VGW01' '标准人工工时',
'VGW02' '标准机械工时',
'VGE01' '时间单位'.
gv_program = sy-repid.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = gv_program
** i_callback_pf_status_set = 'SET_PF_STATUS'
** i_callback_user_command = 'USER_COMMAND'
* i_save = 'A'
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_fcat
TABLES
t_outtab = gt_alv2.
* 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_data_display3 .
CLEAR gs_layout.
gs_layout-zebra = 'X'.
gs_layout-cwidth_opt = 'X'.
gs_layout-sel_mode = 'A'.
CLEAR gt_fcat.
PERFORM frm_fieldcat_set
USING: 'WERKS' '工厂',
'AUFNR' '订单号',
'STLBEZ' '物料号',
'MAKTX' '物料描述',
'POSNR' '项目号',
'MATNR' '组件物料',
'MAKTX' '组件物料描述',
'BDMNG' '需求数量',
'ENMNG' '提货数量',
'MEINS' '单位',
'AVOAU' '工序报废',
'ALPGR' '组',
'ALPRF' '优先级',
'VORNR' '工序'.
gv_program = sy-repid.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = gv_program
** i_callback_pf_status_set = 'SET_PF_STATUS'
** i_callback_user_command = 'USER_COMMAND'
* i_save = 'A'
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_fcat
TABLES
t_outtab = gt_alv3.
* 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.
*fieldcat设置
FORM frm_fieldcat_set USING VALUE(pv_name)
VALUE(pv_text).
DATA ls_fcat TYPE lvc_s_fcat.
ls_fcat-fieldname = pv_name. "字段名称
ls_fcat-scrtext_s = pv_text. "短文本
ls_fcat-scrtext_m = pv_text. "中文本
ls_fcat-scrtext_l = pv_text. "长文本
ls_fcat-no_zero = 'X'. "如果取值为零,则为空,既不输出零
APPEND ls_fcat TO gt_fcat.
ENDFORM.
3万+

被折叠的 条评论
为什么被折叠?



