public override void Save()
        {
            if (docControl == null || !docControl.ImageDisplayed || ServerInfo == null)
            {
                return;
            }

            string  oldFileName;
            TmpFile tf = null;

            // Добавил сохранения изменений изображения из факса.
            if (IsFax() && docControl.Modified)
            {
                oldFileName = Path.Combine(Path.GetTempPath(), Path.GetTempFileName());
                if (!docControl.SaveAs(oldFileName))
                {
                    return;
                }
            }
            else
            {
                tf          = Environment.GetTmpFileByKey(docControl.FileName);
                oldFileName = docControl.FileName;
                if (tf != null && tf.CurAct == Environment.ActionBefore.Save)
                {
                    if (!File.Exists(tf.TmpFullName))
                    {
                        docControl.SaveToTmpCopy(docControl.FileName, tf.TmpFullName, docControl.IsPDFMode);
                    }

                    oldFileName = tf.TmpFullName;
                }
            }

            if (Environment.DocToSave.ContainsKey(oldFileName))
            {
                Form dialog = Environment.DocToSave[oldFileName] as Form;
                if (dialog != null)
                {
                    dialog.BringToFront();
                    dialog.Activate();
                }
            }
            else
            {
                if (File.Exists(oldFileName))
                {
                    Environment.DocToSave.TryAdd(oldFileName, null);
                    Form findForm = docControl.FindForm();
                    if (findForm != null && findForm.InvokeRequired)
                    {
                        findForm.Invoke((MethodInvoker)(delegate
                        {
                            Dialogs.AddDBDocDialog dialog = new Dialogs.AddDBDocDialog(serverInfo, Dialogs.AddDBDocDialog.TypeSave.SaveAll,
                                                                                       RetrieveScanDate(), IsFax(), ID, docControl.CurDocString,                                         //GetStringToSave(),
                                                                                       IsFax(), IsScaner(), oldFileName, saveFaxInfo, null,
                                                                                       IsPdf, docControl.PageCount);
                            Environment.DocToSave.TryUpdate(oldFileName, dialog, null);

                            if (tf == null || tf.CurAct == Environment.ActionBefore.Save)
                            {
                                if (tf == null)
                                {
                                    tf = Environment.GetTmpFile(oldFileName);
                                }
                                if (tf != null)
                                {
                                    tf.LinkCnt++;
                                }
                            }

                            dialog.DialogEvent += dialog_DialogEvent;
                            dialog.Show();
                        }));
                    }
                    else
                    {
                        Dialogs.AddDBDocDialog dialog = new Dialogs.AddDBDocDialog(serverInfo, Dialogs.AddDBDocDialog.TypeSave.SaveAll,
                                                                                   RetrieveScanDate(), IsFax(), ID,
                                                                                   docControl.CurDocString,        //GetStringToSave(),
                                                                                   IsFax(), IsScaner(),
                                                                                   oldFileName, saveFaxInfo, null, IsPdf,
                                                                                   docControl.PageCount);
                        Environment.DocToSave.TryUpdate(oldFileName, dialog, null);

                        if (tf == null || tf.CurAct == Environment.ActionBefore.Save)
                        {
                            if (tf == null)
                            {
                                tf = Environment.GetTmpFile(oldFileName);
                            }
                            if (tf != null)
                            {
                                tf.LinkCnt++;
                            }
                        }

                        dialog.DialogEvent += dialog_DialogEvent;
                        dialog.Show();
                    }
                }
            }
        }
        private void dialog_DialogEvent(object source, DialogEventArgs e)
        {
            Dialogs.AddDBDocDialog dialog = e.Dialog as Dialogs.AddDBDocDialog;
            if (dialog == null)
            {
                return;
            }
            Form form;

            Document.Objects.TmpFile tf = null;
            if (!string.IsNullOrEmpty(dialog.OldFileName))
            {
                Environment.DocToSave.TryRemove(dialog.OldFileName, out form);

                tf = Environment.GetTmpFileByValue(dialog.OldFileName);
            }
            switch (dialog.DialogResult)
            {
            case DialogResult.Yes:
            case DialogResult.Retry:
            case DialogResult.OK:
            {
                int docID   = dialog.DocID;
                int imageID = dialog.ImageID;

                Console.WriteLine("{0}: DocID: {1} ImageID: {2}", DateTime.Now.ToString("HH:mm:ss fff"), docID, imageID);
                if (docID > 0 && imageID > 0)
                {
                    bool work = dialog.DialogResult != DialogResult.Yes;
                    if (work && dialog.AddToWork)
                    {
                        Console.WriteLine("{0}: Add to Work", DateTime.Now.ToString("HH:mm:ss fff"));
                        Environment.WorkDocData.AddDocToEmployee(docID, Environment.CurEmp.ID);
                    }
                    DocumentSavedEventArgs doc = new DocumentSavedEventArgs(docID, imageID, work && dialog.GotoDoc, work && dialog.CreateEForm, dialog.CreateSlaveEForm);

                    if (work)
                    {
                        force        = !dialog.AddToWork;
                        sendMail     = dialog.SendMessage && !dialog.CreateSlaveEForm;
                        parentDocIDs = dialog.ParentDocIDs;
                        childDocIDs  = dialog.ChildDocIDs;
                        sendString   = GetStringToSave();
                        if (dialog.NeedOpenDoc)
                        {
                            Environment.OnNewWindow(this, doc);
                        }
                        Send(dialog.DocID);
                    }
                    Console.WriteLine("{0}: Save event", DateTime.Now.ToString("HH:mm:ss fff"));
                    OnDocumentSaved(doc);
                    Console.WriteLine("{0}: event", DateTime.Now.ToString("HH:mm:ss fff"));
                }
            }
                if (tf != null && tf.Window != null)
                {
                    tf.AscBeforeClose = false;
                    tf.Window.Close();
                }
                break;
            }

            if (tf != null)
            {
                tf.CurAct = Environment.ActionBefore.None;
                tf.LinkCnt--;
            }
        }