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

10.09.15

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

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Проведение на сервере
.epf 13,69Kb ver:1.0
57 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

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

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

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

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

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

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

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

UPDATE:

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

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

Синхронизация и обмен для ERP, КА, УТ, БП, Розница, УНФ с EnterpriseData

Решение «Синхронизация и обмен с EnterpriseData» реализует универсальные правила обмена данными для последних версий конфигураций 1С:ERP, КА, УТ, БП, Розница, УНФ. Поддерживает двустороннюю синхронизацию в формате EnterpriseData без обновления правил при обновлениях конфигураций. Обмен можно выполнять вручную, по расписанию или через обработку — гибкий и надёжный инструмент для автоматизации обмена между системами.

Вступайте в нашу телеграмм-группу Инфостарт

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

См. также

HighLoad оптимизация Программист 1C:ERP Бесплатно (free)

Использование оператора «В» для полей или данных составного типа (например, Регистратор) может приводить к неочевидным проблемам.

10.11.2025    4605    ivanov660    48    

49

HighLoad оптимизация Программист 1С:Предприятие 8 1C:ERP Бесплатно (free)

Приведем примеры использования различных в динамических списках и посмотрим, почему это плохо.

18.02.2025    7793    ivanov660    39    

61

HighLoad оптимизация Технологический журнал Системный администратор Программист Бесплатно (free)

Обсудим поиск и разбор причин длительных серверных вызовов CALL, SCALL.

24.06.2024    10195    ivanov660    13    

62

HighLoad оптимизация Программист 1С:Предприятие 8 Бесплатно (free)

Метод очень медленно работает, когда параметр приемник содержит намного меньше свойств, чем источник.

06.06.2024    16128    Evg-Lylyk    73    

46

HighLoad оптимизация Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

13.03.2024    7890    spyke    29    

54

HighLoad оптимизация Программист 1С:Предприятие 8 Бесплатно (free)

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

13.03.2024    11182    vasilev2015    22    

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

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

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


или

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

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

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

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

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


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

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



adhocprog; slitov; 7OH; GusevNA; valex1c; +5 Ответить
16. Red_Devil 181 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 216 14.09.15 09:20 Сейчас в теме
Хорошо, если можно просто взять и установить галку привилигированного режима. А если в модуле проведения куча разных ссылок на другие общие модуля, которые на сервер так просто не перенесешь, тогда беда.
21. Red_Devil 181 14.09.15 09:38 Сейчас в теме
(20) не надо в действующем модуле галку ставить. Надо создать свой модуль для этих целей.
22. ekaruk 5039 16.09.15 08:09 Сейчас в теме
Думаю, проще поставить галку в свойствах документа "Проводить в привелигированнои режиме".
Эффект тот же будет.
adhocprog; artbear; +2 Ответить
23. cargobird 321 16.09.15 08:19 Сейчас в теме
(22) ekaruk, это если отдельные документы тормозят (у нас, например, самый "тяжелый" документ это возврат товаров от покупателя).
А групповую обработку проще отправить в привилегированный модуль.
24. nafa 661 16.09.15 09:20 Сейчас в теме
Не понял вообще ничего, и причем тут ОФ и УФ. В типовой торговле 10.3 у роли Администратор нет никаких рлс. То есть можно просто запустить от админа и все тут.
Если же запускать от пользователя, то РЛС должны проверсться. Если проверять не надо - так отключите вообще их.
Что касаемо переносан на сервер - где вообще такой анахронизм нашелся, чтобы по сети 1С пускать ? Терминальные сервера для этого существуют. Когда сервер 1С и терминальный сервер рядом и связаны 1Гб то разницы где выполняется код нет, за исключением конф где отдельные Кулибины поковырялись.
25. Red_Devil 181 16.09.15 09:24 Сейчас в теме
(24) В теории у администратора эффекта быть не должно однако у нас прирост производительности 40%. Где тут логика неизвестно.. какие-то проверки все равно выполняются.
26. cargobird 321 02.10.15 13:35 Сейчас в теме
Еще в копилку опыта...
Запуск стандартного восстановления последовательности партионного учета в УТ 10.3 в сеансе, открытом непосредственно на самом SQL-сервере уже дал значительный прирост скорости.
Применение обработки, использующей приведенный в статье способ, дал ускорение в среднем еще на 5%.
27. Ekovichev 839 14.03.16 14:45 Сейчас в теме
Также хотелось бы отметить еще один прием.
При обработке большого количества однотипных документов в различных конфах есть проверки в подписках на события на дату запрета изменения, на права текущего пользователя править, записывать, удалять документ.

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

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

КонецЦикла;


Показать


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

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

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