Exemple #1
0
        public int ProceedSSCC(ScanVarGP xSc, ref PSC_Types.ScDat scD)
        {
            ServerExchange
                xSE = null;

            return(ProceedSSCC(xSc, ref scD, xSE));
        }
Exemple #2
0
 //private string SP_GLN = "4810268";
 private void OnScanPL(object sender, BarcodeScannerEventArgs e)
 {
     if (e.nID != BCId.NoData)
     {
         xScan = new ScanVarGP(e, xNSI.DT["NS_AI"].dt);
         //if ((xScan.bcFlags == ScanVarGP.BCTyp.SP_SSCC_EXT) ||
         //    (xScan.bcFlags == ScanVarGP.BCTyp.SP_SSCC_INT))
         if ((xScan.bcFlags & ScanVarGP.BCTyp.SP_SSCC) > 0)
         {
             tSSCC.Text = xScan.Dat;
             if (bDocIsKMPL)
             {     // для комплектации
                 if (xMF.StoreSSCC(xScan, nNomPodd, false, out dv) == AppC.RC_OKB)
                 { // предложенный SSCC может быть проставлен
                     bMaySetSSCC = true;
                 }
                 else
                 {
                     bMaySetSSCC = false;
                 }
             }
             else
             {// для всего остального
                 tSSCC.Text = xScan.Dat;
             }
         }
     }
 }
Exemple #3
0
 // Происхождение - из таблицы
 public AddrInfo(string sA, int nSklad)
 {
     m_Scan  = null;
     m_Sklad = nSklad;
     ScanDT  = DateTime.MinValue;
     Addr    = sA;
 }
Exemple #4
0
        // ожидание сканирования для спецрежимов
        private void WaitScan4Func(int nWaitMode, string sMsg, string sHeader, ScanVarGP xSc)
        {
            nSpecAdrWait     = nWaitMode;
            tbPanP2G.Visible = false;
            xFPan.IFaceReset(true);
            if ((nWaitMode == AppC.F_GENSCAN) ||
                (nWaitMode == AppC.F_SIMSCAN))
            {
                xFPan.InfoHeightUp(true, 2);
            }
            xFPan.ShowP(6, 28, sMsg, sHeader);

            if (nWaitMode == AppC.F_SIMSCAN)
            {
                tbPanP1G.Focus();
            }

            ehCurrFunc += new Srv.CurrFuncKeyHandler(Keys4FixAddr);
            if (xSc != null)
            {
                SpecScan(xSc);
                W32.keybd_event(W32.VK_ENTER, W32.VK_ENTER, 0, 0);
                W32.keybd_event(W32.VK_ENTER, W32.VK_ENTER, W32.KEYEVENTF_KEYUP, 0);
            }
        }
Exemple #5
0
        // добавление в список ТТН отмаркированного/сборного поддона
        private DataRow AddDetSSCC(ScanVarGP xSc, int nId, ScanVarGP.BCTyp xT, string sN)
        {
            bool
                bDataRowNew;
            int
                nM = 0;
            FRACT
                fE = 0;

            DateTime
                dtCr;
            DataRow
                ret = null,
                dr;

            PSC_Types.ScDat
                sc = new PSC_Types.ScDat(new BarcodeScannerEventArgs(BCId.Code128, ""));
            try
            {
                sc.sSSCC    = xSc.Dat;
                sc.nNomPodd = int.Parse(xSc.Dat.Substring(13, 7));

                //sc.sN = ((xT & ScanVarGP.BCTyp.SP_SSCC_EXT) > 0)?"Маркир.":"Скомпл.";
                //sc.sN = String.Format("{0} п-н №{1}", sc.sN, sc.nNomPodd);
                sc.sN = String.Format("SSCC № {0}...{1}", sc.sSSCC.Substring(2, 4), sc.sSSCC.Substring(15, 5));

                //sc.nKrKMC = 60 + int.Parse(xSc.Dat.Substring(2, 1));
                sc.nKrKMC = AppC.KRKMC_MIX;

                EvalGroupDetStat(xCLoad.dtZ, out nM, out fE);
                //sc.nMest = nM;
                //sc.fVsego = fE;
                sc.nMest  = 1;
                sc.fVsego = 0;

                sc.nNomPodd = int.Parse(xSc.Dat.Substring(12, 7));

                sc.nKolM_alr = nM;
                sc.fKolE_alr = fE;
                scCur        = sc;
                //ret = AddVirtProd(ref sc);
                bDataRowNew = AddDet1(ref scCur, out dr);
                scCur       = sc;
                SetDopFieldsForEnter(true);
                ret = dr;
            }
            catch //(Exception e)
            {
                ret = null;
            }
            return(ret);
        }
Exemple #6
0
 // Происхождение адреса - сканирование
 public AddrInfo(ScanVarGP xSc, int nSklad)
 {
     m_Scan  = xSc;
     m_Sklad = nSklad;
     ScanDT  = xSc.ScanDTime;
     if ((xSc.bcFlags & ScanVarGP.BCTyp.SP_SSCC) > 0)
     {
         nType = ADR_TYPE.SSCC;
         Addr  = xSc.Dat;
     }
     else
     {
         nType = ADR_TYPE.OBJECT;
         Addr  = xSc.Dat.Substring(2);
     }
 }
Exemple #7
0
        // Обработка сканирования на панели Документов
        private void ProceedScanSSCC(ScanVarGP xSc, ref PSC_Types.ScDat s)
        {
            int
                nRet = AppC.RC_OK;
            string
                sH,
                sPar,
                sErr = "";
            CurLoad
                ret = null;
            ServerExchange
                xSE = new ServerExchange(this);

            if ((s.xSCD.bcFlags & ScanVarGP.BCTyp.SP_SSCC) > 0)
            {
                AddSSCC2SSCCTable(s.xSCD.Dat, 0, xCDoc, 0, 0, 1);
            }
        }
Exemple #8
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);
        }
Exemple #9
0
        // продукция на какой-то из наших этикеток
        private int ProceedProd(ScanVarGP xSc, ref PSC_Types.ScDat sc, bool bDupScan, bool bEasyEd)
        {
            //bool
            //    bDopValuesNeed = true;
            int
                nRet = AppC.RC_CANCEL;

            #region Обработка скана продукции
            do
            {
                if (!bDupScan)
                {// первичный скан штрихкода, предыдущий был другой
                }
                else
                {// повторный скан того же штрихкода - это, как правило, подтверждение ввода
                }

                //scCur = sc;
                if (!sc.bFindNSI)
                {
                    Srv.ErrorMsg("Код не найден! Обновите НСИ!", true);
                }

                nRet = AppC.RC_OK;
                if (sc.bVes == true)
                {
                    //scCur.fVsego = scCur.fVes;
                    //FRACT fE = scCur.fVes;

                    // 11.07.14 взято в коммент
                    if (sc.nRecSrc != (int)NSI.SRCDET.SSCCT)
                    {
                        if (!xScan.dicSc.ContainsKey("37") && (xScan.dicSc.Count == 4))
                        {
                            sc.tTyp = AppC.TYP_TARA.TARA_POTREB;
                            sc.fEmk = sc.fEmk_s = 0;
                        }

                        // нужно по-другому
                        if ((sc.tTyp == AppC.TYP_TARA.TARA_PODDON) && (sc.nMestPal > 0))
                        {
                            PSC_Types.ScDat
                                scTmp = sc;
                            bool
                                bSetEmk = xMF.TrySetEmk(xNSI.DT[NSI.NS_MC].dt, xNSI.DT[NSI.NS_SEMK].dt,
                                                        ref scTmp, scTmp.fVes / scTmp.nMestPal);
                            if ((bSetEmk == true) && (scTmp.tTyp == AppC.TYP_TARA.TARA_TRANSP))
                            {
                                sc.fEmk  = scTmp.fEmk;
                                sc.nMest = sc.nMestPal;
                            }
                        }
                        else
                        {
                            xMF.TrySetEmk(xNSI.DT[NSI.NS_MC].dt, xNSI.DT[NSI.NS_SEMK].dt, ref sc, sc.fVes);
                        }
                    }
                }
                else
                {
                    if (sc.nMestPal <= 0)
                    {
                        StrAndInt si;
                        for (int i = 0; i < sc.xEmks.Count; i++)
                        {
                            sc.xEmks.CurrIndex = i;
                            si = (StrAndInt )sc.xEmks.Current;
                            if (si.DecDat == sc.fEmk)
                            {
                                sc.nMestPal = si.IntCode;
                                sc.nTara    = si.SNameAdd1;
                                sc.nKolSht  = si.IntCodeAdd1;
                            }
                        }
                    }
                }

                if (AppC.RC_OK == nRet)
                {
                    sc.nMest            = sc.nMestPal;
                    xMark.ScanFirst     = sc;
                    xMark.NumberOfScans = 1;
                    EvalTot(xMark.ScanFirst.nMestPal);
                }
            } while (false);
            #endregion

            return(nRet);
        }
Exemple #10
0
        private int ProceedSSCC(ScanVarGP xS, ref PSC_Types.ScDat scD, Control xCCur)
        {
            int
                ret = AppC.RC_OK;
            string
                sSSCC = xS.Dat;

            MainF.ServerExchange
                xSE = new MainF.ServerExchange(xMF);

            switch (InFocus())
            {
            case "tKrKMC":

                xSE.FullCOM2Srv = String.Format("COM={0};KSK={6};MAC={1};KP={2};PAR=(KSK={3},DT={4},SSCC={5},TYPOP=MARK);",
                                                AppC.COM_ZSC2LST,
                                                xMF.xSm.MACAdr,
                                                xMF.xSm.sUser,
                                                xMF.xCDoc.xDocP.nSklad,
                                                xMF.xCDoc.xDocP.dDatDoc.ToString("yyyyMMdd"),
                                                sSSCC,
                                                xMF.xCDoc.xDocP.nSklad
                                                );
                try
                {
                    //ret = xMF.ConvertSSCC2Lst(xSE, sSSCC, true, true, ref scD);
                    ret = xMF.ConvertSSCC2Lst(xSE, sSSCC, ref scD, true);
                    if ((ret == AppC.RC_OK) && (scD.sKMC.Length > 0))
                    {
                        scD.tTyp = ((xS.bcFlags & ScanVarGP.BCTyp.SP_SSCC_PRT) > 0)?
                                   AppC.TYP_TARA.TARA_TRANSP:AppC.TYP_TARA.TARA_PODDON;
                        if (scD.bVes)
                        {
                            if (scD.nKolSht == 0)
                            {
                                // определить количество в штуках
                                SetDefEmk(ref scD);
                            }
                            if (scD.nKolG == 0)
                            {
                                scD.nKolG = scD.nMest * scD.nKolSht;
                            }
                            scD.fVsego = scD.nKolG;
                        }
                        xMark.ScanFirst = scD;
                        //EvalTot(xMark.ScanFirst.nMestPal);
                        ret = AppC.RC_HALFOK;
                    }
                    else
                    {
                        throw new Exception("Bad SSCC");
                    }
                }
                catch
                {
                    Srv.ErrorMsg("Недопустимое содержимое", sSSCC, true);
                    ret = AppC.RC_CANCEL;
                }
                break;

            case "tSSCC":
                xMark.SSCC = sSSCC;
                tSSCC.Text = sSSCC;
                ret        = TrySend2Serv(sSSCC);
                break;
            }
            //scCur = scD;
            return(ret);
        }
Exemple #11
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);
        }
Exemple #12
0
        private void OnScanPL(object sender, BarcodeScannerEventArgs e)
        {
            string s;
            ScanVarGP
                xScan;


            if (e.nID != BCId.NoData)
            {
                xScan = new ScanVarGP(e, xNSI.DT["NS_AI"].dt);

                if (e.nID == BCId.Code128)
                {
                    if (((xScan.bcFlags & ScanVarGP.BCTyp.SP_ADR_OBJ) > 0))
                    {// похоже на адрес (№ шлюза)
                        s            = e.Data.Substring(2);
                        xPark.ShlAdr = s;
                        xPark.xA     = new MainF.AddrInfo(xScan, xMainF.xSm.nSklad);

                        tShlAddr.Text = s;
                        lShlName.Text = xPark.xA.AddrShow;
                        TryFixAvto();
                    }
                    else
                    {
                        switch (e.Data.Length)
                        {
                        case 14:
                            // похоже на № путевого
                            tNDoc.Text     = e.Data.Substring(7);
                            xPark.NPtvList = int.Parse(tNDoc.Text);
                            if ((bEditMode == true) && (xPark.NShl > 0))
                            {
                                EndEditP();
                                if ((bsSh.Count == 0) || (xPark.IsChangePars()))
                                {
                                    LoadAvtoList();
                                }
                            }
                            break;

                        case 12:
                            if (e.Data.Substring(0, 3) == "778")
                            {    // похоже на № пропуска
                                xPark.Propusk = e.Data.Substring(3);
                                tPropusk.Text = e.Data.Substring(3);
                                TryFixAvto();
                            }
                            //else if (e.Data.Substring(0, 2) == "99")
                            //{// похоже на адрес (№ шлюза)
                            //    s = e.Data.Substring(2);
                            //    xPark.ShlAdr = s;
                            //    tShlAddr.Text = s;
                            //    TryFixAvto();
                            //}

                            break;
                        }
                    }
                }
            }
        }
Exemple #13
0
        // Обработка сканирования на панели Документов
        private void ProceedScanDoc(ScanVarGP xSc, ref PSC_Types.ScDat s)
        {
            int
                nRet = AppC.RC_OK;
            string
                sH,
                sPar,
                sErr = "";
            CurLoad
                ret;
            ServerExchange
                xSE = new ServerExchange(this);


            if ((xSc.bcFlags & ScanVarGP.BCTyp.SP_SSCC_INT) > 0)
            {
                xCLoad             = new CurLoad(AppC.UPL_ALL);
                xCLoad.sSSCC       = xSc.Dat;
                xCLoad.drPars4Load = xNSI.DT[NSI.BD_KMPL].dt.NewRow();
                LoadKomplLst(xCLoad.drPars4Load, AppC.F_LOADKPL);
            }
            else
            {
                ret = TransDocCode(ref s, xSE);
                if (ret != null)
                {
                    xCLoad = ret;

                    if (xSE.FullCOM2Srv.Length == 0)
                    {
                        if (bInLoad == true)
                        {
                            W32.keybd_event(W32.VK_ESC, W32.VK_ESC, 0, 0);
                            W32.keybd_event(W32.VK_ESC, W32.VK_ESC, 0, 0);
                            W32.keybd_event(W32.VK_ESC, W32.VK_ESC, W32.KEYEVENTF_KEYUP, 0);
                            W32.keybd_event(W32.VK_ESC, W32.VK_ESC, W32.KEYEVENTF_KEYUP, 0);
                        }
                        else
                        {
                            LoadDocFromServer(AppC.F_INITRUN, new KeyEventArgs(Keys.Enter), ref ehCurrFunc);
                        }
                    }
                    else
                    {
                        AutoSaveDat();
                        LoadFromSrv dgL = new LoadFromSrv(DocFromSrv);
                        xCLoad.nCommand = AppC.F_LOAD_DOC;
                        xCLoad.sComLoad = AppC.COM_ZZVK;
                        sErr            = xSE.ExchgSrv(AppC.COM_ZZVK, "", "", dgL, null, ref nRet);

                        MessageBox.Show("Загрузка окончена - " + sErr, "Код - " + nRet.ToString());
                        PosOnLoaded(nRet);
                        Back2Main();
                    }
                }
                else
                {
                    xCUpLoad = new CurUpLoad();

                    if (xSE.FullCOM2Srv.Length == 0)
                    {
                        sPar = String.Format("BC={0};BCT={1}", xSc.Dat, xSc.Id.ToString().ToUpper());
                        sErr = xSE.ExchgSrv(AppC.COM_UNKBC, sPar, "", null, null, ref nRet);
                    }
                    else
                    {
                        AutoSaveDat();
                        LoadFromSrv dgL = new LoadFromSrv(DocFromSrv);
                        xCLoad.nCommand = AppC.F_LOAD_DOC;
                        xCLoad.sComLoad = AppC.COM_ZZVK;
                        sErr            = xSE.ExchgSrv(AppC.COM_ZZVK, "", "", dgL, null, ref nRet);

                        MessageBox.Show("Загрузка окончена - " + sErr, "Код - " + nRet.ToString());
                        PosOnLoaded(nRet);
                        Back2Main();
                    }

                    if (nRet != AppC.RC_OK)
                    {
                        nRet = xSE.ServerRet;
                        if (nRet != AppC.RC_NEEDPARS)
                        {
                        }
                        Srv.PlayMelody(W32.MB_4HIGH_FLY);
                        sH = "Ошибка!";
                    }
                    else
                    {
                        sH = "Код отправлен";
                    }
                    Srv.ErrorMsg(sErr, sH, false);
                }
            }
        }
Exemple #14
0
        public bool StoreSSCC(ScanVarGP xSc, int nPoddonN, bool bNeedWrite, out DataView dv)
        {
            int n = 0;
            string
                s, sRf,
                sF,
                sD = xSc.Dat;
            bool
            //bIsExt,
                         bRet = AppC.RC_CANCELB;
            DataView     dvZ;
            DialogResult dRez;

            if (sD.Substring(2, 1) == "1")
            {
                //bIsExt = true;
                sF = "SSCC";
            }
            else
            {
                //bIsExt = false;
                sF = "SSCCINT";
            }

            /// 14.02.18
            sF = "SSCC";

            dv = null;
            if (xCDoc.drCurRow == null)
            {
                return(bRet);
            }
            try
            {
                if ((int)xCDoc.drCurRow["TYPOP"] == AppC.TYPOP_KMPL)
                {
                    if (nPoddonN > 0)
                    {
                        //string sRf = xCDoc.DefDetFilter() + String.Format(" AND (SSCC='{0}')", sSSCC);
                        //dv = new DataView(xNSI.DT[NSI.BD_DOUTD].dt, sRf, "", DataViewRowState.CurrentRows);
                        //n = dv.Count;
                        if (IsUsedSSCC(sD))
                        {
                            dRez = MessageBox.Show(
                                String.Format("SSCC={0}\nОтменить (Enter)?\n(ESC)-проставить SSCC", sD),
                                "Уже использовался!", MessageBoxButtons.OKCancel,
                                MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
                            n = (dRez == DialogResult.OK) ? 1 : 0;
                        }
                        if (n == 0)
                        {// такой SSCC еще не использовался
                            sRf = xCDoc.DefDetFilter() + String.Format(" AND (NPODDZ={0})", nPoddonN);
                            dv  = new DataView(xNSI.DT[NSI.BD_DOUTD].dt, sRf, "", DataViewRowState.CurrentRows);
                            if (dv.Count > 0)
                            {
                                foreach (DataRowView drv in dv)
                                {
                                    if ((drv.Row[sF]) != System.DBNull.Value)
                                    {
                                        s = (drv.Row[sF]).ToString();
                                        if ((s.Length > 0) && (s != sD))
                                        {
                                            dRez = MessageBox.Show(
                                                String.Format("SSCC={0} уже установлен\nОтменить (Enter)?\n(ESC)-проставить SSCC", drv.Row["SSCC"]),
                                                String.Format("Поддон {0}", nPoddonN),
                                                MessageBoxButtons.OKCancel,
                                                MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
                                            n = (dRez == DialogResult.OK) ? 1 : 0;
                                            break;
                                        }
                                    }
                                }
                                if (n == 0)
                                {// поддон еще не отмечался
                                    // добавим фильтр на выполненные
                                    sRf += String.Format("AND(READYZ<>{0})", (int)NSI.READINESS.FULL_READY);
                                    dvZ  = new DataView(xNSI.DT[NSI.BD_DIND].dt, sRf, "", DataViewRowState.CurrentRows);
                                    n    = dvZ.Count;
                                    if (n > 0)
                                    {// не вся заявка закрыта
                                        if (!xCDoc.bFreeKMPL)
                                        {
                                            dRez = MessageBox.Show(
                                                "Заявка не выполнена!\nОтменить (Enter)?\r\n(ESC)-проставить SSCC",
                                                String.Format("Поддон {0}", nPoddonN),
                                                MessageBoxButtons.OKCancel,
                                                MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
                                            n = (dRez == DialogResult.OK) ? 1 : 0;
                                        }
                                        else
                                        {
                                            n = 0;
                                        }
                                    }
                                    if (n == 0)
                                    {
                                        bRet = AppC.RC_OKB;
                                        if (bNeedWrite)
                                        {
                                            SetSSCCForPoddon(xSc.Dat, dv, nPoddonN);
                                        }

                                        //foreach (DataRowView drv in dv)
                                        //{
                                        //    (drv.Row[sF]) = sSSCC;
                                        //}
                                        //MessageBox.Show(String.Format("Поддон {0} подготовлен ({1}) позиций",
                                        //    xCDoc.xNPs.Current, dv.Count));

                                        //xCDoc.xNPs.TryNextPoddon(true);
                                        //tCurrPoddon.Text = xCDoc.xNPs.Current.ToString();
                                    }
                                }
                            }
                            else
                            {
                                Srv.ErrorMsg("Нет отсканированных!");
                            }
                        }
                        else
                        {
                            Srv.ErrorMsg("SSCC поддона уже использовался!");
                        }
                    }
                    else
                    {
                        Srv.ErrorMsg("№ поддона не установлен!");
                    }
                }
                else
                {
                    Srv.ErrorMsg("Только для комплектации!");
                }
            }
            catch (Exception e)
            {
                Srv.ErrorMsg("Только для комплектации!");
            }



            return(bRet);
        }
Exemple #15
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);
        }
Exemple #16
0
        // обработка выполненного сканирования
        private void OnScan(object sender, BarcodeScannerEventArgs e)
        {
            bool
                bRet = true,
                bDupScan;
            int
                t1, t2,
                nRet = AppC.RC_CANCEL;
            string
                sP, sP1,
                sErr = "";

            // началась обработка сканирования
            bInScanProceed = true;
            if (e.nID != BCId.NoData)
            {
                try
                {
                    PSC_Types.ScDat sc = new PSC_Types.ScDat(e);
                    xScan    = new ScanVarGP(e, xNSI.DT["NS_AI"].dt);
                    bDupScan = ((xScanPrev != null) && (xScanPrev.Dat == xScan.Dat)) ? true : false;

                    sc.sN = e.Data + "-???";
                    #region Обработка скана
                    do
                    {
                        if (xScan.Dat.StartsWith("91E"))
                        {// адрес ID-точки
                            MainCycleStart(xScan.Dat.Substring(4), true);
                            break;
                        }

                        if (sDevID.Length == 0)
                        {
                            Srv.ErrorMsg("Введите или\nотсканируйте № точки!", "Ошибка", true);
                            break;
                        }

                        xMark.NumberOfScans++;
                        xMark.SrcInfo = NSI.SRCDET.SCAN;

                        //if (((xScan.bcFlags & ScanVarGP.BCTyp.SP_SSCC_EXT) == ScanVarGP.BCTyp.SP_SSCC_EXT) ||
                        //    ((xScan.bcFlags & ScanVarGP.BCTyp.SP_SSCC_PRT) == ScanVarGP.BCTyp.SP_SSCC_PRT) ||
                        //    ((xScan.bcFlags & ScanVarGP.BCTyp.SP_SSCC_INT) == ScanVarGP.BCTyp.SP_SSCC_INT))
                        if (((xScan.bcFlags & ScanVarGP.BCTyp.SP_SSCC) > 0) ||
                            ((xScan.bcFlags & ScanVarGP.BCTyp.SP_SSCC_PRT) > 0))
                        {
                            int nRetSSCC = ProceedSSCC(xScan, ref sc, aEd.Current);
                            if (nRetSSCC == AppC.RC_QUIT)
                            {// SSCC привязан, новый поддон
                                xScan = null;
                                break;
                            }
                            if (nRetSSCC != AppC.RC_HALFOK)
                            {// не было удачной трансляции SSCC
                                xScan = null;
                                break;
                            }
                            // далее будет вывод удачной трансляции SSCC
                            if ((xScan.bcFlags & ScanVarGP.BCTyp.SP_SSCC_PRT) > 0)
                            {
                                // SSCC для ящиков
                                bRet = (ProceedProd(xScan, ref sc, bDupScan, false) == AppC.RC_OK) ? true : false;
                            }
                        }
                        else
                        {// должна быть продукция
                            if (((xScan.bcFlags & ScanVarGP.BCTyp.SP_OLD_ETIK) == ScanVarGP.BCTyp.SP_OLD_ETIK) ||
                                (xScan.Id != BCId.Code128))
                            {// старая этикетка или EAN13
                                bRet = xMF.TranslSCode(ref sc, ref sErr);
                                if ((sc.ci == BCId.EAN13) || (sc.ci == BCId.Interleaved25) ||
                                    ((sc.s.Length >= 13) && (sc.s.Length <= 14)))
                                {
                                    sc.tTyp = AppC.TYP_TARA.TARA_POTREB;
                                }
                            }
                            else
                            {// новая этикетка
                                if (((xScan.bcFlags & ScanVarGP.BCTyp.SP_MT_PRDV) == ScanVarGP.BCTyp.SP_MT_PRDV))
                                {
                                    bRet = xMF.TranslMT(ref sc);
                                }
                                else if (((xScan.bcFlags & ScanVarGP.BCTyp.SP_MT_PRDVN) == ScanVarGP.BCTyp.SP_MT_PRDVN))
                                {
                                    bRet = xMF.TranslMTNew(ref sc);
                                }
                                else
                                {
                                    // разбор этикетки стандартным способом по AI
                                    t1   = Environment.TickCount;
                                    bRet = xMF.NewTranslSCode(ref sc, xScan);
                                    t2   = Environment.TickCount;
                                    sP   = Srv.TimeDiff(t1, t2, 3);
                                }
                            }
                            if (bRet)
                            {
                                t1 = Environment.TickCount;
                                // возможно, контрольное сканирование

                                if ((xMark.ScanFirst.ci != BCId.Unknown) && (xMark.ScanFirst.s is string))
                                {
                                    if (xMark.ScanFirst.sEAN == sc.sEAN)
                                    {
                                        break;
                                    }
                                    // не совпали коды
                                    Srv.ErrorMsg(xMark.ScanFirst.sEAN + "\n" + sc.sEAN, "Разные EAN!", true);
                                }

                                bRet = (ProceedProd(xScan, ref sc, bDupScan, false) == AppC.RC_OK) ? true : false;
                                t2   = Environment.TickCount;
                                sP1  = Srv.TimeDiff(t1, t2, 3);
                            }
                            //aEd.SetCur( (sc.tTyp == AppC.TYP_TARA.TARA_PODDON) ? tSSCC : tMest );
                            //tMest.Enabled = true;
                        }

                        if (!bRet)
                        {
                            throw new Exception("Ошибка сканирования!");
                        }
                        //aEd.SetCur((sc.tTyp == AppC.TYP_TARA.TARA_PODDON) ? tSSCC : tMest);
                        aEd.SetCur(tSSCC);
                        tMest.Enabled  = true;
                        tKrKMC.Enabled = false;

                        if (xMark.ScanFirst.bVes)
                        {
                            tVes.Visible   = true;
                            tVsego.Enabled = true;
                        }
                        if (xMark.ScanFirst.tTyp != AppC.TYP_TARA.TARA_PODDON)
                        {
                            if (xMark.ScanFirst.bVes)
                            {
                                tVes.Enabled = true;
                            }

                            if (xMark.ScanFirst.tTyp == AppC.TYP_TARA.TARA_POTREB)
                            {
                                tParty.Enabled = tDTV.Enabled = true;
                                aEd.SetCur(tParty);
                            }
                        }

                        SetDetFields(ref xMark.ScanFirst, false);
                        if (enWrapMode.CurMode == AppC.WRAP_MODES.WRP_BY_NSI)
                        {
                            chWrapp.Checked = WrappSet(xNSI.DT[NSI.NS_MC].dt, xMark.ScanFirst, 0);
                        }

                        xScanPrev = xScan;
                    } while (false);
                    #endregion
                }
                catch (Exception ex)
                {
                    string sE = String.Format("{0}({1}){2}", xScan.Id.ToString(), xScan.Dat.Length, xScan.Dat);
                    Srv.ErrorMsg(sE + "\n" + ex.Message, "Ошибка сканирования", true);
                }
            }
            // обработка сканирования окончена
            bInScanProceed = false;
        }
Exemple #17
0
        /// какой из адресов следует заполнить (по типу движения документа)
        private int SrcOrDest(ScanVarGP xSc, ref PSC_Types.ScDat scD)
        {
            bool
                bSrcNeed = AppC.xDocTInf[xCDoc.xDocP.nTypD].AdrFromNeed,
                bDstNeed = AppC.xDocTInf[xCDoc.xDocP.nTypD].AdrToNeed;
            int
                nNumDocType = xCDoc.xDocP.nTypD,
                nSrcOrDst   = 0;

            AppC.MOVTYPE
                MoveType = AppC.xDocTInf[xCDoc.xDocP.nTypD].MoveType;

            if ((xSc.bcFlags & ScanVarGP.BCTyp.SP_ADR_OBJ) > 0)
            {// это обычный адрес
                switch (MoveType)
                {
                case AppC.MOVTYPE.AVAIL:            // инвентаризации
                    nSrcOrDst = 1;
                    break;

                case AppC.MOVTYPE.RASHOD:           // расходные документы
                    nSrcOrDst = 1;
                    break;

                case AppC.MOVTYPE.PRIHOD:           // документы поступления
                    nSrcOrDst = 2;
                    break;

                case AppC.MOVTYPE.MOVEMENT:         // документы перемещения
                    if (!xCDoc.xOper.IsFillSrc())
                    {
                        nSrcOrDst = 1;
                    }
                    else
                    {
                        if (!xCDoc.xOper.IsFillDst() && ((xCDoc.xOper.nOperState & AppC.OPR_STATE.OPR_OBJ_SET) == 0))
                        {
                            nSrcOrDst = 0;          // будет запрос
                        }
                        else
                        {
                            nSrcOrDst = 2;          // будет приемник
                        }
                    }
                    break;

                default:
                    if (xCDoc.xOper.IsFillSrc())
                    {     // источник - задан
                        if (bDstNeed)
                        { //... - true
                            if (!xCDoc.xOper.IsFillDst())
                            {
                                nSrcOrDst = 2;
                            }
                        }
                        else
                        {    //... - false
                            // надо посмотреть, чем заполнен
                            if (!xCDoc.xOper.IsFillDst())
                            {
                                nSrcOrDst = 1;
                            }
                        }
                    }
                    else
                    {    // источник - пусто
                        if (bSrcNeed)
                        {
                            nSrcOrDst = 1;
                        }
                        else
                        {
                            if (bDstNeed)
                            {    // false - true
                                if (!xCDoc.xOper.IsFillDst())
                                {
                                    nSrcOrDst = 2;
                                }
                            }
                            else
                            {    // false - false
                                if (!xCDoc.xOper.IsFillDst())
                                {
                                    nSrcOrDst = 1;
                                }
                            }
                        }
                    }
                    break;
                }
            }
            else
            {// для SSCC
                nSrcOrDst = AppC.RC_NOTADR;

                //switch (MoveType)
                //{
                //    case AppC.MOVTYPE.AVAIL:        // инвентаризации
                //        if ((xCDoc.xOper.nOperState & AppC.OPR_STATE.OPR_SRC_SET) > 0)
                //            nSrcOrDst = AppC.RC_NOTADR;                                 // использовать содержимое
                //        else
                //        {
                //            if (xPars.UseAdr4DocMode)
                //                nSrcOrDst = AppC.RC_CONTINUE;                               // сначала - адрес
                //            else
                //                nSrcOrDst = AppC.RC_NOTADR;                                 // использовать содержимое
                //        }
                //        break;
                //    case AppC.MOVTYPE.RASHOD:       // расходные документы
                //        if ((xCDoc.xOper.nOperState & AppC.OPR_STATE.OPR_SRC_SET) == 0)
                //            nSrcOrDst = 1;
                //        else
                //        {
                //            if ((xCDoc.xOper.nOperState & AppC.OPR_STATE.OPR_OBJ_SET) > 0)
                //                nSrcOrDst = 2;
                //            else
                //                nSrcOrDst = AppC.RC_NOTADR;
                //        }
                //        break;
                //    case AppC.MOVTYPE.PRIHOD:       // документы поступления
                //        if ((xCDoc.xOper.nOperState & AppC.OPR_STATE.OPR_OBJ_SET) > 0)
                //            nSrcOrDst = 2;                                              // использовать содержимое
                //        else
                //            nSrcOrDst = AppC.RC_NOTADR;                                 // сначала - адрес
                //        break;
                //    case AppC.MOVTYPE.MOVEMENT:     // документы перемещения
                //        if ((xCDoc.xOper.nOperState == AppC.OPR_STATE.OPR_EMPTY))
                //        {
                //            nSrcOrDst = 1;                                              // адрес-источник
                //        }
                //        else
                //        {
                //            if ((xCDoc.xOper.nOperState & AppC.OPR_STATE.OPR_OBJ_SET) > 0)
                //            {// есть объект, но он должен быть коробка или штучка
                //                nSrcOrDst = 2;                                              // адрес-источник
                //            }
                //            else
                //            {
                //                nSrcOrDst = AppC.RC_NOTADR;
                //            }

                //        }
                //        nSrcOrDst = AppC.RC_NOTADR;
                //        break;
                //    default:
                //        if (xCDoc.xOper.IsFillSrc())
                //        {// источник - задан

                //            if (bDstNeed)
                //            {//... - true
                //                if (!xCDoc.xOper.IsFillDst())
                //                    nSrcOrDst = 2;
                //            }
                //            else
                //            {//... - false
                //                // надо посмотреть, чем заполнен
                //                if (!xCDoc.xOper.IsFillDst())
                //                    nSrcOrDst = 1;
                //            }
                //        }
                //        else
                //        {// источник - пусто
                //            if (bSrcNeed)
                //                nSrcOrDst = 1;
                //            else
                //            {
                //                if (bDstNeed)
                //                {// false - true
                //                    if (!xCDoc.xOper.IsFillDst())
                //                        nSrcOrDst = 2;
                //                }
                //                else
                //                {// false - false
                //                    if (!xCDoc.xOper.IsFillDst())
                //                        nSrcOrDst = 1;
                //                }
                //            }
                //        }
                //        break;
                //}
            }

            if (nSrcOrDst == 0)
            {// выяснить не удалось
                DialogResult drQ = MessageBox.Show("\"Источник\" - Yes\n\"Приемник\" - No\nОтмена - Cancel",
                                                   "Какой адрес установить?",
                                                   MessageBoxButtons.YesNoCancel,
                                                   MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
                if (drQ == DialogResult.Yes)
                {
                    nSrcOrDst = 1;
                }
                else if (drQ == DialogResult.No)
                {
                    nSrcOrDst = 2;
                }
            }

            return(nSrcOrDst);
        }