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); }
public int ProceedSSCC(ScanVarRM xSc, ref PSC_Types.ScDat scD) { ServerExchange xSE = null; return(ProceedSSCC(xSc, ref scD, xSE)); }
private int FindSSCCInZVK(ScanVarRM xSc, ref PSC_Types.ScDat sc) { int nRet = AppC.RC_NOSSCC; sc.ZeroZEvals(); if (bZVKPresent) { } return(nRet); }
// добавление в список ТТН отмаркированного/сборного поддона 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); }
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); } } } } }
// 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); }
// Обработка сканирования на панели Документов 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); } }
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; } } }
/// вставка записи с виртульной продукцией (пусто, 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); }
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); }
//***==================== 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); }
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); }
// добавление в список ТТН отмаркированного поддона 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); }
//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"); }
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); }
// установка полей ввода [+ сброс информационных] 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(); } }
// обработка выполненного сканирования 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; }
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)); }
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; } } }
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); }
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); } } }
// подготовка 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); }
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); }
// добавление полученных заявок в рабочие таблицы 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); }
/// 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); }
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; //} }
/// // обработка 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); }
// продукция на какой-то из наших этикеток 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); }
// добавление полученных заявок в рабочие таблицы 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); }
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); }