} // 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