|
v7: Долгий запрос | ☑ | ||
---|---|---|---|---|
0
picom
10.07.12
✎
08:26
|
Подскажите, как быстрее получить данные продаж в ТиС 7.7 по выбранному контрагенту.
Эта штука медленная (. С языком запросов семерки уже не знаком. . Запрос = СоздатьОбъект("Запрос"); ВыбНачПериода = "01.01.2001" ; ВыбКонПер = ПолучитьДатуТА(); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПер; |Покупатель = Регистр.Продажи.Покупатель; |ПродСтоимость = Регистр.Продажи.ПродСтоимость; |Функция ПродСтоимостьВСумма = Сумма(ПродСтоимость); |Условие(Покупатель = Контрагент); |"//}}ЗАПРОС ; |
|||
1
el-gamberro
10.07.12
✎
08:27
|
Группировать по Покупатель
|
|||
2
1Сергей
10.07.12
✎
08:30
|
>>С языком запросов семерки уже не знаком
провалы в памяти? Нормальный запрос, должен отрабатывать быстро |
|||
3
picom
10.07.12
✎
08:35
|
(2) да, ничего уже не помню, да и на то время только начинал знакомится с 1с.
Он быстро обрабтывается, но мне надо колонку сделать в справочнике контрагентов, а это как-то затормаживает работу |
|||
4
big
10.07.12
✎
08:35
|
(2) за период 11,5 лет любой вспотеет данные лопатить ))))
|
|||
5
big
10.07.12
✎
08:35
|
(3) Пипец!! А про колонку-то мужики и не знали ))))
|
|||
6
andrewks
10.07.12
✎
08:36
|
(2)
"Нормальный запрос, должен отрабатывать быстро" ВыбНачПериода = "01.01.2001" ; |
|||
7
el-gamberro
10.07.12
✎
08:37
|
(5) база маленькая контрагентов немного.
работать должны быстро будет - думал программист пописывая код... |
|||
8
picom
10.07.12
✎
08:37
|
(1)Замедляет
|
|||
9
andrewks
10.07.12
✎
08:38
|
ну что, братцы-телепаты, включайте свои магические приспособления
|
|||
10
SanGvin
10.07.12
✎
08:38
|
а как вы "делаете колонку"? мб там загвоздка? например, запрос в цикле, не?
|
|||
11
SanGvin
10.07.12
✎
08:38
|
(9) я уже начал угадывать)
|
|||
12
SanGvin
10.07.12
✎
08:39
|
делаем ставки господа!
|
|||
13
big
10.07.12
✎
08:39
|
(12) скукота... (зевая)
|
|||
14
MishaD
10.07.12
✎
08:40
|
А контрагентов там, небось, несколько тысяч
|
|||
15
povar
10.07.12
✎
08:41
|
(13) погоди, автор - любитель делать неожиданные сюрпризы
|
|||
16
big
10.07.12
✎
08:41
|
(14) аха. и регистр оборотный
|
|||
17
Гефест
10.07.12
✎
08:44
|
естественно этот регистр оборотный
|
|||
18
picom
10.07.12
✎
08:44
|
(15) Смотрю куда эти данные лучше прикрутить.
Походу просто в статусной строке придется делать. Заполнение колонок слишком утомительно получается, но красиво ) |
|||
19
andrewks
10.07.12
✎
08:45
|
(18) утюг уже нагрелся, канифоль дымится на паяльнике
|
|||
20
SanGvin
10.07.12
✎
08:48
|
если сильно хочется в колонке, то можно выгрузить результат запроса в ТЗ и при выводе из нее уже методом найти() находить контрагента и брать сумму. Тоже бредово, но зато работает в разы быстрее. Как иначе в 7 сделать - хз.
|
|||
21
dk
10.07.12
✎
08:50
|
Еще можно
прикрутить |
|||
22
ЧеловекДуши
10.07.12
✎
09:00
|
Боюсь спрашивать, (0), а зачем делать запрос аж с 2001-го годку!!!???111
|
|||
23
1Сергей
10.07.12
✎
09:02
|
(22)+1 Кстати, да.
Такая информация полезна в отчёте, но никак не в спрвочнике |
|||
24
picom
10.07.12
✎
09:03
|
(22) чтобы узнать, на какую сумму чел купил товаров за всю историю работы магазина.
|
|||
25
ЧеловекДуши
10.07.12
✎
09:04
|
(24)А не проще создать регистр и там в итогах это помнить...
Куда будет быстрей ;) Нежели лопатить 11-ть лет :) |
|||
26
ЧеловекДуши
10.07.12
✎
09:05
|
+ (24)Я к тому, что 1С 7.7, нужно правильно готовить ;)
И будет все быстро. |
|||
27
VladZ
10.07.12
✎
09:06
|
(24) Идем дальше: а зачем нужно это видеть?
|
|||
28
picom
10.07.12
✎
09:09
|
(25)(26) Согласен полностью, уже работаю в том направлении.
(27) чтобы делать подарочки если набрали свыше определенной суммы в момент покупки |
|||
29
mehfk
10.07.12
✎
09:13
|
Заведи поле в справочнике, а раз в сутки роботом проставляй
|
|||
30
Omskdizel
10.07.12
✎
09:30
|
Такие дела обычно за год считают, смысл такую историю хранить вообще.
|
|||
31
Torquader
10.07.12
✎
09:32
|
выполняем запрос при открытии окна по всем контрагентам,а уже при пролистыванит просто рисуем из буфера
|
|||
32
picom
10.07.12
✎
09:41
|
В самом регистре доступна галка "Быстрая обработка движений"
Но что-то тоже не помогло .. Использование признака "Быстрая обработка движений" Для регистра в целом может быть установлен признак "Быстрая обработка движений". Этот признак оптимизирует обработку движений регистров при выполнении запросов обращающихся к движениям регистра, методов объекта "Регистр" выбирающих движения, а также выполнение временного расчета. При обращении запроса или объекта "Регистр" к движениям регистра система анализирует все документы, выбирая движения по тем документам, по которым они записывались. Установка признака "Быстрая обработка движений" создает дополнительный индекс и расширяет структуру регистра дополнительными полями. Это позволяет системе выбирать сами движения регистра без анализа документов. Установка данного признака дает увеличение производительности, если только незначительная часть документов записывает движения по данному регистру. Таким образом, этот признак следует устанавливать только для тех регистров, по которым записываются движения редко используемыми документами. |
|||
33
viktor_vv
10.07.12
✎
09:47
|
ЗапросСКЛ = СоздатьОбъект("ODBCRecordSet");
ТекстЗапроса = " |Select | Продажи.ПродСтоимостьОборот |From | $РегистрОбороты.Продажи(,,,,Покупатель = :Контрагент,(Покупатель),(ПродСтоимость)) as Продажи |"; ЗапросСКЛ.УстановитьТекстовыйПараметр("Контрагент",Контрагент); лчСумма = ЗапросСКЛ.ВыполнитьСкалярный(ТекстЗапроса) ; |
|||
34
1Сергей
10.07.12
✎
09:48
|
(33) а имеет ли смысл выполнять запрос к каждой строке отдельно?
|
|||
35
viktor_vv
10.07.12
✎
09:53
|
(34) Ну теоретически можно конечно при открытии зафигачить все итоги в ТЗ и по строкам брать оттуда. Правда с актцальностью данных могут быть вопросы. Или по мере выполнения построчно кешировать в ТЗ, и вначале проверять оттуда.
Но если у него это покупатель первое измерение, то по индексу вполне себе быстро должно быть. |
|||
36
viktor_vv
10.07.12
✎
09:55
|
(35)+ Можно параметризированный сделать запрос, еще немного выиграть времени.
|
|||
37
orefkov
10.07.12
✎
09:56
|
У измерения "Покупатель" стоит галка "Отбор движений" ?
|
|||
38
picom
10.07.12
✎
10:08
|
(37)+(32) Дали неожиданный эффект, все стало быстро работать.
Спасибо, вопрос закрыт (37) С меня бутылка пива ) |
|||
39
orefkov
10.07.12
✎
10:41
|
(38)
В Кирове будешь, отдашь :) |
|||
40
Андрей_Андреич
naïve
10.07.12
✎
10:45
|
(39) чему молодежь учишь? Еще пара десятков таких перлов и кранты базе.
|
|||
41
Morphius
10.07.12
✎
10:50
|
(0) Следует использовать
Итог(<?>,,) Синтаксис: Итог(<Измерен1>,<Измерен2>...,<ИмяРесурса>) Назначение: Возвращает значение итога заданного ресурса по ранее установленному периоду оборотного регистра. Параметры: <Измерен1>,<Измерен2>... - значения измерений регистра; <ИмяРесурса> - название требуемого ресурса регистра. Замечание: Метод используется только для оборотных регистров. "Черный" запрос выполняется долго, это вам не восьмерка. Запросы следует использовать только для получения данных в удобном виде |
|||
42
orefkov
10.07.12
✎
10:52
|
(40)
Ну, судя по тому, что отбор всех движений с 2001 года по покупателю делается шустро (и даже без индекса тока слегка тормозит) - до крантов этой базе еще ой как далеко. |
|||
43
Андрей_Андреич
naïve
10.07.12
✎
10:53
|
*42) Главное - нАчать
|
|||
44
orefkov
10.07.12
✎
10:53
|
(41)
Те же яйца, тока сбоку. Без индекса по измерению - не взлетит. |
|||
45
Андрей_Андреич
naïve
10.07.12
✎
10:55
|
+44 - так и установить период не удастся - только из стандартных день/неделя/декада/месяц/квартал/год
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |