protected override bool ActionBody(BaseProcess action)
        {
            bool isProcessed = true;

            SetValue(ARG_PAGE_COUNT, 0);
            try {
                LocalContext.SaveLog($"{MoscowDateTimeOffset().ToString()} Начало обработки ответов от системы 'Меркурий'.");

                IList <MercuryQueueStepModel> responses = StepService.GetStepsByStatus(QueryId, null, 0, "0.0_001", Consts.OP_GROUP_CHECK_FOR_COMPLETED_OUTBOUND);
                MercuryQueueStepModel         completed = responses.Where(r => r.StatusName == MQSStatus.COMPLETE.ToString()).FirstOrDefault();

                IList <Guid> updIds = new List <Guid>();
                // Обработка успешных ответов
                if (completed != null)
                {
                    MercuryNS.Body body = ParseMercuryHelper.ParseBodyResponseFile(Path.Combine(MercurySettings.ResponseDirectory, completed.FileResponse));
                    if (body.ReceiveApplicationResultResponse != null && body.ReceiveApplicationResultResponse.Application != null)
                    {
                        MercuryNS.GetStockEntryListResponse response = body.ReceiveApplicationResultResponse.Application.Result as MercuryNS.GetStockEntryListResponse;
                        MercuryNS.StockEntryList            list     = response?.StockEntryList;
                        if (list != null)
                        {
                            int totalItems = list.Total;
                            if (totalItems > 0)
                            {
                                ISystemSettingManager systemSettings = GetService <ISystemSettingManager>();
                                int maxPageCount = systemSettings.GetByPrefix <int>("MIP_OP_GET_STOCK_ENTRY_LIST_PAGE_COUNT", 10);
                                if (maxPageCount < 1)
                                {
                                    maxPageCount = 1;
                                    LocalContext.SaveLog($"Минимальное количество запрашиваемых страниц: 1.");
                                }
                                int pageSize = systemSettings.GetByPrefix <int>("MIP_OP_GET_STOCK_ENTRY_LIST_PAGE_SIZE", 250);
                                if (pageSize < 1)   // проверка отрицательного значения и = 0
                                {
                                    pageSize = 1;
                                    LocalContext.SaveLog($"Минимальное количество элементов при зпросе 1.");
                                }
                                int currentPageCount = totalItems / pageSize + ((totalItems % pageSize) > 0 ? 1 : 0);
                                if (currentPageCount > maxPageCount)
                                {
                                    LocalContext.SaveLog($"Количество страниц первышает максимально возможное в запросе. Расчитанне количество страниц: {currentPageCount}");
                                    currentPageCount = maxPageCount;
                                }
                                LocalContext.SaveLog($"Будет запрошено {currentPageCount} страниц с количеством элементов на страницу {pageSize}");
                                SetValue(ARG_PAGE_SIZE, pageSize);
                                SetValue(ARG_PAGE_COUNT, currentPageCount);
                                SetValue(ARG_PAGE_START, 1);
                                ResultDescription = "Количество страниц расчитанно.";
                            }
                            else
                            {
                                LocalContext.SaveLog("Площадка не содержит складских записей.");
                                ResultDescription = "Площадка не содержит складских записей.";
                            }
                        }
                    }
                    else
                    {
                        isProcessed = false;
                        AppendUserErrorInfoFromXML(completed, Guid.Empty, null, null);
                        LocalContext.SaveLog("Ошибка при ответе системы 'Меркурий'. Смотри файл ответа от системы 'Меркурий'.");
                        ResultDescription = "Система 'Меркурий' вернула исключение";
                    }
                }
                else
                {
                    MercuryQueueStepModel notcompleted = responses.Where(r => r.StatusName != MQSStatus.COMPLETE.ToString()).FirstOrDefault();
                    if (notcompleted != null)
                    {
                        AppendUserErrorInfoFromXML(notcompleted, Guid.Empty, null, null);
                    }

                    isProcessed       = false;
                    ResultDescription = "Ошибка анализа числа страниц.";
                    LocalContext.SaveLog("Ошибка автоматического вычисления количества страниц для запроса.");
                }
            } catch (Exception e) {
                AppendUserErrorInfo(Guid.Empty, null, UserErrorConsts.ET_MIP, UserErrorConsts.StockList.RTE_CALC_PAGES, UserErrorConsts.DEFAULT_LAS_SUPPRT_ERROR);
                isProcessed = false;
                LocalContext.SaveLog(e.ToString());
                ResultDescription = "Ошибка анализа числа страниц.";
            }
            LocalContext.SaveLog($"{MoscowDateTimeOffset().ToString()} Окончание обработки ответов от системы 'Меркурий'.");
            return(isProcessed);
        }
        protected override bool ActionBody(BaseProcess action)
        {
            bool    isProcessed  = true;
            IAction updateAction = null;


            try
            {
                Guid enterpriseId         = GetValue <Guid>(ARG_PAGE_ENTERPRISE_ID);
                bool removeIsAbsent       = GetValue <bool>(ARG_REMOVE_IS_ABSENT);
                var  stockEntriesOutbound = GetValue <IEnumerable <Guid> >(ARG_STOCK_ENTRY_IDS);

                LocalContext.SaveLog(
                    $"{MoscowDateTimeOffset().ToString()} Начало обработки ответов от системы Меркурий.");

                // Получение последнего номера шага
                IList <MercuryQueueStepModel> responses = StepService.GetStepsByStatus(QueryId, null, 0, "0.0", null);

                IList <MercuryQueueStepModel> completed = responses.Where(r =>
                                                                          r.StatusName == MQSStatus.COMPLETE.ToString() && r.ProcessMark != Consts.PROCESSED_MARK).ToList();

                bool        anyError   = responses.Any(x => x.StatusName != MQSStatus.COMPLETE.ToString());
                List <Guid> updIds     = GetValue <List <Guid> >(ARG_UPDATED_STOCK_ENTRY_IDS);
                List <Guid> skippedIds = GetValue <List <Guid> >(ARG_SKIPEED_STOCK_ENTRY_IDS);

                // Обработка успешных ответов
                if (completed.Count > 0)
                {
                    foreach (MercuryQueueStepModel step in completed)
                    {
                        if (NeedStopSteps())
                        {
                            LocalContext.SaveLog(
                                $" Выполннение прервано (StopQueueSteps). Выполнение будет продолжено после запуска очереди.");
                            SetValue("Status", MQSStatus.STOPPED);
                            return(true);
                        }

                        MercuryNS.Body body =
                            ParseMercuryHelper.ParseBodyResponseFile(Path.Combine(MercurySettings.ResponseDirectory,
                                                                                  step.FileResponse));
                        if (body.ReceiveApplicationResultResponse != null &&
                            body.ReceiveApplicationResultResponse.Application != null)
                        {
                            MercuryNS.GetStockEntryListResponse response =
                                body.ReceiveApplicationResultResponse.Application.Result as
                                MercuryNS.GetStockEntryListResponse;
                            MercuryNS.StockEntryList stockEntriesFromMerc = response?.StockEntryList;
                            if (stockEntriesFromMerc != null && stockEntriesFromMerc.Count > 0)
                            {
                                LocalContext.SaveLog(
                                    $" Обработка файла ответа от Меркурия. Имя файла {step.FileResponse}.");

                                var queryForPullStockEntryGuids = new DocumentQuery(GetService <IMethaStorage>(), GetService <IQueryGenerator>(), GetService <ICacheManager>());
                                queryForPullStockEntryGuids
                                .ResultField("SE", "@Id")
                                .ResultField("SE", "GUID")
                                .Using("StockEntry", "SE", ObjectStatus.osActive);
                                queryForPullStockEntryGuids.Where(w => w.Or(o =>
                                {
                                    foreach (var seId in stockEntriesOutbound)
                                    {
                                        o.EQ("@Id", seId);
                                    }
                                }));

                                var seOutboundIds = LocalReader.QueryDocuments(queryForPullStockEntryGuids).Result.Select(d => d["GUID"]);

                                var stockEntriesFromMip = LoadStockEntriesFromMIP(stockEntriesFromMerc);

                                foreach (var se in stockEntriesFromMerc.Where(d => seOutboundIds.Contains(d.GUID)))
                                {
                                    var seFromMIP = stockEntriesFromMip.FirstOrDefault(d => (string)d["GUID"] == (string)se.GUID);

                                    if ((double)se.Batch.Volume < (double)seFromMIP["Volume"])
                                    {
                                        isProcessed = false;
                                        LocalContext.SaveLog(
                                            $" Выписка уже производилась");
                                    }

                                    if ((string)se.UUID != (string)seFromMIP["UUID"])
                                    {
                                        isProcessed = false;
                                        LocalContext.SaveLog(
                                            $" Выписка уже производилась");
                                    }
                                }
                            }
                            else
                            {
                                LocalContext.SaveLog(
                                    $" Файл ответа {step.FileResponse} от системы 'Меркурий' не содержит информацию о складских записях.");
                            }
                        }
                        else
                        {
                            anyError = true;
                            body.Fault.ToString();
                            // TODO сохранить ошибку в логе
                            //body.Fault
                            ResultDescription = "Система 'Меркурий' вернула исключение";
                        }
                    }
                }
                else
                {
                    isProcessed       = false;
                    ResultDescription = "Нет успешно обработанных ответов";
                    LocalContext.SaveLog(ResultDescription);
                }

                var notCompleted = responses.Where(r => r.StatusName != MQSStatus.COMPLETE.ToString());
                foreach (var nc in notCompleted)
                {
                    AppendUserErrorInfoFromXML(nc, Guid.Empty, null, null);
                }

                if (string.IsNullOrWhiteSpace(ResultDescription))
                {
                    ResultDescription = "Обработаны ответы от системы 'Меркурий'.";
                }
            }
            catch (ConcurrencyDocException except)
            {
                isProcessed = false;
                DefaultConcurrentExceptionLog(except);
            }
            catch (Exception e)
            {
                AppendUserErrorInfo(Guid.Empty, null, UserErrorConsts.ET_MIP,
                                    UserErrorConsts.StockList.RTE_PROCESS_RESPONSE, UserErrorConsts.DEFAULT_LAS_SUPPRT_ERROR);
                isProcessed = false;
                LocalContext.SaveLog(e.ToString());
                ResultDescription = "Ошибка анализа результатов";
            }

            LocalContext.SaveLog(
                $"{MoscowDateTimeOffset().ToString()} Окончание обработки ответов от системы 'Меркурий'.");
            return(isProcessed);
        }