Конфигурация УНФ 1.6

При открытии ДС документа "Заказы на производство" долго открывается список (20-30 сек).

Обнаружил что проблема в поле "НомерКартинки"
Если убрать видимость поля на форме ИЛИ упростить условие в поле запроса (допустим "5 как НомерКартинки") то список открывается быстрее(2-3сек)

Изменения в форму списка не вносились, условий в ДС нету, Условного оформления тоже.

Подскажите как можно решить проблему без урезания функционала.

Код ДС типовой но на всякий случай оставлю тут

```1c
    ВЫБРАТЬ
    ВЫБОР
    КОГДА НЕ ДокументЗаказНаПроизводство.Проведен
    ИЛИ ДокументЗаказНаПроизводство.ВариантЗавершения = ЗНАЧЕНИЕ(Перечисление.ВариантыЗавершенияЗаказа.Отменен)
    ТОГДА -1
    КОГДА ЕСТЬNULL(ЗаказыНаПроизводствоОстаткиИОбороты.КоличествоРасход, 0) = 0
    ТОГДА ВЫБОР
    КОГДА ДокументЗаказНаПроизводство.СостояниеЗаказа = ЗНАЧЕНИЕ(Справочник.СостоянияЗаказовНаПроизводство.Завершен)
    ТОГДА 2
    КОГДА ДокументЗаказНаПроизводство.Финиш < &АктуальнаяДатаСеанса
    ТОГДА 6
    КОГДА ДокументЗаказНаПроизводство.Старт <= КОНЕЦПЕРИОДА(&АктуальнаяДатаСеанса, ДЕНЬ)
    И ДокументЗаказНаПроизводство.Финиш >= &АктуальнаяДатаСеанса
    ТОГДА 4
    ИНАЧЕ 2
    КОНЕЦ
    КОГДА ЕСТЬNULL(ЗаказыНаПроизводствоОстаткиИОбороты.КоличествоКонечныйОстаток, 0) = 0
    ТОГДА 0
    ИНАЧЕ ВЫБОР
    КОГДА ДокументЗаказНаПроизводство.СостояниеЗаказа = ЗНАЧЕНИЕ(Справочник.СостоянияЗаказовНаПроизводство.Завершен)
    ТОГДА 1
    КОГДА ДокументЗаказНаПроизводство.Финиш < &АктуальнаяДатаСеанса
    ТОГДА 5
    КОГДА ДокументЗаказНаПроизводство.Старт <= КОНЕЦПЕРИОДА(&АктуальнаяДатаСеанса, ДЕНЬ)
    И ДокументЗаказНаПроизводство.Финиш >= &АктуальнаяДатаСеанса
    ТОГДА 3
    ИНАЧЕ 1
    КОНЕЦ
    КОНЕЦ КАК НомерКартинки,
    ВЫБОР
    КОГДА ДокументЗаказНаПроизводство.Финиш < &АктуальнаяДатаСеанса
    И ЕСТЬNULL(ЗаказыНаПроизводствоОстаткиИОбороты.КоличествоКонечныйОстаток, 0) > 0
    ТОГДА ИСТИНА
    ИНАЧЕ ЛОЖЬ
    КОНЕЦ КАК ПросроченоВыполнение,
    ВЫБОР
    КОГДА ДокументЗаказНаПроизводство.Старт <= КОНЕЦПЕРИОДА(&АктуальнаяДатаСеанса, ДЕНЬ)
    И ДокументЗаказНаПроизводство.Финиш >= &АктуальнаяДатаСеанса
    И ЕСТЬNULL(ЗаказыНаПроизводствоОстаткиИОбороты.КоличествоКонечныйОстаток, 0) > 0
    ТОГДА ИСТИНА
    ИНАЧЕ ЛОЖЬ
    КОНЕЦ КАК НаСегодня,
    &АктуальнаяДатаСеанса КАК АктуальнаяДатаСеанса,
    ДокументЗаказНаПроизводство.Ссылка КАК Ссылка,
    ДокументЗаказНаПроизводство.ПометкаУдаления КАК ПометкаУдаления,
    ДокументЗаказНаПроизводство.Номер КАК Номер,
    ДокументЗаказНаПроизводство.Дата КАК Дата,
    ДокументЗаказНаПроизводство.Проведен КАК Проведен,
    ДокументЗаказНаПроизводство.ВидОперации КАК ВидОперации,
    ДокументЗаказНаПроизводство.Организация КАК Организация,
    ДокументЗаказНаПроизводство.ЗаказПокупателя КАК ЗаказПокупателя,
    ДокументЗаказНаПроизводство.Старт КАК Старт,
    ДокументЗаказНаПроизводство.Финиш КАК Финиш,
    ДокументЗаказНаПроизводство.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница,
    ДокументЗаказНаПроизводство.Комментарий КАК Комментарий,
    ДокументЗаказНаПроизводство.СтруктурнаяЕдиницаРезерв КАК СтруктурнаяЕдиницаРезерв,
    ДокументЗаказНаПроизводство.ДокументОснование КАК ДокументОснование,
    ДокументЗаказНаПроизводство.ЗаказНаПроизводствоОснование КАК ЗаказНаПроизводство,
    ДокументЗаказНаПроизводство.СостояниеЗаказа КАК СостояниеЗаказа,
    ДокументЗаказНаПроизводство.ВариантЗавершения КАК ВариантЗавершения,
    ДокументЗаказНаПроизводство.Ответственный КАК Ответственный,
    ДокументЗаказНаПроизводство.Автор КАК Автор,
    ВЫРАЗИТЬ(ДокументЗаказНаПроизводство.Заметки КАК СТРОКА(1024)) КАК Заметки,
    ДокументЗаказНаПроизводство.СписокНоменклатуры КАК СписокНоменклатуры,
    ДокументЗаказНаПроизводство.СписокРесурсов КАК СписокРесурсов,
    ДокументЗаказНаПроизводство.МоментВремени КАК МоментВремени,
    ВЫБОР
    КОГДА НаличиеФайлов.ЕстьФайлы ЕСТЬ NULL
    ТОГДА 0
    КОГДА НаличиеФайлов.ЕстьФайлы
    ТОГДА 1
    ИНАЧЕ 0
    КОНЕЦ КАК ЕстьФайлы
    ИЗ
    Документ.ЗаказНаПроизводство КАК ДокументЗаказНаПроизводство
    {ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыНаПроизводство.ОстаткиИОбороты КАК ЗаказыНаПроизводствоОстаткиИОбороты
    ПО ДокументЗаказНаПроизводство.Ссылка = ЗаказыНаПроизводствоОстаткиИОбороты.ЗаказНаПроизводство}
    {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаличиеФайлов КАК НаличиеФайлов
    ПО ДокументЗаказНаПроизводство.Ссылка = НаличиеФайлов.ОбъектСФайлами}
```
---
По номеру картинки сортировка планируется?
Если нет, можно сделать расширение. В расширении:
1) в при создании на сервере изменить текст запроса чтобы номер картинки был константой, например всегда -1:
-1 как НомерКартинки
2) в событии ПриПолученииДанныхНаСервере для динамического списка заполнять номер картинки для строк в данной порции данных.
---
Отображаться будут правильные данные.
Суть в том, что в запросе делать отбор только по тем документам, которые есть в порции данных.
Это ускорит работу запроса.

То есть предложение такое:
1 запрос - выбрать документы по ссылке, которые есть в порции данных, поместить во временную таблицу.
2 запрос - выбрать из регистра данные для номера картинки с отбором по ЗаказНаПроизводство в условиях виртуальной таблицы в списке документов из порции данных, поместить во временную таблицу
3 запрос - соединить таблицы из 1 и 2 запроса и получить номер картинки для заполнения
---
По номеру картинки сортировка планируется?
Если нет, можно сделать расширение. В расширении:
1) в при создании на сервере изменить текст запроса чтобы номер картинки был константой, например всегда -1:
-1 как НомерКартинки
2) в событии ПриПолученииДанныхНаСервере для динамического списка заполнять номер картинки для строк в данной порции данных.
---
Опять же придется брать данные регистра ЗаказыНаПроизводствоОстаткиИОбороты и проставить то же самое условие на номер картинки.

В ДС списка стоит галочка "динамически считывать данные" - Это не одно и то же?
---
Коллега предлагает вам сразу получить список заказов с неправильной картинкой и через 20-30 сек увидеть корректные картинки.
---
понял, спасибо.

Реализую пока этот вариант но хотел бы узнать есть ли еще какие варианты потому что отображать неправильные а потом заменить их верными возможно будет не тепло принят пользователями.

Если есть какой-нибудь еще вариант решения проблемы то подкиньте идей пожалуйста.
---
Отображаться будут правильные данные.
Суть в том, что в запросе делать отбор только по тем документам, которые есть в порции данных.
Это ускорит работу запроса.

То есть предложение такое:
1 запрос - выбрать документы по ссылке, которые есть в порции данных, поместить во временную таблицу.
2 запрос - выбрать из регистра данные для номера картинки с отбором по ЗаказНаПроизводство в условиях виртуальной таблицы в списке документов из порции данных, поместить во временную таблицу
3 запрос - соединить таблицы из 1 и 2 запроса и получить номер картинки для заполнения
---
еще не попробовал. Сегодня если успею сделаю и дам ответ.
---
Потестил, Открывается за 1-2 сек.

Ночью перенесу в актуал и гляну на более нагруженной базе( у меня не самая свежая).

Не ожидал такого результата. Видел подобное на wonderland но не понял отличия от галочки динамического считывания в ДС и подумал что не поможет.

Если не затруднит можете объяснить в чем отличия от галочки "динамическое считывание данных"? Ведь там тоже по идее порционно берется.

Оставлю пример кода для решения. Возможно кому-нибудь пригодится.

```1c
    Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)

    Запрос = новый Запрос(
    "ВЫБРАТЬ
    | ЗаказНаПроизводство.Ссылка КАК Ссылка,
    | ЗаказНаПроизводство.Проведен КАК Проведен,
    | ЗаказНаПроизводство.ВариантЗавершения КАК ВариантЗавершения,
    | ЗаказНаПроизводство.СостояниеЗаказа КАК СостояниеЗаказа,
    | ЗаказНаПроизводство.Финиш КАК Финиш,
    | ЗаказНаПроизводство.Старт КАК Старт
    |ПОМЕСТИТЬ Вт_ЗНП
    |ИЗ
    | Документ.ЗаказНаПроизводство КАК ЗаказНаПроизводство
    |ГДЕ
    | ЗаказНаПроизводство.Ссылка В(&Ссылка)
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | ВЫБОР
    | КОГДА НЕ Вт_ЗНП.Проведен
    | ИЛИ Вт_ЗНП.ВариантЗавершения = ЗНАЧЕНИЕ(Перечисление.ВариантыЗавершенияЗаказа.Отменен)
    | ТОГДА -1
    | КОГДА ЕСТЬNULL(ЗаказыНаПроизводствоОстаткиИОбороты.КоличествоРасход, 0) = 0
    | ТОГДА ВЫБОР
    | КОГДА Вт_ЗНП.СостояниеЗаказа = ЗНАЧЕНИЕ(Справочник.СостоянияЗаказовНаПроизводство.Завершен)
    | ТОГДА 2
    | КОГДА Вт_ЗНП.Финиш < &АктуальнаяДатаСеанса
    | ТОГДА 6
    | КОГДА Вт_ЗНП.Старт <= КОНЕЦПЕРИОДА(&АктуальнаяДатаСеанса, ДЕНЬ)
    | И Вт_ЗНП.Финиш >= &АктуальнаяДатаСеанса
    | ТОГДА 4
    | ИНАЧЕ 2
    | КОНЕЦ
    | КОГДА ЕСТЬNULL(ЗаказыНаПроизводствоОстаткиИОбороты.КоличествоКонечныйОстаток, 0) = 0
    | ТОГДА 0
    | ИНАЧЕ ВЫБОР
    | КОГДА Вт_ЗНП.СостояниеЗаказа = ЗНАЧЕНИЕ(Справочник.СостоянияЗаказовНаПроизводство.Завершен)
    | ТОГДА 1
    | КОГДА Вт_ЗНП.Финиш < &АктуальнаяДатаСеанса
    | ТОГДА 5
    | КОГДА Вт_ЗНП.Старт <= КОНЕЦПЕРИОДА(&АктуальнаяДатаСеанса, ДЕНЬ)
    | И Вт_ЗНП.Финиш >= &АктуальнаяДатаСеанса
    | ТОГДА 3
    | ИНАЧЕ 1
    | КОНЕЦ
    | КОНЕЦ КАК НомерКартинки,
    | Вт_ЗНП.Ссылка КАК Ссылка,
    | ВЫБОР
    | КОГДА Вт_ЗНП.Финиш < &АктуальнаяДатаСеанса
    | И ЕСТЬNULL(ЗаказыНаПроизводствоОстаткиИОбороты.КоличествоКонечныйОстаток, 0) > 0
    | ТОГДА ИСТИНА
    | ИНАЧЕ ЛОЖЬ
    | КОНЕЦ КАК ПросроченоВыполнение,
    | ВЫБОР
    | КОГДА Вт_ЗНП.Старт <= КОНЕЦПЕРИОДА(&АктуальнаяДатаСеанса, ДЕНЬ)
    | И Вт_ЗНП.Финиш >= &АктуальнаяДатаСеанса
    | И ЕСТЬNULL(ЗаказыНаПроизводствоОстаткиИОбороты.КоличествоКонечныйОстаток, 0) > 0
    | ТОГДА ИСТИНА
    | ИНАЧЕ ЛОЖЬ
    | КОНЕЦ КАК Поле1
    |ИЗ
    | Вт_ЗНП КАК Вт_ЗНП
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыНаПроизводство.ОстаткиИОбороты КАК ЗаказыНаПроизводствоОстаткиИОбороты
    | ПО Вт_ЗНП.Ссылка = ЗаказыНаПроизводствоОстаткиИОбороты.ЗаказНаПроизводство");
    Запрос.УстановитьПараметр("Ссылка", Строки.ПолучитьКлючи());
    Запрос.УстановитьПараметр("АктуальнаяДатаСеанса", ТекущаяДатаСеанса());

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

    Пока Выборка.Следующий() Цикл

    СтрокаСписка = Строки[Выборка.Ссылка];
    СтрокаСписка.Данные["НомерКартинки"]= Выборка.НомерКартинки;
    КонецЦикла;

    КонецПроцедуры
```
---
Магия =)
---
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыНаПроизводство.ОстаткиИОбороты Хе-хе. Хе-хе-хе.
---
не стоило так делать?
Можете объяснить?
---
Отбор то в виртуальной таблице добавьте по полю ЗаказНаПроизводство - сейчас то известны значения.
Ну и остальные поля кроме ссылки и номера картинки в результирующем запросе не нужны.
---
Получилось? Есть эффект?
---
Это не так работает))
---
В ДС списка стоит галочка "динамически считывать данные" - Это не одно и то же?
А основная таблица указана?
---
да