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