在自定义字段SOLine

时间:2017-05-12 20:53:09

标签: acumatica

我需要使用相同的批/序号(截屏1)从采购收据的序列化物料单位成本填充SOLine中的自定义列(用户定义成本)。如果该项目已拆分批次/序列号(屏幕截图2),那么我必须根据批次/序列号读取相应的单位成本用户输入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 = 'SUB1703210365'
        //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;
    }
}

截屏1 : - enter image description here 截图2 : - enter image description here

2 个答案:

答案 0 :(得分:0)

您可以从&#39;分裂&#39;迭代POReceiptLineSplit记录。 Base DAC的DataView。

为此,在Acumatica中打开网格,按住Control + Alt并单击它。这将弹出一个带有网格中包含的记录的DAC名称的弹出窗口。 DAC

从那里选择您的自定义项目。点击&#39;网格:拆分&#39;,网格的DataMember属性为&#39;拆分&#39;。这是Base类中DataView的名称。 DataView

使用该信息,您可以从图表扩展中迭代网格的内容。请注意,我们使用Base前缀,因为我们引用了扩展名中的基本图。

       foreach (POReceiptLineSplit split in Base.splits.Select())
       {
          PXTrace.WriteInformation("ReceiptNbr: {0}{1}LineNbr: {2}{3}SplitLineNbr: {4}",
                                   split.ReceiptNbr, Environment.NewLine,
                                   split.LineNbr, Environment.NewLine,
                                   split.SplitLineNbr);
       }

答案 1 :(得分:0)

SOLINESplit_LotSerialNbr_FieldUpdated事件需要在SOOrder扩展和POReceiptEntry扩展中的POReceiptLine_RowSelected中扩展。下面的代码将有助于从购买收据中获得单位成本。

.p1 {
  display: inline-block
}