1500 以上の製品と 2000 以上の場所があります。製品の在庫更新ウィザードを使用して在庫を更新しました。また、いくつかの配送注文と内部移動を処理しました。今、私は在庫をゼロにしたいと思っています。在庫をゼロにするスクリプトを作成しました。問題は、各製品が 2000 か所のどこにでもある可能性があるため、在庫をゼロに更新するのに時間がかかりすぎることです。製品が利用可能なすべての場所を返す OpenERP 関数はありますか?
1 に答える
環境
データ モデルをシンプル ( KISS ) に保ち、キャッシュの無効化の問題を回避するために、OpenERP は各場所の製品の現在の在庫のキャッシュを保持しません。この情報は、各在庫場所に出入りする在庫取引の複式簿記残高を計算することによって取得されます。これは、財務会計で使用される複式簿記と非常によく似ています。
オプション 1: API を使用する
stock.move
OpenERP API を使用してプログラムでこの情報を取得するには、モデルごとにクエリを実行する方法がいくつかありますstock.location
。手始めに、モジュールのstock.fill.inventory
ウィザードクラスを見ることができstock
ます。これには、実地棚卸にゼロの行を入力するオプションがあります。このproduct.product
モデルにはget_product_available
、特定の製品セットについてこの情報を返すメソッドもあります。
次に、適切な対応するエントリを作成して、標準のウィザードstock.move
と非常によく似た方法で、各場所のバランスを 0 にすることができます。stock.fill.inventory
オプション 2: ダイレクト SQL を使用して消去する
または、ワンショット操作としてインベントリ全体とその履歴を単純に消去したい場合は、高速で汚れた方法があります。データベースで直接 SQL クエリを使用して (たとえば、psql
コマンド ライン ツールまたは pgadmin を使用して)、テーブルstock_move
とstock_picking
テーブルを消去するだけで実行できます。
実際のデータを含む本番データベースでこれを行わないでください! これにより、データベースの一部が消去されます
販売管理モジュール ( sale
) をインストールし、OpenERP 6.1 を使用していると仮定すると、次の手順で株式取引の履歴と元のドキュメントを消去できます。
ああ、最初にバックアップを作成してください!
Stock_move から削除します。 mrp_production から削除します。 Stock_picking から削除します。 DELETE FROM sale_order; 調達注文からの削除;