![]() |
![]() |
![]() |
|
Проведение доков в УПП - время... | ☑ | ||
---|---|---|---|---|
0
ДенисЧ
04.07.12
✎
07:38
|
Стало надоедать долгое проведение документов в УПП (25 секунд на ОПзС - где это видано???)
Замер показал, что много времени уходит на процедуру Процедура ЗаписатьНаборЗаписейНаСервере(ИмяРегистра, Регистратор, ТаблицаДвижений = Неопределено, ТипРегистра = "РегистрНакопления") Экспорт Вот её текст, модифицированный мной (до правок он ещё дольше работал...) Процедура ЗаписатьНаборЗаписейНаСервере(ИмяРегистра, Регистратор, ТаблицаДвижений = Неопределено, ТипРегистра = "РегистрНакопления") Экспорт Если ТаблицаДвижений = Неопределено Тогда стрЗапрос = " |ВЫБРАТЬ ПЕРВЫЕ 1 | рег.Регистратор |ИЗ | " + ТипРегистра + "." + ИмяРегистра + " КАК рег |ГДЕ | рег.Регистратор = &Регистратор"; запрос = Новый Запрос; Запрос.Текст = стрЗапрос; Запрос.УстановитьПараметр("Регистратор", Регистратор); Если Запрос.Выполнить().Пустой() Тогда Возврат; КонецЕсли; КонецЕсли; Если ТипРегистра = "РегистрНакопления" Тогда Набор = РегистрыНакопления[ИмяРегистра].СоздатьНаборЗаписей(); Если ТаблицаДвижений <> Неопределено Тогда Набор.мТаблицаДвижений = ТаблицаДвижений; ОбщегоНазначения.ВыполнитьДвижениеПоРегистру(Набор); КонецЕсли; Иначе Если ТипРегистра = "РегистрБухгалтерии" Тогда Набор = РегистрыБухгалтерии[ИмяРегистра].СоздатьНаборЗаписей(); ИначеЕсли ТипРегистра = "РегистрСведений" Тогда Набор = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей(); ИначеЕсли ТипРегистра = "РегистрРасчета" Тогда Набор = РегистрыРасчета[ИмяРегистра].СоздатьНаборЗаписей(); КонецЕсли; Если ТаблицаДвижений <> Неопределено Тогда Набор.Загрузить(ТаблицаДвижений); КонецЕсли; КонецЕсли; Набор.Отбор.Регистратор.Установить(Регистратор); Набор.Записать(); КонецПроцедуры Основное время - на запрос по существованию движений регистратора... Скуль показывает Index Scan по некластерному индексу. Статистики обновляются ежечасно, переиндексация - 3 раза в неделю. Размер самого крупного РН (УчетЗатрат) ~2 миллиона записей... Можно что-то с этим сделать? |
|||
1
чувак
04.07.12
✎
08:08
|
Странно, зачем запрос, если его не использовать дальше?
|
|||
2
ДенисЧ
04.07.12
✎
08:11
|
(1) А чтобы не выполнялись действия дальше.
Типа Набор.Отбор.Регистратор.Установить(Регистратор); Набор.Записать(); |
|||
3
H A D G E H O G s
04.07.12
✎
08:23
|
||||
4
H A D G E H O G s
04.07.12
✎
08:23
|
Это в каком случае?
Если ТаблицаДвижений = Неопределено Тогда стрЗапрос = " |ВЫБРАТЬ ПЕРВЫЕ 1 | рег.Регистратор |ИЗ | " + ТипРегистра + "." + ИмяРегистра + " КАК рег |ГДЕ | рег.Регистратор = &Регистратор"; запрос = Новый Запрос; Запрос.Текст = стрЗапрос; Запрос.УстановитьПараметр("Регистратор", Регистратор); Если Запрос.Выполнить().Пустой() Тогда Возврат; КонецЕсли; КонецЕсли; |
|||
5
ДенисЧ
04.07.12
✎
08:34
|
(4) Что в каком случае? При нажатии кнопки провести в документе... Или тебе всю картинку замера показать?
|
|||
6
МихаилМ
04.07.12
✎
08:46
|
если ms sql
добавте в оrder by все поля индекса. также можно поробовать задействовать EXIST (оператор В) |
|||
7
ДенисЧ
04.07.12
✎
08:54
|
(6) В order by? Расскажи, как это сделать в 1с-запросе :-)
А В - даёт точно такой же план запроса... |
|||
8
ДенисЧ
04.07.12
✎
10:28
|
Ещё мысли есть? :-)
|
|||
9
Aprobator
04.07.12
✎
10:36
|
(0) это процедура работает типа только при перепроведении документов что ли?
Меня первое условие с запросом просто убивает. Нафиг ссылку вытаскивать, если интересует только факт наличия движений по регистру? |
|||
10
Maxus43
04.07.12
✎
10:36
|
переходите на 8.3
|
|||
11
ДенисЧ
04.07.12
✎
10:43
|
(9) При отмене проведения в основном.
(9) А разнициы нет, а Выбрать Количество() - занимает больше времени :-) (10) мне бы с 8.2.13 слезть :-) |
|||
12
Aprobator
04.07.12
✎
14:57
|
(11) имелось ввиду:
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |