ALV台賬統計表

2021-06-07 06:07:29 字數 3495 閱讀 1475

在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.

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.

PB 製作統計表

看到統計表,就有一種感覺 哇塞!好高大上。這是最初看見功能的時候,自己就認為特別的難搞。但是當自己看了看資料,敲了敲之後發現,其實也不過就是乙個select語句,然後乙個控制項就完全搞定了。看一下 定義引數 integer thecount 5 seriesno integer i string t...

mysql學歷統計表 php mysql 統計表

原來你是這個意思,就是說統計每一道題選a的人就多少,選b的人有多少是吧,這樣子寫,我用php簡單寫了個,能執行出來.conn mysql connect localhost root mysql select db test conn mysql query set names utf 8 data...

自定義統計表

高中的時候我們有一種統計是在座標上畫幾根柱,比重越在柱就越長。這種統計圖形怎麼來實現的呢?這就是這篇文章目的。這種圖的實現方法其實是很簡單的,並不是要我們整體畫乙個圖,只需要畫一根長方形就可以了,如果需要n根長方形,就重複畫n根,這樣,統計圖就出來了。直接上 protected voidondraw...