Братья и сестры.
Динамический список генерит запрос такого вида:
Вопрос: где и как надо подкрутить, что бы исправить эту дичь :(
PS обращаю внимание, что DDL таблички имеет такой вид, те все isnull должны идти "лесом", поскольку null-a там не может быть по определению :)
Динамический список генерит запрос такого вида:
SEL ECT TOP 25
T1._IDRRef,
T1._Marked,
T1._Date_Time,
T1._Posted,
T1._Fld276RRef,
T1._Fld277RRef,
T1._Fld279RRef,
T1._Fld280,
T1._Fld283RRef,
T1._Fld316RRef,
T1._Fld347,
ISNULL(T2._Date_Time,{ts '2001-01-01 00:00:00'}),
T1._IDRRef
FR OM dbo._Document272 T1
LEFT OUTER JOIN dbo._Document272 T2
ON T1._IDRRef = T2._IDRRef
WHERE (ISNULL(T2._Date_Time,@P1) < @P2) OR (ISNULL(T2._Date_Time,@P3) = @P4) AND (T1._IDRRef < @P5)
ORDER BY (ISNULL(T2._Date_Time,{ts '2001-01-01 00:00:00'})) DESC, (T1._IDRRef) DESC
ПоказатьВопрос: где и как надо подкрутить, что бы исправить эту дичь :(
PS обращаю внимание, что DDL таблички имеет такой вид, те все isnull должны идти "лесом", поскольку null-a там не может быть по определению :)
CRE ATE TABLE [dbo].[_Document272](
...
[_Date_Time] [datetime2](0) NOT NULL,
...
По теме из базы знаний
- Динамический список и поиск... неприятностей
- Как передать Таблицу Значений в Динамический Список?
- Динамический список из таблицы значений
- Прокачай список. Как добавить дополнительную информацию в динамический список с помощью расширения!
- Программное добавление колонки в динамический список с помощью объекта "Схема запроса"
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Это также можно сделать через вкладку "Компоновка данных" конструктора запроса.
где и как надо подкрутить, что бы исправить эту дичь
В тексте запроса динамического списка можно добавить {ВЫБРАТЬ Ссылка} в секцию ВЫБРАТЬ и {ГДЕ Ссылка} в секцию ГДЕ, чтобы исключить использование дочерних реквизитов поля Ссылка в отборах, быстром поиске и в пользовательских колонках, добавленных через "Изменить форму".
Это также можно сделать через вкладку "Компоновка данных" конструктора запроса.
(12)
Конечно, если накосячил прикладник, то буду его пинать, если это фича вендора, то надо искать пути обхода косяка.
(12)
Я задал вопрос по поведению 1С, возможно кто-тот уже сталкивался с таким поведением.
Но не суть.
Продолжим.
Итак, упростил запрос в Динамическом списке до такого вида
В итоге, для ПЕРВОГО открытия формы профайлер ловит следующий код
Вижу, прям красота, избавились where для алиаса T2 и имеем почти САРГ предикат :)
Начинаю скролить список, получаю такую же дичь, как в первоначальном посте
Вопрос: как заставить при скроле Списка использовать запрос определенный в ДинамическийСписок ->НастройкаЗапроса (тот который T1._IDRRef IS NOT NULL))
Это повлияет на результат - будете вы это исправлять или нет?
Конечно, если накосячил прикладник, то буду его пинать, если это фича вендора, то надо искать пути обхода косяка.
(12)
Или нам просто предлагается угадать историю разработки неизвестного объекта неизвестной базы?
Я задал вопрос по поведению 1С, возможно кто-тот уже сталкивался с таким поведением.
Но не суть.
Продолжим.
Итак, упростил запрос в Динамическом списке до такого вида
ВЫБРАТЬ
1 + 1 КАК Поле1
ИЗ
Документ.Документ1 КАК Документ1
ГДЕ
Документ1.Ссылка ЕСТЬ НЕ NULL
В итоге, для ПЕРВОГО открытия формы профайлер ловит следующий код
SEL ECT TOP 45
@P1,
T1._Marked,
T1._Posted,
T1._Date_Time,
T1._IDRRef,
ISNULL(T2._Date_Time,{ts ''2001-01-01 00:00:00''}),
T1._IDRRef
FR OM dbo._Document272 T1
LEFT OUTER JOIN dbo._Document272 T2
ON T1._IDRRef = T2._IDRRef
WHERE (T1._IDRRef IS NOT NULL)
ORDER BY (ISNULL(T2._Date_Time,{ts ''2001-01-01 00:00:00''})) DESC, (T1._IDRRef) DESC
ПоказатьВижу, прям красота, избавились where для алиаса T2 и имеем почти САРГ предикат :)
WHERE (T1._IDRRef IS NOT NULL)
Начинаю скролить список, получаю такую же дичь, как в первоначальном посте
SELECT TOP 25
@P1,
T1._Marked,
T1._Posted,
T1._Date_Time,
T1._IDRRef,
ISNULL(T2._Date_Time,{ts ''2001-01-01 00:00:00''}),
T1._IDRRef
FR OM dbo._Document272 T1
LEFT OUTER JOIN dbo._Document272 T2
ON T1._IDRRef = T2._IDRRef
WH ERE ((ISNULL(T2._Date_Time,@P2) < @P3) OR (ISNULL(T2._Date_Time,@P4) = @P5) AND (T1._IDRRef < @P6))
ORDER BY (ISNULL(T2._Date_Time,{ts ''2001-01-01 00:00:00''})) DESC, (T1._IDRRef) DESC
ПоказатьВопрос: как заставить при скроле Списка использовать запрос определенный в ДинамическийСписок ->НастройкаЗапроса (тот который T1._IDRRef IS NOT NULL))
(23)
В режиме пользователя, вот такое чудо (см картинку), в сортировке стоит Ссылка, именно эта Ссылка заставляет делать left join таблицы саму на себя со всеми вытекающими ISNULL().
Если убрать Ссылку из сортировки, то движок 1С приходит в адекватное состояние :)
Спасибо друзья за помощь!!!!
PS нет цензурных слов :) одни междометия :)
В режиме пользователя. В настройке динамического списка точно нет отбора или сортировки по дате через поле ссылка?
В режиме пользователя, вот такое чудо (см картинку), в сортировке стоит Ссылка, именно эта Ссылка заставляет делать left join таблицы саму на себя со всеми вытекающими ISNULL().
Если убрать Ссылку из сортировки, то движок 1С приходит в адекватное состояние :)
Спасибо друзья за помощь!!!!
PS нет цензурных слов :) одни междометия :)
Прикрепленные файлы:
(13)
Компоновщик выбрасывает твой запрос и строит новый исходя из текущих настроек динамического списка и состояния скролла.
Добавь на форму кнопку и посмотри на результат:
Там же заодно можно и значения параметров компоновки посмотреть.
Вопрос
Ответ: никак.
Компоновщик выбрасывает твой запрос и строит новый исходя из текущих настроек динамического списка и состояния скролла.
Добавь на форму кнопку и посмотри на результат:
Компоновщик = Новый КомпоновщикМакетаКомпоновкиДанных;
Схема = Элементы.Список.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
Настройки = Элементы.СписокПолучитьИсполняемыеНастройкиКомпоновкиДанных();
Макет = Компоновщик.Выполнить(Схема, Настройки);
ТекстЗапроса = Макет.НаборыДанных[0].Запрос;
Спасибо за направление :)
(14)
Ммм, ТекстЗапроса не меняется, те как был определён в Динамическом списке, такой остаётся, независимо от того форма открывается первый раз (когда ТекстЗапроса и сам запрос в СУБД совпадают ) или скролить уже полученные данные (когда текст запроса и запрос в СУБД не совпадают).
(14)
На это как поглазеть??
Куда бы ещё посмотреть??
(15)
Нет журнала, вообще в конфигурации нет журналов.
(14)
Добавь на форму кнопку и посмотри на результат:
Ммм, ТекстЗапроса не меняется, те как был определён в Динамическом списке, такой остаётся, независимо от того форма открывается первый раз (когда ТекстЗапроса и сам запрос в СУБД совпадают ) или скролить уже полученные данные (когда текст запроса и запрос в СУБД не совпадают).
ВЫБРАТЬ РАЗРЕШЕННЫЕ
1 + 1 КАК Поле1,
Документ1.Ссылка КАК Ссылка,
.......
ПРЕДСТАВЛЕНИЕССЫЛКИ(Документ1.Организация) КАК ОрганизацияПредставление,
......
ИЗ
Документ.Документ1 КАК Документ1
ГДЕ
Документ1.Ссылка ЕСТЬ НЕ NULL
Показать(14)
Там же заодно можно и значения параметров компоновки посмотреть.
На это как поглазеть??
Куда бы ещё посмотреть??
(15)
И весьма похоже, что это у тебя не просто динамический список, а журнал документов,
Нет журнала, вообще в конфигурации нет журналов.
Вроде бы в (4) верно определили проблему – выведена пользовательская колонка из ссылки "Дата" и по ней сделана сортировка. Чего переливаете из пустого в порожнее не понятно. Решается настройкой ограничения полей.
И зачем Документ1.Ссылка ЕСТЬ НЕ NULL , если основная таблица Документ.Документ1?
И зачем Документ1.Ссылка ЕСТЬ НЕ NULL , если основная таблица Документ.Документ1?
(17)
В (13) запрос был упрощён до безобразия, повторю:
то есть " пользовательская колонка из ссылки "Дата" вообще в запросе нет.
(17)
"Разжуйте" что надо сделать, как ограничить поля??
(17)
При скроле списка на сервер отправляется предикат а-ля
Документ1.Ссылка ЕСТЬ НЕ NULL - это была попытка сказать платформе 1C, что бы не использовала ISNULL в секции where, но тщетно :)
Вроде бы в (4) верно определили проблему – выведена пользовательская колонка из ссылки "Дата" и по ней сделана сортировка.
В (13) запрос был упрощён до безобразия, повторю:
ВЫБРАТЬ
1 + 1 КАК Поле1
ИЗ
Документ.Документ1 КАК Документ1
ГДЕ
Документ1.Ссылка ЕСТЬ НЕ NULL
то есть " пользовательская колонка из ссылки "Дата" вообще в запросе нет.
(17)
Решается настройкой ограничения полей.
"Разжуйте" что надо сделать, как ограничить поля??
(17)
И зачем Документ1.Ссылка ЕСТЬ НЕ NULL , если основная таблица Документ.Документ1?
При скроле списка на сервер отправляется предикат а-ля
WHERE (ISNULL(T2._Date_Time,@P1) < @P2) OR (ISNULL(T2._Date_Time,@P3) = @P4) AND (T1._IDRRef < @P5)
Документ1.Ссылка ЕСТЬ НЕ NULL - это была попытка сказать платформе 1C, что бы не использовала ISNULL в секции where, но тщетно :)
(19)
Те же яйца, только в профиль.
Вот что нарисовал конструктор запросов
Вот что рисует профайлер
Как я указал в (5):
Те же яйца, только в профиль.
Вот что нарисовал конструктор запросов
ВЫБРАТЬ
Документ1.Ссылка КАК Ссылка,
1 + 1 КАК Поле1
{ВЫБРАТЬ
Ссылка}
ИЗ
Документ.1 КАК Документ1
{ГДЕ
Документ1.Ссылка}
ПоказатьВот что рисует профайлер
Прикрепленные файлы:
(21)
Спасибо.
Что сделал:
1. Создал новый Документ, заполнил руками drag-drop туда объекты из кривого документа.
Результат отличный, запросы сформированы как нужно
Нет левого соединения и нет isnull
2. Создаю новый документ копированием из кривого, те правая педаль на документе -> Скопировать
ДинамическийСписок направляю (источник данных) на документ в котором косяки с where isnull... ииии косяки "пропадают", вот блин "приплыли" :).
Если всё так, как говорите, то у меня нет версий. Маловероятно, но возможно это происки R
Спасибо.
Что сделал:
1. Создал новый Документ, заполнил руками drag-drop туда объекты из кривого документа.
Результат отличный, запросы сформированы как нужно
SEL ECT TOP 30
T1._IDRRef,
T1._Marked,
T1._Number,
T1._Date_Time,
T1._Posted,
T1._Fld761RRef,
T1._Fld858
FR OM dbo._Document760 T1
WHERE T1._Date_Time = @P1 AND T1._IDRRef < @P2
ORDER BY (T1._Date_Time) DESC, (T1._IDRRef) DESC
ПоказатьНет левого соединения и нет isnull
2. Создаю новый документ копированием из кривого, те правая педаль на документе -> Скопировать
ДинамическийСписок направляю (источник данных) на документ в котором косяки с where isnull... ииии косяки "пропадают", вот блин "приплыли" :).
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот