Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Вопрос по механике работы динамического списка

Вопрос по механике работы динамического списка
Я
   ssalikoff
 
31.12.20 - 07:14
Имеется динамический список, в настройках которого указана основная таблица  и вид ключа Авто.
Модифицирую запрос, делаю левое соединение к основной таблице. В присоединяемой таблице гарантированно  содержатся уникальные значения для поля, по которому выполняется соединение, соответственно, не должно быть дублей и после соединения.
И их действительно нет (вижу в консоли запросов).
Однако, при открытии формы, содержащей динамический список, получаю сообщение «обнаружено дублирование ключевых значений в колонках Документ ...»

Да, теоретически дубли возможны, но их точно нет в результате запроса.
Случайно нашёл обходной путь: присоединяемую таблицу обернул во вложенный запрос, и уже вложенный запрос соединяю с основной таблицей.
Теперь всё работает как надо.

Вопрос: почему? Что за хрень? В обоих случаях запрос возвращает одно  и то же, однако без обёртки во вложенный запрос форма с ДС не работает.
Может ли кто-нибудь объяснить механизм работы ДС?
   Cyberhawk
 
1 - 31.12.20 - 09:15
"В обоих случаях запрос возвращает одно  и то же" // Смотри фактический запрос через ТЖ
   TormozIT
 
2 - 31.12.20 - 10:26
выполни на сервере в точке останова ирОбщий.ОтЛкс(ТаблицаФормыСДинамическимСписом) - получишь снимок реальной схемы и настройки компоновки. Потом на клиенте сможешь их открыть в консоли компоновки данных (ИР).
   vde69
 
3 - 31.12.20 - 10:29
такая хрень точно будет если ключевые поля имеют составной тип
   ssalikoff
 
4 - 31.12.20 - 10:43
(3) Да, ключевые поля действительно имеют составной тип.
А почему именно так будет?
   ssalikoff
 
5 - 31.12.20 - 11:34
(2) Скачал и установил ИР, в конце серверной процедуры ПриСозданииНаСервере «поймал» для отладки таблицу формы, открыл в консоли компоновки. В консоли всё выполняется, макет заполняется, всё как надо. Но на форме всё та же ошибка "обнаружено дублирование ключевых значений..."  Как ещё можно использовать консоль компоновки для поиска причины поведения системы?
   Вафель
 
6 - 31.12.20 - 13:24
но их точно нет в результате запроса - вот тут не правда
   Вафель
 
7 - 31.12.20 - 13:24
может параметры не те устаналиваешь
   vde69
 
8 - 31.12.20 - 13:29
(4) по тому, что любое условие по составному полю это дополнительный (которого ты не видишь) джойн к метаданным, и именно этот джойн после промежуточного выполнения дает дубли (еще до твоего основного джойна)

можно использовать явное приведение типов "выразить как", но это то же не хорошо.

Учитывая особенности кусочного чтения из базы в динамических списках самый правильный вариант это одно основная таблици и к ней джойним вложенные...
   acht
 
9 - 31.12.20 - 13:30
(5) ПриСозданииНаСервере - это слишком рано, динамический список еще и не думал применять твои изыски. Сделай кнопку, наступи на ошибку и смотри по нажатию, что у тебя там есть.
   ssalikoff
 
10 - 31.12.20 - 18:50
Спасибо всем откликнувшимся. Как это обычно бывает, косяк в моей невнимательности. Дело в том, что после использования конструктора запроса в настройке динамического списка, самопроизвольно меняется основная таблица. Я этого сразу не заметил, так что дело не в запросе вообще, а поведении конструктора запроса.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.