Beispiel #1
0
        } // 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
Beispiel #2
0
        } // 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
Beispiel #3
0
        } // 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
Beispiel #4
0
        } // 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()
Beispiel #5
0
        } // 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
Beispiel #6
0
        } // 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
Beispiel #7
0
        } // 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
Beispiel #8
0
        } // 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
Beispiel #9
0
        } // 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
Beispiel #10
0
        } // 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