Коллеги, помогите понять, где проблема
Есть запрос:
ВЫБРАТЬ
ХарактеристикаСырьяМесторожденияХарактеристики.ТипХарки,
ХарактеристикаСырьяМесторожденияХарактеристики.Харка,
ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMin,
ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMax,
ХарактеристикаСырьяМесторожденияХарактеристики.Среднее,
ХарактеристикаСырьяМесторожденияХарактеристики.Ссылка,
ХарактеристикаСырьяМесторожденияХарактеристики.Ссылка.ПринадлежностьМесторождению
ИЗ
Документ.ХарактеристикаСырьяМесторождения.Характеристики КАК ХарактеристикаСырьяМесторожденияХарактеристики
ГДЕ
ХарактеристикаСырьяМесторожденияХарактеристики.Ссылка.Сырье = &Сырье
И (ХарактеристикаСырьяМесторожденияХарактеристики.ТипХарки = &ТипХарки1
И ХарактеристикаСырьяМесторожденияХарактеристики.Харка = &Харка1
И ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMin > &ЗначениеMin1)
И (ХарактеристикаСырьяМесторожденияХарактеристики.ТипХарки = &ТипХарки2
И ХарактеристикаСырьяМесторожденияХарактеристики.Харка = &Харка2
И ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMin < &ЗначениеMin2)
Делаю выборку из документов, где в табличной части есть совпадающие условия
Если убрать второе "И"
( И (ХарактеристикаСырьяМесторожденияХарактеристики.ТипХарки = &ТипХарки2
И ХарактеристикаСырьяМесторожденияХарактеристики.Харка = &Харка2
И ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMin < &ЗначениеMin2))
Запрос корректно работает, а если не убирать - пишет, что ничего не найдено.
Все значения проверил, такой документ существует, но запрос не отрабатывает
Есть запрос:
ВЫБРАТЬ
ХарактеристикаСырьяМесторожденияХарактеристики.ТипХарки,
ХарактеристикаСырьяМесторожденияХарактеристики.Харка,
ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMin,
ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMax,
ХарактеристикаСырьяМесторожденияХарактеристики.Среднее,
ХарактеристикаСырьяМесторожденияХарактеристики.Ссылка,
ХарактеристикаСырьяМесторожденияХарактеристики.Ссылка.ПринадлежностьМесторождению
ИЗ
Документ.ХарактеристикаСырьяМесторождения.Характеристики КАК ХарактеристикаСырьяМесторожденияХарактеристики
ГДЕ
ХарактеристикаСырьяМесторожденияХарактеристики.Ссылка.Сырье = &Сырье
И (ХарактеристикаСырьяМесторожденияХарактеристики.ТипХарки = &ТипХарки1
И ХарактеристикаСырьяМесторожденияХарактеристики.Харка = &Харка1
И ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMin > &ЗначениеMin1)
И (ХарактеристикаСырьяМесторожденияХарактеристики.ТипХарки = &ТипХарки2
И ХарактеристикаСырьяМесторожденияХарактеристики.Харка = &Харка2
И ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMin < &ЗначениеMin2)
Делаю выборку из документов, где в табличной части есть совпадающие условия
Если убрать второе "И"
( И (ХарактеристикаСырьяМесторожденияХарактеристики.ТипХарки = &ТипХарки2
И ХарактеристикаСырьяМесторожденияХарактеристики.Харка = &Харка2
И ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMin < &ЗначениеMin2))
Запрос корректно работает, а если не убирать - пишет, что ничего не найдено.
Все значения проверил, такой документ существует, но запрос не отрабатывает
По теме из базы знаний
- Неоптимальности вида «план исполнения запроса "испортился"» - поиск и исправление
- Планы запросов - это просто! Разбор оптимизаций запросов PostgreSQL на живых примерах
- Распространенные ошибки разработчиков, приводящие к проблемам производительности
- Экспертный взгляд на оптимизацию производительности на примере исправления и декомпозиции запроса
- Варианты отладки и оптимизации запросов в 1С
Найденные решения
(11)psa247,
даже наверное точнее вот как то так, на примере другого типа документа, свои поля просто подставишь
даже наверное точнее вот как то так, на примере другого типа документа, свои поля просто подставишь
ВЫБРАТЬ
Вложение.Ссылка
ИЗ
(ВЫБРАТЬ
ПоступлениеТоваровУслугТовары.Ссылка КАК Ссылка,
1 КАК Поле1,
0 КАК Поле2
ИЗ
Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
ГДЕ
ПоступлениеТоваровУслугТовары.Ссылка.Склад = &Склад
И ПоступлениеТоваровУслугТовары.Номенклатура = &Номенклатура1
И ПоступлениеТоваровУслугТовары.Характеристика = &Характеристика1
И ПоступлениеТоваровУслугТовары.Цена > &Цена1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ПоступлениеТоваровУслугТовары.Ссылка,
0,
1
ИЗ
Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
ГДЕ
ПоступлениеТоваровУслугТовары.Ссылка.Склад = &Склад
И ПоступлениеТоваровУслугТовары.Номенклатура = &Номенклатура2
И ПоступлениеТоваровУслугТовары.Характеристика = &Характеристика2
И ПоступлениеТоваровУслугТовары.Цена < &Цена2) КАК Вложение
СГРУППИРОВАТЬ ПО
Вложение.Ссылка
ИМЕЮЩИЕ
СУММА(Вложение.Поле1) > 0 И
СУММА(Вложение.Поле2) > 0
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
[CODE
ГДЕ
ХарактеристикаСырьяМесторожденияХарактеристики.Ссылка.Сырье = &Сырье
И
(
(ХарактеристикаСырьяМесторожденияХарактеристики.ТипХарки = &ТипХарки1
И ХарактеристикаСырьяМесторожденияХарактеристики.Харка = &Харка1
И ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMin > &ЗначениеMin1)
ИЛИ
(ХарактеристикаСырьяМесторожденияХарактеристики.ТипХарки = &ТипХарки2
И ХарактеристикаСырьяМесторожденияХарактеристики.Харка = &Харка2
И ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMin < &ЗначениеMin2)
)
[/1C-CODE]
ГДЕ
ХарактеристикаСырьяМесторожденияХарактеристики.Ссылка.Сырье = &Сырье
И
(
(ХарактеристикаСырьяМесторожденияХарактеристики.ТипХарки = &ТипХарки1
И ХарактеристикаСырьяМесторожденияХарактеристики.Харка = &Харка1
И ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMin > &ЗначениеMin1)
ИЛИ
(ХарактеристикаСырьяМесторожденияХарактеристики.ТипХарки = &ТипХарки2
И ХарактеристикаСырьяМесторожденияХарактеристики.Харка = &Харка2
И ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMin < &ЗначениеMin2)
)
[/1C-CODE]
(9) psa247, тогда я так понимаю надо выбрать документы где есть одновременно две строки одна из которых подходит под условие:
и вторая под условие:
но тогда не получится:
а лишь только получить ссылку на сам документ...
(ХарактеристикаСырьяМесторожденияХарактеристики.ТипХарки = &ТипХарки1
И ХарактеристикаСырьяМесторожденияХарактеристики.Харка = &Харка1
И ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMin > &ЗначениеMin1)
и вторая под условие:
(ХарактеристикаСырьяМесторожденияХарактеристики.ТипХарки = &ТипХарки2
И ХарактеристикаСырьяМесторожденияХарактеристики.Харка = &Харка2
И ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMin < &ЗначениеMin2)
)
но тогда не получится:
ВЫБРАТЬ
ХарактеристикаСырьяМесторожденияХарактеристики.ТипХарки,
ХарактеристикаСырьяМесторожденияХарактеристики.Харка,
ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMin,
ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMax,
а лишь только получить ссылку на сам документ...
Да, достаточно ссылку на документ получить
Убрал лишнее, запрос получается такой:
ВЫБРАТЬ
ХарактеристикаСырьяМесторожденияХарактеристики.Ссылка
ИЗ
Документ.ХарактеристикаСырьяМесторождения.Характеристики КАК ХарактеристикаСырьяМесторожденияХарактеристики
ГДЕ
ХарактеристикаСырьяМесторожденияХарактеристики.Ссылка.Сырье = &Сырье
И (ХарактеристикаСырьяМесторожденияХарактеристики.ТипХарки = &ТипХарки1
И ХарактеристикаСырьяМесторожденияХарактеристики.Харка = &Харка1
И ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMin > &ЗначениеMin1)
И (ХарактеристикаСырьяМесторожденияХарактеристики.ТипХарки = &ТипХарки2
И ХарактеристикаСырьяМесторожденияХарактеристики.Харка = &Харка2
И ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMin < &ЗначениеMin2)
Но все равно пустой результат
Убрал лишнее, запрос получается такой:
ВЫБРАТЬ
ХарактеристикаСырьяМесторожденияХарактеристики.Ссылка
ИЗ
Документ.ХарактеристикаСырьяМесторождения.Характеристики КАК ХарактеристикаСырьяМесторожденияХарактеристики
ГДЕ
ХарактеристикаСырьяМесторожденияХарактеристики.Ссылка.Сырье = &Сырье
И (ХарактеристикаСырьяМесторожденияХарактеристики.ТипХарки = &ТипХарки1
И ХарактеристикаСырьяМесторожденияХарактеристики.Харка = &Харка1
И ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMin > &ЗначениеMin1)
И (ХарактеристикаСырьяМесторожденияХарактеристики.ТипХарки = &ТипХарки2
И ХарактеристикаСырьяМесторожденияХарактеристики.Харка = &Харка2
И ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMin < &ЗначениеMin2)
Но все равно пустой результат
(11) psa247,
ВЫБРАТЬ
Вложение.Ссылка
ИЗ
(ВЫБРАТЬ
ХарактеристикаСырьяМесторожденияХарактеристики.Ссылка КАК Ссылка,
СУММА(1) КАК Признак
ИЗ
Документ.ХарактеристикаСырьяМесторождения.Характеристики КАК ХарактеристикаСырьяМесторожденияХарактеристики
ГДЕ
ХарактеристикаСырьяМесторожденияХарактеристики.Ссылка.Сырье = &Сырье
И
(
(ХарактеристикаСырьяМесторожденияХарактеристики.ТипХарки = &ТипХарки1
И ХарактеристикаСырьяМесторожденияХарактеристики.Харка = &Харка1
И ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMin > &ЗначениеMin1)
ИЛИ
(ХарактеристикаСырьяМесторожденияХарактеристики.ТипХарки = &ТипХарки2
И ХарактеристикаСырьяМесторожденияХарактеристики.Харка = &Харка2
И ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMin < &ЗначениеMin2)
)
СГРУППИРОВАТЬ ПО
ХарактеристикаСырьяМесторожденияХарактеристики.Ссылка) КАК Вложение
ГДЕ
Вложение.Признак >= 2
Показать
(11)psa247,
даже наверное точнее вот как то так, на примере другого типа документа, свои поля просто подставишь
даже наверное точнее вот как то так, на примере другого типа документа, свои поля просто подставишь
ВЫБРАТЬ
Вложение.Ссылка
ИЗ
(ВЫБРАТЬ
ПоступлениеТоваровУслугТовары.Ссылка КАК Ссылка,
1 КАК Поле1,
0 КАК Поле2
ИЗ
Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
ГДЕ
ПоступлениеТоваровУслугТовары.Ссылка.Склад = &Склад
И ПоступлениеТоваровУслугТовары.Номенклатура = &Номенклатура1
И ПоступлениеТоваровУслугТовары.Характеристика = &Характеристика1
И ПоступлениеТоваровУслугТовары.Цена > &Цена1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ПоступлениеТоваровУслугТовары.Ссылка,
0,
1
ИЗ
Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
ГДЕ
ПоступлениеТоваровУслугТовары.Ссылка.Склад = &Склад
И ПоступлениеТоваровУслугТовары.Номенклатура = &Номенклатура2
И ПоступлениеТоваровУслугТовары.Характеристика = &Характеристика2
И ПоступлениеТоваровУслугТовары.Цена < &Цена2) КАК Вложение
СГРУППИРОВАТЬ ПО
Вложение.Ссылка
ИМЕЮЩИЕ
СУММА(Вложение.Поле1) > 0 И
СУММА(Вложение.Поле2) > 0
Показать
ВЫБРАТЬ
ХарактеристикаСырьяМесторожденияХарактеристики.Ссылка,
ХарактеристикаСырьяМесторожденияХарактеристики.Харка,
ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMin
ИЗ
Документ.ХарактеристикаСырьяМесторождения.Характеристики КАК ХарактеристикаСырьяМесторожденияХарактеристики
ГДЕ
ХарактеристикаСырьяМесторожденияХарактеристики.Ссылка.Сырье = &Сырье
И ВЫБОР
КОГДА ХарактеристикаСырьяМесторожденияХарактеристики.Харка = &Харка1
ТОГДА ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMin > &ЗначениеMin1
И ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMin <> 0
КОГДА ХарактеристикаСырьяМесторожденияХарактеристики.Харка = &Харка2
ТОГДА ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMin < &ЗначениеMin2
ИНАЧЕ ЛОЖЬ
КОНЕЦ
ХарактеристикаСырьяМесторожденияХарактеристики.Ссылка,
ХарактеристикаСырьяМесторожденияХарактеристики.Харка,
ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMin
ИЗ
Документ.ХарактеристикаСырьяМесторождения.Характеристики КАК ХарактеристикаСырьяМесторожденияХарактеристики
ГДЕ
ХарактеристикаСырьяМесторожденияХарактеристики.Ссылка.Сырье = &Сырье
И ВЫБОР
КОГДА ХарактеристикаСырьяМесторожденияХарактеристики.Харка = &Харка1
ТОГДА ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMin > &ЗначениеMin1
И ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMin <> 0
КОГДА ХарактеристикаСырьяМесторожденияХарактеристики.Харка = &Харка2
ТОГДА ХарактеристикаСырьяМесторожденияХарактеристики.ЗначениеMin < &ЗначениеMin2
ИНАЧЕ ЛОЖЬ
КОНЕЦ
(21) psa247, не факт что получишь документы в которых обязательно присутствуют хотя бы две строки попадающие под два нужных условия, все равно как в (13) придется группировать с контролем двух видов строк, так сказать, я вчера сначала сделал (12), а потом понял что, если попадутся две строки по Условию1, то такой документ все равно выведется, а тебе он не нужен, поэтому и переделал на (13)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот