} // Init internal override ABaseMode Cancel() { string TextQuery; if (Task.TypeMove == 1) { //Это отмена задания на спуск - удаляем физически, т.к. при запросе задания запись создастся вновь TextQuery = "delete from $Спр.ПеремещенияПаллет where id = :id"; } else if (Task.TypeMove == 2 || Task.TypeMove == 3 || Task.TypeMove == 4 || Task.TypeMove == 5) { //А это отмена задания подъема или спуска с антресоли. Т.к. при выдаче задания ничего не создается, // а просто заполняется данными, то и при отмене нужно просто очистить все TextQuery = "update $Спр.ПеремещенияПаллет set " + "$Спр.ПеремещенияПаллет.Сотрудник1 = :EmptyID, " + "$Спр.ПеремещенияПаллет.ФлагОперации = 0, " + "$Спр.ПеремещенияПаллет.Дата10 = :EmptyDate, " + "$Спр.ПеремещенияПаллет.Время10 = 0 " + "where id = :id"; } else { return(Negative("Нельзя отменить данный тип задания")); } SQL1S.QuerySetParam(ref TextQuery, "id", Task.ID); SS.ExecuteWithoutReadNew(TextQuery); return(base.Cancel()); } // Cancel
} // FixTask (int MoveType) private void GetTaskLoaderDown() { string TextQuery = "exec WPM_GetTaskLoaderDown :Employer "; SQL1S.QuerySetParam(ref TextQuery, "Employer", Employer.ID); SS.ExecuteWithoutReadNew(TextQuery); FindTaskId(); } // GetTaskLoaderDown
} // Cancel //---------------------------------- /// <summary> /// /// </summary> private void CorrectLine() { string 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 , :NowDate , $АдресПеремещение.Время0 , :NowTime ," + "$АдресПеремещение.Док , $АдресПеремещение.НомерСтрокиДока , $АдресПеремещение.ФлагДопроведения , $АдресПеремещение.ФлагОбязательногоАдреса , " + "$АдресПеремещение.ЕдиницаШК , (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 begin " + //Удалим строчку если она иссякла... "delete from DT$АдресПеремещение " + "where iddoc = :iddoc and lineno_ = :currline and $АдресПеремещение.Количество <= 0 " + " commit tran " + "end else rollback tran " + "end " + "else rollback"; SQL1S.QuerySetParam(ref TextQuery, "count", Amount - InputedCount); SQL1S.QuerySetParam(ref TextQuery, "CountCorrect", InputedCount); SQL1S.QuerySetParam(ref TextQuery, "iddoc", DocAP.ID); SQL1S.QuerySetParam(ref TextQuery, "currline", lineno_); SQL1S.QuerySetParam(ref TextQuery, "Reason", " 2EV "); SQL1S.QuerySetParam(ref TextQuery, "AdressCode", 17); SQL1S.QuerySetParam(ref TextQuery, "Employer", Employer.ID); SS.ExecuteWithoutReadNew(TextQuery); PreviousAction = "Корректировка принята " + Item.InvCode + " - " + InputedCount.ToString() + " шт. (недостача)"; //Все скорректировали к хуям! if (Amount - InputedCount <= 0) { Dictionary <string, object> DataMapWrite = new Dictionary <string, object>(); DataMapWrite["Спр.СинхронизацияДанных.ДокументВход"] = SS.ExtendID(DocAP.ID, "АдресПеремещение"); DataMapWrite["Спр.СинхронизацияДанных.ДатаСпрВход1"] = SS.ExtendID(Employer.ID, "Спр.Сотрудники"); string resultMessage; SS.ExecCommandOnlyResultNew("RefillSetAddItem2", DataMapWrite, out resultMessage); } Cancel(); } // CorrectLine
} // GoTransportTask private void FixTask(int MoveType, string Tail) { string TextQuery = "update $Спр.ПеремещенияПаллет " + "set $Спр.ПеремещенияПаллет.Сотрудник1 = :Employer, " + "$Спр.ПеремещенияПаллет.Дата10 = :NowDate, " + "$Спр.ПеремещенияПаллет.Время10 = :NowTime, " + "$Спр.ПеремещенияПаллет.ФлагОперации = 1 " + "where id in (" + Tail + ")"; SQL1S.QuerySetParam(ref TextQuery, "Employer", Employer.ID); SQL1S.QuerySetParam(ref TextQuery, "MoveType", MoveType); SS.ExecuteWithoutReadNew(TextQuery); FindTaskId(); } // FixTask (int MoveType, string Tail)
} // ReactionSCItemDo /// <summary> /// /// </summary> /// <returns></returns> internal override ABaseMode Init() { if (!DocAP.Selected) { SS.OnReport(new ReportEventArgs("Получаю задание...")); string TextQuery = "select top 1 DocAP.iddoc as iddoc " + "from _1sjourn as journ (nolock) " + "inner join DH$АдресПеремещение as DocAP (nolock) " + "on DocAP.iddoc = journ.iddoc " + "inner join DT$АдресПеремещение as DocAPTab (nolock) " + "on DocAP.iddoc = DocAPTab.iddoc " + //Условие ниже, чтобы с пустой табличной частью отсеить документы "inner join _1sjourn as sub_journ (nolock) " + "on substring(DocAP.$АдресПеремещение.ДокументОснование , 5, 9) = sub_journ.iddoc " + "left join $Спр.ПеремещенияПаллет as Ref (nolock) " + "on Ref.$Спр.ПеремещенияПаллет.ШКПаллеты = DocAP.$АдресПеремещение.ШКПаллеты " + "and Ref.$Спр.ПеремещенияПаллет.ФлагОперации in (0, 1) " + "and Ref.ismark = 0 " + "where " + "journ.date_time_iddoc < '19800101Z' " + "and journ.ismark = 0 " + "and journ.$Автор = :EmptyID " + "and DocAP.$АдресПеремещение.ТипДокумента = 13 " + "and Ref.id is null " + "order by sub_journ.date_time_iddoc"; DataTable DT; SS.ExecuteWithReadNew(TextQuery, out DT); if (DT.Rows.Count == 0) { return(Negative("Не удалось найти заданий выкладки!")); } //Будем вешать на себя это задание TextQuery = "update _1sjourn set " + "$Автор = :employer " + "where iddoc = :iddoc; "; SQL1S.QuerySetParam(ref TextQuery, "iddoc", DT.Rows[0]["iddoc"].ToString()); SQL1S.QuerySetParam(ref TextQuery, "employer", Employer.ID); SS.ExecuteWithoutReadNew(TextQuery); //Если задание получилось, то if (!FindDocAP(false)) { return(Negative("Не удалось зафиксировать задание выклдаки!")); } } return(Refresh()); } // Init
} // ReactionPalleteDo /// <summary> /// /// </summary> /// <returns></returns> override protected bool TaskComplete() { string TextQuery = "update $Спр.ПеремещенияПаллет set $Спр.ПеремещенияПаллет.ШКПаллеты = :pallete_barcode where id = :id "; SQL1S.QuerySetParam(ref TextQuery, "id", Task.ID); SQL1S.QuerySetParam(ref TextQuery, "pallete_barcode", PalleteBarcode); SS.ExecuteWithoutReadNew(TextQuery); //Насрать что там // TextQuery = "declare @result int; exec WPM_TaskLoaderDownComplete :id, @result out; select @result;"; SQL1S.QuerySetParam(ref TextQuery, "id", Task.ID); if ((int)SS.ExecuteScalar(TextQuery) == 0) { return(false); } //Теперь дозапишем шк паллеты return(true); } // DownTaskComplete
} // Refresh /// <summary> /// /// </summary> private void CompleteLine() { string TextQuery = "UPDATE DT$АдресПеремещение SET " + "$АдресПеремещение.Дата1 = :NowDate, " + "$АдресПеремещение.Время1 = :NowTime, " + "$АдресПеремещение.Сотрудник0 = :employer, " + "$АдресПеремещение.Адрес1 = :Adress1 " + "WHERE " + "DT$АдресПеремещение .iddoc = :iddoc " + "and DT$АдресПеремещение .lineno_ = :lineno_; "; SQL1S.QuerySetParam(ref TextQuery, "iddoc", DocAP.ID); SQL1S.QuerySetParam(ref TextQuery, "lineno_", lineno_); SQL1S.QuerySetParam(ref TextQuery, "employer", Employer.ID); SQL1S.QuerySetParam(ref TextQuery, "Adress1", Adress1.ID); SS.ExecuteWithoutReadNew(TextQuery); PreviousAction = "Выложено " + Item.InvCode + " - " + Amount.ToString() + " шт. (строка " + lineno_.ToString() + ")"; Refresh(); }
} // Refresh /// <summary> /// /// </summary> private void CompleteLine() { string TextQuery = "Begin tran; " + "UPDATE DH$АдресПеремещение SET " + "$АдресПеремещение.ФлагОжиданияРобота = 1 " + "WHERE " + "DH$АдресПеремещение .iddoc = :iddoc; " + "if @@rowcount > 0 begin " + "UPDATE DT$АдресПеремещение SET " + "$АдресПеремещение.Дата1 = :NowDate, " + "$АдресПеремещение.Время1 = :NowTime " + "WHERE " + "DT$АдресПеремещение .iddoc = :iddoc " + "and DT$АдресПеремещение .lineno_ = :lineno_; " + "if @@rowcount > 0 commit tran " + "else rollback tran; " + "end " + "else rollback tran;"; SQL1S.QuerySetParam(ref TextQuery, "iddoc", DocAP.ID); SQL1S.QuerySetParam(ref TextQuery, "lineno_", lineno_); SS.ExecuteWithoutReadNew(TextQuery); Dictionary <string, object> DataMapWrite = new Dictionary <string, object>(); DataMapWrite["Спр.СинхронизацияДанных.ДокументВход"] = SS.ExtendID(DocAP.ID, "АдресПеремещение"); DataMapWrite["Спр.СинхронизацияДанных.ДатаСпрВход1"] = SS.ExtendID(Employer.ID, "Спр.Сотрудники"); string resultMessage; if (SS.ExecCommandOnlyResultNew("RefillSetAddItem2", DataMapWrite, out resultMessage)) { PreviousAction = "Отобрано " + Item.InvCode + " - " + Amount.ToString() + " шт. (строка " + lineno_.ToString() + ")"; } Refresh(); } // CompleteLine
} // ReactionPalleteDo /// <summary> /// /// </summary> private void CompletePallete() { SS.OnReport(new ReportEventArgs("Фиксирую окончание отбора...")); //Для начала определим будет ли после отбора сразу выкладка или будет что-то еще // я хз как лучше, поэтому буду тянуть информацию из таблички движка, по документу DocAP bool AuthorEmpty = true; string TextQuery = "select top 1 sector0_type sector0_type, sector1_down sector1_down from RT_refill (nolock) where DocAP = :iddoc "; SQL1S.QuerySetParam(ref TextQuery, "iddoc", DocAP.ID); DataTable DT; SS.ExecuteWithReadNew(TextQuery, out DT); if (DT.Rows.Count > 0) { if ((int)DT.Rows[0]["sector0_type"] == 3 || ((int)DT.Rows[0]["sector1_down"] == 0 && (int)DT.Rows[0]["sector0_type"] == 1)) { //Это с высокой полки или это на сектор у которого нет спуска // значит мы сразу будем переходить к выкладке, после завершения отбора AuthorEmpty = false; } } //Заполним шапку найденного документа SubjectDoc.SetAttributeHeader("ШКПаллеты", PalleteBarcode); SubjectDoc.SetAttributeHeader("КолСтрок", DocAP.RowCount); SubjectDoc.Save(); //получим список всех полей табличной части документа адрес перемещения string columns; //ПО СТАРОМУ //SS.GetColumns("DT$АдресПеремещение", out columns); //columns = columns.Replace("IDDOC,", ""); //уберем iddoc, его мы перезаписывать не будем //КОНЕЦ ПО СТАРОМУ //ПО НОВОМУ SS.GetColumns("DT$АдресПеремещение", out columns, "min"); columns = columns.Replace("min(IDDOC),", ""); //уберем iddoc, его мы перезаписывать не будем string tmpItem = SS.QueryParser("$АдресПеремещение.Товар ").Trim(); string tmpAmount = SS.QueryParser("$АдресПеремещение.Количество ").Trim(); columns = columns.Replace("min(" + tmpItem + ")", tmpItem); //группировка по товару columns = columns.Replace("min(" + tmpAmount, "sum(" + tmpAmount); //Сумма по количество columns = columns.Replace("min(IDDOC),", ""); //уберем iddoc, его мы перезаписывать не будем //Теперь скопируем строки из одного документа в другой, а потом изменим некоторые поля //Будем делать так, без транзакции, пока. А то ну его на хуй вставлять с изменениями слишком сложно TextQuery = "insert into DT$АдресПеремещение " + //"select :target," + columns + " from DT$АдресПеремещение where iddoc = :source; " + //ПО СТАРОМУ "select :target," + columns + " from DT$АдресПеремещение " + "where " + "iddoc = :source " + "and $АдресПеремещение.Состояние1 = :goodMove " + "and not $АдресПеремещение.Дата1 = :EmptyDate " + "group by $АдресПеремещение.Товар ; " + "if @@rowcount > 0 begin " + "update _1sjourn set $Автор = :employer where iddoc = :target; " + "update DT$АдресПеремещение SET " + "$АдресПеремещение.Состояние0 = $АдресПеремещение.Состояние1 , " + "$АдресПеремещение.Состояние1 = 2 , " + "$АдресПеремещение.Сотрудник0 = :EmptyID , " + "$АдресПеремещение.Адрес0 = $АдресПеремещение.Адрес1 , " + "$АдресПеремещение.Дата0 = :NowDate , " + "$АдресПеремещение.Дата1 = :EmptyDate , " + "$АдресПеремещение.Время0 = :NowTime , " + "$АдресПеремещение.Время1 = 0 , " + "$АдресПеремещение.Док = :source " + "where iddoc = :target; " + "exec WPM_RefillSetComplete :source, :adress0, :barcode_pallete " + "end else begin " + "update _1sjourn set $Автор = :EmptyID where iddoc = :target; " + //флаг под удаление возводим, иначе херня выходит "update RT_Refill set flag = 5 where docAP = :source " + "end"; SQL1S.QuerySetParam(ref TextQuery, "target", SubjectDoc.ID); SQL1S.QuerySetParam(ref TextQuery, "source", DocAP.ID); SQL1S.QuerySetParam(ref TextQuery, "barcode_pallete", PalleteBarcode); SQL1S.QuerySetParam(ref TextQuery, "adress0", Adress0.ID); SQL1S.QuerySetParam(ref TextQuery, "employer", AuthorEmpty ? SQL1S.GetVoidID() : Employer.ID); SQL1S.QuerySetParam(ref TextQuery, "goodMove", 4); //Хороший движение SS.ExecuteWithoutReadNew(TextQuery); } // CompletePallete