Имя: Пароль:
1C
1С v8
Помогите с запросом
0 Melcor
 
05.05.14
13:40
Доброго дня. Есть самописный регистр бонусы сантехников. Хочу в запросе получать последнюю запись по периоду, при этом хочу знать по какому подразделению было начисление и с условием, что СуммаБонусов больше нуля, но 1С ругается если я не включаю эти поля в группировку, а они мне там не нужны.
Вот так не работает:
ВЫБРАТЬ
    интБонусыСантехников.Клиент КАК Клиент,
    интБонусыСантехников.Подразделение,    
    интБонусыСантехников.СуммаБонусов,    
    МАКСИМУМ(интБонусыСантехников.Период) КАК Период
ИЗ
    РегистрНакопления.интБонусыСантехников КАК интБонусыСантехников
ГДЕ
    интБонусыСантехников.Клиент = &ВыбСантехник
    И интБонусыСантехников.СуммаБонусов > &НулевоеЗначение

СГРУППИРОВАТЬ ПО
    интБонусыСантехников.Клиент
1 Ненавижу 1С
 
гуру
05.05.14
13:41
а накуа? для этого есть срезы последних у регистров сведений
2 Classic
 
05.05.14
13:42
ВЫБРАТЬ ПЕРВЫЕ 1
.......
УПОРЯДОЧИТЬ ПО
интБонусыСантехников.Период УБЫВ
3 Classic
 
05.05.14
13:42
без группировок
4 Люблю 1с
 
05.05.14
13:43
а параметр &НулевоеЗначение небось равен нулю
5 Melcor
 
05.05.14
13:44
(3) Всё равно ошибка
(4) Ага
6 kosts
 
05.05.14
13:44
(0) Нужен составной запрос. Первым делом найти дату последнего движения, потом присоединить к регистру по периоду.
Это если не периодический.
7 Classic
 
05.05.14
13:45
(5)
Какая ошибка?




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

УПОРЯДОЧИТЬ ПО
интБонусыСантехников.Период УБЫВ
8 Люблю 1с
 
05.05.14
13:45
(5) а не проще ли в запросе вместо этого параметра сразу с нулем сравнивать?
9 kosts
 
05.05.14
13:47
Если отрицательных бонусов не бывает, то зачем сравнивать с нулем. Скорее всего и индекса нет по сумме. На больших базах будут тормоза.
10 Melcor
 
05.05.14
13:47
(7) Спасибо, всё работает
(9) Бывают
11 Classic
 
05.05.14
13:48
(10)
ты ж говорил, что ошибка
12 Melcor
 
05.05.14
13:49
(11) Максимум не убрал
13 kosts
 
05.05.14
13:50
(7) Не универсально, как для списка клиентов это получить?
14 fisher
 
05.05.14
13:50
(9) Откуда тормоза будут? Селективность такого условия крайне низкая. Индекс тут нафиг не нужен.
15 Classic
 
05.05.14
13:50
(13)
А где сказано, что надо универсально?
16 Classic
 
05.05.14
13:52
Для универсальности недостаточно условий. Например что делать при нескольких записях с "последним периодом"
17 kosts
 
05.05.14
13:53
(14) Тогда уже так, тормоза будет одинаковые, что с индексом что и без...
18 kosts
 
05.05.14
13:54
(16) такие не допущать до записи...
19 fisher
 
05.05.14
13:56
(17) Никаких тормозов это условие не добавляет.
Еще расскажи, что быстрее будет фильтровать записи на клиенте.
20 Classic
 
05.05.14
13:56
(18)
Недопускать из-за одного (возможно разового) отчета?
Мы ж не вкурсе, какую роль выполняет данный РС
21 kosts
 
05.05.14
14:04
(19) Просмотр всей таблицы, это разве не тормоза?
22 kosts
 
05.05.14
14:05
(21) Имею ввиду при отсутствии других условий
23 Classic
 
05.05.14
14:13
(21)
Там же условие на клиента. Почему вся таблица?
На клиенте  наверняка индекс есть
24 kosts
 
05.05.14
14:14
(23) Зря спорим, я про общий случай, вы про частный. Я понял
25 Classic
 
05.05.14
14:16
(24)
Разговор про то, что добавление условия Сумма > 0 не влияет на тормоза

При общем случае все равно прийдется перебирать всю таблицу, хоть с данным условием, хоть без него
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.