Зачастую разработчики сталкиваются с ситуацией, когда запрос, идеально отрабатывающий в Консоли запросов, возвращает пустые поля при выводе в Динамический список на управляемой форме. Это поведение может вызвать недоумение, так как синтаксис запроса верен, а данные физически присутствуют в базе. Давайте разберем, почему возникают такие расхождения и как планомерно найти причину проблемы.
Первое, что необходимо проанализировать — это права доступа. Даже если вы работаете под учетной записью с Полными правами, следует учитывать, что платформа может применять механизмы RLS (ограничение доступа на уровне записей) иначе в контексте динамических списков, чем при выполнении прямого запроса.
Регистры сведений, убедитесь, что роли пользователя разрешают доступ к данным в этих регистрах.Справочник или другой объект метаданных, проверьте, есть ли у роли права на чтение этого объекта. Недостаток прав на связанную таблицу часто приводит к тому, что ЛЕВОЕ СОЕДИНЕНИЕ возвращает NULL, так как платформа скрывает данные из-за ограничений безопасности.Нередкой причиной является банальная ошибка в настройке интерфейса. Проверьте Путь к данным у колонки, которая не заполняется:
Убедитесь, что в свойствах элемента Таблица, связанной с динамическим списком, у нужной колонки корректно указан ПутьКДанным. Он должен в точности соответствовать псевдониму поля в вашем запросе. Если вы изменили запрос, обязательно обновите состав колонок в форме.
Самый эффективный способ понять, что происходит с вашим запросом — это увидеть его глазами платформы. Динамический список внутри себя использует механизм СКД (Система компоновки данных), который может дополнять ваш исходный код условиями отбора, сортировками или специфическими настройками.
Чтобы выяснить, во что превращается ваш запрос, выполните следующие действия:
Консоль системы компоновки данных (отличную от обычной консоли запросов).В вашем запросе используется обращение к виртуальной таблице СрезПоследних:
ВЫБРАТЬ
РегистрСведенийИсторияХ.Склад КАК Склад,
РегистрСведенийИсторияХ.Номенклатура КАК Номенклатура,
СтатусыНоменклатурыСрезПоследних.Статус КАК Статус
ИЗ
РегистрСведений.ИсторияХ КАК РегистрСведенийИсторияХ
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыНоменклатуры.СрезПоследних(&ТекДата, ) КАК СтатусыНоменклатурыСрезПоследних
ПО ...
Рассмотрим подробнее важный нюанс: при работе с Динамическим списком параметр &ТекДата должен быть инициализирован. Если вы забыли передать его значение в свойство Параметры динамического списка в модуле формы (в событии ПриСозданииНаСервере), виртуальная таблица может вернуть пустой результат, так как параметр окажется неопределенным.
Чтобы окончательно решить проблему, пройдемся по чек-листу:
ДинамическийСписок.ТекстЗапроса. Убедитесь, что он выглядит именно так, как вы ожидаете.ЛЕВОЕ СОЕДИНЕНИЕ из запроса и добавлять их по одному. Это позволит локализовать таблицу, которая «съедает» данные.Функциональные опции. Если ФО выключена, поля могут не возвращать данные.Следуя этим рекомендациям, вы сможете выявить причину несоответствия данных и настроить корректную работу динамического списка.