public int ProceedSSCC(ScanVarGP xSc, ref PSC_Types.ScDat scD) { ServerExchange xSE = null; return(ProceedSSCC(xSc, ref scD, xSE)); }
//private string SP_GLN = "4810268"; private void OnScanPL(object sender, BarcodeScannerEventArgs e) { if (e.nID != BCId.NoData) { xScan = new ScanVarGP(e, xNSI.DT["NS_AI"].dt); //if ((xScan.bcFlags == ScanVarGP.BCTyp.SP_SSCC_EXT) || // (xScan.bcFlags == ScanVarGP.BCTyp.SP_SSCC_INT)) if ((xScan.bcFlags & ScanVarGP.BCTyp.SP_SSCC) > 0) { tSSCC.Text = xScan.Dat; if (bDocIsKMPL) { // для комплектации if (xMF.StoreSSCC(xScan, nNomPodd, false, out dv) == AppC.RC_OKB) { // предложенный SSCC может быть проставлен bMaySetSSCC = true; } else { bMaySetSSCC = false; } } else {// для всего остального tSSCC.Text = xScan.Dat; } } } }
// Происхождение - из таблицы public AddrInfo(string sA, int nSklad) { m_Scan = null; m_Sklad = nSklad; ScanDT = DateTime.MinValue; Addr = sA; }
// ожидание сканирования для спецрежимов private void WaitScan4Func(int nWaitMode, string sMsg, string sHeader, ScanVarGP xSc) { nSpecAdrWait = nWaitMode; tbPanP2G.Visible = false; xFPan.IFaceReset(true); if ((nWaitMode == AppC.F_GENSCAN) || (nWaitMode == AppC.F_SIMSCAN)) { xFPan.InfoHeightUp(true, 2); } xFPan.ShowP(6, 28, sMsg, sHeader); if (nWaitMode == AppC.F_SIMSCAN) { tbPanP1G.Focus(); } ehCurrFunc += new Srv.CurrFuncKeyHandler(Keys4FixAddr); if (xSc != null) { SpecScan(xSc); W32.keybd_event(W32.VK_ENTER, W32.VK_ENTER, 0, 0); W32.keybd_event(W32.VK_ENTER, W32.VK_ENTER, W32.KEYEVENTF_KEYUP, 0); } }
// добавление в список ТТН отмаркированного/сборного поддона 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 AddrInfo(ScanVarGP xSc, int nSklad) { m_Scan = xSc; m_Sklad = nSklad; ScanDT = xSc.ScanDTime; if ((xSc.bcFlags & ScanVarGP.BCTyp.SP_SSCC) > 0) { nType = ADR_TYPE.SSCC; Addr = xSc.Dat; } else { nType = ADR_TYPE.OBJECT; Addr = xSc.Dat.Substring(2); } }
// Обработка сканирования на панели Документов 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); } }
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); }
// продукция на какой-то из наших этикеток 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 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 int ProceedAdrNew(ScanVarGP xSc, ref PSC_Types.ScDat scD) { int nRet = AppC.RC_OK, nSrcOrDst = 0; // 1-From, 2-To bool IsSSCC, bOperReady; string sA1, sA2; AddrInfo xA; // значение адреса (без AI) //scD.sN = xSc.Dat.Substring(2); if ((xSc.bcFlags & ScanVarGP.BCTyp.SP_SSCC) > 0) { IsSSCC = true; scD.sN = xSc.Dat; // SSCC полностью } else { IsSSCC = false; scD.sN = xSc.Dat.Substring(2); // значение адреса (без AI) } if ((xSm.xAdrFix1 != null) && (!IsSSCC)) {// зафиксирован адрес, пришел еще один //if (!xCDoc.xOper.bObjOperScanned) if ((xCDoc.xOper.nOperState & AppC.OPR_STATE.OPR_OBJ_SET) == 0) {// поддон еще не сканировался, сейчас пришел адрес отправителя nSrcOrDst = 1; xCDoc.xOper.SetOperDst(xSm.xAdrFix1, xCDoc.xDocP.nTypD, false); } else {// поддон уже сканировался, сейчас пришел адрес получателя nSrcOrDst = 2; xCDoc.xOper.SetOperSrc(xSm.xAdrFix1, xCDoc.xDocP.nTypD, false); } } else {// фиксированных адресов пока не было nSrcOrDst = SrcOrDest(xSc, ref scD); } // if ((nSrcOrDst == 1) || (nSrcOrDst == 2)) // {// отсканированным адресом следует воспользоваться как адресом отправителя или получателя // AddrInfo xA = new AddrInfo(xSc, xSm.nSklad); // if (!xCDoc.xOper.IsFillSrc()) // nSrcOrDst = 1; // else // { // if (xCDoc.nTypOp == AppC.TYPOP_DOCUM) // nSrcOrDst = 1; // else // { // if (!xCDoc.xOper.IsFillDst() && !xCDoc.xOper.bObjOperScanned) // { // if (xCDoc.xOper.xAdrSrc.Addr != scD.sN) // { // DialogResult drQ = MessageBox.Show("Изменить \"ИЗточник\" (Enter)?\n(ESC) - отмена", // "Снова адрес!", // MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); // if (drQ == DialogResult.OK) // nSrcOrDst = 1; // else // nSrcOrDst = 0; // } // else // nSrcOrDst = 1; // } // else // nSrcOrDst = 2; // } // } //} //if (nSrcOrDst > 0) //{// отсканированным адресом следует воспользоваться как адресом отправителя или получателя // if (nSrcOrDst == 1) // {// это источник // if (xCDoc.xOper.GetDst(false) == xAFromScan.Addr) // xAFromScan = null; // else // xCDoc.xOper.SetOperSrc(xAFromScan, xCDoc.xDocP.nTypD); // } // else // {// это приемник // if (xCDoc.xOper.GetSrc(false) == xAFromScan.Addr) // xAFromScan = null; // else // xCDoc.xOper.SetOperDst(xAFromScan, xCDoc.xDocP.nTypD); // } // if (xAFromScan == null) // Srv.ErrorMsg("Адреса совпадают...", scD.sN, true); // else // { // if (xCDoc.nTypOp != AppC.TYPOP_DOCUM) // { // if (bShowTTN) // { // tEAN.Text = xCDoc.xOper.GetSrc(true); // tDatMC.Text = xCDoc.xOper.GetDst(true); // nRet = IsOperReady(true, drDet); // if (nRet == AppC.RC_OK) // RetAfterTempMove(); // } // else // Srv.ErrorMsg("ТТН!", true); // } // if (nSrcOrDst == 1) // {//для источника определяем содержимое // if (xPars.GetAdrContentFromSrv) // {//если это требуется // nRet = AdrResult(xSc, ref scD, xAFromScan); // } // } // } //} if ((nSrcOrDst == 1) || (nSrcOrDst == 2)) {// отсканированным адресом следует воспользоваться как адресом отправителя или получателя xA = new AddrInfo(xSc, xSm.nSklad); //if (!xCDoc.xOper.bObjOperScanned if (((xCDoc.xOper.nOperState & AppC.OPR_STATE.OPR_OBJ_SET) == 0) && (xPars.UseAdr4DocMode)) {// пока только для ... инвентаризации ... if (xCDoc.xOper.nOperState == AppC.OPR_STATE.OPR_EMPTY) { PSC_Types.ScDat scEmp = new PSC_Types.ScDat(new BarcodeScannerEventArgs(BCId.Code128, "")); if (!bInEasyEditWait) { SetDetFields(true, ref scEmp); } } } if (nSrcOrDst == 1) {// это источник xCDoc.xOper.SetOperSrc(xA, xCDoc.xDocP.nTypD, true); sA1 = xA.AddrShow; sA2 = xCDoc.xOper.GetDst(false); } else {// это приемник sA1 = xCDoc.xOper.GetSrc(false); sA2 = xA.AddrShow; if (xA.Addr == sA1) { Srv.ErrorMsg("Адреса совпадают...", sA2, true); return(AppC.RC_CANCEL); } if (xCDoc.xOper.xAdrDst_Srv != null) { // а сервер задавал адрес приемника if (xCDoc.xOper.xAdrDst_Srv.Addr != xA.Addr) { // и они разные DialogResult drQ = MessageBox.Show(String.Format( "(Yes) - {0}\n<<с сервера>>\n(No) - {1}\n<<отсканирован>>\n(ESC) - отмена", xCDoc.xOper.xAdrDst_Srv.Addr, xA.Addr), "Адрес назначения ?!", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); if (drQ == DialogResult.Yes) { xA = xCDoc.xOper.xAdrDst_Srv; // сохраним приемником рекомендованный } else if (drQ == DialogResult.No) { // сохраним приемником отсканированный } else { return(AppC.RC_CANCEL); } } } xCDoc.xOper.SetOperDst(xA, xCDoc.xDocP.nTypD, true); } //var d = ZeroCell(xCDoc.xOper.xAdrSrc, xCDoc.xOper.xAdrDst); //if (d != null) //{ // xCDoc.xOper = new CurOper(xCDoc.xDocP.DType); //} bOperReady = (xCDoc.xOper.nOperState & AppC.OPR_STATE.OPR_READY) > 0; if (bOperReady) {// операция готова к отправке, все введено nRet = IsOperReady(); if (nRet == AppC.RC_OK) { if (IsAutoMark()) { } else { if (xCDoc.xDocP.nTypD == AppC.TYPD_OPR) { RetAfterTempMove(); // возможен возврат из временного перемещения } } } } else { //if (!xCDoc.xOper.bObjOperScanned) if ((xCDoc.xOper.nOperState & AppC.OPR_STATE.OPR_OBJ_SET) == 0) { if (nSrcOrDst == 1) { //для источника определяем содержимое if (AppC.xDocTInf[xCDoc.xDocP.nTypD].TryFrom && xPars.UseAdr4DocMode) { //если это требуется if (!IsSSCC) { nRet = AdrResult(xSc, ref scD, xA); } else { nRet = AppC.RC_CONTINUE; } } } else { //tAdrTo.Text = xCDoc.xOper.GetDst(true); } } } } else { if (nSrcOrDst == AppC.RC_NOTADR) { nRet = AppC.RC_CONTINUE; } } return(nRet); }
private void OnScanPL(object sender, BarcodeScannerEventArgs e) { string s; ScanVarGP xScan; if (e.nID != BCId.NoData) { xScan = new ScanVarGP(e, xNSI.DT["NS_AI"].dt); if (e.nID == BCId.Code128) { if (((xScan.bcFlags & ScanVarGP.BCTyp.SP_ADR_OBJ) > 0)) {// похоже на адрес (№ шлюза) s = e.Data.Substring(2); xPark.ShlAdr = s; xPark.xA = new MainF.AddrInfo(xScan, xMainF.xSm.nSklad); tShlAddr.Text = s; lShlName.Text = xPark.xA.AddrShow; TryFixAvto(); } else { switch (e.Data.Length) { case 14: // похоже на № путевого tNDoc.Text = e.Data.Substring(7); xPark.NPtvList = int.Parse(tNDoc.Text); if ((bEditMode == true) && (xPark.NShl > 0)) { EndEditP(); if ((bsSh.Count == 0) || (xPark.IsChangePars())) { LoadAvtoList(); } } break; case 12: if (e.Data.Substring(0, 3) == "778") { // похоже на № пропуска xPark.Propusk = e.Data.Substring(3); tPropusk.Text = e.Data.Substring(3); TryFixAvto(); } //else if (e.Data.Substring(0, 2) == "99") //{// похоже на адрес (№ шлюза) // s = e.Data.Substring(2); // xPark.ShlAdr = s; // tShlAddr.Text = s; // TryFixAvto(); //} break; } } } } }
// Обработка сканирования на панели Документов private void ProceedScanDoc(ScanVarGP xSc, ref PSC_Types.ScDat s) { int nRet = AppC.RC_OK; string sH, sPar, sErr = ""; CurLoad ret; ServerExchange xSE = new ServerExchange(this); if ((xSc.bcFlags & ScanVarGP.BCTyp.SP_SSCC_INT) > 0) { xCLoad = new CurLoad(AppC.UPL_ALL); xCLoad.sSSCC = xSc.Dat; xCLoad.drPars4Load = xNSI.DT[NSI.BD_KMPL].dt.NewRow(); LoadKomplLst(xCLoad.drPars4Load, AppC.F_LOADKPL); } else { ret = TransDocCode(ref s, xSE); if (ret != null) { xCLoad = ret; if (xSE.FullCOM2Srv.Length == 0) { if (bInLoad == true) { W32.keybd_event(W32.VK_ESC, W32.VK_ESC, 0, 0); W32.keybd_event(W32.VK_ESC, W32.VK_ESC, 0, 0); W32.keybd_event(W32.VK_ESC, W32.VK_ESC, W32.KEYEVENTF_KEYUP, 0); W32.keybd_event(W32.VK_ESC, W32.VK_ESC, W32.KEYEVENTF_KEYUP, 0); } else { LoadDocFromServer(AppC.F_INITRUN, new KeyEventArgs(Keys.Enter), ref ehCurrFunc); } } else { AutoSaveDat(); LoadFromSrv dgL = new LoadFromSrv(DocFromSrv); xCLoad.nCommand = AppC.F_LOAD_DOC; xCLoad.sComLoad = AppC.COM_ZZVK; sErr = xSE.ExchgSrv(AppC.COM_ZZVK, "", "", dgL, null, ref nRet); MessageBox.Show("Загрузка окончена - " + sErr, "Код - " + nRet.ToString()); PosOnLoaded(nRet); Back2Main(); } } else { xCUpLoad = new CurUpLoad(); if (xSE.FullCOM2Srv.Length == 0) { sPar = String.Format("BC={0};BCT={1}", xSc.Dat, xSc.Id.ToString().ToUpper()); sErr = xSE.ExchgSrv(AppC.COM_UNKBC, sPar, "", null, null, ref nRet); } else { AutoSaveDat(); LoadFromSrv dgL = new LoadFromSrv(DocFromSrv); xCLoad.nCommand = AppC.F_LOAD_DOC; xCLoad.sComLoad = AppC.COM_ZZVK; sErr = xSE.ExchgSrv(AppC.COM_ZZVK, "", "", dgL, null, ref nRet); MessageBox.Show("Загрузка окончена - " + sErr, "Код - " + nRet.ToString()); PosOnLoaded(nRet); Back2Main(); } if (nRet != AppC.RC_OK) { nRet = xSE.ServerRet; if (nRet != AppC.RC_NEEDPARS) { } Srv.PlayMelody(W32.MB_4HIGH_FLY); sH = "Ошибка!"; } else { sH = "Код отправлен"; } Srv.ErrorMsg(sErr, sH, false); } } }
public bool StoreSSCC(ScanVarGP xSc, int nPoddonN, bool bNeedWrite, out DataView dv) { int n = 0; string s, sRf, sF, sD = xSc.Dat; bool //bIsExt, bRet = AppC.RC_CANCELB; DataView dvZ; DialogResult dRez; if (sD.Substring(2, 1) == "1") { //bIsExt = true; sF = "SSCC"; } else { //bIsExt = false; sF = "SSCCINT"; } /// 14.02.18 sF = "SSCC"; dv = null; if (xCDoc.drCurRow == null) { return(bRet); } try { if ((int)xCDoc.drCurRow["TYPOP"] == AppC.TYPOP_KMPL) { if (nPoddonN > 0) { //string sRf = xCDoc.DefDetFilter() + String.Format(" AND (SSCC='{0}')", sSSCC); //dv = new DataView(xNSI.DT[NSI.BD_DOUTD].dt, sRf, "", DataViewRowState.CurrentRows); //n = dv.Count; if (IsUsedSSCC(sD)) { dRez = MessageBox.Show( String.Format("SSCC={0}\nОтменить (Enter)?\n(ESC)-проставить SSCC", sD), "Уже использовался!", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); n = (dRez == DialogResult.OK) ? 1 : 0; } if (n == 0) {// такой SSCC еще не использовался sRf = xCDoc.DefDetFilter() + String.Format(" AND (NPODDZ={0})", nPoddonN); dv = new DataView(xNSI.DT[NSI.BD_DOUTD].dt, sRf, "", DataViewRowState.CurrentRows); if (dv.Count > 0) { foreach (DataRowView drv in dv) { if ((drv.Row[sF]) != System.DBNull.Value) { s = (drv.Row[sF]).ToString(); if ((s.Length > 0) && (s != sD)) { dRez = MessageBox.Show( String.Format("SSCC={0} уже установлен\nОтменить (Enter)?\n(ESC)-проставить SSCC", drv.Row["SSCC"]), String.Format("Поддон {0}", nPoddonN), MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); n = (dRez == DialogResult.OK) ? 1 : 0; break; } } } if (n == 0) {// поддон еще не отмечался // добавим фильтр на выполненные sRf += String.Format("AND(READYZ<>{0})", (int)NSI.READINESS.FULL_READY); dvZ = new DataView(xNSI.DT[NSI.BD_DIND].dt, sRf, "", DataViewRowState.CurrentRows); n = dvZ.Count; if (n > 0) {// не вся заявка закрыта if (!xCDoc.bFreeKMPL) { dRez = MessageBox.Show( "Заявка не выполнена!\nОтменить (Enter)?\r\n(ESC)-проставить SSCC", String.Format("Поддон {0}", nPoddonN), MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); n = (dRez == DialogResult.OK) ? 1 : 0; } else { n = 0; } } if (n == 0) { bRet = AppC.RC_OKB; if (bNeedWrite) { SetSSCCForPoddon(xSc.Dat, dv, nPoddonN); } //foreach (DataRowView drv in dv) //{ // (drv.Row[sF]) = sSSCC; //} //MessageBox.Show(String.Format("Поддон {0} подготовлен ({1}) позиций", // xCDoc.xNPs.Current, dv.Count)); //xCDoc.xNPs.TryNextPoddon(true); //tCurrPoddon.Text = xCDoc.xNPs.Current.ToString(); } } } else { Srv.ErrorMsg("Нет отсканированных!"); } } else { Srv.ErrorMsg("SSCC поддона уже использовался!"); } } else { Srv.ErrorMsg("№ поддона не установлен!"); } } else { Srv.ErrorMsg("Только для комплектации!"); } } catch (Exception e) { Srv.ErrorMsg("Только для комплектации!"); } return(bRet); }
private int AdrResult(ScanVarGP xSc, ref PSC_Types.ScDat scD, AddrInfo xA) { int nRec, nRet = AppC.RC_OK; DataRow dr; DialogResult dRez; nRet = ConvertAdr2Lst(xA, AppC.COM_ADR2CNT, "ROW", false, NSI.SRCDET.FROMADR); if (nRet == AppC.RC_OK) { nRec = xCLoad.dtZ.Rows.Count; if (nRec == 1) { scD = new PSC_Types.ScDat(new ScannerAll.BarcodeScannerEventArgs(ScannerAll.BCId.NoData, "")); //SetVirtScan(xCLoad.dtZ.Rows[0], ref scD, true, false); SetVirtScan(xCLoad.dtZ.Rows[0], ref scD, true, true); scD.nRecSrc = (int)NSI.SRCDET.FROMADR; xCDoc.xOper.SSCC = scD.sSSCC; // Если пришел адрес назначения if ((scD.xOp.xAdrDst != null) && (scD.xOp.xAdrDst.Addr.Length > 0)) { xCDoc.xOper.xAdrDst_Srv = scD.xOp.xAdrDst; // сохранить рекомендации сервера if (xDestInfo == null) { int FontS = 28, INFWIN_WIDTH = 230, INFWIN_HEIGHT = 90; System.Drawing.Rectangle recInf, screen = Screen.PrimaryScreen.Bounds; recInf = new System.Drawing.Rectangle((screen.Width - INFWIN_WIDTH) / 2, 200, INFWIN_WIDTH, INFWIN_HEIGHT); xDestInfo = new Srv.HelpShow(this, recInf, 1, FontS, 0); } xDestInfo.ShowInfo(new string[] { scD.xOp.xAdrDst.AddrShow }, ref ehCurrFunc); } scD.xOp = (xCDoc.xOper == null) ? new CurOper(false) : xCDoc.xOper; if ((xCDoc.xDocP.TypOper == AppC.TYPOP_DOCUM) || (xCDoc.xDocP.TypOper == AppC.TYPOP_KMPL) || (xCDoc.xDocP.TypOper == AppC.TYPOP_KMSN)) {// будет редактирование количества "отсканированной" продукции return(AppC.RC_CONTINUE); } // далее выполняется только для операций if (xCDoc.xDocP.TypOper == AppC.TYPOP_MOVE) { if (scD.tTyp == AppC.TYP_TARA.TARA_PODDON) {// для поддонов редактирования не будет scCur = scD; if (AddDet1(ref scD, out dr)) { //xCDoc.xOper.bObjOperScanned = true; xCDoc.xOper.SetOperObj(dr, xCDoc.xDocP.nTypD, false); //SetDetFields(false); if (dr != null) { drDet = dr; //dr["SSCC"] = scD.sSSCC; //xCDoc.xOper.SSCC = scD.sSSCC; } } } } //IsOperReady(false); } else if (nRec > 1) {// ROW - добавление группы if (xCDoc.xDocP.TypOper == AppC.TYPOP_DOCUM) { dRez = MessageBox.Show( String.Format("Новых строк {0}\nДобавить (Enter)?\n(ESC)- вывод на экран", xCLoad.dtZ.Rows.Count), "Добавление продукции", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); } else { dRez = DialogResult.Cancel; } if (dRez == DialogResult.OK) { //nRet = AddGroupDet(AppC.RC_MANYEAN, (int)NSI.SRCDET.FROMADR, xA.AddrShow); nRet = AddGroupDet(AppC.RC_MANYEAN, (int)NSI.SRCDET.FROMADR, ""); } else { if (AppC.RC_OK == ConvertAdr2Lst(xA, "TXT")) { // справочная информация, просто выводится xHelpS.ShowInfo(xInf, ref ehCurrFunc); } } } } return(nRet); }
// обработка выполненного сканирования 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; }
/// какой из адресов следует заполнить (по типу движения документа) private int SrcOrDest(ScanVarGP xSc, ref PSC_Types.ScDat scD) { bool bSrcNeed = AppC.xDocTInf[xCDoc.xDocP.nTypD].AdrFromNeed, bDstNeed = AppC.xDocTInf[xCDoc.xDocP.nTypD].AdrToNeed; int nNumDocType = xCDoc.xDocP.nTypD, nSrcOrDst = 0; AppC.MOVTYPE MoveType = AppC.xDocTInf[xCDoc.xDocP.nTypD].MoveType; if ((xSc.bcFlags & ScanVarGP.BCTyp.SP_ADR_OBJ) > 0) {// это обычный адрес switch (MoveType) { case AppC.MOVTYPE.AVAIL: // инвентаризации nSrcOrDst = 1; break; case AppC.MOVTYPE.RASHOD: // расходные документы nSrcOrDst = 1; break; case AppC.MOVTYPE.PRIHOD: // документы поступления nSrcOrDst = 2; break; case AppC.MOVTYPE.MOVEMENT: // документы перемещения if (!xCDoc.xOper.IsFillSrc()) { nSrcOrDst = 1; } else { if (!xCDoc.xOper.IsFillDst() && ((xCDoc.xOper.nOperState & AppC.OPR_STATE.OPR_OBJ_SET) == 0)) { nSrcOrDst = 0; // будет запрос } else { nSrcOrDst = 2; // будет приемник } } break; default: if (xCDoc.xOper.IsFillSrc()) { // источник - задан if (bDstNeed) { //... - true if (!xCDoc.xOper.IsFillDst()) { nSrcOrDst = 2; } } else { //... - false // надо посмотреть, чем заполнен if (!xCDoc.xOper.IsFillDst()) { nSrcOrDst = 1; } } } else { // источник - пусто if (bSrcNeed) { nSrcOrDst = 1; } else { if (bDstNeed) { // false - true if (!xCDoc.xOper.IsFillDst()) { nSrcOrDst = 2; } } else { // false - false if (!xCDoc.xOper.IsFillDst()) { nSrcOrDst = 1; } } } } break; } } else {// для SSCC nSrcOrDst = AppC.RC_NOTADR; //switch (MoveType) //{ // case AppC.MOVTYPE.AVAIL: // инвентаризации // if ((xCDoc.xOper.nOperState & AppC.OPR_STATE.OPR_SRC_SET) > 0) // nSrcOrDst = AppC.RC_NOTADR; // использовать содержимое // else // { // if (xPars.UseAdr4DocMode) // nSrcOrDst = AppC.RC_CONTINUE; // сначала - адрес // else // nSrcOrDst = AppC.RC_NOTADR; // использовать содержимое // } // break; // case AppC.MOVTYPE.RASHOD: // расходные документы // if ((xCDoc.xOper.nOperState & AppC.OPR_STATE.OPR_SRC_SET) == 0) // nSrcOrDst = 1; // else // { // if ((xCDoc.xOper.nOperState & AppC.OPR_STATE.OPR_OBJ_SET) > 0) // nSrcOrDst = 2; // else // nSrcOrDst = AppC.RC_NOTADR; // } // break; // case AppC.MOVTYPE.PRIHOD: // документы поступления // if ((xCDoc.xOper.nOperState & AppC.OPR_STATE.OPR_OBJ_SET) > 0) // nSrcOrDst = 2; // использовать содержимое // else // nSrcOrDst = AppC.RC_NOTADR; // сначала - адрес // break; // case AppC.MOVTYPE.MOVEMENT: // документы перемещения // if ((xCDoc.xOper.nOperState == AppC.OPR_STATE.OPR_EMPTY)) // { // nSrcOrDst = 1; // адрес-источник // } // else // { // if ((xCDoc.xOper.nOperState & AppC.OPR_STATE.OPR_OBJ_SET) > 0) // {// есть объект, но он должен быть коробка или штучка // nSrcOrDst = 2; // адрес-источник // } // else // { // nSrcOrDst = AppC.RC_NOTADR; // } // } // nSrcOrDst = AppC.RC_NOTADR; // break; // default: // if (xCDoc.xOper.IsFillSrc()) // {// источник - задан // if (bDstNeed) // {//... - true // if (!xCDoc.xOper.IsFillDst()) // nSrcOrDst = 2; // } // else // {//... - false // // надо посмотреть, чем заполнен // if (!xCDoc.xOper.IsFillDst()) // nSrcOrDst = 1; // } // } // else // {// источник - пусто // if (bSrcNeed) // nSrcOrDst = 1; // else // { // if (bDstNeed) // {// false - true // if (!xCDoc.xOper.IsFillDst()) // nSrcOrDst = 2; // } // else // {// false - false // if (!xCDoc.xOper.IsFillDst()) // nSrcOrDst = 1; // } // } // } // break; //} } if (nSrcOrDst == 0) {// выяснить не удалось DialogResult drQ = MessageBox.Show("\"Источник\" - Yes\n\"Приемник\" - No\nОтмена - Cancel", "Какой адрес установить?", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); if (drQ == DialogResult.Yes) { nSrcOrDst = 1; } else if (drQ == DialogResult.No) { nSrcOrDst = 2; } } return(nSrcOrDst); }