} // ReactionKeyDo //------------------------------ /// <summary> /// /// </summary> /// <returns></returns> protected bool FindDocAP(bool IsSet) { string TextQuery = "select top 1 " + (IsSet ? "substring(DocAP.$АдресПеремещение.ДокументОснование , 5, 9)" : " DocAP.iddoc") + " as iddoc " + "from _1sjourn as journ (nolock) " + "inner join DH$АдресПеремещение as DocAP (nolock) " + "on DocAP.iddoc = journ.iddoc " + "left join DT$АдресПеремещение as DocAPTab (nolock) " + "on DocAP.iddoc = DocAPTab.iddoc " + "where " + "journ.date_time_iddoc < '19800101Z' " + "and journ.ismark = 0 " + "and journ.$Автор = :employer " + "and DocAP.$АдресПеремещение.ТипДокумента = 13 " + "and DocAP.$АдресПеремещение.Склад = :warehouse " + //От параметра IsSet зависит что мы ищем набор или выкладку "and DocAPTab.iddoc " + (IsSet ? "is null" : "is not null"); SQL1S.QuerySetParam(ref TextQuery, "employer", Employer.ID); SQL1S.QuerySetParam(ref TextQuery, "warehouse", Employer.Warehouse.ID); DataTable DT; SS.ExecuteWithReadNew(TextQuery, out DT); if (DT.Rows.Count == 0) { return(false); } DocAP = Doc.GiveDocById(DT.Rows[0]["iddoc"].ToString(), SS); return(DocAP.Selected); } // FindDocAP
} // LoaderChoise (constructor) /// <summary> /// /// </summary> /// <returns></returns> internal override ABaseMode Init() { LiftTaskList = null; string TextQuery = "select * from WPM_fn_ToModeLoaderChoiseLift()"; SS.ExecuteWithReadNew(TextQuery, out LiftTaskList); return(Positive("Выберите что будете делать...")); } // Init
} // ReactionSCSectionDo /// <summary> /// /// </summary> /// <returns></returns> private ABaseMode Refresh() { string TextQuery = "select " + "DocAP.$АдресПеремещение.Адрес0 as Adress0, " + "RefSections.descr as Adress, " + "DocAP.$АдресПеремещение.Количество as Amount, " + "DocAP.$АдресПеремещение.Товар as Item, " + "RefItems.Descr as Name, " + "RefItems.$Спр.Товары.ИнвКод as InvCode, " + "DocAP.lineno_ as lineno_ " + "from DT$АдресПеремещение as DocAP (nolock) " + "left join $Спр.Товары as RefItems (nolock) " + "on RefItems.id = DocAP.$АдресПеремещение.Товар " + "left join $Спр.Секции as RefSections (nolock) " + "on RefSections.id = DocAP.$АдресПеремещение.Адрес0 " + "where " + "DocAP.$АдресПеремещение.Дата1 = :EmptyDate " + "and DocAP.iddoc = :iddoc"; SQL1S.QuerySetParam(ref TextQuery, "iddoc", DocAP.ID); RemainItems.Clear(); SS.ExecuteWithReadNew(TextQuery, out RemainItems); if (RemainItems.Rows.Count == 0) { return(JumpTo(new RefillLayoutComplete(SS, this))); } string tmpBarcodePallete = DocAP.GetAttributeHeader("ШКПаллеты").ToString(); TextQuery = "select top 1 " + "Ref.id as id " + "from $Спр.ПеремещенияПаллет as Ref (nolock) " + "where " + "Ref.$Спр.ПеремещенияПаллет.ШКПаллеты = :PalleteBarcode " + "and Ref.ismark = 0 " + "order by " + "Ref.id desc "; SQL1S.QuerySetParam(ref TextQuery, "PalleteBarcode", tmpBarcodePallete); DataTable DT; SS.ExecuteWithReadNew(TextQuery, out DT); if (DT.Rows.Count > 0) { LastMove.FoundID(DT.Rows[0]["id"].ToString()); } CurrentAction = ActionSet.ScanItem; return(Positive(SS.WhatUNeed(CurrentAction))); } // Refresh
} // ReactionKeyDo internal override ABaseMode Init() { Task = new RefPalleteMove(SS); if (FindTaskId()) { return(JumpTo(new Loader(SS, this))); } TaskList = null; string TextQuery = "select * from WPM_fn_ToModeLoaderChoise(:Employer)"; SQL1S.QuerySetParam(ref TextQuery, "Employer", Employer.ID); SS.ExecuteWithReadNew(TextQuery, out TaskList); return(Positive("Выберите что будете делать...")); } // Init()
} // 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
} // constructor (RefillChoise) /// <summary> /// /// </summary> /// <returns></returns> internal override ABaseMode Init() { if (FindDocAP(true))//Ищем набор { return(JumpTo(new RefillSet(SS, this))); } else if (FindDocAP(false)) //Ищем выкладку { return(JumpTo(new RefillLayout(SS, this))); } //нет ничего TaskList = null; string TextQuery = "select * from WPM_fn_GetRefillChoise(:employer)"; SQL1S.QuerySetParam(ref TextQuery, "employer", Employer.ID); SS.ExecuteWithReadNew(TextQuery, out TaskList); return(Positive("Выберите что будете делать...")); } // Init
} // RefillSetComplete (constructor) /// <summary> /// /// </summary> /// <returns></returns> internal override ABaseMode Init() { string TextQuery = "SELECT top 1 _1SJOURN.IDDOC iddoc " + "FROM _1SJOURN (NOLOCK INDEX=ACDATETIME), _1SCRDOC (NOLOCK INDEX=PARENT) " + "WHERE " + "_1SJOURN.DATE_TIME_IDDOC=_1SCRDOC.CHILD_DATE_TIME_IDDOC " + "and _1SJOURN.ismark = 0 " + "and _1SJOURN.date_time_iddoc < '19800101Z' " + "and _1SCRDOC.MDID=0 and _1SCRDOC.PARENTVAL='O1" + SS.ExtendID(DocAP.ID, DocAP.TypeDoc) + "' "; DataTable DT; SS.ExecuteWithReadNew(TextQuery, out DT); if (DT.Rows.Count == 0) { return(Negative("Нет документа второй части выкладки!")); } //Документ есть! мы его получили! SubjectDoc = Doc.GiveDocById(DT.Rows[0]["iddoc"].ToString(), SS); return(Positive(SS.WhatUNeed(CurrentAction))); } // Init
} // RefillSet_ReactionSCItem //---------------------------------- /// <summary> /// /// </summary> /// <returns></returns> private ABaseMode Refresh() { DocAP.Refresh(); if (RobotWaiting) { CurrentAction = ActionSet.Waiting; return(Negative("1С не ответила! (флаг ожидания)")); } string TextQuery = "select top 1 " + "DocAP.$АдресПеремещение.Адрес0 as Adress0, " + "DocAP.$АдресПеремещение.Адрес1 as Adress1, " + "DocAP.$АдресПеремещение.Количество as Amount, " + "DocAP.$АдресПеремещение.Товар as Item, " + "DocAP.lineno_ as lineno_ " + "from DT$АдресПеремещение as DocAP (nolock) " + "where " + "DocAP.$АдресПеремещение.Дата1 = :EmptyDate " + "and DocAP.iddoc = :iddoc " + "and DocAP.$АдресПеремещение.Количество > 0 "; SQL1S.QuerySetParam(ref TextQuery, "iddoc", DocAP.ID); DataTable DT; SS.ExecuteWithReadNew(TextQuery, out DT); if (DT.Rows.Count == 0) { return(JumpTo(new RefillSetComplete(SS, this))); } //Всасываем все говно в наши объекты Adress0.FoundID(DT.Rows[0]["Adress0"].ToString()); Adress1.FoundID(DT.Rows[0]["Adress1"].ToString()); Amount = (int)(decimal)DT.Rows[0]["Amount"]; Item = new RefItem(SS); //Есть бага в объекте ARef, поэтому пересоздаем Item.FoundID(DT.Rows[0]["Item"].ToString()); lineno_ = (short)DT.Rows[0]["lineno_"]; CurrentAction = ActionSet.ScanAdress; return(Positive(SS.WhatUNeed(CurrentAction))); } // Refresh
} // Cancel() //SPECIAL METHOD's private bool FindTaskId() { string TextQuery = "select top 1 " + "Ref.id as id " + "from $Спр.ПеремещенияПаллет as Ref (nolock) " + "where " + "Ref.$Спр.ПеремещенияПаллет.ФлагОперации = 1 " + "and Ref.ismark = 0 " + "and Ref.$Спр.ПеремещенияПаллет.Сотрудник1 = :Employer"; SQL1S.QuerySetParam(ref TextQuery, "Employer", Employer.ID); DataTable DT; SS.ExecuteWithReadNew(TextQuery, out DT); if (DT.Rows.Count == 0) { return(false); } Task.FoundID(DT.Rows[0]["id"].ToString()); return(true); } // GetOrderId
} // 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