コンテンツにスキップ

iDempiere プロジェクト(期間設定なし)の使い方|プロジェクト管理 操作マニュアル・技術仕様

📖 プロジェクト管理の全体像: プロジェクト管理の全体図 も合わせてご覧ください。

プロジェクト(期間設定なし)は、フェーズ・タスクによる工程管理を使わず、明細(Lines)と発行(Issues)だけでプロジェクトを管理するウィンドウです。受注案件や作業指示(Work Order)の計画数量・金額を明細で管理し、「発行」で材料・工数をプロジェクトへ払い出して原価を計上します。

📌 ポイント: フェーズ管理を使う標準の プロジェクト ウィンドウとテーブルは同じ C_Project です。プロジェクトタイプのテンプレート(フェーズ・タスク)を使わない案件は、こちらのシンプルな明細ベース運用が向いています。

プロジェクト(期間設定なし)でできること

Section titled “プロジェクト(期間設定なし)でできること”
  • 案件単位の計画金額・計画数量・計画マージンの管理
  • 明細(品目・品目カテゴリ単位)ごとの計画・委託・請求実績の追跡
  • プロジェクト発行(Issue)による在庫払出と原価計上(入出荷・経費明細・在庫から)
  • 「詳細コピー」による他プロジェクトからの明細コピー
  • 「注文書作成」ボタンによるプロジェクトからの発注生成
  • 会計タブでのプロジェクト資産科目・仕掛科目(WIP)の設定
タブ名テーブル項目数役割
プロジェクト(期間設定なし)C_Project約35項目ヘッダ(取引先・通貨・計画/実績金額・各種ボタン)
詳細C_ProjectLine約24項目明細(品目・計画単価・計画数量・実績)
発行C_ProjectIssue約17項目材料・工数の払出伝票(DocStatus あり)
会計C_Project_Acct約7項目会計スキーマ別の資産・仕掛科目
graph TD
    A["🚀 メニューから開く<br/>プロジェクト管理 > プロジェクト(期間設定なし)"] --> B["➕ 新規でヘッダを入力<br/>(検索キー・名称・通貨・取引先)"]
    B --> C["📝 詳細タブで明細を登録<br/>(品目・計画数量・計画単価)"]
    C --> D{実行段階}
    D -->|発注が必要| E["🛒 注文書作成ボタンで<br/>発注伝票を生成"]
    D -->|材料・工数を投入| F["📦 発行タブで払出を登録し<br/>伝票処理ボタンで完了<br/>→ 在庫減・原価計上"]
    E --> G["🏁 プロジェクトクローズ"]
    F --> G

メニューから開く プロジェクト管理 > プロジェクト(期間設定なし) 新規でヘッダを入力 (検索キー・名称・通貨・取引先) 詳細タブで明細を登録 (品目・計画数量・計画単価) 注文書作成ボタンで 発注伝票を生成 発行タブで払出を登録し 伝票処理ボタンで完了 → 在庫減・原価計上 プロジェクトクローズ 実行段階 発注が必要 材料・工数を投入

メニューから「プロジェクト管理 > プロジェクト(期間設定なし)」を開きます。

  1. ツールバーの「新規」ボタンをクリック
  2. ヘッダ情報を入力: 検索キー(一意)・名称・通貨(必須)・取引先・請求ルール・倉庫(発行時のデフォルト)
    • 価格表バージョンを設定すると、通貨は価格表の通貨に自動セットされます
  3. 保存」をクリック
  4. 詳細」タブで明細を登録: 品目(または品目カテゴリ)・計画数量・計画単価
    • 計画金額は「計画数量 × 計画単価」で保存時に自動計算されます(手入力不可)
    • 価格取得」ボタンでプロジェクトの価格表から単価を取得できます

発行タブは DocStatus / DocAction を持つ伝票型のタブです。

  1. 発行」タブで払出を登録: 移動日付(会計期間チェック対象)・品目・属性セットインスタンス・保管場所・移動数量
  2. Process Project Issue」ボタンで**完了(Complete)**を実行 → 在庫品目なら在庫が減少し、在庫トランザクションが記録されます
  3. 転記」ボタンで会計仕訳の転記状態を確認できます
伝票アクション動作
完了(Complete)在庫払出・在庫トランザクション生成・プロジェクトバランス更新
逆仕訳-修正元の移動日付で反対仕訳の発行を自動生成
逆仕訳-未収未払当日日付で反対仕訳の発行を自動生成

項目リファレンス(主要項目)

Section titled “項目リファレンス(主要項目)”

プロジェクト(期間設定なし)タブ

Section titled “プロジェクト(期間設定なし)タブ”
項目名必須説明
検索キー必須文字列(40)プロジェクトコード(一意)
名称必須文字列(60)プロジェクト名
通貨必須選択プロジェクト通貨(価格表設定時に自動連動)
取引先 / 取引先住所-検索顧客と納入先
計画金額 / 計画数量 / 計画マージン必須金額/数量計画値
委託金額 / 委託数量必須金額/数量(法的)コミット値
請求金額 / 請求数量自動金額/数量請求実績(更新不可の集計値)
プロジェクトバランス自動金額プロジェクト残高
請求ルール必須リスト請求方法(デフォルト: なし)
詳細コピー / 注文書作成 / プロジェクトクローズ-ボタンコピー・発注生成・クローズ処理
項目名必須説明
移動日付必須日付払出日(期間クローズチェック対象)
品目必須検索払い出す品目
属性セットインスタンス必須属性ロット・シリアル等
保管場所必須ロケーター払出元の保管場所
移動数量必須数量払出数量
伝票状態 / 転記自動リスト/ボタンDocStatus(デフォルト: ドラフト)と会計転記状態
入出荷明細 / 経費明細-検索「プロジェクトへの発行」プロセス経由で作成した場合の元伝票参照

詳細タブ・会計タブを含む 全項目一覧はリファレンス参照

Q. 明細の「計画金額」を直接修正できません

Section titled “Q. 明細の「計画金額」を直接修正できません”

MProjectLine.beforeSave() が保存のたびに「計画数量 × 計画単価」で計画金額を上書きします(ソース実装仕様)。金額を変えたい場合は計画数量または計画単価を修正してください。計画マージンも品目の下限価格(または品目カテゴリの計画マージン)から自動計算されます。

Q. 発行の完了時に「Storage not updated」やマイナス在庫エラーが出ます

Section titled “Q. 発行の完了時に「Storage not updated」やマイナス在庫エラーが出ます”

発行の完了処理は保管場所の実在庫から払出数量を引き落とします。在庫不足時、マイナス在庫を許可しない保管場所では NegativeInventoryDisallowedException が発生します。在庫の受入を先に処理するか、払出元の保管場所を見直してください。

Q. 完了済みの発行を取り消すには?

Section titled “Q. 完了済みの発行を取り消すには?”

発行は伝票型のため削除ではなく逆仕訳で取り消します。「逆仕訳-修正」は元の移動日付、「逆仕訳-未収未払」は当日日付で反対方向の発行を自動生成し、元伝票は「逆仕訳済み」状態になります。移動日付の会計期間がクローズ済みの場合は逆仕訳-未収未払を使用してください。

Q. サービス品目を発行するとどうなりますか?

Section titled “Q. サービス品目を発行するとどうなりますか?”

在庫管理対象でない品目(IsStocked=N)の場合、在庫の増減や在庫トランザクションは発生せず、処理済みフラグとプロジェクトバランスの更新のみが行われます(MProjectIssue の実装仕様)。工数・経費の原価計上に使えます。

Q. 標準の「プロジェクト」ウィンドウとどちらを使うべきですか?

Section titled “Q. 標準の「プロジェクト」ウィンドウとどちらを使うべきですか?”

フェーズ・タスクによる工程管理を使うなら プロジェクト、品目明細ベースのシンプルな案件・作業指示管理ならこちらが適しています。テーブルは共通のため、後から運用を変えることも可能です。

🛠 技術仕様(開発者向け)

プロジェクト(期間設定なし)(AD_Window_ID: 286)は、C_ProjectMProject: 470行)をヘッダに、C_ProjectLineMProjectLine: 330行)・C_ProjectIssueMProjectIssue: 596行)・C_Project_Acct(生成クラス X_C_Project_Acct のみ)で構成されます。ヘッダ・明細はマスタ型ですが、発行(C_ProjectIssue)は DocAction を実装した伝票型で、在庫トランザクションと会計転記の対象です。

classDiagram
    class MProject {
        +getLines() MProjectLine[]
        +getIssues() MProjectIssue[]
        +copyDetailsFrom(MProject) int
        #beforeSave() / afterSave()
    }
    class MProjectLine {
        +getLimitPrice() BigDecimal
        #beforeSave() / afterSave()
    }
    class MProjectIssue {
        +processIt(action) boolean
        +completeIt() String
        +reverseCorrectIt() / reverseAccrualIt()
    }
    class DocAction {
        <<interface>>
    }
    class PO {
        <<abstract>>
    }
    MProject --|> PO
    MProjectLine --|> PO
    MProjectIssue --|> PO
    MProjectIssue ..|> DocAction
    MProject --> MProjectLine : has many
    MProject --> MProjectIssue : has many

+getLines() MProjectLine[] +getIssues() MProjectIssue[] +copyDetailsFrom(MProject) int #beforeSave() / afterSave() +getLimitPrice() BigDecimal #beforeSave() / afterSave() +processIt(action) boolean +completeIt() String +reverseCorrectIt() / reverseAccrualIt() <> <> > PO MProjectLine -- > PO MProjectIssue ..

パッケージ: org.compiere.model ソースファイル: org.adempiere.base/src/org/compiere/model/MProject.java / MProjectLine.java / MProjectIssue.java

C_Project(プロジェクト・主要カラム)

Section titled “C_Project(プロジェクト・主要カラム)”
カラム名必須説明備考
C_Project_IDIDPKプロジェクトID主キー
Value / NameStringY検索キー / 名称検索キーは一意
C_Currency_IDTableDirectY通貨価格表設定時に自動連動
C_ProjectType_IDButtonNプロジェクトタイプボタン(セット処理起動)
ProjectCategoryList(1)Nプロジェクトカテゴリデフォルト N
ProjInvoiceRuleList(1)Y請求ルールデフォルト -
PlannedAmt / PlannedQty / PlannedMarginAmtAmount/QtyY計画値
CommittedAmt / CommittedQtyAmount/QtyY委託値
InvoicedAmt / InvoicedQtyAmount/QtyY請求実績更新不可(集計値)
ProjectBalanceAmtAmountYプロジェクト残高
CopyFrom / GenerateTo / ProcessingButtonN詳細コピー / 注文書作成 / クローズ

C_ProjectLine(詳細・主要カラム)

Section titled “C_ProjectLine(詳細・主要カラム)”
カラム名必須説明備考
C_ProjectLine_IDIDPK明細ID主キー
C_Project_IDTableDirectY親プロジェクト親リンク
LineIntegerY明細番号デフォルト @SQL=MAX(Line)+10
M_Product_ID / M_Product_Category_IDSearch/TableDirectN品目 / 品目カテゴリマージン計算の基準
PlannedPriceCosts+PricesY計画単価Callout: CalloutProject.planned
PlannedQtyQuantityY計画数量デフォルト 1、Callout 同上
PlannedAmt / PlannedMarginAmtAmountY計画金額 / マージンbeforeSave で自動計算
C_Order_ID / C_OrderPO_IDSearchN受注 / 発注伝票生成・関連付け

C_ProjectIssue(発行・主要カラム)

Section titled “C_ProjectIssue(発行・主要カラム)”
カラム名必須説明備考
C_ProjectIssue_IDIDPK発行ID主キー
C_Project_IDTableDirectY親プロジェクト親リンク
MovementDateDateY移動日付期間クローズチェック対象
M_Product_ID / M_AttributeSetInstance_IDSearch/AttributeY品目 / 属性インスタンス
M_Locator_IDLocatorY保管場所払出元
MovementQtyQuantityY移動数量
M_InOutLine_ID / S_TimeExpenseLine_IDSearchN入出荷明細 / 経費明細発行元参照
DocStatus / DocActionList/ButtonY伝票状態 / アクションデフォルト DR / CO
Reversal_IDSearchN逆仕訳ID逆仕訳ペアの相互参照

C_Project_Acct は「プロジェクト × 会計スキーマ」ごとに PJ_Asset_Acct(プロジェクト資産科目)と PJ_WIP_Acct(仕掛科目)を保持します。

erDiagram
    C_Project ||--o{ C_ProjectLine : "lines"
    C_Project ||--o{ C_ProjectIssue : "issues"
    C_Project ||--o{ C_Project_Acct : "accounting"
    C_ProjectLine }o--o| C_ProjectIssue : "issue link"
    C_ProjectIssue ||--o{ M_Transaction : "creates"
    C_Project }o--o| C_ProjectType : "type"

issue link

  • beforeSave: AD_User_ID=-1(会計ディメンション用サマリ)を 0 に補正。M_PriceList_Version_ID 変更時は価格表の通貨を C_Currency_ID へ自動セット
  • afterSave: 新規時に insert_Accounting("C_Project_Acct", "C_AcctSchema_Default") で会計タブのレコードを自動生成し、プロジェクトツリー(TREETYPE_Project)へノード登録。検索キー・名称変更時は MAccount.updateValueDescription() で勘定組合せの説明も更新
  • afterDelete: ツリーノードを削除
  1. PlannedAmt = PlannedQty × PlannedPrice を毎回再計算
  2. 計画マージン: 品目指定時は「計画単価 − 価格表の下限価格」× 数量、品目カテゴリ指定時はカテゴリの計画マージン × 数量
  3. プロジェクトタスク指定時はタスクからフェーズを、フェーズ指定時はフェーズからプロジェクトを逆引きしてセット
  4. afterSave / afterDeleteupdateHeader() によりヘッダの合計値を更新

MProjectIssue の伝票処理(doComplete)

Section titled “MProjectIssue の伝票処理(doComplete)”
flowchart TD
    A[completeIt] --> B{品目あり? / 期間オープン?}
    B -->|No| ERR[エラー返却]
    B -->|Yes| C{在庫管理品目?}
    C -->|No| D[Processed=Y<br/>バランス更新のみ]
    C -->|Yes| E[M_Transaction 生成<br/>MovementType=WorkOrderPlus]
    E --> F[MMPolicy FiFo/LiFo に従い<br/>MStorageOnHand から引落]
    F -->|在庫不足+マイナス禁止| G[NegativeInventoryDisallowedException]
    F -->|OK| H[トランザクション保存<br/>updateBalanceAmt]

品目あり? / 期間オープン? 在庫管理品目? 在庫不足+マイナス禁止 エラー返却 Processed=Y バランス更新のみ M_Transaction 生成 MovementType=WorkOrderPlus MMPolicy FiFo/LiFo に従い MStorageOnHand から引落 トランザクション保存 updateBalanceAmt

  • 逆仕訳(reverseCorrectIt / reverseAccrualIt)は反対数量の発行を自動生成し、Reversal_ID で相互参照。元伝票・逆仕訳とも DocStatus=Reversed になります
  • process() メソッドは iDempiere 13 で @Deprecated(削除予定)となり、processIt(DocAction.ACTION_Complete) の使用が正式ルートです

拡張ポイント(カスタマイズ箇所)

Section titled “拡張ポイント(カスタマイズ箇所)”
カラムCallout動作
C_ProjectLine.PlannedPrice / PlannedQtyorg.compiere.model.CalloutProject.planned単価・数量変更時に計画金額を再計算

発行は Document 型のため、docValidate でタイミング制御が可能です:

@Override
public String docValidate(PO po, int timing) {
if (po instanceof MProjectIssue && timing == TIMING_BEFORE_COMPLETE) {
MProjectIssue issue = (MProjectIssue) po;
// 例: 計画数量を超える払出をブロック
if (issue.getMovementQty().compareTo(issue.getParent().getPlannedQty()) > 0)
return "計画数量を超える払出はできません";
}
return null;
}
プロセス/ボタン説明
詳細コピー(CopyFrom)他プロジェクトの明細・フェーズ・タスクをコピー(MProject.copyDetailsFrom
注文書作成(GenerateTo)プロジェクトから発注伝票を生成
プロジェクトクローズ(Processing)プロジェクトのクローズ処理
価格取得(DoPricing)プロジェクト価格表から明細単価を取得
Process Project Issue(DocAction)発行の完了・逆仕訳処理

プロジェクトの発行・原価計上は Model Validator と Callout で安全に拡張できます。払出上限チェック、独自の請求ルール、プロジェクト帳票など、コア改変なしで業務要件に対応可能です。

As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。

OSS ERP導入・カスタマイズサービスの詳細はこちら