*&---------------------------------------------------------------------*
*& Report
*&
*&---------------------------------------------------------------------*
*&程序名称:
*&事物代码:
*&导入模板:无
*&作者:
*&时间:2016/5/18
*&--------------------------------------------------------------------
REPORT zsdr045.
INCLUDE zsdr045_inc.
*INCLUDE zsdr007_inc.
TYPE-POOLS: slis.
TABLES:likp, kna1, lips ,mkpf ,mseg ,vttp,vbak.
TYPES: BEGIN OF ty_all,
vbelv LIKE vbfa-vbelv , "销售订单号
tknum LIKE vttp-tknum, "装运单号
auart LIKE vbak-auart, "销售订单类型
auart_txt LIKE tvakt-bezei, "销售订单类型描述
vkorg LIKE vbak-vkorg, "销售组织
vtweg LIKE vbak-vtweg, "分销渠道
lfart LIKE likp-lfart, "交货类型
lfart_txt LIKE tvlkt-vtext, "交货类型描述
vbeln_im LIKE lips-vbeln , "交货单号
mblnr LIKE mseg-mblnr, "物料凭证
shkzg LIKE mseg-shkzg, "借贷标识
zeile LIKE mseg-zeile, "凭证项目
smbln LIKE mseg-smbln, "参考物料凭证
smblp LIKE mseg-smblp, "参考物料项目
bwart LIKE mseg-bwart, "移动类型
kunag LIKE likp-kunag , "客户
kunag_txt LIKE kna1-name1, "客户名称
kunnr LIKE likp-kunnr , "送达方
kunnr_txt LIKE kna1-name1, "送达方名称
stras LIKE kna1-stras , "客户地址
budat_mkpf LIKE mseg-budat_mkpf , "出库日期
cputm_mkpf LIKE mseg-cputm_mkpf , "输入时间
telf1 LIKE kna1-telf1 , "电话
usnam_mkpf LIKE mseg-usnam_mkpf , "经办人
name_last LIKE adrp-name_last, "创建者姓
name_first LIKE adrp-name_first, "创建者名
matnr LIKE lips-matnr , "物料编码
arktx LIKE lips-arktx , "物料描述
werks LIKE mseg-werks, "工厂
lgort LIKE mseg-lgort , "库存地点
menge LIKE mseg-menge , "数量
vrkme LIKE lips-vrkme , "单位
charg LIKE mseg-charg , "批次
vbelp_im LIKE mseg-vbelp_im , "物料项目
pstyv LIKE lips-pstyv, "行项目类别
uecha LIKE lips-uecha, "上层项目号
bolnr LIKE likp-bolnr , "物流单号
brgew LIKE lips-brgew, "单项目毛重
gewei LIKE lips-gewei, "单项目毛重单位
"printed TYPE c,"是否已打印
count_prt TYPE i, "记录此交货单打印次数
beizhu(20) TYPE c , "备注
END OF ty_all.
TYPES:BEGIN OF ty_header,
vbelv LIKE vbfa-vbelv , "销售订单号
"tknum LIKE vttp-tknum, "装运单号
auart LIKE vbak-auart, "销售订单类型
auart_txt LIKE tvakt-bezei, "销售订单类型描述
vkorg LIKE vbak-vkorg, "销售组织
vtweg LIKE vbak-vtweg, "分销渠道
lfart LIKE likp-lfart, "交货类型
lfart_txt LIKE tvlkt-vtext, "交货类型描述
vbeln_im LIKE mseg-vbeln_im , "交货单号
mblnr LIKE mseg-mblnr, "物料凭证
shkzg LIKE mseg-shkzg, "借贷标识
budat_mkpf LIKE mseg-budat_mkpf , "出库日期
cputm_mkpf LIKE mseg-cputm_mkpf , "输入时间
kunag LIKE likp-kunag , "客户
kunag_txt LIKE kna1-name1, "客户名称
kunnr LIKE likp-kunnr , "送达方
kunnr_txt LIKE kna1-name1, "送达方名称
lgort LIKE mseg-lgort , "库存地点
werks LIKE mseg-werks, "工厂
stras LIKE kna1-stras , "客户地址
telf1 LIKE kna1-telf1 , "电话
usnam_mkpf LIKE mseg-usnam_mkpf , "经办人
name_last LIKE adrp-name_last, "创建者姓
name_first LIKE adrp-name_first, "创建者名
total_brgew LIKE lips-brgew, "项目总毛重
bolnr LIKE likp-bolnr, "物流单号
count_prt TYPE i, "记录此交货单打印次数
beizhu(60) TYPE c , "备注
END OF ty_header.
TYPES:BEGIN OF ty_items,
vbelv LIKE vbfa-vbelv , "销售订单号
vbeln_im LIKE mseg-vbeln_im , "交货单号
lfart LIKE likp-lfart, "交货类型
shkzg LIKE mseg-shkzg, "借贷标识
budat_mkpf LIKE mseg-budat_mkpf , "出库日期
cputm_mkpf LIKE mseg-cputm_mkpf , "输入时间
mblnr LIKE mseg-mblnr, "物料凭证
matnr LIKE mseg-matnr , "物料编码
arktx LIKE lips-arktx , "物料描述
lgort LIKE mseg-lgort , "库存地点
menge LIKE mseg-menge , "数量
vrkme LIKE lips-vrkme , "单位
charg LIKE mseg-charg , "批次
vbelp_im LIKE mseg-vbelp_im , "项目
pstyv LIKE lips-pstyv, "行项目类别
uecha LIKE lips-uecha, "上层项目号
pstyv_txt LIKE tvapt-vtext, "类别描述
brgew LIKE lips-brgew, "单项目毛重
gewei LIKE lips-gewei, "单项目毛重单位
bolnr LIKE likp-bolnr , "物流单号
beizhu(45) TYPE c , "备注
END OF ty_items.
TYPES:BEGIN OF ty_items_n,
vbelv LIKE vbfa-vbelv , "销售订单号
vbeln_im LIKE mseg-vbeln_im , "交货单号
matnr LIKE mseg-matnr , "物料编码
arktx LIKE lips-arktx , "物料描述
menge1 LIKE mseg-menge , "本品数量
menge2 LIKE mseg-menge , "赠品数量
menge3 LIKE mseg-menge , "总计数量
vrkme LIKE lips-vrkme , "单位
"vbelp_im LIKE mseg-vbelp_im , "项目
"pstyv LIKE lips-pstyv, "行项目类别
"uecha LIKE lips-uecha, "上层项目号
"pstyv_txt LIKE tvapt-vtext, "类别描述
"brgew LIKE lips-brgew, "单项目毛重
"gewei LIKE lips-gewei, "单项目毛重单位
"bolnr LIKE likp-bolnr , "物流单号
beizhu(45) TYPE c , "备注
END OF ty_items_n.
*DATA:hs_items_n TYPE HASHED TABLE OF ty_items_n
* WITH UNIQUE KEY vbelv vbeln_im matnr arktx vrkme beizhu
* WITH HEADER LINE.
DATA:hs_items_n TYPE TABLE OF ty_items_n WITH HEADER LINE.
DATA:gt_items_n TYPE ty_items_n OCCURS 0.
DATA:gt_items_n_show TYPE ty_items_n OCCURS 0.
DATA:gt_items_n_temp TYPE ty_items_n OCCURS 0.
DATA:wa_items_n TYPE ty_items_n.
DATA:wa_all TYPE ty_all,
gt_all TYPE ty_all OCCURS 0.
DATA:wa_header TYPE ty_header,
gt_header
TYPE ty_header OCCURS 0.
DATA:wa_items TYPE ty_items,
gt_items
TYPE ty_items OCCURS 0.
DATA:gt_dc TYPE STANDARD TABLE OF ztbjdyzt.
DATA:wa_dc TYPE ztbjdyzt.
DATA:forms TYPE i."在FORM print里循环
*定义传入到smartforms的变量开始
DATA:fm_name TYPE rs38l_fnam.
DATA:itemsname(32) TYPE c.
DATA:headername(32) TYPE c.
*定义传入到smartforms的变量结束
DATA job_output_info TYPE ssfcrescl.
DATA job_output_options TYPE ssfcresop.
DATA BEGIN OF pdf OCCURS 10.
INCLUDE STRUCTURE tline.
DATA END OF pdf.
DATA len TYPE i. "PDF文件大小
*定义存储ALV向smartforms传入数据的内表开始
DATA:gt_header_temp TYPE ty_header OCCURS 0.
DATA:gt_items_temp TYPE ty_items OCCURS 0.
DATA:gt_all_temp TYPE ty_all OCCURS 0.
*定义存储ALV向smartforms传入数据的内表结束
*ALV显示头数据开始
DATA:gt_header_show TYPE ty_header OCCURS 0.
DATA:gt_items_show TYPE ty_items OCCURS 0.
*ALV显示头数据结束
"控制smartforms参数声明开始
DATA :control_parameters TYPE ssfctrlop,
lw_output_opt
TYPE ssfcompop. "Smart Forms: 智能写作器 (传输) 选项
DATA: lw_ssfcrescl TYPE ssfcrescl.
"控制smartforms参数声明结束
DATA: gs_fcat TYPE lvc_s_fcat,
gt_fcat
TYPE lvc_t_fcat,
gs_layo
TYPE lvc_s_layo,
gs_grid
TYPE lvc_s_glay.
DATA: gt_event TYPE slis_t_event WITH HEADER LINE,
gt_event_exit
TYPE slis_t_event_exit WITH HEADER LINE.
DATA: ref_grid TYPE REF TO cl_gui_alv_grid .
*PARAMETERS filename TYPE rlgrap-filename.
*
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR filename.
* PERFORM f4_file_save CHANGING filename.
START-OF-SELECTION.
SELECT-OPTIONS:
p_vbeln
FOR likp-vbeln , "交货单号
p_werks
FOR lips-werks , "工厂 ,
p_lgort
FOR lips-lgort ,"库存地点
p_budat
FOR mkpf-budat ,"过账日期
p_usnam
FOR vttp-ernam,"创建者
p_vkorg
FOR vbak-vkorg ,"销售组织
p_lfart
FOR likp-lfart,
p_tknum
FOR vttp-tknum NO INTERVALS NO-EXTENSION ."装运单号.
"P_TPLST FOR VTTK-TPLST ,
"P_ERNAM FOR VTTK-ERNAM ,
"P_ROUTE FOR VTTK-ROUTE .
PERFORM frm_get_data.
PERFORM display_data .
END-OF-SELECTION.
"当屏幕失去焦点时,自动刷新声明类开始
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS handle_modify
FOR EVENT data_changed_finished OF cl_gui_alv_grid
IMPORTING e_modified et_good_cells.
ENDCLASS.
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_modify.
* PERFORM refresh.
DATA stbl TYPE lvc_s_stbl.
stbl
-row = 'X'." 基于行的稳定刷新
stbl
-col = 'X'." 基于列稳定刷新
CALL METHOD ref_grid->refresh_table_display
EXPORTING
is_stable
= stbl.
ENDMETHOD. "HANDLE_MODIFY
ENDCLASS. "LCL_EVENT_RECEIVER IMPLEMENTATION
DATA gt_event_receiver TYPE REF TO lcl_event_receiver .
"当屏幕失去焦点时,自动刷新声明类结束
FORM frm_get_data ."lp~kunag lp~kunnr
SELECT
vbfa
~vbelv ,lips~vbeln AS vbeln_im , likp~kunag ,likp~kunnr ,likp~lfart, kna1~stras, mseg~budat_mkpf, mseg~zeile, mseg~shkzg,
kna1
~telf1 , mseg~usnam_mkpf, lips~matnr , lips~arktx ,lips~lgort , lips~lfimg AS menge,lips~werks,lips~uecha,
lips
~vrkme , mseg~charg ,lips~posnr AS vbelp_im , likp~bolnr, lips~brgew ,lips~gewei, lips~pstyv , mseg~mblnr, mseg~bwart, mseg~cputm_mkpf ,adrp~name_last,
adrp
~name_first ,mseg~smbln, mseg~smblp, vbak~auart,vbak~vkorg, vbak~vtweg,
vttp
~tknum
INTO CORRESPONDING FIELDS OF TABLE @gt_all
* FROM mseg AS m
*
* INNER JOIN mkpf AS mf
* ON m~mblnr = mf~mblnr AND mf~mjahr = m~mjahr wAND mf~vgart = 'WL'
* INNER JOIN lips AS ls
* ON m~vbeln_im = ls~vbeln AND m~vbelp_im = ls~posnr
FROM likp
INNER
JOIN lips
ON likp~vbeln = lips~vbeln
INNER
JOIN mseg
ON mseg~vbeln_im = lips~vbeln AND mseg~vbelp_im = lips~posnr
LEFT JOIN mkpf
ON mseg~mblnr = mkpf~mblnr AND mkpf~mjahr = mseg~mjahr AND mkpf~vgart = 'WL'
INNER
JOIN kna1
ON kna1~kunnr = likp~kunnr
LEFT JOIN vbfa
ON vbfa~vbeln = lips~vbeln AND vbfa~posnn = lips~posnr
LEFT JOIN vbak
ON vbak~vbeln = vbfa~vbelv
INNER
JOIN usr21
ON usr21~bname = mkpf~usnam
LEFT JOIN adrp
ON adrp~persnumber = usr21~persnumber
LEFT JOIN vttp
ON vttp~vbeln = likp~vbeln
WHERE lips~vbeln IN @p_vbeln AND
lips
~werks IN @p_werks AND
lips
~lgort IN @p_lgort AND
mkpf
~budat IN @p_budat AND
mkpf
~usnam IN @p_usnam AND
vbak
~vkorg IN @p_vkorg AND
likp
~lfart IN @p_lfart AND " AND
vttp
~tknum IN @p_tknum .
SORT gt_all ASCENDING BY vbelv vbeln_im mblnr budat_mkpf cputm_mkpf vbelp_im."BUDAT_MKPF CPUTM_MKPF.
DELETE ADJACENT DUPLICATES FROM gt_all.
CLEAR wa_all.
LOOP AT gt_all INTO wa_all.
* AUTHORITY-CHECK OBJECT 'V_VBAK_VKO'
* ID 'VKORG' FIELD wa_all-vkorg
* ID 'VTWEG' DUMMY "wa_all-vtweg
* ID 'SPART' DUMMY "gwa_vbap-spart2 "行项目
* ID 'ACTVT' FIELD '03'.
* IF sy-subrc <> 0.
* DELETE TABLE gt_all FROM wa_all.
* CONTINUE.
* ENDIF.
SELECT SINGLE vtext INTO wa_all-lfart_txt
FROM tvlkt
WHERE lfart EQ wa_all-lfart.
SELECT SINGLE bezei INTO wa_all-auart_txt
FROM tvakt
WHERE auart EQ wa_all-auart.
SELECT SINGLE name1 INTO wa_all-kunnr_txt
FROM kna1 WHERE kunnr EQ wa_all-kunnr.
SELECT SINGLE name1 INTO wa_all-kunag_txt
FROM kna1 WHERE kunnr EQ wa_all-kunag.
CONCATENATE wa_all-name_last wa_all-name_first INTO wa_all-name_last.
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_dc
FROM ztbjdyzt WHERE key1 EQ wa_all-vbeln_im AND type EQ '005'.
DESCRIBE TABLE gt_dc LINES wa_all-count_prt.
MODIFY gt_all FROM wa_all.
ENDLOOP.
LOOP AT gt_all INTO wa_all WHERE smbln IS NOT INITIAL AND smblp IS NOT INITIAL .
DELETE gt_all WHERE mblnr = wa_all-smbln AND zeile = wa_all-smblp.
DELETE TABLE gt_all FROM wa_all.
ENDLOOP.
LOOP AT gt_all INTO wa_all WHERE shkzg = 'S'.
IF wa_all-pstyv EQ 'REN' OR wa_all-pstyv EQ 'REN1' OR
wa_all
-pstyv EQ 'REN2' OR wa_all-pstyv EQ 'REN3' OR
wa_all
-pstyv EQ 'REQ' OR wa_all-pstyv EQ 'REHP'.
CONTINUE.
ELSE.
DELETE TABLE gt_all FROM wa_all.
ENDIF.
ENDLOOP.
MOVE-CORRESPONDING gt_all TO gt_header_show.
MOVE-CORRESPONDING gt_all TO gt_items_show.
DATA: luecha LIKE lips-uecha. "上层项目批
DATA: lpstyv LIKE lips-pstyv. "上层行项目类型
* DATA: lwa_items TYPE ty_items.
* DATA: l_items TYPE ty_items.
LOOP AT gt_items_show INTO wa_items WHERE lfart NE 'ZLF9' AND ( pstyv EQ 'TBN' OR pstyv EQ 'ZTNN'
OR pstyv EQ'ZMN' OR pstyv EQ 'TBN1' ).
IF wa_items-pstyv EQ 'ZMN' .
* SELECT SINGLE uecha INTO luecha
* FROM lips
* WHERE vbeln EQ wa_items-vbeln_im AND posnr EQ wa_items-vbelp_im.
SELECT SINGLE pstyv INTO lpstyv
FROM lips
WHERE vbeln EQ wa_items-vbeln_im AND posnr EQ wa_items-uecha.
IF lpstyv EQ 'TBN' .
wa_items
-pstyv_txt = '赠'.
ENDIF.
PERFORM frm_read_txt_po USING wa_items-vbeln_im luecha
CHANGING wa_items-beizhu.
ELSE.
wa_items
-pstyv_txt = '赠'.
PERFORM frm_read_txt_po USING wa_items-vbeln_im wa_items-vbelp_im
CHANGING wa_items-beizhu.
ENDIF.
* PERFORM frm_read_txt_po USING wa_items-vbeln_im wa_items-vbelp_im
* CHANGING wa_items-beizhu.
MODIFY gt_items_show FROM wa_items.
ENDLOOP.
DATA:lt_items_tmp TYPE ty_items OCCURS 0 .
DATA:wa_items_tmp TYPE ty_items .
DATA:ls_items TYPE ty_items.
LOOP AT gt_items_show INTO wa_items WHERE uecha IS NOT INITIAL.
ls_items
= wa_items.
ls_items
-vbelp_im = wa_items-uecha.
SELECT SINGLE pstyv INTO ls_items-pstyv
FROM lips
WHERE vbeln EQ ls_items-vbeln_im AND posnr EQ ls_items-vbelp_im.
CLEAR ls_items-uecha.
* LOOP AT lt_items_tmp INTO wa_items_tmp WHERE vbelv = ls_items-vbelv
* AND vbeln_im = ls_items-vbeln_im
* AND vbelp_im = ls_items-vbelp_im .
*
* ENDLOOP.
READ TABLE lt_items_tmp INTO wa_items_tmp WITH KEY vbelv = ls_items-vbelv
vbeln_im
= ls_items-vbeln_im
vbelp_im
= ls_items-vbelp_im.
IF sy-subrc EQ 0.
wa_items_tmp
-menge = wa_items_tmp-menge + ls_items-menge.
wa_items_tmp
-brgew = wa_items_tmp-brgew + ls_items-brgew.
MODIFY lt_items_tmp FROM wa_items_tmp INDEX sy-tabix.
ELSE.
APPEND ls_items TO lt_items_tmp.
ENDIF.
DELETE gt_items_show WHERE vbelv = wa_items-vbelv AND vbeln_im = wa_items-vbeln_im
AND vbelp_im = wa_items-vbelp_im .
ENDLOOP.
APPEND LINES OF lt_items_tmp TO gt_items_show.
CLEAR: lt_items_tmp,wa_items_tmp,ls_items.
SORT gt_items_show BY vbelv vbeln_im vbelp_im.
DELETE ADJACENT DUPLICATES FROM gt_header_show.
DATA count LIKE lips-brgew VALUE 0.
LOOP AT gt_header_show INTO wa_header.
LOOP AT gt_items_show INTO wa_items
WHERE vbeln_im EQ wa_header-vbeln_im
AND mblnr EQ wa_header-mblnr
AND vbelv EQ wa_header-vbelv
AND shkzg EQ wa_header-shkzg
AND budat_mkpf EQ wa_header-budat_mkpf
AND lgort EQ wa_header-lgort .
IF wa_items-gewei NE 'KG'.
CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'
EXPORTING
input = wa_items-brgew
round_sign
= 'X'
unit_in
= wa_items-gewei
unit_out
= 'KG'
IMPORTING
output = wa_items-brgew
EXCEPTIONS
conversion_not_found
= 01
division_by_zero
= 02
input_invalid
= 03.
ENDIF.
count = wa_items-brgew + count."放入到要往smartforms传入的内表行项目
" ENDIF.
ENDLOOP.
CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'
EXPORTING
input = count
round_sign
= 'X'
unit_in
= 'KG'
unit_out
= 'TO'
IMPORTING
output = count
EXCEPTIONS
conversion_not_found
= 01
division_by_zero
= 02
input_invalid
= 03.
wa_header
-total_brgew = count.
MODIFY TABLE gt_header_show FROM wa_header.
CLEAR wa_items.
CLEAR wa_header.
CLEAR count.
ENDLOOP.
SORT gt_items_show BY vbelv vbeln_im vbelp_im.
DATA:l_tabix TYPE sy-tabix.
DATA:lwa_items TYPE ty_items.
LOOP AT gt_items_show INTO wa_items.
l_tabix
= sy-tabix + 1.
MOVE-CORRESPONDING wa_items TO hs_items_n.
IF wa_items-pstyv EQ 'TBN'.
hs_items_n
-menge1 = 0.
hs_items_n
-menge2 = wa_items-menge.
hs_items_n
-menge3 = hs_items_n-menge1 + hs_items_n-menge2.
ELSE.
READ TABLE gt_items_show INTO lwa_items INDEX l_tabix.
IF lwa_items-pstyv EQ 'TBN' AND lwa_items-matnr EQ wa_items-matnr.
hs_items_n
-menge1 = wa_items-menge.
hs_items_n
-menge2 = lwa_items-menge.
hs_items_n
-menge3 = hs_items_n-menge1 + hs_items_n-menge2.
DELETE TABLE gt_items_show FROM lwa_items.
ELSEIF lwa_items-pstyv EQ 'TBN' AND lwa_items-matnr NE wa_items-matnr.
hs_items_n
-menge1 = wa_items-menge.
hs_items_n
-menge2 = 0.
hs_items_n
-menge3 = hs_items_n-menge1 + hs_items_n-menge2.
ELSE.
hs_items_n
-menge1 = wa_items-menge.
hs_items_n
-menge2 = 0.
hs_items_n
-menge3 = hs_items_n-menge1 + hs_items_n-menge2.
ENDIF.
ENDIF.
* IF wa_items-pstyv EQ 'TBN'."当行项目为标准类型赋值menge1
* hs_items_n-menge2 = wa_items-menge.
* hs_items_n-menge1 = 0.
* ELSE. "当行项目为赠品类型赋值menge2
* hs_items_n-menge1 = wa_items-menge.
* hs_items_n-menge2 = 0.
* ENDIF.
* hs_items_n-menge3 = wa_items-menge.
* COLLECT hs_items_n.
APPEND hs_items_n.
ENDLOOP.
gt_items_n_show[]
= hs_items_n[].
ENDFORM.
FORM display_data .
IF gt_header_show[] IS INITIAL.
MESSAGE '没有数据显示!' TYPE 'I'.
RETURN.
ENDIF.
PERFORM set_fcat.
PERFORM set_layout.
PERFORM show_alv TABLES gt_fcat gt_header_show[]
USING gs_layo.
ENDFORM. " DISPLAY_DATA
*&---------------------------------------------------------------------*
FORM set_fcat .
PERFORM csalv_set_fcat USING:
" 'Field' 'Text' 'Edit' 'Zero' 'Type' 'Qfieldname' 'Key' 'Hostspot' 'Emphasize' 'Checkbox'
"'TKNUM' '装运编号' '' 'X' '' '' '' '' '' '' '' '' '',
'VBELV' '销售订单号' '' 'X' '' '' '' '' '' '' '' '' '',
'AUART' '销售订单类型' '' 'X' '' '' '' '' '' '' '' '' '',
'AUART_TXT' '销售订单类型描述' '' 'X' '' '' '' '' '' '' '' '' '',
'VKORG' '销售组织' '' 'X' '' '' '' '' '' '' '' '' '',
'VBELN_IM' '交货单号' '' 'X' '' '' '' '' '' '' '' '' '',
'LFART' '交货类型' '' 'X' '' '' '' '' '' '' '' '' '',
'LFART_TXT' '交货类型描述' '' 'X' '' '' '' '' '' '' '' '' '',
'MBLNR' '物料凭证' '' '' '' '' '' '' '' '' '' '' '',
"'SHKZG' '借\贷标识' '' '' '' '' '' '' '' '' '' '' '',
'BUDAT_MKPF' '凭证日期' '' '' '' '' '' '' '' '' '' '' '',
'CPUTM_MKPF' '凭证时间' '' '' '' '' '' '' '' '' '' '' '',
"'ZEILE' '凭证项目' '' '' '' '' '' '' '' '' '' '' '',
"'BWART' '移动类型' '' '' '' '' '' '' '' '' '' '' '',
'KUNAG_TXT' '客户' '' '' '' '' '' '' '' '' '' '' '',
'KUNNR_TXT' '送达方' '' '' '' '' '' '' '' '' '' '' '',
"'MATNR' '产品编码' '' '' '' '' '' '' '' '' '' '' '' ,
"'ARKTX' '产品' '' '' '' '' '' '' '' '' '' '' '',
"'MENGE' '数量' '' '' '' '' '' '' '' '' '' '0' '',
"'VRKME' '单位' '' '' '' '' '' '' '' '' '' '' '',
"'BRGEW' '毛重' '' '' '' '' '' '' '' '' '' '0' '',
'WERKS' '工厂' '' '' '' '' '' '' '' '' '' '' '',
'LGORT' '库存地点' '' '' '' '' '' '' '' '' '' '' '',
'NAME_LAST' '经办人' '' '' '' '' '' '' '' '' '' '' '',
"'NAME_FIRST' '名' '' '' '' '' '' '' '' '' '' '' '',
'COUNT_PRT' '已打印次数' '' '' '' '' '' '' '' '' '' '' '',
'BEIZHU' '备注' 'X' '' '' '' '' '' '' '' '' '' 'X'.
"'zsel' '是否打印 ' '' '' '' '' '' '' '' 'X' ''.
ENDFORM. " SET_FCAT
*&---------------------------------------------------------------------*
FORM set_layout .
gs_layo
-zebra = 'X'.
* gs_layout-stylefname = 'FIELD_STYLE'.
gs_layo
-cwidth_opt = 'X'.
ENDFORM. " SET_LAYOUT
*&---------------------------------------------------------------------*
FORM csalv_set_fcat USING
p_name
p_text
p_edit
p_zero
p_type
p_qfieldname
p_key
p_hotspot
p_emphasize
p_checkbox
p_do_sum
p_decimals_out
p_no_out
.
gs_fcat
-fieldname = p_name.
* gs_fcat-reptext_l =
* gs_fcat-selddictxt =
gs_fcat
-reptext = p_text.
gs_fcat
-edit = p_edit.
gs_fcat
-no_zero = p_zero.
gs_fcat
-datatype = p_type.
gs_fcat
-qfieldname = p_qfieldname.
gs_fcat
-key = p_key.
gs_fcat
-hotspot = p_hotspot.
gs_fcat
-emphasize = p_emphasize.
gs_fcat
-checkbox = p_checkbox.
gs_fcat
-do_sum = p_do_sum.
gs_fcat
-decimals_o = p_decimals_out.
gs_fcat
-no_out = p_no_out.
APPEND gs_fcat TO gt_fcat.
ENDFORM. "csalv_set_fcat
*&---------------------------------------------------------------------*
FORM show_alv TABLES pt_fcat
pt_tab
USING ps_layout.
gs_grid
-edt_cll_cb = 'X'."当屏幕失去焦点时,自动刷新
gt_event
-name = 'CALLER_EXIT'. "slis_ev_caller_exit_at_start事件
gt_event
-form = 'FM_BUTTON'.
APPEND gt_event .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program
= sy-repid
i_callback_user_command
= 'USER_COMMAND'
i_grid_settings
= gs_grid
i_callback_pf_status_set
= 'SET_PF_STATUS'
is_layout_lvc
= gs_layo
it_fieldcat_lvc
= pt_fcat[]
it_events
= gt_event[]
i_save
= 'X'
* it_event_exit = gt_event_exit[]
TABLES
t_outtab
= pt_tab
EXCEPTIONS
program_error
= 1
OTHERS = 2.
ENDFORM. "csalv_set_fcat
FORM print.
DATA:ptr_count(10) TYPE c.
DATA: lines TYPE i."获取往smartforms传入的要打印的行数目
DATA: insertrows TYPE i."需要再插入多少空行
DATA: rows TYPE i VALUE 15."一页要打印的行数
CLEAR gt_all_temp.
CLEAR gt_header.
CLEAR gt_items_n.
CLEAR gt_header_temp.
CLEAR gt_items_n_temp.
DATA count LIKE lips-brgew VALUE 0.
DATA:ls_row TYPE lvc_s_row,
lt_rows
TYPE lvc_t_row.
"CLEAR GT_HEADER.
"CLEAR GT_ITEMS.
CALL METHOD ref_grid->get_selected_rows
IMPORTING
et_index_rows
= lt_rows
* et_row_no =
.
LOOP AT lt_rows INTO ls_row.
READ TABLE gt_header_show INTO wa_header INDEX ls_row-index.
APPEND wa_header TO gt_header.
LOOP AT gt_items_n_show INTO wa_items_n
WHERE vbeln_im EQ wa_header-vbeln_im
AND vbelv EQ wa_header-vbelv .
APPEND wa_items_n TO gt_items_n.
ENDLOOP.
ENDLOOP.
CLEAR: control_parameters.
control_parameters
-preview = 'X'.
control_parameters
-no_open = 'X'.
control_parameters
-no_close = 'X'.
* control_parameters-getotf = 'X'.
* control_parameters-no_dialog = 'X'.
lw_output_opt
-tdiexit = 'X'.
CALL FUNCTION 'SSF_OPEN'
EXPORTING
control_parameters
= control_parameters
output_options
= lw_output_opt
* IMPORTING
* job_output_info = job_output_info
EXCEPTIONS
formatting_error
= 1
internal_error
= 2
send_error
= 3
user_canceled
= 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.
LOOP AT gt_header INTO wa_header.
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_dc
FROM ztbjdyzt WHERE key1 EQ wa_header-vbeln_im AND type EQ '005'.
DESCRIBE TABLE gt_dc LINES wa_header-count_prt.
wa_header
-count_prt = wa_header-count_prt + 1.
PERFORM frm_read_txt USING wa_header-vbeln_im CHANGING wa_header-beizhu.
APPEND wa_header TO gt_header_temp."放入到要往smartforms传入的表头内表
LOOP AT gt_items_n INTO wa_items_n
WHERE vbeln_im EQ wa_header-vbeln_im
AND vbelv EQ wa_header-vbelv.
APPEND wa_items_n TO gt_items_n_temp.
ENDLOOP.
CLEAR wa_items_n.
CLEAR wa_header.
IF gt_items_n_temp IS INITIAL.
MESSAGE i000(0k) WITH '请选中要打印的内容!'.
EXIT .
ENDIF.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname
= 'ZSDSF007_2'
IMPORTING
fm_name
= fm_name
EXCEPTIONS
no_form
= 1
no_function_module
= 2
OTHERS = 3.
"SET HANDLER gt_event_receiver->handle_modify FOR ref_grid.
DESCRIBE TABLE gt_items_n_temp LINES lines.
insertrows
= lines MOD rows .
IF insertrows NE 0.
insertrows
= rows - insertrows.
ELSE.
insertrows
= 0.
ENDIF.
DO insertrows TIMES.
APPEND wa_items_n TO gt_items_n_temp."放入到要往smartforms传入的行项目内表
ENDDO.
PERFORM frm_print_data."每一个表头数据向smartforms传入数据
ENDLOOP.
CALL FUNCTION 'SSF_CLOSE'
IMPORTING
job_output_info
= job_output_info
EXCEPTIONS
formatting_error
= 1
internal_error
= 2
send_error
= 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
IF job_output_info-outputdone = 'X'.
CLEAR wa_dc.
LOOP AT gt_header INTO wa_header.
wa_dc
-mandt = sy-mandt.
wa_dc
-to_date = sy-datum.
wa_dc
-to_time = sy-uzeit.
wa_dc
-type = '005'.
wa_dc
-tab_no = sy-tabix.
wa_dc
-name = sy-uname.
wa_dc
-key1 = wa_header-vbeln_im.
wa_dc
-to_go = 'X'.
APPEND wa_dc TO gt_dc.
wa_header
-count_prt = wa_header-count_prt + 1.
MODIFY TABLE gt_header_show FROM wa_header.
ENDLOOP.
MODIFY ztbjdyzt FROM TABLE gt_dc.
COMMIT WORK.
DATA stbl TYPE lvc_s_stbl.
stbl
-row = 'X'." 基于行的稳定刷新
stbl
-col = 'X'." 基于列稳定刷新
CALL METHOD ref_grid->refresh_table_display
EXPORTING
is_stable
= stbl.
ENDIF.
CLEAR gt_dc[].
CLEAR job_output_info.
ENDFORM.
FORM frm_print_data.
forms
= forms + 1.
DATA: ls_compop TYPE ssfcompop.
DATA: ls_job_output_info TYPE ssfcrescl.
DATA :lt_itcoo TYPE itcoo OCCURS 0. "Smart Forms: OTF 结构
itemsname
= sy-uname && forms && '1' && sy-datum && sy-uzeit.
headername
= sy-uname && forms && '2' && sy-datum && sy-uzeit.
savebuffer gt_items_n_temp itemsname
.
savebuffer gt_header_temp headername
.
* PTR_COUNT = GV_COUNT .
*调用 smartForms
ls_compop
-tddest = 'DEFAULT'.
ls_compop
-tdnoprev = 'X'.
ls_compop
-tdiexit = 'X'.
CALL FUNCTION fm_name
EXPORTING
control_parameters
= control_parameters
output_options
= ls_compop
user_settings
= 'X'
ptr_items
= itemsname
ptr_header
= headername
* IMPORTING
* job_output_info = job_output_info
* PTR_TOTAL = GV_COUNT
EXCEPTIONS
formatting_error
= 1
internal_error
= 2
send_error
= 3
user_canceled
= 4.
"MOVE: job_output_info-otfdata[] TO lt_itcoo. "智能表: OTF表
"将OTF表转换成PDF格式
"PERFORM covert_pdf TABLES lt_itcoo.
clearbuffer itemsname
.
clearbuffer headername
.
CLEAR gt_header_temp.
CLEAR gt_items_n_temp.
"PERFORM frm_smartforms_to_pdf.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form user_command
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_UCOMM text
* -->PS_SELFIELD text
*----------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield
TYPE slis_selfield.
" rs_selfield-refresh = 'X'.
CASE r_ucomm.
WHEN '&DATA_SAVE'.
WHEN '&PRINT' OR '&PRT'.
PERFORM print.
WHEN '&BACK'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDFORM. "user_command
*&---------------------------------------------------------------------*
*& Form SET_PF_STATUS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->RT_EXTAB text
*----------------------------------------------------------------------*
FORM set_pf_status USING rt_extab TYPE slis_t_extab..
SET PF-STATUS 'STANDARD'.
ENDFORM. "SET_PF_STATUS
*&---------------------------------------------------------------------*
*& Form fm_button
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->E_GRID text
*----------------------------------------------------------------------*
FORM fm_button USING e_grid TYPE slis_data_caller_exit.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
* EXPORTING
* IR_SALV_FULLSCREEN_ADAPTER =
IMPORTING
* ET_EXCLUDING =
* E_REPID =
* E_CALLBACK_PROGRAM =
* E_CALLBACK_ROUTINE =
e_grid
= ref_grid
* ET_FIELDCAT_LVC =
* ER_TRACE =
* E_FLG_NO_HTML =
* ES_LAYOUT_KKBLO =
* ES_SEL_HIDE =
* ET_EVENT_EXIT =
* ER_FORM_TOL =
* ER_FORM_EOL =
.
* CALL METHOD ref_grid->check_changed_data.
* 设置enter事件
CALL METHOD ref_grid->register_edit_event
EXPORTING
i_event_id
= cl_gui_alv_grid=>mc_evt_enter
EXCEPTIONS
error
= 1
OTHERS = 2.
CREATE OBJECT gt_event_receiver.
SET HANDLER gt_event_receiver->handle_modify FOR ref_grid.
ENDFORM. "FM_BUTTON
FORM covert_pdf TABLES otf_data STRUCTURE itcoo.
DATA: lt_lines TYPE STANDARD TABLE OF tline, "SAPscript: 文字行
lt_docs
TYPE STANDARD TABLE OF docs, "存储文档
l_bin_size
TYPE i. "
"将OTF转换PDF格式
CALL FUNCTION 'CONVERT_OTF_2_PDF'
IMPORTING
bin_filesize
= l_bin_size
TABLES
otf
= otf_data "otf 表
doctab_archive
= lt_docs
lines = lt_lines "文本行
EXCEPTIONS
err_conv_not_possible
= 1
err_otf_mc_noendmarker
= 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* PERFORM send_mail TABLES gt_lines.
"保存到计算机本地PDF文件
PERFORM download_pdf TABLES lt_lines.
ENDFORM. "covert_pdf
*&---------------------------------------------------------------------*
*& Form download_pdf
*&---------------------------------------------------------------------*
* 保存到本地PDF文件
*----------------------------------------------------------------------*
* -->FU_TAB 文件内容
*----------------------------------------------------------------------*
FORM download_pdf TABLES fu_tab.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
* BIN_FILESIZE =
filename
= 'C:\test.pdf' "文件路径
filetype
= 'BIN' "文件类型
codepage
= '8400' "代码页
TABLES
data_tab
= fu_tab "文件内容表
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.
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. "DOWNLOAD_PDF
FORM frm_read_txt USING vbeln LIKE likp-vbeln
CHANGING txt .
DATA :lc_name TYPE thead-tdname,
lit_lines
TYPE TABLE OF tline,
lwa_lines
TYPE tline.
CLEAR: lit_lines ,
lc_name
,
lwa_lines
.
lc_name
= vbeln .
CALL FUNCTION 'READ_TEXT'
EXPORTING
* CLIENT = SY-MANDT
id = '0001'
language = sy-langu
name
= lc_name
object
= 'VBBK'
* ARCHIVE_HANDLE = 0
* LOCAL_CAT = ' '
* IMPORTING
* HEADER =
TABLES
lines = lit_lines
EXCEPTIONS
id = 1
language = 2
name
= 3
not_found
= 4
object
= 5
reference_check
= 6
wrong_access_to_archive
= 7
OTHERS = 8.
IF sy-subrc = 4.
CALL FUNCTION 'READ_TEXT'
EXPORTING
* CLIENT = SY-MANDT
id = '0001'
language = sy-langu
name
= lc_name
object
= 'VBBK'
* ARCHIVE_HANDLE = 0
* LOCAL_CAT = ' '
* IMPORTING
* HEADER =
TABLES
lines = lit_lines
EXCEPTIONS
id = 1
language = 2
name
= 3
not_found
= 4
object
= 5
reference_check
= 6
wrong_access_to_archive
= 7
OTHERS = 8.
ENDIF.
LOOP AT lit_lines INTO lwa_lines.
* GWA_OUTPUT-RISE_TEXT = LWA_LINES-TDLINE .
CONCATENATE txt lwa_lines-tdline INTO txt.
ENDLOOP.
ENDFORM.
FORM frm_read_txt_po USING vbeln LIKE likp-vbeln posnr LIKE lips-posnr
CHANGING txt .
DATA :lc_name TYPE thead-tdname,
lit_lines
TYPE TABLE OF tline,
lwa_lines
TYPE tline.
CLEAR: lit_lines ,
lc_name
,
lwa_lines
.
lc_name
= vbeln && posnr.
CALL FUNCTION 'READ_TEXT'
EXPORTING
* CLIENT = SY-MANDT
id = '0001'
language = sy-langu
name
= lc_name
object
= 'VBBP'
* ARCHIVE_HANDLE = 0
* LOCAL_CAT = ' '
* IMPORTING
* HEADER =
TABLES
lines = lit_lines
EXCEPTIONS
id = 1
language = 2
name
= 3
not_found
= 4
object
= 5
reference_check
= 6
wrong_access_to_archive
= 7
OTHERS = 8.
IF sy-subrc = 4.
CALL FUNCTION 'READ_TEXT'
EXPORTING
* CLIENT = SY-MANDT
id = '0001'
language = sy-langu
name
= lc_name
object
= 'VBBP'
* ARCHIVE_HANDLE = 0
* LOCAL_CAT = ' '
* IMPORTING
* HEADER =
TABLES
lines = lit_lines
EXCEPTIONS
id = 1
language = 2
name
= 3
not_found
= 4
object
= 5
reference_check
= 6
wrong_access_to_archive
= 7
OTHERS = 8.
ENDIF.
LOOP AT lit_lines INTO lwa_lines.
* GWA_OUTPUT-RISE_TEXT = LWA_LINES-TDLINE .
CONCATENATE txt lwa_lines-tdline INTO txt.
ENDLOOP.
ENDFORM.