Имя: Пароль:
1C
1C 7.7
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 - так и установить период не удастся - только из стандартных день/неделя/декада/месяц/квартал/год
Программист всегда исправляет последнюю ошибку.