Разберем классическую ситуацию, с которой сталкиваются многие разработчики при настройке интерфейсов в 1С. Допустим, мы установили условное оформление в динамическом списке, чтобы скрыть определенные строки (например, неактуальные документы или элементы справочника, не подходящие под определенные условия). Для этого мы добавили условие и сняли флажок Видимость для всей строки.
На первый взгляд, задача решена: визуально строки исчезли. Однако при работе со списком пользователи начинают замечать странности:
Проанализируем эту ситуацию: это программная ошибка платформы (баг) или архитектурная особенность (фича)?
Поведение, описанное выше — это закономерное следствие использования механизма не по назначению. Платформа 1С:Предприятие 8.3 функционирует строго в рамках заложенной архитектуры. Официальная система стандартов и методик разработки конфигураций 1С прямо указывает: не следует использовать условное оформление для скрытия строк целиком.
Выясним причину такого поведения, разобрав разницу между двумя ключевыми механизмами: условным оформлением и отбором.
1. Как работает Условное оформление:
Механизм условного оформления работает исключительно на уровне представления — то есть при отрисовке интерфейса на клиентской стороне. Когда вы снимаете галку Видимость для строки через условное оформление, платформа просто перестает выводить визуальное содержимое ячеек.
Однако сама запись (объект данных) никуда не исчезает из коллекции динамического списка. Сервер всё равно прочитал эту строку из базы данных, передал ее на клиент, и она занимает свое место в таблице. Именно поэтому строка визуально схлопывается или становится «пустой», но на нее по-прежнему можно перейти клавишами навигации и открыть ее двойным кликом.
2. Как работает Отбор:
Отбор функционирует на уровне Системы компоновки данных (СКД) и базы данных. Он накладывает условия на саму выборку (запрос SQL). Если строка не проходит по условиям отбора, она физически не возвращается сервером на клиент. Она вообще не попадает в коллекцию динамического списка, не занимает память и не участвует в навигации.
Запомним важное правило: для удаления (исключения) строк из списка всегда нужно использовать Отбор.
Рассмотрим по шагам, как правильно настроить скрытие строк. Если нужно программно исключить элементы, используйте следующий подход:
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПометкаУдаления");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Ложь;
ЭлементОтбора.Использование = Истина;
Используя этот метод, мы отсекаем данные еще до их попадания в интерфейс. Список будет работать быстро (особенно это критично для веб-клиента), а пользователи не столкнутся с фантомными прозрачными строками.
Если для скрытия строк нужен отбор, то зачем в условном оформлении вообще присутствует свойство Видимость?
Посмотрим на назначение этого свойства. Оно задумано для точечного управления отдельными ячейками, а не строками целиком. Например, в зависимости от условия, в определенной колонке можно скрыть картинку статуса, кнопку выполнения действия или текст, чтобы показать пользователю, что для данной конкретной ячейки действие недоступно.
Также важно различать два похожих свойства в настройках оформления:
Проанализировав ситуацию, мы можем сделать однозначный вывод: появление пустых активных строк — это архитектурная «фича» платформы, проявляющаяся при нарушении стандартов разработки.
Чтобы ваш интерфейс работал корректно и без тормозов, всегда придерживайтесь следующих принципов:
Отбор.УсловноеОформление.Разделение логики выборки данных и логики их визуального представления — залог стабильной и предсказуемой работы конфигураций на платформе 1С:Предприятие.