コード例 #1
0
        public int ConvertSSCC2Lst(ServerExchange xSE, string sSSCC, ref PSC_Types.ScDat scD, bool bInfoOnEmk, DataTable dtResult)
        {
            int nRec,
                nRet = AppC.RC_OK;
            string
                sP;

            DataSet
                dsTrans = null;

            // вместе с командой отдаем заголовок документа
            xCUpLoad = new CurUpLoad(xPars);
            xCUpLoad.sCurUplCommand = AppC.COM_ZSC2LST;

            if (xCDoc.drCurRow is DataRow)
            {
                dsTrans = xNSI.MakeWorkDataSet(xNSI.DT[NSI.BD_DOCOUT].dt, dtResult, new DataRow[] { xCDoc.drCurRow }, null, xSm, xCUpLoad);
            }

            MakeTempDOUTD(dtResult);

            LoadFromSrv dgL = new LoadFromSrv(LstFromSSCC);

            xCLoad           = new CurLoad();
            xCLoad.sSSCC     = sSSCC;
            xCLoad.xLP.lSysN = xCDoc.nId;
            xCLoad.dtZ       = dtL;

            sP = String.Format("(SSCC={0},TYPE={1})", sSSCC, "ROW");
            string sL = xSE.ExchgSrv(AppC.COM_ZSC2LST, sP, "", dgL, dsTrans, ref nRet, 20);


            if (dtL.Rows.Count > 0)
            {
                nRet = TestProdBySrv(xSE, nRet);

                if (nRet == AppC.RC_OK)
                {
                    nRec = xCLoad.dtZ.Rows.Count;
                    if (nRec == 1)
                    {// будем изображивать сканирование
                        SetVirtScan(xCLoad.dtZ.Rows[0], ref scD, true, bInfoOnEmk);
                        scD.sSSCC = sSSCC;
                    }
                    else
                    {// добавление группы ???
                        nRet = AppC.RC_MANYEAN;
                    }
                }
            }
            else
            {// просто сохраним запись ??? -  если была сетевая ошибка! при ошибке сервера ничего сохранять не надо!
                if (xSE.ServerRet != AppC.RC_OK)
                {
                    Srv.ErrorMsg(sL);
                }
            }

            return(nRet);
        }
コード例 #2
0
        public int ProceedSSCC(ScanVarRM xSc, ref PSC_Types.ScDat scD)
        {
            ServerExchange
                xSE = null;

            return(ProceedSSCC(xSc, ref scD, xSE));
        }
コード例 #3
0
ファイル: ProceedScanKMPL.cs プロジェクト: TabVV/Sklad1C
        private int FindSSCCInZVK(ScanVarRM xSc, ref PSC_Types.ScDat sc)
        {
            int nRet = AppC.RC_NOSSCC;

            sc.ZeroZEvals();
            if (bZVKPresent)
            {
            }
            return(nRet);
        }
コード例 #4
0
ファイル: ProceedSSCC.cs プロジェクト: TabVV/SkladDisp
        // добавление в список ТТН отмаркированного/сборного поддона
        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);
        }
コード例 #5
0
ファイル: ProceedSSCC.cs プロジェクト: TabVV/SkladDisp
 public void MayAddSSCC(ref PSC_Types.ScDat sc)
 {
     if ((sc.xSCD.bcFlags & ScanVarGP.BCTyp.SP_SSCC) > 0)
     {
         if (xCLoad != null)
         {
             if ((sc.sSSCC == xCLoad.sSSCC))
             {
                 if (((sc.nMest == sc.nMestPal) && (xCLoad.dtZ.Rows.Count == 1)) ||
                     ((xCLoad.dtZ.Rows.Count > 1)))
                 {
                     AddSSCC2SSCCTable(sc.sSSCC, 0, xCDoc, xCLoad.dtZ.Rows.Count, 0, 1);
                 }
             }
         }
     }
 }
コード例 #6
0
        // nMode -  0 - определить стрейчевку по умолчанию
        //          1 - установить стрейчевку по умолчанию
        private bool WrappSet(DataTable dtMC, PSC_Types.ScDat s, int nMode)
        {
            int
                nWP;
            string
                sKeyWrapp = (s.sKMC.Length > 0)?s.sKMC:"",
                sValWrapp = "N";

            if (!dicWrap.ContainsKey(sKeyWrapp))
            {
                try
                {
                    DataView xRowDView = new DataView(dtMC, String.Format("KMC='{0}'", sKeyWrapp), "", DataViewRowState.CurrentRows);
                    if (xRowDView != null)
                    {
                        if (xRowDView[0].Row["WRAPP"] is string)
                        {
                            try
                            {
                                nWP = int.Parse(((string)xRowDView[0].Row["WRAPP"]));
                            }
                            catch
                            {
                                nWP = 0;
                            }
                            sValWrapp = (nWP > 0) ? "Y" : "N";
                        }
                    }
                }
                catch
                {
                }
            }
            else
            {
                sValWrapp = dicWrap[sKeyWrapp];
            }

            if (nMode == 1)
            {
                dicWrap[sKeyWrapp] = (chWrapp.Checked)?"Y":"N";
            }

            return((sValWrapp == "Y")?true:false);
        }
コード例 #7
0
ファイル: ProceedSSCC.cs プロジェクト: TabVV/SkladDisp
        // Обработка сканирования на панели Документов
        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);
            }
        }
コード例 #8
0
        private void SetDefEmk(ref PSC_Types.ScDat scD)
        {
            int
                i;
            StrAndInt
                xE;

            for (i = 0; i < scD.xEmks.Count; i++)
            {
                scD.xEmks.CurrIndex = i;
                xE = (StrAndInt)scD.xEmks.Current;
                if (xE.DecDat == scD.fEmk)
                {
                    scD.nKolSht = xE.IntCodeAdd1;
                    break;
                }
            }
        }
コード例 #9
0
ファイル: ProceedAdr.cs プロジェクト: TabVV/SkladDisp
        /// вставка записи с виртульной продукцией (пусто, SSCC)
        private DataRow AddVirtProd(ref PSC_Types.ScDat sc)
        {
            DataRow
                drFictProd = null;

            drFictProd = xNSI.AddDet(sc, xCDoc, null);
            if (drFictProd != null)
            {
                xCDoc.xOper.SetOperObj(drFictProd, xCDoc.xDocP.nTypD, false);
                if (bShowTTN)
                {
                    drDet = drFictProd;
                    scCur = sc;
                    SetCurRow(dgDet, "ID", (int)drFictProd["ID"]);
                }
                SetDetFields(false);
                AfterAddScan(this, new EventArgs());
            }
            return(drFictProd);
        }
コード例 #10
0
ファイル: ModGP.cs プロジェクト: TabVV/Sklad1C
        private bool EANGTIN(ref PSC_Types.ScDat s, string sBC)
        {
            bool
           ret = true;
            string
                sEANP = "";

            try
            {
                if (sBC.Length == 14)
                {// это ITF
                    s.tTyp  = AppC.TYP_TARA.TARA_TRANSP;
                    s.sGTIN = sBC;
                    if (SetKMCOnGTIN(ref s))
                    {
                        return(AppC.RC_OKB);
                    }
                    sEANP = sBC.Substring(1, 12);
                }

                if (sBC.Length == 13)
                {
                    s.tTyp = AppC.TYP_TARA.TARA_POTREB;
                    //if ((xScan.Dat.StartsWith("460")) ||
                    //    (xScan.Dat.StartsWith("481")))
                    //{
                    //    sEANP = sBC.Substring(0, 12);
                    //}
                    sEANP = sBC.Substring(0, 12);
                }

                s.sEAN = Srv.CheckSumModul10(sEANP);
                ret    = xNSI.Connect2MC(s.sEAN, 0, -1, ref s);
            }
            catch
            {
                ret = false;
                //sTypDoc.sN = sS + "-???";
            }
            return(ret);
        }
コード例 #11
0
        //***==================== ProceedScan
        private bool EANGTIN(ref PSC_Types.ScDat s, string sBC)
        {
            bool
           ret = true;
            string
                sEANP = "";

            try
            {
                if (sBC.Length == 14)
                {// это ITF
                    s.tTyp  = AppC.TYP_TARA.TARA_TRANSP;
                    s.sGTIN = sBC;
                    if (SetKMCOnGTIN(ref s))
                    {
                        return(AppC.RC_OKB);
                    }
                    sEANP  = sBC.Substring(1, 12);
                    s.sEAN = Srv.CheckSumModul10(sEANP);
                }
                else
                {
                    s.tTyp = AppC.TYP_TARA.TARA_POTREB;
                    if (sBC.Length == 13)
                    {
                        sEANP  = sBC.Substring(0, 12);
                        s.sEAN = Srv.CheckSumModul10(sEANP);
                    }
                    else
                    {
                        s.sEAN = sBC;
                    }
                }
                ret = xNSI.Connect2MC(s.sEAN, 0, -1, ref s);
            }
            catch
            {
                ret = false;
            }
            return(ret);
        }
コード例 #12
0
ファイル: ProceedScanKMPL.cs プロジェクト: TabVV/Sklad1C
        private bool CanProd(ref PSC_Types.ScDat sc)
        {
            bool
                ret = true;

            if (xPars.UseAdr4DocMode)
            {
                if (xCDoc.xDocP.DType.AdrFromNeed)
                {// адрес-источник нужен ?
                    if ((xCDoc.xOper.GetSrc(false).Length > 0) || ((xCDoc.drCurRow["CHKSSCC"] is int) && ((int)xCDoc.drCurRow["CHKSSCC"] > 0)))
                    {
                    }
                    else
                    {
                        ret = false;
                        Srv.ErrorMsg("Не указан адрес!");
                    }
                }

                if (xCDoc.xDocP.DType.MoveType == AppC.MOVTYPE.PRIHOD)
                {
                    if (xCDoc.xOper.bObjOperScanned && !xCDoc.xOper.IsFillDst())
                    {
                        DialogResult drQ = MessageBox.Show("Заменить продукцию(ENT)?\n(ESC) - отменить ввод",
                                                           "Ожидается адрес!",
                                                           MessageBoxButtons.OKCancel,
                                                           MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
                        if (drQ != DialogResult.OK)
                        {
                            ret = false;
                        }
                        else
                        {
                            sc.bReWrite = true;
                        }
                    }
                }
            }

            return(ret);
        }
コード例 #13
0
        // добавление в список ТТН отмаркированного поддона
        private DataRow AddSSCC2ProdList(ScanVarRM xSc)
        {
            DataRow
                ret = null;

            try
            {
                PSC_Types.ScDat sc = new PSC_Types.ScDat(new BarcodeScannerEventArgs(BCId.Code128, ""));
                sc.sSSCC    = xSc.Dat;
                sc.nNomPodd = int.Parse(xSc.Dat.Substring(13, 7));
                //sc.sN = String.Format("Поддон №{0}", sc.nNomPodd);
                sc.sN     = String.Format("SSCC № {0}...{1}", sc.sSSCC.Substring(2, 4), sc.sSSCC.Substring(15, 5));
                sc.nKrKMC = AppC.KRKMC_MIX;
                ret       = AddVirtProd(ref sc);
            }
            catch //(Exception e)
            {
                ret = null;
            }
            return(ret);
        }
コード例 #14
0
        //private void WhatSSCCContent()
        //{
        //    int
        //        nRet;
        //    string
        //        sSSCC;
        //    ServerExchange
        //        xSE = new ServerExchange(this);

        //    try
        //    {
        //        if (tcMain.SelectedIndex == PG_SCAN)
        //        {
        //            sSSCC = (string)drDet["SSCC"];
        //            try
        //            {
        //                if ((xCLoad.sSSCC == sSSCC) && (xCLoad.sComLoad == AppC.COM_ZSC2LST) && (xCLoad.dtZ.Rows.Count > 0))
        //                {
        //                    ShowSSCCContent(xCLoad.dtZ, sSSCC, xCDoc.xOper.xAdrSrc);
        //                    return;
        //                }
        //            }
        //            catch { }
        //            if (scCur.nKrKMC == AppC.KRKMC_MIX)
        //            {
        //                PSC_Types.ScDat scD = scCur;
        //                //nRet = ConvertSSCC2Lst(xSE, sSSCC, true, false, ref scD);

        //                nRet = ConvertSSCC2Lst(xSE, scCur.sSSCC, ref scD, true, xNSI.DT[NSI.BD_DOUTD].dt);

        //                if ((nRet == AppC.RC_OK) || (nRet == AppC.RC_MANYEAN))
        //                {
        //                    ShowSSCCContent(xCLoad.dtZ, sSSCC, xCDoc.xOper.xAdrSrc);
        //                    return;
        //                }
        //            }
        //        }
        //    }
        //    catch { }

        //    xCDoc.sSSCC = "";
        //    WaitScan4Func(AppC.F_CNTSSCC, "Содержимое SSCC", "Отсканируйте SSCC");
        //}


        private void WhatSSCCContent()
        {
            int
                nRet;
            string
                sSSCC;
            ServerExchange
                xSE = new ServerExchange(this);

            try
            {
                if (tcMain.SelectedIndex == PG_SCAN)
                {
                    sSSCC = (string)drDet["SSCC"];
                    try
                    {
                        if ((xCLoad.sSSCC == sSSCC) && (xCLoad.sComLoad == AppC.COM_ZSC2LST) && (xCLoad.dtZ.Rows.Count > 0))
                        {
                            ShowSSCCContent(xCLoad.dtZ, sSSCC, null, xCDoc.xOper.xAdrSrc, ref ehCurrFunc);
                            return;
                        }
                    }
                    catch { }
                    if (scCur.nKrKMC == AppC.KRKMC_MIX)
                    {
                        PSC_Types.ScDat scD = scCur;
                        nRet = ConvertSSCC2Lst(xSE, sSSCC, ref scD, false);
                        if ((nRet == AppC.RC_OK) || (nRet == AppC.RC_MANYEAN))
                        {
                            ShowSSCCContent(xCLoad.dtZ, sSSCC, xSE, xCDoc.xOper.xAdrSrc, ref ehCurrFunc);
                            return;
                        }
                    }
                }
            }
            catch { }

            xCDoc.sSSCC = "";
            WaitScan4Func(AppC.F_CNTSSCC, "Содержимое SSCC", "Отсканируйте SSCC");
        }
コード例 #15
0
ファイル: ProceedScanKMPL.cs プロジェクト: TabVV/Sklad1C
        private bool WhatPrtKeyF_Emk(DataRow dr, ref PSC_Types.ScDat sc, FRACT fCurEmk)
        {
            bool bSet = false;

            if (fCurEmk == 0)
            {
                if (sc.drPartKeyE == null)
                {
                    sc.drPartKeyE = dr;
                    bSet          = true;
                }
            }
            else
            {
                if (sc.drPartKey == null)
                {
                    sc.drPartKey = dr;
                    bSet         = true;
                }
            }
            return(bSet);
        }
コード例 #16
0
        // установка полей ввода [+ сброс информационных]
        private void SetDetFields(ref PSC_Types.ScDat scCur, bool bClearInf)
        {
            string
                s;

            if (bClearInf == true)
            {
                this.tKrKMC.Text                             =
                    this.tEmk.Text                           =
                        this.lKMCName.Text                   =
                            this.tDTV.Text                   =
                                this.tParty.Text             =
                                    this.tMest.Text          =
                                        this.tVes.Text       =
                                            this.tVsego.Text = "";
                this.tSSCC.Text = "";
            }
            else
            {// информационные поля отображаются
                s = xMark.ScanFirst.sN;
                if (xMark.ScanFirst.drMC != null)
                {
                    s += " [" + (string)xMark.ScanFirst.drMC["GRADUS"] + "]";
                }
                this.lKMCName.Text = s;


                this.tKrKMC.Text = (xMark.ScanFirst.nKrKMC <= 0) ? "" : xMark.ScanFirst.nKrKMC.ToString();
                //this.tEmk.Text = (scCur.fEmk <= 0) ? "" : scCur.fEmk.ToString();
                this.tEmk.Text = ((xMark.ScanFirst.bVes) ? xMark.ScanFirst.nKolSht : (int)xMark.ScanFirst.fEmk).ToString();
                this.tDTV.Text = xMark.ScanFirst.sDataIzg;

                this.tParty.Text = xMark.ScanFirst.nParty;
                this.tMest.Text  = (xMark.ScanFirst.nMest == AppC.EMPTY_INT) ? "" : xMark.ScanFirst.nMest.ToString();
                this.tVsego.Text = (xMark.ScanFirst.fVsego == 0) ? "" : xMark.ScanFirst.fVsego.ToString();
                this.tVes.Text   = (xMark.ScanFirst.fVes == 0) ? "" : xMark.ScanFirst.fVes.ToString();
            }
        }
コード例 #17
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;
        }
コード例 #18
0
 public int ConvertSSCC2Lst(ServerExchange xSE, string sSSCC, ref PSC_Types.ScDat scD, bool bInfoOnEmk)
 {
     return(ConvertSSCC2Lst(xSE, sSSCC, ref scD, bInfoOnEmk, xNSI.DT[NSI.BD_DOUTD].dt));
 }
コード例 #19
0
        private void TryLoadSSCC(string sSSCC, int nRet)
        {
            int
                nM,
                nRec,
                nNPP;

            DataRow
                dr = null;
            DataTable
                dtD = xNSI.DT[NSI.BD_DIND].dt;
            DataSet
                ds;

            ServerExchange
                xSE = new ServerExchange(this);

            PSC_Types.ScDat
                scD = new PSC_Types.ScDat(new BarcodeScannerEventArgs(BCId.Code128, ""));

            //nRet = ConvertSSCC2Lst(xSE, sSSCC, ref scD, true, xNSI.DT[NSI.BD_DIND].dt);
            if ((nRet == AppC.RC_OK) || (nRet == AppC.RC_MANYEAN))
            {
                xCDoc.drCurRow["CHKSSCC"] = 1;

                // для контроля удаляем все предыдущие
                DataRow[] drMDet = xCDoc.drCurRow.GetChildRows(xNSI.dsM.Relations[NSI.REL2TTN]);
                foreach (DataRow drDel in drMDet)
                {
                    xNSI.dsM.Tables[NSI.BD_DOUTD].Rows.Remove(drDel);
                }
                DataRow[] drMDetZ = xCDoc.drCurRow.GetChildRows(xNSI.dsM.Relations[NSI.REL2ZVK]);
                foreach (DataRow drDel in drMDetZ)
                {
                    xNSI.dsM.Tables[NSI.BD_DIND].Rows.Remove(drDel);
                }

                ds             = xCLoad.dsZ;
                Cursor.Current = Cursors.WaitCursor;
                try
                {
                    nRec = xCLoad.dtZ.Rows.Count;
                    nM   = 0;
                    nNPP = 1;
                    foreach (DataRow drA in dtL.Rows)
                    {
                        scD = new PSC_Types.ScDat(new BarcodeScannerEventArgs(BCId.Code128, ""));
                        nM += SetOneDetZ(ref scD, dtD, ds, drA, xCDoc.drCurRow, ref nNPP);
                        nNPP++;
                    }
                    scCur = new PSC_Types.ScDat(new BarcodeScannerEventArgs(BCId.Code128, ""));
                    SetDetFields(true);
                    Srv.ErrorMsg(String.Format("{0} строк загружено", nRec), String.Format("SSCC...{0}", sSSCC.Substring(15, 5)), false);
                }
                catch (Exception exx)
                {
                    Srv.ErrorMsg(exx.Message, "Ошибка загрузки!", true);
                }
                finally
                {
                    Cursor.Current = Cursors.Default;
                }
            }
        }
コード例 #20
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);
        }
コード例 #21
0
ファイル: ProceedSSCC.cs プロジェクト: TabVV/SkladDisp
        private void LoadAllSSCC()
        {
            int
                nRet = AppC.RC_OK,
                nK,
                nRezCtrl;
            string
                sE,
                sSSCC = "";

            PSC_Types.ScDat
                scD = scCur;
            ServerExchange
                xSE = new ServerExchange(this);

            DelTTN4Doc(xCDoc.drCurRow);

            DataRow[] drSSCCAll = xCDoc.drCurRow.GetChildRows(xNSI.dsM.Relations[NSI.REL2SSCC]);
            foreach (DataRow drSSCC in drSSCCAll)
            {
                if ((int)drSSCC["IN_TTN"] > 0)
                {
                    sSSCC = (string)drSSCC["SSCC"];
                    nRet  = ConvertSSCC2Lst(xSE, sSSCC, ref scD, false);
                    if ((nRet == AppC.RC_OK) || (nRet == AppC.RC_MANYEAN))
                    {
                        //if (nRet == AppC.RC_MANYEAN)
                        //    nRet = AddGroupDet(AppC.RC_MANYEAN, (int)NSI.SRCDET.SSCCT, sSSCC);

                        nRet = AddGroupDet(AppC.RC_MANYEAN, (int)NSI.SRCDET.SSCCT, sSSCC, false);
                    }
                    if (nRet != AppC.RC_OK)
                    {
                        Srv.ErrorMsg("Ошибка загрузки " + sSSCC, "Код-" + nRet.ToString(), true);
                        DelTTN4Doc(xCDoc.drCurRow);
                        break;
                    }
                }
            }
            if (nRet == AppC.RC_OK)
            {
                if (bZVKPresent)
                {
                    Cursor.Current = Cursors.WaitCursor;
                    xNSI.DT[NSI.BD_DIND].dt.AcceptChanges();
                    List <DataRow>
                    lDD = new List <DataRow>();
                    DataView
                        dvZ = new DataView(xNSI.DT[NSI.BD_DIND].dt, xCDoc.DefDetFilter(), "KMC", DataViewRowState.CurrentRows);
                    //for (int i = 0; i < dvZ.Count; i++)
                    //{
                    //    if ( PSC_Types.IsTara((string)dvZ[i].Row["EAN13"], (int)dvZ[i].Row["KRKMC"]) )
                    //    {
                    //        lDD.Add(dvZ[i].Row);
                    //        dvZ[i].Row.Delete();
                    //    }
                    //}

                    foreach (DataRowView drv in dvZ)
                    {
                        if (PSC_Types.IsTara((string)drv.Row["EAN13"], (int)drv.Row["KRKMC"]))
                        {
                            lDD.Add(drv.Row);
                            drv.Row.Delete();
                        }
                    }


                    try
                    {
                        xInf     = new List <string>();
                        nRezCtrl = ControlDocZVK(null, xInf, "");
                    }
                    finally
                    {
                        Cursor.Current = Cursors.Default;
                        foreach (DataRow dr in lDD)
                        {
                            dr.RejectChanges();
                        }
                    }
                    xHelpS.ShowInfo(xInf, ref ehCurrFunc);
                }
            }
        }
コード例 #22
0
        // подготовка DataSet для выгрузки
        public DataSet MakeWorkDataSet1Det(DataTable dtM, DataTable dtD, PSC_Types.ScDat s, string sSSCC)
        {
            DataTable
                dtMastNew = null,
                dtDetNew  = dtD.Clone();
            DataRow
                ret;

            if (dtM != null)
            {
                dtMastNew = dtM.Clone();
            }

            ret = dtDetNew.NewRow();

            ret["KRKMC"] = s.nKrKMC;
            ret["SNM"]   = s.sN;
            ret["KOLM"]  = s.nMest;
            ret["KOLE"]  = (s.bVes)?s.fVes:s.fVsego;
            ret["EMK"]   = s.fEmk;
            ret["NP"]    = s.nParty;
            ret["DVR"]   = s.dDataIzg.ToString("yyyyMMdd");
            ret["EAN13"] = s.sEAN;
            ret["SYSN"]  = -500;
            ret["SRP"]   = (s.bVes == true) ? 1 : 0;
            ret["GKMC"]  = s.sGrK;

            ret["KTARA"] = s.nTara;
            ret["KOLSH"] = s.nKolSht;

            ret["VES"]  = s.fVes;
            ret["KOLG"] = s.fVsego;

            ret["DEST"] = s.nDest;
            ret["KMC"]  = s.sKMC;

            ret["SRC"] = s.nRecSrc;

            ret["TIMECR"] = s.dtScan;

            ret["NPODD"]  = s.nNomPodd;
            ret["NMESTA"] = s.nNomMesta;

            ret["ADRFROM"] = s.xOp.GetSrc(false);
            ret["ADRTO"]   = s.xOp.GetDst(false);

            // отладка чудес всяких
            ret["GKMC"]    = s.s;
            ret["SSCC"]    = sSSCC;
            ret["SSCCINT"] = s.sSSCCInt;

            ret["NPODDZ"] = 0;

            ret["SYSPRD"] = s.nNPredMT;
            dtDetNew.Rows.Add(ret);

            drWithSSCC = ret;

            DataSet ds1Rec = new DataSet("dsMOne");

            if (dtMastNew != null)
            {
                ds1Rec.Tables.Add(dtMastNew);
            }
            ds1Rec.Tables.Add(dtDetNew);
            return(ds1Rec);
        }
コード例 #23
0
ファイル: ProceedScanKMPL.cs プロジェクト: TabVV/Sklad1C
        private int ProceedProd(ScanVarRM xSc, ref PSC_Types.ScDat sc, bool bDupScan)
        {
            bool
                bDopValuesNeed = true;
            int
                nRet = AppC.RC_CANCEL;

            #region Обработка скана продукции
            do
            {
                if (!CanProd(ref sc))
                {
                    break;
                }

                if (!AvailKMC4PartInvent(sc.sKMC, true))
                {
                    break;
                }

                xCDoc.bConfScan = (ConfScanOrNot(xCDoc.drCurRow, xPars.ConfScan) > 0) ? true : false;
                if (xCDoc.bConfScan)
                {// документ требует подтверждения ввода для каждой продукции
                 //if ((sc.nRecSrc != (int)NSI.SRCDET.FROMADR) &&
                 //    (sc.nRecSrc != (int)NSI.SRCDET.SSCCT))
                 //    {// полученную с сервера не проверяем
                 //    if (TestProdBySrv(ref sc) != AppC.RC_OK)
                 //        break;
                 //}

                    // полученную с сервера ПОКА! проверяем
                    if (TestProdBySrv(ref sc) != AppC.RC_OK)
                    {
                        break;
                    }
                }


                if (xCDoc.drCurRow != null)
                {
                    scCur = sc;
                    //if (!sc.bFindNSI)
                    //    Srv.ErrorMsg(String.Format("Код {0} не найден!\nОбновите НСИ!", sc.sEAN), true);

                    bDopValuesNeed = true;
                    nRet           = AppC.RC_OK;

                    if (scCur.bVes == true)
                    {
                        scCur.fVsego = scCur.fVes;

                        // убрано 05.07.18
                        //if (scCur.nRecSrc != (int)NSI.SRCDET.SSCCT)
                        //{
                        //    //if (!xScan.dicSc.ContainsKey("37") && (scCur.tTyp != AppC.TYP_TARA.TARA_POTREB))
                        //    //{
                        //    //    scCur.tTyp = AppC.TYP_TARA.TARA_POTREB;
                        //    //    scCur.fEmk = scCur.fEmk_s = 0;
                        //    //}
                        //}

                        if ((xCDoc.xDocP.DType.MoveType == AppC.MOVTYPE.MOVEMENT) && (scCur.tTyp == AppC.TYP_TARA.TARA_PODDON))
                        {
                            bDopValuesNeed = false;
                            scCur.nMest    = scCur.nMestPal;
                        }
                        if (AppPars.bVesNeedConfirm == false)
                        {// подтверждение ввода отключено
                            if ((scCur.tTyp != AppC.TYP_TARA.UNKNOWN) ||
                                ((scCur.tTyp == AppC.TYP_TARA.TARA_POTREB) && (scCur.nParty.Length > 0)))
                            {
                                bDopValuesNeed = false;
                            }
                        }
                        if ((scCur.fVes == fDefVes) && (scCur.fVes > 0))
                        {
                            DialogResult dr = MessageBox.Show("Отменить ввод (Enter)?\r\n(ESC) - продолжить ввод",
                                                              String.Format("Тот же вес-{0}!", scCur.fVes), MessageBoxButtons.OKCancel,
                                                              MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
                            if (dr == DialogResult.OK)
                            {
                                nRet = AppC.RC_CANCEL;
                            }
                        }
                        fDefVes = scCur.fVes;
                    }
                    else
                    {
                        if ((scCur.tTyp == AppC.TYP_TARA.TARA_PODDON))
                        {
                            if (AppPars.bVesNeedConfirm == false)
                            {
                                bDopValuesNeed = false;
                            }
                        }
                        else
                        {
                            nRet = AppC.RC_OK;
                        }
                    }

                    if ((AppC.RC_OK == nRet) &&
                        (AppC.RC_OK == EvalZVKMest(ref scCur, null, 0, 0)))
                    {
                        nRet = Prep4Ed(ref scCur, ref bDopValuesNeed, 0);

                        SetDopFieldsForEnter(false);
                        if (nRet == AppC.RC_OK)
                        {
                            PInfReady();
                            SetDetFields(false);
                            //ShowDopInfKMPL(scCur.nKolM_alr + scCur.nKolM_alrT);

                            //if (bDopValuesNeed == false)
                            if ((bDopValuesNeed == false) && (bEditMode))
                            {    // редактирование пока отменяется, но есть ли все данные?
                                bDopValuesNeed = (VerifyVvod().nRet == AppC.RC_CANCEL) ? true : false;
                            }

                            if ((bDopValuesNeed == true))
                            {// будет редактирование
                                int nR = IsGeneralEdit(ref scCur);
                                if (nR == AppC.RC_OK)
                                {
                                    AddOrChangeDet(AppC.F_ADD_SCAN);
                                }
                                else if (nR == AppC.RC_CANCEL)
                                {
                                    //Srv.ErrorMsg("Неоднозначность!\r\nПерейдите в обычный режим!");
                                    ZVKeyDown(AppC.F_PODD, null, ref ehCurrFunc);
                                }
                                else if (nR == AppC.RC_BADTABLE)
                                {
                                    Srv.ErrorMsg("Переключаюсь в заявку...\r\nПовторите сканирование");
                                    ChgDetTable(null, "");
                                }
                                else if (nR == AppC.RC_ZVKONLY)
                                {
                                    Srv.ErrorMsg("Только с заявкой!");
                                }
                            }
                            else
                            {
                                AddDet1(ref scCur);
                                SetDopFieldsForEnter(true);
                            }
                        }
                    }
                }
            } while (false);
            #endregion

            return(nRet);
        }
コード例 #24
0
        // добавление полученных заявок в рабочие таблицы
        private int AddZ(CurLoad xCL, ref string sErr)
        {
            int
                nRet = AppC.RC_OK,
                nNPP,
                nM = 0;
            string s;

            PSC_Types.ScDat sD = new PSC_Types.ScDat();
            //object xNewKey;

            DataSet ds = xCL.dsZ;
            DataRow drMDoc;

            DataRow[] drDetZ, drMDetZ;
            DataTable dt  = xNSI.DT[NSI.BD_DOCOUT].dt,
                      dtD = xNSI.DT[NSI.BD_DIND].dt;

            // пока удалим связи и таблицу ТТН из DataSet
            //DataRelation dRel = xNSI.dsM.Relations[NSI.REL2TTN];

            //xNSI.dsM.Relations.Remove(NSI.REL2TTN);
            //xNSI.dsM.Tables.Remove(xNSI.dsM.Tables[NSI.BD_DOUTD]);

            if (xCL.ilLoad.CurReg == AppC.UPL_CUR)
            {// заявка только для текущего документа
                drMDoc = xCDoc.drCurRow;
                //object[] xCur = drMDoc.ItemArray;

                if (ds.Tables[NSI.BD_ZDET].Rows.Count > 0)
                {// имеются детальные строки для загрузки
                 // а это загруженные ранее

                    //drDetZ = drMDoc.GetChildRows(xNSI.dsM.Relations[NSI.REL2ZVK]);
                    //if (drDetZ.Length > 0)
                    //{// их все и удаляем
                    //    foreach (DataRow drDel in drDetZ)
                    //    {
                    //        xNSI.dsM.Tables[NSI.BD_DIND].Rows.Remove(drDel);
                    //    }
                    //}
                    DelDetail4Doc(drMDoc, xNSI.dsM.Tables[NSI.BD_DIND], NSI.REL2ZVK);
                    DelDetail4Doc(drMDoc, xNSI.dsM.Tables[NSI.BD_PICT], NSI.REL2PIC);

                    // установка существующего ключа (SYSN)
                    // каскадно должен измениться и в детальных
                    ds.Tables[NSI.BD_ZDOC].Rows[0]["SYSN"] = drMDoc["SYSN"];
                    nM   = 0;
                    nNPP = 1;
                    foreach (DataRow drA in ds.Tables[NSI.BD_ZDET].Rows)
                    {
                        //nM += SetOneDetZ(ref sD, dtD, drA.ItemArray);
                        nM += SetOneDetZ(ref sD, dtD, drA, drMDoc, ref nNPP);
                        nNPP++;
                    }
                    drMDoc["SOURCE"]  = NSI.DOCSRC_LOAD;
                    drMDoc["CHKSSCC"] = 0;
                    drMDoc["MESTZ"]   = nM;
                    if (xCL.CheckIt)
                    {
                        drMDoc["SSCCONLY"] = 1;
                        DelDetail4Doc(drMDoc, xNSI.dsM.Tables[NSI.BD_DOUTD], NSI.REL2TTN);
                    }
                    else
                    {
                        drMDoc["SSCCONLY"] = 0;
                    }
                    AddPicsDoc(ds.Relations[NSI.REL2PIC], ds.Tables[NSI.BD_ZDOC].Rows[0], xNSI.dsM.Tables[NSI.BD_PICT]);

                    //drMDoc["CONFSCAN"] = ConfScanOrNot(drMDoc, xPars.ConfScan);
                }
                else
                {
                    sErr = "Детальные строки не найдены!";
                    nRet = AppC.RC_CANCEL;
                }
            }
            else
            {// загрузка всего, что пришло (ALL или по фильтру)
                // пока ничего не загрузили
                xCL.dr1st = null;

                for (int i = 0; i < ds.Tables[NSI.BD_ZDOC].Rows.Count; i++)
                {
                    DataRow dr = ds.Tables[NSI.BD_ZDOC].Rows[i];
                    drDetZ = dr.GetChildRows(ds.Relations[NSI.REL2ZVK]);
                    if ((drDetZ != null) && (drDetZ.Length > 0))
                    {// имеются детальные строки для загрузки
                        // по-хорошему, надо искать по нормальному ключу, а не по SYSN
                        //nPKey = (int)dr["SYSN"];
                        s = FiltForDocExchg(dr, xCL);

                        DataRow[] aDr = dt.Select(s);
                        if (aDr.Length > 0)
                        {
                            drMDoc = aDr[0];
                            if (xCL.nCommand == AppC.F_ZZKZ1)
                            {
                                if (MainF.swProt != null)
                                {
                                    //string sCurr = String.Format("Date={0}, SM={1}, PD={2}, SYSN={3}", drMDoc["DT"], drMDoc["KSMEN"], drMDoc["KEKS"], drMDoc["SYSN"]);
                                    swProt.WriteLine(String.Format("{2} Перезапись заказа (SYSN={1})! Ф={0}", s, drMDoc["SYSN"], DateTime.Now.ToString("dd.MM.yy HH:mm:ss - ")));
                                    WriteAllToReg(true);
                                }
                            }
                        }
                        else
                        {
                            drMDoc = null;
                        }

                        //drMDoc = dt.Rows.Find(new object[] { nPKey });

                        if (null != drMDoc)
                        {// ранее уже грузили
                            //drMDetZ = drMDoc.GetChildRows(xNSI.dsM.Relations[NSI.REL2ZVK]);
                            //if (drDetZ.Length > 0)
                            //{// их все и удаляем
                            //    foreach (DataRow drDel in drMDetZ)
                            //    {
                            //        xNSI.dsM.Tables[NSI.BD_DIND].Rows.Remove(drDel);
                            //    }
                            //}
                            DelDetail4Doc(drMDoc, xNSI.dsM.Tables[NSI.BD_DIND], NSI.REL2ZVK);
                            DelDetail4Doc(drMDoc, xNSI.dsM.Tables[NSI.BD_PICT], NSI.REL2PIC);
                        }
                        else
                        {// новая заявка
                            drMDoc = dt.NewRow();
                            object x = drMDoc["SYSN"];
                            drMDoc.ItemArray = dr.ItemArray;
                            //for(int ii = 0; ii < dr.ItemArray.Length; ii++)
                            //{
                            //    if (!(dr.ItemArray[ii].GetType() == typeof(System.DBNull)))
                            //        drMDoc.ItemArray[ii] = dr.ItemArray[ii];
                            //}

                            drMDoc["SYSN"]   = x;
                            drMDoc["SOURCE"] = NSI.DOCSRC_LOAD;
                            drMDoc["TIMECR"] = DateTime.Now;
                            if (xCL.CheckIt)
                            {
                                drMDoc["SSCCONLY"] = 1;
                                DelDetail4Doc(drMDoc, xNSI.dsM.Tables[NSI.BD_DOUTD], NSI.REL2TTN);
                            }
                            else
                            {
                                drMDoc["SSCCONLY"] = 0;
                            }

                            if (xCL.nCommand == AppC.F_LOAD_DOC)
                            {
                                drMDoc["TYPOP"] = AppC.TYPOP_DOCUM;
                            }
                            else
                            if ((xCL.nCommand == AppC.F_LOADKPL) ||
                                (xCL.nCommand == AppC.F_ZZKZ1))
                            {
                                drMDoc["TYPOP"] = AppC.TYPOP_KMPL;
                            }
                            else
                            {
                                drMDoc["TYPOP"] = AppC.TYPOP_PRMK;
                            }

                            dt.Rows.Add(drMDoc);
                        }
                        // установка существующего ключа (SYSN)
                        // каскадно должен измениться и в детальных
                        //dr["DIFF"] = NSI.DOCCTRL.UNKNOWN;
                        dr["SYSN"] = drMDoc["SYSN"];
                        nM         = 0;
                        nNPP       = 1;
                        foreach (DataRow drZ in drDetZ)
                        {
                            //nM += SetOneDetZ(ref sD, dtD, drZ.ItemArray);
                            nM += SetOneDetZ(ref sD, dtD, drZ, drMDoc, ref nNPP);
                            nNPP++;
                        }
                        drMDoc["SOURCE"]  = NSI.DOCSRC_LOAD;
                        drMDoc["CHKSSCC"] = 0;
                        drMDoc["MESTZ"]   = nM;
                        if (xCL.CheckIt)
                        {
                            drMDoc["SSCCONLY"] = 1;
                            DelDetail4Doc(drMDoc, xNSI.dsM.Tables[NSI.BD_DOUTD], NSI.REL2TTN);
                        }
                        else
                        {
                            drMDoc["SSCCONLY"] = 0;
                        }

                        AddPicsDoc(ds.Relations[NSI.REL2PIC], ds.Tables[NSI.BD_ZDOC].Rows[i], xNSI.dsM.Tables[NSI.BD_PICT]);
                        //drMDoc["CONFSCAN"] = ConfScanOrNot(drMDoc, xPars.ConfScan);
                        if (xCL.dr1st == null)
                        {
                            xCL.dr1st = drMDoc;
                        }
                    }
                    else
                    {
                        sErr = String.Format("{0}-Детальные строки не найдены!", dr["SYSN"]);
                        nRet = AppC.RC_CANCEL;
                    }
                }
            }

            // возвращаем таблицу обратно и связи в DataSet
            //xNSI.dsM.Tables.Add(xNSI.dsM.Tables[NSI.BD_DOUTD]);
            //xNSI.dsM.Relations.Add(dsRel);


            return(nRet);
        }
コード例 #25
0
ファイル: exchg.cs プロジェクト: TabVV/Sklad1C
        ///
        private int SetOneDetZ(ref PSC_Types.ScDat sD, DataTable dtZVK, DataSet dsZ, DataRow dZ, DataRow dMDoc, ref int nNPP)
        {
            bool
                bFNsi,
                bSomeDateIsSet = false;
            int
                nCondition = 0,
                nIDOriginal,
                nPrzPl = 0,
            //nM = 0,
                nMest = 0;
            string
                sE,
                sKMC = "",
                sEAN = "";

            object[]
            aIt = dZ.ItemArray;
            DataRow
                dr,
                drNewRow = dtZVK.NewRow();
            FRACT
                fEmkZ;

            nIDOriginal        = (int)drNewRow["ID"];
            drNewRow.ItemArray = aIt;
            try
            {
                bFNsi   = false;
                sD.fEmk = 0;
                nMest   = (int)drNewRow["KOLM"];
                sKMC    = (drNewRow["KMC"] is string) ? drNewRow["KMC"].ToString() : "";
                if (sKMC.Length > 0)
                {
                    dr    = xNSI.DT[NSI.NS_MC].dt.Rows.Find(new object[] { sKMC });
                    bFNsi = sD.GetFromNSI(sD.s, dr, ref nPrzPl);
                    if (bFNsi)
                    {
                        drNewRow["KRKMC"] = sD.nKrKMC;
                        drNewRow["SNM"]   = sD.sN;
                    }
                    else
                    {
                        drNewRow["KRKMC"] = 0;
                        drNewRow["SNM"]   = "Неизвестно";
                    }
                }
                if (drNewRow["EAN13"] == System.DBNull.Value)
                {
                    if (bFNsi)
                    {
                        drNewRow["EAN13"] = sEAN = sD.sEAN;
                    }
                }
                else
                {
                    sEAN = (string)drNewRow["EAN13"];
                }
                if ((!bFNsi) && (sEAN.Length > 0))
                {
                    if (xNSI.GetMCDataOnEAN(sEAN, ref sD, false) == true)
                    {
                        drNewRow["KMC"]   = sD.sKMC;
                        drNewRow["KRKMC"] = sD.nKrKMC;
                        drNewRow["SNM"]   = sD.sN;
                    }
                    else
                    {
                        drNewRow["KRKMC"] = 0;
                        drNewRow["SNM"]   = "Неизвестно";
                    }
                }
            }
            catch
            {
                drNewRow["KRKMC"] = 0;
                drNewRow["SNM"]   = "Неизвестно";
                nMest             = 0;

                sE = String.Format("{0} - Загрузка BC={1} EAN={2}",
                                   DateTime.Now.ToString("dd.MM.yy HH:mm:ss - "),
                                   dMDoc["DOCBC"],
                                   sEAN);
                WriteProt(sE);
            }

            //nM = nMest;
            //if (drNewRow["EMK"] == System.DBNull.Value)
            //{
            //    if (nMest > 0)
            //    {
            //        if (sD.fEmk == 0)
            //            sD.fEmk = (FRACT)((int)(((FRACT)drNewRow["KOLE"]) / nMest));
            //        drNewRow["EMK"] = sD.fEmk;
            //    }
            //    else
            //        drNewRow["EMK"] = 0;
            //}

            try
            {
                fEmkZ = (FRACT)drNewRow["EMK"];
            }
            catch
            {
                fEmkZ = 0;
            }

            //if (drMZ["EMK"] == System.DBNull.Value)
            if (fEmkZ <= 0)
            {
                fEmkZ = 0;
                if (nMest > 0)
                {
                    if (sD.fEmk == 0)
                    {
                        sD.fEmk = (FRACT)((int)(((FRACT)drNewRow["KOLE"]) / nMest));
                    }
                    fEmkZ = sD.fEmk;
                }
                drNewRow["EMK"] = fEmkZ;
            }

            drNewRow["READYZ"] = NSI.READINESS.NO;

            if ((drNewRow["SSCC"] is string) && (drNewRow["SSCC"].ToString().Length > 0))
            {// код паллетты внешней задан
                nCondition |= (int)NSI.SPECCOND.SSCC;
            }
            else
            {
                drNewRow["SSCC"] = "";
            }

            if ((drNewRow["SSCCINT"] is string) && (drNewRow["SSCCINT"].ToString().Length > 0))
            {// код паллетты внутренней задан
                nCondition |= (int)NSI.SPECCOND.SSCC_INT;
            }
            else
            {
                drNewRow["SSCCINT"] = "";
            }

            if (drNewRow["NP"] is string)
            {
                if (((string)drNewRow["NP"] == "*") ||
                    ((string)drNewRow["NP"] == "-1"))
                {
                    drNewRow["NP"] = "";
                    nCondition    |= (int)NSI.SPECCOND.DATE_SET_EXACT;
                }
                else
                {
                    if (((string)drNewRow["NP"]).Length > 0)
                    {// партия задана
                        nCondition |= (int)NSI.SPECCOND.PARTY_SET;
                    }
                }
            }
            else
            {
                drNewRow["NP"] = "";
            }

            if (xPars.UseDTGodn)
            {
                try
                {
                    bSomeDateIsSet = DateCond(drNewRow, "DTG", ref nCondition);
                }
                catch
                {
                    drNewRow["DTG"] = null;
                    bSomeDateIsSet  = false;
                }
            }

            if (xPars.UseDTProizv)
            {
                try
                {
                    bSomeDateIsSet |= DateCond(drNewRow, "DVR", ref nCondition);
                }
                catch
                {
                    drNewRow["DVR"] = null;
                }
            }

            /// если партия - *, а даты вообще нет
            if ((!bSomeDateIsSet) && ((nCondition & (int)NSI.SPECCOND.DATE_SET_EXACT) > 0))
            {
                nCondition -= (int)NSI.SPECCOND.DATE_SET_EXACT;
            }

            drNewRow["COND"] = nCondition;

            if (drNewRow["NPP"] is int)
            {
                nNPP = (int)drNewRow["NPP"];
            }
            else
            {
                drNewRow["NPP"] = nNPP;
            }

            try
            {
                nNPP = (int)drNewRow["NPP"];
            }
            catch { }
            drNewRow["NPP"] = nNPP;

            drNewRow["ID"]   = nIDOriginal;
            drNewRow["SYSN"] = dMDoc["SYSN"];

            dtZVK.Rows.Add(drNewRow);
            AddAKMC(dsZ, dZ, drNewRow);
            return(nMest);
        }
コード例 #26
0
        private void tKrKMC_Validating(object sender, CancelEventArgs e)
        {
            if (bInScanProceed)
            {
                return;
            }

            string sT = ((TextBox)sender).Text.Trim();

            if (sT.Length > 0)
            {
                try
                {
                    int             nM   = int.Parse(sT);
                    PSC_Types.ScDat sTmp = new PSC_Types.ScDat(new ScannerAll.BarcodeScannerEventArgs(BCId.Unknown, ""));
                    if (true == xNSI.GetMCData("", ref sTmp, nM, true))
                    {
                        xMark.ScanFirst = sTmp;

                        xMark.ScanFirst.nMest = xMark.ScanFirst.nMestPal;
                        xMark.NumberOfScans   = 1;
                        EvalTot(xMark.ScanFirst.nMestPal);

                        xMark.ScanFirst.nRecSrc = (int)NSI.SRCDET.HANDS;
                        if (xMark.ScanFirst.bVes)
                        {
                            xMF.TrySetEmk(xNSI.DT[NSI.NS_MC].dt, xNSI.DT[NSI.NS_SEMK].dt, ref xMark.ScanFirst, 0);
                        }

                        if (xMark.ScanFirst.bVes)
                        {
                            tVes.Visible = true;
                        }

                        SetDetFields(ref xMark.ScanFirst, false);
                        SetAvailDopFields(true);
                        if (enWrapMode.CurMode == AppC.WRAP_MODES.WRP_BY_NSI)
                        {
                            chWrapp.Checked = WrappSet(xNSI.DT[NSI.NS_MC].dt, xMark.ScanFirst, 0);
                        }
                    }
                    else
                    {
                        e.Cancel = true;
                        Srv.ErrorMsg("Нет в справочнике!", "Код " + nM.ToString(), true);
                    }
                }
                catch
                {
                    e.Cancel = true;
                }
            }
            else
            {
                //    scCur.nKrKMC = 0;
                //if (e.Cancel || (scCur.nKrKMC == 0))
                //{
                //    bSetByHand = false;
                //}
                xMark.ScanFirst.nKrKMC = 0;
            }
            //if (e.Cancel || (xMark.ScanFirst.nKrKMC == 0))
            //{
            //    bSetByHand = false;
            //}
        }
コード例 #27
0
        ///
        // обработка SSCC при вводе
        public int ProceedSSCC(ScanVarRM xSc, ref PSC_Types.ScDat scD, ServerExchange xSE)
        {
            int
                ret = AppC.RC_OK;
            bool
                bTryServer = false;
            string
                sSSCC = xSc.Dat;

            DataRow
                dr = null;

            AppC.MOVTYPE
                MoveType = xCDoc.xDocP.DType.MoveType;

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

            if (tcMain.SelectedIndex == PG_SCAN)
            {
                switch (MoveType)
                {
                case AppC.MOVTYPE.AVAIL:            // инвентаризации
                    bTryServer = true;
                    break;

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

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

                case AppC.MOVTYPE.MOVEMENT:         // документы перемещения
                    bTryServer = false;
                    break;

                default:
                    bTryServer = false;
                    break;
                }
            }
            else if (tcMain.SelectedIndex == PG_SSCC)
            {
                bTryServer = false;
            }

            xCDoc.xOper.SSCC = xSc.Dat;

            if (bTryServer)
            {
                //ret = ConvertSSCC2Lst(xSE, xSc, ref scD, xNSI.DT[NSI.BD_DOUTD].dt, false);
                ret = ConvertSSCC2Lst(xSE, xCDoc.sSSCC, ref scD, true, xNSI.DT[NSI.BD_DOUTD].dt);

                if (ret == AppC.RC_OK)
                {
                    if (xCLoad.dtZ.Rows.Count == 1)
                    {    // однородный поддон
                        scD.sSSCC = sSSCC;
                        dr        = AddVirtProd(ref scD);
                    }
                }
            }

            //if (dr == null)
            //    dr = AddDetSSCC(xSc);


            switch (MoveType)
            {
            case AppC.MOVTYPE.AVAIL:            // инвентаризации
                ret = AddGroupDet(ret, (int)NSI.SRCDET.SSCCT, xCDoc.sSSCC);
                break;

            case AppC.MOVTYPE.RASHOD:           // расходные документы
                dr = AddSSCC2ProdList(xSc);
                break;

            case AppC.MOVTYPE.PRIHOD:           // документы поступления
                dr = AddSSCC2ProdList(xSc);
                break;

            case AppC.MOVTYPE.MOVEMENT:         // документы перемещения
                dr = AddSSCC2ProdList(xSc);
                break;

            default:
                dr = AddSSCC2ProdList(xSc);
                break;
            }
            AddSSCC2SSCCTable(xSc.Dat, -1, xCDoc, true);

            if (dr != null)
            {
                drDet = dr;
            }
            IsOperReady();

            return(ret);
        }
コード例 #28
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);
        }
コード例 #29
0
ファイル: exchg.cs プロジェクト: TabVV/Sklad1C
        // добавление полученных заявок в рабочие таблицы
        private int AddZ(CurLoad xCL, ref string sErr, bool bIsTask)
        {
            int
                nRet = AppC.RC_OK,
                nNPP,
                nM = 0;
            string
                s;

            PSC_Types.ScDat
                sD = new PSC_Types.ScDat();
            //object xNewKey;

            DataSet
                ds = xCL.dsZ;
            DataRow
                drMDoc;

            DataRow[]
            //drAKMC,
            drDetZ,
            drMDetZ;
            DataTable
                dtDocs = xNSI.DT[NSI.BD_DOCOUT].dt,
                dtZVK  = xNSI.DT[NSI.BD_DIND].dt;

            // пока удалим связи и таблицу ТТН из DataSet
            //DataRelation dRel = xNSI.dsM.Relations[NSI.REL2TTN];

            //xNSI.dsM.Relations.Remove(NSI.REL2TTN);
            //xNSI.dsM.Tables.Remove(xNSI.dsM.Tables[NSI.BD_DOUTD]);

            if ((xCL.ilLoad.CurReg == AppC.UPL_CUR) && (!bIsTask))
            {// заявка только для текущего документа
                drMDoc = xCDoc.drCurRow;
                //object[] xCur = drMDoc.ItemArray;

                if (ds.Tables[NSI.BD_ZDET].Rows.Count > 0)
                {// имеются детальные строки для загрузки
                    // а это загруженные ранее
                    if (!bIsTask)
                    {// предыдущие задания не удаляем
                        drDetZ = drMDoc.GetChildRows(xNSI.dsM.Relations[NSI.REL2ZVK]);
                        if (drDetZ.Length > 0)
                        {// их все и удаляем
                            foreach (DataRow drDel in drDetZ)
                            {
                                xNSI.dsM.Tables[NSI.BD_DIND].Rows.Remove(drDel);
                            }
                        }
                    }
                    // установка существующего ключа (SYSN)
                    // каскадно должен измениться и в детальных
                    ds.Tables[NSI.BD_ZDOC].Rows[0]["SYSN"] = drMDoc["SYSN"];
                    nM   = 0;
                    nNPP = 1;
                    foreach (DataRow drA in ds.Tables[NSI.BD_ZDET].Rows)
                    {
                        nM += SetOneDetZ(ref sD, dtZVK, ds, drA, drMDoc, ref nNPP);
                        nNPP++;
                    }
                    drMDoc["MESTZ"]   = nM;
                    drMDoc["SOURCE"]  = NSI.DOCSRC_LOAD;
                    drMDoc["CHKSSCC"] = 0;
                }
                else
                {
                    sErr = "Детальные строки не найдены!";
                    nRet = AppC.RC_CANCEL;
                }
                //if (drMDoc["SOURCE"] == NSI.DOCSRC_LOAD)
                //{// этот документ загружался
                //    nPKey = drMDoc["SYSN"];
                //    dr = ds.Tables[0].Rows.Find(new object[] { nPKey });
                //}


                //if (dr != null)
                //{// присутствует такой документ в заявках
                //    drDetZ = dr.GetChildRows(ds.Relations[0]);
                //    if ((drDetZ != null) && (drDetZ.Length > 0))
                //    {// имеются детальные строки заявки



                //        nRet = AddOneZ(dt, xCDoc.drCurRow, xCur, dtD, drDetZ);
                //    }
                //    else
                //    {
                //        Srv.ErrorMsg("Детальные строки не найдены!");
                //        return (AppC.RC_CANCEL);
                //    }
                //}
                //else
                //{
                //    Srv.ErrorMsg("Заявка не найдена!");
                //    return (AppC.RC_CANCEL);
                //}
            }
            else
            {// загрузка всего, что пришло (ALL или по фильтру)
                // пока ничего не загрузили
                xCL.dr1st = null;

                for (int i = 0; i < ds.Tables[NSI.BD_ZDOC].Rows.Count; i++)
                {
                    DataRow dr = ds.Tables[NSI.BD_ZDOC].Rows[i];
                    drDetZ = dr.GetChildRows(ds.Relations[NSI.REL2ZVK]);
                    if ((drDetZ != null) && (drDetZ.Length > 0))
                    {// имеются детальные строки для загрузки
                        // по-хорошему, надо искать по нормальному ключу, а не по SYSN
                        //nPKey = (int)dr["SYSN"];
                        s = FiltForDocExchg(dr, xCL, bIsTask);

                        DataRow[] aDr = dtDocs.Select(s);
                        if (aDr.Length > 0)
                        {
                            drMDoc = aDr[0];
                        }
                        else
                        {
                            drMDoc = null;
                        }

                        //drMDoc = dt.Rows.Find(new object[] { nPKey });

                        if (null != drMDoc)
                        {     // ранее уже грузили
                            if (!bIsTask)
                            { // предыдущие задания не удаляем
                                drMDetZ = drMDoc.GetChildRows(xNSI.dsM.Relations[NSI.REL2ZVK]);
                                if (drDetZ.Length > 0)
                                {// их все и удаляем
                                    foreach (DataRow drDel in drMDetZ)
                                    {
                                        xNSI.dsM.Tables[NSI.BD_DIND].Rows.Remove(drDel);
                                    }
                                }
                            }
                        }
                        else
                        {// новая заявка
                            drMDoc = dtDocs.NewRow();
                            object x = drMDoc["SYSN"];
                            drMDoc.ItemArray = dr.ItemArray;
                            //for(int ii = 0; ii < dr.ItemArray.Length; ii++)
                            //{
                            //    if (!(dr.ItemArray[ii].GetType() == typeof(System.DBNull)))
                            //        drMDoc.ItemArray[ii] = dr.ItemArray[ii];
                            //}

                            drMDoc["SYSN"]   = x;
                            drMDoc["SOURCE"] = NSI.DOCSRC_LOAD;
                            drMDoc["TIMECR"] = DateTime.Now;

                            if (xCL.nCommand == AppC.F_LOAD_DOC)
                            {
                                drMDoc["TYPOP"] = AppC.TYPOP_DOCUM;
                            }
                            else
                            {
                                drMDoc["TYPOP"] = AppC.TYPOP_PRMK;
                            }

                            if ((drMDoc["NOMD"] is string) && (((string)drMDoc["NOMD"]).Length > 0))
                            {
                            }
                            else
                            {
                                drMDoc["NOMD"] = xCLoad.xLP.sNomDoc;
                            }
                            if ((drMDoc["DOCBC"] is string) && (((string)drMDoc["DOCBC"]).Length > 0))
                            {
                            }
                            else
                            {
                                drMDoc["DOCBC"] = xCLoad.xLP.sBC_Doc;
                            }
                            if ((drMDoc["MLBC"] is string) && (((string)drMDoc["MLBC"]).Length > 0))
                            {
                            }
                            else
                            {
                                drMDoc["MLBC"] = xCLoad.xLP.sBC_ML;
                            }
                            drMDoc["CHKSSCC"] = 0;
                            dtDocs.Rows.Add(drMDoc);
                        }
                        // установка существующего ключа (SYSN)
                        // каскадно должен измениться и в детальных
                        //dr["DIFF"] = NSI.DOCCTRL.UNKNOWN;
                        dr["SYSN"] = drMDoc["SYSN"];
                        nM         = 0;
                        nNPP       = 1;
                        foreach (DataRow drZ in drDetZ)
                        {
                            nM += SetOneDetZ(ref sD, dtZVK, ds, drZ, drMDoc, ref nNPP);
                            nNPP++;
                        }
                        drMDoc["MESTZ"]  = nM;
                        drMDoc["SOURCE"] = NSI.DOCSRC_LOAD;

                        if (xCL.dr1st == null)
                        {
                            xCL.dr1st = drMDoc;
                        }
                    }
                    else
                    {
                        sErr = String.Format("{0}-Детальные строки не найдены!", dr["SYSN"]);
                        nRet = AppC.RC_CANCEL;
                    }
                }
            }

            // возвращаем таблицу обратно и связи в DataSet
            //xNSI.dsM.Tables.Add(xNSI.dsM.Tables[NSI.BD_DOUTD]);
            //xNSI.dsM.Relations.Add(dsRel);


            return(nRet);
        }
コード例 #30
0
ファイル: ProceedSSCC.cs プロジェクト: TabVV/SkladDisp
        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);
        }