Имя: Пароль:
1C
1С v8
Спецы по запросам, к вам челОм бью
,
0 Alex33
 
27.09.11
16:12
Есть справочник "Контрагенты". Есть справочник "Коэффициенты" с реквизитами "ГруппаКонтрагентов" (куда выбирается группа контрагентов) и "Коэффициент". Можно ли в запросом получить табличку соответствий "Контрагент-Коэффициент", где контрагенты входят в группы из справочника "Коэффициенты" ? Несколько сумбурно обьясняюсь, но, надеюсь, поймете. Вставить коэффициент непосредственно в справочник Контрагенты - не предлагать. Заранее спасибо.
1 shuhard
 
27.09.11
16:12
(0) да
2 aleks-id
 
27.09.11
16:13
пицот рублей
3 Gesperid10
 
27.09.11
16:14
499 =)
4 acsent
 
27.09.11
16:14
только если ограничена иерархия
5 DrShad
 
27.09.11
16:14
я в принципе не имею ничего против, делай
6 Alex33
 
27.09.11
16:14
(1) - а пример нельзя показать?
7 Alex33
 
27.09.11
16:14
(4) - иерархия, к сожалению, не ограничена
8 catena
 
27.09.11
16:14
соединение по контрагенты.владелец=Коэффициенты.ГруппаКонтрагентов, если правильно поняла...
9 catena
 
27.09.11
16:15
(7)А, о, сложнее :)
10 butterbean
 
27.09.11
16:18
(7) красиво запросом не получится, нужно вычислять максимальный уровень вложенности
11 Alex33
 
27.09.11
16:19
(10) - вот и меня такие же мысли, и грустно от этого...
12 Maxus43
 
27.09.11
16:26
запросом можно получить всех родителей конкретного контрагента, но не красиво... а ещё потом соединять с непойми чем... в коде обработать проще будет, там есть ПринадлежитЭлементу() и т.д.
13 Alex33
 
27.09.11
16:28
(12) - согласен, что в коде обработать проще, но хотелось, чтобы было красиво...
14 Maxus43
 
27.09.11
16:28
запросом красиво не получится. понятней будет в коде
15 hhhh
 
27.09.11
16:29
(13) как-то так

ИЗ Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Коэффициенты КАК Коэффициенты
ПО Контрагенты.Родитель = Коэффициенты.ГруппаКонтрагентов
ИЛИ Контрагенты.Родитель.Родитель = Коэффициенты.ГруппаКонтрагентов
ИЛИ Контрагенты.Родитель.Родитель.Родитель = Коэффициенты.ГруппаКонтрагентов
ИЛИ Контрагенты.Родитель.Родитель.Родитель.Родитель = Коэффициенты.ГруппаКонтрагентов
ИЛИ Контрагенты.Родитель.Родитель.Родитель.Родитель.Родитель = Коэффициенты.ГруппаКонтрагентов
ИЛИ Контрагенты.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель = Коэффициенты.ГруппаКонтрагентов
ИЛИ Контрагенты.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель = Коэффициенты.ГруппаКонтрагентов
ИЛИ Контрагенты.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель = Коэффициенты.ГруппаКонтрагентов
ИЛИ Контрагенты.Родитель.Родитель = Коэффициенты.ГруппаКонтрагентов
ИЛИ Контрагенты.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель = Коэффициенты.ГруппаКонтрагентов
ИЛИ ...
16 Alex33
 
27.09.11
16:35
(15) - да, такая конструкция приходила в голову, но уж больно оно некрасиво. Я всё вымучиваю: ну а вдруг можно как-нибудь хитро и универсально запросить...
17 IKSparrow
 
27.09.11
16:37
10499.
по пять штук нам с тобой и 499 тому парню.
18 OldFornit
 
27.09.11
16:42
В рамках СКД - легко. Голым запросом - заколебешься.
19 VasRogov
 
27.09.11
17:04
(15) ИМХО можно просто вот так:
ИЗ Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Коэффициенты КАК Коэффициенты
Контрагенты.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель = Коэффициенты.ГруппаКонтрагентов
20 hhhh
 
27.09.11
17:07
(19) не получается, к сожалению.
21 Steelvan
 
27.09.11
17:40
Можно идти от обратного. Сначала разложить Коэфф. - Группа до таблицы, где будут все группы с из Коэфф.
22 Steelvan
 
27.09.11
17:42
Делать тз, потом эту тз пихать во временную таблицу и в запросе делать соединение с этой таблицей.
23 sda553
 
27.09.11
17:52
В два запроса,
- первым считаем максимальный уровень вложенности на тек. момент
- Второй запрос строится в зависимости от результатов первого по типу как в (15)
24 Ochkarito
 
27.09.11
18:00
(0)Попробуй так (за оптимальность работы запроса не ручаюсь):

ВЫБРАТЬ
   Контрагенты.Ссылка,
   Коэффициенты.Коэффициент
ИЗ
   Справочник.Контрагенты КАК Контрагенты
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Коэффициенты КАК Коэффициенты
       
       ПО (Контрагенты.Ссылка В ИЕРАРХИИ
               (ВЫБРАТЬ
                   Коэффициенты.ГруппаКонтрагентов
               ИЗ
                   Справочник.Коэффициенты КАК Коэффициенты))
ГДЕ
   Контрагенты.ЭтоГруппа = ЛОЖЬ
25 Alex33
 
27.09.11
18:09
(24) - Данный запрос выберет все сочетания Контрагентов и Коэффициентов
26 Alex33
 
27.09.11
18:27
В качестве решения выбрал следующее, подсказанное на другом форуме:
ВЫБРАТЬ
Коэффициенты.Коэффициент,
Контрагенты.Ссылка
ИЗ
Справочники.Коэффициенты КАК Коэффициенты
Левое соединение Справочник.Контрагенты КАК Контрагенты
ПО Коэффициенты.ГруппаКонтрагентов=Контрагенты.Родитель
ГДЕ
Контрагенты.ЭтоГруппа=ЛОЖЬ

Не будет работать с вложенными группами, но в остальном под мои цели подходит.
Всем спасибо за помощь. Удачи вам.
27 sda553
 
28.09.11
07:47
(24) Пора бы тебе уже открыть тайну что (В ИЕРАРХИИ) не работает если ставить его в условие соединения
СОЕДИНЕНИЕ ПО
28 Ochkarito
 
28.09.11
09:32
(26),(27) Хотя бы проверили как запрос отрабатывает, прежде чем что-то утверждать =)
29 Gesperid10
 
28.09.11
09:56
(28) сам-то проверил?
30 Ochkarito
 
28.09.11
09:58
(29) А что не так?
31 Gesperid10
 
28.09.11
10:00

(ВЫБРАТЬ
 Коэффициенты.ГруппаКонтрагентов
ИЗ
 Справочник.Коэффициенты КАК Коэффициенты)

вернёт все группы, а не текущей строки Коэффициенты, как ты ожидаешь
32 Segate
 
28.09.11
10:02
Рекурсией, не проще?
33 Ochkarito
 
28.09.11
10:04
(31) Ага, все. Поэтому в (24) про оптимальность написал, если нужно по конкретной группе, то добавить условие
Коэффициенты.ГруппаКонтрагентов = &ГруппаКонтрагентов.
Только в данном случае это подзапрос, проверяющий вхождение Контрагенты.Ссылка.
34 Gesperid10
 
28.09.11
10:11
(33) тут дело не в оптимальности, у тебя каждый контрагент получит все коэффициенты
35 Ochkarito
 
28.09.11
10:16
(34)Ок
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.