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

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

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

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

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