ABAP发送报表邮件

运行效果:

代码:

  1. *&---------------------------------------------------------------------*
  2. *& Report ZPPRTEST
  3. *&---------------------------------------------------------------------*
  4. *&
  5. *&---------------------------------------------------------------------*
  6. REPORT ZPPRTEST.
  7.  
  8. TABLES: AFKO.
  9.  
  10. DATA: BEGIN OF gt_data OCCURS ,
  11. aufnr LIKE afko-aufnr,
  12. plnbez LIKE afko-plnbez,
  13. gstrp LIKE afko-gstrp,
  14. gltrp LIKE afko-gltrp,
  15. END OF gt_data.
  16.  
  17. DATA: BEGIN OF gt_stock OCCURS ,
  18. matnr LIKE marc-matnr,
  19. lgort LIKE mard-lgort,
  20. labst LIKE mard-labst,
  21. END OF gt_stock.
  22.  
  23. DATA:g_string TYPE string,
  24. g_string2 TYPE string,
  25. g_mail_address TYPE ad_smtpadr,
  26. g_def_sel_ord TYPE c.
  27.  
  28. CONSTANTS: gc_tab TYPE c VALUE cl_bcs_convert=>gc_tab,
  29. gc_crlf TYPE c VALUE cl_bcs_convert=>gc_crlf.
  30.  
  31. TYPE-POOLS : slis.
  32.  
  33. DATA: gs_layout TYPE slis_layout_alv,
  34. gt_fieldcat TYPE slis_t_fieldcat_alv,
  35. wa_fieldcat TYPE slis_fieldcat_alv.
  36.  
  37. SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-B01.
  38. SELECT-OPTIONS: s_aufnr FOR afko-aufnr.
  39. SELECTION-SCREEN END OF BLOCK B1.
  40.  
  41. SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-B02.
  42. PARAMETERS: c_m1 AS CHECKBOX,
  43. p_t1 TYPE so_obj_des.
  44. SELECT-OPTIONS: s_m1 FOR g_mail_address NO INTERVALS.
  45. SELECTION-SCREEN END OF BLOCK B2.
  46.  
  47. START-OF-SELECTION.
  48. PERFORM get_data.
  49. PERFORM display_data.
  50. END-OF-SELECTION.
  51.  
  52. FORM get_data.
  53. *-->工单
  54. SELECT afko~aufnr afko~plnbez afko~gstrp afko~gltrp
  55. INTO CORRESPONDING FIELDS OF TABLE gt_data
  56. FROM afko
  57. WHERE aufnr IN s_aufnr.
  58. *-->库存
  59. SELECT afko~plnbez AS matnr mard~lgort mard~labst
  60. INTO CORRESPONDING FIELDS OF TABLE gt_stock
  61. FROM afko
  62. INNER JOIN mard ON afko~plnbez EQ mard~matnr
  63. WHERE aufnr IN s_aufnr
  64. AND mard~werks = ''.
  65. ENDFORM.
  66.  
  67. FORM display_data.
  68. DATA: l_repid TYPE sy-repid,
  69. l_inclname TYPE trdir-name,
  70. l_idx LIKE sy-tabix.
  71. CLEAR: gt_fieldcat[], wa_fieldcat.
  72.  
  73. l_repid = l_inclname = sy-cprog.
  74.  
  75. gs_layout-colwidth_optimize = 'X'.
  76.  
  77. CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
  78. EXPORTING
  79. I_PROGRAM_NAME = l_repid
  80. I_INTERNAL_TABNAME = 'GT_DATA'
  81. I_INCLNAME = l_inclname
  82. CHANGING
  83. CT_FIELDCAT = gt_fieldcat
  84. EXCEPTIONS
  85. INCONSISTENT_INTERFACE =
  86. PROGRAM_ERROR =
  87. OTHERS = .
  88.  
  89. LOOP AT gt_fieldcat INTO wa_fieldcat.
  90. l_idx = sy-tabix.
  91.  
  92. CASE wa_fieldcat-fieldname.
  93. * WHEN 'sortl'.
  94. * wa_fieldcat-seltext_s = wa_fieldcat-seltext_m =
  95. * wa_fieldcat-seltext_l = '供应商简称'.
  96. * wa_fieldcat-ddictxt = 's'.
  97. ENDCASE.
  98.  
  99. CLEAR wa_fieldcat-key.
  100.  
  101. MODIFY gt_fieldcat FROM wa_fieldcat INDEX l_idx.
  102. ENDLOOP.
  103. IF c_m1 = 'X'.
  104. PERFORM concatenate_data.
  105. PERFORM concatenate_data_stock.
  106. PERFORM send_mail TABLES s_m1
  107. USING p_t1 'zpprtest_list'.
  108. ENDIF.
  109. PERFORM alv_show.
  110. ENDFORM.
  111.  
  112. FORM alv_show.
  113.  
  114. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  115. EXPORTING
  116. I_CALLBACK_PROGRAM = sy-repid
  117. IS_LAYOUT = gs_layout
  118. IT_FIELDCAT = gt_fieldcat[]
  119. * I_CALLBACK_PF_STATUS_SET = 'ALV_PF_STATUS' " 触发事件调用子程序
  120. * I_CALLBACK_USER_COMMAND = 'ALV_USER_COMMAND' " 鼠标事件操作子程序
  121. I_SAVE = 'A'
  122. TABLES
  123. T_OUTTAB = GT_DATA
  124. EXCEPTIONS
  125. PROGRAM_ERROR =
  126. OTHERS = .
  127.  
  128. ENDFORM.
  129.  
  130. FORM concatenate_data.
  131. DATA: l_line TYPE string,
  132. l_gstrp(),
  133. l_gltrp().
  134. CLEAR g_string.
  135. *-->Header Line
  136. CONCATENATE '工单'
  137. '物料'
  138. '基本开工日'
  139. '基本完工日'
  140. INTO g_string SEPARATED BY gc_tab.
  141. *-->断行
  142. CONCATENATE g_string l_line gc_crlf INTO g_string.
  143. *-->Data
  144. LOOP AT gt_data.
  145. CLEAR: l_gstrp,l_gltrp.
  146.  
  147. CONCATENATE gt_data-gstrp+() '/' gt_data-gstrp+()
  148. '/' gt_data-gstrp+() INTO l_gstrp.
  149.  
  150. CONCATENATE gt_data-gltrp+() '/' gt_data-gltrp+()
  151. '/' gt_data-gltrp+() INTO l_gltrp.
  152.  
  153. CONCATENATE gt_data-aufnr
  154. gt_data-plnbez
  155. l_gstrp
  156. l_gltrp
  157. INTO l_line SEPARATED BY gc_tab.
  158. *-->断行
  159. CONCATENATE g_string l_line gc_crlf INTO g_string.
  160. ENDLOOP.
  161.  
  162. ENDFORM.
  163.  
  164. FORM concatenate_data_stock.
  165. DATA: l_line TYPE string,
  166. l_labst().
  167. CLEAR g_string2.
  168. CONCATENATE '物料'
  169. '仓库'
  170. '库存'
  171. INTO g_string2 SEPARATED BY gc_tab.
  172. CONCATENATE g_string2 l_line gc_crlf INTO g_string2.
  173. LOOP AT gt_stock.
  174. CLEAR: l_labst.
  175. WRITE gt_stock-labst TO l_labst. "数字要转换成字符
  176. CONCATENATE gt_stock-matnr
  177. gt_stock-lgort
  178. l_labst
  179. INTO l_line SEPARATED BY gc_tab.
  180. CONCATENATE g_string2 l_line gc_crlf INTO g_string2.
  181. ENDLOOP.
  182. ENDFORM.
  183.  
  184. FORM send_mail TABLES lt_mail_addr STRUCTURE s_m1
  185. USING in_subject in_filename.
  186. DATA send_request TYPE REF TO cl_bcs.
  187. DATA document TYPE REF TO cl_document_bcs.
  188. DATA recipient TYPE REF TO if_recipient_bcs.
  189. DATA bcs_exception TYPE REF TO cx_bcs.
  190.  
  191. DATA main_text TYPE bcsy_text.
  192. DATA: binary_content TYPE solix_tab,
  193. binary_content2 TYPE solix_tab.
  194. DATA: size TYPE so_obj_len,
  195. size2 TYPE so_obj_len.
  196. DATA sent_to_all TYPE os_boolean.
  197. DATA: l_filename TYPE sood-objdes,
  198. l_filename2 TYPE sood-objdes.
  199.  
  200. CONCATENATE in_filename '_' sy-datum INTO l_filename.
  201.  
  202. CONCATENATE '库存' '_' sy-datum INTO l_filename2.
  203.  
  204. * --------------------------------------------------------------
  205. * convert the text string into UTF-16LE binary data including
  206. * byte-order-mark. Mircosoft Excel prefers these settings
  207. * all this is done by new class cl_bcs_convert (see note 1151257)
  208.  
  209. * 工单
  210. TRY.
  211. cl_bcs_convert=>string_to_solix(
  212. EXPORTING
  213. iv_string = g_string
  214. iv_codepage = '' "suitable for MS Excel, leave empty
  215. iv_add_bom = 'X' "for other doc types
  216. IMPORTING
  217. et_solix = binary_content
  218. ev_size = size ).
  219. CATCH cx_bcs.
  220. MESSAGE e445(so).
  221. ENDTRY.
  222.  
  223. * 库存
  224. TRY.
  225. cl_bcs_convert=>string_to_solix(
  226. EXPORTING
  227. iv_string = g_string2
  228. iv_codepage = '' "suitable for MS Excel, leave empty
  229. iv_add_bom = 'X' "for other doc types
  230. IMPORTING
  231. et_solix = binary_content2
  232. ev_size = size2 ).
  233. CATCH cx_bcs.
  234. MESSAGE e445(so).
  235. ENDTRY.
  236.  
  237. TRY.
  238.  
  239. * -------- create persistent send request ------------------------
  240. send_request = cl_bcs=>create_persistent( ).
  241.  
  242. * -------- create and set document with attachment ---------------
  243. * create document object from internal table with text
  244. * append 'Hello world!' to main_text. "#EC NOTEXT
  245. document = cl_document_bcs=>create_document(
  246. i_type = 'RAW'
  247. i_text = main_text
  248. i_subject = in_subject ).
  249.  
  250. * add the spread sheet as attachment to document object
  251.  
  252. * 工单
  253. document->add_attachment(
  254. i_attachment_type = 'xls' "#EC NOTEXT
  255. i_attachment_subject = l_filename
  256. i_attachment_size = size
  257. i_att_content_hex = binary_content ).
  258. * 库存
  259. document->add_attachment(
  260. i_attachment_type = 'xls' "#EC NOTEXT
  261. i_attachment_subject = l_filename2
  262. i_attachment_size = size2
  263. i_att_content_hex = binary_content2 ).
  264.  
  265. * add document object to send request
  266. send_request->set_document( document ).
  267.  
  268. * --------- add recipient (e-mail address) -----------------------
  269. LOOP AT lt_mail_addr.
  270. * create recipient object
  271. recipient =
  272. cl_cam_address_bcs=>create_internet_address( lt_mail_addr-low ).
  273. * add recipient object to send request
  274. send_request->add_recipient( recipient ).
  275. ENDLOOP.
  276.  
  277. * ---------- send document ---------------------------------------
  278. sent_to_all = send_request->send( i_with_error_screen = 'X' ).
  279.  
  280. COMMIT WORK.
  281.  
  282. IF sent_to_all IS INITIAL.
  283. MESSAGE i500(sbcoms).
  284. ELSE.
  285. MESSAGE s022(so).
  286. ENDIF.
  287.  
  288. * ------------ exception handling ----------------------------------
  289. * replace this rudimentary exception handling with your own one !!!
  290. CATCH cx_bcs INTO bcs_exception.
  291. MESSAGE i865(so) WITH bcs_exception->error_type.
  292. ENDTRY.
  293. ENDFORM.

其他博主的好文——SAP压缩excel并发送mail案例

ALV报表——发送Excel报表邮件的更多相关文章

  1. Excel报表

    Excel报表 1.Excel报表导入到GridView protected void Page_Load(object sender, EventArgs e) { string path = Se ...

  2. 通过邮箱发送html报表

    前言 需求是发送邮件时, 可以将报表正文贴到邮件里, 可以正常复制选中报表内容. 目前的做法是简单粗暴的转成了一张图片, 这样效果显然是很糟糕的. 今天看到邮箱里可以预览Word, Excel, F1 ...

  3. 使用 shell / python 进行sql的excel报表导出

    如果要求你进行一个表数据的导出,如果使用shell的话,很容易做到,即执行一下 select 语句就可以拿到返回结果了! 如下: /usr/bin/mysql -u"${username}& ...

  4. 从数据库中导出excel报表

    通常需要将后台数据库中的数据集或者是其他列表等导出excel 报表,这里主要引用了Apose.cells dll 类库, (1)直接上主要代码: protected void txtExport_Cl ...

  5. 在.NET中使用EPPlus生成Excel报表 .

    --摘抄自:http://blog.csdn.net/zhoufoxcn/article/details/14112473 在开发.NET应用中可能会遇到需要生成带图表(Chart)的Excel报表的 ...

  6. IIS下打印报表到Excel

    阅读本文之前,请先看上一篇文章<.NET下Excel报表的打印>. 上一篇文章<.NET下Excel报表的打印>介绍了关于报表打印到Excel文件中的方法.若要把项目通过IIS ...

  7. poi导出Excel报表多表头双层表头、合并单元格

    效果图: controller层方法: /**     *      * 导出Excel报表     * @param request     * @return     *      */    @ ...

  8. Report_客制化以PLSQL输出XLS标记实现Excel报表(案例)

    2015-02-12 Created By BaoXinjian

  9. java导出excel报表

    1.java导出excel报表: package cn.jcenterhome.util; import java.io.OutputStream;import java.util.List;impo ...

随机推荐

  1. linux高性能服务器编程 (五) --Linux网络编程基础api

    第五章 Linux网络编程基础api 1.主机字节序和网络字节序 字节序是指整数在内存中保存的顺序.字节序分为大端字节序.小端字节序. 大端字节序:一个整数的高位字节数据存放在内存的低地址处.低位字节 ...

  2. Linux:搭建GitLab

    0.写在前面 GitLab官方明确要求最低配置2核4G,如果配置过低,会出现502错误. 1.安装SSH #安装ssh sudo yum install -y curl policycoreutils ...

  3. 终于明白为什么要加 final 关键字了!

    阅读本文大概需要 2.8 分钟. 来源: www.jianshu.com/p/acc8d9a67d0c 在开发过程中,由于习惯的原因,我们可能对某种编程语言的一些特性习以为常,特别是只用一种语言作为日 ...

  4. 冰多多团队-第八次Scrum例会

    冰多多团队-第八次Scrum会议 工作情况 团队成员 已完成任务 待完成任务 zpj debug, IAT debug, IAT 牛雅哲 将语音部分迁移到IatDemo上,去将科大讯飞的语音听写dem ...

  5. 列出python库的内置方法

    import cv dir(cv) ['16SC', '16UC', '32FC', '32SC', '64FC', '8SC', '8UC', 'Abs', 'AbsDiff', 'AbsDiffS ...

  6. 微信token介绍

    这里的微信token 有以下三种 1.小程序的token  (appid+appsecret=token) 2.一个是第三方平台token(comment_appid+comment_appsecre ...

  7. Alpine容器中运行go的二进制文件

    Alpine容器中运行go的二进制文件 kuSorZ · 3月之前 · 214 次点击 · 预计阅读时间 1 分钟 · 2分钟之前 开始浏览 原文出处:https://cloud.tencent.co ...

  8. SwiftUI or Flutter ?

    看到这篇好文,忍不住想分享一下 本文转自https://juejin.im/post/5d05b45bf265da1bcc193ff4 版权归原文所有 ------------------------ ...

  9. [转]js判断数据类型的四种方法

    原文地址:https://www.cnblogs.com/crackedlove/p/10331317.html 1.typeof typeof是一个操作符,其右侧跟一个一元表达式,并返回这个表达式的 ...

  10. SNF快速开发平台2019-用户安全控制-权限管理模型实践-权限都在这里

    1.1    是否保存密码 勾选记住密码后,再次开启程序用户密码不需要再次输入,直接显示在密码输入框内,方便快捷. 图 4.1‑1 记住密码的登录页面框 1.2    是否自动登录 勾选自动登录后,再 ...