Имя: Пароль:
1C
1C 7.7
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
(25) http://infostart.ru/public/16268/

либо 1sqlite

(32) не надо его исользовать
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Сников, сейчас другое
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс