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

```1c
    Процедура ЖурналДокументовСписокВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
    // Вставить содержимое обработчика.
    //Если Элемент.
    // Вставить содержимое обработчика.
    ш=3;
    ВыбраннаяСтрока.ПолучитьФорму("ФормаВ2").Открыть();
    СтандартнаяОбработка=Ложь;

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

    Функция ОбновлениеСтрок(ДанныеИзСикнп)
    //
    Если ДанныеИзСикнп.Количество() = 0
    Тогда
    Возврат Ложь;
    КонецЕсли;
    Для Каждого СтрокаВагоны1 Из ДанныеИзСикнп Цикл
    //
    Если СтрокаВагоны1.dWeight > СтрокаВагоны1.ГрузоподъемностьВЦСикнП ИЛИ СтрокаВагоны1.Vсогр20CСикнП < СтрокаВагоны1.sMaxVolTanker
    ИЛИ СтрокаВагоны1.Vсогр20CСикнП < СтрокаВагоны1.dVolume И СтрокаВагоны1.РХ = Справочники.Рх.ПустаяСсылка()
    Тогда
    //
    Возврат Истина;
    //
    КонецЕсли;
    //
    КонецЦикла;
    Возврат Ложь;
    //
    КонецФункции

    Функция ОбновлениеЦветаТупик (ДанныеИзСикнп,Строка)
    //
    Структура = Новый Структура;
    Структура.Вставить("ГрузоподъемностьВЦСикнП",0);
    ЭлемСРх = ДанныеИзСикнп.НайтиСтроки(Структура);
    //Для Каждого СтрокаСикнП ИЗ ДанныеИзСикнп Цикл

    Если ДанныеИзСикнп.Количество() - ЭлемСРх.Количество() > 0 Тогда
    //
    Строка.Ячейки.НомерТупика.ЦветФона = Новый Цвет(255, 160, 122);
    Иначе
    Строка.Ячейки.НомерТупика.ЦветФона = Новый Цвет(206, 252, 194);
    //
    КонецЕсли;
    Если ДанныеИзСикнп.Количество() = 0 Тогда
    Строка.Ячейки.НомерТупика.ЦветФона = Новый Цвет(240, 250, 155);
    КонецЕсли;
    //КонецЦикла;
    //
    КонецФункции
    Процедура ЖурналДокументовСписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    //////
    Если ОбновлениеСтрок(ОформлениеСтроки.ДанныеСтроки.Ссылка.ДанныеИзСикнп)
    Тогда
    ОформлениеСтроки.Ячейки.ПогруженныйНП.ЦветФона = WebЦвета.Розовый;
    КонецЕсли;

    Структура = Новый Структура;
    Структура.Вставить("dWeight", 0);
    СтруктураРх = Новый Структура;
    СтруктураРх.Вставить("ГрузоподъемностьВЦСикнП", 0);
    ЭлемСРх = ОформлениеСтроки.ДанныеСтроки.Ссылка.ДанныеИзСикнп.НайтиСтроки(СтруктураРх);

    НайденныеПустыеЭлементы = ОформлениеСтроки.ДанныеСтроки.Ссылка.ДанныеИзСикнп.НайтиСтроки(СтруктураРх);
    НайденныеПустыеЭлементы = ОформлениеСтроки.ДанныеСтроки.Ссылка.ДанныеИзСикнп.НайтиСтроки(Структура);
    Если НайденныеПустыеЭлементы.Количество() - ЭлемСРх.Количество() > 0 Тогда
    //
    ОформлениеСтроки.Ячейки.НомерТупика.ЦветФона = Новый Цвет(255, 160, 122);
    Иначе
    ОформлениеСтроки.Ячейки.НомерТупика.ЦветФона = Новый Цвет(206, 252, 194);
    //
    КонецЕсли;

    Если ОформлениеСтроки.ДанныеСтроки.Ссылка.ДанныеИзСикнп.Количество() = 0 Тогда
    ОформлениеСтроки.Ячейки.НомерТупика.ЦветФона = Новый Цвет(240, 250, 155);
    КонецЕсли;

    Для Каждого СтрокаВагоны Из ОформлениеСтроки.ДанныеСтроки.Ссылка.Вагоны Цикл
    //////////
    Если СтрокаВагоны.ФактическаяСтепеньНаполненияКотла > СтрокаВагоны.ПредельнаяСтепеньНаполненияКотла И СтрокаВагоны.РХ = Справочники.Рх.ПустаяСсылка()
    Тогда
    ОформлениеСтроки.Ячейки.Номер.ЦветФона = WebЦвета.Красный;
    Прервать;
    Иначе
    ОформлениеСтроки.Ячейки.Номер.ЦветФона = WebЦвета.Роса;
    КонецЕсли;
    /////////
    КонецЦикла;
    ///////////////
    КонецПроцедуры
```
---
пример моего кода ...ПриПолученииДанных(Элемент, ОформленияСтрок)

```1c
    ЦветИнкассация = Новый Цвет(230,250,250);
    ЦветДоставка = Новый Цвет(230,255,235);
    ЦветВархиве = Новый Цвет(218,215,205);
    ЦветДругая = WebЦвета.Персиковый;

    Соответствие = Новый Соответствие;
    СсылкиМассив = Новый Массив;
    Для каждого ТекСтрока из ОформленияСтрок Цикл //По старому неверно работает
    Если Не ТекСтрока.ДанныеСтроки.ЭтоГруппа Тогда // ТекСтрока.ДанныеСтроки.Ссылка.ЭтоГруппа Почему имеено так было ??
    СсылкиМассив.Добавить(ТекСтрока.ДанныеСтроки.Ссылка);
    //Соответствие.Вставить(ТекСтрока.ДанныеСтроки.Ссылка,ТекСтрока);
    КонецЕсли;
    КонецЦикла;

    // из запроса найдем действующие точки

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

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

    запросАдрес = Новый Запрос;
    запросАдрес.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    | КонтактнаяИнформация.Поле4,
    | КонтактнаяИнформация.Объект,
    | КонтактнаяИнформация.Поле5,
    | КонтактнаяИнформация.Поле6 КАК Поле6,
    | КонтактнаяИнформация.Поле7,
    | КонтактнаяИнформация.Поле8,
    | КонтактнаяИнформация.Поле9,
    | КонтактнаяИнформация.Поле10,
    | КонтактнаяИнформация.Поле4 + " " + КонтактнаяИнформация.Поле5 + " " + КонтактнаяИнформация.Поле6 + " " + КонтактнаяИнформация.Поле7 + " " + КонтактнаяИнформация.Поле8 + " " + КонтактнаяИнформация.Поле9 + " " + КонтактнаяИнформация.Поле10 КАК НаселённыйПункт
    |ИЗ
    | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
    |ГДЕ
    | КонтактнаяИнформация.Объект В (&Объект)
    | И КонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ФактАдресТочкиОбслуживания)";
    запросАдрес.УстановитьПараметр("Объект", СсылкиМассив);
    ВыборкаАдреса = запросАдрес.Выполнить().Выбрать();

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

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

    // Раскрашиваем строки с рабочими тосками обслуживания
    // Пока Выборка.Следующий() Цикл
    Для каждого ТекСтрока из ОформленияСтрок Цикл
    Если (не ТекСтрока.ДанныеСтроки.ЭтоГруппа) ТОгда
    ПОКА Выборка.НайтиСледующий(Новый Структура("ТочкаОбслуживания", ТекСтрока.ДанныеСтроки.Ссылка)) ЦИКЛ //Тогда
    Если Выборка.РабочаяТочка Тогда
    Если ТекСтрока.Ячейки.Доставка.Значение = Неопределено ТОгда
    Доставка = ТекСтрока.ДанныеСтроки.Ссылка.Доставка;
    иначе
    Доставка = ТекСтрока.ДанныеСтроки.Доставка ;
    КонецЕсли;
    Если Доставка Тогда
    ТекСтрока.ЦветФона = ЦветДоставка;
    Иначе
    ТекСтрока.ЦветФона = ЦветИнкассация;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    //КонецЕсли;
    Выборка.Сбросить();
    Если Не ТекСтрока.ДанныеСтроки.Актуальность Тогда
    ТекСтрока.ЦветФона = ЦветВархиве;
    КонецЕсли;
    Если ТекСтрока.Ячейки.Подразделение.Значение = ОсновноеПодразделение Тогда
    ИначеЕсли ЗначениеЗаполнено(ОсновноеПодразделение)И Прав(СокрЛП(ОсновноеПодразделение.Код),3) ="001" тогда
    ИначеЕсли Не ЗначениеЗаполнено(ОсновноеПодразделение) Тогда
    иначе
    ТекСтрока.Ячейки.Картинка.ЦветФона = ЦветДругая;
    ТекСтрока.Ячейки.Подразделение.ЦветФона = ЦветДругая;
    КонецЕсли;

    /// А Д Р Е С А
    Если ВыборкаАдреса.НайтиСледующий(Новый Структура("Объект", ТекСтрока.ДанныеСтроки.Ссылка)) Тогда
    ТекСтрока.ячейки.Адрес.Значение = СокрЛП(ВыборкаАдреса.НаселённыйПункт);// АдресТО;
    ВыборкаАдреса.Сбросить();
    КонецЕсли;
    Если ВыборкаТелефон.НайтиСледующий(Новый Структура("Объект", ТекСтрока.ДанныеСтроки.Ссылка)) Тогда
    ТекСтрока.ячейки.Телефон.Значение = СокрЛП(ВыборкаТелефон.Представление);// АдресТО;
    ВыборкаТелефон.Сбросить();
    КонецЕсли;
    МаршрутыПоДням = "; т=0;
    Пока ВыборкаМаршруты.НайтиСледующий(Новый Структура("Владелец", ТекСтрока.ДанныеСтроки.Ссылка)) Цикл
    МаршрутыПоДням = МаршрутыПоДням+?(т=0,ОбработатьМаршрутыЗаезда(ВыборкаМаршруты),"/"+ОбработатьМаршрутыЗаезда(ВыборкаМаршруты));
    т=1;
    КонецЦикла;
    ТекСтрока.ячейки.Маршруты.Значение = МаршрутыПоДням;// АдресТО;
    ВыборкаМаршруты.Сбросить();
    КонецЕсли;
    КонецЦикла;
```
---
1) замер производительности включите. Сообщите на какие строки проходиться больше времени. Можно и скрин-шот разместить.
---
1) СтрокаВагоны1.РХ = Справочники.Рх.ПустаяСсылка() !!!! возможно

2) ниже ... цикл при выводе строки. Это жесть. !! Нужно копать в сторону "ПриПолученииДанных"

```1c
    Для Каждого СтрокаВагоны Из ОформлениеСтроки.ДанныеСтроки.Ссылка.Вагоны Цикл
    //////////
    Если СтрокаВагоны.ФактическаяСтепеньНаполненияКотла > СтрокаВагоны.ПредельнаяСтепеньНаполненияКотла И СтрокаВагоны.РХ = Справочники.Рх.ПустаяСсылка()
    Тогда
    ОформлениеСтроки.Ячейки.Номер.ЦветФона = WebЦвета.Красный;
    Прервать;
    Иначе
    ОформлениеСтроки.Ячейки.Номер.ЦветФона = WebЦвета.Роса;
    КонецЕсли;
    /////////
    КонецЦикла;
```

3) этот кусок не используется дальше.

```1c
    Структура = Новый Структура;
    Структура.Вставить("dWeight", 0);
    СтруктураРх = Новый Структура;
    СтруктураРх.Вставить("ГрузоподъемностьВЦСикнП", 0);
    ЭлемСРх = ОформлениеСтроки.ДанныеСтроки.Ссылка.ДанныеИзСикнп.НайтиСтроки(СтруктураРх);
```
---
во 2) понял, а вот в 3) не совсем, он же вроде сразу для оформления дальше используется
---
пример моего кода ...ПриПолученииДанных(Элемент, ОформленияСтрок)

```1c
    ЦветИнкассация = Новый Цвет(230,250,250);
    ЦветДоставка = Новый Цвет(230,255,235);
    ЦветВархиве = Новый Цвет(218,215,205);
    ЦветДругая = WebЦвета.Персиковый;

    Соответствие = Новый Соответствие;
    СсылкиМассив = Новый Массив;
    Для каждого ТекСтрока из ОформленияСтрок Цикл //По старому неверно работает
    Если Не ТекСтрока.ДанныеСтроки.ЭтоГруппа Тогда // ТекСтрока.ДанныеСтроки.Ссылка.ЭтоГруппа Почему имеено так было ??
    СсылкиМассив.Добавить(ТекСтрока.ДанныеСтроки.Ссылка);
    //Соответствие.Вставить(ТекСтрока.ДанныеСтроки.Ссылка,ТекСтрока);
    КонецЕсли;
    КонецЦикла;

    // из запроса найдем действующие точки

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

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

    запросАдрес = Новый Запрос;
    запросАдрес.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    | КонтактнаяИнформация.Поле4,
    | КонтактнаяИнформация.Объект,
    | КонтактнаяИнформация.Поле5,
    | КонтактнаяИнформация.Поле6 КАК Поле6,
    | КонтактнаяИнформация.Поле7,
    | КонтактнаяИнформация.Поле8,
    | КонтактнаяИнформация.Поле9,
    | КонтактнаяИнформация.Поле10,
    | КонтактнаяИнформация.Поле4 + " " + КонтактнаяИнформация.Поле5 + " " + КонтактнаяИнформация.Поле6 + " " + КонтактнаяИнформация.Поле7 + " " + КонтактнаяИнформация.Поле8 + " " + КонтактнаяИнформация.Поле9 + " " + КонтактнаяИнформация.Поле10 КАК НаселённыйПункт
    |ИЗ
    | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
    |ГДЕ
    | КонтактнаяИнформация.Объект В (&Объект)
    | И КонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ФактАдресТочкиОбслуживания)";
    запросАдрес.УстановитьПараметр("Объект", СсылкиМассив);
    ВыборкаАдреса = запросАдрес.Выполнить().Выбрать();

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

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

    // Раскрашиваем строки с рабочими тосками обслуживания
    // Пока Выборка.Следующий() Цикл
    Для каждого ТекСтрока из ОформленияСтрок Цикл
    Если (не ТекСтрока.ДанныеСтроки.ЭтоГруппа) ТОгда
    ПОКА Выборка.НайтиСледующий(Новый Структура("ТочкаОбслуживания", ТекСтрока.ДанныеСтроки.Ссылка)) ЦИКЛ //Тогда
    Если Выборка.РабочаяТочка Тогда
    Если ТекСтрока.Ячейки.Доставка.Значение = Неопределено ТОгда
    Доставка = ТекСтрока.ДанныеСтроки.Ссылка.Доставка;
    иначе
    Доставка = ТекСтрока.ДанныеСтроки.Доставка ;
    КонецЕсли;
    Если Доставка Тогда
    ТекСтрока.ЦветФона = ЦветДоставка;
    Иначе
    ТекСтрока.ЦветФона = ЦветИнкассация;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    //КонецЕсли;
    Выборка.Сбросить();
    Если Не ТекСтрока.ДанныеСтроки.Актуальность Тогда
    ТекСтрока.ЦветФона = ЦветВархиве;
    КонецЕсли;
    Если ТекСтрока.Ячейки.Подразделение.Значение = ОсновноеПодразделение Тогда
    ИначеЕсли ЗначениеЗаполнено(ОсновноеПодразделение)И Прав(СокрЛП(ОсновноеПодразделение.Код),3) ="001" тогда
    ИначеЕсли Не ЗначениеЗаполнено(ОсновноеПодразделение) Тогда
    иначе
    ТекСтрока.Ячейки.Картинка.ЦветФона = ЦветДругая;
    ТекСтрока.Ячейки.Подразделение.ЦветФона = ЦветДругая;
    КонецЕсли;

    /// А Д Р Е С А
    Если ВыборкаАдреса.НайтиСледующий(Новый Структура("Объект", ТекСтрока.ДанныеСтроки.Ссылка)) Тогда
    ТекСтрока.ячейки.Адрес.Значение = СокрЛП(ВыборкаАдреса.НаселённыйПункт);// АдресТО;
    ВыборкаАдреса.Сбросить();
    КонецЕсли;
    Если ВыборкаТелефон.НайтиСледующий(Новый Структура("Объект", ТекСтрока.ДанныеСтроки.Ссылка)) Тогда
    ТекСтрока.ячейки.Телефон.Значение = СокрЛП(ВыборкаТелефон.Представление);// АдресТО;
    ВыборкаТелефон.Сбросить();
    КонецЕсли;
    МаршрутыПоДням = "; т=0;
    Пока ВыборкаМаршруты.НайтиСледующий(Новый Структура("Владелец", ТекСтрока.ДанныеСтроки.Ссылка)) Цикл
    МаршрутыПоДням = МаршрутыПоДням+?(т=0,ОбработатьМаршрутыЗаезда(ВыборкаМаршруты),"/"+ОбработатьМаршрутыЗаезда(ВыборкаМаршруты));
    т=1;
    КонецЦикла;
    ТекСтрока.ячейки.Маршруты.Значение = МаршрутыПоДням;// АдресТО;
    ВыборкаМаршруты.Сбросить();
    КонецЕсли;
    КонецЦикла;
```
---
Как и предполагал. Нужно логику поменять раскраски.
Как вариант в обработчике "ПриПолученииДанных" сделать нужные расчеты.

У вас много .Ссылка. а это длительная операция.
После первого обращения .Ссылка. в дальнейшем 1С кэширует и будет быстрее к объекту. ...

в обработчике "ПриПолученииДанных" происходит работа с порциями строк. И можно делать запросы к БД.
---
Можете чуть более разжевать мне, что следует сделать
---
я свой пример привел в ответе №4.
Вам нужно под свою задачу переделать.
---
Буду пробовать сейчас