|
|
|
Запрос по двум подчиненным справочникам с условиями | ☑ | ||
|---|---|---|---|---|
|
0
Leyla
19.10.04
✎
07:49
|
Имеется справочник Контрагенты, и два подчиненных к нему: НефтебазыКонтрагентов и ВидыРеализацииКонтрагентов. Необходимо сделать выборку контрагентов, у которых Нефтебаза = ВыбНефтебаза и ВидРеализации=ВыбВидРеализации.
Пишу запрос: ТекстЗапроса = "//{{ЗАПРОС(По подчиненным справочникам) |Обрабатывать НеПомеченныеНаУдаление; |Контрагент = Справочник.НефтебазыКонтрагентов.Владелец, Справочник.ВидыРеализацииКонтрагентов.Владелец; |Нефтебаза = Справочник.НефтебазыКонтрагентов.Знач; |ВидРеализации = Справочник.ВидыРеализацииКонтрагентов.Знач; |Группировка Контрагент без групп; |Условие ((Нефтебаза = ВыбНефтебаза) или (ВидРеализации = ВыбВидРеализации)); |"//}}ЗАПРОС При выводе результатов запроса выдает у контрагента либо пустую Нефтебазу, либо пустой ВидРеализации. Как написать подобный запрос? |
|||
|
1
@@Собачки
19.10.04
✎
08:04
|
Вместо
; |Условие ((Нефтебаза = ВыбНефтебаза) или (ВидРеализации = ВыбВидРеализации)); |"//}}ЗАПРОС поставь ; |Условие ((Нефтебаза = ВыбНефтебаза) и (ВидРеализации = ВыбВидРеализации)); |"//}}ЗАПРОС |
|||
|
2
Leyla
19.10.04
✎
08:12
|
Тогда вообще ничего не выдает. Пустой результат запроса.
|
|||
|
3
@@Собачки
19.10.04
✎
08:37
|
Значит нет таких
у которых Нефтебаза = ВыбНефтебаза и ВидРеализации=ВыбВидРеализации. Предлагаю завести парочку для проверки |
|||
|
4
Leyla
19.10.04
✎
08:50
|
В том-то и дело, что есть, завела уж давно, и не одного.
Если делать выборку только по одному подчиненному справочнику (например, выбрать контрагентов, которые относятся только к ВыбНефтебазе), все прекрасно получается, а вот если нужно поставить два условия: на Нефтебазу и ВидРеализации, то не выходит. |
|||
|
5
Морозов Александр
19.10.04
✎
09:03
|
(4)А если упростить:
|Условие (Нефтебаза = ВыбНефтебаза); |Условие (ВидРеализации = ВыбВидРеализации); З.ы. А что такое "Справочник.НефтебазыКонтрагентов.Знач"? |
|||
|
6
Valery
19.10.04
✎
09:05
|
как я понял ВыбНефтебаза- тип Справочник.НефтебазыКонтрагентов
а в запросе Нефтебаза = Справочник.НефтебазыКонтрагентов.Знач; Может где-то здесь ошибка. |
|||
|
7
Leyla
19.10.04
✎
09:12
|
(5) Пробовала упростить - то же самое.
Справочник.НефтебазыКонтрагентов.Знач это реквизит типа "Справочник.Нефтебазы" |
|||
|
8
Leyla
19.10.04
✎
09:13
|
(6) ВыбНефтебаза типа "Справочник.Нефтебазы",
Справочник.НефтебазыКонтрагентов.Знач также типа "Справочник.Нефтебазы" |
|||
|
9
Leyla
19.10.04
✎
09:17
|
Есть отдельные, никому не подчиненные справочники "Нефтебазы" и "Виды реализации".
А есть подчиненные правочнику "Контрагенты" справочники "НефтебазыКонтрагентов" и "ВидыРеализацииКонтрагентов", в которых реквизит Знач ссылается соответственно на Нефтебазу или ВидРеализации. Таким образом задается отношение один ко многим между Контрагентами и Нефтебазами, Контрагентами и ВидамиРеализации. |
|||
|
10
Морозов Александр
19.10.04
✎
09:28
|
(5) По другому
ТекстЗапроса = "//{{ЗАПРОС(По подчиненным справочникам) |Обрабатывать НеПомеченныеНаУдаление; |Контрагент = Справочник.Контрагенты.ТекущийЭлемент; |Владелец = Справочник.НефтебазыКонтрагентов.Владелец, Справочник.ВидыРеализацииКонтрагентов.Владелец; |Нефтебаза = Справочник.НефтебазыКонтрагентов.Знач; |ВидРеализации = Справочник.ВидыРеализацииКонтрагентов.Знач; |Условие(Контрагент=Владелец); |Условие (Нефтебаза = ВыбНефтебаза); |Условие (ВидРеализации = ВыбВидРеализации); |Группировка Контрагент без групп; |"//}}ЗАПРОС |
|||
|
11
egor1
19.10.04
✎
10:20
|
IMHO: Так и правильно выдает, где же здесь связь межу владельцем нефтебазы и владельцем вида реализации?
Надо написать обработку результатов запроса для сворачивания таблицы значений в тот вид, который нужен. |
|||
|
12
Leyla
19.10.04
✎
10:25
|
(10) Попробовала, опять получается пустой результат запроса, т.е. не выдает ни одного контрагента.
Таоке вообще возможно, испоьзовать два подчиненных справочника в одном запросе? |
|||
|
13
Leyla
19.10.04
✎
10:27
|
(11) Т.е. одним запросом такое не реализовать?
Предлагаете получить отдельно список Контрагентов - владельцев нефтебаз, отдельно - владельцев ВидовРеализации, и потом их пересечь? |
|||
|
14
France
19.10.04
✎
10:40
|
(0) вот вместо этого
|Условие (Нефтебаза = ВыбНефтебаза); |Условие (ВидРеализации = ВыбВидРеализации); попробуй |Условие (Нефтебаза в ВыбНефтебаза); |Условие (ВидРеализации в ВыбВидРеализации); т.е. вместо "=" ставьте "в". |
|||
|
15
Leyla
19.10.04
✎
10:47
|
(14) А почему "В"? Это же проверка на вхождение.
Попробовала |Условие (Нефтебаза в ВыбНефтебаза); |Условие (ВидРеализации в ВыбВидРеализации); и |Условие (ВыбНефтебаза в Нефтебаза); |Условие (ВыбВидРеализации в ВидРеализации); не помогло. |
|||
|
16
egor1
19.10.04
✎
11:57
|
(13) По-моему, и не должно получиться. Ведь у вас два не пересекающихся множества.
|
|||
|
17
Leyla
19.10.04
✎
12:02
|
(16) Два непересекающихся множества - какие множества вы имеете ввиду?
|
|||
|
18
Leyla
19.10.04
✎
12:03
|
(16) Как тогда решить подобную задачу?
|
|||
|
19
egor1
19.10.04
✎
12:32
|
(17),(18) Есть контрагент со своими нефтебазами и есть он же но со способами расчета. Где связь между нефтебазой и способом расчета? Не вижу, видимо ее и нет. Чего же вы хотите в результате, не ясно. Убрать пустые места? Решите как они должны быть заполнены вообще (без применения 1С) и тогда поймете алгоритм и соответственно можно будет говорить о решении.
|
|||
|
20
Leyla
19.10.04
✎
12:41
|
(19) Я хочу в отчет выбрать только тех Контрагентов, которые имеют отношение к заданной пользователем (выбранной в форме отчета) ВыбНефтебазе (один контрагент может затариваться на различных нефтебазах, поэтому создали подчиненный справочник НефтебазыКонтрагента). Этот же Контрагент должен иметь в своем списке Видов реализации указанный пользователем ВыбВидРеализации. Вот и все, что тут не понятного. Связь между Нефтебазой и ВидомРеализации идет через Контрагента - у них один и тот же владелец.
|
|||
|
21
Leyla
19.10.04
✎
13:50
|
Дааа... видимо, так неграмотная и помру...
|
|||
|
22
egor1
19.10.04
✎
14:24
|
Не уверен, но можно попробовать
ТекстЗапроса = "//{{ЗАПРОС(По подчиненным справочникам) |Обрабатывать НеПомеченныеНаУдаление; |КонтрагентН = Справочник.НефтебазыКонтрагентов.Владелец; |КонтрагентР = Справочник.ВидыРеализацииКонтрагентов.Владелец; |Нефтебаза = Справочник.НефтебазыКонтрагентов.Знач; |ВидРеализации = Справочник.ВидыРеализацииКонтрагентов.Знач; |Группировка КонтрагентН без групп; |Условие ((Нефтебаза = ВыбНефтебаза) или (ВидРеализации = ВыбВидРеализации)); |Условие (КонтрагентН = КонтрагентР); |"//}}ЗАПРОС |
|||
|
23
Valery
19.10.04
✎
14:45
|
Думаю |Нефтебаза =
|ВидРеализации и условия из запроса исключить и выполнять проверку условий на этапе обхода группировок. |
|||
|
24
Leyla
19.10.04
✎
14:52
|
(22) Опять запрос ничего не возвращает, пустой результат.
|
|||
|
25
Leyla
19.10.04
✎
14:55
|
(23) Да, так, конечно, можно, просто хотелось сразу получить нужных контрагентов, вроде простейшие условия, а не получается.
На обычном SQL такое в два счета можно сделать без всяких премудростей. |
|||
|
26
Valery
19.10.04
✎
14:58
|
Делай проще и будет правильно.
Делайте правильно и вам будет легко. Если так можно сделать, то надо попробовать. |
|||
|
27
Leyla
19.10.04
✎
15:22
|
(26) Так я уже сделала. Спасибо :)
Просто я не перестаю удивляться, почему нет возможности (или я просто их не знаю) сделать такие элементарные вещи. |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |