Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
05 июл 2022, 09:04

Оптимизация вывода номенклатуры

Автор Daiv, 19 ноя 2017, 08:14

0 Пользователей и 1 гость просматривают эту тему.

Daiv

Здравствуйте, подскажите как можно оптимизировать вывод номенклатуры, сейчас имеем всего 208 позиций, вывод занимает около 2 сек.

Процедура ПоказатьОстаткиНаСкладе()

Номенклатура.Очистить();

Организация = ИсходныеПараметры.Организация;
Склад = ИсходныеПараметры.Склад;
Родитель = Справочники.Номенклатура.НайтиПоКоду(ЭлементыФормы.ДеревоНоменклатуры.ТекущаяСтрока.Код).Ссылка;

Если (ИсходныеПараметры.Команда = "ПодборНоменклатуры") или (ИсходныеПараметры.Команда = "ПодборЗапчастейВАктАгрегата") Тогда

//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РегистрСкладаОстатки.Номенклатура КАК Номенклатура,
| РегистрСкладаОстатки.СтоимостьОстаток КАК Стоимость,
| РегистрСкладаОстатки.КоличествоОстаток КАК Количество
|ИЗ
| РегистрНакопления.РегистрСклада.Остатки КАК РегистрСкладаОстатки
|ГДЕ
| РегистрСкладаОстатки.Организация = &Организация
| И РегистрСкладаОстатки.Склад = &Склад
| И РегистрСкладаОстатки.Номенклатура.Родитель = &Родитель
| И РегистрСкладаОстатки.Номенклатура.ЭтоГруппа = &ЭтоГруппа
| УПОРЯДОЧИТЬ ПО ВЫРАЗИТЬ(РегистрСкладаОстатки.Номенклатура.ПолноеНаименование КАК СТРОКА(100))";
   
Запрос.УстановитьПараметр("ЭтоГруппа", Ложь);
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("Родитель", Родитель);
Запрос.УстановитьПараметр("Склад", Склад);

Результат = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ЭлементыФормы.Номенклатура.ДобавитьСтроку();
ЭлементыФормы.Номенклатура.ТекущаяСтрока.Наименование = ВыборкаДетальныеЗаписи.Номенклатура;
ЭлементыФормы.Номенклатура.ТекущаяСтрока.ЕдиницаИзмерения = ВыборкаДетальныеЗаписи.Номенклатура.ЕдиницаИзмерения;
ЭлементыФормы.Номенклатура.ТекущаяСтрока.Остаток = ВыборкаДетальныеЗаписи.Количество;
ЭлементыФормы.Номенклатура.ТекущаяСтрока.ПолноеНаименование = ВыборкаДетальныеЗаписи.Номенклатура.ПолноеНаименование;
КонецЦикла;

//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА


КонецЕсли;

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


Как я понимаю тут всё дело именно в ЭлементыФормы.Номенклатура.ДобавитьСтроку();, чем можно заменить что б ускорить вывод?

LexaK

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

лкНоваяСтрока = Номенклатура.Добавить()
лкНоваяСтрока.Остаток = ВыборкаДетальныеЗаписи.Количество;

необходммо сразу в запросе получить все нужные поля, что бы не было такого
лкНоваяСтрока.ЕдиницаИзмерения = ВыборкаДетальныеЗаписи.Номенклатура.ЕдиницаИзмерения;

а надо так
лкНоваяСтрока.ЕдиницаИзмерения = ВыборкаДетальныеЗаписи.ЕдиницаИзмерения;

и при получении остатков, необходимо все известные параметры передать в виртуальную таблицу
во это
|ИЗ
        |    РегистрНакопления.РегистрСклада.Остатки КАК РегистрСкладаОстатки
заменить на
|ИЗ
        |    РегистрНакопления.РегистрСклада.Остатки(,
       |    Склад = &Склад
        |    И Номенклатура.Родитель = &Родитель
        |    И Номенклатура.ЭтоГруппа = &ЭтоГруппа) КАК РегистрСкладаОстатки
 
может еще что=то упостил, попробуйте пока это сделать, посмотрите как увеличится производительность
если помогло нажмите: Спасибо!

Oldman06

Процедура ПоказатьОстаткиНаСкладе()
    Номенклатура.Очистить();
   
    Организация = ИсходныеПараметры.Организация;
    Склад = ИсходныеПараметры.Склад;
    Родитель = Справочники.Номенклатура.НайтиПоКоду(ЭлементыФормы.ДеревоНоменклатуры.ТекущаяСтрока.Код).Ссылка;
   
    Если (ИсходныеПараметры.Команда = "ПодборНоменклатуры") или (ИсходныеПараметры.Команда = "ПодборЗапчастейВАктАгрегата") Тогда
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    РегистрСкладаОстатки.Номенклатура КАК Номенклатура,
        |    РегистрСкладаОстатки.Номенклатура.Наименование КАК Наименование,
        |    РегистрСкладаОстатки.Номенклатура.ПолноеНаименование КАК ПолноеНаименование,
        |    РегистрСкладаОстатки.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
        |    РегистрСкладаОстатки.СтоимостьОстаток КАК Стоимость,
        |    РегистрСкладаОстатки.КоличествоОстаток КАК Количество КАК Остаток
        |ИЗ
        |    РегистрНакопления.РегистрСклада.Остатки(,
        |        Организация = &Организация
        |            И Склад = &Склад
        |            И Номенклатура.Родитель = &Родитель) КАК РегистрСкладаОстатки
        | УПОРЯДОЧИТЬ ПО ВЫРАЗИТЬ(РегистрСкладаОстатки.Номенклатура.ПолноеНаименование КАК СТРОКА(100))";
       
        Запрос.УстановитьПараметр("Организация", Организация);
        Запрос.УстановитьПараметр("Родитель", Родитель);
        Запрос.УстановитьПараметр("Склад", Склад);

        Номенклатура.Загрузить(Запрос.Выполнить().Выгрузить());
       
    КонецЕсли;
   
КонецПроцедуры

Daiv

Цитата: Oldman06 от 19 ноя 2017, 22:44
Процедура ПоказатьОстаткиНаСкладе()
    Номенклатура.Очистить();
   
    Организация = ИсходныеПараметры.Организация;
    Склад = ИсходныеПараметры.Склад;
    Родитель = Справочники.Номенклатура.НайтиПоКоду(ЭлементыФормы.ДеревоНоменклатуры.ТекущаяСтрока.Код).Ссылка;
   
    Если (ИсходныеПараметры.Команда = "ПодборНоменклатуры") или (ИсходныеПараметры.Команда = "ПодборЗапчастейВАктАгрегата") Тогда
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    РегистрСкладаОстатки.Номенклатура КАК Номенклатура,
        |    РегистрСкладаОстатки.Номенклатура.Наименование КАК Наименование,
        |    РегистрСкладаОстатки.Номенклатура.ПолноеНаименование КАК ПолноеНаименование,
        |    РегистрСкладаОстатки.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
        |    РегистрСкладаОстатки.СтоимостьОстаток КАК Стоимость,
        |    РегистрСкладаОстатки.КоличествоОстаток КАК Количество КАК Остаток
        |ИЗ
        |    РегистрНакопления.РегистрСклада.Остатки(,
        |        Организация = &Организация
        |            И Склад = &Склад
        |            И Номенклатура.Родитель = &Родитель) КАК РегистрСкладаОстатки
        | УПОРЯДОЧИТЬ ПО ВЫРАЗИТЬ(РегистрСкладаОстатки.Номенклатура.ПолноеНаименование КАК СТРОКА(100))";
       
        Запрос.УстановитьПараметр("Организация", Организация);
        Запрос.УстановитьПараметр("Родитель", Родитель);
        Запрос.УстановитьПараметр("Склад", Склад);

        Номенклатура.Загрузить(Запрос.Выполнить().Выгрузить());
       
    КонецЕсли;
   
КонецПроцедуры


Спасибо, помогло, теперь всё открывается мгновенно)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск