private void ОбновитьСтрокуКнигиДобавить(КнигаСтрока str, Int32 k)
 {
     str.СуммаВсего         += k * СуммаВсего;
     str.СуммаСтоимость     += k * СуммаСтоимость;
     str.СуммаНДСБаза       += k * СуммаНДСБаза;
     str.СуммаНДСВычет      += k * СуммаНДСВычет;
     str.СуммаНДССтоимость  += k * СуммаНДССтоимость;
     str.СуммаНДС19Входящий += k * СуммаНДС19Входящий;
     str.СуммаНДС19Списано  += k * СуммаНДС19Списано;
 }
 protected void ОбновитьСтрокуКнигиДобавить(КнигаСтрока str)
 {
     ОбновитьСтрокуКнигиДобавить(str, 1);
 }
        protected override void OnChanged(string propertyName, object oldValue, object newValue)
        {
            base.OnChanged(propertyName, oldValue, newValue);
            if (IsLoading)
            {
                return;
            }
            Decimal old_summa;

            switch (propertyName)
            {
            case "ОснованиеРегНомер":
                if (!String.IsNullOrEmpty(ОснованиеРегНомер))
                {
                    if (ОснованиеДокумент == null || ОснованиеРегНомер != ОснованиеДокумент.егНомер)
                    {
                        ОснованиеДокумент = Session.FindObject <ОснованиеДокумент>(
                            PersistentCriteriaEvaluationBehavior.InTransaction,
                            new BinaryOperator("РегНомер", ОснованиеРегНомер));
                        if (ОснованиеДокумент == null)
                        {
                            Основание = null;
                        }
                    }
                }
                else
                {
                    Основание = null;
                }
                break;

            case "Контейнер":
                if (Контейнер != null)
                {
                    ПериодБУ  = Контейнер.ПериодБУ;
                    ПериодНДС = Контейнер.ПериодНДС;
                }
                break;

            case "ТипКниги":
            case "ПериодНДС":
                ОбновитьСтрокуКниги();
                break;

            case "КнигаСтрока":
                КнигаСтрока old_str = (КнигаСтрока)oldValue;
//                    ОбновитьСтрокуКниги();
                if (old_str != null)
                {
                    ОбновитьСтрокуКнигиВычесть(old_str);
                }
                if (КнигаСтрока != null)
                {
                    ОбновитьСтрокуКнигиДобавить(КнигаСтрока);
                }
                break;

            case "Основание":
                if (Основание != null)
                {
                    if (ОснованиеДокумент == null || Основание != ОснованиеДокумент.Основание)
                    {
                        ОснованиеДокумент = Основание.ДействующийДокумент;
                    }
                    ОбновитьСтрокуКниги();
                }
                else
                {
                    ОснованиеДокумент = null;
                }
                UpdateTypes();
                break;

            case "ОснованиеДокумент":
                if (ОснованиеДокумент != null)
                {
                    Основание = ОснованиеДокумент.Основание;
                }
                break;

            case "ДатаБУ":
                if (Контейнер != null && Контейнер.ПериодБУ != null)
                {
                    ПериодБУ = Контейнер.ПериодБУ;
                }
                else
                {
                    if (ДатаБУ < new DateTime(2015, 1, 1))
                    {
                        break;
                    }
                    ПериодБУ = Session.FindObject <ПериодБУ>(PersistentCriteriaEvaluationBehavior.InTransaction,
                                                             new BinaryOperator("ДатаС", ДатаБУ, BinaryOperatorType.LessOrEqual) &
                                                             new BinaryOperator("ДатаПо", ДатаБУ, BinaryOperatorType.GreaterOrEqual));
                    if (ПериодБУ == null)
                    {
                        ПериодБУ = new ПериодБУ(Session);
                        ПериодБУ.Налогоплательщик = Контейнер.Налогоплательщик;
                        ПериодБУ.ДатаПериода      = ДатаБУ;
                    }
                }
                break;

            case "ДатаНДС":
                if (Контейнер != null && Контейнер.ПериодНДС != null)
                {
                    ПериодНДС = Контейнер.ПериодНДС;
                }
                else
                {
                    if (ДатаНДС < new DateTime(2000, 1, 1))
                    {
                        break;
                    }
                    ПериодНДС = Session.FindObject <ПериодНДС>(PersistentCriteriaEvaluationBehavior.InTransaction,
                                                               new BinaryOperator("ДатаС", ДатаНДС, BinaryOperatorType.LessOrEqual) &
                                                               new BinaryOperator("ДатаПо", ДатаНДС, BinaryOperatorType.GreaterOrEqual));
                    if (ПериодНДС == null)
                    {
                        ПериодНДС = new ПериодНДС(Session);
                        ПериодНДС.Налогоплательщик = Контейнер.Налогоплательщик;
                        ПериодНДС.ДатаПериода      = ДатаНДС;
                    }
                }
                break;

            case "ТипОперВнутр":
                UpdateTypes();
                break;

            case "ТипОсновной":
                UpdateTypes();
                break;

            case "ТипНапрОпер":
                UpdateTypes();
                break;

            case "ТипДеятельности":
                UpdateTypes();
                break;

            case "СуммаВсего":
                old_summa = (Decimal)oldValue;
                if (КнигаСтрока != null)
                {
                    КнигаСтрока.СуммаВсего -= old_summa;
                    КнигаСтрока.СуммаВсего += СуммаВсего;
                }
                break;

            case "СуммаСтоимость":
                old_summa = (Decimal)oldValue;
                if (КнигаСтрока != null)
                {
                    КнигаСтрока.СуммаСтоимость -= old_summa;
                    КнигаСтрока.СуммаСтоимость += СуммаСтоимость;
                }
                break;

            case "СуммаНДСБаза":
                old_summa = (Decimal)oldValue;
                if (КнигаСтрока != null)
                {
                    КнигаСтрока.СуммаНДСБаза -= old_summa;
                    КнигаСтрока.СуммаНДСБаза += СуммаНДСБаза;
                }
                break;

            case "СуммаНДСВычет":
                old_summa = (Decimal)oldValue;
                if (КнигаСтрока != null)
                {
                    КнигаСтрока.СуммаНДСВычет -= old_summa;
                    КнигаСтрока.СуммаНДСВычет += СуммаНДСВычет;
                }
                break;

            case "СуммаНДССтоимость":
                old_summa = (Decimal)oldValue;
                if (КнигаСтрока != null)
                {
                    КнигаСтрока.СуммаНДССтоимость -= old_summa;
                    КнигаСтрока.СуммаНДССтоимость += СуммаНДССтоимость;
                }
                break;

            case "СуммаНДС19Входящий":
                old_summa = (Decimal)oldValue;
                if (КнигаСтрока != null)
                {
                    КнигаСтрока.СуммаНДС19Входящий -= old_summa;
                    КнигаСтрока.СуммаНДС19Входящий += СуммаНДС19Входящий;
                }
                break;

            case "СуммаНДС19Списано":
                old_summa = (Decimal)oldValue;
                if (КнигаСтрока != null)
                {
                    КнигаСтрока.СуммаНДС19Списано -= old_summa;
                    КнигаСтрока.СуммаНДС19Списано += СуммаНДС19Списано;
                }
                break;
            }
        }