/// <summary>
        /// Проверка правильности следования этапов
        /// </summary>
        public virtual void CheckStageOrder()
        {
            bool isLastStageCalculation = true; // Имел ли предыдущий этап тип "Расчет заказа"
            bool isCurrentStageCalculation;     // Имеет ли текущий этап тип "Расчет заказа"

            foreach (var stage in stages.OrderBy(x => x.OrdinalNumber))
            {
                isCurrentStageCalculation = stage.Type == ProductionOrderBatchStageType.Calculation;
                if (isCurrentStageCalculation && !isLastStageCalculation)
                {
                    throw new Exception(String.Format("Этапы с типом «{0}» не могут идти после других этапов.",
                                                      ProductionOrderBatchStageType.Calculation.GetDisplayName()));
                }

                isLastStageCalculation = isCurrentStageCalculation;
            }
        }