//---------------------------------------------------------------------------------------------------------
            /// <summary>
            /// Группирование контрактов по указанному свойству
            /// </summary>
            /// <param name="property_name">Имя свойства для группировки</param>
            //---------------------------------------------------------------------------------------------------------
            public void GroupContractBy(String property_name)
            {
                // 1) Превращаем в плоский список
                ListArray <CContract> flat_contracts = new ListArray <CContract>();

                for (Int32 i = 0; i < mModels.Count; i++)
                {
                    if (mModels[i] is CContract)
                    {
                        flat_contracts.Add(mModels[i] as CContract);
                    }
                    else
                    {
                        if (mModels[i] is CContractSet)
                        {
                            //CContractSet contract_set = mModels[i] as CContractSet;
                            //for (Int32 j = 0; j < contract_set.mModels.Count; j++)
                            //{
                            //	if (contract_set.mModels[j] is CContract)
                            //	{
                            //		flat_contracts.Add(contract_set.mModels[j] as CContract);
                            //	}
                            //}
                        }
                    }
                }

                // 2) Формируем группы
                ListArray <CContractSet> groups = new ListArray <CContractSet>();

                for (Int32 i = 0; i < flat_contracts.Count; i++)
                {
                    // 3) Ищем группу
                    Int32 find_index = groups.Find((CContractSet contract_set) =>
                    {
                        return(contract_set.Name == flat_contracts[i].CustomerName);
                    });
                    if (find_index != -1)
                    {
                        // Такую группу нашли добавляем туда контракт
                        groups[find_index].AddExistingModel(flat_contracts[i]);
                    }
                    else
                    {
                        // Группу не нашли, создаем с указанным именем и добавляем туда контракт
                        CContractSet contract_set = new CContractSet(flat_contracts[i].CustomerName);
                        contract_set.AddExistingModel(flat_contracts[i]);
                        groups.Add(contract_set);
                    }
                }

                // Обновляем список
                this.ClearModels();
                this.AddExistingModels(groups);
            }
            //---------------------------------------------------------------------------------------------------------
            /// <summary>
            /// Получение копии объекта
            /// </summary>
            /// <returns>Копия объекта</returns>
            //---------------------------------------------------------------------------------------------------------
            public override System.Object Clone()
            {
                CContractSet clone = new CContractSet();

                clone.mName = mName;

                for (Int32 i = 0; i < mModels.Count; i++)
                {
                    clone.AddExistingModel(mModels[i].Clone() as ICubeXContractData);
                }

                clone.mNotCalculation = mNotCalculation;
                return(clone);
            }
 //---------------------------------------------------------------------------------------------------------
 /// <summary>
 /// Сравнение объектов для упорядочивания
 /// </summary>
 /// <param name="other">Сравниваемый объект</param>
 /// <returns>Статус сравнения объектов</returns>
 //---------------------------------------------------------------------------------------------------------
 public Int32 CompareTo(CContractSet other)
 {
     return(mName.CompareTo(other.Name));
 }