2015年12月12日 星期六

ABAP/4: How to get total page in report

Reference From : http://scn.sap.com/thread/109857

在報表列印時,有時可能會因為加入 NEW-PAGE,或是因為輸出字串過長換行,造成報表總頁數無法透過 "總筆數 / 每頁可顯示行數" 來進行計算可能的頁數時,則可透過下面語法進行取得 Total Page.

主要的語法是透過 SYST Structure 中的 SY-PAGNO, SY-INDEX 以及 SY-LISEL 來達成,但這三種語法並不能計算出總頁數。

下面的程式,透過 SY-PAGNO 計算目前的頁數,但並無法得知最後列印會有 6 頁 (一頁 20,TOP-OF-PAGE 一行 + 19 筆,所以一頁只能印 19 筆資料,拿 100 / 19 = 5.2 -> 6),但下面程式要到最後一頁才會知道 Page 6,但列印的 TOP-OF-PAGE 程式並無法修改

REPORT  Z_ABAP_21_WRITE_TTL_PAGE NO STANDARD PAGE HEADING LINE-SIZE 40 LINE-COUNT 20.

TOP-OF-PAGE.
  WRITE: 'PAGE: ', SY-PAGNO.

START-OF-SELECTION.

DO 100 TIMES.
  WRITE: / SY-INDEX.
ENDDO.

END-OF-SELECTION.

即然知道最後一頁才能知總頁數,因此修改程式如下,主要是先在 TOP-OF-PAGE 埋入特定字串 [#TOTAL_PAGE$] 以及記錄每次的頁數到 G_LAST_PAGE 變數中,在列印完報表程式時,透過 SY-INDEX 與 SY-LISEL 捉取目前已產生的報表的內容,再把 G_LAST_PAGE 強制取代 [#TOTAL_PAGE$] 字串,進而把最後一頁植入報表



REPORT  Z_ABAP_21_WRITE_TTL_PAGE NO STANDARD PAGE HEADING LINE-SIZE 40 LINE-COUNT 20.

DATA:
  G_LAST_PAGE LIKE SY-PAGNO,
  G_LAST_PAGE_C(10) TYPE C.

TOP-OF-PAGE.
  WRITE: 'PAGE: ', SY-PAGNO, '/ [#TOTAL_PAGE$]'.
  G_LAST_PAGE = SY-PAGNO.

START-OF-SELECTION.

DO 100 TIMES.
  WRITE: / SY-INDEX.
ENDDO.

DO G_LAST_PAGE TIMES.
  READ LINE 1 OF PAGE SY-INDEX .
  WRITE G_LAST_PAGE TO G_LAST_PAGE_C NO-GROUPING.
  CONDENSE G_LAST_PAGE_C.
  REPLACE '[#TOTAL_PAGE$]' WITH G_LAST_PAGE_C INTO SY-LISEL.
  MODIFY CURRENT LINE.
ENDDO.

END-OF-SELECTION.

沒有留言:

張貼留言

How to install & specified python version or distreibtuion package version in google colab

在買了 RTX 3080 要來 挖礦...  嗯~是跑機器學習後,結果發現了 GOOGLE COLAB,其實之前在「GAN 對抗式生成網路」一書就有看到,但資訊人就是什麼都想自己安裝,在本機用 Anaconda + pyCharm 弄了 GPU 環境,結果有天從新竹回家發現家裡沒...