目前,Lot / Serial History页面上的交易日期纯粹是日期,而不是日期时间。
如果事务有时间组件,那么在排序事务的顺序和调试生产问题时非常有用。数据库似乎存储了00:00:00时间戳的trandate,因此如果没有使用创建或修改的日期,数据甚至不可用,这些日期也不可用。
我正在寻找关于如何在此窗口中显示时间戳的建议。是否有访问创建日期时间的最佳实践?或者我是否需要创建一个新字段并自己存储时间?欢迎其他精彩建议;我也创造了这个作为Acuamtica的想法。 https://feedback.acumatica.com/ideas/ACU-I-1322
答案 0 :(得分:1)
您可以在INTranSplit DAC中创建一个引用“CreatedDateTime”的自定义非绑定字段,并在掩码中设置特定的显示格式。
问题在于,有许多INTranSplit DAC,而您正在使用的DAC并未声明CreatedDateTime。你可以做的是使用另一个包含CreatedDateTime和PXDBScalar的INTranSplit DAC或INTran DAC。
批/历史使用:
CreatedDateTime位于另一个具有相同名称但位于不同命名空间的DAC中:
CreatedDateTime也在INTran DAC中:
以下是如何扩展InventoryLotSerInq.INTranSplit DAC以添加访问IN.INTran.CreatedDateTime的字段。注意'g'是显示日期和时间的日期时间格式,如果需要,您可以使用其他.Net格式:
namespace PX.Objects.IN
{
public class INTranSplitExt : PXCacheExtension<PX.Objects.IN.InventoryLotSerInq.INTranSplit>
{
public abstract class usrTranTimestamp : PX.Data.IBqlField { }
// You can also substitute 'IN.INTranSplit.' by 'IN.INTran.'
[PXDBScalar(typeof(Search<IN.INTranSplit.createdDateTime,
Where<IN.INTranSplit.docType, Equal<InventoryLotSerInq.INTranSplit.docType>,
And<IN.INTranSplit.refNbr, Equal<InventoryLotSerInq.INTranSplit.refNbr>,
And<IN.INTranSplit.lineNbr, Equal<InventoryLotSerInq.INTranSplit.lineNbr>>>>>))]
[PXDate(DisplayMask = "g", InputMask = "g")]
[PXUIField(DisplayName="Tran. Timestamp")]
public virtual DateTime? UsrTranTimestamp { get; set; }
}
}
新的自定义未绑定字段将显示创建的日期时间,但它与使用TranDate不同,因为在设置TranDate的同时未设置这些CreatedDateTime字段: