/// <summary>
        /// Обновление значения показателя по словарю "Дата/значение прироста показателя"
        /// </summary>
        /// <param name="deltasInfo">Словарь "Дата/значение прироста показателя"</param>
        public void Update(DynamicDictionary <DateTime, decimal> deltasInfo, short storageId, int accountOrganizationId)
        {
            if (!deltasInfo.Any())
            {
                return;
            }

            // определяем минимальную дату, начиная с которой необходимо внести изменения
            var minDate = deltasInfo.Keys.Min();

            // список текущих показателей
            var allIndicators = articleRevaluationIndicatorRepository.GetFrom(minDate, storageId, accountOrganizationId).ToList();

            // накопительная сумма изменений
            var totalDelta = 0.0M;

            // выстраиваем необходимые временные интервалы
            foreach (var deltaInfo in deltasInfo.OrderBy(x => x.Key).Where(x => x.Value != 0))
            {
                // ищем текущий показатель
                var foundedIndicator = allIndicators.FirstOrDefault(x => x.StartDate <= deltaInfo.Key && (x.EndDate > deltaInfo.Key || x.EndDate == null));

                // если показатель найден
                if (foundedIndicator != null)
                {
                    // если даты не совпадают - создаем новый показатель
                    if (foundedIndicator.StartDate != deltaInfo.Key)
                    {
                        var _new = new T();
                        _new.StartDate             = foundedIndicator.StartDate;
                        _new.StorageId             = storageId;
                        _new.AccountOrganizationId = accountOrganizationId;
                        _new.RevaluationSum        = foundedIndicator.RevaluationSum;
                        _new.EndDate    = deltaInfo.Key;
                        _new.PreviousId = foundedIndicator.PreviousId; // выставляем ссылку на предыдущую запись

                        articleRevaluationIndicatorRepository.Save(_new);

                        allIndicators.Add(_new);

                        foundedIndicator.StartDate  = deltaInfo.Key;
                        foundedIndicator.PreviousId = _new.Id;
                    }
                }
                else
                {
                    // если показатель переоценки не найден, создаем его
                    var _new = new T();
                    _new.StartDate             = deltaInfo.Key;
                    _new.StorageId             = storageId;
                    _new.AccountOrganizationId = accountOrganizationId;
                    _new.RevaluationSum        = 0; // значение будет обновлено далее в цикле

                    articleRevaluationIndicatorRepository.Save(_new);

                    // если в allIndicators уже есть показатели
                    if (allIndicators.Any())
                    {
                        // находим первый показатель из имеющихся
                        var firstIndicator = allIndicators.OrderBy(x => x.StartDate).First();
                        var minStartDate   = firstIndicator.StartDate;

                        if (minStartDate > _new.StartDate)
                        {
                            // устанавливаем дату окончания для добавленного показателя
                            _new.EndDate = minStartDate;
                            firstIndicator.PreviousId = _new.Id;
                        }
                    }

                    allIndicators.Add(_new);
                }
            }

            // обновляем значения показателей
            foreach (var ind in allIndicators.OrderBy(x => x.StartDate))
            {
                var curDeltaInfo = deltasInfo.FirstOrDefault(x => x.Key == ind.StartDate);

                if (curDeltaInfo.Key != null)
                {
                    totalDelta += curDeltaInfo.Value;
                }

                ind.RevaluationSum += totalDelta;
            }
        }