Имя: Пароль:
1C
 
Запрос по двум подчиненным справочникам с условиями
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) Так я уже сделала. Спасибо :)
Просто я не перестаю удивляться, почему нет возможности (или я просто их не знаю) сделать такие элементарные вещи.