Книга знаний

1С:Предприятие / v8 / Администрирование / Производительность

v8: Способы повышения производительности 1С 80

Подборка способов повышения производительности 1С 80Автор статьи: Гений 1С | Редакторы: Damned,
Последняя редакция №10 от 20.07.06 | История
URL: http://kb.mista.ru/article.php?id=229

Ключевые слова: производительность


Ускорение работы с коллекциями значений



По возможности используйте вместо списков значений и структур соответствия - это единственная индексированная коллекция в 1С.

Для операций свертки и сортировки таблицы значений выгоднее использовать построитель запросов, чем встроенные методы Свернуть, Сортировать: Книга знаний: v8: Ускорение типовой свертки таблиц значений в 1С80

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

Совместная работа большого количества пользователей



Для терминального режима имеет смысл попробовать способ избавления от 100% загрузки процессора при блокировках: Книга знаний: Исправление ошибки 1С:Предприятие 7.7/8.0 - 100% загрузка процессора при ожидании блокировки

Вынесение кода проведения документа на сервер

Самый первый способ


Для этого весь код проведения документа нужно вынести на сервер.
Модуль документа:
Процедура ОбработкаПроведения()
    ПровестиДокументNNNНаСервере(Ссылка, Отказ); 
КонецПроцедуры

Общий модуль с флажком только "Сервер":
Функция ПровестиДокументNNNНаСервере(Ссылка, Отказ) 
...
КонецФункции

Более деликатный способ


Проведение из документа переносится на сервер.
Идет передача ссылки на сервер (передача объекта невозможна), на сервере идет вызов
проведения.
Модуль документа:
Процедура ОбработкаПроведения(Отказ, РежимПроведения) Экспорт 
#Если Клиент Тогда 

    ПровестиНаСервере(Ссылка, РежимПроведения, Отказ);
    Возврат;
#КонецЕсли

//Далее исходный код обработки проведения, выполняться будет только на сервере
...
КонецПроцедуры


Общий модуль только с галкой "Сервер":
Процедура ПровестиНаСервере(Ссылка, РежимПроведения, Отказ)
    Ссылка.ПолучитьОбъект().ОбработкаПроведения(Отказ, РежимПроведения);
КонецПроцедуры


Метод вынесения проведения на сервер тестировался на примере конфигурации УПП, документа ПеремещениеТоваров.
До вынесения документ проводился 13 секунд (работа кода - 3.5 сек, запись движений - 8.5 сек).
После вынесения - 4.5 секунд (работа кода - 2.5 сек, запись движений - 2 сек).

При этом, естественно, придется проделать работу по перестроению процедур и функций,
не доступных на сервере (находящихся в общих модулях только с галкой "Клиент" или в конструкциях
#Если Клиент Тогда #КонецЕсли) - нужно сделать их доступными на сервере.

Стоит отметить, что на файловом варианте такой код будет зацикливаться, так как все компилируется
на клиенте. Для обхода этой ошибки можно ввести дополнительный параметр процедуры "ОбработкаПроведения", например, так:
Процедура ОбработкаПроведения(Отказ, РежимПроведения, ЭтоПрограммныйВызов) Экспорт
    #Если Клиент Тогда

        ЭтоПрограммныйВызов = ?(ЭтоПрограммныйВызов=Неопределено, Ложь, ЭтоПрограммныйВызов);
        Если НЕ ЭтоПрограммныйВызов Тогда // для файлового варианта - исключаем зацикливание
            ПровестиНаСервере(Ссылка, РежимПроведения, Отказ);
            Возврат;
        КонецЕсли;
    #КонецЕсли

        //.....
КонецПроцедуры

///////////
Процедура ПровестиНаСервере(Ссылка, РежимПроведения, Отказ)
    Ссылка.ПолучитьОбъект().ОбработкаПроведения(Отказ, РежимПроведения, Истина);
КонецПроцедуры


Негативный эффект такого подхода - движения не записываются автоматически, придется их записать
в конце процедуры "ОбработкаПроведения". Например, так:
Для Каждого Набор из Движения Цикл
        Если Набор.Количество()>0 Тогда
            Набор.Записать(ложь);
        КонецЕсли;
    КонецЦикла;


От Гения 1С: Лучше использовать специальную функцию, проверяющую, файловая версия или клиент-серверная и запускать ускорение только для клиент-сервера. Функция должна быть размещена в модуле сервера:
Функция обЭтоКлиентСервер()
#Если Клиент Тогда

    Возврат истина;
#КонецЕсли

Возврат ложь;
КонецФункции


Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика