*&---------------------------------------------------------------------* *& 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 6, "单价 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 0. TYPES:tyt_alv TYPE ty_alv OCCURS 0. 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 6, "单价: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-001. 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-002. *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(00) 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 0 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 0. MESSAGE s001(00) 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 0. 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 0. 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 0. 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 0. 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 0. 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 0. 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 0. 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 / 10. "/ 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 \'0\'. SHIFT wa_alv-ebelp LEFT DELETING LEADING \'0\'. 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 0. MESSAGE s001(00) WITH \'未查询到满足条件的记录,请重试!\' DISPLAY LIKE \'E\'. STOP. ELSE. MESSAGE s001(00) 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 = &1. WA_FIELDCAT-SELTEXT_L = &2. WA_FIELDCAT-KEY = &3. WA_FIELDCAT-COL_POS = L_NN + 1. WA_FIELDCAT-JUST = &4. WA_FIELDCAT-OUTPUTLEN = &5. WA_FIELDCAT-FIX_COLUMN = &6. WA_FIELDCAT-NO_ZERO = &7. WA_FIELDCAT-EDIT = &8. 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 = 1 OTHERS = 2. 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(00) 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 = 1 no_function_module = 2 OTHERS = 3. IF sy-subrc <> 0. 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 + 1. 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 + 1. 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 = 1 internal_error = 2 send_error = 3 user_canceled = 4 OTHERS = 5. IF sy-subrc <> 0. 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 = 132 * 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 = 1 err_format = 2 err_conv_not_possible = 3 err_bad_otf = 4 OTHERS = 5. *&PDF 预览 CALL FUNCTION \'ZSTXBC_SSFCOMP_PDF_PREVIEW\' EXPORTING i_otf = lt_otf[] EXCEPTIONS convert_otf_to_pdf_error = 1 cntl_error = 2 OTHERS = 3. IF sy-subrc EQ 0. *&调用保存 对话框 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 = 1 error_no_gui = 2 not_supported_by_gui = 3 OTHERS = 4. IF sy-subrc <> 0. ENDIF. l_bin_filesize = l_bin_filesize * 2. 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 = 1 no_batch = 2 gui_refuse_filetransfer = 3 invalid_type = 4 no_authority = 5 unknown_error = 6 header_not_allowed = 7 separator_not_allowed = 8 filesize_not_allowed = 9 header_too_long = 10 dp_error_create = 11 dp_error_send = 12 dp_error_write = 13 unknown_dp_error = 14 access_denied = 15 dp_out_of_memory = 16 disk_full = 17 dp_timeout = 18 file_not_found = 19 dataprovider_exception = 20 control_flush_error = 21 OTHERS = 22. 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.