public bool EnterCountSetSelfControl(int Count) { if (CurrentAction != ActionSet.EnterCount) { FExcStr = "Неверно! " + WhatUNeed(); return(false); } if (Count <= 0) { FExcStr = "Количество указано неверно!"; return(false); } string QueryPart; if (CCItem.Count == Count) { //Контроль удачно пройден, очистим таблицу QueryPart = "set $КонтрольНабора.Контроль = -1*($КонтрольНабора.Контроль -1) "; DataRow[] DR = TableSet.Select("Item = '" + CCItem.ID + "'"); //Полюбому найдется строка и полюбому только одна DR[0].Delete(); } else { QueryPart = "set $КонтрольНабора.Контроль = $КонтрольНабора.Контроль - 1 "; } string TextQuery = "update DT$КонтрольНабора " + QueryPart + "where " + "DT$КонтрольНабора .iddoc = :iddoc " + "and DT$КонтрольНабора .$КонтрольНабора.Товар = :item "; QuerySetParam(ref TextQuery, "iddoc", DocSet.ID); QuerySetParam(ref TextQuery, "item", CCItem.ID); if (!ExecuteWithoutRead(TextQuery)) { return(false); } PreviousAction = "Проверено " + CCItem.InvCode.Trim() + " - " + Count.ToString() + ". " + (CCItem.Count == Count ? "" : "НЕВЕРНО!"); CurrentAction = ActionSet.ScanItem; FExcStr = WhatUNeed(); bool result = CCItem.Count == Count ? true : false; //чтобы издать печальный звук CCItem = new StructItemSet(); if (result && TableSet.Rows.Count == 0) { //все выбили, валим отсчюда! return(ToModeSetComplete()); } return(result); } // EnterCountSetSelfControl
private bool RBSetSelfControl(string Barcode) { if (CurrentAction != ActionSet.ScanItem) { FExcStr = "Неверно! " + WhatUNeed(); return(false); } string TextQuery = "SELECT " + "Units.parentext as ItemID, " + "Units.$Спр.ЕдиницыШК.ОКЕИ as OKEI " + "FROM $Спр.ЕдиницыШК as Units (nolock) " + "LEFT JOIN $Спр.Товары as Goods (nolock) " + "ON Goods.id = Units.parentext " + "WHERE Units.$Спр.ЕдиницыШК.Штрихкод = :Barcode "; QuerySetParam(ref TextQuery, "Barcode", Barcode); DataTable DT; if (!ExecuteWithRead(TextQuery, out DT)) { return(false); } if (DT.Rows.Count == 0) { FExcStr = "С таким штрихкодом товар не найден! " + WhatUNeed(); return(false); } DataRow[] DR = TableSet.Select("Item = '" + DT.Rows[0]["ItemID"].ToString() + "'"); if (DR.Length == 0) { FExcStr = "Товара нет в сборочном или он уже проконтролирован!"; return(false); } CCItem = new StructItemSet(); CCItem.ID = DR[0]["Item"].ToString(); CCItem.InvCode = DR[0]["InvCode"].ToString(); CCItem.Name = DR[0]["Descr"].ToString(); CCItem.Details = (int)(decimal)DR[0]["Details"]; CCItem.Count = (int)(decimal)DR[0]["Amount"]; CurrentAction = ActionSet.EnterCount; FExcStr = WhatUNeed(); return(true); }
private bool MultiplesOKEI2(ref StructItemSet Item) { string TextQuery = "SELECT " + "isnull(OKEI2.descr, OKEI.descr) as Name, " + "CAST(Units.$Спр.ЕдиницыШК.Коэффициент as int) as Coef, " + "ceiling(:amount/$Спр.ЕдиницыШК.Коэффициент ) as AmountOKEI2 " + "FROM " + "$Спр.ЕдиницыШК as Units (nolock) " + "inner join $Спр.ОКЕИ as OKEI (nolock) " + "on OKEI.id = Units.$Спр.ЕдиницыШК.ОКЕИ " + "left join $Спр.ОКЕИ as OKEI2 (nolock) " + "on OKEI2.id = Units.$Спр.ЕдиницыШК.ОКЕИ2 " + "WHERE " + "Units.parentext = :CurrentItem " + "and OKEI.id <> :OKEIKit" + "and Units.ismark = 0 " + "and ceiling(:amount/$Спр.ЕдиницыШК.Коэффициент )*$Спр.ЕдиницыШК.Коэффициент = :amount " + "order by AmountOKEI2"; QuerySetParam(ref TextQuery, "CurrentItem", Item.ID); QuerySetParam(ref TextQuery, "amount", Item.Count); QuerySetParam(ref TextQuery, "OKEIKit", OKEIKit); DataTable DT; if (!ExecuteWithRead(TextQuery, out DT)) { return(false); } if (DT.Rows.Count == 0) { Item.OKEI2Count = Item.Count; Item.OKEI2 = "шт"; Item.OKEI2Coef = 1; } else { //Бред какой-то, но так, чтобы не звонили по ночам Item.OKEI2Count = (int)(decimal)DT.Rows[0]["AmountOKEI2"]; Item.OKEI2 = DT.Rows[0]["Name"].ToString(); Item.OKEI2Coef = (int)DT.Rows[0]["Coef"]; } return(true); } // MultiplesOKEI2
//BASE METHOD's public bool ToModeSetSelfControl() { if (!LoadTableSet()) { return(false); } if (TableSet.Rows.Count == 0) { //Ничего нет для самоконтроля, пойдем в завершение набора return(ToModeSetComplete()); } CCItem = new StructItemSet(); PreviousAction = ""; FExcStr = "Сканируйте товар!"; FCurrentMode = Mode.SetSelfContorl; CurrentAction = ActionSet.ScanItem; return(true); }
} // EnterCountSampleSet private bool RDSampleSet(string IDD, string AdressID) { string IDDoc; string DocType; Dictionary <string, object> DataMap; if (!GetDocNew(IDD, out IDDoc, out DocType, out DataMap)) { return(false); } if (DocType != "АдресПеремещение") { FExcStr = "Неверный тип документа!"; return(false); } DataTable DT; string TextQuery = "DECLARE @curdate DateTime; " + "SELECT @curdate = DATEADD(DAY, 1 - DAY(curdate), curdate) FROM _1ssystem (nolock); " + "SELECT TOP 1" + "journ.iddoc as IDDOC, " + "journ.docno as DocNo, " + "journ.date_time_iddoc as DateDoc, " + "DocATStrings.$АдресПеремещение.Товар as ID, " + "DocATStrings.lineno_ as LINENO_, " + "Goods.$Спр.Товары.КоличествоДеталей as Details, " + "DocATStrings.$АдресПеремещение.Адрес0 as Adress0, " + "Goods.descr as ItemName, " + "Goods.$Спр.Товары.ИнвКод as InvCode, " + "DocATStrings.$АдресПеремещение.Количество as Count, " + "DocAT.$АдресПеремещение.КолСтрок as Rows, " + "Sections.descr as AdressName, " + "ISNULL(AOT.Balance, 0) as Balance " + "FROM " + "_1sjourn as journ (nolock) " + "LEFT JOIN DH4327 as DocAT (nolock)ON DocAT.iddoc = journ.iddoc " + "LEFT JOIN DT4327 as DocATStrings (nolock) ON DocAT.iddoc = DocATStrings.iddoc " + "LEFT JOIN $Спр.Товары as Goods (nolock) " + "ON Goods.ID = DocATStrings.$АдресПеремещение.Товар " + "LEFT JOIN $Спр.Секции as Sections (nolock) " + "ON Sections.ID = DocATStrings.$АдресПеремещение.Адрес0 " + "LEFT JOIN ( " + "select " + "RegAOT.$Рег.АдресОстаткиТоваров.Товар as item, " + "RegAOT.$Рег.АдресОстаткиТоваров.Адрес as adress, " + "sum(RegAOT.$Рег.АдресОстаткиТоваров.Количество ) as balance " + "from " + "RG$Рег.АдресОстаткиТоваров as RegAOT (nolock) " + "where " + "period = @curdate " + "and $Рег.АдресОстаткиТоваров.Склад = :Warehouse " + "and $Рег.АдресОстаткиТоваров.Состояние = 2 " + "group by RegAOT.$Рег.АдресОстаткиТоваров.Товар , RegAOT.$Рег.АдресОстаткиТоваров.Адрес " + ") as AOT " + "ON AOT.item = DocATStrings.$АдресПеремещение.Товар and AOT.adress = DocATStrings.$АдресПеремещение.Адрес0 " + "WHERE " + "DocAT.iddoc = :Doc " + (AdressID == null ? "" : "and DocATStrings.$АдресПеремещение.Адрес0 = :Adress ") + "and journ.ismark = 0 " + "and DocAT.$АдресПеремещение.ТипДокумента = '3' " + "and DocATStrings.$АдресПеремещение.Дата1 = :EmptyDate "; SQL1S.QuerySetParam(ref TextQuery, "Doc", IDD); SQL1S.QuerySetParam(ref TextQuery, "EmptyDate", SQL1S.GetVoidDate()); SQL1S.QuerySetParam(ref TextQuery, "Warehouse", Const.MainWarehouse); if (AdressID != null) { QuerySetParam(ref TextQuery, "Adress", AdressID); } if (!ExecuteWithRead(TextQuery, out DT)) { return(false); } if (DT.Rows.Count > 0) { ATDoc.ID = DT.Rows[0]["IDDOC"].ToString(); } // заглушка // все строчки отобраны, пусть сканируют принтер else { TextQuery = "SELECT TOP 1" + "journ.iddoc as IDDOC, " + "journ.docno as DocNo, " + "journ.date_time_iddoc as DateDoc " + "FROM " + "_1sjourn as journ (nolock) " + "WHERE " + "journ.iddoc = :Doc " + "and journ.ismark = 0 "; SQL1S.QuerySetParam(ref TextQuery, "Doc", IDD); if (!ExecuteWithRead(TextQuery, out DT)) { return(false); } //забъем пустыми для отображения DocSet = new StrictDoc(); DocSet.View = " АдресПеремещение " + DT.Rows[0]["DocNo"].ToString() + " (" + DT.Rows[0]["DateDoc"].ToString() + ")"; ATDoc.ID = DT.Rows[0]["IDDOC"].ToString(); CCItem = new StructItemSet(); CCItem.ID = ""; CCItem.InvCode = ""; CCItem.Name = ""; CCItem.Count = 0; CCItem.CountFact = 0; CCItem.AdressID = ""; CCItem.AdressName = ""; CCItem.CurrLine = 0; CCItem.Details = 0; CCItem.Balance = 0; CurrentAction = ActionSet.Waiting; FExcStr = WhatUNeed(); return(true); } DocSet = new StrictDoc(); DocSet.View = " АдресПеремещение " + DT.Rows[0]["DocNo"].ToString() + " (" + DT.Rows[0]["DateDoc"].ToString() + ")"; DocSet.ID = DT.Rows[0]["IDDOC"].ToString(); DocSet.Rows = (int)(decimal)DT.Rows[0]["Rows"]; //обновим количество не отобранных RefreshAmount(); CCItem = new StructItemSet(); CCItem.ID = DT.Rows[0]["ID"].ToString(); CCItem.InvCode = DT.Rows[0]["InvCode"].ToString(); CCItem.Name = DT.Rows[0]["ItemName"].ToString(); CCItem.Count = (int)(decimal)DT.Rows[0]["Count"]; CCItem.CountFact = (int)(decimal)DT.Rows[0]["Count"]; CCItem.AdressID = DT.Rows[0]["Adress0"].ToString(); CCItem.AdressName = DT.Rows[0]["AdressName"].ToString(); CCItem.CurrLine = (short)DT.Rows[0]["LINENO_"]; CCItem.Details = (int)(decimal)DT.Rows[0]["Details"]; CCItem.Balance = (int)(decimal)DT.Rows[0]["Balance"]; //получим АдресВременныый из склада в АдресПеремещениии TextQuery = "SELECT " + "WareHouse.SP4537 as AdresTemp " + "FROM DH4327 " + "LEFT JOIN sc31 as WareHouse on WareHouse.id = DH4327.SP4308 " + "WHERE DH4327.iddoc = :Doc "; SQL1S.QuerySetParam(ref TextQuery, "Doc", IDD); if (!ExecuteWithRead(TextQuery, out DT)) { return(false); } DocSet.AdressCollect = DT.Rows[0]["AdresTemp"].ToString(); CurrentAction = ActionSet.ScanAdress; FExcStr = WhatUNeed(); return(true); }
//BASE METHOD's private bool ToModeSet(string AdressID, string iddoc) { foreach (string id in DocsSet) { if (!LockDoc(id)) { return(false); } } string TextQuery = "DECLARE @curdate DateTime; " + "SELECT @curdate = DATEADD(DAY, 1 - DAY(curdate), curdate) FROM _1ssystem (nolock); " + "select top 1 " + "DocCC.$КонтрольНабора.Товар as ID, " + "DocCC.lineno_ as LINENO_, " + "Goods.descr as ItemName, " + "Goods.$Спр.Товары.ИнвКод as InvCode, " + "Goods.$Спр.Товары.КоличествоДеталей as Details, " + "DocCC.$КонтрольНабора.Количество as Count, " + "DocCC.$КонтрольНабора.Адрес0 as Adress, " + "DocCC.$КонтрольНабора.Цена as Price, " + "Sections.descr as AdressName, " + "ISNULL(AOT.Balance, 0) as Balance, " + //Реквизиты документа "DocCC.iddoc as IDDOC, " + "journForBill.docno as DocNo, " + "CONVERT(char(8), CAST(LEFT(journForBill.date_time_iddoc, 8) as datetime), 4) as DateDoc, " + "journForBill.iddoc as Bill, " + "DocCCHead.$КонтрольНабора.КолСтрок as Rows, " + "Sector.descr as Sector, " + "DocCCHead.$КонтрольНабора.Сумма as Sum, " + "DocCCHead.$КонтрольНабора.НомерЛиста as Number, " + "DocCCHead.$КонтрольНабора.ФлагСамовывоза as SelfRemovel, " + "Clients.descr as Client, " + "Bill.$Счет.ТипНакладной as TypeNakl, " + "isnull(DocCCHead.$КонтрольНабора.Коробка , :EmptyID) as BoxID, " + "AdressBox.descr as Box " + "from " + "DT$КонтрольНабора as DocCC (nolock) " + "LEFT JOIN DH$КонтрольНабора as DocCCHead (nolock) " + "ON DocCCHead.iddoc = DocCC.iddoc " + "LEFT JOIN $Спр.Товары as Goods (nolock) " + "ON Goods.id = DocCC.$КонтрольНабора.Товар " + "LEFT JOIN $Спр.Секции as Sections (nolock) " + "ON Sections.id = DocCC.$КонтрольНабора.Адрес0 " + "LEFT JOIN ( " + "select " + "RegAOT.$Рег.АдресОстаткиТоваров.Товар as item, " + "RegAOT.$Рег.АдресОстаткиТоваров.Адрес as adress, " + "sum(RegAOT.$Рег.АдресОстаткиТоваров.Количество ) as balance " + "from " + "RG$Рег.АдресОстаткиТоваров as RegAOT (nolock) " + "where " + "period = @curdate " + "and $Рег.АдресОстаткиТоваров.Склад = :Warehouse " + "and $Рег.АдресОстаткиТоваров.Состояние = 2 " + "group by RegAOT.$Рег.АдресОстаткиТоваров.Товар , RegAOT.$Рег.АдресОстаткиТоваров.Адрес " + ") as AOT " + "ON AOT.item = DocCC.$КонтрольНабора.Товар and AOT.adress = DocCC.$КонтрольНабора.Адрес0 " + "LEFT JOIN DH$КонтрольРасходной as DocCB (nolock) " + "ON DocCB.iddoc = DocCCHead.$КонтрольНабора.ДокументОснование " + "LEFT JOIN DH$Счет as Bill (nolock) " + "ON Bill.iddoc = DocCB.$КонтрольРасходной.ДокументОснование " + "LEFT JOIN _1sjourn as journForBill (nolock) " + "ON journForBill.iddoc = Bill.iddoc " + "LEFT JOIN $Спр.Секции as Sector (nolock) " + "ON Sector.id = DocCCHead.$КонтрольНабора.Сектор " + "LEFT JOIN $Спр.Клиенты as Clients (nolock) " + "ON Bill.$Счет.Клиент = Clients.id " + "LEFT JOIN $Спр.Секции as AdressBox (nolock) " + "ON AdressBox.id = DocCCHead.$КонтрольНабора.Коробка " + "where " + "DocCC.iddoc in (:Docs) " + "and DocCC.$КонтрольНабора.Дата5 = :EmptyDate " + "and DocCC.$КонтрольНабора.Корректировка = 0 " + "and DocCC.$КонтрольНабора.Количество > 0 " + (AdressID == null ? "" : "and DocCC.$КонтрольНабора.Адрес0 = :Adress ") + (iddoc == null ? "" : "and DocCC.iddoc = :iddoc ") + "order by " + "DocCCHead.$КонтрольНабора.Сектор , Sections.$Спр.Секции.Маршрут , LINENO_"; DataTable DT; TextQuery = TextQuery.Replace(":Docs", Helper.ListToStringWithQuotes(DocsSet)); QuerySetParam(ref TextQuery, "EmptyDate", GetVoidDate()); QuerySetParam(ref TextQuery, "Warehouse", Const.MainWarehouse); if (iddoc != null) { QuerySetParam(ref TextQuery, "iddoc", iddoc); } if (AdressID != null) { QuerySetParam(ref TextQuery, "Adress", AdressID); } if (!ExecuteWithRead(TextQuery, out DT)) { return(false); } if (DT.Rows.Count == 0) { if (AdressID == null) { return(ToModeSetComplete()); } else { //Это попытка перепрыгнуть FExcStr = "Нет такого адреса в сборочном!"; return(false); } } RefreshRowSum(); //Подтянем циферки CCItem = new StructItemSet(); CCItem.ID = DT.Rows[0]["id"].ToString(); CCItem.InvCode = DT.Rows[0]["InvCode"].ToString(); CCItem.Name = DT.Rows[0]["ItemName"].ToString(); CCItem.Price = (decimal)DT.Rows[0]["Price"]; CCItem.Count = (int)(decimal)DT.Rows[0]["Count"]; CCItem.CountFact = (int)(decimal)DT.Rows[0]["Count"]; CCItem.AdressID = DT.Rows[0]["Adress"].ToString(); CCItem.AdressName = DT.Rows[0]["AdressName"].ToString(); CCItem.CurrLine = (short)DT.Rows[0]["LINENO_"]; CCItem.Balance = (int)(decimal)DT.Rows[0]["Balance"]; CCItem.Details = (int)(decimal)DT.Rows[0]["Details"]; if (!MultiplesOKEI2(ref CCItem)) { return(false); } DocSet = new StrictDoc(); DocSet.ID = DT.Rows[0]["IDDOC"].ToString(); DocSet.SelfRemovel = (int)(decimal)DT.Rows[0]["SelfRemovel"]; DocSet.View = (DocSet.SelfRemovel == 1 ? "(C) " : "") + DT.Rows[0]["Sector"].ToString().Trim() + "-" + DT.Rows[0]["Number"].ToString() + " Заявка " + DT.Rows[0]["DocNo"].ToString() + " (" + DT.Rows[0]["DateDoc"].ToString() + ")"; DocSet.Rows = (int)(decimal)DT.Rows[0]["Rows"]; DocSet.FromWarehouseID = DT.Rows[0]["Bill"].ToString(); DocSet.Client = DT.Rows[0]["Client"].ToString().Trim(); DocSet.Sum = (decimal)DT.Rows[0]["Sum"]; DocSet.Special = (int)(decimal)DT.Rows[0]["TypeNakl"] == 2 ? true : false; DocSet.Box = DT.Rows[0]["Box"].ToString(); DocSet.BoxID = DT.Rows[0]["BoxID"].ToString(); CurrentAction = ActionSet.ScanAdress; FExcStr = WhatUNeed(); FCurrentMode = Mode.Set; return(true); } // ToModeSet