【问题标题】:override employee time card release method覆盖员工时间卡发布方法
【发布时间】:2022-12-03 04:18:31
【问题描述】:

你好朋友我需要帮助: 在这里我指定我在做什么:

1.- 我重写了Employee Timecard 的release 方法,进行验证以获取项目的默认分支代码,然后将其插入到项目的事务屏幕中。

public class TimeCardMaint_Extension : PXGraphExtension<TimeCardMaint>
{
    #region Event Handlers
    public delegate IEnumerable ReleaseDelegate(PXAdapter a);
    [PXOverride]
    public IEnumerable Release(PXAdapter adapter, ReleaseDelegate InvokeBase)
    {
        PXGraph.InstanceCreated.AddHandler<RegisterEntry>((graph) =>
        {
            graph.RowInserted.AddHandler<PMTran>((sender, e) =>
            {

                EPTimecardDetail detail = PXResult<EPTimecardDetail>.Current;
                if (detail != null)
                {
                    var tran = (PMTran)e.Row;
                    PMProject project = PXSelect<PMProject,
                      Where<PMProject.contractID, Equal<Required<PMProject.contractID>>>>.Select(Base, detail.ProjectID);
                    if (project != null)
                    {
                        tran.BranchID = project.DefaultBranchID;
                    }
                }
            });
        });
        return InvokeBase(adapter);
    }
    #endregion
}

在这里我们看到项目的交易屏幕,进行正确的更改。

到目前为止一切都很完美:

但是,如果我检查 Journal Transactions 屏幕,它会生成两个新条目,它实际上应该只生成一个日记条目,因为它在 acumatica 中默认情况下会这样做。

由于这些后果,是因为我修改了员工的考勤卡,在发布方法中,我不知道发生了什么:

我需要你告诉我我应该做什么或我做错了什么,真的我只需要修改项目交易屏幕,其他不应该影响我希望我已经清楚了..

【问题讨论】:

    标签: c# acumatica acumatica-kb


    【解决方案1】:

    通过代码挖掘,项目交易的发布功能按分支将它们组合在一起。

    这在每个条目上执行:

                    Batch newbatch = je.BatchModule.Insert(new Batch
                    {
                        Module = doc.Module,
                        Status = BatchStatus.Unposted,
                        Released = true,
                        Hold = false,
                        BranchID = branchID,
                        FinPeriodID = parts[1],
                        CuryID = parts[2],
                        CuryInfoID = info.CuryInfoID,
                        Description = doc.Description
                    });
    

    如您所见,它添加到分支的批处理中。这将为每种类型过滤出一个文档,即使它可能在行上是分开的:

    由于您有一个时间卡,然后有两个分支机构,它会将一张时间卡邮寄到一个分支机构,然后将另一张时间卡邮寄到另一个分支机构。如果您要更改每个项目的行项目,则必须覆盖整个发布功能。因此,基于花时间梳理项目代码并了解 GL 流程,它似乎按照 acumatica 的预期运行。

    现在要将其合二为一,我将重写 PX.Objects.PM.RegisterReleaseProcess 图的 Release 函数:

        public virtual List<Batch> Release(JournalEntry je, PMRegister doc, out List<PMTask> allocTasks)
    

    您将制作整个函数的副本,然后创建一个批次,然后覆盖该事务。该文档仍将标记为员工的主要分支机构,但每一行都会更新到正确的分支机构。

    注意:这需要在每次更新 Acumatica 时进行彻底测试。您还需要从会计方面验证所有报告是否正确。一些公司可能会报告文档的分支而不是交易,或者忽略它并查看它正在访问的帐户。

    我希望这可以帮助您找到所需的解决方案!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-14
      • 1970-01-01
      • 2016-12-15
      • 1970-01-01
      • 2013-02-18
      • 2013-03-30
      • 1970-01-01
      相关资源
      最近更新 更多