Найти: на

Примеры разработки на платформе 8.х

Подпишитесь на новости



Внимание! Сайт переехал на http://бизнесплюспермь.рф

Использование итогов при обмене данными - ускорение загрузки данных регистров накопления и бухгалтерии, 1С 8.0, 8.1, 8.2

При записи набора записей регистра накопления/бухгалтерии производится пересчет итогов. Что бы не производить пересчет итогов много раз в процессе загрузки, можно отключить пересчет следующей командой:

Рег.УстановитьИспользованиеИтогов(ложь);

Где Рег - регистр накопления/бухгалтерии. Для массового отключения перерасчета по регистрам можно использовать следующую конструкцию:

Для Каждого Рег Из РегистрыНакопления Цикл
	Если Рег.ПолучитьИспользованиеИтогов() Тогда
		Рег.УстановитьИспользованиеИтогов(Ложь);
	КонецЕсли;
КонецЦикла;
	
Для Каждого Рег Из РегистрыБухгалтерии Цикл
	Если Рег.ПолучитьИспользованиеИтогов() Тогда
		Рег.УстановитьИспользованиеИтогов(Ложь);
	КонецЕсли;
КонецЦикла;

После выполнения загрузки необходимо включить итоги:

Для Каждого Рег Из РегистрыНакопления Цикл
	Если Рег.ПолучитьИспользованиеИтогов()=Ложь Тогда
		Рег.УстановитьИспользованиеИтогов(истина);
	КонецЕсли;
КонецЦикла;
	
Для Каждого Рег Из РегистрыБухгалтерии Цикл
	Если Рег.ПолучитьИспользованиеИтогов()=Ложь Тогда
		Рег.УстановитьИспользованиеИтогов(истина);
	КонецЕсли;
КонецЦикла;

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


Индексация таблиц значений, 1С 8.0, 8.1, 8.2

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

	ОСВЭкспл = новый ТаблицаЗначений;	// создаем таблицу значений
	ОСВЭкспл.Колонки.Добавить("Код");	// по этому полю будем искать
	ОСВЭкспл.Колонки.Добавить("Сумма");
	
	ОСВЭкспл.Индексы.Добавить("Код");	// а здесь добавляем индекс

Время поиска уменьшается в разы.
Делайте выводы.

Функция Уровень() иерархического справочника, 1С 8.0, 8.1, 8.2

Довелось допахивать сложный отчет. При выводе в отчете использовалась встроенная функция Уровень() иерархическиго справочника. Отчет работал жутко медленно.
При замере производительности оказалось что функция Уровень() едва ли не чемпион по тормозам.
Написали собственную функцию:

Функция ПолучитьУровень(Элемент)
	Родитель = Элемент.Родитель;
	ТекущийУровень = 0;
	Пока Истина Цикл
		Если ЗначениеЗаполнено(Родитель) Тогда
			Родитель = Родитель.Родитель;
			ТекущийУровень = ТекущийУровень + 1;
		Иначе
			Прервать;
		КонецЕСли;	
	КонецЦикла;	
	
	Возврат ТекущийУровень;
КонецФункции

Отчет стал работать значительно быстрее.
Для сравнения написал обработку (скачать можно здесь, 7Кб), выполняющую в цикле вызов стандартной функции, и нашей. Вот результаты:

Ноутбук Acer M50S, процессор Core2Duo T8300 2,4GHz, 4Gb оператиной памяти
База УТ 10.3.8.9 демо, локальная, количество итераций - 10000

1. Для элемента 0-ого уровня
Вызов стандартной процедуры занял 0 сек
Вызов нестандартной процедуры занял 0 сек

2. Для элемента 1-ого уровня
Вызов стандартной процедуры занял 21 сек
Вызов нестандартной процедуры занял 1 сек

3. Для элемента 3-ого уровня
Вызов стандартной процедуры занял 21 сек
Вызов нестандартной процедуры занял 2 сек

3. Для элемента 4-ого уровня
Вызов стандартной процедуры занял 21 сек
Вызов нестандартной процедуры занял 3 сек

Делайте выводы.


Внимание! Сайт переехал на http://бизнесплюспермь.рф

Hosted by uCoz