Почему в динамическом списке 1С появляются скрытые или «прозрачные» строки и как правильно их фильтровать?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Суть проблемы: пустые строки и странное поведение навигации

Разберем классическую ситуацию, с которой сталкиваются многие разработчики при настройке интерфейсов в 1С. Допустим, мы установили условное оформление в динамическом списке, чтобы скрыть определенные строки (например, неактуальные документы или элементы справочника, не подходящие под определенные условия). Для этого мы добавили условие и сняли флажок Видимость для всей строки.

На первый взгляд, задача решена: визуально строки исчезли. Однако при работе со списком пользователи начинают замечать странности:

  1. При нажатии клавиши END (переход в конец списка) текущая строка визуально не отображается, мы видим просто пустую область.
  2. Если нажать ENTER на этой «пустой» области, внезапно открывается форма элемента, который мы пытались скрыть.
  3. В некоторых случаях при скроллинге или обновлении данных появляются совершенно «прозрачные» строки — рамки могут присутствовать, но содержимое ячеек отсутствует. Данные при этом там есть, строка позиционируется, но визуально выглядит как баг интерфейса.

Проанализируем эту ситуацию: это программная ошибка платформы (баг) или архитектурная особенность (фича)?

Баг или фича? Архитектура платформы 1С

Поведение, описанное выше — это закономерное следствие использования механизма не по назначению. Платформа 1С:Предприятие 8.3 функционирует строго в рамках заложенной архитектуры. Официальная система стандартов и методик разработки конфигураций 1С прямо указывает: не следует использовать условное оформление для скрытия строк целиком.

Выясним причину такого поведения, разобрав разницу между двумя ключевыми механизмами: условным оформлением и отбором.

1. Как работает Условное оформление:

Механизм условного оформления работает исключительно на уровне представления — то есть при отрисовке интерфейса на клиентской стороне. Когда вы снимаете галку Видимость для строки через условное оформление, платформа просто перестает выводить визуальное содержимое ячеек.

Однако сама запись (объект данных) никуда не исчезает из коллекции динамического списка. Сервер всё равно прочитал эту строку из базы данных, передал ее на клиент, и она занимает свое место в таблице. Именно поэтому строка визуально схлопывается или становится «пустой», но на нее по-прежнему можно перейти клавишами навигации и открыть ее двойным кликом.

2. Как работает Отбор:

Отбор функционирует на уровне Системы компоновки данных (СКД) и базы данных. Он накладывает условия на саму выборку (запрос SQL). Если строка не проходит по условиям отбора, она физически не возвращается сервером на клиент. Она вообще не попадает в коллекцию динамического списка, не занимает память и не участвует в навигации.

Как правильно скрывать строки в списке

Запомним важное правило: для удаления (исключения) строк из списка всегда нужно использовать Отбор.

Рассмотрим по шагам, как правильно настроить скрытие строк. Если нужно программно исключить элементы, используйте следующий подход:


ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПометкаУдаления");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Ложь;
ЭлементОтбора.Использование = Истина;

Используя этот метод, мы отсекаем данные еще до их попадания в интерфейс. Список будет работать быстро (особенно это критично для веб-клиента), а пользователи не столкнутся с фантомными прозрачными строками.

Для чего нужна "Видимость" в условном оформлении?

Если для скрытия строк нужен отбор, то зачем в условном оформлении вообще присутствует свойство Видимость?

Посмотрим на назначение этого свойства. Оно задумано для точечного управления отдельными ячейками, а не строками целиком. Например, в зависимости от условия, в определенной колонке можно скрыть картинку статуса, кнопку выполнения действия или текст, чтобы показать пользователю, что для данной конкретной ячейки действие недоступно.

Также важно различать два похожих свойства в настройках оформления:

  1. Видимость — полностью убирает элемент из интерфейса в конкретной ячейке. Если отключить ее для всей строки, строка потеряет содержимое, но останется как физический элемент управления (те самые «прозрачные» строки).
  2. Отображать — отключает вывод текста или значения, но оставляет саму ячейку и ее форматирование (рамки, отступы) неизменными.

Подводим итоги

Проанализировав ситуацию, мы можем сделать однозначный вывод: появление пустых активных строк — это архитектурная «фича» платформы, проявляющаяся при нарушении стандартов разработки.

Чтобы ваш интерфейс работал корректно и без тормозов, всегда придерживайтесь следующих принципов:

  1. Если нужно исключить данные из таблицы, чтобы пользователь их не видел и не мог выбрать — используйте Отбор.
  2. Если нужно выделить данные цветом, изменить шрифт, фон или скрыть значение в отдельной колонке (например, скрыть ИНН для элементов, являющихся группами) — используйте УсловноеОформление.

Разделение логики выборки данных и логики их визуального представления — залог стабильной и предсказуемой работы конфигураций на платформе 1С:Предприятие.

← На главную