SAP ABAP smartforms 创建并实现调用源码(下)

news2024/12/22 19:06:46

SAP ABAP smartforms 创建并实现调用源码(上)
smartforms 入门详见上一篇博文。

一:报表程序调用 smartforms

示例:报表选中一行,将这行机相关数据通过表单打印出来。实际例子:采购订单表,销售订单。

调用核心代码:

  • 根据SmartForm 名称获得Form的 Function Names
    call function ‘SSF_FUNCTION_MODULE_NAME’
    exporting
    formname = uv_name
    importing
    fm_name = gv_fm_name
    exceptions
    no_form = 1
    no_function_module = 2
    others = 3.

  • 传入参数
    call function gv_fm_name
    exporting
    control_parameters = ls_ssfctrlop
    ls_student = gs_student
    tables
    it_student = it_student
    exceptions
    formatting_error = 1
    internal_error = 2
    send_error = 3
    user_canceled = 4
    others = 5.

二:进阶功能
1.初始化变量
当变量是调用 smartforms 后需要计算或转换的,可以先在全局数据定义一个变量,在初始化页写代码赋值。例:打印的列表计算总和。
在这里插入图片描述
2.在se11中参考过了货币和数字单位字段,也需要在smartforms中的全局定义中做参考。否则报错消息编号601:参考字段&1在表格中未知 的错误。数量选择数据类型 ‘QUAN’ 货币选择数据类型 ‘CURR’。
在这里插入图片描述
3.动态表格行数超过一页打印纸,需要转到下一页打印并且其他部分布局和内容不变的情况,在表格下方右键新建命令。
在这里插入图片描述
PS:一定要设置条件页(仅在页为第一页)和常规属性(转到新页第二页)。

在这里插入图片描述
除了命令所在页,后续还有几页就创建几个命令。设置的所在页和转到下一页依次累加。
在这里插入图片描述
4.当前页码/总页码
在这里插入图片描述
&SFSY-PAGE&/&SFSY-JOBPAGES&
5.根据判断条件决定文本显示。在条件栏输入对应关系,下图的例子表示当这个字段是’张三’的时候就显示,否则不显示。文本的话要用引号。
在这里插入图片描述

三:全部代码

*&---------------------------------------------------------------------*
*& Report ZTEST_EXPORT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZTEST_EXPORT.


*----------------------------------------------------------------------*
* Type-pools/定义类型池
*----------------------------------------------------------------------*
TYPE-POOLS: slis.

*----------------------------------------------------------------------*
* Tables/声明数据库表
*----------------------------------------------------------------------*
TABLES:ZMMTEST.

*----------------------------------------------------------------------*
* Type/自定义类型
*----------------------------------------------------------------------*
TYPES:BEGIN OF ty_alv,
        sel type char1,  "是否被选择
        id   type zmmtest-id,
        name type zmmtest-name,
        age  type zmmtest-age,
        sex  type zmmtest-sex,
        hobby type zmmtest-hobby,
        "include TYPE zmmtest,
        times     type numc4,    "打印次数
  END OF ty_alv.

DATA:gt_alv      TYPE STANDARD TABLE OF ty_alv,
     gs_alv      TYPE ty_alv,
     gt_print    type standard table of ty_alv,
     gs_student  type zmmtest,
     it_student  type TABLE OF zmmtest.
DATA:gv_fm_name TYPE rs38l_fnam.

*-------------------------------------*
* Define the Macros/定义
*----------------------------------------------------------------------*
DEFINE set_fieldcat.
  CLEAR gs_fcat_lvc .
  gs_fcat_lvc-fieldname = &1."内表的字段
  gs_fcat_lvc-outputlen = &2."输出长度
  gs_fcat_lvc-scrtext_l = &3."在ALV里面显示的名字
  gs_fcat_lvc-just      = &4."水平对齐方式,L左对齐,R右对齐。
  gs_fcat_lvc-no_zero   = &5."去除前导零
  APPEND gs_fcat_lvc TO gt_fcat_lvc .
END-OF-DEFINITION.
*----------------------------------------------------------------------*
* 声明ALV对象
*----------------------------------------------------------------------*
DATA:gs_layout_lvc TYPE lvc_s_layo,
     gt_fcat_lvc   TYPE lvc_t_fcat,
     gs_fcat_lvc   TYPE lvc_s_fcat.
*----------------------------------------------------------------------*
* Internal table and work area/定义内表和工作区
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* Selection  screen/定义屏幕
*----------------------------------------------------------------------*
SELECTION-SCREEN FUNCTION KEY: 1 .
SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE TEXT-t01.
    SELECT-OPTIONS: s_id FOR zmmtest-id,
                    s_name FOR zmmtest-name,
                    s_age FOR zmmtest-age,
                    s_sex FOR zmmtest-sex,
                    s_hobby FOR zmmtest-hobby.
SELECTION-SCREEN END OF BLOCK block1.
*----------------------------------------------------------------------*
* Initialization/初始事件
*----------------------------------------------------------------------*
INITIALIZATION.

*----------------------------------------------------------------------*
* At selection-screen/屏幕事件
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.

*----------------------------------------------------------------------*
* AT SELECTION-SCREEN OUTPUT
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
*----------------------------------------------------------------------*
* Start-of-selection/开始选择事件
*----------------------------------------------------------------------*
START-OF-SELECTION.
*取数据
  PERFORM frm_get_data.
*ALV展示
  PERFORM frm_display_alv.
*----------------------------------------------------------------------*
* End-of-selection/结束选择事件
*----------------------------------------------------------------------*
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM frm_get_data .
  SELECT *
    INTO CORRESPONDING FIELDS OF TABLE gt_alv
    from zmmtest
    where id in s_id
       AND name in s_name
       AND age  in s_age
       AND sex  in s_sex
       AND hobby in s_hobby.

endform.

*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM frm_display_alv .
  set_fieldcat:'ID'  '' '学号' '' '',
               'NAME' '' '学生姓名' '' '',
               'AGE' '' '年龄' '' '',
               'SEX' '' '性别' '' '',
               'HOBBY' '' '兴趣爱好' '' ''.
  CLEAR:gs_layout_lvc.
  gs_layout_lvc-zebra     = 'X'.
  gs_layout_lvc-cwidth_opt   = 'X'.
  gs_layout_lvc-box_fname   = 'SEL'.   "选择框
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program = sy-repid
      i_callback_pf_status_set = 'FRM_PF_STATUS'
      i_callback_user_command  = 'FRM_USER_COMMAND'
      is_layout_lvc      = gs_layout_lvc
      it_fieldcat_lvc    = gt_fcat_lvc
      i_save             = 'A'
    TABLES
      t_outtab           = gt_alv
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.
  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.
*&---------------------------------------------------------------------*
*&      Form  FRM_PF_STATUS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_pf_status USING pt_extab TYPE slis_t_extab .
  SET PF-STATUS 'STATUS' .

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_USER_COMMAND
*&---------------------------------------------------------------------*
*       自定义的用户命令处理
*----------------------------------------------------------------------*
*      -->PV_UCOMM      用户命令类型
*      -->PS_SELFIELD  用户命令信息
*----------------------------------------------------------------------*
form frm_user_command using pv_ucomm type sy-ucomm
      ps_selfield type slis_selfield.
  data: lr_grid type ref to cl_gui_alv_grid.
*  ps_selfield-refresh    = 'X'.
*  ps_selfield-col_stable = 'X'.
*  ps_selfield-row_stable = 'X'.
  data : lv_stable type lvc_s_stbl.
  lv_stable-row = '1'.
  lv_stable-col = '1'.

  call function 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    importing
      e_grid = lr_grid.
  call method lr_grid->check_changed_data.

  case pv_ucomm.
    when '&PRINT'.
      perform frm_print_data.
    when 'ALL'.
      perform frm_select_all.
    when 'SAL'.
      perform frm_deselect_all.
    when '&IC1'.
      read table gt_alv index ps_selfield-tabindex into gs_alv.  "获取单击行
      if ps_selfield-fieldname = 'SEL' and gs_alv-sel = ''.
        gs_alv-sel = 'X'.
        modify gt_alv from gs_alv transporting sel where id = gs_alv-id.
      elseif ps_selfield-fieldname = 'SEL' and gs_alv-sel = 'X'.
        gs_alv-sel = ''.
        modify gt_alv from gs_alv transporting sel where id = gs_alv-id.
      endif.
  endcase.
*刷新
  call method lr_grid->refresh_table_display
    exporting
      is_stable = lv_stable.
endform.

*&---------------------------------------------------------------------*
*& Form FRM_SELECT_ALL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
form frm_select_all .
  loop at gt_alv into gs_alv.
    gs_alv-sel = 'X'.
    modify gt_alv from gs_alv index sy-tabix transporting sel.
  endloop.
endform.
*&---------------------------------------------------------------------*
*& Form FRM_DESELECT_ALL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
form frm_deselect_all .
  loop at gt_alv into gs_alv.
    gs_alv-sel = ''.
    modify  gt_alv from gs_alv index sy-tabix transporting sel .
  endloop.
endform.

*&---------------------------------------------------------------------*
*& Form FRM_PRINT_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
form frm_print_data .
  refresh gt_print.
  loop at gt_alv into gs_alv where sel = 'X'.
    append gs_alv to gt_print.
  endloop.
  if sy-langu  = '1'.
    if gt_print is initial.
      message '请选择需打印的凭证' type 'E' display like 'S'.
    endif.
  else.
    if gt_print is initial.
      message 'Please select the certificate to print' type 'E' display like 'S'.
    endif.
  endif.

*获取数据
"perform frm_select_data.
  if sy-langu = '1'.
    perform frm_open_print_window using 'ZMMFTEST'.
  else.
    perform frm_open_print_window using 'ZMMFTEST_EN'.
  endif.
  perform frm_get_print_data.
  perform frm_close_print_window.
endform.
*&---------------------------------------------------------------------*
*& Form FRM_SELECT_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
form frm_select_data .
"根据实际查询需要
endform.

*&---------------------------------------------------------------------*
*& Form FRM_OPEN_PRINT_WINDOW
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
form frm_open_print_window using uv_name type tdsfname..
  data:ls_ssfcompop type ssfcompop,
       ls_ssfctrlop type ssfctrlop.
  ls_ssfcompop-tdimmed = 'X'.
  ls_ssfcompop-tddelete = 'X'.
  ls_ssfcompop-tdiexit = 'X'.

  ls_ssfctrlop-no_open = 'X'.
  ls_ssfctrlop-no_close = 'X'.
  ls_ssfctrlop-langu = sy-langu.
* 根据SmartForm 名称获得Form的 Function Names
  call function 'SSF_FUNCTION_MODULE_NAME'
    exporting
      formname           = uv_name
    importing
      fm_name            = gv_fm_name
    exceptions
      no_form            = 1
      no_function_module = 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.
*****打开打印窗口
  call function 'SSF_OPEN'
    exporting
      user_settings      = ''
      output_options     = ls_ssfcompop
      control_parameters = ls_ssfctrlop
    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.
  endif.
endform.
*&---------------------------------------------------------------------*
*& Form FRM_CLOSE_PRINT_WINDOW
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
form frm_close_print_window .
  data: ls_ssfcrescl type ssfcrescl.

*****关闭打印窗口
  call function 'SSF_CLOSE'
    importing
      job_output_info  = ls_ssfcrescl
    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 ls_ssfcrescl-outputdone = 'X'.
    loop at gt_print into gs_alv.

*更改ALV数据
      gs_alv-times = gs_alv-times + 1.
      modify gt_alv from gs_alv transporting times where id = gs_alv-id.
      if sy-langu = '1'.
        message '打印成功' type 'S'.
      else.
        message 'Print success' type 'S'.
      endif.
    endloop.
  endif.
endform.
*&---------------------------------------------------------------------*
*& Form FRM_GET_PRINT_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
form frm_get_print_data .
  loop at gt_print into gs_alv.
*打印
     gs_student = CORRESPONDING #( gs_alv ).

     it_student =  CORRESPONDING #( gt_alv ).

    perform frm_print.
  endloop.

endform.

*&---------------------------------------------------------------------*
*& Form FRM_PRINT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
form frm_print.
  data:ls_ssfctrlop type ssfctrlop.
  data lv_page type i.
  ls_ssfctrlop-no_open = 'X'.
  ls_ssfctrlop-no_close = 'X'.
****打印
  call function gv_fm_name
    exporting
      control_parameters = ls_ssfctrlop
      ls_student          = gs_student
    tables
      it_student            = it_student
    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.
  endif.
endform.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/603733.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

低代码平台iVX

一、ivx是啥 编写复杂的代码仍然是一项具有挑战性的任务。然而&#xff0c;现在有一种令人振奋的解决方案出现了——iVX&#xff0c;这是一种创新的可视化编程语言&#xff0c;为每个人提供快速掌握的能力。 iVX 是一个 “零代码” 的可视化编程语言&#xff0c;“零代码” 是…

基于flask的web应用开发——认识@app.route

目录 0. 前言1. flask简介2. 编写你的第一个网页3. 运行效果查看4. 本节小结 0. 前言 本专栏以基于flask实现web前端&#xff0c;即制作一个自己的网页 本节学习路由装饰器app.route() 操作系统&#xff1a;Windows10 专业版 开发环境&#xff1a;Pycahrm Comunity 2022.3 …

chatgpt赋能python:Python加R:让数据科学更加高效

Python加R&#xff1a;让数据科学更加高效 在过去的几年里&#xff0c;Python和R成为数据科学领域中最受欢迎的编程语言。它们提供了丰富的库和工具&#xff0c;帮助从事数据分析和机器学习的人们更加高效地完成任务。然而&#xff0c;Python和R都有其各自的优缺点。 Python的…

代理IP基础、实际运用,以及如何获取

代理IP是指通过一个中间服务器来转发用户的网络请求&#xff0c;从而在网络上隐藏用户的真实IP地址&#xff0c;或者绕过网络限制以达到访问特定内容的目的。下面是代理IP的一些基础知识&#xff1a; 1、代理IP的分类&#xff1a;代理IP可以分为普匿代理IP、透明代理IP和高匿代…

互联网医院牌照申请的资料以及流程

随着互联网的发展&#xff0c;互联网医院逐渐成为一个热门话题&#xff0c;越来越多的医疗机构开始尝试在互联网上提供医疗服务。然而&#xff0c;想要在互联网上开展医疗服务&#xff0c;必须获得互联网医院牌照。本文将介绍互联网医院牌照申请需要的资料、条件&#xff0c;以…

算法提高-搜索-DFS之剪枝与优化

DFS之剪枝与优化 DFS之剪枝与优化AcWing 165. 小猫爬山AcWing 166. 数独AcWing 167. 木棒AcWing 168. 生日蛋糕 DFS之剪枝与优化 AcWing 165. 小猫爬山 DFS的五种剪枝方法 &#xff08;1&#xff09;优化搜索顺序 &#xff08;2&#xff09;排除等效冗余 &#xff08;3&#…

chatgpt赋能python:Python删除目录:如何在项目中正确删除文件夹?

Python 删除目录&#xff1a;如何在项目中正确删除文件夹&#xff1f; 在使用Python语言进行程序开发的过程中&#xff0c;可能会需要删除不再需要的目录&#xff0c;例如缓存和日志文件夹。然而&#xff0c;删除目录需要小心谨慎&#xff0c;避免误删除重要文件或目录。在本文…

chatgpt赋能python:Python列表自动排序

Python列表自动排序 Python是一种流行的编程语言&#xff0c;它有很多有用的内置函数和数据结构。其中一个最常用的数据结构是列表。在Python中&#xff0c;列表是一个有序的集合&#xff0c;可以存储多种类型的元素。列表不仅仅是一个数据结构&#xff0c;它还有一些有用的方…

Flink standalone 集群会话模式部署搭建

环境准备 1、Centos7集群环境搭建 2、flink-1.17.0-bin-scala_2.12.tgz 安装包&#xff0c;下载地址 规划 服务器角色iphadoop01JobManager TaskManager192.168.140.132hadoop02TaskManager192.168.140.133hadoop03TaskManager192.168.140.134 安装 1、下载 flink-1.17.0-…

【Unity3D】边缘检测特效

1 边缘检测原理 边缘检测的原理是&#xff1a;检测每个像素周围的像素亮度差&#xff0c;如果亮度差异较大&#xff0c;就将该像素识别为边缘&#xff0c;并进行边缘着色。 使用过卷积神经网络&#xff08;CNN&#xff09;的读者&#xff0c;一定知道卷积运算&#xff0c;笔者之…

储能基础知识【一】

储能基础知识【一】 1、基础名词、概念、对应的英文单词、系统组成2、储能电池系统组成图3、性能指标 1、基础名词、概念、对应的英文单词、系统组成 电池储能系统&#xff08;Battery Energy Storage System, BESS&#xff09;&#xff1b;电芯&#xff08;Battery Cell&…

总结887

学习目标&#xff1a; 周目标&#xff1a;强化强3讲&#xff0c;英语背3篇文章并回诵&#xff0c;检测&#xff0c;一套数学模拟题 每日必复习&#xff08;5分钟&#xff09; 复习第四讲方程组 学习内容&#xff1a; 暴力英语&#xff1a;背诵《happiness is a journey》每日…

《HTTPS协议原理》

【一】https协议是啥子&#xff1f; https也是一个应用层协议&#xff0c;实在http协议的基础上&#xff0c;引入了一个加密层&#xff0c;http协议的内容都是按照文本的方式进行明文传输的&#xff0c; 这就导致了在传输的过程中出现一些被篡改的情况。 【二】啥是加密&…

操作系统复习3.1.0-内存

内存 程序是由内存放到CPU才可处理&#xff0c;前面一直有提到外存、内存&#xff0c;外存I/O速度十分慢&#xff0c;而内存I/O速度快&#xff0c;CPU I/O速度也快。 因此内存是缓和外存和CPU间I/O速率差异问题 为区分并发环境下程序数据存放地方&#xff0c;就给内存的存储单…

前端 js 栈内存和堆内存 基本数据类型和复杂数据类型的区别?

前端 js 栈内存和堆内存 基本数据类型和复杂数据类型的区别&#xff1f; 先了解一下JavaScript 数据类型有哪些&#xff1f; javaScript 中有8种基本的数据类型&#xff1a;7种为基本数据类型&#xff0c;而Object 为复杂数据类型 基本数据类型&#xff08;原始数据类型&#…

OpenMMLab-AI实战营第二期-人体关键点检测与MMPose

人体关键点检测与MMPose 课程链接&#xff1a;https://www.bilibili.com/video/BV1kk4y1L7Xb 这个课程的大致内容是介绍如何从给定的二维影像中恢复出人体的姿态&#xff08;2D或者3D&#xff09;&#xff0c;大纲如下所示&#xff0c;基本上可以认为流程是&#xff1a;先是恢…

Spring Boot 日志配置(Slf4j)

SLF4J与Logback简介 Java日志框架众多&#xff0c;常用的有java.util.logging, log4j, logback&#xff0c;commons-logging等。 SLF4J (Simple Logging Facade For Java)&#xff0c;它是一个针对于各类Java日志框架的统一Facade抽象。SLF4J定义了统一的日志抽象接口&#x…

Linux命令学习之pwd和ls

pwd pwd是查看当前所在目录的命令。 可以看到当前所在目录是/root。在这里需要注意/是根目录&#xff0c;是所有其他目录的父节点&#xff0c;/root目录是root用户的家&#xff08;home&#xff09;目录&#xff0c;这是两个不同的目录。 man pwd可以看一下pwd的帮助&#xf…

Power BI 如何生成动态指标散点图

前言 本文介绍如何在Power BI中创建动态散点图&#xff0c;可以自由切换X轴和Y轴的指标。 数据下载&#xff1a; 使用的是CSDN后台的单篇文章分析数据&#xff0c;在“作品数据”页点击“导出数据”。 因为都是累计值&#xff0c;所以用了两天的数据&#xff0c;手动添加…

[数据挖掘02] pandas的分配和聚合函数

一 说明 窗口函数是什么&#xff1f;窗口函数是时间序列的局部属性处理函数&#xff0c;比如&#xff0c;一维卷积滤波、移动平均、指数平均本篇我们将针对pandas对象的窗口函数展开讨论&#xff0c;并以示例展示他们的概念实质。 二 窗口函数、分组函数&#xff08; GroupBy …