Пример #1
0
        private void button1_Click(object sender, EventArgs e)
        {
            AddrInfo addr_info = new AddrInfo();

            if (text_ip_addr.Text.Trim() != string.Empty)
            {
                addr_info.ip = this.text_ip_addr.Text;
            }
            else
            {
                MessageBox.Show("ip addr is empty ! ");
                return;
            }

            if (text_port.Text.Trim() != string.Empty)
            {
                addr_info.port = this.text_port.Text;
            }
            else
            {
                MessageBox.Show("port is empty ! ");
                return;
            }

            Thread thread = new Thread(reciveAndListener);

            //如果线程绑定的方法带有参数的话,那么这个参数的类型必须是object类型,所以讲ip,和端口号 写成一个结构体进行传递
            thread.Start(addr_info);
        }
Пример #2
0
        private void reciveAndListener(object ipAndPort)
        {
            AddrInfo  addr_info = (AddrInfo)ipAndPort;
            IPAddress ip        = IPAddress.Parse(addr_info.ip);

            try
            {
                server = new TcpListener(ip, int.Parse(addr_info.port));
                server.Start();//启动监听
                MessageBox.Show("服务端开启侦听....\n ");
            }
            catch {
                MessageBox.Show("服务端侦听失败 ");
            }
            // rtboxkehu.Invoke(new showData(rtboxkehu.AppendText), "服务端开启侦听....\n");
            while (true)
            {
                //获取连接的客户端对象
                client = server.AcceptTcpClient();
                MessageBox.Show("有客户端请求连接,连接已建立!");
                NetworkStream reciveStream = client.GetStream();
                #region 循环监听客户端发来的信息
                do
                {
                    byte[] buffer = new byte[buffer_size];                        //  前面已定义buffersize=8000,类型为int
                    int    msgsize;
                    try

                    {
                        lock (reciveStream)
                        {
                            msgsize = reciveStream.Read(buffer, 0, buffer_size);
                        }
                        if (msgsize == 0)
                        {
                            MessageBox.Show("客户端关闭连接");
                            break;
                        }
                        recv_buffer = Encoding.UTF8.GetString(buffer, 0, msgsize);
                        MessageBox.Show("接收到数据,请点击显示方式");
                    }
                    catch
                    {
                        MessageBox.Show("出现异常:连接已关闭 ! ");
                        // rtboxkehu.Invoke(new showData(rtboxkehu.AppendText), "\n 出现异常:连接已关闭");
                        break;
                    }
                } while (true);
                #endregion
            }
        }
Пример #3
0
        /// добавление виртуального адреса (поддон/шлюз)
        private bool MayAddDefaultAdr()
        {
            bool
                ret = true;
            string
                sDefAdr;

            if (xPars.UseAdr4DocMode)
            {
                sDefAdr = String.Format("USID{0}{1}", xSm.MACAdr, xSm.sUser);
                AddrInfo xA = new AddrInfo(sDefAdr, xSm.nSklad);
                xA.ScanDT = DateTime.Now;
                if (AppC.xDocTInf[xCDoc.xDocP.nTypD].MoveType == AppC.MOVTYPE.PRIHOD)
                {
                    if (!AppC.xDocTInf[xCDoc.xDocP.nTypD].AdrFromNeed)
                    {// адрес-источник можно установить по умолчанию
                        if (xCDoc.xOper.GetSrc(false).Length == 0)
                        {
                            xCDoc.xOper.SetOperSrc(xA, xCDoc.xDocP.nTypD, false);
                        }
                    }
                }
                if (AppC.xDocTInf[xCDoc.xDocP.nTypD].MoveType == AppC.MOVTYPE.RASHOD)
                {
                    if (!AppC.xDocTInf[xCDoc.xDocP.nTypD].AdrToNeed)
                    {// адрес-источник можно установить по умолчанию
                        if (xCDoc.xOper.GetDst(false).Length == 0)
                        {
                            xCDoc.xOper.SetOperDst(xA, xCDoc.xDocP.nTypD, false);
                        }
                    }
                }
            }

            return(ret);
        }
Пример #4
0
        /// подготовить и отобразить содержимое SSCC
        private void ShowSSCCContent(DataTable dtZ, string sSSCC, ServerExchange xSE, AddrInfo xA, ref Srv.CurrFuncKeyHandler ehKeybHdl)
        {
            const int NP_LEN = 5;
            int
                nTotMest,
                nM;
            string
                sNP,
                sUser = "",
                sFIO  = "";
            char
                cExCh = '=';
            DataRow
                xd;
            DateTime
                dVyr;
            List <string>
            lKMC     = new List <string>(),
                lCur = new List <string>();
            FRACT
                fTotEd,
                fE;

            nTotMest = 0;
            fTotEd   = 0;
            try
            {
                string sA = "";
                try
                {
                    sA = xA.AddrShow;
                }
                catch { }

                try
                {
                    sUser = xSE.AnswerPars["USER"];
                    if ((sUser == AppC.SUSER) || (sUser == AppC.GUEST))
                    {
                        sFIO = (sUser == AppC.SUSER) ? "Admin" : "Работник склада";
                    }
                    else
                    {
                        NSI.RezSrch zS = xNSI.GetNameSPR(NSI.NS_USER, new object[] { sUser }, "NMP");
                        if (zS.bFind)
                        {
                            sFIO = sUser + '-' + zS.sName;
                        }
                        else
                        {
                            sFIO = sUser;
                        }
                    }
                }
                catch
                {
                    sFIO = "";
                }

                xInf = aKMCName(String.Format("{0} ({1}) {2}", sSSCC.Substring(2), sA, sFIO), false);
                xInf.Add(aKMCName("", true, cExCh)[0]);

                if (dtZ.Rows.Count > 0)
                {
                    DataView
                        dv = new DataView(dtZ, "", "KMC", DataViewRowState.CurrentRows);

                    foreach (DataRowView dva in dv)
                    {
                        xd = dva.Row;
                        try
                        {
                            nM = (int)xd["KOLM"];
                        }
                        catch { nM = 0; }
                        try
                        {
                            fE = (FRACT)xd["KOLE"];
                        }
                        catch { fE = 0; }

                        try
                        {
                            dVyr = DateTime.ParseExact((string)xd["DVR"], "yyyyMMdd", null);
                        }
                        catch { dVyr = DateTime.MinValue; }
                        nTotMest += nM;
                        fTotEd   += fE;

                        if (!lKMC.Contains((string)xd["KMC"]))
                        {
                            lKMC.Add((string)xd["KMC"]);
                        }

                        lCur.Add(String.Format("{0,4} {1}", xd["KRKMC"], xd["SNM"]));
                        //lCur.Add(String.Format("{0} {1,6} {2,5:F1} {3,6} {4,7}", dVyr.ToString("dd.MM"), xd["NP"], xd["EMK"], nM, fE));
                        sNP = xd["NP"].ToString();
                        if (sNP.Length > NP_LEN)
                        {
                            sNP = sNP.Substring(sNP.Length - NP_LEN, NP_LEN);
                        }
                        else
                        {
                            sNP = sNP.PadLeft(NP_LEN);
                        }
                        lCur.Add(String.Format("{0} {1,5} {2,5:F1} {3,6} {4,7}", dVyr.ToString("dd.MM"), sNP, xd["EMK"], nM, fE));
                        lCur.Add(aKMCName("", true)[0]);
                    }
                    xInf.Add(String.Format("Всего SKU: {0}  Мест:{1}  Ед.:{2}", lKMC.Count, nTotMest, fTotEd));
                    xInf.Add(aKMCName("", true, cExCh)[0]);
                    xInf.Add(" Двыр   №пт  Емк    Мест     Ед.");
                    xInf.Add(aKMCName("", true, cExCh)[0]);
                    xInf.AddRange(lCur);
                }
                else
                {
                    xInf.Add("Нет сведений!");
                    Srv.PlayMelody(W32.MB_3GONG_EXCLAM);
                }
                //xHelpS.ShowInfo(xInf, ref ehKeybHdl);
                Srv.HelpShow
                    xSSCCCont = new Srv.HelpShow(this);
                //xSSCCCont.ShowInfo(xInf, ref ehKeybHdl);
                xSSCCCont.ShowInfo(null,
                                   (tcMain.SelectedIndex == PG_DOC) ? dgDoc :
                                   (tcMain.SelectedIndex == PG_SCAN) ? dgDet : null,
                                   xInf, ref ehKeybHdl);
            }
            catch (Exception ex)
            {
                int ggg = 999;
            }
        }
Пример #5
0
        public int ProceedSSCC(ScanVarGP xSc, ref PSC_Types.ScDat scD, ServerExchange xSE)
        {
            int
                ret = AppC.RC_OK;                       // по умолчанию - обработку скана заканчиваем
            bool
                bExt,
                bCallExch = false,
                bMaySet   = true;
            string
                sSSCC = "";
            DataRow
                dr = null;
            RowObj
                xR;
            DialogResult
                dRez;

            //ServerExchange
            //    xSE = new ServerExchange(this);


            if (xSE == null)
            {
                xSE       = new ServerExchange(this);
                bCallExch = true;
            }

            // Внешние SSCC
            bExt = ((xSc.bcFlags & ScanVarGP.BCTyp.SP_SSCC_EXT) > 0) ? true : false;

            sSSCC                    =
                scD.sSSCC            =
                    xCDoc.xOper.SSCC = xSc.Dat;

            if (bCallExch)
            {
                ret = ConvertSSCC2Lst(xSE, xSc.Dat, ref scD, false);
            }
            else
            {
                ret = (xCLoad.dtZ.Rows.Count == 1) ? AppC.RC_OK : AppC.RC_MANYEAN;
            }


            if (xSE.AnswerPars.ContainsKey("ADRCELL"))
            {
                AddrInfo xA = new AddrInfo(xSE.AnswerPars["ADRCELL"], xSm.nSklad);
                if (xA.Addr.Length > 0)
                {
                    if (!xCDoc.xOper.IsFillSrc())
                    {
                        xCDoc.xOper.SetOperSrc(xA, xCDoc.xDocP.nTypD, true);
                    }
                }
            }



            switch (xCDoc.xDocP.TypOper)
            {
            case AppC.TYPOP_PRMK:
            case AppC.TYPOP_MARK:
                if (!bExt && (xCDoc.xDocP.TypOper == AppC.TYPOP_MARK))
                {
                    // будет маркировка сборного поддона
                    dr = AddDetSSCC(xSc, xCDoc.nId, ScanVarGP.BCTyp.SP_SSCC_INT, "");
                    if (dr != null)
                    {
                        drDet = dr;
                    }
                    break;
                }
                if (drDet != null)
                {
                    xR = new RowObj(drDet);
                    if (xR.IsSSCC)
                    {
                        dRez = MessageBox.Show(
                            String.Format("SSCC={0}\nОтменить (Enter)?\n(ESC)-изменить SSCC", xR.sSSCC),
                            "Уже маркирован!", MessageBoxButtons.OKCancel,
                            MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
                        bMaySet = (dRez == DialogResult.OK) ? false : true;
                    }
                    if (bMaySet)
                    {
                        drDet["SSCC"] = xSc.Dat;
                        SetOverOPR(false, drDet);
                    }
                }
                break;

            case AppC.TYPOP_MOVE:
                // операция перемещения

                if (!xCDoc.xOper.IsFillSrc() && !xCDoc.xOper.IsFillDst() &&
                    (xSm.xAdrFix1 == null))
                {
                    Srv.ErrorMsg("Адрес не указан!", true);
                    return(ret);
                }

                if ((ret == AppC.RC_OK) || (ret == AppC.RC_MANYEAN))
                {
                    if (xCLoad.dtZ.Rows.Count == 1)
                    {    // однородный поддон
                        if (xCDoc.xOper.IsFillSrc() && ((xCDoc.xOper.xAdrSrc.nType & ADR_TYPE.SSCC) > 0))
                        {
                            Srv.ErrorMsg("SSCC-Адрес недопустим!", true);
                            break;
                        }
                        else
                        {
                            // 090.08.18
                            //AddDet1(ref scD, out dr);
                            ret = AppC.RC_WARN;
                        }
                    }
                    else
                    {    // сборный поддон идет одной строкой
                        dr = AddDetSSCC(xSc, xCDoc.nId, ScanVarGP.BCTyp.SP_SSCC_EXT, "");
                        if (dr is DataRow)
                        {
                            ret = AppC.RC_OK;
                            if (AppPars.ShowSSCC)
                            {
                                ShowSSCCContent(xCLoad.dtZ, xSc.Dat, xSE, xCDoc.xOper.xAdrSrc, ref ehCurrFunc);
                            }
                        }
                    }
                }
                else
                {    // получить расшифровку SSCC от сервера не удалось
                    if ((xSE.ServerRet == AppC.EMPTY_INT) ||
                        (xSE.ServerRet == AppC.RC_OK))
                    {    // но это не ошибка на сервере, возможно, сетевая ошибка
                        dr  = AddDetSSCC(xSc, xCDoc.nId, ScanVarGP.BCTyp.SP_SSCC_EXT, "");
                        ret = AppC.RC_OK;
                    }
                }
                if (dr != null)
                {
                    drDet = dr;
                }
                //IsOperReady(dr);
                IsOperReady();
                break;

            case AppC.TYPOP_DOCUM:
            case AppC.TYPOP_KMPL:
                // документ или комплектация
                if ((!xCDoc.xOper.IsFillSrc() &&
                     (xPars.UseAdr4DocMode) &&
                     (AppC.xDocTInf[xCDoc.xDocP.nTypD].MoveType == AppC.MOVTYPE.RASHOD)))
                {
                    Srv.ErrorMsg("Адрес не указан!", true);
                    return(ret);
                }

                if (ret == AppC.RC_OK)
                {
                    if (xCLoad.dtZ.Rows.Count == 1)
                    {    // монопаллет, продолжается обычная обработка скана
                        if (!bCallExch)
                        {
                            AddDet1(ref scD, out dr);
                        }
                        else
                        {
                            ret = AppC.RC_WARN;
                        }
                    }
                }
                else if (ret == AppC.RC_MANYEAN)
                {    // для сборного поддона
                    if (AppC.xDocTInf[xCDoc.xDocP.nTypD].MoveType == AppC.MOVTYPE.AVAIL)
                    {
                        // в инвентаризацию - добавление без запроса
                        ret = AddGroupDet(ret, (int)NSI.SRCDET.SSCCT, xSc.Dat);
                    }
                    else
                    {
                        if (AppPars.ShowSSCC)
                        {
                            WaitScan4Func(AppC.F_CNTSSCC, "Содержимое SSCC", "Отсканируйте SSCC", xSc);
                        }
                    }
                    // в любом случае обработку скана заканчиваем
                    ret = AppC.RC_OK;
                }
                break;

            case AppC.TYPOP_OTGR:
                ret = SSCC4OTG(xSE, xSc, ref scD, (bExt) ? ScanVarGP.BCTyp.SP_SSCC_EXT :
                               ScanVarGP.BCTyp.SP_SSCC_INT);
                break;
            }

            return(ret);
        }
Пример #6
0
        private int AdrResult(ScanVarGP xSc, ref PSC_Types.ScDat scD, AddrInfo xA)
        {
            int
                nRec,
                nRet = AppC.RC_OK;
            DataRow
                dr;
            DialogResult
                dRez;

            nRet = ConvertAdr2Lst(xA, AppC.COM_ADR2CNT, "ROW", false, NSI.SRCDET.FROMADR);
            if (nRet == AppC.RC_OK)
            {
                nRec = xCLoad.dtZ.Rows.Count;
                if (nRec == 1)
                {
                    scD = new PSC_Types.ScDat(new ScannerAll.BarcodeScannerEventArgs(ScannerAll.BCId.NoData, ""));
                    //SetVirtScan(xCLoad.dtZ.Rows[0], ref scD, true, false);
                    SetVirtScan(xCLoad.dtZ.Rows[0], ref scD, true, true);
                    scD.nRecSrc      = (int)NSI.SRCDET.FROMADR;
                    xCDoc.xOper.SSCC = scD.sSSCC;

                    // Если пришел адрес назначения
                    if ((scD.xOp.xAdrDst != null) && (scD.xOp.xAdrDst.Addr.Length > 0))
                    {
                        xCDoc.xOper.xAdrDst_Srv = scD.xOp.xAdrDst;          // сохранить рекомендации сервера
                        if (xDestInfo == null)
                        {
                            int
                                FontS         = 28,
                                INFWIN_WIDTH  = 230,
                                INFWIN_HEIGHT = 90;
                            System.Drawing.Rectangle
                                recInf,
                                screen = Screen.PrimaryScreen.Bounds;

                            recInf    = new System.Drawing.Rectangle((screen.Width - INFWIN_WIDTH) / 2, 200, INFWIN_WIDTH, INFWIN_HEIGHT);
                            xDestInfo = new Srv.HelpShow(this, recInf, 1, FontS, 0);
                        }
                        xDestInfo.ShowInfo(new string[] { scD.xOp.xAdrDst.AddrShow }, ref ehCurrFunc);
                    }
                    scD.xOp = (xCDoc.xOper == null) ? new CurOper(false) : xCDoc.xOper;


                    if ((xCDoc.xDocP.TypOper == AppC.TYPOP_DOCUM) ||
                        (xCDoc.xDocP.TypOper == AppC.TYPOP_KMPL) ||
                        (xCDoc.xDocP.TypOper == AppC.TYPOP_KMSN))
                    {// будет редактирование количества "отсканированной" продукции
                        return(AppC.RC_CONTINUE);
                    }

                    // далее выполняется только для операций

                    if (xCDoc.xDocP.TypOper == AppC.TYPOP_MOVE)
                    {
                        if (scD.tTyp == AppC.TYP_TARA.TARA_PODDON)
                        {// для поддонов редактирования не будет
                            scCur = scD;
                            if (AddDet1(ref scD, out dr))
                            {
                                //xCDoc.xOper.bObjOperScanned = true;
                                xCDoc.xOper.SetOperObj(dr, xCDoc.xDocP.nTypD, false);
                                //SetDetFields(false);
                                if (dr != null)
                                {
                                    drDet = dr;
                                    //dr["SSCC"] = scD.sSSCC;
                                    //xCDoc.xOper.SSCC = scD.sSSCC;
                                }
                            }
                        }
                    }
                    //IsOperReady(false);
                }
                else if (nRec > 1)
                {// ROW - добавление группы
                    if (xCDoc.xDocP.TypOper == AppC.TYPOP_DOCUM)
                    {
                        dRez = MessageBox.Show(
                            String.Format("Новых строк {0}\nДобавить (Enter)?\n(ESC)- вывод на экран", xCLoad.dtZ.Rows.Count),
                            "Добавление продукции", MessageBoxButtons.OKCancel,
                            MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
                    }
                    else
                    {
                        dRez = DialogResult.Cancel;
                    }
                    if (dRez == DialogResult.OK)
                    {
                        //nRet = AddGroupDet(AppC.RC_MANYEAN, (int)NSI.SRCDET.FROMADR, xA.AddrShow);
                        nRet = AddGroupDet(AppC.RC_MANYEAN, (int)NSI.SRCDET.FROMADR, "");
                    }
                    else
                    {
                        if (AppC.RC_OK == ConvertAdr2Lst(xA, "TXT"))
                        {
                            // справочная информация, просто выводится
                            xHelpS.ShowInfo(xInf, ref ehCurrFunc);
                        }
                    }
                }
            }
            return(nRet);
        }
Пример #7
0
        private int SetOverOPR(bool bAfterScan, DataRow drOpr, string sComm)
        {
            bool
                bNeedTrans;
            int
                nRet = AppC.RC_OK;
            ServerExchange
                xSE = new ServerExchange(this);

            if (drOpr != null)
            {
                bNeedTrans = (((AppC.OPR_STATE)drOpr["STATE"] != AppC.OPR_STATE.OPR_TRANSFERED) ||
                              (xCDoc.xDocP.nTypD != AppC.TYPD_OPR));

                if (bNeedTrans)
                {
                    if (bAfterScan)
                    {
                        if ((scCur.sKMC == (string)drDet["KMC"]) &&
                            (scCur.nParty == (string)drDet["NP"]) &&
                            (scCur.dDataIzg.ToString("yyyyMMdd") == (string)drDet["DVR"]))
                        {
                            bAfterScan = false;
                        }
                    }
                    if (!bAfterScan)
                    {    // выгрузка по кнопочке
                        //drOpr["STATE"] = AppC.OPR_STATE.OPR_READY;
                        xCUpLoad = new CurUpLoad(xPars);
                        xDP      = xCUpLoad.xLP;

                        xCUpLoad.bOnlyCurRow    = true;
                        xCUpLoad.drForUpl       = drOpr;
                        xCUpLoad.sCurUplCommand = sComm;

                        if (xPars.OpAutoUpl)
                        {    // авто-выгрузка операций
                            string sL = UpLoadDoc(xSE, ref nRet);
                            if (xSE.ServerRet == AppC.RC_OK)
                            {
                                AddrInfo xA = xCDoc.xOper.xAdrSrc;
                                xCDoc.xOper = new CurOper(false);
                                if (IsAutoMark())
                                {
                                    xCDoc.xOper.SetOperSrc(xA, xCDoc.xDocP.nTypD, false);
                                    // Имитация вызова
                                    //W32.SimulKey(W32.VK_SHIFT, 0);
                                    //W32.SimulKey(W32.VK_D1, 2);
                                }
                                //return (nRet);
                            }

                            if (nRet != AppC.RC_OK)
                            {
                                if (nRet == AppC.RC_HALFOK)
                                {
                                    Srv.PlayMelody(W32.MB_2PROBK_QUESTION);
                                    MessageBox.Show(sL, "Предупреждение!");
                                }
                                else
                                {
                                    Srv.ErrorMsg(sL, true);
                                }
                            }

                            if ((xSE.ServerRet != AppC.EMPTY_INT) &&
                                (xSE.ServerRet != AppC.RC_OK))
                            {    // операция выгрузки не прошла на сервере (содержательная ошибка)
                                //if (xSE.ServerRet == 99)
                                //    CompareAddrs(xCDoc.xOper.xAdrDst.Addr, String.Format("---{0}-----------После выгрузки", xSE.ServerRet), true);
                                xCDoc.xOper.SetOperDst(null, xCDoc.xDocP.nTypD, true);
                            }
                        }
                        else
                        {
                            xCDoc.xOper = new CurOper(true);
                        }
                        xCUpLoad = null;
                    }
                }
            }
            else
            {
                Srv.ErrorMsg("Продукция не определена!");
            }
            return(nRet);
        }
Пример #8
0
        /// обработка полученного адреса
        private int ProceedAdrNew(ScanVarGP xSc, ref PSC_Types.ScDat scD)
        {
            int
                nRet      = AppC.RC_OK,
                nSrcOrDst = 0; // 1-From, 2-To
            bool
                IsSSCC,
                bOperReady;
            string
                sA1,
                sA2;
            AddrInfo
                xA;

            // значение адреса (без AI)
            //scD.sN = xSc.Dat.Substring(2);
            if ((xSc.bcFlags & ScanVarGP.BCTyp.SP_SSCC) > 0)
            {
                IsSSCC = true;
                scD.sN = xSc.Dat;                               // SSCC полностью
            }
            else
            {
                IsSSCC = false;
                scD.sN = xSc.Dat.Substring(2);                  // значение адреса (без AI)
            }

            if ((xSm.xAdrFix1 != null) && (!IsSSCC))
            {// зафиксирован адрес, пришел еще один
                //if (!xCDoc.xOper.bObjOperScanned)
                if ((xCDoc.xOper.nOperState & AppC.OPR_STATE.OPR_OBJ_SET) == 0)
                {// поддон еще не сканировался, сейчас пришел адрес отправителя
                    nSrcOrDst = 1;
                    xCDoc.xOper.SetOperDst(xSm.xAdrFix1, xCDoc.xDocP.nTypD, false);
                }
                else
                {// поддон уже сканировался, сейчас пришел адрес получателя
                    nSrcOrDst = 2;
                    xCDoc.xOper.SetOperSrc(xSm.xAdrFix1, xCDoc.xDocP.nTypD, false);
                }
            }
            else
            {// фиксированных адресов пока не было
                nSrcOrDst = SrcOrDest(xSc, ref scD);
            }

            //    if ((nSrcOrDst == 1) || (nSrcOrDst == 2))
            //    {// отсканированным адресом следует воспользоваться  как адресом отправителя или получателя
            //        AddrInfo xA = new AddrInfo(xSc, xSm.nSklad);


            //    if (!xCDoc.xOper.IsFillSrc())
            //        nSrcOrDst = 1;
            //    else
            //    {
            //        if (xCDoc.nTypOp == AppC.TYPOP_DOCUM)
            //            nSrcOrDst = 1;
            //        else
            //        {
            //            if (!xCDoc.xOper.IsFillDst() && !xCDoc.xOper.bObjOperScanned)
            //            {
            //                if (xCDoc.xOper.xAdrSrc.Addr != scD.sN)
            //                {
            //                    DialogResult drQ = MessageBox.Show("Изменить \"ИЗточник\" (Enter)?\n(ESC) - отмена",
            //                        "Снова адрес!",
            //                        MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
            //                    if (drQ == DialogResult.OK)
            //                        nSrcOrDst = 1;
            //                    else
            //                        nSrcOrDst = 0;
            //                }
            //                else
            //                    nSrcOrDst = 1;
            //            }
            //            else
            //                nSrcOrDst = 2;
            //        }
            //    }
            //}



            //if (nSrcOrDst > 0)
            //{// отсканированным адресом следует воспользоваться  как адресом отправителя или получателя

            //    if (nSrcOrDst == 1)
            //    {// это источник
            //        if (xCDoc.xOper.GetDst(false) == xAFromScan.Addr)
            //            xAFromScan = null;
            //        else
            //            xCDoc.xOper.SetOperSrc(xAFromScan, xCDoc.xDocP.nTypD);
            //    }
            //    else
            //    {// это приемник
            //        if (xCDoc.xOper.GetSrc(false) == xAFromScan.Addr)
            //            xAFromScan = null;
            //        else
            //            xCDoc.xOper.SetOperDst(xAFromScan, xCDoc.xDocP.nTypD);
            //    }
            //    if (xAFromScan == null)
            //        Srv.ErrorMsg("Адреса совпадают...", scD.sN, true);
            //    else
            //    {
            //        if (xCDoc.nTypOp != AppC.TYPOP_DOCUM)
            //        {
            //            if (bShowTTN)
            //            {
            //                tEAN.Text = xCDoc.xOper.GetSrc(true);
            //                tDatMC.Text = xCDoc.xOper.GetDst(true);
            //                nRet = IsOperReady(true, drDet);
            //                if (nRet == AppC.RC_OK)
            //                    RetAfterTempMove();
            //            }
            //            else
            //                Srv.ErrorMsg("ТТН!", true);
            //        }
            //        if (nSrcOrDst == 1)
            //        {//для источника определяем содержимое
            //            if (xPars.GetAdrContentFromSrv)
            //            {//если это требуется
            //                nRet = AdrResult(xSc, ref scD, xAFromScan);
            //            }
            //        }

            //    }
            //}



            if ((nSrcOrDst == 1) || (nSrcOrDst == 2))
            {// отсканированным адресом следует воспользоваться  как адресом отправителя или получателя
                xA = new AddrInfo(xSc, xSm.nSklad);

                //if (!xCDoc.xOper.bObjOperScanned

                if (((xCDoc.xOper.nOperState & AppC.OPR_STATE.OPR_OBJ_SET) == 0) &&
                    (xPars.UseAdr4DocMode))
                {// пока только для ... инвентаризации ...
                    if (xCDoc.xOper.nOperState == AppC.OPR_STATE.OPR_EMPTY)
                    {
                        PSC_Types.ScDat scEmp = new PSC_Types.ScDat(new BarcodeScannerEventArgs(BCId.Code128, ""));
                        if (!bInEasyEditWait)
                        {
                            SetDetFields(true, ref scEmp);
                        }
                    }
                }

                if (nSrcOrDst == 1)
                {// это источник
                    xCDoc.xOper.SetOperSrc(xA, xCDoc.xDocP.nTypD, true);
                    sA1 = xA.AddrShow;
                    sA2 = xCDoc.xOper.GetDst(false);
                }
                else
                {// это приемник
                    sA1 = xCDoc.xOper.GetSrc(false);
                    sA2 = xA.AddrShow;

                    if (xA.Addr == sA1)
                    {
                        Srv.ErrorMsg("Адреса совпадают...", sA2, true);
                        return(AppC.RC_CANCEL);
                    }

                    if (xCDoc.xOper.xAdrDst_Srv != null)
                    {     // а сервер задавал адрес приемника
                        if (xCDoc.xOper.xAdrDst_Srv.Addr != xA.Addr)
                        { // и они разные
                            DialogResult drQ = MessageBox.Show(String.Format(
                                                                   "(Yes) - {0}\n<<с сервера>>\n(No) - {1}\n<<отсканирован>>\n(ESC) - отмена", xCDoc.xOper.xAdrDst_Srv.Addr, xA.Addr),
                                                               "Адрес назначения ?!",
                                                               MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
                            if (drQ == DialogResult.Yes)
                            {
                                xA = xCDoc.xOper.xAdrDst_Srv;           // сохраним приемником рекомендованный
                            }
                            else if (drQ == DialogResult.No)
                            {                                           // сохраним приемником отсканированный
                            }
                            else
                            {
                                return(AppC.RC_CANCEL);
                            }
                        }
                    }

                    xCDoc.xOper.SetOperDst(xA, xCDoc.xDocP.nTypD, true);
                }

                //var d = ZeroCell(xCDoc.xOper.xAdrSrc, xCDoc.xOper.xAdrDst);
                //if (d != null)
                //{
                //    xCDoc.xOper = new CurOper(xCDoc.xDocP.DType);
                //}

                bOperReady = (xCDoc.xOper.nOperState & AppC.OPR_STATE.OPR_READY) > 0;

                if (bOperReady)
                {// операция готова к отправке, все введено
                    nRet = IsOperReady();
                    if (nRet == AppC.RC_OK)
                    {
                        if (IsAutoMark())
                        {
                        }
                        else
                        {
                            if (xCDoc.xDocP.nTypD == AppC.TYPD_OPR)
                            {
                                RetAfterTempMove();                     // возможен возврат из временного перемещения
                            }
                        }
                    }
                }
                else
                {
                    //if (!xCDoc.xOper.bObjOperScanned)
                    if ((xCDoc.xOper.nOperState & AppC.OPR_STATE.OPR_OBJ_SET) == 0)
                    {
                        if (nSrcOrDst == 1)
                        {     //для источника определяем содержимое
                            if (AppC.xDocTInf[xCDoc.xDocP.nTypD].TryFrom && xPars.UseAdr4DocMode)
                            { //если это требуется
                                if (!IsSSCC)
                                {
                                    nRet = AdrResult(xSc, ref scD, xA);
                                }
                                else
                                {
                                    nRet = AppC.RC_CONTINUE;
                                }
                            }
                        }
                        else
                        {
                            //tAdrTo.Text = xCDoc.xOper.GetDst(true);
                        }
                    }
                }
            }
            else
            {
                if (nSrcOrDst == AppC.RC_NOTADR)
                {
                    nRet = AppC.RC_CONTINUE;
                }
            }

            return(nRet);
        }