# 日報月報年報アクションによるレポート構築の基本

マニュアル > サーバ作成ガイド > アクション編 > アクションの応用 > 日報月報年報 > # 日報月報年報アクションによるレポート構築の基本 |

| 本項のドキュメントは、旧バージョンの日報集計機能である「日報月報年報アクション」に関する参考資料です。日報月報年報アクションは、旧バージョンで開発されたシステムとの上位互換のために残された機能です。日報集計・レポート作成機能の構築が必要な場合は、サマリアクションを使用してください。

概要

ここでは、実際に日報・月報・年報アクションを使ってレポートを作成するための簡単な設定手順について解説します。

ここで紹介する手順は、大きく分けて以下の3ステップです。

ステップ１ | ロガーの作成 | ロガーアクションを用い、レポートを作成する生データをデータベースへ保存します。
ステップ２ | アクション設定 | 日報月報年報アクションを用い、定期的にレポートを自動作成する設定を行います。
ステップ３ | レポートの表示 | Panel Browserの日報グリッドコントロールを用い、レポートを閲覧できるようにします。また、Panel Browserから印刷の指示を行えるようにします。

この機能のサンプルは、以下からご利用頂けます。

ロガーアクションで、PLCからデータを取得し、データベースへデータを保存します。レポートの作成はPanel Browserから手動で行うこともできますが、ここではPanel Serverで自動的に作成するように設定します。Panel Browserからは、Panel Serverによって自動生成されたレポートを閲覧します。また、Panel Browserからレポートの印刷指示を行えるようにします。

生データの保存形式はCSVとし、下記のフォーマットに従い保存されるデータからレポートを作成します。

データベース形式 ：CSV

ファイル名 ：DByyyymmdd.csv（日ごとにファイルを分割し、日付を付加）

CSV列 | 種別 | データ
0 | 時刻フィールド | yyyy/mm/dd HH:MM:SS
1 | アナログデータ | 数値
2 | アナログデータ | 数値
3 | アナログデータ | 数値
4 | アナログデータ | 数値
5 | アナログデータ | 数値
6 | アナログデータ | 数値
7 | アナログデータ | 数値
8 | アナログデータ | 数値
9 | アナログデータ | 数値
10 | アナログデータ | 数値

本サンプルではデータを10分ごとに保存します。

例）

DB20050101.csv

0列 | 1列 | 2列 | ・・・ | 9列 | 10列
2005/1/1 00:00:00 | 12 | 43 | ・・・ | 20 | 85
2005/1/1 00:10:00 | 14 | 46 | ・・・ | 23 | 74
・・・ | ・・・ | ・・・ | ・・・ | ・・・ | ・・・
2005/1/1 23:50:00 | 12 | 55 | ・・・ | 15 | 68

DB20050102.csv

0列 | 1列 | 2列 | ・・・ | 9列 | 10列
2005/1/2 00:00:00 | 25 | 42 | ・・・ | 28 | 77
・・・ | ・・・ | ・・・ | ・・・ | ・・・ | ・・・
2005/1/2 23: 50:00 | 32 | 36 | ・・・ | 23 | 68

ステップ１（タグの設定）

1.ステップ１では、ロガーアクションを用いPLCのデータをCSVファイルへ保存します。
本サンプルでは、毎時0分、10分、20分、30分、40分、50分になるとSD0000からSD0009までのアナログデータをCSVファイルへ保存する設定を行います。

時刻 | SD0000 | SD0001 | ・・・ | SD0008 | SD0009
2005/1/1 00:00:00 | 123 | 3 | ・・・ | 45 | 24
2005/1/1 00:10:00 | 124 | 4 | ・・・ | 47 | 28
2005/1/1 00:20:00 | 125 | 5 | ・・・ | 49 | 37
・・・ | ・・・ | ・・・ | ・・・ | ・・・ | ・・・

| ロガーアクションは、PLCのデータをデータベースへ保存するための強力な機能です。

タグ設定

下記の手順に従ってタグを設定して下さい。ここでは、仮想デバイスを用いPLCをシミュレートしますので、PLCは必要ありません。PLCが手元にあれば、PLCのタグを設定してもかまいません。

1.左側のツリーの「Driver」を右クリックし「ユニット追加」を選択

2.「メモリ」の「仮想通信」「仮想デバイス」を選択し、「OK」を押す

3.「U01」を右クリックし「フォルダ追加」を選択

4.「F01」を右クリックし「タグ連続追加」を選択

5.「SD 特殊レジスタ」を選択し「次へ」を押す

6.なにも設定せず「次へ」を押す

7.「作成個数」に10を設定し、「完了」を押す
SD0000-SD0009までの数値タグが10個作成されます（SDは実行時、自動的に値が変化します）。

アクション設定

1.左側のツリーの「Action」を右クリックしメニューから「追加」「アクション」を選択

2.アクションの追加ダイアログから「ロガー（CSV）」を選択し、「OK」を押す

3.「A01」を右クリックし「プロパティ」を選択
下記のように設定し、「OK」を押す
・ここでは「ファイル名」を「DB.csv」に設定

4.「A01」を右クリックし「追加」「時刻フィールド」を選択
「A01」内に時刻フィールド「F01」が追加されます。

5.すべてのタグを選択し、「A01」へドラックアンドドロップする

6.「次へ」ボタンで次へ移動し、「完了」を選択
「U01_F01_SD0000」から「U01_F01_SD0009」までのフィールドが作成されます。

上記がCSVファイルのフォーマットになります。最初に時刻フィールドが書き出され、続いてSD0000からSD0009の値がカンマ区切りで順番に並びます。フィールドの順番を変えたい場合は、フィールドを右クリックし、メニューから「上へ」「下へ」で移動させて下さい。

イベント設定

前述で作成したロガーアクションを呼び出すためのイベントを作成します。

1.左側のツリーの「Event」を右クリックしメニューから「追加」「定刻イベント」を選択
「Event」内に「E01」が追加されます。

2.左側リストの「E01」を右クリックし「プロパティ」を選択

3.「定刻イベント」タブで毎時0分にイベントを発生するようにする
毎年、毎月、毎日、毎時をチェックし、0分になっていることを確認する

4.「実行アクション」タブで「A01」を登録する
この設定により毎時0分になると「A01」が実行されます。

5.さらに5個のイベント（E02～E06）を追加し、それぞれ毎時10分、毎時20分、毎時30分、毎時40分、毎時50分に、「A01」を実行するように登録する
最初にE01を選択し、Ctrl-Cでコピーし、Ctrl-Vを5回押してコピーをするとE02～E06が簡単に作成できます。コピー作成後、各イベントの定刻イベントタブから10分、20分…50分を設定してください。この設定により、毎時0分、毎時10分、毎時20分、毎時30分、毎時40分、毎時50分にPLCのデータがCSVファイルに保存されるようになります。
E02
…
E06

動作確認（ロガーアクション）

「オンラインモニタ」ボタン（黄ボタン）を押した後、左ツリーの「Action」をクリックすると、右側のリストに実行された回数が表示されます。この数値が毎時0分、毎時10分、毎時20分、毎時30分、毎時40分、毎時50分になるごとにインクリメントされればOKです。

ファイルの確認

上記カウントがインクリメントされたら、「ストップ」ボタン（黒ボタン）を押してログをストップさせて下さい。

所定のフォルダに「DByyyymmdd.csv」というファイルが作成されていることを確認し、ファイルを開いてログがきちんと取れているか内容を確認して下さい。

| Panel Serverは３つのオンラインの状態があります。 赤：オンライン（デバック） 仮想的に通信します。PLCが手元に無いときに使用します。 黄：オンライン（モニタ） アプリケーションで現在値の確認や設定が行えます。 緑：オンライン（最速） アプリケーションは消え、タスクバーへアイコンとして表示されます。

ステップ２（日報月報年報アクション）

ステップ2では、日報月報年報アクションを用いて、ステップ1で用意した生データを元にレポートを作成するための設定を行います。

日報・月報・年報アクションの設定

1.左側のツリーの「Action」を右クリックしメニューから「追加」「アクション」を選択

2.アクションの追加ダイアログから「日報・月報・年報」を選択し、「OK」を押す

3.「A02」を右クリックし「プロパティ」を選択

4.「基本設定」タブから下記のように設定し、「OK」を押す
・ここでは「ファイル名」を「REP.txt」に設定しています。（※実際はレポートファイルを保存したいパスを設定して下さい）

5.「日報」「月報」「年報」タブから下記のように設定し、「OK」を押す
レポートのタイトルおよび、レイアウトマスタファイルを指定します。ここでは、サンプルとして用意されているレイアウトマスタ「layoutmaster.xls」を使用します。また、ここではクライアントからレポートの変更ができないように、「手動データ変更を許可」のチェックをはずします。
・日報タイトル：「日報サンプルタイトル」
・日報エクセルファイル（レイアウトマスタ）： layoutmaster.xls
・日報エクセルシート名：DAY_H_A4
・月報タイトル：「月報サンプルタイトル」
・月報エクセルファイル（レイアウトマスタ）： layoutmaster.xls
・月報エクセルシート名：MONTH_H_A4
・年報タイトル：「年報サンプルタイトル」
・年報エクセルファイル（レイアウトマスタ）： layoutmaster.xls
・年報エクセルシート名：YEAR_H_A4

| 日報、月報、年報のレイアウトは、1つのExcelブック内にまとめることができます。尚、実際の開発では、サンプルとして用意されているreportmaster.xlsから適当な名前を付けてコピーした後、Excelでレイアウトを自由に編集して流用すると効率的です。

6.「印刷」タブから下記のように設定し、「OK」を押す
・見出し数：2
・水平結合：項目１をチェック
・プリンタ1：必要があれば、プリンタを設定して下さい。OSに設定されているデフォルトのプリンタでよければ、何も設定する必要はありません。

7.タグフィールドを追加する
タグフィールドとは、ヒストリカルデータ内に含まれる各データ項目をレポートとして集計するための、対応付けと集計方法の設定を行うための設定です。集計したいデータ毎にタグフィールドを追加して、個々に設定を行います。まず、タグフィールドを1つ追加します。ツリーから「A02」を右クリックし「追加」「タグフィールド」を選択してください。
「A02」内にタグフィールド「F01」が追加されました。

8.タグフィールド「F01」のプロパティを設定する
●基本設定タブ
・項目１：「グループA」
・項目２：「DATA0」
・集計：合計値・平均値・最小値・最大値をチェック
●詳細設定タブ
・小数点桁数２桁
●タグフィールドタブ
・データソース：A01.U01_F01_SD0000
・統計処理：平均値
※データソースはロガーアクションで設定したCSVファイルの「U01_F01_SD0000」列を指定します。

9.同様にタグフィールド「F02」～「F10」を追加し、プロパティを設定する
※最初に「F01」をコピー＆貼り付けで計９個追加してから設定を変更すると効率的です。

フィールド | 項目１ | 項目２ | 集計 | 小数点 | データソース | 統計処理
F01 | グループA | DATA0 | すべてチェック | ２桁 | A01. U01_F01_SD0000 | 平均値
F02 | グループA | DATA1 | すべてチェック | ２桁 | A01. U01_F01_SD0001 | 平均値
F03 | グループB | DATA2 | すべてチェック | ２桁 | A01. U01_F01_SD0002 | 合計値
F04 | グループB | DATA3 | すべてチェック | ２桁 | A01. U01_F01_SD0003 | 合計値
F05 | グループC | DATA4 | すべてチェック | ２桁 | A01. U01_F01_SD0004 | 開始値
F06 | グループC | DATA5 | すべてチェック | ２桁 | A01. U01_F01_SD0005 | 開始値
F07 | グループD | DATA6 | すべてチェック | ２桁 | A01. U01_F01_SD0006 | 中央時刻値
F08 | グループD | DATA7 | すべてチェック | ２桁 | A01. U01_F01_SD0007 | 中央時刻値
F09 | グループE | DATA8 | すべてチェック | ２桁 | A01. U01_F01_SD0008 | 最終値
F10 | グループE | DATA9 | すべてチェック | ２桁 | A01. U01_F01_SD0009 | 最終値

10.日報レイアウトをカスタマイズする
現在使用しているレイアウトマスタ「layoutmaster.xls」は、すでにサンプル用にレイアウトが変更済みです。実際の開発でのレイアウトマスタの作成は、雛型として用意されている「reportmaster.xls」から適当な名前を付けてコピーした後、Excelで色、罫線、列数などのレイアウトを自由に編集することによって行います。よって、ここではreportmaster.xlsからlayoutmaster.xlsという名前でコピーしたばかりの状態であるものと仮定して、レイアウトのカスタマイズ方法について解説を続けます。「reportmaster.xls」からコピーしたばかりの状態では、データのための列数が12列になっています。今回は10列しか必要ないため、不要な2列を削除します（12列のままで2列を空白で印刷してもOKであればそのままでもかまいません）。
作業例）
削除はH及びI列を選択し、「編集」「削除」を選択します。タイトル「**Title」の位置を「F2」へずらします。「ファイル」「印刷プレビュー」で全体のサイズを確認しながら、列の幅を調整します。
また、見出し行（「**HEAD1」～「**HEAD4」）が初期状態では４行になっています。今回の設定では見出し数は「2」にしたので、不要な見出し行を２行削ります（４行のままでOKであればそのままでもかまいません）。
作業例）
削除は５及び６行を選択し、「編集」「削除」を選択します。「**Head4」を「**Head2」に変更します。「ファイル」「印刷プレビュー」で全体のサイズを確認しながら、行の幅を調整します。
また、項目１（**HEAD1）では、グループA～グループEを水平結合させる設定をしているので、下記のセルを結合させます。
グループA：B4：C4
グループB：D4：E4
グループC：F4：G4
グループD：H4：I4
グループE：J4：K4
作業例）
B4とC4を選択し、Excelのメニュー「書式」「セル」を選択し、ダイアログの「配置」タブの「セルを結合する」をチェックする。同じようにグループB～グループEのセルも行う。

11.同様に月報用シート「MONTH_H_A4」のレイアウトをカスタマイズする

12.同様に年報用シート「YEAR_H_A4」のレイアウトをカスタマイズする

定刻イベントの設定

ここでは日報月報年報を自動作成（自動集計）する設定を行います。作成した時点で、生データを元に日報の集計が行われます。レポートは何度でも作り直し、再集計をすることができます。ここでは、日中であっても、常に最新の状況を閲覧できるように設定します。

日報：1時間毎（毎時1分）に自動作成し、最新の日報レポートを作成します。

月報：1日毎（毎日0時1分）に自動作成し、最新の月報を作成します。

年報：1ヶ月毎（毎月1日0時1分）に自動作成し、最新の年報を作成します。

上記はあくまでも例であり、レポートを作成するタイミングは運用方法に応じて自由に設定できます。また、自動でレポートを生成しないような設定にすることもできます（その場合は、レポート表示時に対象レポートを手動で作成します）。また、レポートの作成だけでなく印刷やメンテナンス（古いレポートの削除）を自動で行うこともできます。

1.前章までの設定が行われていることを確認する

2.左側のツリーの「Event」を右クリックしメニューから「追加」「定刻イベント」を選択
「Event」内に「E07」が追加されます。

3.左側リストの「E07」を右クリックし「プロパティ」を選択

4.「定刻イベント」で下記の設定を行う
・毎年/毎月/毎日/毎時：チェックする
・分：1

5.「実行アクション」タブで「A02」の呼び出しを定義する
パラメータに「CREATE(DAY,NOW-10M,NOW-10M,0)」と入力します。この設定により毎時1分に日報が作成されます。
レポートの作成のパラメータは下記の書式になります。
CREATE(レポートタイプ, 作成開始時刻, 作成終了時刻, 集計が終わったものを除く)
レポートタイプ: YEAR - 年報 MONTH - 月報 DAY - 日報
作成開始時刻: 作成を開始するレポートの日付（相対時刻フォーマット）
作成終了時刻: 作成を終了するレポートの日付（相対時刻フォーマット）
集計が終わったものを除く: 0 - 集計が終わったものも再生成する 1 - 集計が終わったものは除く
作成開始時刻、作成終了時刻では、「NOW-10M」すなわち「イベント発生時刻から10分前の時刻」を指定しています。これは、日が変わるまでは1時間毎に当日の日報を作成し、日の変わり目には前日の日報を作成させるための工夫例です。
（※日報の集計は指定した年月日の単位で処理されます。時刻は見ていません）

| 相対時刻フォーマットについては「相対時刻フォーマット」を参照してください。また、CREATE以外にもPRINT/ MAINTENANCEパラメータを用いることでレポートの自動印刷や、古い日報ファイルの自動削除が行えます。

6.同様に「定刻イベント」「E08」「E09」を追加し下記のように設定する
「E08の定刻イベントタブ」
・毎年/毎月/毎日：チェックする
・時：0
・分：1
「E08の実行アクションタブ」
・アクション名：A02
・パラメータ：CREATE(MONTH,NOW-10M,NOW-10M,0)
※追加ボタンを押すのを忘れないで下さい。
「E09の定刻イベントタブ」
・毎年/毎月：チェックする
・日：1
・時：0
・分：1
「E09の実行アクションタブ」
・アクション名：A02
・パラメータ：CREATE(YEAR,NOW-10M,NOW-10M,0)
※追加ボタンを押すのを忘れないで下さい。

日報月報年報アクションの確認

「オンラインモニタ」ボタン（黄ボタン）を押した後、左ツリーの「Action」をクリックすると、右側のリストの「A02」に実行された回数が表示されます。この数値が毎時1分、毎日0時1分、毎月1日0時1分になるごとにインクリメントされればOKです。

ファイルの確認

上記カウントがインクリメントされたら、「ストップ」ボタン（黒ボタン）を押してログをストップさせて下さい。レポートの設定で指定したフォルダ内に、「REPyyyymmdd.txt」というファイルが作成されていることを確認し、毎時1分に日報、毎日0時1分に月報、毎月0時1分に年報ファイルが作成、あるいは更新されていることを確認して下さい。

| Panel Serverは３つのオンラインの状態があります。 赤：オンライン（デバック） 仮想的に通信します。PLCが手元に無いときに使用します。 黄：オンライン（モニタ） アプリケーションで現在値の確認や設定が行えます。 緑：オンライン（最速） アプリケーションは消え、タスクバーへアイコンとして表示されます。

ステップ３（日報グリッドコントロール）

ステップ３では、日報グリッドコントロールを用いて、Panel Serverで自動生成された日報、月報、年報レポートをPanel Browserで閲覧、印刷ができるようにします。

日報グリッドコントロールの設定

日報グリッドコントロールをPanel Editorで設定します。本サンプルでは下記の機能を持った日報の画面を作成します。

1)日報グリッドコントロールに日報、月報、年報を表示する

2)印刷ボタン

| この画面はあくまでサンプルです。本機能以外にもさまざまな機能を画面に追加して自由な帳票画面を作成することができます。

1)日報グリッドコントロールに日報、月報、年報を表示する

日報グリッドコントロールに日報、月報、年報を表示するには、ConnectメソッドによりPanel Serverの日報月報年報アクションに接続した後、下記のメソッドを呼び出すだけでOKです（GridLoadReportの詳細は「日報グリッドコントロール」を参照下さい）。

GridLoadReport (ReportType, Date [, bCreateFile = FALSE] [, bWithoutComplete = TRUE])

例）今日の日報を表示する

    this.GridLoadReport("day", #now#);

Dateには表示したい日時を指定します。日時の指定は日報の場合、日まで有効で、時間や分、秒を指定しても無視されます。同様に月報の場合は月まで、年報の場合は年まで有効で、それ以外は無視されます。このとき、サーバ側でまだ日報が生成されていない、あるいはサーバ側で日報を自動生成するような設定にしていない場合には、日報ファイルが存在しないため下記のような画面になります。

※「DayReport(YYYY/MM/DD) is not created」日報が作成されていないというメッセージが表示される。

もし日報ファイルが存在しない場合、日報ファイルをGridLoadReportの呼び出しで同時に作成したい場合は、下記のようにbCreateFileにTRUEを指定して呼び出します。また、bWithoutCompleteにもTRUEを指定することにより、既に日報が完成している場合についてはレポートの作成は行いません。

例）今日の日報を表示する。もしもレポートが作成されていなければ作成する。

    this.GridLoadReport("day", #now#, TRUE, TRUE);

このサンプルではレポートを表示するため、ユーザー定義関数（LoadReport）をフォームのスクリプトに定義しています。日付を入力するエディットコントロールやカレンダーからこのユーザー定義関数を呼び出し、指定した日付のレポートを表示するようにしています。

    function LoadReport(date, bCreate, bWithoutComplete)
    {
    	::ShowWaitCursor(T);

    	SetDefaultHeight();
    	this.Report.GridLoadReport(GetReportType(), date, bCreate, bWithoutComplete);
    	this.Date.Text = ::CTimeStr(date, "%Y/%m/%d");
    	this.TitleLabel.Text = this.Report.ReportTitle;

    	::ShowWaitCursor(F);
    }

    function GetReportType()
    {
    	var reporttype;
    	if (this.DayBtn.SwitchValue == TRUE)
    	{
    			reporttype = "day";
    	}
    	else if (this.MonthBtn.SwitchValue == TRUE)
    	{
    			reporttype = "month";
    	}
    	else if (this.YearBtn.SwitchValue == TRUE)
    	{
    			reporttype = "year";
    	}
    	return reporttype;
    }

| ShowWaitCursorはマウスを砂時計カーソルにします。GridLoadReportは特にレポートを作成する時に時間（数秒）がかかるので、ShowWaitCursorでマウスを砂時計カーソルにすることを推奨します。このサンプルについてはbCreateはすべてFALSEで呼び出されており、高速に処理されるため特には目立ちません。

| 「this.Report.DefaultHeight = xxx;」ではレポートタイプ毎に、セルの高さを調節しています。特に月報は、日報、年報に比べ行数が多いため、高さを小さくしています。日報グリッドコントロールはスクロールバー機能を持っており、レポート毎に高さの調整をしたくない場合は、削除してください。

2)印刷ボタン

下記の印刷ボタンを押すと、Panel Serverに印刷の指示を出します。Panel Serverの日報月報年報アクションはその指示を受け、レポートを印刷します。

    event OnMouseUp(button)
    {
    	parent.Report.PrintReport(parent.GetReportType(),
    				parent.Date.Text, parent.Date.Text, F, F);
    }