Как ускорить групповое проведение документов до 40%, используя привилегированный режим

10.09.15

База данных - HighLoad оптимизация

Простейшая обработка, позволяющая сократить время группового проведения документов.

Скачать файлы

Наименование Файл Версия Размер
Проведение на сервере
.epf 13,69Kb
53
.epf 1.0 13,69Kb 53 Скачать

Возможно, прозвучит банально, но при проведении документов анализируются права пользователей + RLS. От этого можно избавиться и ускорить проведение документов, для этого необходимо лишь добавить 1 общий модуль с галкой "привилегированный".
В данной обработке показан пример полного выноса проведения на сервер + без контроля прав.

В моем случае это привело к 40% уменьшению времени проведения по сравнению с проведением в типовой "Групповая обработка справочников и документов".

Плюс в таком режиме абсолютно неважно, насколько слабая машина на клиенте, она используется лишь для запуска, далее N часов работает сервер.

Необходимо создать общий модуль "НаСервереПривилегированный" , проставить в нем галки "Сервер" и "Привилегированный" и поместить следующий код:

Процедура ПровестиНаСервере(ДатаНачала, ДатаОкончания, Организация, МассивВидовДокументов) Экспорт
	
	Запрос = Новый Запрос;
	Запрос.Текст = "";
	
	Для Каждого ВидДокумента Из МассивВидовДокументов Цикл
		
		НовыйТекст = СформироватьТекстЗапроса(ВидДокумента);
		Запрос.Текст = Запрос.Текст + НовыйТекст;
		
	КонецЦикла;
	
	Запрос.Текст = Лев(Запрос.Текст, СтрДлина(Запрос.Текст)-16);
	
	Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
	Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
	Запрос.УстановитьПараметр("Организация", Организация);
	
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		
		ДокументСсылка = Выборка.Ссылка;
		ДокументОбъект = ДокументСсылка.ПолучитьОбъект();
		Попытка
			ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
		Исключение
		КонецПопытки;
		
	КонецЦикла;
	
КонецПроцедуры

Функция СформироватьТекстЗапроса(ВидДокумента)
	
	НовыйТекст = "ВЫБРАТЬ
	|	 " + ВидДокумента + ".Ссылка
	|ИЗ
	|	Документ." + ВидДокумента + " КАК " + ВидДокумента + "
	|ГДЕ
	|	" + ВидДокумента + ".Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
	|	И " + ВидДокумента + ".Организация = &Организация
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|";
	Возврат НовыйТекст;
	
КонецФункции

Далее в режиме предприятия открыть мою обработку, выбрать там типы документов и запустить проведение.

Как видно, в ней есть всего 2 отбора, по периоду и организации, но вы можете настроить отборы/запрос под себя, добавив необходимые поля.

UPDATE:

Как написал в комментариях //infostart.ru/profile/180217/ он попробовал вынести в привилегированный режим проведение по партиям, это дало прирост производительности в 3 раза!

Процедура ВыполнитьПроведениеПоПартиям(ДатаОкончания) Экспорт
    Последовательности.ПартионныйУчет.Восстановить(ДатаОкончания);
КонецПроцедуры

Проведение документов ускорение.

См. также

Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы

HighLoad оптимизация Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Анализ простого плана запроса. Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы.

13.03.2024    2979    spyke    26    

42

Быстродействие типовой 1С

HighLoad оптимизация Платформа 1С v8.3 Бесплатно (free)

Оказывается, в типовых конфигурациях 1С есть, что улучшить!

13.03.2024    5110    vasilev2015    19    

37

Анализируем SQL сервер глазами 1С-ника

HighLoad оптимизация Инструменты администратора БД Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обработка для простого и удобного анализа настроек, нагрузки и проблем с SQL сервером с упором на использование оного для 1С. Анализ текущих зааросов на sql, ожиданий, конвертация запроса в 1с и рекомендации где может тормозить

1 стартмани

15.02.2024    7641    158    ZAOSTG    68    

96

Удаление строк из таблицы значений различными способами с замером производительности

HighLoad оптимизация Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Встал вопрос: как быстро удалить строки из ТЗ? Рассмотрел пять вариантов реализации этой задачи. Сравнил их друг с другом на разных объёмах данных с разным процентом удаляемых строк. Также сравнил с выгрузкой с отбором по структуре.

09.01.2024    5977    doom2good    48    

63

Опыт оптимизации 1С на PostgreSQL

HighLoad оптимизация Бесплатно (free)

При переводе типовой конфигурации 1C ERP/УТ/КА на PostgreSQL придется вложить ресурсы в доработку и оптимизацию запросов. Расскажем, на что обратить внимание при потерях производительности и какие инструменты/подходы помогут расследовать проблемы после перехода.

20.11.2023    8871    ivanov660    6    

76

ТОП проблем/задач у владельцев КОРП лицензий 1С на основе опыта РКЛ

HighLoad оптимизация Бесплатно (free)

Казалось бы, КОРП-системы должны быть устойчивы, быстры и надёжны. Но, работая в рамках РКЛ, мы видим немного другую картину. Об основных болевых точках КОРП-систем и подходах к их решению пойдет речь в статье.

15.11.2023    5105    a.doroshkevich    20    

72

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    16186    skovpin_sa    14    

98
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Йожкин Кот 1006 11.09.15 00:12 Сейчас в теме
Актуально для конф на ОФ. Для УФ модуль проведения и так выполняется на сервере + в типовых (УФ) проведение и так выполняется в привилегированном режиме.
EvgenAEY; ily1704; wowik; herfis; +4 Ответить
6. Red_Devil 179 11.09.15 09:21 Сейчас в теме
(1) у нас УПП 1.3, УТ 10.3 все на обычных формах, поэтому пришлось использовать. Получается в управляемых формах проведение происходит уже без контроля прав?
adhocprog; +1 Ответить
13. Йожкин Кот 1006 11.09.15 10:41 Сейчас в теме
(6) В типовых - да, проведение происходит без контроля прав. См. флаг "Прив. режим при проведении"/"Прив. режим при отмене проведения" в свойствах документов.
28. EvgenAEY 2 24.04.20 18:10 Сейчас в теме
(1) Блин, автор статьи, зачем путаете пользователей вашей обработки, зачем указали что все конфигурации и все платформы, для Бухгалтерии 3.0 это точно не применимо!
2. cargobird 306 11.09.15 07:21 Сейчас в теме
Интересно, увеличится ли скорость проведения, если в "привилегированный" модуль поместить запуск восстановления последовательности партионного учета?
3. ivan-helpencoder 11.09.15 07:54 Сейчас в теме
(2) cargobird, да, интересно.
А если просто написать 2 процедуры с замером скорости и потом сравнить?
4. cargobird 306 11.09.15 08:03 Сейчас в теме
(3) ivan-helpencoder, конечно.
Как сделаю, отпишусь.
5. cargobird 306 11.09.15 09:21 Сейчас в теме
(3) ivan-helpencoder, вот такая процедура, добавленная в "привилегированный" модуль:
Процедура ВыполнитьПроведениеПоПартиям(ДатаОкончания) Экспорт
	ВыбМоментВремени = Новый МоментВремени(ДатаОкончания);
	Последовательности.ПартионныйУчет.Восстановить(ДатаОкончания);
КонецПроцедуры

дала ускорение примерно в 3 раза по сравнению со штатным.
Adiga126; adhocprog; ivan-helpencoder; valex1c; Red_Devil; +5 Ответить
7. Red_Devil 179 11.09.15 09:25 Сейчас в теме
(5) в 3 раза?) лихо. Можно добавить в статью
adhocprog; cargobird; +2 Ответить
8. cargobird 306 11.09.15 09:28 Сейчас в теме
(5) старый косячник, переменную объявил, но не использовал)
Но вот еще один момент.
При такой обработке служебные сообщения не выводятся (поскольку все делается а сервере), но после того, как код будет выполнен, все накопленные сообщения разом появятся в окне служебных сообщений.
9. Red_Devil 179 11.09.15 09:33 Сейчас в теме
(8) я сообщения вобще не использую, у меня только перед началом и после окончания выводится сообщение. Так с правильной переменной разница во времени проведения есть?
10. cargobird 306 11.09.15 09:37 Сейчас в теме
(9) дата окончания в любом случае использовалась та, которая надо, так что все верно. Из приведенной процедуры можно выкинуть вторую строку с объявлением переменной, суть не изменится и на скорость это не повлияет. Так что ускорение есть.
11. cargobird 306 11.09.15 10:29 Сейчас в теме
(9) исправь, пожалуйста, в статье.
Надо заменить приведенный кусок кода на любой из этих:

Процедура ВыполнитьПроведениеПоПартиям(ДатаОкончания) Экспорт
    ВыбМоментВремени = Новый МоментВремени(ДатаОкончания);
    Последовательности.ПартионныйУчет.Восстановить(ВыбМоментВремени);
КонецПроцедуры


или

Процедура ВыполнитьПроведениеПоПартиям(ДатаОкончания) Экспорт
    Последовательности.ПартионныйУчет.Восстановить(ДатаОкончания);
КонецПроцедуры
12. bpc222 2015 11.09.15 10:38 Сейчас в теме
(5) cargobird,

Замеры-то верно производили? В 3 раза - не малое значение ускорения...

ИБ файловая/кл-серверная?
adhocprog; valex1c; +2 Ответить
15. cargobird 306 11.09.15 11:02 Сейчас в теме
(12) bpc222, это был единственный замер для проверки работоспособности метода в принципе, поэтому все зависело и от состояния сервера и от активности пользователей и тому подобного. Поэтому для этого замера получилось ускорение в 3 раза. Какое будет усредненное значение - сказать не могу, для длительных тестов времени особо нет. Но буду метод внедрять, потому что даже некоторое ускорение существенно облегчит нам жизнь.

База в клиент-серверном варианте.

Тест: простая обработка
Процедура ОсновныеДействияФормыОсновныеДействияФормыВыполнитьОбычно(Кнопка)
	Последовательности.ПартионныйУчет.Восстановить(ДатаОкончания);
КонецПроцедуры
Процедура ОсновныеДействияФормыОсновныеДействияФормыВыполнитьПривилеги­рованно(Кнопка)
	Привилегированный.ВыполнитьПроведениеПоПартиям(ДатаОкончания);
КонецПроцедуры


Замер производительности средствами конфигуратора.
Второй замер дал ускорение в 2 раза. Но и это нам очень хорошо.
18. AlX0id 13.09.15 09:52 Сейчас в теме
(5) cargobird,
А конфа-то хоть какая? Смотрю, в УПП все модули типовые по партионному учету и так уже серверные и привилегированные..
19. cargobird 306 14.09.15 07:01 Сейчас в теме
14. ya.Avoronov 115 11.09.15 10:54 Сейчас в теме
Зачем столько телодвижений?

УстановитьПривилегированныйРежим(Истина);
...
ПроцедурыПроведения();
...
УстановитьПривилегированныйРежим(Ложь);



adhocprog; slitov; 7OH; GusevNA; valex1c; +5 Ответить
16. Red_Devil 179 11.09.15 11:12 Сейчас в теме
(14) "В клиент-серверном варианте при выполнении на клиенте данный метод не выполняет никаких действий." (с) Синтаксис помощник.
Получается обработку проведения все равно на серверный модуль выносить надо, получится то-же самое, что в моем примере.
adhocprog; 1059; Йожкин Кот; +3 Ответить
17. valex1c 11.09.15 16:01 Сейчас в теме
Спасибо , помогло :)
50 документов реализация
до - 3.15 мин
после - 1,21 мин.
ivan-helpencoder; +1 Ответить
20. WKBAPKA 214 14.09.15 09:20 Сейчас в теме
Хорошо, если можно просто взять и установить галку привилигированного режима. А если в модуле проведения куча разных ссылок на другие общие модуля, которые на сервер так просто не перенесешь, тогда беда.
21. Red_Devil 179 14.09.15 09:38 Сейчас в теме
(20) не надо в действующем модуле галку ставить. Надо создать свой модуль для этих целей.
22. ekaruk 4896 16.09.15 08:09 Сейчас в теме
Думаю, проще поставить галку в свойствах документа "Проводить в привелигированнои режиме".
Эффект тот же будет.
adhocprog; artbear; +2 Ответить
23. cargobird 306 16.09.15 08:19 Сейчас в теме
(22) ekaruk, это если отдельные документы тормозят (у нас, например, самый "тяжелый" документ это возврат товаров от покупателя).
А групповую обработку проще отправить в привилегированный модуль.
24. nafa 657 16.09.15 09:20 Сейчас в теме
Не понял вообще ничего, и причем тут ОФ и УФ. В типовой торговле 10.3 у роли Администратор нет никаких рлс. То есть можно просто запустить от админа и все тут.
Если же запускать от пользователя, то РЛС должны проверсться. Если проверять не надо - так отключите вообще их.
Что касаемо переносан на сервер - где вообще такой анахронизм нашелся, чтобы по сети 1С пускать ? Терминальные сервера для этого существуют. Когда сервер 1С и терминальный сервер рядом и связаны 1Гб то разницы где выполняется код нет, за исключением конф где отдельные Кулибины поковырялись.
25. Red_Devil 179 16.09.15 09:24 Сейчас в теме
(24) В теории у администратора эффекта быть не должно однако у нас прирост производительности 40%. Где тут логика неизвестно.. какие-то проверки все равно выполняются.
26. cargobird 306 02.10.15 13:35 Сейчас в теме
Еще в копилку опыта...
Запуск стандартного восстановления последовательности партионного учета в УТ 10.3 в сеансе, открытом непосредственно на самом SQL-сервере уже дал значительный прирост скорости.
Применение обработки, использующей приведенный в статье способ, дал ускорение в среднем еще на 5%.
27. Ekovichev 813 14.03.16 14:45 Сейчас в теме
Также хотелось бы отметить еще один прием.
При обработке большого количества однотипных документов в различных конфах есть проверки в подписках на события на дату запрета изменения, на права текущего пользователя править, записывать, удалять документ.

Возможно проверить документ 1 раз для пользователя и результат поместить в дополнительные свойства объекта. В процедуре подписки прочесть доп. свойства объекта и не делать лишних телодвижений:)
Пример:
сРазрешениеНаОперацииСДокументами = Новый Соответствие;
		
//Получим проверку заране для каждого из типов документа.
Для Каждого Строка ИЗ МассивСсылок Цикл
	Если сРазрешениеНаОперацииСДокументами[Строка.ТипДокумента] = Неопределено Тогда
		ОтказПоОперации = Ложь;
		Софт_ОбщегоНазначения.ПроверитьРазрешениеНаЗаписьДокументаПоДатеЗапрета(Строка.Ссылка, ОтказПоОперации, РежимЗаписиДокумента.ОтменаПроведения);
		сРазрешениеНаОперацииСДокументами[Строка.ТипДокумента] = Новый Структура("РазрешениеНаЗаписьДокументаПоДатеЗапрета", НЕ ОтказПоОперации);
	КонецЕсли;

       ДокОбъект = Строка.Ссылка.ПолучитьОбъект();
      Если сРазрешениеНаОперацииСДокументами[Строка.ТипДокумента] <> Неопределено Тогда
		ДокОбъект.ДополнительныеСвойства.Вставить("ГрупповаяОбработка",
                                                                                          сРазрешениеНаОперацииСДокументами[Строка.ТипДокумента].РазрешениеНаЗаписьДокументаПоДатеЗапрета);
	КонецЕсли;						
	ДокОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);

КонецЦикла;


Показать


Процедура Софт_ОбщегоНазначения.ПроверитьРазрешениеНаЗаписьДокументаПоДатеЗапрета(...) - подписочная процедура при отмене проведения документов из моей конфы.

В самой процедуре подписке вставить такую затычку:

	
Попытка
        Если Источник.ДополнительныеСвойства.ГрупповаяОбработка Тогда Возврат; КонецЕсли;
	Исключение;
	КонецПопытки;
Оставьте свое сообщение