Вместо создания отдельного класса InvoiceSplits вам нужно создать PXCacheExtension из InvoiceSplits.
public sealed class InvoiceSplitsExtension : PXCacheExtension<InvoiceSplits>
{
#region UnitCost
public abstract class unitCost : IBqlField
{
}
[PXDBPriceCost]
[PXUIField(DisplayName = "Unit Cost")]
public decimal? UnitCost { get; set; }
#endregion
}
Затем в PXOverride метода CreateInvoiceSplits вы получите CacheExtension и установите для него UnitCost.
public delegate InvoiceSplits CreateInvoiceSplitsDel(ARTran artran, SOLine line, SOSalesPerTran sptran, INTran tran, INTranSplit split);
[PXOverride]
public InvoiceSplits CreateInvoiceSplits(ARTran artran, SOLine line, SOSalesPerTran sptran, INTran tran, INTranSplit split, CreateInvoiceSplitsDel del)
{
InvoiceSplits invSplit = del?.Invoke(artran, line, sptran, tran, split);
InvoiceSplitsExtension invSplitExt = PXCache<InvoiceSplits>.GetExtension<InvoiceSplitsExtension>(invSplit);
invSplitExt.UnitCost = artran.UnitCost;
if (tran != null)
{
invSplitExt.UnitCost = split.UnitCost ?? tran.UnitCost;
}
return invSplit;
}
Наконец, вам необходимо добавить поле UnitCost в пользовательский интерфейс. Для этого вам нужно перейти в пакет настройки, настроить экран SO301000 и перейти к диалоговым окнам-> Диалог: Добавить данные счета-> Сетка: invoiceSplits в древовидном представлении. Затем перейдите на вкладку «Добавить поля данных», выберите поле UnitCost и нажмите «Создать элементы управления».