Как 1С всю оперативную память съел...

Публикация № 1460724 17.06.21

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

Расширение конфигурации ЗУП 3.1 расход память рассылка отчеты фоновые задания

В данной статье рассматривается обход (средствами встроенного языка) ошибки: "Превышен максимальный расход памяти сервера за один вызов" при рассылке расчетных листков в ЗУП 3.1 250+ сотрудникам.

С чего все началось. После перехода на версию платформы 8.3.18.1208 х64 и релиз ЗУП 3.1.17.135 перестали отправляться расчетные листки сотрудникам одним скопом (получателей 250+). А именно, начали ловить ошибку "Превышен максимальный расход памяти сервера за один вызов" (когда сеанс "отъедает" всю доступную серверу 1С оперативную память). В нашем случае, при отправке расчеток, формировалось фоновое задание, которое и расходовало всю доступную оперативную память. Обновление версии ЗУП до 3.1.17.138  и "танцы" с настройками сервера 1С не дали результата, отправился искать отладчиком "узкое" место встроенного языка, где происходит увеличение памяти.

На скрине представлен фрагмент типового кода конфигурации  ЗУП 3.1.17.138 , логика приведенного цикла в формировании и сохранении результата отчета "Анализ начислений и удержаний" (расчетный листок) для каждого сотрудника.

Судить о том, что данный фрагмент является "узким" местом встроенного языка не берусь, но именно в этом месте, на каждой итерации цикла наблюдалось увеличение потребляемой оперативной памяти. И как следствие - появление ошибки указанной выше.

 Решение.  При рассылке отчетов типовым алгоритмом предусмотрено: формирование одного фонового задания, которое обеспечивает формирование и отправку результатов отчетов всем получателям. Так как памяти не хватает обрабатывать всех получателей за одно фоновое задание. Появилась идея формировать для каждого получателя отдельное фоновое задание (контролируя статус завершения фонового задания) и при этом минимально изменяя типовой алгоритм, в надежде, что когда нибудь это исправят... Результатом идеи и успешного решения поставленной задачи стало написанное расширение конфигурации. Логику и фрагменты которого распишу ниже.

Логика:

1. В имеющемся общем модуле перехватим типовую процедуру по формированию фонового задания для всего массива получателей и передадим в параметр создания фонового задания первый элемент массива получателей, затем сохраним исходный массив получателей и УИД задания во временном хранилище и хранилище общих настроек соответственно.

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

3. Организуем проверку статуса выполнения фонового задания. Если завершен, тогда удаляем из массива получателей первый элемент и вновь формируем фоновое задание, иначе отключаем обработчик ожидания.

 
 Пример кода и описание пункта 1. 
&ИзменениеИКонтроль("ВыбратьПолучателяЗавершение")
Процедура Расш5_ВыбратьПолучателяЗавершение(ВыбранныйЭлемент, ДополнительныеПараметры) Экспорт
	Если ВыбранныйЭлемент = Неопределено Тогда
		Результат = Неопределено;
	Иначе
		Если ДополнительныеПараметры.ВозвращатьСоответствие Тогда
			Если ВыбранныйЭлемент.Значение = Неопределено Тогда
				Результат = ДополнительныеПараметры.Получатели;
			Иначе
				Результат = Новый Соответствие;
				Результат.Вставить(ВыбранныйЭлемент.Значение, ДополнительныеПараметры.Получатели[ВыбранныйЭлемент.Значение]);
			КонецЕсли;
		Иначе
			Результат = Новый Структура("Получатель, ПочтовыйАдрес", ВыбранныйЭлемент.Значение, ДополнительныеПараметры.Получатели[ВыбранныйЭлемент.Значение]);
		КонецЕсли;
	КонецЕсли;
	#Удаление
	ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОбработчикРезультата, Результат);
	#КонецУдаления
	#Вставка
	Если Строка(ДополнительныеПараметры.ОбработчикРезультата.ДополнительныеПараметры.МассивРассылок[0]) = "расчетный листок" Тогда
		//Формируем массив соответствий получателей (по одному)
		МассивСоответствийПолучателей = Новый Массив;
		Для каждого Получатель из Результат Цикл
			КопияПолучателей = Новый Соответствие;
			КопияПолучателей.Вставить(Получатель.Ключ,Получатель.Значение);
			МассивСоответствийПолучателей.Добавить(КопияПолучателей);    
		КонецЦикла;
		//Сохраним наш массив получателей во временное хранилище, и сохраним адрес к этому значению в хранилище общих настроек
		АдресМассиваПолучателейВременноеХранилище = ПоместитьВоВременноеХранилище(МассивСоответствийПолучателей, Новый УникальныйИдентификатор);
		Расш5_ПроверкаФоновогоЗадания.СохранитьАдресПользователей(АдресМассиваПолучателейВременноеХранилище);
		
		ДополнительныеПараметры.Получатели = МассивСоответствийПолучателей[0];
		Результат = МассивСоответствийПолучателей[0];
		ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОбработчикРезультата, Результат);
		//Сохраним Параметры, а перед сохранением удалим из параметров саму форму 
		Расш5_ПроверкаФоновогоЗадания.СохранитьУидФормы(ДополнительныеПараметры.ОбработчикРезультата.ДополнительныеПараметры.Форма.УникальныйИдентификатор);
		ДополнительныеПараметры.Удалить("ОбработчикРезультата");
		АдресПараметровВременноеХранилище = ПоместитьВоВременноеХранилище(ДополнительныеПараметры, Новый УникальныйИдентификатор);
		Расш5_ПроверкаФоновогоЗадания.СохранитьПараметры(АдресПараметровВременноеХранилище);	
		ОжиданиеОбработчика();
	Иначе
		ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОбработчикРезультата, Результат);
	КонецЕсли;
	#КонецВставки
КонецПроцедуры

 В данном фрагменте типового общего модуля "РассылкаОтчетовКлиент" перехватим процедуру "ВыбратьПолучателяЗавершение". В которой "ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОбработчикРезультата, Результат)" дает условный старт формирования фонового задания, посему перед этой строкой мы сохраняем наш массив получателей во временное хранилище, а так же необходимые дополнительные параметры. (помещаем во временное хранилище обязательно с параметром "Новый УникальныйИдентификатор", чтобы наш массив получателей жил на протяжении всего сеанса пользователя).

Т.к. подключить обработчик ожидания мы не можем в текущем общем модуле, создадим и перейдем для этого в глобальный модуль "ОжиданиеОбработчика()". (подробнее в "Пример кода и описание пункта 2." ниже)

После выполнения "ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОбработчикРезультата, Результат)" и еще ряда процедур, исполнение кода переходит в процедуру "ВыполнитьСейчасВФоне", которую мы так же перехватим в расширении:

&ИзменениеИКонтроль("ВыполнитьСейчасВФоне")
Процедура Расш5_ВыполнитьСейчасВФоне(Получатели, Параметры) Экспорт
	ПредварительныеНастройки = Неопределено;
	Если Параметры.ЭтоФормаЭлемента Тогда
		Если Параметры.Форма.Объект.ИспользоватьЭлектроннуюПочту Тогда
			Если Получатели = Неопределено Тогда
				Возврат;
			КонецЕсли;
			ПредварительныеНастройки = Новый Структура("Получатели", Получатели);
		КонецЕсли;
		ТекстСостояния = НСтр("ru = 'Выполняется рассылка отчетов.'");
	Иначе
		ТекстСостояния = НСтр("ru = 'Выполняются рассылки отчетов.'");
	КонецЕсли;
	
	ПараметрыМетода = Новый Структура;
	ПараметрыМетода.Вставить("МассивРассылок", Параметры.МассивРассылок);
	ПараметрыМетода.Вставить("ПредварительныеНастройки", ПредварительныеНастройки);
	#Удаление
	Задание = РассылкаОтчетовВызовСервера.ЗапуститьФоновоеЗадание(ПараметрыМетода, Параметры.Форма.УникальныйИдентификатор);
	
	НастройкиОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(Параметры.Форма);
	НастройкиОжидания.ВыводитьОкноОжидания = Истина;
	НастройкиОжидания.ТекстСообщения = ТекстСостояния;
	
	Обработчик = Новый ОписаниеОповещения("ВыполнитьСейчасВФонеЗавершение", ЭтотОбъект, Параметры);
	ДлительныеОперацииКлиент.ОжидатьЗавершение(Задание, Обработчик, НастройкиОжидания);																																																									  
	#КонецУдаления
	#Вставка
	Если Строка(Параметры.МассивРассылок[0]) = "расчетный листок" Тогда
		Задание = РассылкаОтчетовВызовСервера.ЗапуститьФоновоеЗадание(ПараметрыМетода, Параметры.Форма.УникальныйИдентификатор);
		//Сохраним УИД задания для дальнейшего контроля статуса
		Расш5_ПроверкаФоновогоЗадания.СохранитьУидЗадания(Задание.ИдентификаторЗадания);
		НастройкиОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(Параметры.Форма);
		НастройкиОжидания.ВыводитьОкноОжидания = Истина;
		НастройкиОжидания.ТекстСообщения = ТекстСостояния;
		Обработчик = Новый ОписаниеОповещения("ВыполнитьСейчасВФонеЗавершение", ЭтотОбъект, Параметры);
		ДлительныеОперацииКлиент.ОжидатьЗавершение(Задание, Обработчик, НастройкиОжидания);
	Иначе	
		Задание = РассылкаОтчетовВызовСервера.ЗапуститьФоновоеЗадание(ПараметрыМетода, Параметры.Форма.УникальныйИдентификатор);
		НастройкиОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(Параметры.Форма);
		НастройкиОжидания.ВыводитьОкноОжидания = Истина;
		НастройкиОжидания.ТекстСообщения = ТекстСостояния;
		Обработчик = Новый ОписаниеОповещения("ВыполнитьСейчасВФонеЗавершение", ЭтотОбъект, Параметры);
		ДлительныеОперацииКлиент.ОжидатьЗавершение(Задание, Обработчик, НастройкиОжидания);	
	КонецЕсли;
	#КонецВставки
КонецПроцедуры

В данном фрагменте проверяем, что текущая рассылка у нас по расчетным листкам, затем после формирования фонового задания сохраняем его УИД в хранилище общих настроек.

Описанный выше код прописываем в заимствованном в расширении типовом общем модуле "РассылкаОтчетовКлиент". 

 
 Пример кода и описание пункта 2.

 

Процедура ОжиданиеОбработчика() Экспорт
	
	//Подключим свой обработчик ожидания, который будет ждать статус завершения фонового задания
	ПодключитьОбработчикОжидания("ОбработчикСтатусаВыполненияЗадания", 1, Ложь);	
	
КонецПроцедуры	

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

 

 
 Пример кода и описание пункта 3.

 

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

Проверим завершено ли созданное нами ранее фоновое задание по одному получателю "Расш5_ПроверкаФоновогоЗадания.ПолучитьПрогрессВыполнения()". Если статус "Задание выполнено", тогда необходимо удалить из исходного массива получателей первый элемент (порядок элементов массива не меняется при "перегонке" его из хранилища в хранилище). Затем, если в массиве получателей еще есть элементы, создадим новое фоновое задание по аналогии фрагмента кода из пункта 1 логики, описанного выше.

Т.к. через примерно 40-50 итераций созданное фоновое задание иногда завершалось со статусом "Задание отменено пользователем"(не понятно почему), то заново формируем новое фоновое задание по тому же получателю.

Процедуры "ОжиданиеОбработчика()" и "ОбработчикСтатусаВыполненияЗадания()" помещаем в созаднный нами общий модуль "Расш5_ПодключениеОжидания" в расширении.

 

 
 Вспомогательные процедуры и функции созданного нами общего модуля "Расш5_ПроверкаФоновогоЗадания", которые обеспечивают получение и сохранение значений в хранилища (временное и общих настроек).

 

#Область сохранения
Процедура СохранитьАдресПользователей(АдресПользователей) Экспорт
	
	ХранилищеОбщихНастроек.Сохранить("MMP", "AdrUser", АдресПользователей, , );
	
КонецПроцедуры

Процедура СохранитьУидЗадания(УидЗадания) Экспорт
	
	ХранилищеОбщихНастроек.Сохранить("MMP", "AdrUid", УидЗадания, , );
	
КонецПроцедуры

Процедура СохранитьУидФормы(УидФормы) Экспорт
	
	ХранилищеОбщихНастроек.Сохранить("MMP", "UidForm", УидФормы, , );
	
КонецПроцедуры

Процедура СохранитьПараметрыМетода(ПараметрыМетода) Экспорт
	
	ХранилищеОбщихНастроек.Сохранить("MMP", "ParamMetod", ПараметрыМетода, , );
	
КонецПроцедуры

Процедура СохранитьПараметры(Параметры) Экспорт 
	
	ХранилищеОбщихНастроек.Сохранить("MMP", "Param", Параметры, , );
	
КонецПроцедуры
#КонецОбласти


#Область получения
Функция ПолучитьАдресПользователей() Экспорт
	
	Возврат	 ХранилищеОбщихНастроек.Загрузить("MMP", "AdrUser", ,);
	
КонецФункции

Функция ПолучитьУидЗадания() Экспорт
	
	Возврат  ХранилищеОбщихНастроек.Загрузить("MMP", "AdrUid", ,);
	
КонецФункции

Функция ПолучитьПараметрыМетода() Экспорт
	
	Возврат	 ХранилищеОбщихНастроек.Загрузить("MMP", "ParamMetod", ,);
	
КонецФункции

Функция ПолучитьПараметры() Экспорт
	
	Возврат	 ХранилищеОбщихНастроек.Загрузить("MMP", "Param", ,);
	
КонецФункции

Функция ПолучитьУидФормы() Экспорт
	
	Возврат	 ХранилищеОбщихНастроек.Загрузить("MMP", "UidForm", ,);
	
КонецФункции


Функция ПолучитьРассылку() Экспорт
	
	Возврат Справочники.РассылкиОтчетов.НайтиПоНаименованию("расчетный листок",Истина);	
	
КонецФункции

Функция ПолучитьПрогрессВыполнения() Экспорт
	
	УникальныйИдентификатор = ХранилищеОбщихНастроек.Загрузить("MMP", "AdrUid", ,);
	Отбор = Новый Структура;
	Отбор.Вставить("УникальныйИдентификатор", УникальныйИдентификатор);
	НайденныеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор);
	Возврат Строка(НайденныеЗадания[0].Состояние);
		
КонецФункции
#КонецОбласти

Поместим в общий модуль "Расш5_ПроверкаФоновогоЗадания".

 

P.s. Расширение тестировалось на версии ЗУП 3.1.17.138. Надеюсь данный материал будет кому то полезен.

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

Наименование Файл Версия Размер
РассылкаРасчеток

.cfe 48,85Kb
6
.cfe 1.0 48,85Kb 6 Скачать

Специальные предложения

Оставьте свое сообщение

См. также

Ускоряем ЗУП 3 Корп на предприятиях с большим количеством работников

HighLoad оптимизация Платформа 1С v8.3 Сложные периодические расчеты 1С:ERP Управление предприятием 2 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Как только мы перешли с УПП на ЗУП 3, сразу столкнулись с огромной проблемой. Наша организация в 12 000 человек, разбив документы на 2 части по 6 000 человек не смогла за несколько часов рассчитать зарплату, и пришлось срочно заниматься оптимизацией "на ходу". В процессе выяснилось немало ключевых мест, и в результате, как правило, небольшими "инъекциями", удалось качественно (часть участков с часов до минут, а местами и до секунд) ускорить процесс и дать возможность расчетчикам выполнять работу в сжатые сроки. В результате этого процесса получилось расширение. Которое можно просто применить на типовой ЗУП Корп.  Если будет потребность для адаптации под конкретный релиз пишите, сделаем.

1 стартмани

10.05.2023    1855    5    ZAOSTG    6    

9

Эффективное управление фоновыми заданиями и коммуникация сеансов сервера с Фоном с помощью Структуры обмена (ноу-хау) + Бонус: Альтернативный вариант через Хранилище настроек

HighLoad оптимизация Администрирование СУБД Платформа 1С v8.3 Платформа 1C v8.2 Россия Абонемент ($m)

Как эффективно управлять Фоновым заданием, так чтобы Приложение-клиент могло МГНОВЕННО в реальном времени получать и передавать данные и команды в этот процесс. Преимущества и недостатки вариантов обменов с Фоном с помощью Структуры Обмена и через Хранилище настроек. Демо реальной работы 2-х вариантов, с расчетом производительности и потерь данных. + Бонус (Тестовая обработка с Демо-версией компоненты Структуры Обмена со всеми примерами работы с Фоном через Обычное приложение и Управляемые формы (Тонкий и Толстый клиент). НОВОЕ: 1) Управление фоновым процессом в версии 1С:8.1 с помощью Структуры обмена через интерфейс IDispatch (COMОбъект). 2) Управление фоновым заданием (эмуляция фона через автозапуск 2-го сеанса в режиме OLE-Auto) в версии 1С:8.0 также через IDispatch.

1 стартмани

06.04.2023    1808    1    ksuman    12    

4

Пример многопоточной обработки (БСП)

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

Обработка-шаблон, на основе которой можно делать свои многопоточные обработки данных для конфигураций на БСП.

13.02.2023    5897    4    echo77    8    

76

Индикация многопоточной серверной операции без доработки конфигурации с помощью Сервера взаимодействия

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

Используя внешнюю обработку (через меню Файл-Открыть), осуществляем длительную серверную операцию с отображением состояния по каждому потоку и суммарно.

5 стартмани

01.11.2022    1992    4    Olga_siberia    0    

3

Небольшой кейс оптимизации. Ускоряем печать табеля УПП

HighLoad оптимизация Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и Управление Персоналом 2.5 1С:Управление производственным предприятием Россия Бухгалтерский учет Абонемент ($m)

Будет проведено небольшое расследование производительности без профайлера и трансляторов запроса. Вместо всего этого, ограничимся набором ИР от Tormozit. Дисклеймер: результат не гарантирован, у нашей базы своя специфика, у вас эффект может быть другим.

1 стартмани

15.09.2022    3059    2    Painted    5    

6

Решение проблем подвисания 1С “в онлайне”. Инструмент - консоль управления блокировками и процессами 1С и PostgreSQL (MS SQL - тестируется)

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

Обработка-консоль, улучшенная версия консоли администрирования 1С для решения проблем с производительностью, поиска и устранения блокировок и длительных запросов. Тестировалось на платформе 8.3.14, 8.3.17, 8.3.20 УФ.

1 стартмани

04.07.2022    7309    64    victor_goodwill    23    

38

Привилегированные отчеты

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

Расширение позволяет настроить для пользователей выполнение отчетов в привилегированном режиме. 1) Убирает тормоза формирования отчета, возникающие при наложении прав пользователя на запросы отчета; 2) Позволяет обойти ошибки формирования отчета из-за отсутствия прав на часть объектов у пользователя.

4 стартмани

24.01.2022    11117    27    sapervodichka    36    

102

Нагрузочный тест для базы данных 1С (обычные формы)

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

Универсальный нагрузочный тест для баз данных 1С. Позволяет оценивать производительность работы в конкретной базе данных при подборе параметров сервера. Тест производит циклическое перепроведение документов и замер скорости на каждом цикле. Выбирается интервал документов и виды документов для перепроведения.

1 стартмани

27.12.2021    4734    9    Miket78    4    

1

Обработка данных в фоновых потоках

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

Выполнение заданных действий над выбранными данными в фоновых заданиях.

3 стартмани

30.10.2021    5830    6    MaxxiMiliSan    4    

10

Изыскания на тему записи в регистр сведений

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

Уважаемые коллеги, здравствуйте! Сегодня хочу поделиться с Вами своими изысканиями на тему записи в регистр сведений в контексте оптимизации одной операции. Однажды мы столкнулись со следующей проблемой: поступили жалобы от разработчиков сайта, что наш веб-сервис очень медленно реагирует, точней, обработка запроса не укладывается в таймаут 5 секунд, и сайт получает ошибку 500. Стали разбираться, и вот что выяснили.

1 стартмани

21.09.2021    13753    0    METAL    57    

104

Сравнение замеров производительности

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

Бывают ситуации, когда необходимо быстро определить, в чем разница при выполнении, например, проведения документа. Я обычно для решения данной задачи использовал два замера и сравнивал в коде. Это помогало при небольшом количестве строк кода, но, когда их тысячи, или сотни тысяч, проще воспользоваться обработкой, которая позволяет находить различия в замерах производительности.

2 стартмани

06.09.2021    4278    10    17808849    4    

3

Где баланс между производительностью и возможностями программы ? Исправление автоподбора контрагента в УНФ

Рефакторинг и качество кода HighLoad оптимизация Адаптация типовых решений Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 Россия Управленческий учет Абонемент ($m)

Как и у многих ко мне стали поступать обращения от менеджеров о медленной работе 1с (эта ваша один с не дает нормально работать), и чтоб быть объективным, и не основываться на человеческом, субъективном восприятии решил вооружиться цифрами, а именно произвести анализ медленных запросов, и проблема была найдена, где я ее не ожидал.

1 стартмани

27.08.2021    6406    0    con-men    0    

8

Просмотр файлов технологических журналов 1С (WinAPI)

HighLoad оптимизация Технологический журнал Платформа 1С v8.3 Россия Абонемент ($m)

Программа просмотра файлов технологических журналов 1С (WinAPI). Работает с большими файлами. Минимальное потребление памяти при индексировании данных, просмотре. Анализ управляемых взаимоблокировок, таймаутов, ожиданий. Фильтры по событиям, периоду, пользователям, соединениям, сеансам.

1 стартмани

24.08.2021    6705    25    sdf1979    17    

24

ЦУП 2.1.6 Исправленная обработка выгрузки метаданных для платформы 8.2

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

Обработка предназначена для ЦУП 2.1.6. Исправленная типовая обработка для выгрузки метаданных для конфигурацию, работающих на платформе 8.2 (в т.ч. в режиме совместимости).

1 стартмани

04.03.2021    5327    2    SpecRam    0    

1

Параллельные вычисления для http-сервиса

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

Процесс, поток, нить - в различных операционных системах и языках программирования это наименьшая единица программы. В платформе существует аналог: фоновое задание. Посмотрим, как его можно использовать для распараллеливания вычислений http-сервиса.

1 стартмани

19.11.2020    7030    5    Lars Ulrich    11    

24

Быстрая реструктуризация базы данных

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

Внешняя обработка для быстрой реструктуризации клиент-серверной базы данных. Способ ускорения реструктуризации - замена таблиц большого объема пустыми копиями перед проведением обновления БД и возврат к исходным таблицам после обновления с предварительной корректировкой их структуры. Полностью автоматизировано создание и выполнение всех требуемых скриптов SQL. Представлены версии обработки для обычных форм (1С:Предприятие 8.2 (8.2.19.130)) и управляемого приложения (1С:Предприятие 8.3 (8.3.9.1818)).

1 стартмани

05.11.2019    35390    164    dmitrydemenew    40    

77

Влияние БСП на производительность базы 1С с добавленными метаданными

HighLoad оптимизация Адаптация типовых решений БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 1С:Управление торговлей 11 Абонемент ($m)

Повод для статьи — заметное снижение быстродействия при переводе учета с УТ 11.1 на 11.4 по «нашим» не стандартным метаданным (регламенты работы с массовым заполнением/проведением документов/регистров). Предварительно причину увидел во влиянии БСП. Была создана тестовая подсистема, быстродействие которой оцениваем в демобазе "Управление торговлей". С включенными и выключенными подписками БСП.

5 стартмани

04.11.2019    13645    7    VsHome    1    

7

Оптимизация прав ролей

HighLoad оптимизация Роли и права Управляемые формы Управление правами Конфигурации 1cv8 Россия Абонемент ($m)

Решение вопроса по неоптимальной настройке (избыточной) ролей, влияющей на производительность системы (потребление оперативной памяти). Алгоритм работы следующий: Выгрузка конфигурации в файлы - Обработка (изменение) файлов прав ролей - Загрузка измененных прав в конфигурацию. Проверено на платформе начиная с 8.3.12.

1 стартмани

09.09.2019    54666    16    toxilamer    11    

22

Взаимодействие при редактировании одних и тех же данных [Расширение] УТ11

HighLoad оптимизация Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

Расширение позволяет взаимодействовать между пользователями в тех случаях, когда они пытаются редактировать одни и те же данные. Теперь пользователи могут согласовать между собой последовательность своих действий, а при необходимости – освободить данные, занятые другим пользователем.

2 стартмани

14.04.2019    12300    4    noprogrammer    1    

6

Исправление ЦУП 2.1.2

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

Расширение для конфигурации Центр управления производительностью, редакция 2.1 (2.1.2.11), которое позволяет настроить регламентный мониторинг. Работает на платформе 1С:Предприятие 8.3 (8.3.13.1644).

2 стартмани

21.01.2019    11603    6    Neco    0    

2

Многопоточное тестирование производительности по методике APDEX (управляемые формы)

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

Каждый у кого нет сервера, мечтает его купить, а те, у кого сервер есть, мечтают, чтобы он был быстрее. Но деньги на сервер выделяет руководство...

10 стартмани

09.01.2019    17006    27    capitan    32    

17

Решение проблемы быстродействия в ERP на рабочем примере

HighLoad оптимизация Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

Рассмотрим практический пример оптимизации, определим последовательность действий и воспользуемся специализированными инструментами.

3 стартмани

18.12.2018    34749    292    ivanov660    24    

109

Многопоточная обработка данных

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

Конфигурация "Универсальные механизмы: пакеты данных". Набор инструментов для быстрой организации отказоустойчивой многопоточной обработки данных.

1 стартмани

23.11.2018    43647    169    _ASZ_    19    

99

Очистка и обновление индекса полнотекстового поиска (регламентное задание)

HighLoad оптимизация Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Документооборот 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Зарплата и Управление Персоналом 3.x Россия Абонемент ($m)

Обработка-регламентное задание позволяет в автоматическом режиме очищать и обновлять индекс полнотекстового поиска. Это необходимо делать для устранения проблем производительности на крупных базах. Подключаем в доп.обработках, задаем расписание выполнения на выходные и радуемся :)

2 стартмани

14.09.2018    38972    111    Kyrales    10    

16

Монитор блокировок пользователей

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

Анализ и автоматическое удаление блокировок

1 стартмани

17.08.2018    13079    29    Re:аниматор    7    

18

Ускорение отчета 'Контроль передвижений агентов (онлайн-карты)' от AgentPlus v1.5.2

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

У пользователей системы AgentPlus (Агент Плюс) отчет 'Контроль передвижений агентов (онлайн-карты)' v1.5.2 вызывает восторг и разочарование одновременно. Восторг – потому, что позволяет увидеть маршрут передвижения пользователя системы с привязкой к карте и дорогам, разочарование – от длительности построения отчета. Отчет по 45 точкам маршрута у меня строится больше минуты. Тестировалось на "Управление торговым Предприятием" 1.2.45.2.

1 стартмани

03.05.2018    11430    3    DiegoLidabo    0    

5

Обработки  для проведения сценарного нагрузочного тестирования на примере конфигурации ЗУП версии 3.1.1.91

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

Обработки предназначены  для проведения сценарного нагрузочного тестирования, включая  пример описанного  сценария  с обработками (epf) -  ГлавныйРасчетчик, Кадровик, Расчетчик, Табельщик. Обработка будет полезна прежде всего тому, кто внедряет решение на базе конфигурации 1С "Зарплата и Управления персоналом" с необходимостью воспроизвести определенный сценарий с заданным количеством пользователей для расчета, а также возможность посмотреть, какая будет при этом нагрузка на ваше оборудование и скорость выполнения операций с учетом блокировок СУБД. Также это будет интересно тем, кто хочет прощупать, как на практике пользоваться конфигурацией "Тест Центр", входящий в состав пакета 1С:КИП.

2 стартмани

15.09.2017    15681    37    podorojnii_ayu    1    

5

Перерасчет итогов регистра бухгалтерии в 1С

HighLoad оптимизация Бухгалтерский учет 1С:Бухгалтерия 1.6 Россия Бухгалтерский учет Абонемент ($m)

Вариант перерасчета итогов частями (помесячно), если при типовом пересчете 1С зависает.

1 стартмани

30.05.2017    24446    36    MarcoPolo3    8    

16

Просмотр заблокированных строк в 1С

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

Ввиду своей деятельности, мне часто приходится рассказывать про различные аспекты оптимизации и в том числе про блокировки. Очень часто слушатели задают следующие вопросы: Как посмотреть в реальном времени, какие именно данные сейчас заблокированы? Как понять, что сейчас заблокировано в терминах 1С? Если гранулярность блокировки страница, как увидеть, какие данные в ней находятся? Раньше приходилось отвечать, что инструмента, который показывает все вышеописанное, сейчас просто нет. Но потом мне это надоело, и я решил сделать собственный инструмент, который позволяет ответить на все вышеописанные вопросы.

1 стартмани

25.10.2016    56748    1022    Andreynikus    71    

195

Настройка PostgreSQL для работы в связке с 1С 8.х на платформе Windows Server 2012, объём БД более 200 Гб

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

Настройка бесплатной СУБД PostgreSQL для работы в связке с 1С 8.х на платформе Windows Server 2012 х64. Объём БД более 380 Гб для мощного сервака. Конфигурация КА 1.1.108.2, 50 пользователей. Более 1 млн. проводок при закрытии месяца. Время закрытия месяца сравнимо с MSSQL и составляет в среднем 2 часа. Время отмены закрытия месяца - всего 10 минут! Ликвидированы зависания PostgreSQL. Всё за счет настроек файла postgesql.conf.

1 стартмани

11.10.2016    117891    90    vsasav    48    

232

Оптимизация расчета себестоимости выпуска продукции (УПП 1.3, Партионный учет)

Производство готовой продукции (работ, услуг) HighLoad оптимизация Платформа 1С v8.3 1С:Управление производственным предприятием Бухгалтерский учет Абонемент ($m)

В результате выполненных доработок удалось уменьшить время проведения Регламентной операции "Рассчитать себестоимость (БУ, НУ)" в два и более раза, а в отдельных операциях (Распределение продукции и затрат по переделам) удалось достичь 7-ми кратного уменьшения времени проведения!

1 стартмани

23.08.2016    23399    35    linkov    23    

47

Средство поиска "узких мест" при проведении документов

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

Обработка и добавляемые в конфигурацию коды для ведения простой для понимания статистики времени проведения документов. Пригодно для разных конфигураций на платформе 8.2

1 стартмани

31.05.2016    16868    4    ibs10    12    

6

Просмотр структуры БД, парсинг запросов SQL

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

Получение некоторых данных о БД и сеансе, просмотр внутренней структуры таблиц БД 1С в SQL, "перевод" запросов SQL в терминологию 1С. Чуть больше, чем "ПолучитьСтруктуруХраненияБазыДанных"; чуть удобнее, чем аналоги; чуть другая, чем КИП.

1 стартмани

26.02.2016    39948    282    Yashazz    15    

99

Поиск в динамическом списке (по части строки): попытка оптимизации

HighLoad оптимизация Платформа 1С v8.3 1С:Управление торговлей 10 Россия Управленческий учет Абонемент ($m)

И все же в этом черном ящичке (динамическом списке) есть узкие места, которые влияют на производительность. Попробую описать пойманные места. Запросы в динамическом списке просты, с одной основной таблицей и без фактических соединений на уровне языка 1С.

1 стартмани

24.11.2015    29310    2    logarifm    5    

15

Фиксируем SPID для отслеживания в SQL Profiler

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

Для разбора запросов бывает полезным использовать SQL Profiler. При настройке выборки событий предлагаю дополнительно наложить еще один фильтр по полю SPID.

1 стартмани

22.09.2015    23368    28    break    3    

19

Обработка-сценарий нагрузочного тестирования для тест-центра

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

Данная обработка реализует сценарий пользовательского проведения документов

1 стартмани

26.08.2015    19178    33    acsent    1    

2