Конфигурация УНФ 1.6
При открытии ДС документа "Заказы на производство" долго открывается список (20-30 сек).
Обнаружил что проблема в поле "НомерКартинки"
Если убрать видимость поля на форме ИЛИ упростить условие в поле запроса (допустим "5 как НомерКартинки") то список открывается быстрее(2-3сек)
Изменения в форму списка не вносились, условий в ДС нету, Условного оформления тоже.
Подскажите как можно решить проблему без урезания функционала.
Код ДС типовой но на всякий случай оставлю тут
При открытии ДС документа "Заказы на производство" долго открывается список (20-30 сек).
Обнаружил что проблема в поле "НомерКартинки"
Если убрать видимость поля на форме ИЛИ упростить условие в поле запроса (допустим "5 как НомерКартинки") то список открывается быстрее(2-3сек)
Изменения в форму списка не вносились, условий в ДС нету, Условного оформления тоже.
Подскажите как можно решить проблему без урезания функционала.
Код ДС типовой но на всякий случай оставлю тут
ВЫБРАТЬ
ВЫБОР
КОГДА НЕ ДокументЗаказНаПроизводство.Проведен
ИЛИ ДокументЗаказНаПроизводство.ВариантЗавершения = ЗНАЧЕНИЕ(Перечисление.ВариантыЗавершенияЗаказа.Отменен)
ТОГДА -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
КОНЕЦ КАК ЕстьФайлы
ИЗ
Документ.ЗаказНаПроизводство КАК ДокументЗаказНаПроизводство
{ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыНаПроизводство.ОстаткиИОбороты КАК ЗаказыНаПроизводствоОстаткиИОбороты
ПО ДокументЗаказНаПроизводство.Ссылка = ЗаказыНаПроизводствоОстаткиИОбороты.ЗаказНаПроизводство}
{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаличиеФайлов КАК НаличиеФайлов
ПО ДокументЗаказНаПроизводство.Ссылка = НаличиеФайлов.ОбъектСФайлами}
ПоказатьПо теме из базы знаний
- Разные хм... неожиданности при работе с УТ 11 и платформой
- Динамический список и поиск... неприятностей
- Смотрим запросы 1С через Microsoft SQL Profiler по следам ошибок разработчиков, приводящих к проблемам производительности
- Опыт оптимизации 1С на PostgreSQL
- История одного админа в мире 1С. Как поиски причины тормозов 1С привели к созданию нового продукта
Найденные решения
(1)По номеру картинки сортировка планируется?
Если нет, можно сделать расширение. В расширении:
1) в при создании на сервере изменить текст запроса чтобы номер картинки был константой, например всегда -1:
-1 как НомерКартинки
2) в событии ПриПолученииДанныхНаСервере для динамического списка заполнять номер картинки для строк в данной порции данных.
Если нет, можно сделать расширение. В расширении:
1) в при создании на сервере изменить текст запроса чтобы номер картинки был константой, например всегда -1:
-1 как НомерКартинки
2) в событии ПриПолученииДанныхНаСервере для динамического списка заполнять номер картинки для строк в данной порции данных.
(6)Отображаться будут правильные данные.
Суть в том, что в запросе делать отбор только по тем документам, которые есть в порции данных.
Это ускорит работу запроса.
То есть предложение такое:
1 запрос - выбрать документы по ссылке, которые есть в порции данных, поместить во временную таблицу.
2 запрос - выбрать из регистра данные для номера картинки с отбором по ЗаказНаПроизводство в условиях виртуальной таблицы в списке документов из порции данных, поместить во временную таблицу
3 запрос - соединить таблицы из 1 и 2 запроса и получить номер картинки для заполнения
Суть в том, что в запросе делать отбор только по тем документам, которые есть в порции данных.
Это ускорит работу запроса.
То есть предложение такое:
1 запрос - выбрать документы по ссылке, которые есть в порции данных, поместить во временную таблицу.
2 запрос - выбрать из регистра данные для номера картинки с отбором по ЗаказНаПроизводство в условиях виртуальной таблицы в списке документов из порции данных, поместить во временную таблицу
3 запрос - соединить таблицы из 1 и 2 запроса и получить номер картинки для заполнения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)По номеру картинки сортировка планируется?
Если нет, можно сделать расширение. В расширении:
1) в при создании на сервере изменить текст запроса чтобы номер картинки был константой, например всегда -1:
-1 как НомерКартинки
2) в событии ПриПолученииДанныхНаСервере для динамического списка заполнять номер картинки для строк в данной порции данных.
Если нет, можно сделать расширение. В расширении:
1) в при создании на сервере изменить текст запроса чтобы номер картинки был константой, например всегда -1:
-1 как НомерКартинки
2) в событии ПриПолученииДанныхНаСервере для динамического списка заполнять номер картинки для строк в данной порции данных.
(4)понял, спасибо.
Реализую пока этот вариант но хотел бы узнать есть ли еще какие варианты потому что отображать неправильные а потом заменить их верными возможно будет не тепло принят пользователями.
Если есть какой-нибудь еще вариант решения проблемы то подкиньте идей пожалуйста.
Реализую пока этот вариант но хотел бы узнать есть ли еще какие варианты потому что отображать неправильные а потом заменить их верными возможно будет не тепло принят пользователями.
Если есть какой-нибудь еще вариант решения проблемы то подкиньте идей пожалуйста.
(6)Отображаться будут правильные данные.
Суть в том, что в запросе делать отбор только по тем документам, которые есть в порции данных.
Это ускорит работу запроса.
То есть предложение такое:
1 запрос - выбрать документы по ссылке, которые есть в порции данных, поместить во временную таблицу.
2 запрос - выбрать из регистра данные для номера картинки с отбором по ЗаказНаПроизводство в условиях виртуальной таблицы в списке документов из порции данных, поместить во временную таблицу
3 запрос - соединить таблицы из 1 и 2 запроса и получить номер картинки для заполнения
Суть в том, что в запросе делать отбор только по тем документам, которые есть в порции данных.
Это ускорит работу запроса.
То есть предложение такое:
1 запрос - выбрать документы по ссылке, которые есть в порции данных, поместить во временную таблицу.
2 запрос - выбрать из регистра данные для номера картинки с отбором по ЗаказНаПроизводство в условиях виртуальной таблицы в списке документов из порции данных, поместить во временную таблицу
3 запрос - соединить таблицы из 1 и 2 запроса и получить номер картинки для заполнения
(9)Потестил, Открывается за 1-2 сек.
Ночью перенесу в актуал и гляну на более нагруженной базе( у меня не самая свежая).
Не ожидал такого результата. Видел подобное на wonderland но не понял отличия от галочки динамического считывания в ДС и подумал что не поможет.
Если не затруднит можете объяснить в чем отличия от галочки "динамическое считывание данных"? Ведь там тоже по идее порционно берется.
Оставлю пример кода для решения. Возможно кому-нибудь пригодится.
Ночью перенесу в актуал и гляну на более нагруженной базе( у меня не самая свежая).
Не ожидал такого результата. Видел подобное на wonderland но не понял отличия от галочки динамического считывания в ДС и подумал что не поможет.
Если не затруднит можете объяснить в чем отличия от галочки "динамическое считывание данных"? Ведь там тоже по идее порционно берется.
Оставлю пример кода для решения. Возможно кому-нибудь пригодится.
Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)
Запрос = новый Запрос(
"ВЫБРАТЬ
| ЗаказНаПроизводство.Ссылка КАК Ссылка,
| ЗаказНаПроизводство.Проведен КАК Проведен,
| ЗаказНаПроизводство.ВариантЗавершения КАК ВариантЗавершения,
| ЗаказНаПроизводство.СостояниеЗаказа КАК СостояниеЗаказа,
| ЗаказНаПроизводство.Финиш КАК Финиш,
| ЗаказНаПроизводство.Старт КАК Старт
|ПОМЕСТИТЬ Вт_ЗНП
|ИЗ
| Документ.ЗаказНаПроизводство КАК ЗаказНаПроизводство
|ГДЕ
| ЗаказНаПроизводство.Ссылка В(&Ссылка)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВЫБОР
| КОГДА НЕ Вт_ЗНП.Проведен
| ИЛИ Вт_ЗНП.ВариантЗавершения = ЗНАЧЕНИЕ(Перечисление.ВариантыЗавершенияЗаказа.Отменен)
| ТОГДА -1
| КОГДА ЕСТЬNULL(ЗаказыНаПроизводствоОстаткиИОбороты.КоличествоРасход, 0) = 0
| ТОГДА ВЫБОР
| КОГДА Вт_ЗНП.СостояниеЗаказа = ЗНАЧЕНИЕ(Справочник.СостоянияЗаказовНаПроизводство.Завершен)
| ТОГДА 2
| КОГДА Вт_ЗНП.Финиш < &АктуальнаяДатаСеанса
| ТОГДА 6
| КОГДА Вт_ЗНП.Старт <= КОНЕЦПЕРИОДА(&АктуальнаяДатаСеанса, ДЕНЬ)
| И Вт_ЗНП.Финиш >= &АктуальнаяДатаСеанса
| ТОГДА 4
| ИНАЧЕ 2
| КОНЕЦ
| КОГДА ЕСТЬNULL(ЗаказыНаПроизводствоОстаткиИОбороты.КоличествоКонечныйОстаток, 0) = 0
| ТОГДА 0
| ИНАЧЕ ВЫБОР
| КОГДА Вт_ЗНП.СостояниеЗаказа = ЗНАЧЕНИЕ(Справочник.СостоянияЗаказовНаПроизводство.Завершен)
| ТОГДА 1
| КОГДА Вт_ЗНП.Финиш < &АктуальнаяДатаСеанса
| ТОГДА 5
| КОГДА Вт_ЗНП.Старт <= КОНЕЦПЕРИОДА(&АктуальнаяДатаСеанса, ДЕНЬ)
| И Вт_ЗНП.Финиш >= &АктуальнаяДатаСеанса
| ТОГДА 3
| ИНАЧЕ 1
| КОНЕЦ
| КОНЕЦ КАК НомерКартинки,
| Вт_ЗНП.Ссылка КАК Ссылка,
| ВЫБОР
| КОГДА Вт_ЗНП.Финиш < &АктуальнаяДатаСеанса
| И ЕСТЬNULL(ЗаказыНаПроизводствоОстаткиИОбороты.КоличествоКонечныйОстаток, 0) > 0
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ПросроченоВыполнение,
| ВЫБОР
| КОГДА Вт_ЗНП.Старт <= КОНЕЦПЕРИОДА(&АктуальнаяДатаСеанса, ДЕНЬ)
| И Вт_ЗНП.Финиш >= &АктуальнаяДатаСеанса
| И ЕСТЬNULL(ЗаказыНаПроизводствоОстаткиИОбороты.КоличествоКонечныйОстаток, 0) > 0
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК Поле1
|ИЗ
| Вт_ЗНП КАК Вт_ЗНП
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыНаПроизводство.ОстаткиИОбороты КАК ЗаказыНаПроизводствоОстаткиИОбороты
| ПО Вт_ЗНП.Ссылка = ЗаказыНаПроизводствоОстаткиИОбороты.ЗаказНаПроизводство");
Запрос.УстановитьПараметр("Ссылка", Строки.ПолучитьКлючи());
Запрос.УстановитьПараметр("АктуальнаяДатаСеанса", ТекущаяДатаСеанса());
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СтрокаСписка = Строки[Выборка.Ссылка];
СтрокаСписка.Данные["НомерКартинки"]= Выборка.НомерКартинки;
КонецЦикла;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот