`
Jack Wu
  • 浏览: 887539 次
  • 来自: ...
社区版块
存档分类
最新评论

ABAP--如何写动态台账统计表(简单代码)

F# 
阅读更多

在sap开发中常常需要开发台账表,台账的统计时间是变动的, 我们通常会用临时程序来处理。我这里介绍一个简单的动态台账表(统计月份,周等在有限范围内)的实现方法。
1、申明内表
DATA: BEGIN OF gt_list OCCURS 0,
        pernr    LIKE pa0001-pernr,        "员工编号
        ename    LIKE pa0001-ename,        "员工姓名
        gjj1 TYPE p DECIMALS 2,       "计算周期一字段
        gjj2 TYPE p DECIMALS 2,       "
        gjj3 TYPE p DECIMALS 2,       "
        gjj4 TYPE p DECIMALS 2,       "
        gjj5 TYPE p DECIMALS 2,       "
        gjj6 TYPE p DECIMALS 2,       "
        gjj7 TYPE p DECIMALS 2,       "
        gjj8 TYPE p DECIMALS 2,       "
        gjj9 TYPE p DECIMALS 2,       "
        gjj10 TYPE p DECIMALS 2,       "
        gjj11 TYPE p DECIMALS 2,       "
        gjj12 TYPE p DECIMALS 2,       "计算周期12字段
        gjj TYPE p DECIMALS 2,       "计算合计字段
      END OF gt_list.
计算的周期字段由自己需求最大来定义,本例子是12个月的台账统计报表,所以只定义12个字段;

2、定义统计周期参数
PARAMETERS: p_spmons TYPE s031-spmon OBLIGATORY MEMORY ID per DEFAULT sy-datum+0(6) .
PARAMETERS: p_spmone  TYPE s031-spmon OBLIGATORY MEMORY ID per DEFAULT sy-datum+0(6) .

3、在AT SELECTION-SCREEN.事件中检查台账期间的合法性
AT SELECTION-SCREEN.
  CONCATENATE   p_spmons+0(6)  '01' INTO g_sdate.
  CONCATENATE   p_spmone+0(6)  '01' INTO g_edate.
  CALL FUNCTION 'LAST_DAY_OF_MONTHS'
    EXPORTING
      day_in            = g_edate
    IMPORTING
      last_day_of_month = g_edate.
  IF g_sdate > g_edate.
    MESSAGE '截止日期必须大于起始日期'   TYPE 'E'.
  ENDIF.
  CALL FUNCTION 'DURATION_DETERMINE'
    EXPORTING
      unit       = 'MON'
    IMPORTING
      duration   = g_count
    CHANGING
      start_date = g_sdate
      end_date   = g_edate.
  IF g_count > 12.
    MESSAGE '台帐统计不能超过12个月份'   TYPE 'E'.
  ENDIF.

4、如何定义显示Grid字段格式(参见红色部分代码)
FORM f_fieldcat_init USING im_fieldcat TYPE slis_t_fieldcat_alv
                           im_sort TYPE slis_t_sortinfo_alv.
  DATA: ls_fieldcat TYPE slis_fieldcat_alv,
        ls_sort TYPE slis_sortinfo_alv.
  DATA: s TYPE d.
  DATA: month(5).
  DATA: field(20).
  DATA: n TYPE i.
* "字段名要大写
  s = g_sdate.

  REFRESH im_fieldcat.
  REFRESH im_sort.
  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname = 'ENAME'.
  ls_fieldcat-seltext_l = '员工姓名'.
  ls_fieldcat-outputlen = '10'.
  APPEND ls_fieldcat TO im_fieldcat.

*根据输入确定显示统计输出的字段
  n = 1.
  WHILE s+0(6) <= g_edate+0(6).
    WRITE n TO month LEFT-JUSTIFIED.
    CONCATENATE 'GJJ' month INTO month.
    CONCATENATE s+0(6) '月' '金额'  INTO field.
    CLEAR ls_fieldcat.
    ls_fieldcat-fieldname =  month.
    ls_fieldcat-seltext_m = field.
    ls_fieldcat-outputlen = 15.
    ls_fieldcat-do_sum    = 'X'.
    ls_fieldcat-no_zero   = 'X'.
    APPEND ls_fieldcat TO im_fieldcat.
    n = n + 1.
    CALL FUNCTION 'START_TIME_DETERMINE'
      EXPORTING
        duration   = -1
        unit       = 'MON'
      IMPORTING
        start_date = s
      CHANGING
        end_date   = s.
  ENDWHILE.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname =  'GJJ'.
  ls_fieldcat-seltext_m =  '合计'.
  ls_fieldcat-outputlen = 15.
  ls_fieldcat-do_sum    = 'X'.
  ls_fieldcat-no_zero   = 'X'.
  APPEND ls_fieldcat TO im_fieldcat.
endform.

5、如何在计算时填写内表的合适字段
  data: l_monthdur type i,
        l_date type d.
      l_date = sdate."数据的日期
*计算数据的日期和起始日期的月份差
      CALL FUNCTION 'DURATION_DETERMINE'
        EXPORTING
          unit       = 'MON'
        IMPORTING
          duration   = l_monthdur
        CHANGING
          start_date = g_sdate
          end_date   = l_date.
      IF l_monthdur = 0.
        l_monthdur = 1.
      ENDIF.
*根据月份差将数据算到相应字段
          CASE l_monthdur.
            WHEN 1.
              gt_list-gjj1 = gt_list-gjj1 + wa_rt_header-betrg / 2.
            WHEN 2.
              gt_list-gjj2 = gt_list-gjj2 + wa_rt_header-betrg / 2.
            WHEN 3.
              gt_list-gjj3 = gt_list-gjj3 + wa_rt_header-betrg / 2.
            WHEN 4.
              gt_list-gjj4 = gt_list-gjj4 + wa_rt_header-betrg / 2.
            WHEN 5.
              gt_list-gjj5 = gt_list-gjj5 + wa_rt_header-betrg / 2.
            WHEN 6.
              gt_list-gjj6 = gt_list-gjj6 + wa_rt_header-betrg / 2.
            WHEN 7.
              gt_list-gjj7 = gt_list-gjj7 + wa_rt_header-betrg / 2.
            WHEN 8.
              gt_list-gjj8 = gt_list-gjj8 + wa_rt_header-betrg / 2.
            WHEN 9.
              gt_list-gjj9 = gt_list-gjj9 + wa_rt_header-betrg / 2.
            WHEN 10.
              gt_list-gjj10 = gt_list-gjj10 + wa_rt_header-betrg / 2.
            WHEN 11.
              gt_list-gjj11 = gt_list-gjj11 + wa_rt_header-betrg / 2.
            WHEN 12.
              gt_list-gjj12 = gt_list-gjj12 + wa_rt_header-betrg / 2.
          ENDCASE.

分享到:
评论

相关推荐

    ABAP751 ABAP - Keyword Documentation

    ABAP - Keyword Documentation This documentation describes the syntax and meaning of the keywords of the ABAP language and its object-oriented part ABAP Objects. Alongside this, language frameworks ...

    sap_ABAP-动态内表

    SAP ABAP 动态内表详解 SAP ABAP 中的动态内表是一种特殊的内表结构,它可以根据实际情况动态地生成和赋值。本文将详细介绍动态内表的创建、赋值和读取显示。 动态内表的创建 动态内表的创建主要分为两步:首先...

    ABAP-培训教材目录

    ABAP-培训教材附录 ABAP-培训教材ABAP-培训教材ABAP-培训教材ABAP-培训教材

    SAP中文教材全系列之ABAP-BC400_ZH

    本文档是《SAP中文教材全系列之ABAP-BC400_ZH》,为SAP ABAP编程语言的学习提供参考。文档包含了详细的ABAP课程内容,旨在帮助学员理解并掌握ABAP编程的基础知识和高级技能。以下将详细阐释文档所涵盖的知识点。 ...

    CD260-ABAP-in-Eclipse-开发-CN

    CD260-ABAP-in-Eclipse-开发-CN CD260-ABAP-in-Eclipse-开发-CNCD260-ABAP-in-Eclipse-开发-CNCD260-ABAP-in-Eclipse-开发-CN

    eclipse-abap-keywordcolors-master.rar

    eclipse-abap-keywordcolors eclipse-abap-关键字颜色

    ABAP-透明表学习笔记.py

    ABAP-透明表学习笔记.py

    ABAP-ALV进阶

    ALV 网格控制器主要使用来显示我们通过代码写筛选出来的数据,相关的操作在下面的程序编写部分详细介绍。 三、ALV 起步 ALV GRID CONTROL 使用了控制器技术以实现精美的屏幕显示。使用了 ABAP 的对象以后,列表是...

    ABAP-学习笔记-通用

    ABAP-学习笔记-通用

    SAP-ABAP-Certification-Review.pdf

    SAP-ABAP-Certification-Review.pdf

    ABAP-根据T-CODE找用户出口

    ### ABAP-根据T-CODE找用户出口 #### 背景与意义 在ABAP开发环境中,了解如何根据事务代码(T-CODE)查找...通过对上述代码的详细解析,读者应能掌握基本的ABAP编程技巧,并学会如何利用SAP系统表来查询和处理数据。

    ABAP-数据类型学习笔记

    ABAP-数据类型学习笔记

    ABAP-OLE开发[汇编].pdf

    ABAP-OLE开发是SAP系统中的一种技术,它允许ABAP编程语言与外部对象链接和嵌入(OLE)应用程序进行交互。OLE自动化是Windows环境中的一种技术,它使得不同的应用程序可以共享数据和服务,通常用于控制一个应用程序...

    SAP ABAP-采购申请释放后到更新发布标识.zip

    在SAP系统中,ABAP(Advanced Business Application Programming)是一种编程语言,用于开发和定制企业资源规划(ERP)软件,而MM(Materials Management)模块则是SAP中的一个重要部分,主要处理采购、库存管理和...

    ABAP-4目前最完美学习手册

    - **ABAP/4基础**:介绍了创建简单ABAP/4程序的方法,包括命名规则、程序属性指定等。 #### 创建简单的ABAP/4程序 - **命名程序**: - 程序名称必须遵循特定的规则,例如避免使用SAP保留的名称。 - **命名规则**...

    ABAP--ALV

    ### ABAP - ALV知识点详解 #### 一、ALV(Application List Viewer)概述 ALV,即Application List Viewer,是SAP系统中用于展示数据列表的一种通用工具。它能够帮助用户灵活地处理数据,包括排序、筛选等功能,...

    abap-ALV.rar_ABAP系统ALV_abap_abap开发alv

    在ABAP中,ALV(ABAP List Viewer)是一种强大的工具,用于显示和处理数据表。ALV提供了一种标准化的方式来展示表格数据,包括排序、过滤、分组和自定义列等功能,极大地简化了用户界面的开发。 标题“abap-ALV.rar...

    web-dynpro-abap-ui-element-tree_Ch01_CV_Introduction_

    它们可以是简单的文本字段、按钮,也可以是复杂的数据表或树形视图。"Tree" UI元素,如其名称所示,是一种呈现层次结构数据的控件。这种控件在处理组织结构、文件系统或任何具有分层关系的数据时非常有用。 首先,...

    ABAP-WebDynpro实例.pdf

    ABAP-WebDynpro 实例 ABAP-WebDynpro 实例是 SAP 中的一种开发技术,允许开发者创建基于 Web 的应用程序。该技术将 SAP 中开发的程序在 Web 中运行,从而不需要在客户机上安装 SAPGUI。 在本实例中,我们将创建一...

    SAP ABAP-Dictionary_查询表结构和内容.ppt

    SAP ABAP-Dictionary_查询表结构和内容 实战技术

Global site tag (gtag.js) - Google Analytics