Esempio n. 1
0
        // Перенумерация OutlineNumber и OutlineLevel
        private static void ProcessRenumber(int AccountId, ArrayList children)
        {
            string OutlineNumber;
            int    OutlineLevel;

            using (IDataReader reader = DBFinance.GetAccount(AccountId))
            {
                reader.Read();
                OutlineNumber = reader["OutlineNumber"].ToString();
                OutlineLevel  = (int)reader["OutlineLevel"];
            }

            int pos = 0;

            foreach (int childId in children)
            {
                // Найдём всех внуков
                ArrayList grandChildren = new ArrayList();
                using (IDataReader reader = DBFinance.GetListChildrenAccounts(childId))
                {
                    while (reader.Read())
                    {
                        grandChildren.Add((int)reader["AccountId"]);
                    }
                }

                // Обновим OutlineNumber
                pos++;
                string newNumber = String.Format("{0}.{1}", OutlineNumber, pos);
                DBFinance.UpdateOutlineLevelAndNumber(childId, OutlineLevel + 1, newNumber);

                // Рекурсия
                if (grandChildren.Count > 0)
                {
                    ProcessRenumber(childId, grandChildren);
                }
            }
        }