public bool CompleteCorrectSample(int Choise, int CountCorrect) { //Заглушка, рефрешим позицию, чтобы не было проблем, если оборвется связь if (!RDSampleSet(DocSet.ID, CCItem.AdressID)) { FCurrentMode = Mode.SampleSetCorrect; return(false); } FCurrentMode = Mode.SampleSetCorrect; //конец заглушки if (CountCorrect <= 0 || CountCorrect > CCItem.Count) { FExcStr = "Нельзя скорректировать столько!"; return(false); } int AdressCode; string CorrectReason; string What; switch (Choise) { case 1: AdressCode = 7; CorrectReason = " 2EU "; What = "брак"; break; case 2: AdressCode = 12; CorrectReason = " 2EV "; What = "недостача"; break; default: FExcStr = "Неясная причина корректировки!"; return(false); } string TextQuery; if (CountCorrect == CCItem.Count) //меняем скорректированную строку { TextQuery = "begin tran; " + "update DT$АдресПеремещение " + "set $АдресПеремещение.Количество = :CountCorrect, $АдресПеремещение.Состояние1 = :AdressCode, $АдресПеремещение.Адрес1 = $АдресПеремещение.Адрес0 ," + "$АдресПеремещение.Дата1 = :Date1, $АдресПеремещение.Время1 = :Time1 " + "where DT$АдресПеремещение .iddoc = :iddoc and DT$АдресПеремещение .lineno_ = :currline; " + "if @@rowcount = 0 rollback tran else commit tran "; } else //меняем скорректированную строку и добавляем новую, исходя из количества { TextQuery = "begin tran; " + "update DT$АдресПеремещение " + "set $АдресПеремещение.Количество = :count " + "where DT$АдресПеремещение .iddoc = :iddoc and DT$АдресПеремещение .lineno_ = :currline; " + "if @@rowcount > 0 begin " + "insert into DT$АдресПеремещение ($АдресПеремещение.Товар , $АдресПеремещение.Количество ," + "$АдресПеремещение.Единица , $АдресПеремещение.Коэффициент , $АдресПеремещение.Состояние0 ," + "$АдресПеремещение.Состояние1 , $АдресПеремещение.Сотрудник0 , $АдресПеремещение.Адрес0 , $АдресПеремещение.Адрес1 ," + "$АдресПеремещение.Дата0 , $АдресПеремещение.Дата1 , $АдресПеремещение.Время0 , $АдресПеремещение.Время1 ," + "$АдресПеремещение.Док , $АдресПеремещение.НомерСтрокиДока , $АдресПеремещение.ФлагДопроведения , $АдресПеремещение.ФлагОбязательногоАдреса , " + "lineno_, iddoc, $АдресПеремещение.ЕдиницаШК ) " + "select $АдресПеремещение.Товар , :CountCorrect ," + "$АдресПеремещение.Единица , $АдресПеремещение.Коэффициент ," + "$АдресПеремещение.Состояние0 , :AdressCode , :Employer , $АдресПеремещение.Адрес0 ," + "$АдресПеремещение.Адрес0 , $АдресПеремещение.Дата0 , :Date1 , $АдресПеремещение.Время0 , :Time1 , $АдресПеремещение.Док , $АдресПеремещение.НомерСтрокиДока , $АдресПеремещение.ФлагДопроведения , $АдресПеремещение.ФлагОбязательногоАдреса , " + "(select max(lineno_) + 1 from DT$АдресПеремещение where iddoc = :iddoc), iddoc, $АдресПеремещение.ЕдиницаШК " + "from DT$АдресПеремещение as ForInst where ForInst.iddoc = :iddoc and ForInst.lineno_ = :currline; " + "if @@rowcount = 0 rollback tran else commit tran " + "end " + "else rollback"; } QuerySetParam(ref TextQuery, "iddoc", DocSet.ID); QuerySetParam(ref TextQuery, "currline", CCItem.CurrLine); QuerySetParam(ref TextQuery, "CountCorrect", CountCorrect); QuerySetParam(ref TextQuery, "Date1", DateTime.Now); QuerySetParam(ref TextQuery, "Time1", APIManager.NowSecond()); QuerySetParam(ref TextQuery, "count", CCItem.Count - CountCorrect); QuerySetParam(ref TextQuery, "Reason", CorrectReason); QuerySetParam(ref TextQuery, "AdressCode", AdressCode); QuerySetParam(ref TextQuery, "Employer", Employer.ID); if (!ExecuteWithoutRead(TextQuery)) { return(false); } PreviousAction = "Корректировка принята " + CCItem.InvCode.Trim() + " - " + CountCorrect.ToString() + " шт. (" + What + ")"; return(ToModeSampleSet()); } // CompleteCorrectSample
} // RefreshCCRP public bool CompleteLineSet() { string TextQuery; //Заглушка, рефрешим позицию, чтобы не было проблем, если оборвется связь int CountFact = CCItem.CountFact; if (!ToModeSet(CCItem.AdressID, DocSet.ID)) { CCItem.CountFact = CountFact; CurrentAction = DocSet.BoxID == SQL1S.GetVoidID() ? ActionSet.ScanAdress : ActionSet.ScanBox; //Отключение по константе return(false); } CCItem.CountFact = CountFact; CurrentAction = DocSet.BoxID == SQL1S.GetVoidID() ? ActionSet.ScanAdress : ActionSet.ScanBox; //Отключение по константе //конец заглушки int Line = CCItem.CurrLine; if (CCItem.Count > CCItem.CountFact) { if (Const.StopCorrect) { FExcStr = "Возможность дробить строку отключена!"; return(false); } //добавить строчку надо TextQuery = "begin tran; " + "update DT$КонтрольНабора " + "set $КонтрольНабора.Количество = :remaincount, " + "$КонтрольНабора.Сумма = :remaincount*$КонтрольНабора.Цена " + "where DT$КонтрольНабора .iddoc = :iddoc and DT$КонтрольНабора .lineno_ = :currline; " + "if @@rowcount > 0 begin " + "insert into DT$КонтрольНабора ($КонтрольНабора.СтрокаИсх , $КонтрольНабора.Товар , $КонтрольНабора.Количество ," + "$КонтрольНабора.Единица , $КонтрольНабора.Цена , $КонтрольНабора.Коэффициент , $КонтрольНабора.Сумма ," + "$КонтрольНабора.Секция , $КонтрольНабора.Корректировка , $КонтрольНабора.ПричинаКорректировки , $КонтрольНабора.ЕдиницаШК ," + "$КонтрольНабора.Состояние0 , $КонтрольНабора.Адрес0 , $КонтрольНабора.СостояниеКорр , $КонтрольНабора.АдресКорр ," + "$КонтрольНабора.ДокБлокировки , $КонтрольНабора.Дата5 , $КонтрольНабора.Время5 , $КонтрольНабора.Контейнер , " + "lineno_, iddoc, $КонтрольНабора.Контроль ) " + "select $КонтрольНабора.СтрокаИсх , $КонтрольНабора.Товар , :count ," + "$КонтрольНабора.Единица , $КонтрольНабора.Цена , $КонтрольНабора.Коэффициент , :count*$КонтрольНабора.Цена ," + "$КонтрольНабора.Секция , $КонтрольНабора.Корректировка , $КонтрольНабора.ПричинаКорректировки , $КонтрольНабора.ЕдиницаШК ," + "$КонтрольНабора.Состояние0 , $КонтрольНабора.Адрес0 , $КонтрольНабора.СостояниеКорр , $КонтрольНабора.АдресКорр ," + "$КонтрольНабора.ДокБлокировки , $КонтрольНабора.Дата5 , $КонтрольНабора.Время5 , $КонтрольНабора.Контейнер , " + "(select max(lineno_) + 1 from DT$КонтрольНабора where iddoc = :iddoc), iddoc, 0 " + "from DT$КонтрольНабора as ForInst where ForInst.iddoc = :iddoc and ForInst.lineno_ = :currline; " + "select max(lineno_) as newline from DT$КонтрольНабора where iddoc = :iddoc; " + "if @@rowcount = 0 rollback tran else commit tran " + "end " + "else rollback"; QuerySetParam(ref TextQuery, "count", CCItem.CountFact); QuerySetParam(ref TextQuery, "remaincount", CCItem.Count - CCItem.CountFact); QuerySetParam(ref TextQuery, "iddoc", DocSet.ID); QuerySetParam(ref TextQuery, "currline", CCItem.CurrLine); DataTable DT; if (!ExecuteWithRead(TextQuery, out DT)) { return(false); } //Писать будем в добалвенную, так лучше! Поэтому обновляем корректную строчку CCItem.CurrLine = (short)DT.Rows[0]["newline"]; } //фиксируем строку TextQuery = "UPDATE DT$КонтрольНабора WITH (rowlock) " + "SET $КонтрольНабора.Дата5 = :Date5, " + "$КонтрольНабора.Время5 = :Time5, " + "$КонтрольНабора.Контейнер = :id " + "WHERE DT$КонтрольНабора .iddoc = :DocCC and DT$КонтрольНабора .lineno_ = :lineno_; "; QuerySetParam(ref TextQuery, "id", GetVoidID()); QuerySetParam(ref TextQuery, "DocCC", DocSet.ID); QuerySetParam(ref TextQuery, "Date5", DateTime.Now); QuerySetParam(ref TextQuery, "Time5", APIManager.NowSecond()); QuerySetParam(ref TextQuery, "lineno_", CCItem.CurrLine); if (!ExecuteWithoutRead(TextQuery)) { return(false); } //Запись прошла успешно CurrentAction = ActionSet.ScanAdress; //на всякий случай, если там что-нибудь наебнется, то во вьюхе по крайней мере нельзя будет повторно ввести количество PreviousAction = "Отобрано " + CCItem.InvCode.Trim() + " - " + CCItem.CountFact.ToString() + " шт. (строка " + Line.ToString() + ")"; return(ToModeSet(null, null)); } // CompleteLineSet