AT END OF PAGE

ストラクチャードモード構文

[ATEND [OFPAGE [(rep)]
statement ../graphics/dot3.gif
END-ENDPAGE

レポーティングモード構文

[ATEND [OFPAGE [(rep)]

statement

DO statement ../graphics/dot3.gif DOEND

このドキュメントでは、次のトピックについて説明します。

構文図で使用されている記号については、「構文記号」を参照してください。

関連ステートメント:AT TOP OF PAGE | CLOSE PRINTER | DEFINE PRINTER | DISPLAY | EJECT | FORMAT | NEWPAGE | PRINT | SKIP | SUSPEND IDENTICAL SUPPRESS | WRITE | WRITE TITLE | WRITE TRAILER

関連機能グループ:出力レポートの作成


関数

AT END OF PAGE ステートメントは、END OF PAGE(ページ終了)条件が発生したときに行う処理を指定します(『パラメータリファレンス』ドキュメントのセッションパラメータ PS を参照)。END OF PAGE 条件は、SKIP または NEWPAGE ステートメントでも発生します。ただし、EJECT または INPUT ステートメントの場合は発生しません。

プログラミングガイド』の次のセクションも参照してください。

処理

AT END OF PAGE ステートメントブロックは、END OF PAGE 条件が発生したときにそのステートメントブロックを含むオブジェクトが、アクティブな場合にのみ実行されます。

AT END OF PAGE ステートメントは、内部サブルーチン内には指定できません。

このステートメントは非手続き型なので、プログラム内の位置ではなくイベントによって実行されます。

論理ページサイズ

END OF PAGE のチェックは、DISPLAYWRITE ステートメントの処理の完了後に実行されます。そのため、DISPLAYWRITE ステートメントで複数行の出力を行うと、END OF PAGE 条件が発生する前に、物理ページのオーバーフローを起こすことがあります。

AT END OF PAGE ステートメントで出力される情報が、タイトルと同じ物理ページに出力されることを保証するには、物理的なページサイズより小さい論理ページサイズ(セッションパラメータ PS)を指定する必要があります。

最終ページの扱い

メインプログラム内では、ESCAPESTOP または END によりメインプログラムの実行が終了すると、END OF PAGE 条件が発生します。

サブルーチン内では、ESCAPE-ROUTINERETURN または END-SUBROUTINE によりサブルーチンの実行が終了すると、END OF PAGE 条件が発生します。

システム関数

AT END OF PAGE ステートメントで使用できる Natural システム関数については、『システム関数』ドキュメントの「処理ループでのシステム関数の使用」セクションを参照してください。

AT END OF PAGE ステートメントブロック内で、システム関数を使用する場合は、GIVE SYSTEM FUNCTIONS 節を、対応する DISPLAY ステートメントで指定する必要があります。

AT END OF PAGE と INPUT ステートメント

AT END OF PAGE ステートメントブロック内に、INPUT ステートメントを指定すると、NEWPAGE(ページ換え)処理は実行されません。INPUT ステートメントで作成した行を同じ物理ページに表示するために、セッションパラメータ PS でページサイズを物理ページサイズより小さい値に指定する必要があります。

以下の項目も参照してください。

構文説明

構文要素 説明
(rep)
レポート指定:
表記 (rep) は、AT END OF PAGE ステートメントを適用するレポートの ID を指定するために使用できます。範囲 0 - 31 の値、または DEFINE PRINTER ステートメントを使用して割り当てた論理名を指定できます。

(rep) が指定されていない場合、AT END OF PAGE ステートメントは最初のレポート(レポート 0)に適用されます。

Natural で作成した出力レポートのフォーマットを制御する方法については、『プログラミングガイド』の「レポートフォーマットおよび制御」を参照してください。

statement
AT END OF PAGE 条件で実行するステートメント:

ストラクチャードモードでは、状況に応じて、1 つ以上の適切なステートメントを指定する必要があります。ステートメントの例については、下記の「」を参照してください。

END-ENDPAGE
AT END OF PAGE ステートメントの終了:

ストラクチャードモードでは、AT END OF PAGE ステートメントを終了するには、Natural の予約語 END-ENDPAGE を使用する必要があります。

レポーティングモードでは、状況に応じて、DO ... DOEND ステートメントを使用して 1 つ以上の適切なステートメントを指定し、AT END OF PAGE ステートメントを終了します。単一のステートメントのみを指定する場合は、DO ... DOEND ステートメントを省略できます。よいコーディング習慣に則して、これはお勧めしません。

statement
DO statement ... DOEND

例 1 - AT END OF PAGE

** Example 'AEPEX1S': AT END OF PAGE (structured mode)                  
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 PERSONNEL-ID                                                        
  2 NAME                                                                
  2 JOB-TITLE                                                           
  2 SALARY    (1)                                                       
  2 CURR-CODE (1)                                                       
END-DEFINE                                                              
*                                                                       
FORMAT PS=10                                                            
LIMIT 10                                                                
READ EMPLOY-VIEW BY PERSONNEL-ID FROM '20017000'                        
  DISPLAY NOTITLE GIVE SYSTEM FUNCTIONS                                 
          NAME JOB-TITLE 'SALARY' SALARY(1) CURR-CODE (1)               
  /*                                                                    
 
 AT END OF PAGE                                                        
    WRITE / 28T 'AVERAGE SALARY: ...' AVER(SALARY(1)) CURR-CODE (1)
  END-ENDPAGE


END-READ     
*            
END

処理ループで使用する Natural システム関数」も参照してください。

プログラム AEPEX1S の出力:

        NAME                  CURRENT            SALARY   CURRENCY
                             POSITION                       CODE  
-------------------- ------------------------- ---------- --------
                                                                  
CREMER               ANALYST                        34000 USD     
MARKUSH              TRAINEE                        22000 USD     
GEE                  MANAGER                        39500 USD     
KUNEY                DBA                            40200 USD     
NEEDHAM              PROGRAMMER                     32500 USD     
JACKSON              PROGRAMMER                     33000 USD     
                                                                  
                           AVERAGE SALARY: ...      33533 USD

レポーティングモードの例については、次のプログラムを参照してください:AEPEX1R

例 2 - INPUT ステートメントでの AT END OF PAGE

** Example 'AEPEX2': AT END OF PAGE (with INPUT)                        
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 NAME                                                                
  2 FIRST-NAME                                                          
  2 POST-CODE                                                           
  2 CITY                                                                
*                                                                       
1 #START-NAME (A20)                                                     
END-DEFINE                                                              
*                                                                       
FORMAT PS=21                                                            
*                                                                       
REPEAT                                                                  
  READ (15) EMPLOY-VIEW BY NAME = #START-NAME                           
    DISPLAY NOTITLE NAME FIRST-NAME POST-CODE CITY                      
  END-READ                                                              
  NEWPAGE                                                               
  /*                                                 
 AT END OF PAGE                                     
    MOVE NAME TO #START-NAME                         
    INPUT / '-' (79)                                 
          / 10T 'Reposition to name ==>'             
                #START-NAME (AD=MI) '(''.'' to exit)'
    IF #START-NAME = '.'                             
      STOP                                           
    END-IF                                           
  END-ENDPAGE
  /*                                                 
END-REPEAT                                           
END

プログラム AEPEX2S の出力:

        NAME              FIRST-NAME        POSTAL           CITY              
                                           ADDRESS                             
-------------------- -------------------- ---------- --------------------      
                                                                               
ABELLAN              KEPA                 28014      MADRID                    
ACHIESON             ROBERT               DE3 4TR    DERBY                     
ADAM                 SIMONE               89300      JOIGNY                    
ADKINSON             JEFF                 11201      BROOKLYN                  
ADKINSON             PHYLLIS              90211      BEVERLEY HILLS            
ADKINSON             HAZEL                20760      GAITHERSBURG              
ADKINSON             DAVID                27514      CHAPEL HILL               
ADKINSON             CHARLIE              21730      LEXINGTON                 
ADKINSON             MARTHA               17010      FRAMINGHAM                
ADKINSON             TIMMIE               17300      BEDFORD                   
ADKINSON             BOB                  66044      LAWRENCE                  
AECKERLE             SUSANNE              7000       STUTTGART                 
AFANASSIEV           PHILIP               39401      HATTIESBURG               
AFANASSIEV           ROSE                 60201      EVANSTON                  
AHL                  FLEMMING             2300       SUNDBY                    
                                                                               
-------------------------------------------------------------------------------
         Reposition to name ==> AHL                  ('.' to exit)