Вопрос конечно глупый, но всё же. Почему двоятся данные? я так понимаю оно проходит по всем данным Ссылка,потом по всем Ссылка1? и как мне исправить ситуацию чтобы верно всё считалось?
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаказПокупателя.Ссылка,
| УстановкаЗаказовВМаршрут.Ссылка КАК Ссылка1
|ИЗ
| Документ.ЗаказПокупателя КАК ЗаказПокупателя,
| Документ.УстановкаЗаказовВМаршрут КАК УстановкаЗаказовВМаршрут
|ГДЕ
| ЗаказПокупателя.Проведен
| И ЗаказПокупателя.Дата МЕЖДУ &МесяцНазад И &МесяцВперед
| И УстановкаЗаказовВМаршрут.Проведен";
Запрос.УстановитьПараметр("МесяцНазад", МесяцНазад);
Запрос.УстановитьПараметр("МесяцВперед", ТекущаяДата());
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать("Ссылка");
кол = 0;
//кол2 = 0;
кол3 = 0;
//кол4 = 0;
кол5 = 0;
кол6 = 0;
кол7 = "";
строкколсамовывоз = 0;
строкколсамовывоз2 = 0;
Пока Выборка.Следующий() Цикл
Если Выборка.Ссылка.Статус = Перечисления.СтатусЗаказа.ГотовКОтбору тогда
кол = кол+1;
КонецЕсли;
//Если Выборка.Ссылка.Статус = Перечисления.СтатусЗаказа.Сформирован тогда
// кол2 = кол2+1;
//КонецЕсли;
Если Выборка.Ссылка.Статус = Перечисления.СтатусЗаказа.НаСогласовании тогда
кол6 = кол6+1;
КонецЕсли;
//Если Выборка.Ссылка.Статус = Перечисления.СтатусЗаказа.Выполнен тогда
// кол4 = кол4+1;
//КонецЕсли;
Если Выборка.Ссылка.Статус = Перечисления.СтатусЗаказа.ВОтборе тогда
кол5 = кол5+1;
КонецЕсли;
Если Выборка.Ссылка.Маршрут.Наименование = "Самовывоз (Склад)" тогда
строкколсамовывоз = строкколсамовывоз + 1;
КонецЕсли;
Если Выборка.Ссылка.Маршрут.Наименование = "Самовывоз (Кедышко)" тогда
строкколсамовывоз2 = строкколсамовывоз2 + 1;
КонецЕсли;
да = (Формат(Выборка.Ссылка.Дата, "ДЛФ=Д"));
текда = (Формат(ТекущаяДата(), "ДЛФ=Д"));
Если Выборка.Ссылка.Статус = Перечисления.СтатусЗаказа.Собран и да = текда тогда
кол3 = кол3+1;
КонецЕсли;
дат = (Формат(Выборка.Ссылка1.Дата, "ДЛФ=Д"));
текдат = (Формат(ТекущаяДата(), "ДЛФ=Д"));
Если Выборка.Ссылка1.Статус = Перечисления.СтатусМаршрута.Готов И дат = текдат тогда
кол7 = кол7+Выборка.Ссылка1.МаршрутГород.Наименование;
КонецЕсли;
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаказПокупателя.Ссылка,
| УстановкаЗаказовВМаршрут.Ссылка КАК Ссылка1
|ИЗ
| Документ.ЗаказПокупателя КАК ЗаказПокупателя,
| Документ.УстановкаЗаказовВМаршрут КАК УстановкаЗаказовВМаршрут
|ГДЕ
| ЗаказПокупателя.Проведен
| И ЗаказПокупателя.Дата МЕЖДУ &МесяцНазад И &МесяцВперед
| И УстановкаЗаказовВМаршрут.Проведен";
Запрос.УстановитьПараметр("МесяцНазад", МесяцНазад);
Запрос.УстановитьПараметр("МесяцВперед", ТекущаяДата());
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать("Ссылка");
кол = 0;
//кол2 = 0;
кол3 = 0;
//кол4 = 0;
кол5 = 0;
кол6 = 0;
кол7 = "";
строкколсамовывоз = 0;
строкколсамовывоз2 = 0;
Пока Выборка.Следующий() Цикл
Если Выборка.Ссылка.Статус = Перечисления.СтатусЗаказа.ГотовКОтбору тогда
кол = кол+1;
КонецЕсли;
//Если Выборка.Ссылка.Статус = Перечисления.СтатусЗаказа.Сформирован тогда
// кол2 = кол2+1;
//КонецЕсли;
Если Выборка.Ссылка.Статус = Перечисления.СтатусЗаказа.НаСогласовании тогда
кол6 = кол6+1;
КонецЕсли;
//Если Выборка.Ссылка.Статус = Перечисления.СтатусЗаказа.Выполнен тогда
// кол4 = кол4+1;
//КонецЕсли;
Если Выборка.Ссылка.Статус = Перечисления.СтатусЗаказа.ВОтборе тогда
кол5 = кол5+1;
КонецЕсли;
Если Выборка.Ссылка.Маршрут.Наименование = "Самовывоз (Склад)" тогда
строкколсамовывоз = строкколсамовывоз + 1;
КонецЕсли;
Если Выборка.Ссылка.Маршрут.Наименование = "Самовывоз (Кедышко)" тогда
строкколсамовывоз2 = строкколсамовывоз2 + 1;
КонецЕсли;
да = (Формат(Выборка.Ссылка.Дата, "ДЛФ=Д"));
текда = (Формат(ТекущаяДата(), "ДЛФ=Д"));
Если Выборка.Ссылка.Статус = Перечисления.СтатусЗаказа.Собран и да = текда тогда
кол3 = кол3+1;
КонецЕсли;
дат = (Формат(Выборка.Ссылка1.Дата, "ДЛФ=Д"));
текдат = (Формат(ТекущаяДата(), "ДЛФ=Д"));
Если Выборка.Ссылка1.Статус = Перечисления.СтатусМаршрута.Готов И дат = текдат тогда
кол7 = кол7+Выборка.Ссылка1.МаршрутГород.Наименование;
КонецЕсли;
КонецЦикла;
По теме из базы знаний
- История оптимизации одного большого запроса средствами MSSQL Profiler и 1С
- Неоплаченные долги при распределении оплаты по правилу ФИФО одним запросом и намного быстрее, чем Вы думали
- Консоль запросов к базе Oracle для 1С, без использования специализированных программ
- Оптимизатор запроса. Часть первая
- Как читать чужой код? Часть 3. Разбор и доработка запросов
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот