Error:Timeout loading row 1
品目マスタを大量に登録し、iDempiereの標準機能で用意されている品目マスタウィンドウを開こうとすると、次のような"Timeout loading row 1"というエラーが表示されます。
エラーの原因
この原因は、アプリケーション辞書(AD:Application Dictionary)の設定で、品目マスタテーブル(M_Product)のカラムにSQLカラム(バーチャルカラム)が使用されているためです。
品目マスタ(M_Product)では"CostStandard"カラムでSQLカラム(バーチャルカラム)が使用されています。
エラーの対応
解決案1
品目マスタ(M_Product)の"CostStandard"カラムのアクティブフラグをOFFにする事でエラーは解消されます。
エラーが解消する代わりに"CostStandard"カラムは表示されなくなりますが、"CostStandard"カラムの情報は別タブで確認できるので通常は問題にはなる事はないでしょう。
解決案2
私は試していませんが、iDempiereのフォーラムを確認すると、M_Costテーブルに以下のようなインデックスをつける事も有効なようです。
CREATE INDEX M_Cost_Product_IDX ON M_Cost(M_Product_ID, M_CostElement_ID);
【ポイント】SQLカラム(バーチャルカラム)の活用について
SQLカラム(バーチャルカラム)はとても便利な機能ですが、多用する事によるパフォーマンスの悪化は以前から指摘されています。
SQLカラム(バーチャルカラム)はサブクエリを発行する事になりますので、そのサブクエリの内容や問い合わせ先のテーブルのインデックスやデータ量次第では、今回のようなエラーの原因にもなりかねません。
SQLカラム(バーチャルカラム)を使用する際には上記の事を念頭において、使用するようにして下さい。