Имя: Пароль:
1C
1С v8
Подскажите с запросом
0 Helg
 
26.12.12
14:03
Есть запрос. Он выдает агентов и количество заключенных договоров. А также их систему оплаты.

ВЫБРАТЬ
   РезультатыАгентовОбороты.Агент,
   РезультатыАгентовОбороты.Фонд,
   РезультатыАгентовОбороты.ЦелевыхОборот,
   РезультатыАгентовОбороты.ТранзитныхОборот,
   СистемыОплатыАгентаСрезПоследних.СистемаОплаты,
   ВложенныйЗапрос.ВсегоДоговоров
ИЗ
   РегистрНакопления.РезультатыАгентов.Обороты(&ДатаНач, &ДатаКон, , ) КАК РезультатыАгентовОбороты
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СистемыОплатыАгента.СрезПоследних(&ДатаНач, ) КАК СистемыОплатыАгентаСрезПоследних
       ПО РезультатыАгентовОбороты.Агент = СистемыОплатыАгентаСрезПоследних.Агент
           И РезультатыАгентовОбороты.Фонд = СистемыОплатыАгентаСрезПоследних.Фонд
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           РезультатыАгентовОбороты.Агент КАК Агент,
           РезультатыАгентовОбороты.ЦелевыхОборот + РезультатыАгентовОбороты.ТранзитныхОборот КАК ВсегоДоговоров
       ИЗ
           РегистрНакопления.РезультатыАгентов.Обороты(&ДатаНач, &ДатаКон, , ) КАК РезультатыАгентовОбороты) КАК ВложенныйЗапрос
       ПО РезультатыАгентовОбороты.Агент = ВложенныйЗапрос.Агент

И есть справочник СистемыОплаты. В нем табличная часть Пороговые значения вида:

Порог    СуммаОплаты
1             100
5             200
10            300.

И нужно к каждой строке запроса привязать сумму оплаты за договор, сравнивая по полю запроса "ВсегоДоговоров".
Т.е. что-то типа
ВЫБРАТЬ ПЕРВЫЕ 1
   СистемыОплатыПороговыеЗначения.Порог,
   СистемыОплатыПороговыеЗначения.ОплатаЦелевой,
   СистемыОплатыПороговыеЗначения.ОплатаТранзитный,
   СистемыОплатыПороговыеЗначения.Ссылка.Наименование
ИЗ
   Справочник.СистемыОплаты.ПороговыеЗначения КАК СистемыОплатыПороговыеЗначения
ГДЕ
   СистемыОплатыПороговыеЗначения.Порог > &Порог
   И СистемыОплатыПороговыеЗначения.Ссылка = &Ссылка

Но как этот 2-й запрос связать с первым?
Т.е. параметр Порог равен значению ВсегоДоговоров из первого запроса и параметр Ссылка равен значению СистемыОплатыАгентаСрезПоследних.СистемаОплаты из первого запроса.
1 Reset
 
26.12.12
14:06
Связать по КоличествоВПеервомЗапросе>КоличествоВоВтором
затем использовать агрегатную ф-ю Максимум
2 Reset
 
26.12.12
14:07
или если "Порог равен значению ВсегоДоговоров" то на равенство, но тогда вопрос непонятен
3 Helg
 
26.12.12
14:10
(2) Можно и так СистемыОплатыПороговыеЗначения.Порог >= &Порог
4 Reset
 
26.12.12
14:10
а, прочитатл внимательней, (2) отменяется.

и в (1) не "<" а ">" и Минимум вметос максимум
5 Helg
 
26.12.12
14:10
(1) Сейчас попробую
6 Helg
 
26.12.12
14:11
Первый запрос во ВременнуюТаблицу?
7 Reset
 
26.12.12
14:11
не "<" а ">"

короче зависит от условий, наклываемм на порадание меджуде "порогами"
8 Reset
 
26.12.12
14:12
форум походу форматирует < >
или я тупой опечатываюсь два раза
9 Reset
 
26.12.12
14:13
наклываемм на порадание меджуде "порогами"
==>
накладываемых на попадание между порогами

я разучился печатать, поду учиться
10 Reset
 
26.12.12
14:15
(6) Во временную, как минимум для читаемости
11 Reset
 
26.12.12
14:21
Выбрать Максимум(СистемыОплатыПороговыеЗначения.СуммаОплаты)

ПО
СистемыОплатыПороговыеЗначения.Ссылка = ПервыйЗапрос.СистемаОплаты
И
ПервыйЗапрос.ВсегоДоговоров>СистемыОплатыПороговыеЗначения.Порог

Сгрупппировать по
...Список полей

Будет для ВсегоДоговоров=7 выдавать СуммаОплаты 200
для приведенного примера
12 Helg
 
26.12.12
14:46
(11) А можно как-то сделать не функцией МАКСИМУМ, а выражением ПЕРВЫЕ 1. Кто-нибудь знает как?
13 Helg
 
26.12.12
14:47
Лучше через ПЕРВЫЕ 1. Но как связать пока не придумал.
14 Helg
 
26.12.12
14:55
Кто-нибудь знает?
15 sapphire
 
26.12.12
14:58
(12) Нельзя.
16 sapphire
 
26.12.12
14:59
(14) Многие знают. Ответ НЕЛЬЗЯ.
1С не поддерживает скалярные запросы.
17 Helg
 
26.12.12
15:03
в SQL это было бы так
OUTER APPLY
(Select top 1
from СистемыОплатыПороговыеЗначения
where ...)

Оператор OUTER APPLY не поддерживается?
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс