07、20分钟真正理解SmartForm!

01、SmartForm介绍

  SmartForm是SAP设置单据的工具,用于SAP单据的设置与打印,主要原理是类似于Qt开发(即软件界面开发),笔者会从Qt开发的视角去剖析SmartForm,结合笔者的心得,以期给读者带来不一样的感悟。

02、Qt开发的原理

Qt开发是一种图形用户界面应用框架,用于开发桌面端软件,原理图大致如下。

在这里插入图片描述

03、Qt开发的视角去分析SmartForm

SmartForm是SAP开发报表的框架,具体界面如下。

在这里插入图片描述
在这里插入图片描述

基于**Qt开发的原理分析SmartForm**,原理图如下所示。

在这里插入图片描述

04、SmartForm的优势与不足

SmartForm的优势

  1. 后端代码编写简单 :访问后端代码仅查询好表头和表单的数据,传入到对应的函数即可。
  2. 减轻开发人员负担:界面设计全界面化,无需代码编写,各界面设计模块负责对应的功能,减轻开发人员的负担。

SmartForm的不足

  1. 难理解 :对初学者小白而言难以理解,不知道数据的传输流程,不理解各界面设计模块之间的联系。
  2. 界面设计复杂:笔者觉得SAP本意是减少开发人员的复杂,但界面设计复杂繁琐,创建新窗口和模板时,界面窗口内并没有更详细的预览显示,初学者没有直观的理解,激活容易报错,降低学习的积极性。

05、基于SmartForm开发一个单据并打印

Smartform具体流程,参考这个博主https://blog.csdn.net/java_zhong1990/article/details/132455896
笔者偷懒了,笔者也是参照这个博客,结合自己对SmartForm理解进行的开发,抱歉哈,内容太多了,会显得很冗余

(1)后端代码的编写

  本文创建ZSD_VBAP表,读者可根据自己的需求进行更改,具体创建表流程,可参考这个博主https://blog.csdn.net/weixin_45387285/article/details/128233642

TABLES: ZSD_VBAP.
SELECTION-SCREEN:BEGIN OF BLOCK b0 WITH FRAME TITLE TEXT-001.
  "PARAMETERS: pa_file TYPE rlgrap-filename ."文件夹上传
SELECTION-SCREEN:END OF BLOCK b0.

INITIALIZATION.
* PERform INI_SELECTION_SCREEN. " 初始化选择屏上的变量
AT SELECTION-SCREEN.
* PERform INI_DATA. " 选择屏幕输入值的验证
START-OF-SELECTION.
* PERform PRECESS_DATA. " 主要数据处理逻辑
  " --- 1 通过smartfroms 取到对应的函数名称, ZSF_SALESORDER --> /1BCDWB/SF00000039

  DATA: lv_formname   TYPE tdsfname.
  DATA: w_sfname TYPE rs38l_fnam.

  lv_formname = 'ZSD_SF_LONG'.        "改成自己的SMART名字
  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      formname           = lv_formname
    IMPORTING
      fm_name            = w_sfname
    EXCEPTIONS
      no_form            = 1
      no_function_module = 2
      OTHERS             = 3.

  " --- 2 设置打印控制
  DATA: w_control        TYPE ssfctrlop,
        w_output_options TYPE ssfcompop.

  DATA: w_job_output_options TYPE ssfcresop.

  w_output_options-tdimmed  = 'X'.
  w_output_options-tddelete = 'X'.
  w_output_options-tddest   = 'LP01'.
  w_control-no_open         = 'X'.      "没有新的假脱机请求
  w_control-no_close        = 'X'.      "不关闭假脱机请求

  " --- 3 打开输出请求 SSF
  CALL FUNCTION 'SSF_OPEN'
    EXPORTING
      output_options     = w_output_options
      control_parameters = w_control
    IMPORTING
      job_output_options = w_job_output_options
    EXCEPTIONS
      formatting_error   = 1
      internal_error     = 2
      send_error         = 3
      user_canceled      = 4
      OTHERS             = 5.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE 'I' "sy-msgty
    NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    RETURN.
  ENDIF.

  " --- 4 调用smartfrom 函数 ,传入打印参数
  DATA: ls_head like zsd_vbak,
        ls_item TYPE zsd_vbap,
        lt_item TYPE STANDARD TABLE OF zsd_vbap.

  REFRESH:lt_item.
  CLEAR:ls_head.
  ls_head-kunnr = 'ABCD666'.
  ls_head-name1 = '闯哥'.
  ls_head-vbeln = 'A1018'.
  CLEAR:ls_item.

  SELECT *
    INTO CORRESPONDING FIELDS OF TABLE lt_item
    FROM ZSD_VBAP.

  CALL FUNCTION w_sfname
    EXPORTING
      control_parameters = w_control
      zls_vbak            = ls_head
    IMPORTING
      job_output_options = w_job_output_options
    TABLES
      zsd_vbap            = lt_item
    EXCEPTIONS
      formatting_error   = 1
      internal_error     = 2
      send_error         = 3
      user_canceled      = 4
      OTHERS             = 5.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno DISPLAY LIKE 'E'
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    LEAVE LIST-PROCESSING.
  ENDIF.
*    lv_i = lv_i + 1.
*  ENDDO.

  " --- 5 关闭打印机设置
  DATA: job_output_options TYPE ssfcrescl.

  CALL FUNCTION 'SSF_CLOSE'
    IMPORTING
      job_output_info  = job_output_options
    EXCEPTIONS
      formatting_error = 1
      internal_error   = 2
      send_error       = 3
      OTHERS           = 4.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE 'I' "sy-msgty
    NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    RETURN.
  ENDIF.

(2)界面设计

   进入Smartform界面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

 ① 样式设置

在这里插入图片描述

 ② 表单设计

在这里插入图片描述

06、SmartForm功能展示

在这里插入图片描述

  • 16
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值