Имя: Пароль:
1C
1С v8
Двойное использование даты в СрезПоследних
0 lighto1
 
31.10.12
08:05
Любезнейшие, извините за нубский вопрос, но поясните по-хардкору, зачем в СрезеПоследних на дату(&Квартал) еще и в условиях указывать эту дату(&Квартал)?

РегистрСведений.ЖурналУчетаСчетовФактур.СрезПоследних(
  &Квартал,
  Организация = &Организация
  И Период = &Квартал
  И ДатаВыставленияПолучения <> ДАТАВРЕМЯ(1, 1, 1))

Есть ли разница по сравнению с обращением к реальной таблице регистра с условием по периоду, и если ее нет, то неужели все дело в колоссальном увеличении скорости обработки запроса?
1 Fragster
 
гуру
31.10.12
08:06
(0) задай этот вопрос автору запроса
2 rphosts
 
31.10.12
08:09
это не условие на ресурс?
3 lighto1
 
31.10.12
08:09
(1) Ну это ж типовая конфа - Буха 2.0.39.9, ее писали боги 1С и отцы-основатели, они же не могут ошибаться) В этом должен быть потаенный смысл!
4 rphosts
 
31.10.12
08:10
(3) структуру регистра дай
5 lighto1
 
31.10.12
08:10
(2) регистр периодический, такого ресурса нет
6 lighto1
 
31.10.12
08:12
(4) Ну это периодический регистр сведений с подчинением регистратору с измерениями (Орг-ия, контрагент, счетфактура,частьжурнала) и кучей ресурсов, среди которых нет Периода =)
7 Живой Ископаемый
 
31.10.12
08:13
чувакам не интересно получать срез последних. им интересно получать на конкретную дату.
8 Живой Ископаемый
 
31.10.12
08:14
есть ли выигрыш перед обращением к физической.. - нужно мерять
9 rphosts
 
31.10.12
08:15
>Есть ли разница по сравнению с обращением к реальной таблице регистра с условием по периоду, и если ее нет, то неужели все дело в колоссальном увеличении скорости обработки запроса?

есть, срез отработает наибыстрейшим способом, лучше чем срез у тебя вряд-ли получится
10 rphosts
 
31.10.12
08:17
хотя получается, что Период = &Квартал - это условие не то, что данным числом есть эта запись... нужно сделать замер времени запроса  Среза и написать свой и померить для него время - вот и будет сразу видно
11 lighto1
 
31.10.12
08:17
Подытожим: получается, здесь обращение к Срезу, а не к реальной таблице ТОЛЬКО ради скорости.

Значит простым смертным надо брать этот прием на заметку и ВЕЗДЕ делать также? Больше никаких реальных таблиц! )
12 rphosts
 
31.10.12
08:19
(11) делаем как написано в (10) и думаем над тем что получилось. Иногда оптимальнее брать исходные записи или агрегаты настраивать
13 Живой Ископаемый
 
31.10.12
08:19
2(11) почему спустя 5 лет или сколько там в8 существует это сюрприз для тебя?
14 Повелитель
 
31.10.12
08:20
Да видимо есть смысл.
В регистре есть 4 записи:
Товар1 01.10.2012
Товар2 02.10.2012
Товар3 10.10.2012
Товар4 20.10.2012

Если поставить Квартал = 10.10.2012, то
без условия попадут
Товар1 01.10.2012
Товар2 02.10.2012
Товар3 10.10.2012

с условием И Период = &Квартал только 1 запись
Товар3 10.10.2012
15 Живой Ископаемый
 
31.10.12
08:20
2(12) На РС есть агрегаты? в 8.3?
16 lighto1
 
31.10.12
08:22
(14) ну т.е. то же самое, как если бы обращались к реальной таблице с условием Период = &Квартал...
17 МишКа
 
31.10.12
08:27
(3) Ее писали программисты, которые не смогли устроится на большую зарплату в какой-нибудь франч.
18 kible
 
31.10.12
08:28
(16) Да. Только со срезом последних наверно быстрее будет запрос работать.
19 rphosts
 
31.10.12
08:33
(15)не, про агрегаты и исходные записи регистров я в целом, чел предложил вообще только виртуальными обходиться
20 lighto1
 
31.10.12
08:33
(13) Ну так исторически сложилось в ходе моего обучения в голове закрепилась одна мысль-"правило": где нужен срез последних - делаем срез последних, где нужны реальные записи - делаем реальные записи. (Круто звучит, да?) Поэтому, когда увидел - возник вопрос .а костыль ли это или венец программистской мысли?
21 rphosts
 
31.10.12
08:35
(18) там отбираются записи на конкретную дату, так что можно 1 запросом попадающим неплохо так в индекс обойтись, безовсяких пакетных - должно быть быстрее запроса из (0), но нужно мерить
22 Повелитель
 
31.10.12
08:35
(16)
Ну вообщем да )) Тогда надо замеры делать, смотреть ))
23 EasyRider
 
31.10.12
09:17
Вариант с срезом последних выполняется ~50 мс, вариант с реальной таблицей меньше 1 мс
24 Живой Ископаемый
 
31.10.12
09:30
2(23) о.. правда? при любом количестве записей?
25 EasyRider
 
31.10.12
09:32
(24)конечно нет,но тенденция видна
26 Живой Ископаемый
 
31.10.12
09:36
тенденция видна была бы если бы ты сказал что на миллиарде записей выполянется за 50 секунд в одном случае и за 1 секунду в другом случае. А тут как раз тенденция не видна
видны только сферические цифры в сферическом вакууме.
27 EasyRider
 
31.10.12
09:38
(26)ну замеряй сам на миллиарде строк,кто запрещает-то?Результат показать не забудь
28 EasyRider
 
31.10.12
09:45
+(27)к слову сказать срез последних на самом деле разворачивается в соединение таблицы с самой собой.Такая конструкция будет выполняться дольше,чем простой select,так что еще до замеров было понятно что быстрее
29 rphosts
 
31.10.12
09:47
(26)насколько помню срез - это пакетный запрос из 2 запросов и первый запрос пакета уже будет отбирать больше данных для получения результата (по группировке), поэтому с ростом размера регистра разница должна только возрастать...

(23)при выполнении на маленькой базе быстрее отработает тот запрос который был вызван вторым, т.к. при выполнении первого регистр полностью закэшируется в память.

как-то вот так
30 EasyRider
 
31.10.12
09:52
(29)я делал несколько замеров для каждого варианта.Срез это не пакетный запрос - это inner join
31 rphosts
 
31.10.12
09:56
(30) ну если несколько и первые не смотреть - это конечно ближе к реалу