public CABalValidate()
        {
            CASetup setup = CASetup.Current;
            CABalanceValidationPeriodFilter filter = PeriodsFilter.Current;

            CABalValidateList.SetProcessDelegate <CATranEntryLight>((CATranEntryLight graph, CashAccount cashAccount) => Validate(graph, cashAccount, filter));

            CABalValidateList.SetProcessCaption(Messages.Validate);
            CABalValidateList.SetProcessAllCaption(Messages.ValidateAll);

            PXUIFieldAttribute.SetEnabled <CashAccount.selected>(CABalValidateList.Cache, null, true);
            PXUIFieldAttribute.SetEnabled <CashAccount.cashAccountCD>(CABalValidateList.Cache, null, false);
            PXUIFieldAttribute.SetEnabled <CashAccount.descr>(CABalValidateList.Cache, null, false);
        }
        private static void Validate(CATranEntryLight graph, CashAccount cashAccount, CABalanceValidationPeriodFilter filter)
        {
            if (string.IsNullOrEmpty(filter.FinPeriodID))
            {
                throw new PXException(GL.Messages.Prefix + ": " + GL.Messages.ProcessingRequireFinPeriodID);
            }

            MasterFinPeriod period = PXSelect <MasterFinPeriod, Where <MasterFinPeriod.finPeriodID, Equal <Required <MasterFinPeriod.finPeriodID> > > > .Select(graph, filter.FinPeriodID);

            if (period == null)
            {
                throw new PXException(GL.Messages.ProcessingRequireFinPeriodID);
            }

            ValidateAccount(graph, cashAccount);
            graph.Clear();

            ValidateCleared(graph, cashAccount, period);
            graph.Clear();

            ValidateCAAdjustments(graph, cashAccount, period);
            graph.Clear();

            ValidateCATransfers(graph, cashAccount, period);
            graph.Clear();

            ValidateCATrans(graph, cashAccount, period);
            graph.Clear();

            ValidateCADailySummary(graph, cashAccount, period);
        }