スクリプト


スクリプト機能を使うことでデータ値等で複雑に変化する帳票を作成することができます。



スクリプトの記述方法


スクリプトの記述方法について説明します。

記述方法
オブジェクトと変数
演算子
条件分岐
繰り返し



スクリプトで使用できる関数


スクリプトで使用できる関数について説明します。

関数一覧



スクリプト一覧


サポートされているスクリプトは次の通りです。

スクリプト 説明
ChangeValue コントロールアイテムで、値を変更するときに実行されるスクリプトです。
Click プッシュボタンの押下時や、文字中にリンクの設定がある場合に、その範囲をマウスでクリックすると実行されるスクリプトです。
CustomizeSection 帳票イメージ作成時にセクションの位置や段組情報を変更するためのスクリプトです。
GetFieldValue 各レコードでこのスクリプトが実行され、結果を加算した値が合計値や累計値として使用されます。
GetGroupValue 各レコードでこのスクリプトが実行され、連続して結果が同じレコードがグループ範囲となります。
GetValue 表示する情報(文字や数値)を取得するために実行されるスクリプトです。
このスクリプトの戻り値が出力されます。
GetImageValue 表示する情報(画像)を取得するために実行されるスクリプトです。
このスクリプトの戻り値が出力されます。
GetSortKey 仕分印刷で仕分キーを取得するために実行されるスクリプトです。
IsEdit コントロールアイテムで、入力の可否を判定するために実行されるスクリプトです。
IsVisible オブジェクトの出力を制御するスクリプトです。
Open 帳票のオープン時に変数値等を初期化するためのスクリプトです。
SetList リストコントロールで、リストに表示する内容を設定・変更するスクリプトです。
SetProperty アイテム出力前に実行されるスクリプトで、アイテムの外観を変更することができます。
StartPos 段組指定されていてるセクションオブジェクトで、開始位置を変更する場合に設定します。
DataScript(Order) データのレコードを昇順/降順に並べ替えます。
DataScript(Where) データの抽出条件を指定します。(条件に一致しない行を削除します)




ChangeValue スクリプト

コントロールアイテムで、値を変更するときに実行されるスクリプトです。

_change_value 変数に変更後の値が格納されています。

戻り値によって実行される処理が異なります。
最も安全で確実なのは 3 ですが、データ量によってはそれなりの処理時間が必要となります。

<対象オブジェクト>
アイテムオブジェクト

<戻り値>
NUMBER型の値を戻します。

説明
0 値の変更を行いません。(キャンセル)
1 (未使用。予約されています)
2 表示を更新します。

アイテムの外観や可視状態が変化する程度であれば、表示を更新するだけで問題ありません。
3 出力情報を再構築します。

値の変更がページやオブジェクトサイズ、オブジェクトの可視に影響を与える場合は出力情報を再構築する必要があります。



<例>

//変更値が "男"ならば 1 を "女" ならば 2 を設定します。

if (_change_value == "男") {
    _change_value = "1";
} else if (_change_value == "女") {
    _change_value = "2";
} else {
    _change_value = "0";
}

return 3;




Click スクリプト

プッシュボタンの押下時や、文字中にリンクの設定がある場合に、その範囲をマウスでクリックすると実行されるスクリプトです。

外部プログラムの呼び出しや、イベントの発行等が行えます。

戻り値によって実行される処理が異なります。
最も安全で確実なのは 3 ですが、データ量によってはそれなりの処理時間が必要となります。

<対象オブジェクト>
アイテムオブジェクト

<戻り値>
NUMBER型の値を戻します。

説明
0 スクリプトで値(データや変数)の変更がない場合に指定。
1 (未使用。予約されています)
2 表示を更新します。

スクリプト中で値(データや変数)の変更が行われ、アイテムの外観や可視状態が変化する程度であれば、表示を更新するだけで問題ありません。
3 出力情報を再構築します。

スクリプト中で値(データや変数)の変更が行われ、ページやオブジェクトサイズ、オブジェクトの可視に影響を与える場合は出力情報を再構築する必要があります。



<例>

//クリックされたアイテムに該当するレコードを削除します。

DATA data;
NUMBER nr;

if (MsgBox(4, GetS("Field1") + "を削除しますか?") != 6) {
    return 0;
}


data = GetData();
data.Delete(GetRecordNo()-1);

return 3;




CustomizeSection スクリプト

帳票イメージ作成前に実行されるスクリプトです。
セクションの位置や段組情報を変更することができます。

_section 変数(SECTION型)を通じてセクション情報を変更することができます。

<対象オブジェクト>
セクションオブジェクト

<戻り値>
なし


<例>

//変数値により段組間隔を変更します。

_section.interval_x = GetVarN("横間隔");
_section.interval_y = GetVarN("縦間隔");




GetFieldValue スクリプト

各レコードでこのスクリプトが実行され、結果を加算した値が合計値や累計値として使用されます。

<対象オブジェクト>
拡張フィールドオブジェクト

<戻り値>
NUMBER型の値を戻します。


<例>

//Field1 の合計を求める。
GetN("Field1")

//単価 と 数量を乗算した結果の合計を求める。
GetN("単価") * GetN("数量")

//性別が男の人数を求める。
if (GetS("性別") == "男") {
    return 1;
}
return 0;




GetGroupValue スクリプト

各レコードでこのスクリプトが実行され、連続して結果が同じレコードがグループ範囲となります。

_group_value 変数に直前のグループ値が格納されています。[1.1.16.2802以降]

<対象オブジェクト>
グループオブジェクト

<戻り値>
STRING型の値を戻します。


<例>

//Field1 グループキーとして使用します。
GetS("Field1")

//Field1 と Field2 をグループキーとして使用します。
//「:」(コロン)はField1とField2の値を明確に分離するために使用しています。
//(使用しない文字であれば何でも良い)

GetS("Field1") + ":" + GetS("Field2")

//販売日 の日時情報から月単位でグループを設定
StrFormat("%y/%M", GetS("販売日"))

//Field1 の値が空("")以外の場合グループを切り替えます。
//値が空("")の場合は直前のグループ値(_group_value)を設定することで実現できます。

if (GetS("Field1") == "") {
    return _group_value;
}
return GetS("Field1");

//Field1 の値が"A"の場合グループを切り替えます。
//値が"A"の場合はカレントレコード番号をグループ値に設定し、
//"A"以外の場合は直前のグループ値(_group_value)を設定することで実現します。

if (GetS("Field1") == "A") {
    return GetRecordNo();
}
return _group_value;

//Field1 の値が"合計"の次のレコードでグループを切り替えます。
if (GetS("Field1") == "合計") {
   return GroupBreak(2);
}
return GroupBreak(0);




GetValue スクリプト

表示する情報(文字や数値)を取得するために実行されるスクリプトです。
このスクリプトの戻り値が出力されます。

<対象オブジェクト>
アイテムオブジェクト

<戻り値>
NUMBER/STRING型の値を戻します。


<例>

//ページ合計を表示(エンドフッター/ページフッターのアイテムでのみ有効な値を表示できます)
//
Field5 のページ合計を求めています。

DATA data;
NUMBER ny,nvalue;

data = GetData();

for(1000;ny = GetRecordNo( ) - GetPageRecordNo( );ny < GetRecordNo();ny++) {
    nvalue += Num(data.Get("Field5", ny));
}

return nvalue;




GetImageValue スクリプト

表示する情報(画像)を取得するために実行されるスクリプトです。
このスクリプトの戻り値が出力されます。

<対象オブジェクト>
アイテムオブジェクト

<戻り値>
IMAGE型の値を戻します。


<例>

//Field3 の値(画像)を表示します。
GetM("Field3")




GetSortKey スクリプト

仕分印刷で仕分キーを取得するために実行されるスクリプトです。
このスクリプトは仕分印刷の際に、改フォームが行われるタイミングで実行されます。戻り値が仕分キーとして使用され、仕分リストファイルで設定されている複数の印刷オプションとの関連付けに利用されます。

複数のセクション(データ)が混在する帳票では、
基準セクションを設定し、基準セクションのフィールド値を使用(戻す)ことをお勧めします。


<対象オブジェクト>
レポートオブジェクト

<戻り値>
STRING型の値を戻します。


< 例>

//セクション1 の Field1 を仕分キーとして利用します。
GetExS("フォーム1", "セクション1", "Field1")




IsEdit スクリプト

コントロールアイテムで、入力の可否を判定するために実行されるスクリプトです。


<対象オブジェクト>
アイテムオブジェクト

<戻り値>
NUMBER型の値を戻します。

説明
TRUE 入力を許可します。(デフォルト値)
FALSE 入力を許可しません。




IsVisible スクリプト

オブジェクトの出力を制御するスクリプトです。


<対象オブジェクト>
レポートオブジェクト/フォームオブジェクト/
セクションオブジェクト/ユニットオブジェクト/アイテムオブジェクト

<戻り値>
NUMBER型の値を戻します。

説明
TRUE オブジェクトを表示します。
FALSE オブジェクトを表示しません。



<例-アイテム>

//印刷時には表示しません。
IsPrint()

//Field3 が「男」の場合に表示します。
GetS("Field3") == "男"


<例-ユニット「詳細」>

//グループ(レコード範囲)の最後にだけ表示します。
GetGroupRecordNo("Group1") == GetGroupRecordCount("Group1")

//グループ(レコード範囲)の先頭にだけ表示します。
GetGroupRecordNo("Group1") == 1


<例-セクション>

//Var1 が 「ON」の場合だけ表示します。
if (GetVarS("Var1") == "ON") {
    return TRUE;
}

return FALSE;



Open スクリプト

帳票のオープン時に変数値等を初期化するためのスクリプトです。

<対象オブジェクト>
ブックオブジェクト

<戻り値>
なし


<例>

//帳票オープン時に変数値を初期化します。

ImportVar("Sample1");
SetVar("名称", "");




SetList スクリプト

リストコントロールで、リストに表示する内容を設定・変更するスクリプトです。

_ctrl_list 変数(STRING_ARRAY型)に「リストコントロール」ダイアログで指定したリスト項目が格納されています。

<対象オブジェクト>
アイテムオブジェクト

<戻り値>
STRING_ARRAY型の値を戻します。



SetProperty スクリプト

アイテム出力前に実行されるスクリプトで、アイテムの外観を変更することができます。

_item 変数(ITEM型)を通じてアイテムの概観を変更することができます。

<対象オブジェクト>
アイテムオブジェクト

<戻り値>
なし。


<例>

//コントロールアイテムで編集が可能な状態の場合、アイテムの背景を変更します。
if (IsEdit() == TRUE) {
    _item.fill_type = 2;
    _item.fill_color1 = RGB(255,255,192);
}




StartPos スクリプト

段組指定されていてるセクションオブジェクトで、開始位置を変更する場合に設定します。

<対象オブジェクト>
セクションオブジェクト

<戻り値>
段組開始位置(NUMBER型)を戻します。(0〜)


<例>

//Var1 の値(数値)から段組を開始します。
GetVarN("Var1")




DataScript(Order) スクリプト

データのレコードを昇順/降順に並べ替えます。
DataScriptメソッド」参照


このスクリプトはデータ入力時に実行されます。
エディタで本スクリプトを編集し動作を確認するには、テストデータを再入力する必要があります。


<対象オブジェクト>
ActiveXコントロール/OLEオートメーションオブジェクト

<戻り値>
なし。


<例>

//Field1/Field2/Field3 の値(数値)が小さい順に並べ替えます。
Order(3, "Field3");
Order(3, "Field2");
Order(3, "Field1");


<例-ActiveX/OLEオートメーション>

//Field1/Field2/Field3 の値(数値)が小さい順に並べ替えます。
obj.DataScript "Data1", "Order", "Order(3, ""Field3"");Order(3, ""Field2"");Order(3, ""Field1"")"




DataScript(Where) スクリプト

データの抽出条件を指定します。(条件に一致しない行を削除します)
DataScriptメソッド」参照


このスクリプトはデータ入力時に実行されます。
エディタで本スクリプトを編集し動作を確認するには、テストデータを再入力する必要があります。


<対象オブジェクト>
ActiveXコントロール/OLEオートメーションオブジェクト

<戻り値>
NUMBER型。
レコードを削除する場合は 0(FALSE)を戻します。


<例>

//Field1が"A"ではなく、Field2が 100以下の行を削除します。
//Field1が"A"で Field2 が100以上の行を抽出します。

if (Get("Field1") == "A" && Num("Field2") >= 100) {
    return TRUE;
}
return FALSE;


<例-ActiveX/OLEオートメーション>

//Field1が"A"ではなく、Field2が 100以下の行を削除します。
//Field1が"A"で Field2 が100以上の行を抽出します。


obj.DataScript "Data1", "Where", "if (Get(""Field1"") == ""A"" && Num(""Field2"") >= 100) { return TRUE; } return FALSE;"


<例>

//住所が住所Aと住所Bに分けられていない場合、
//郵便番号と住所の値からカスタマバーコード用文字列を作成し、
//バーコードフィールドの値を更新します。

Set("バーコード", JapanPost(2, GetS("郵便番号") + GetS("住所")));
return TRUE;