public IEnumerable <IResult> Save()
        {
            UpdateMarkups();
            UpdatePriceTags();
            var error = Settings.Value.Validate(validateMarkups: HaveAddresses);

            if (error?.Count > 0)
            {
                if (Session != null)
                {
                    Session.FlushMode = FlushMode.Never;
                }
                GoToErrorTab(error.First()[0]);
                yield return(MessageResult.Warn(error.First()[1]));

                yield break;
            }

            if (passwordUpdated)
            {
                Settings.Value.Password = password;
            }
            if (diadokPasswordUpdated)
            {
                Settings.Value.DiadokPassword = diadokPassword;
            }
            if (sbisPasswordUpdated)
            {
                Settings.Value.SbisPassword = sbisPassword;
            }

            if (App.Current != null)
            {
                StyleHelper.BuildStyles(App.Current.Resources, Styles);
            }

            if (Session != null)
            {
                IsCredentialsChanged = Session.IsChanged(Settings.Value, s => s.Password) ||
                                       Session.IsChanged(Settings.Value, s => s.UserName);
                if (Session.IsChanged(Settings.Value, s => s.GroupWaybillsBySupplier) &&
                    Settings.Value.GroupWaybillsBySupplier)
                {
                    foreach (var dirMap in DirMaps)
                    {
                        try {
                            Directory.CreateDirectory(dirMap.Dir);
                        }
                        catch (Exception e) {
                            Log.Error($"Не удалось создать директорию {dirMap.Dir}", e);
                        }
                    }
                }

                if (Session.IsChanged(Settings.Value, x => x.JunkPeriod))
                {
                    yield return(new Models.Results.TaskResult(Query(s => DbMaintain.CalcJunk(s, Settings.Value))));
                }

                Session.FlushMode = FlushMode.Auto;
                Settings.Value.ApplyChanges(Session);
                SynchronizeSpecialMarkUps();
            }
            TryClose();
        }