同じロット/シリアル番号(スクリーンショット1)を使用して、シリアル化されたアイテムのユニット単価からSOLineのカスタム列(ユーザー定義コスト)を購入する必要があります。商品がロット/シリアルナンバー(スクリーンショット2)に分割されている場合、ロット/シリアルナンバーに基づいて読み取らなければならない単位コストは、ユーザーがSOLineアイテムに入力します。カスタムフィールドのシリアライズされたアイテムの単価を計算するSOLine
私はすでに、項目が分割されていないのに、分割された直列化項目があるかどうかを調べる方法がわからない場合は、処理するSOLine_RowPersistingイベントを記述しています。以下はSOLine_RowPersistingイベントのコードです。提案してください。
protected virtual void SOLine_RowPersisting(PXCache sender, PXRowPersistingEventArgs e)
{
SOLine row = (SOLine)e.Row;
if (row == null)
return;
if (!string.IsNullOrEmpty(row.LotSerialNbr))
{
SOOrderEntry graph = PXGraph.CreateInstance<SOOrderEntry>();
//select UnitCost, * from POReceiptLine where CompanyID = 2 and ReceiptNbr = 'PR004082' and InventoryID = '8502' and LotSerialNbr = 'SUB365'
//select LotSerialNbr, * from POReceiptLineSplit where CompanyID = 2 and InventoryID = '8502' and LotSerialNbr = 'SUB1704270366'
//TODO : How to get it from POReceiptLineSplit also
POReceiptLine poRow = PXSelect<POReceiptLine,
Where<POReceiptLine.inventoryID, Equal<Required<POReceiptLine.inventoryID>>,
And<POReceiptLine.lotSerialNbr, Equal<Required<POReceiptLine.lotSerialNbr>>,
And<POReceiptLine.pOType, Equal<Required<POReceiptLine.pOType>>>>>>.Select(graph, row.InventoryID, row.LotSerialNbr, "RO");
SOLineExtension ext = PXCache<SOLine>.GetExtension<SOLineExtension>(row);
ext.UsrUserDefinedCost = poRow.UnitCost;
}
}
現在の行の割り当てを取得し、あなたが必要なものを行うためにBQLを使用することができますPOReceiptLines.YouためソリンとPOReceiptLineSplitの配分であるSOLineSplitsがあります。 –