|
v7: Как быстро получить последние движения по измерениям регистра сведений? | ☑ | ||
---|---|---|---|---|
0
zelenprog
27.09.12
✎
17:42
|
На 7-ке в самописной конфе используется регистр оборотов в качестве периодического регистра сведений.
Измерения регистра: Контрагент, Номенклатура. Ресурс: Цена. Нужно узнать все последние цены. Как это можно быстро сделать? Простым перебором получается медленно: Цикл по всем контрагентам Цикл по номенклатуре РегДвижения.УстановитьФильтр(Контрагент, Номенклатура); РегДвижения.ОбратныйПорядок(1); РегДвижения.ВыбратьДвижения(, дДата); РегДвижения.ПолучитьДвижение(); ....... запоминаем цену КонецЦикла КонецЦикла Всех проходов цикла получается около 1.200.000. Примерно 20000 наименований номенклатуры, и 500 контрагентов. Скажите пожалуйста как ускорить? Желательно штатными средствами. |
|||
1
Kreont
27.09.12
✎
17:43
|
Запросом
|
|||
2
zelenprog
27.09.12
✎
17:45
|
(1) думал запросом, но ничего не надумал.
запрос же ведь не умеет отдельные движения обрабатывать? |
|||
3
Mikeware
27.09.12
✎
17:46
|
(2)Это почему?
А вообще, тут или прямой запрос, или ИТЗ. |
|||
4
КонецЦикла
27.09.12
✎
17:51
|
(0) При массовом вызове (например, показе чего-то в форме списка) на ДБФ у меня когда-то тормозило дико
Прямой запрос помог, получше стало |
|||
5
zelenprog
27.09.12
✎
17:54
|
не хочется пока прямым...
прямые я обычно выполняю через OLEDB, и его надо выполнять в разделенном режиме. а эта обработка выполняется в монопольном при свертке... короче с прямым запросом придется тоже что-то мудрить. а штатным способом никак? |
|||
6
zelenprog
27.09.12
✎
17:54
|
(3) а как ИТЗ поможет?
|
|||
7
Mikeware
27.09.12
✎
17:56
|
(6) правильно построенный индекс творит чудеса....
|
|||
8
Mikeware
27.09.12
✎
17:59
|
Лить сразу все в ИТЗ я бы постеснялся, но, допустим, по каждой контре - вполне нормально. Или по каждой номенклатуре.
Ну и, кстати, глянуть на галки отборов у измерений... |
|||
9
Ёпрст
27.09.12
✎
18:03
|
>>>прямые я обычно выполняю через OLEDB, и его надо выполнять в разделенном режиме.
Что мешает их выполнять монопольно ? |
|||
10
Mikeware
27.09.12
✎
18:04
|
(9) религия. а за ее оскорбление можешь получить до 5 лет. оно тебе надо?
|
|||
11
Ёпрст
27.09.12
✎
18:05
|
блин.. и хто будет защишать права неверующих ?
|
|||
12
Mikeware
27.09.12
✎
18:06
|
(11) никто.
|
|||
13
Deon
27.09.12
✎
18:06
|
А Атеизм - это религия?
|
|||
14
Nirvana
27.09.12
✎
19:26
|
(0) Нафига вообще так делать?
Для такой задачи больше подходит подчинённый номенклатуре справочник с реквизитом "Контрагент" и периодическим реквизитом "Цена". |
|||
15
Mikeware
27.09.12
✎
19:40
|
(14) Для особо одаренных = объясняю: для того, чтобы уйти от периодики. скорость получения данных выше раза в три.
|
|||
16
Ахиллес
27.09.12
✎
19:41
|
Покайтесь, грешники, откажитесь от диавольских клюшек, придите в объятия святого снеговика!
|
|||
17
Mikeware
27.09.12
✎
19:44
|
(16) проще руки выпрямить...
|
|||
18
Холст
27.09.12
✎
20:08
|
по-моему впору объявлять конкурс на лучшую структуру для 1С 7.7, заменяющую периодики, с критерием наилучшей скорости ...
никто не помнит, обсуждали такое, к чему пришли ? |
|||
19
Mikeware
27.09.12
✎
20:16
|
(18) справочник с прямым запросом. Регистр чуть-чуть медленнее. Зато с ним работать проще.
баян, вобщем... |
|||
20
Nirvana
27.09.12
✎
20:32
|
(15) Проверял?
|
|||
21
zelenprog
27.09.12
✎
21:54
|
(9) Помнится мне, что когда-то я столкнулся с такой ситуацией.
Прямой запрос через OleDB в монопольном режиме не выполняется. В монопольном прямой запрос выполняется только через ODBC-драйвер. Но он работает хуже, чем Visual Foxpro OleDB driver. Поэтому тогда я все запросы сделал через OleDB driver. Может быть с тех пор что-то поменялось? |
|||
22
zelenprog
27.09.12
✎
21:57
|
(10)-(20) что-то все не о том, про руки про религию, может быть вернемся к теме?
|
|||
23
zelenprog
27.09.12
✎
22:02
|
ну вы что парни? у меня же конкретный вопрос:
1) намекнули в (1) что можно 1С-ным запросом. Так все-таки можно или нет? Если можно то как? По чему надо группировать в этом запросе? 2) в чем фишка прямых запросов? почему они у меня в монопольном режиме не выполняются? ответьте пожалуйста |
|||
24
zladenuw
27.09.12
✎
22:16
|
обычный запрос что показывает по времени ?. прямые быстрее в 100 раз.
|
|||
25
zelenprog
27.09.12
✎
22:23
|
ну вот попробовал прямым запросом в монопольном режиме...
ошибка: FAILED! ICommandText::Execute(): Cannot open file q:\src\ra103.dbf. |
|||
26
zelenprog
27.09.12
✎
22:25
|
(24) у меня сейчас сделано в цикле, см. (0)
запрос 1С-ный и не смог сделать, не знаю как группировать по движениям регистра. по-моему 1С-ным запросом так вообще нельзя сделать |
|||
27
Nirvana
27.09.12
✎
22:30
|
(26) Цены по всей номенклатуре или нет?
|
|||
28
zladenuw
27.09.12
✎
22:42
|
Запрос.Группировка(1)
|
|||
29
zladenuw
27.09.12
✎
22:43
|
и чего не понятно
апрос = СоздатьОбъект("Запрос"); ТекстЗапроса = " |Сотр = Справочник.Сотрудники.ТекущийЭлемент; |Долж = Справочник.Сотрудники.Должность; |Группировка Долж упорядочить по Долж.Наименование; |Группировка Сотр упорядочить по Сотр.Наименование; |"; Запрос.Выполнить(ТекстЗапроса); Пока Запрос.Группировка("Долж")=1 Цикл ............Сообщить(Запрос.Долж); ............Пока Запрос.Группировка("Сотр")=1 Цикл ................Сообщить("......" + Запрос.Сотр.Наименование); ............КонецЦикла; КонецЦикла; |
|||
30
Шурик71
27.09.12
✎
22:53
|
(0) 1сsqllite вполне себе работает в монопольном режиме...
|
|||
31
Злопчинский
28.09.12
✎
01:22
|
ээээ... а как реализовать регистр сведений на оборотном регистре? народ что-то базарил что это делается типа вообще типа измеренйи нет, а все указываешь в реквизитах движений??
|
|||
32
Злопчинский
28.09.12
✎
01:23
|
есть правленный фокспрошный дривер, который позволяет и в монопольном штрындячить
|
|||
33
Ёпрст
28.09.12
✎
09:03
|
||||
34
zelenprog
28.09.12
✎
11:37
|
(31) Пишешь в него движения. а потом выбираешь нужное движение на нужную дату и все...
а где хранятся данные: в измерениях или реквизитах по-моему неважно. Просто когда ищешь движение на указанную дату для конкретных значений измерений и реквизитов - это работает быстро. А когда как у меня нужно по всем значениям - то вот и получается очень медленно |
|||
35
zelenprog
28.09.12
✎
11:45
|
(33) спасибо, попробую эту разработку.
Насколько сложно\долго перейти на 1sqlite с прямых запросов? |
|||
36
Mikeware
28.09.12
✎
11:46
|
(34) это "по-твоему" неважно...
|
|||
37
Nirvana
28.09.12
✎
11:51
|
(34) Если тебе настолько неважен размер базы, то можешь попробовать сделать ещё один справочник (или регистр), где будут храниться только последние цены.
|
|||
38
Холст
28.09.12
✎
11:54
|
а как вам такая замена периодики на регистре (для числовой периодики):
используем регистр остатков, "запись периодики" делаем так - на дату изменения данных минусуем число которое в текущем остатке, плюсуем новое значение на дату, в итоге на ТА всегда последнее актуальное значение нормальный вариант ? |
|||
39
Mikeware
28.09.12
✎
12:00
|
(38)растет сильно. И медленнее из-за пересчета итогов.
зы. "назад в будущее", млин... это все обсуждалось году в 2004. уже пора или на снеговика перейти (и забыть периодику клюшек как непиятный сон), или понять, как оно работает... |
|||
40
Ёпрст
28.09.12
✎
12:05
|
(35) 2 минуты на прочтение синтаксиса, 5 минут на переделку кода.
|
|||
41
zelenprog
28.09.12
✎
12:06
|
(36) "это по-твоему неважно..."
и что дальше? где продолжение? понимай как хочешь... кстати недавно статья попалась в инете про намеки: http://blog.teamo.ru/index.php/relationship/4999 запомнилась фраза в этой статье: "Просто нужно привыкнуть к тому, что слабый пол любит говорить намеками, как бы проверяя способности мужчины – сообразителен ли он ..." :) |
|||
42
Ёпрст
28.09.12
✎
12:11
|
+40 тебе этого не нужно, достаточно ссылки в (33)
|
|||
43
Холст
28.09.12
✎
12:22
|
(39) "Зубры" профи ушли с 7.7 на 8.х, а фирмы с нетленками на 7.7 остались, поэтому знания по оптимизации 7.7 пока актуальны, в 2004 было одно поколение 1Сников, сейчас другое
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |