*&---------------------------------------------------------------------*
*& 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, "POebelp    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-ZZPOVRbedat    TYPE ekko-bedat,  "采购订单日期:EKKO-BEDATzzpotp   TYPE ekko-zzpotp, "订单发放类型:即PO发放类型EKKO-ZZPOTP的描述zzpotp_t TYPE char100,waers    TYPE ekko-waers,  "货币单位:EKKO-WAERSverkf    TYPE lfm1-verkf,  "供应商联系人 LFM1-VERKFtelf1    TYPE lfa1-telf1,  "供应商联系电话 LFA1-TELF1name_cg  TYPE t024-eknam,zzisasso TYPE ekko-zzisasso,bsart    TYPE ekko-bsart,eknam    TYPE t024-eknam,  "采购员:取EKKO-EKGRP的名称T024-EKNAMlands    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-MSEH3eindt    TYPE eket-eindt,  "交货期:EKET-EINDTnetwr    TYPE ekpo-netwr,  "金额:EKPO-NETWRnetwr_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_alvWITH 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-ZZPOVRbedat    TYPE ekko-bedat,  "采购订单日期:EKKO-BEDATzzpotp   TYPE ekko-zzpotp, "订单发放类型:即PO发放类型EKKO-ZZPOTP的描述zzpotp_t TYPE char100,waers    TYPE ekko-waers,  "货币单位:EKKO-WAERSverkf    TYPE lfm1-verkf,  "供应商联系人 LFM1-VERKFtelf1    TYPE lfa1-telf1,  "供应商联系电话 LFA1-TELF1text_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-MSEH3netpr_d  TYPE p DECIMALS 6, "单价:EKPO-NETPR除以价格单位EKPO-PEINH,保留6位小数eindt    TYPE eket-eindt,  "交货期:EKET-EINDTmenge    TYPE ekpo-menge,  "数量:EKPO-MENGEmeins    TYPE ekpo-meins,  "单位netwr    TYPE ekpo-netwr,  "金额:EKPO-NETWRnetwr_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_TYPEDATA: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~lifnra~ekorga~ekgrpa~ebelna~waersa~zzrloca~zterma~zzpovra~bedata~zzpotpa~zzisassoa~bsarta~landsb~ebelpb~matnrb~mengeb~meinsb~netprb~peinhb~netwrb~plifz "按天的计划交货时间
         b~mwskzINTO CORRESPONDING FIELDS OF TABLE gt_alvFROM ekko AS aJOIN ekpo AS bON a~ebeln EQ b~ebelnWHERE a~ekorg EQ p_ekorgAND a~ekgrp EQ p_ekgrpAND a~lifnr IN s_lifnrAND a~bedat IN s_bedatAND a~loekz EQ space
*     AND a~frgke EQ 'R'AND a~ebeln IN s_ebelnAND 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_lfa1FROM lfa1FOR ALL ENTRIES IN gt_alvWHERE lifnr EQ gt_alv-lifnr.SORT lt_lfa1 BY lifnr.*& 物料描述SELECT *INTO CORRESPONDING FIELDS OF TABLE lt_maktFROM maktFOR ALL ENTRIES IN gt_alvWHERE matnr = gt_alv-matnrAND spras = sy-langu.SORT lt_makt BY matnr.*& 收货地点EKKO-ZZRLOC的描述SELECT *INTO CORRESPONDING FIELDS OF TABLE lt_z01mmtrlocFROM z01mmtrloc.SORT lt_z01mmtrloc BY zzrloc.*& PO发放类型SELECT *FROM z01mmtpotpINTO TABLE lt_z01mmtpotpFOR ALL ENTRIES IN gt_alvWHERE zzpotp = gt_alv-zzpotp .SORT lt_z01mmtpotp BY zzpotp.*& 取采购员描述SELECT *FROM t024INTO TABLE lt_t024FOR ALL ENTRIES IN gt_alvWHERE ekgrp = gt_alv-ekgrp.SORT  lt_t024 BY ekgrp.*& 取付款条件描述SELECT *FROM t052uINTO TABLE lt_t052uFOR ALL ENTRIES IN gt_alvWHERE 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 adrcFROM adrcWHERE 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'EXPORTINGaland   = l_alanddatab   = l_databmwskz   = l_mwskztxjcd   = l_txjcdTABLESt_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 mseh3INTO wa_alv-mseh3FROM t006aWHERE msehi EQ wa_alv-meinsAND spras EQ sy-langu.*&单价 = 净价/价格单位,(6位小数) NETPR/PEINHIF  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 eindtINTO wa_alv-eindtFROM eketWHERE ebeln EQ wa_alv-ebelnAND 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'EXPORTINGi_callback_program       = g_programi_default                = 'X'i_save                   = 'U'is_layout                = gw_layoutit_fieldcat              = gt_fieldcati_callback_pf_status_set = 'FRM_SET_STATUS'i_callback_user_command  = 'FRM_USER_COMMAND'TABLESt_outtab                 = gt_alvEXCEPTIONSprogram_error            = 1OTHERS                   = 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_STATUSFORM frm_user_commandUSING r_ucomm LIKE sy-ucommrs_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'IMPORTINGe_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          "修改DBCHANGING 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_tablt_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'EXPORTINGformname           = lc_sfnameIMPORTINGfm_name            = func_mod_nameEXCEPTIONSno_form            = 1no_function_module = 2OTHERS             = 3.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgnoWITH 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_nameEXPORTINGcontrol_parameters = control_parametersoutput_options     = output_optionsuser_settings      = spacein_tot_num         = lc_tot_numln_je_sum          = lc_je_sum
*        TABLESin_item            = gt_gncgimporting
*         DOCUMENT_OUTPUT_INFO       =job_output_info    = ls_otfdata
*         JOB_OUTPUT_OPTIONS =EXCEPTIONSformatting_error   = 1internal_error     = 2send_error         = 3user_canceled      = 4OTHERS             = 5.IF sy-subrc <> 0.DATA errortab TYPE tsferror.CALL FUNCTION 'SSF_READ_ERRORS'IMPORTINGerrortab = errortab.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ELSE.
*&调用打印control_parameters-no_open = 'X'.*&+++转换成PDFlt_otf[] = ls_otfdata-otfdata[].CALL FUNCTION 'CONVERT_OTF'EXPORTINGformat                = '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 existIMPORTINGbin_filesize          = l_bin_filesize
*           BIN_FILE              =TABLESotf                   = lt_otflines                 = lt_lines "t_pdf_tabEXCEPTIONSerr_max_linewidth     = 1err_format            = 2err_conv_not_possible = 3err_bad_otf           = 4OTHERS                = 5.*&PDF 预览CALL FUNCTION 'ZSTXBC_SSFCOMP_PDF_PREVIEW'EXPORTINGi_otf                    = lt_otf[]EXCEPTIONSconvert_otf_to_pdf_error = 1cntl_error               = 2OTHERS                   = 3.IF sy-subrc EQ 0.
*&调用保存 对话框CALL METHOD cl_gui_frontend_services=>file_save_dialogEXPORTING
*             window_title         =
*             default_extension    =
*             default_file_name    =
*             with_encoding        =file_filter          = '*.PDF'
*             initial_directory    =
*             prompt_on_overwrite  = 'X'CHANGINGfilename             = l_filenamepath                 = l_pathfullpath             = l_pathfilename
*             user_action          =
*             file_encoding        =EXCEPTIONScntl_error           = 1error_no_gui         = 2not_supported_by_gui = 3OTHERS               = 4.IF sy-subrc <> 0.ENDIF.l_bin_filesize = l_bin_filesize * 2.CALL FUNCTION 'GUI_DOWNLOAD'EXPORTINGbin_filesize            = l_bin_filesizefilename                = l_pathfilenamefiletype                = 'BIN'
*             APPEND                  = ' 'write_field_separator   = ' 'TABLESdata_tab                = lt_lines
*             fieldnames              = gt_fieldnamesEXCEPTIONSfile_write_error        = 1no_batch                = 2gui_refuse_filetransfer = 3invalid_type            = 4no_authority            = 5unknown_error           = 6header_not_allowed      = 7separator_not_allowed   = 8filesize_not_allowed    = 9header_too_long         = 10dp_error_create         = 11dp_error_send           = 12dp_error_write          = 13unknown_dp_error        = 14access_denied           = 15dp_out_of_memory        = 16disk_full               = 17dp_timeout              = 18file_not_found          = 19dataprovider_exception  = 20control_flush_error     = 21OTHERS                  = 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.

转载于:https://www.cnblogs.com/rainysblog/p/8214337.html

采购订单打印并预览PDF相关推荐

  1. window.print() 前端页面打印与预览PDF

    window.print()打印是浏览器自带的打印,实现原理是将html转换为pdf可以在线预览打印或者导出pdf,在任何网页上可通过Ctil+p快捷键调出浏览器打印程序,它可将整个网页打印出来,在我 ...

  2. SpringBoot(十五)_springboot实现预览pdf

    最近,项目上要做个打印的东西,还要预览.我想就直接生成pdf预览,然后用户选择打印 于是,昨天找了找资料.一般用itext 进行转pdf.于是我就用springboot试了试,代码比较简单,现在只是简 ...

  3. WEB在线预览PDF

    这是我在博客园发表的第一篇文章.以后会陆续把在线预览其他格式文档的解决方案发表出来. 解决思路:把pdf转换成html显示. 在线预览pdf我暂时了解3种解决方案,欢迎大家补充. 方案一: 利用pdf ...

  4. IOS 预览pdf,word文档的集中方式

    在iPhone中可以很方便的预览文档文件,如:pdf.word等等,这篇文章将以PDF为例.介绍三种预览PDF的方式,又分别从本地pdf文档和网络上的pdf文档进行对比. 预览本地PDF文档: 1.使 ...

  5. Vue-pdf实现在线预览PDF文件

    前言 在大多数项目中都会遇到在线预览PDF文件,项目使用的是element ui,使用vue-pdf实现. 安装依赖 npm install --save vue-pdf 相关参数 参数介绍: url ...

  6. 渲染预览PDF文档,轻松搞定,这方案真香!

    渲染预览PDF文档,轻松搞定,这方案真香! 1.前言 2.列举一些文档预览解决方案: 3.列举一些文档解析生成解决方案: 4.案列赏析 5.准备工作: 6.模板讲解: 7.代码实现: 8.效果图: 9 ...

  7. spring boot2.X word在线预览 pdf.js

    最近公司项目需求需要在线预览word文档,并且不能在在线下载和编辑.在此记录我是如何做的. 针对word的在线预览网上大多给的解决方案就是先把word文件转成pdf,然后通过pdf.js在线预览pdf ...

  8. vue-pdf实现预览pdf文件以及含有电子印章的pdf文件

    话不多说,上代码~ 1.页面: <template><el-dialog:title="title":visible.sync="openViewPdf ...

  9. VUE预览PDF文件并利用pdf.js获取鼠标选中的文字和搜索,在iframe中获取选中文字,监听鼠标事件,右键菜单

    一.VUE预览PDF文件并利用pdf.js获取鼠标选中的文字和搜索 需求实现:vue实现预览pdf文件,获取到鼠标选中的文字数据.调用pdf.js自带的搜索方法实现搜索功能(后期可以调用该接口满足其他 ...

最新文章

  1. 美国国防部黑客大比武 “白帽黑客”受邀请
  2. hp designiet 500_2020年HP学院壁纸
  3. Android Studio怎么设置悬浮提示文字框显示函数
  4. 视差滚动(Parallax Scrolling)插件补充
  5. 神经网络与推荐系统初步简介
  6. VS编译器安装Eigen
  7. Jsoup设置元素的文本内容
  8. httpclient base64 文件上传_代码级别的上传下载神器
  9. Linux部署安装JDK
  10. TCP / IP攻击:ARP缓存中毒的基本原理、TCP序列号预测和TCP重置攻击
  11. Win-MASM64汇编语言-NEG指令
  12. Linux Exploit系列之七 绕过 ASLR -- 第二部分
  13. 【转】XP远程桌面连接2008提示:远程计算机需要网络级别身份验证,而您的计算机不支持该验证 ....
  14. 导入项目jsp文件报错,但打开相应的文件并没有错误解决办法
  15. ITOP4412开发板学习前的准备2 -- 安装ADB驱动
  16. cdr软件百度百科_cdr软件是什么?cdr是什么软件?
  17. 【 移动硬盘安装Ubuntu18.04】
  18. Meltdown Spectre原理简要梳理
  19. linux unlink函数作用,unlink函数的作用
  20. 百亿级企业级 RPC 框架开源了!

热门文章

  1. Python爬虫自动识别验证码登陆
  2. delay在java中有什么用,java中DelayQueue的使用
  3. 钢铁侠也要换成女版的了???
  4. Postman的女朋友Postwoman来了:太酷了
  5. 数字孪生技术打造智慧车联网数据可视化大屏
  6. IOS 仿Android色轮代码
  7. 离子色谱-天然矿泉水中F-和Cl-的测定
  8. 兰州大学计算机专业基地班考试,兰大新生的基地班选拔考试
  9. 2020 程序员找工作指南
  10. Attention 注意力机制浅学