使用假脱机将Smarform转换为PDF

2020-09-13 08:44发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我需要将smartform转换为PDF并通过后台处理请求中的邮件将其发送。 我设法使用FM'SSF_FUNCTION_MODULE_NAME'进行了转换,然后使用'CALL FUNCTION v_form_name'调用了智能表单,它可以正常工作。

smartform的导入参数需要填充数据,因此smartform不会为空。

数据:

       gv_addr TYPE addr_key,

       gv_nast TYPE nast,

       gv_vbdka TYPE vbdka,

       gv_vbdpa类似于vbdpa表,

       gv_vbdpau类似vbdpau的表。

 呼叫功能v_form_name

   出口

     control_parameters = w_ctrlop

     output_options = w_compop

     is_addres = gv_addr

     is_nast = gv_nast

     is_vbdka = gv_vbdka

     user_settings ='X'

   输入

     job_output_info = w_return

   桌子

     it_vbdpa = gv_vbdpa

     it_vbdpau = gv_vbdpau

   例外情况

     formatting_error = 1

     internal_error = 2

     send_error = 3

     user_canceled = 4

     其他= 5。
 

is_addres,is_nast和is_vbdka是必需的。

smartform 导入参数的界面如下:

 *" VALUE(ARCHIVE_INDEX)类型TOA_DARA可选

 *" VALUE(ARCHIVE_INDEX_TAB)类型TSFDARA可选

 *" VALUE(ARCHIVE_PARAMETERS)类型ARC_PARAMS可选

 *" VALUE(CONTROL_PARAMETERS)类型SSFCTRLOP可选

 *" VALUE(MAIL_APPL_OBJ)类型SWOTOBJID可选

 *" VALUE(MAIL_RECIPIENT)类型SWOTOBJID可选

 *" VALUE(MAIL_SENDER)类型SWOTOBJID可选

 *" VALUE(OUTPUT_OPTIONS)类型SSFCOMPOP可选

 *" VALUE(USER_SETTINGS)类型TDBOOL默认值'X'

 *" VALUE(IS_VBDKA)TYPE VBDKA

 *" VALUE(IS_NAST)TYPE NAST

 *" VALUE(IS_ADDRES)类型ADDR_KEY 

我在两者之间找不到任何关系。 NAST 表中的 ADRNR 为空,这是我发现的唯一可能获取我需要的数据的关系。 甚至 SP01 事务中的假脱机请求都没有提供任何有关如何填充这些内容的信息。

如果我运行我的程序,邮件将被发送(但不会立即发送)。 PDF文件中具有smartform的结构,但没有所需的数据。 看到这里:

如果有任何方法可以填充这些参数,并且您可以告诉我或其他任何方法,我将非常感激。

(49.6 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我需要将smartform转换为PDF并通过后台处理请求中的邮件将其发送。 我设法使用FM'SSF_FUNCTION_MODULE_NAME'进行了转换,然后使用'CALL FUNCTION v_form_name'调用了智能表单,它可以正常工作。

smartform的导入参数需要填充数据,因此smartform不会为空。

数据:

       gv_addr TYPE addr_key,

       gv_nast TYPE nast,

       gv_vbdka TYPE vbdka,

       gv_vbdpa类似于vbdpa表,

       gv_vbdpau类似vbdpau的表。

 呼叫功能v_form_name

   出口

     control_parameters = w_ctrlop

     output_options = w_compop

     is_addres = gv_addr

     is_nast = gv_nast

     is_vbdka = gv_vbdka

     user_settings ='X'

   输入

     job_output_info = w_return

   桌子

     it_vbdpa = gv_vbdpa

     it_vbdpau = gv_vbdpau

   例外情况

     formatting_error = 1

     internal_error = 2

     send_error = 3

     user_canceled = 4

     其他= 5。
 

is_addres,is_nast和is_vbdka是必需的。

smartform 导入参数的界面如下:

 *" VALUE(ARCHIVE_INDEX)类型TOA_DARA可选

 *" VALUE(ARCHIVE_INDEX_TAB)类型TSFDARA可选

 *" VALUE(ARCHIVE_PARAMETERS)类型ARC_PARAMS可选

 *" VALUE(CONTROL_PARAMETERS)类型SSFCTRLOP可选

 *" VALUE(MAIL_APPL_OBJ)类型SWOTOBJID可选

 *" VALUE(MAIL_RECIPIENT)类型SWOTOBJID可选

 *" VALUE(MAIL_SENDER)类型SWOTOBJID可选

 *" VALUE(OUTPUT_OPTIONS)类型SSFCOMPOP可选

 *" VALUE(USER_SETTINGS)类型TDBOOL默认值'X'

 *" VALUE(IS_VBDKA)TYPE VBDKA

 *" VALUE(IS_NAST)TYPE NAST

 *" VALUE(IS_ADDRES)类型ADDR_KEY 

我在两者之间找不到任何关系。 NAST 表中的 ADRNR 为空,这是我发现的唯一可能获取我需要的数据的关系。 甚至 SP01 事务中的假脱机请求都没有提供任何有关如何填充这些内容的信息。

如果我运行我的程序,邮件将被发送(但不会立即发送)。 PDF文件中具有smartform的结构,但没有所需的数据。 看到这里:

如果有任何方法可以填充这些参数,并且您可以告诉我或其他任何方法,我将非常感激。

(49.6 kB)
付费偷看设置
发送
5条回答
微wx笑
1楼-- · 2020-09-13 09:23

您似乎正在尝试使用要在销售单据输出(在NACE事务中配置)中使用的表单。

尝试FM RV_DOCUMENT_PRINT_VIEW,至少这是我们系统中使用的功能。 不知道是否有更新/更好的FM。 如果有的话,您可能会在NACE中分配给V1输出的输出程序中找到它。

这是FM的示例调用。 如果您没有NAST,则只需提供文档编号(VBELN)。

 vbco3-mandt = sy-mandt。
  vbco3-spras = nast-spras。  <-language 
vbco3-vbeln = nast-objky。 <-VBAK-VBELN前导零 vbco3-kunde = nast-parnr。 <-合作伙伴(通常卖给VBAK-KUNNR) vbco3-parvw = nast-parvw。 <-伙伴类型(AG =卖给) 通话功能" RV_DOCUMENT_PRINT_VIEW" 出口 comwa = vbco3 输入 kopf = vbdka 桌子 pos = tvbdpa 混乱= da_mess 例外情况 fehler_bei_datenbeschaffung = 1。
打个大熊猫
2楼-- · 2020-09-13 08:58

正如我提到的,转换工作正常。 我也知道那些表和结构是空的,这就是我在问题中所说的! 我的问题不是关于如何将smartform转换为PDF,而是对如何填充这些表/结构以获取所需的正确数据提出疑问。 这就是为什么我将来自smartform的导入参数作为信息提供给您,以帮助我解决这一问题。

野沐沐
3楼-- · 2020-09-13 09:18

请检查是否有帮助:这是将线轴转换为PDF-

 FORM f_prepare_pdf_attach TABLES pt_table。

  数据:lw_print_params TYPE pri_params,
  lt_data_otf线型表,
  lw_pdf_otf TYPE线条,
  lv_xstring TYPE xstring,
  lc_mode TYPE调用程序。

 *获取打印参数
  如果gv_spoolid_ut不是INITIAL。
  lc_mode ='当前'。
  万一。

  通话功能'GET_PRINT_PARAMETERS'
  出口
  权威=空间
  副本= gc_copy_u
  cover_page =空间
  data_set =空间
  部门=空间
  目的地=空间
  到期时间= gc_exp_u
  立即=空间
  new_list_id = abap_true
  no_dialog = abap_true
  用户= sy-uname
  模式= lc_mode
  输入
  out_parameters = lw_print_params
  例外情况
  archive_info_not_found = 1
  invalid_print_params = 2
  invalid_archive_params = 3
  其他= 4。
  如果sy-subrc <> 0。
  消息ID sy-msgid类型sy-msgty编号sy-msgno
  与sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。
  万一。

 *设置打印机目的地
  如果lw_print_params-pdest =空间。
  lw_print_params-pdest = gc_dest_u。  " LOCL
  万一。

 *设置行大小和纸张格式
  lw_print_params-linsz ='132'。
  lw_print_params-paart ='X_65_132'。

 *设置线轴的打印参数
  参数上的新页打印lw_print_params
  没有对话,没有标题,没有标题。

 *检查是否输出数据
  如果不是pt_table []是INITIAL。
 *在阀芯中的ALV中打印输出数据
  执行f_print_alv_data表pt_table。
  万一。

  新页打印关闭。
 *获取线轴号
  如果gv_spoolid_ut是INITIAL。
  gv_spoolid_ut = sy-spono。
  万一。

  如果gv_spoolid_ut不是INITIAL。

  lw_print_params-linsz ='-185'。
  lw_print_params-paart ='X_65_255'。
 *将假脱机转换为OTF格式数据
  通话功能'CONVERT_ABAPSPOOLJOB_2_PDF'
  出口
  src_spoolid = gv_spoolid_ut
  dst_device = lw_print_params-pdest
  桌子
  pdf = lt_data_otf
  例外情况
  err_no_abap_spooljob = 1
  err_no_spooljob = 2
  err_no_permission = 3
  err_conv_not_possible = 4
  err_bad_destdevice = 5
  user_cancelled = 6
  err_spoolerror = 7
  err_temseerror = 8
  err_btcjob_open_failed = 9
  err_btcjob_submit_failed = 10
  err_btcjob_close_failed = 11
  其他= 12。
  如果sy-subrc <> 0。
  消息ID sy-msgid类型sy-msgty编号sy-msgno
  与sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。
  万一。

 *将OTF数据转换为Xtring格式
  循环至lt_data_otf INTO lw_pdf_otf。
  ASSIGN lw_pdf_otf至铸造。
  CONCATENATE lv_xstring  INTO lv_xstring在字节模式中。
  结局。

 *获取PDF xstring并将其转换为BCS格式
  gv_size_x_u = XSTRLEN(lv_xstring)。
  gt_objbin_x_u = cl_document_bcs => xstring_to_solix(
  ip_xstring = lv_xstring)。
  万一。

 ENDFORM。  " F_PREPARE_PDF_ATTACH 
jovirus
4楼-- · 2020-09-13 09:18

好,要传递哪些数据...取决于您的逻辑和需求!
NAST存储打印输出消息及其状态。

您要打印什么?

那是什么smartform?

SAP小菜
5楼-- · 2020-09-13 09:00

问题标题字面意思是"使用Spool将Smarform转换为PDF",我以为是Simone,这肯定是第100个问题。 :)如果这不是问题,为什么要以这个标题为题? 这会使其他人感到困惑并且无效。 大多数常客只会看到标题,甚至不会打开它。

一周热门 更多>