采购订单打印并预览PDF

时间:2023-03-09 15:33:39
采购订单打印并预览PDF
*&---------------------------------------------------------------------*
*& Report Z01MMF019
*& Author's name: CAIXIANG
*& Program title: 采购订单打印
*& Date: 20161031
*&---------------------------------------------------------------------*
*& Description:
*&1.根据以上选择条件,查询出所有符合条件的采购订单,在清单中选择并点击打印。
*&---------------------------------------------------------------------* REPORT z01mmf019 MESSAGE-ID zmm02. *&---------------------------------------------------------------------*
*& 数据声明
*&---------------------------------------------------------------------*
INCLUDE Z01MMF019_TOP.
*INCLUDE z01mmf102_top.
*&---------------------------------------------------------------------*
*& 包含 Z01MMF068_TOP
*&---------------------------------------------------------------------* TABLES: z01mm_s_068,
ekko,
ekpo,
lfa1. *&---------------------------------------------------------------------*
*
*计划交货日期,
*单价 = 净价/价格单位,(6位小数) NETPR/PEINH
*币别
*&---------------------------------------------------------------------*
TYPES:BEGIN OF ty_alv,
sel TYPE c, "标识:是否已选择 'X' 选中
lin TYPE sy-tabix,
*&抬头
ebeln TYPE ekpo-ebeln, "PO
ebelp TYPE ekpo-ebelp, "PO行
lifnr TYPE ekko-lifnr, "供应商
namel TYPE char100, "供应商名称
ekorg TYPE ekko-ekorg, "采购组织
ekgrp TYPE ekko-ekgrp, "采购组
address TYPE char100, "供应商地址(ADRC-STREET+ADRC-STR_SUPPL1)
zzrloc TYPE ekko-zzrloc, "贸易方式:即收货地点 EKKO-ZZRLOC的描述
zzrloc_t TYPE char100,
zterm TYPE ekko-zterm, "付款方式:根据付款条件EKKO-ZTERM取其描述
zterm_t TYPE char100,
zzpovr TYPE ekko-zzpovr, "订单版本号:EKKO-ZZPOVR
bedat TYPE ekko-bedat, "采购订单日期:EKKO-BEDAT
zzpotp TYPE ekko-zzpotp, "订单发放类型:即PO发放类型EKKO-ZZPOTP的描述
zzpotp_t TYPE char100,
waers TYPE ekko-waers, "货币单位:EKKO-WAERS
verkf TYPE lfm1-verkf, "供应商联系人 LFM1-VERKF
telf1 TYPE lfa1-telf1, "供应商联系电话 LFA1-TELF1
name_cg TYPE t024-eknam,
zzisasso TYPE ekko-zzisasso,
bsart TYPE ekko-bsart,
eknam TYPE t024-eknam, "采购员:取EKKO-EKGRP的名称T024-EKNAM
lands TYPE ekko-lands,
*&项目
matnr TYPE ekpo-matnr, "物料
maktx TYPE makt-maktx, "物料长文本
menge TYPE ekpo-menge, "数量
meins TYPE ekpo-meins, "单位
plifz TYPE ekpo-plifz, "按天的计划交货时间
netpr TYPE ekpo-netpr, "净价
peinh TYPE ekpo-peinh, "价格单位
netpr_d TYPE p DECIMALS , "单价 kbetr TYPE konp-kbetr, "含税:根据税码EKPO- MWSKZ取税率,如:17%
mseh3 TYPE t006a-mseh3, "单位:(度量单位)根据EKPO-MEINS取其商业名称T006-MSEH3
eindt TYPE eket-eindt, "交货期:EKET-EINDT
netwr TYPE ekpo-netwr, "金额:EKPO-NETWR
netwr_s TYPE ekpo-netwr, "总额:汇总所有行的金额
text_po TYPE char100, "备注:PO抬头的表头文本
mwskz TYPE ekpo-mwskz,
flag TYPE c,
* include TYPE z01mm_s_069.
END OF ty_alv. TYPES:tt_alv TYPE STANDARD TABLE OF ty_alv
WITH DEFAULT KEY INITIAL SIZE .
TYPES:tyt_alv TYPE ty_alv OCCURS .
DATA:gt_alv TYPE STANDARD TABLE OF ty_alv,
wa_alv TYPE ty_alv. TYPES:BEGIN OF ty_gncg,
index TYPE sy-tabix,
*抬头:
namel LIKE lfa1-name1, "供应商名称(LFA1-NAME1+NAME2)
lifnr LIKE ekko-lifnr, "供应商编码
address TYPE char100, "供应商地址(ADRC-STREET+ADRC-STR_SUPPL1)
zzrloc TYPE ekko-zzrloc, "贸易方式:即收货地点 EKKO-ZZRLOC的描述
zzrloc_t TYPE char100,
zterm TYPE ekko-zterm, "付款方式:根据付款条件EKKO-ZTERM取其描述
zterm_t TYPE char100,
zzpovr TYPE ekko-zzpovr, "订单版本号:EKKO-ZZPOVR
bedat TYPE ekko-bedat, "采购订单日期:EKKO-BEDAT
zzpotp TYPE ekko-zzpotp, "订单发放类型:即PO发放类型EKKO-ZZPOTP的描述
zzpotp_t TYPE char100,
waers TYPE ekko-waers, "货币单位:EKKO-WAERS
verkf TYPE lfm1-verkf, "供应商联系人 LFM1-VERKF
telf1 TYPE lfa1-telf1, "供应商联系电话 LFA1-TELF1
text_po TYPE string, "备注:PO抬头的表头文本
zztmcp TYPE ekko-zztmcp, "TMK 采购单编号
inco TYPE string, *行项目
ebeln TYPE ekpo-ebeln,
ebelp TYPE ekpo-ebelp, "项目
matnr TYPE ekpo-matnr, "物品编码
maktx TYPE makt-maktx, "物料描述:根据物料取其长文本
kbetr TYPE konp-kbetr, "含税:根据税码EKPO- MWSKZ取税率,如:17%
mseh3 TYPE t006a-mseh3, "单位:(度量单位)根据EKPO-MEINS取其商业名称T006-MSEH3
netpr_d TYPE p DECIMALS , "单价:EKPO-NETPR除以价格单位EKPO-PEINH,保留6位小数
eindt TYPE eket-eindt, "交货期:EKET-EINDT
menge TYPE ekpo-menge, "数量:EKPO-MENGE
meins TYPE ekpo-meins, "单位
netwr TYPE ekpo-netwr, "金额:EKPO-NETWR
netwr_s TYPE ekpo-netwr, "总额:汇总所有行的金额
*脚注:
eknam TYPE t024-eknam, "采购员:取EKKO-EKGRP的名称T024-EKNAM
*背面条款:
page TYPE sy-tabix, "页码
text TYPE string,
END OF ty_gncg. DATA:gt_gncg TYPE STANDARD TABLE OF ty_gncg,
wa_gncg TYPE ty_gncg.
*----------------------------------------------------------------------
* Data parameters for alv report use
*----------------------------------------------------------------------
DATA: g_program TYPE sy-repid,
gw_layout TYPE slis_layout_alv,
gt_fieldcat TYPE slis_t_fieldcat_alv,
wa_fieldcat TYPE slis_fieldcat_alv,
gt_event TYPE slis_t_event,
wa_event TYPE slis_alv_event.
DATA: g_grid TYPE REF TO cl_gui_alv_grid.
DATA: g_tabix TYPE i.
DATA: g_len TYPE i. *----------------------------------------------------------------------
* Other use
*----------------------------------------------------------------------
DATA:lt_list TYPE vrm_values,
ls_value LIKE LINE OF lt_list. *&---------------------------------------------------------------------*
*& 选择屏幕
*&---------------------------------------------------------------------*
INCLUDE Z01MMF019_SCR.
*INCLUDE z01mmf102_scr.
*&---------------------------------------------------------------------*
*& 包含 Z01MMF068_SCR
*&---------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-.
PARAMETERS:p_ekorg LIKE ekko-ekorg OBLIGATORY DEFAULT 'M011',
p_ekgrp LIKE ekko-ekgrp OBLIGATORY DEFAULT 'A06'. SELECT-OPTIONS:s_lifnr FOR lfa1-lifnr,
s_bedat FOR ekko-bedat,
s_ebeln FOR ekko-ebeln. *PARAMETERS:p_type AS LISTBOX TYPE CHAR10 VISIBLE LENGTH 20 DEFAULT '国内采购订单',
* P_FLAG TYPE CHAR5 NO-DISPLAY.
SELECTION-SCREEN END OF BLOCK b1. SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-.
*1. 国内采购订单: 采购组织M011,订单收货地点EKKO-ZZRLOC=Z01或Z05
*2. 联动采购订单TMC: 采购组织M011,订单联动标识EKKO-ZZISASSO=X
*3. 联动采购订单TMK: 采购组织S061,订单联动标识EKKO-ZZISASSO=X
*4. 联动采购订单TMK(English):采购组织S061,订单联动标识EKKO-ZZISASSO=X
*5. 模具采购订单TMC:采购组织M011,订单类型EKKO-BSART=Z007
*6. 模具采购订单TMK:采购组织S061,订单类型EKKO-BSART=Z007
PARAMETERS:rb_01 RADIOBUTTON GROUP g1 DEFAULT 'X' USER-COMMAND rb,
rb_02 RADIOBUTTON GROUP g1,
rb_03 RADIOBUTTON GROUP g1,
rb_04 RADIOBUTTON GROUP g1,
rb_05 RADIOBUTTON GROUP g1,
rb_06 RADIOBUTTON GROUP g1.
SELECTION-SCREEN END OF BLOCK b2. *&---------------------------------------------------------------------*
*& 子程序
*&---------------------------------------------------------------------*
*INCLUDE z01mmf169_frm. INITIALIZATION. AT SELECTION-SCREEN.
PERFORM frm_check_auth. AT SELECTION-SCREEN OUTPUT.
PERFORM frm_init_ptype. *&---------------------------------------------------------------------*
*& 程序主事件
*&---------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM frm_get_data.
PERFORM frm_alv_out. *&---------------------------------------------------------------------*
*& Form FRM_INIT_PTYPE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_init_ptype .
REFRESH lt_list . CASE 'X'.
WHEN rb_01 OR rb_02 OR rb_05.
p_ekorg = 'M011'.
WHEN rb_03 OR rb_04 OR rb_06.
p_ekorg = 'S061'.
WHEN OTHERS .
ENDCASE. IF p_ekorg NE 'M011' AND p_ekorg NE 'S061'.
MESSAGE s001() WITH '限定采购组织要为M011或S061!' DISPLAY LIKE 'E'.
STOP.
ENDIF. ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_get_data .
*& 订单打印类型 P_TYPE
DATA:l_tabix TYPE sy-tabix.
DATA:adrc TYPE adrc. DATA:lt_alv TYPE STANDARD TABLE OF ty_alv.
DATA:lt_lfa1 TYPE STANDARD TABLE OF lfa1,
ls_lfa1 TYPE lfa1.
DATA:lt_makt TYPE STANDARD TABLE OF makt,
ls_makt TYPE makt.
DATA:lt_z01mmtrloc TYPE STANDARD TABLE OF z01mmtrloc,
ls_z01mmtrloc TYPE z01mmtrloc.
DATA:lt_z01mmtpotp TYPE STANDARD TABLE OF z01mmtpotp,
ls_z01mmtpotp TYPE z01mmtpotp.
DATA:lt_t024 TYPE STANDARD TABLE OF t024,
ls_t024 TYPE t024.
DATA:lt_t052u TYPE STANDARD TABLE OF t052u,
ls_t052u TYPE t052u.
DATA:lt_ftaxp LIKE ftaxp OCCURS WITH HEADER LINE,
l_aland LIKE rf82t-land1,
l_datab LIKE rf82t-datab,
l_mwskz LIKE rf82t-mwskz,
l_txjcd LIKE rf82t-txjcd. SELECT a~lifnr
a~ekorg
a~ekgrp
a~ebeln
a~waers
a~zzrloc
a~zterm
a~zzpovr
a~bedat
a~zzpotp
a~zzisasso
a~bsart
a~lands b~ebelp
b~matnr
b~menge
b~meins
b~netpr
b~peinh
b~netwr
b~plifz "按天的计划交货时间
b~mwskz INTO CORRESPONDING FIELDS OF TABLE gt_alv
FROM ekko AS a
JOIN ekpo AS b
ON a~ebeln EQ b~ebeln
WHERE a~ekorg EQ p_ekorg
AND a~ekgrp EQ p_ekgrp
AND a~lifnr IN s_lifnr
AND a~bedat IN s_bedat
AND a~loekz EQ space
* AND a~frgke EQ 'R'
AND a~ebeln IN s_ebeln
AND b~loekz EQ space.
IF sy-subrc NE .
MESSAGE s001() WITH '未查询到满足条件的记录,请重试!' DISPLAY LIKE 'E'.
STOP.
ENDIF. * RANGES:r_zzrloc FOR ekko-zzrloc.
* CASE 'X'.
* WHEN rb_01.
* r_zzrloc(3) = 'IEQ'.
* r_zzrloc-low = 'Z01'.
* APPEND r_zzrloc.
* CLEAR r_zzrloc.
* r_zzrloc(3) = 'IEQ'.
* r_zzrloc-low = 'Z05'.
* APPEND r_zzrloc.
* CLEAR r_zzrloc.
* DELETE gt_alv WHERE zzrloc NOT IN r_zzrloc.
* WHEN rb_02 OR rb_03 OR rb_04.
* DELETE gt_alv WHERE zzisasso NE 'X'.
* WHEN rb_05 OR rb_06.
* DELETE gt_alv WHERE bsart NE 'Z007'."采购凭证类型
*
* WHEN OTHERS.
* ENDCASE. * lt_alv = gt_alv.
* SORT lt_alv by zzpotp.
* delete ADJACENT DUPLICATES FROM lt_alv COMPARING zzpotp. SELECT *
INTO CORRESPONDING FIELDS OF TABLE lt_lfa1
FROM lfa1
FOR ALL ENTRIES IN gt_alv
WHERE lifnr EQ gt_alv-lifnr.
SORT lt_lfa1 BY lifnr. *& 物料描述
SELECT *
INTO CORRESPONDING FIELDS OF TABLE lt_makt
FROM makt
FOR ALL ENTRIES IN gt_alv
WHERE matnr = gt_alv-matnr
AND spras = sy-langu.
SORT lt_makt BY matnr. *& 收货地点EKKO-ZZRLOC的描述
SELECT *
INTO CORRESPONDING FIELDS OF TABLE lt_z01mmtrloc
FROM z01mmtrloc.
SORT lt_z01mmtrloc BY zzrloc. *& PO发放类型
SELECT *
FROM z01mmtpotp
INTO TABLE lt_z01mmtpotp
FOR ALL ENTRIES IN gt_alv
WHERE zzpotp = gt_alv-zzpotp .
SORT lt_z01mmtpotp BY zzpotp. *& 取采购员描述
SELECT *
FROM t024
INTO TABLE lt_t024
FOR ALL ENTRIES IN gt_alv
WHERE ekgrp = gt_alv-ekgrp.
SORT lt_t024 BY ekgrp. *& 取付款条件描述
SELECT *
FROM t052u
INTO TABLE lt_t052u
FOR ALL ENTRIES IN gt_alv
WHERE spras = 'ZH'
AND zterm = gt_alv-zterm . LOOP AT gt_alv INTO wa_alv.
l_tabix = sy-tabix. READ TABLE lt_lfa1 INTO ls_lfa1 WITH KEY lifnr = wa_alv-lifnr BINARY SEARCH.
IF sy-subrc EQ .
CONCATENATE ls_lfa1-name1 ls_lfa1-name2 INTO wa_alv-namel.
*&供应商地址
CLEAR:adrc.
SELECT SINGLE *
INTO adrc
FROM adrc
WHERE addrnumber EQ ls_lfa1-adrnr.
IF sy-subrc EQ .
CONCATENATE adrc-street adrc-str_suppl1 INTO wa_alv-address.
ENDIF.
ENDIF. READ TABLE lt_makt INTO ls_makt WITH KEY matnr = wa_alv-matnr BINARY SEARCH.
IF sy-subrc EQ .
wa_alv-maktx = ls_makt-maktx.
ENDIF. *& 贸易方式
READ TABLE lt_z01mmtrloc INTO ls_z01mmtrloc WITH KEY zzrloc = wa_alv-zzrloc BINARY SEARCH.
IF sy-subrc EQ .
wa_alv-zzrloc_t = ls_z01mmtrloc-zzrloct.
ENDIF. *& 付款条件
READ TABLE lt_t052u INTO ls_t052u WITH KEY zterm = wa_alv-zterm BINARY SEARCH.
IF sy-subrc EQ .
wa_alv-zterm_t = ls_t052u-zterm.
ENDIF. *& PO订单发放类型
READ TABLE lt_z01mmtpotp INTO ls_z01mmtpotp WITH KEY zzpotp = wa_alv-zzpotp BINARY SEARCH.
IF sy-subrc EQ .
wa_alv-zzpotp_t = ls_z01mmtpotp-zzpotpt.
ENDIF. *& 采购员
READ TABLE lt_t024 INTO ls_t024 WITH KEY ekgrp = wa_alv-ekgrp BINARY SEARCH.
IF sy-subrc EQ .
wa_alv-eknam = ls_t024-eknam.
ENDIF. *& 含税->税率
CLEAR:l_aland,l_datab ,l_mwskz,l_txjcd,
lt_ftaxp,lt_ftaxp[].
l_aland = wa_alv-lands."报告国家
l_datab = wa_alv-bedat.
l_mwskz = wa_alv-mwskz.
l_txjcd = wa_alv-mwskz.
CALL FUNCTION 'GET_TAX_PERCENTAGE'
EXPORTING
aland = l_aland
datab = l_datab
mwskz = l_mwskz
txjcd = l_txjcd
TABLES
t_ftaxp = lt_ftaxp.
LOOP AT lt_ftaxp WHERE kschl = 'MWVS'.
*& 计算出税率
IF lt_ftaxp-kbetr IS NOT INITIAL.
wa_alv-kbetr = lt_ftaxp-kbetr / . "/ 1000.
ENDIF .
ENDLOOP. *&单位
SELECT SINGLE mseh3
INTO wa_alv-mseh3
FROM t006a
WHERE msehi EQ wa_alv-meins
AND spras EQ sy-langu. *&单价 = 净价/价格单位,(6位小数) NETPR/PEINH
IF wa_alv-peinh IS NOT INITIAL.
wa_alv-netpr_d = wa_alv-netpr / wa_alv-peinh.
ELSE.
wa_alv-netpr_d = wa_alv-netpr.
ENDIF. *&交货日期
SELECT SINGLE eindt
INTO wa_alv-eindt
FROM eket
WHERE ebeln EQ wa_alv-ebeln
AND ebelp EQ wa_alv-ebelp. SHIFT wa_alv-ebeln LEFT DELETING LEADING ''.
SHIFT wa_alv-ebelp LEFT DELETING LEADING ''. MODIFY gt_alv FROM wa_alv INDEX l_tabix.
CLEAR:wa_alv.
ENDLOOP. SORT gt_alv BY ebeln ebelp.
g_len = lines( gt_alv ).
IF g_len EQ .
MESSAGE s001() WITH '未查询到满足条件的记录,请重试!' DISPLAY LIKE 'E'.
STOP.
ELSE.
MESSAGE s001() WITH '找到数据条目:' g_len.
ENDIF. ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ALV_OUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_alv_out .
DATA: l_nn TYPE i. DEFINE add_fieldcat.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-FIELDNAME = &.
WA_FIELDCAT-SELTEXT_L = &.
WA_FIELDCAT-KEY = &.
WA_FIELDCAT-COL_POS = L_NN + .
WA_FIELDCAT-JUST = &.
WA_FIELDCAT-OUTPUTLEN = &.
WA_FIELDCAT-FIX_COLUMN = &.
WA_FIELDCAT-NO_ZERO = &.
WA_FIELDCAT-EDIT = &.
APPEND WA_FIELDCAT TO GT_FIELDCAT.
END-OF-DEFINITION. CLEAR gt_fieldcat.
REFRESH gt_fieldcat.
add_fieldcat 'LIFNR ' '供应商' '' '' '' '' '' ''.
add_fieldcat 'NAMEL ' '供应商名称' '' '' '' '' '' ''.
add_fieldcat 'EKORG ' '采购组织' '' '' '' '' '' ''.
add_fieldcat 'EKGRP ' '采购组' '' '' '' '' '' ''.
add_fieldcat 'EBELN ' 'PO' '' '' '' '' '' ''.
add_fieldcat 'EBELP ' 'PO行' '' '' '' '' '' ''.
add_fieldcat 'MATNR ' '物料' '' '' '' '' '' ''.
add_fieldcat 'MAKTX ' '物料长文本' '' '' '' '' '' ''.
add_fieldcat 'MENGE ' '数量' '' '' '' '' '' ''.
add_fieldcat 'MEINS ' '单位' '' '' '' '' '' ''.
add_fieldcat 'EINDT ' '计划交货日期' '' '' '' '' '' ''.
add_fieldcat 'NETPR_D' '单价' '' '' '' '' '' ''.
add_fieldcat 'WAERS ' '币别' '' '' '' '' '' ''. gw_layout-colwidth_optimize = 'X'.
gw_layout-zebra = 'X'.
gw_layout-box_fieldname = 'SEL'. g_program = sy-repid.
*& 调用函数显示ALV列表
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = g_program
i_default = 'X'
i_save = 'U'
is_layout = gw_layout
it_fieldcat = gt_fieldcat
i_callback_pf_status_set = 'FRM_SET_STATUS'
i_callback_user_command = 'FRM_USER_COMMAND'
TABLES
t_outtab = gt_alv
EXCEPTIONS
program_error =
OTHERS = . ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_AUTH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_check_auth .
*权限要求: 按采购组织、采购组检查权限 ENDFORM.
FORM frm_set_status USING extab TYPE slis_t_extab.
**功能: 设置ALV菜单栏
DATA:
l_rec_excfunc LIKE LINE OF extab. "工作区: 不用显示的菜单项
**STEP 1. 设置菜单
**STEP 1.1 隐藏掉不需要的标准按钮
CLEAR l_rec_excfunc.
l_rec_excfunc-fcode = '&RNT'.
APPEND l_rec_excfunc TO extab. CLEAR l_rec_excfunc.
l_rec_excfunc-fcode = '&REFRESH'.
APPEND l_rec_excfunc TO extab. CLEAR l_rec_excfunc.
l_rec_excfunc-fcode = '&DATA_SAVE'.
APPEND l_rec_excfunc TO extab. CLEAR l_rec_excfunc.
l_rec_excfunc-fcode = '&SAL'.
APPEND l_rec_excfunc TO extab. CLEAR l_rec_excfunc.
l_rec_excfunc-fcode = '&ALL'.
APPEND l_rec_excfunc TO extab. CLEAR l_rec_excfunc.
l_rec_excfunc-fcode = '&UMC'.
APPEND l_rec_excfunc TO extab. CLEAR l_rec_excfunc.
l_rec_excfunc-fcode = '%SL'.
APPEND l_rec_excfunc TO extab. CLEAR l_rec_excfunc.
l_rec_excfunc-fcode = '&VEXCEL'.
APPEND l_rec_excfunc TO extab. CLEAR l_rec_excfunc.
l_rec_excfunc-fcode = '&AQW'.
APPEND l_rec_excfunc TO extab. CLEAR l_rec_excfunc.
l_rec_excfunc-fcode = '&ABC'.
APPEND l_rec_excfunc TO extab. CLEAR l_rec_excfunc.
l_rec_excfunc-fcode = '&GRAPH'.
APPEND l_rec_excfunc TO extab. CLEAR l_rec_excfunc.
l_rec_excfunc-fcode = '&INFO'.
APPEND l_rec_excfunc TO extab. **STEP 2. 激活显示自定义菜单
SET PF-STATUS 'ZSTATUS2' EXCLUDING extab.
ENDFORM. "FRM_SET_PF_STATUS FORM frm_user_command
USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
***********************************************************************
**功能: 响应用户的ALV上的操作
**输入:(屏幕操作命令)
**返回:
** (根据不同命令有不同的处理程序)
***********************************************************************
**BELOW**数据声明
DATA:
lv_subrc LIKE sy-subrc, "返回码:0表示成功,1表示失败
lc_msgtx TYPE msgtx. "说明信息
**ABOVE**数据声明
**BELOW**初始化
DATA: lr_grid TYPE REF TO cl_gui_alv_grid.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = lr_grid.
CALL METHOD lr_grid->check_changed_data.
rs_selfield-refresh = 'X'. "要求执行完此子程序后自动刷新ALV清单 **STEP 1. 操作
CASE r_ucomm.
WHEN '&ZSALL'. "选择全部条目
PERFORM frm_ucomm_zsall "选择全部条目
CHANGING gt_alv[]. "本次处理前后的ALV数据
WHEN '&ZDSAL'. "取消全部选择
PERFORM frm_ucomm_zdsal "取消全部选择
CHANGING gt_alv[]. "本次处理前后的ALV数据 WHEN '&ZPRINT'. "打印
PERFORM frm_ucomm_print "修改DB
CHANGING gt_alv[]. "本次确认调整前后的ALV数据 ENDCASE .
*ABOVE**程序主体
ENDFORM. "FRM_USER_COMMAND
*&---------------------------------------------------------------------*
*& Form FRM_UCOMM_ZSALL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_GT_ALV[] text
*----------------------------------------------------------------------*
FORM frm_ucomm_zsall CHANGING p_gt_alv TYPE tyt_alv.
LOOP AT gt_alv INTO wa_alv WHERE sel IS INITIAL .
wa_alv-sel = 'X'.
MODIFY gt_alv FROM wa_alv.
CLEAR:wa_alv.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_UCOMM_ZDSAL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_GT_ALV[] text
*----------------------------------------------------------------------*
FORM frm_ucomm_zdsal CHANGING p_gt_alv TYPE tyt_alv.
LOOP AT gt_alv INTO wa_alv WHERE sel IS NOT INITIAL .
wa_alv-sel = ''.
MODIFY gt_alv FROM wa_alv.
CLEAR:wa_alv.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_UCOMM_ZPOST
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_LV_SUBRC text
* <--P_LC_MSGTX text
* <--P_GT_ALV[] text
*----------------------------------------------------------------------*
FORM frm_ucomm_print CHANGING p_gt_alv TYPE tyt_alv.
DATA:l_msg TYPE string,
lt_alv TYPE STANDARD TABLE OF ty_alv,
* lt_alv_prt TYPE STANDARD TABLE OF z01mmf024_item,
* ls_alv_prt TYPE z01mmf024_item,
ls_alv TYPE ty_alv,
func_mod_name TYPE rs38l_fnam,
output_options TYPE ssfcompop,
it_job_output_info TYPE ssfcrescl,
control_parameters TYPE ssfctrlop,
lc_sfname TYPE tdsfname, "VALUE 'Z01MMF102',
lc_index TYPE sy-index, "计数器
lc_number TYPE sy-index, "计数器
lc_num TYPE sy-index,
lc_tot TYPE int4,
lc_int TYPE int4,
lc_tot_num TYPE string,
lc_je TYPE ekpo-netwr,
lc_je_sum TYPE string. DATA:ls_otfdata TYPE ssfcrescl,
lt_otf TYPE TABLE OF itcoo,
l_bin_filesize TYPE i, "soli_tab
lt_lines TYPE TABLE OF tline,
l_filename TYPE string,
l_path TYPE string,
l_pathfilename TYPE string. CASE 'X'.
WHEN rb_01.
lc_sfname = 'Z01MMF102_1'.
WHEN rb_02.
lc_sfname = 'Z01MMF102_2'.
WHEN rb_03.
lc_sfname = 'Z01MMF102_3'.
WHEN rb_04.
lc_sfname = 'Z01MMF102_4'.
WHEN rb_05.
lc_sfname = 'Z01MMF102_5'.
WHEN rb_06.
lc_sfname = 'Z01MMF102_6'.
WHEN OTHERS.
ENDCASE. * BREAK XIANGC.
APPEND LINES OF p_gt_alv TO lt_alv.
DELETE lt_alv WHERE sel IS INITIAL. IF lt_alv IS INITIAL.
l_msg = '至少要选中一笔条目才可进行操作!'.
MESSAGE i001() WITH l_msg.
RETURN.
ELSE.
* 选中凭证的一行,则默认将凭证所有行选中
PERFORM frm_change_select_item CHANGING p_gt_alv. *. 初始化打印控制参数
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = lc_sfname
IMPORTING
fm_name = func_mod_name
EXCEPTIONS
no_form =
no_function_module =
OTHERS = .
IF sy-subrc <> .
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.
* 1 by 1 ,循环打印
SORT lt_alv BY ebeln.
DELETE ADJACENT DUPLICATES FROM lt_alv COMPARING ebeln.
lc_index = lines( lt_alv ). LOOP AT lt_alv INTO ls_alv.
lc_number = lc_number + .
output_options-tdimmed = 'X'.
control_parameters-getotf = 'X'. IF lc_number < lc_index.
control_parameters-no_close = 'X'.
ELSE.
*&打印关闭
control_parameters-no_close = space.
ENDIF. CLEAR:gt_gncg,lc_num.
CLEAR:lc_tot_num,lc_tot,
lc_je_sum,lc_je.
LOOP AT p_gt_alv INTO wa_alv WHERE sel = 'X' AND ebeln = ls_alv-ebeln.
MOVE-CORRESPONDING wa_alv TO wa_gncg.
lc_num = lc_num + .
wa_gncg-index = lc_num.
lc_tot = lc_tot + wa_gncg-menge.
lc_je = lc_je + wa_gncg-netwr.
APPEND wa_gncg TO gt_gncg.
CLEAR: wa_alv,wa_gncg.
ENDLOOP. lc_tot_num = lc_tot.
lc_je_sum = lc_je.
CALL FUNCTION func_mod_name
EXPORTING
control_parameters = control_parameters
output_options = output_options
user_settings = space
in_tot_num = lc_tot_num
ln_je_sum = lc_je_sum
* TABLES
in_item = gt_gncg
importing
* DOCUMENT_OUTPUT_INFO =
job_output_info = ls_otfdata
* JOB_OUTPUT_OPTIONS =
EXCEPTIONS
formatting_error =
internal_error =
send_error =
user_canceled =
OTHERS = .
IF sy-subrc <> .
DATA errortab TYPE tsferror.
CALL FUNCTION 'SSF_READ_ERRORS'
IMPORTING
errortab = errortab. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
*&调用打印
control_parameters-no_open = 'X'. *&+++转换成PDF
lt_otf[] = ls_otfdata-otfdata[].
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
format = 'PDF'
max_linewidth =
* ARCHIVE_INDEX = ' '
* COPYNUMBER = 0
* ASCII_BIDI_VIS2LOG = ' '
* PDF_DELETE_OTFTAB = ' '
* PDF_USERNAME = ' ' "don't exist
* PDF_PREVIEW = ' ' "don't exist
* USE_CASCADING = ' ' "don't exist
IMPORTING
bin_filesize = l_bin_filesize
* BIN_FILE =
TABLES
otf = lt_otf
lines = lt_lines "t_pdf_tab
EXCEPTIONS
err_max_linewidth =
err_format =
err_conv_not_possible =
err_bad_otf =
OTHERS = . *&PDF 预览
CALL FUNCTION 'ZSTXBC_SSFCOMP_PDF_PREVIEW'
EXPORTING
i_otf = lt_otf[]
EXCEPTIONS
convert_otf_to_pdf_error =
cntl_error =
OTHERS = .
IF sy-subrc EQ .
*&调用保存 对话框
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
* window_title =
* default_extension =
* default_file_name =
* with_encoding =
file_filter = '*.PDF'
* initial_directory =
* prompt_on_overwrite = 'X'
CHANGING
filename = l_filename
path = l_path
fullpath = l_pathfilename
* user_action =
* file_encoding =
EXCEPTIONS
cntl_error =
error_no_gui =
not_supported_by_gui =
OTHERS = .
IF sy-subrc <> .
ENDIF. l_bin_filesize = l_bin_filesize * .
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = l_bin_filesize
filename = l_pathfilename
filetype = 'BIN'
* APPEND = ' '
write_field_separator = ' '
TABLES
data_tab = lt_lines
* fieldnames = gt_fieldnames
EXCEPTIONS
file_write_error =
no_batch =
gui_refuse_filetransfer =
invalid_type =
no_authority =
unknown_error =
header_not_allowed =
separator_not_allowed =
filesize_not_allowed =
header_too_long =
dp_error_create =
dp_error_send =
dp_error_write =
unknown_dp_error =
access_denied =
dp_out_of_memory =
disk_full =
dp_timeout =
file_not_found =
dataprovider_exception =
control_flush_error =
OTHERS = .
ENDIF. ENDIF.
ENDLOOP.
ENDIF. ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHANGE_SELECT_ITEM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_P_GT_ALV text
*----------------------------------------------------------------------*
FORM frm_change_select_item CHANGING gt_alv TYPE tyt_alv.
DATA :lt_alv TYPE STANDARD TABLE OF ty_alv,
ls_alv TYPE ty_alv.
APPEND LINES OF gt_alv TO lt_alv.
DELETE lt_alv WHERE sel IS INITIAL.
SORT lt_alv BY ebeln.
DELETE ADJACENT DUPLICATES FROM lt_alv COMPARING ebeln. LOOP AT lt_alv INTO ls_alv.
LOOP AT gt_alv INTO wa_alv WHERE ebeln = ls_alv-ebeln AND sel IS INITIAL.
wa_alv-sel = 'X'.
MODIFY gt_alv FROM wa_alv.
CLEAR:wa_alv.
ENDLOOP.
CLEAR:ls_alv.
ENDLOOP. ENDFORM.