Имя: Пароль:
1C
1С v8
Проведение доков в УПП - время...
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) имелось ввиду:

...
       |ВЫБРАТЬ ПЕРВЫЕ 1
       |    1              // вот тут то нафига было ссылку на регистратор запрашивать?
...
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс