Имя: Пароль:
1C
1С v8
v8 Выборка документов запросом с заданием периода из временной таблицы
0 KARSH
 
30.01.14
15:52
Добрый день.
Проблема в следующем: есть запрос в котором выбираются действующие бонусы, они помещаются во временную таблицу, дальше необходимо определить какие заказы были попали в период действия бонусов:
ВЫБРАТЬ
Бонус.Ссылка КАК Бонус,
Бонус.Ссылка.ПериодНачало КАК ПериодНачало,
Бонус.Ссылка.ПериодОкончание КАК ПериодОкончание,
ПОМЕСТИТЬ ТаблицаБонусов
ИЗ
Документ.Бонусы КАК Бонус
;

ВЫБРАТЬ
ЗаявкаПокупателя.Ссылка КАК ЗаявкаПокупателя
ИЗ Документ.ЗаявкаПокупателя КАК ЗаявкаПокупателя
ГДЕ
ЗаявкаПокупателя.Дата МЕЖДУ &Дата1 И &Дата2

В качестве Дата1 и Дата2 нужно брать минимальное и максимальное значение дат по ТаблицеБонусов.

Кто нибудь сталкивался с таким?
Нужно сделать в одном запросе.
1 zak555
 
30.01.14
15:54
соединить ?
2 Maxus43
 
30.01.14
15:55
ВЫБРАТЬ
МИНИМУМ(Бонус.Ссылка.ПериодНачало) КАК ПериодНачало,
МАКСИМУМ(Бонус.Ссылка.ПериодОкончание) КАК ПериодОкончание,
ПОМЕСТИТЬ ТаблицаБонусов
ИЗ
Документ.Бонусы КАК Бонус
;

ВЫБРАТЬ
ЗаявкаПокупателя.Ссылка КАК ЗаявкаПокупателя
ИЗ Документ.ЗаявкаПокупателя КАК ЗаявкаПокупателя
//+ Соедниение с таблицей Бонусов
3 KARSH
 
30.01.14
15:58
(1)что с чем? количество бонусов может быть много, к примеру:
01.01.14 - 20.01.14
05.01.14 - 18.01.14
02.01.14 - 28.01.14
нужно выбрать заявки с 01.01.14 по 28.01.14
(2) а конкретней соединение слева не подойдет, т.к. бонусы могут пересекаться
4 KARSH
 
30.01.14
16:00
+(3) к тому же если заявок 20000, то запрос будет очень долго работать, т.к. при первой выборке будут выбираться все заявки, потом объединение, а только потом будет отрабатывать ограничение
5 Enders
 
30.01.14
16:02
ЗаявкаПокупателя.Дата МЕЖДУ (ВЫБРАТЬ Минимум(ТаблицаБонусов.ПериодНачало) из ТаблицаБонусов) И (ВЫбрать Максимум(ТаблицаБонусов.ПериодОкончание) из ТаблицаБонусов) Может так?)
6 KARSH
 
30.01.14
16:04
(5) так ругается на ВЫБРАТЬ послем МЕЖДУ :(
7 Maxus43
 
30.01.14
16:11
(3) >>нужно выбрать заявки с 01.01.14 по 28.01.14
ну дак это и будет в (2).
В вт обрати внисание что только даты.
Соединяй вт с документами слева
8 KARSH
 
30.01.14
16:18
(7) понял что хотели сказать, вообщем как то вот так
ВЫБРАТЬ
МИНИМУМ(Бонус.Ссылка.ПериодНачало) КАК ПериодНачало,
МАКСИМУМ(Бонус.Ссылка.ПериодОкончание) КАК ПериодОкончание,
ПОМЕСТИТЬ ТаблицаБонусов
ИЗ
Документ.Бонусы КАК Бонус
;
ВЫБРАТЬ
ЗаявкаПокупателя.Ссылка
ИЗ ТаблицаБонусов        
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ
   Документ.ЗаявкаПокупателя КАК ЗаявкаПокупателя
ПО ТаблицаБонусов.ПериодНачало<= ЗаявкаПокупателя.Ссылка.Дата
   И ТаблицаБонусов.ПериодОкончания>= ЗаявкаПокупателя.Ссылка.Дата
СГРУППИРОВАТЬ ПО
    ЗаявкаПокупателя.Ссылка
9 KARSH
 
30.01.14
16:18
Maxus43 - спасибо
10 Maxus43
 
30.01.14
16:22
И левое сойдёт, что будет быстрей тут хз, надо замерять
11 KARSH
 
30.01.14
16:24
(10) вроде работает нормально, будут жаловаться тогда и буду думать. Спасибо
12 Jaap Vduul
 
30.01.14
16:24
Бонус.Ссылка.ПериодНачало
ЗаявкаПокупателя.Ссылка.Дата

.Ссылка - лишнее
13 zak555
 
30.01.14
16:24
если бонус будет

26.01-31.01 -- этим запросом попадёт
14 zak555
 
30.01.14
16:28
ту надо в тз запихнуть за период, а уж потом тз соединять с бонусом
15 zak555
 
30.01.14
16:30
*в тз запихнуть заявки за период
16 KARSH
 
30.01.14
16:31
(13) почему попадет? там стоит И не ИЛИ, жесткое ограничение
на границы совпадения периодов
17 zak555
 
30.01.14
16:36
(16) что в тз у тебя первый запрос попадает ?
18 KARSH
 
30.01.14
16:41
понял, там надо ограничение поставить на выборку за определенные даты
19 KARSH
 
30.01.14
16:41
(17) спасибо
2 + 2 = 3.9999999999999999999999999999999...