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