Формирование движений в регистрах и производительность системы 1С:Предприятие 8
Довольно часто пользователи системы 1С:Предприятие жалуются на замедление работы работы программы после конфигурирования системы программистами. Использование неоптимальных методов для формирования движений по регистрам - частая причина медленной работы системы.
Сравним два варианта записи движений в регистр накопления.
Есть документ «Поступление» с табличной частью «Товарыс реквизитами табличной части «Товар» и «Количество». Необходимо по каждой строчке из табличной части сделать приход в регистр накопления «Остатки».
Первый вариант, который часто применяется начинающими программистами. Этот метод прост для запоминания т.к. не требует знания механизма запросов.
Процедура ОбходомСтрок()
Для Каждого Стр из Товары Цикл
Движение = Движения.Остатки.ДобавитьПриход();
Движение.Период = Дата;
Движение.Регистратор = Ссылка;
Движение.Товар = Стр.Товар;
Движение.Количество = Стр.Количество;
КонецЦикла;
Движения.Остатки.Записать();
КонецПроцедуры
И второй вариант, требующий знания механизма запросов .
Процедура Запросом()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПриходТовары.Товар,
| ПриходТовары.Количество,
| ПриходТовары.Ссылка КАК Регистратор,
| ПриходТовары.Ссылка.Дата КАК Период
|ИЗ
| Документ.Приход.Товары КАК ПриходТовары
|ГДЕ
| ПриходТовары.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка",Ссылка);
ТЗ = Запрос.Выполнить().Выгрузить();
Движения.Остатки.Загрузить(ТЗ);
Движения.Остатки.Записать();
КонецПроцедуры
Формирование движений в регистре с использованием второго варианта происходит значительно быстрее, чем при использовании первого варианта. Замеры производительности при отладке дают прирост скорости от 30 %