public static void UpdateEstimatedAccount(int AccountId, decimal TotalValue, bool PreserveParentValue) { if (!CanWork(AccountId)) { throw new AccessDeniedException(); } decimal ESub = 0; decimal ETotal = 0; using (IDataReader reader = DBFinance.GetAccount(AccountId)) { reader.Read(); ESub = (decimal)reader["ESub"]; // сумма дочерних ETotal = (decimal)reader["ETotal"]; // старый общий итог } // Новый итог не может быть меньше суммы старых дочерних значений if (TotalValue < ESub) { throw new WrongDataException(); } // Oleg Rylin [5/23/2006] // Проверка на то, чтобы не вылезти из родительского диапазона // Т.е. разница между тем, что было (ETotal) и тем, что стало (TotalValue), // не должна быть больше ECur родителя (parentECur) if (PreserveParentValue) { decimal parentECur = 0; int ParentId = DBFinance.GetParentAccountId(AccountId); if (ParentId > 0) { using (IDataReader reader = DBFinance.GetAccount(ParentId)) { reader.Read(); parentECur = (decimal)reader["ECur"]; // настолько можно изменить значение } if (TotalValue - ETotal > parentECur) { throw new WrongDataException(); } } } decimal ECur = TotalValue - ESub; using (DbTransaction tran = DbTransaction.Begin()) { DBFinance.UpdateAccountECur(AccountId, ECur, Security.CurrentUser.UserID); if (PreserveParentValue) { RecalculateParentAccountWithPreserving(AccountId); } else { RecalculateParentAccounts(AccountId, false); } tran.Commit(); } }