Как скрыть определенные строки в табличной части на управляемой форме 1С?

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

При разработке интерфейсов в 1С, особенно для сложных объектов, таких как Бизнес-процессы или комплексные документы, часто возникает задача скрыть часть данных в табличной части. Это необходимо, чтобы не перегружать пользователя лишней информацией, оставить только актуальные на текущем этапе записи или разграничить права доступа к строкам. В этой статье мы подробно разберем, как эффективно управлять видимостью строк, какие инструменты предоставляет платформа 1С и с какими ограничениями можно столкнуться.

Метод 1: Использование свойства ОтборСтрок

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

Для установки отбора нам потребуется объект ФиксированнаяСтруктура. Проанализируем пример кода, который можно разместить в процедуре ПриОткрытии или в обработчике события, отвечающего за смену условий отображения:


// Пример установки отбора по реквизиту "Филиал"
Если Не ЭтоЦентральнаяБаза Тогда
    НовыйОтбор = Новый ФиксированнаяСтруктура("Филиал", Объект.ТекущийФилиал);
    Элементы.Товары.ОтборСтрок = НовыйОтбор;
КонецЕсли;

Разберем важные нюансы этого метода:

  1. Только равенство: С помощью ФиксированнойСтруктуры можно реализовать отбор только по условию "Равно". Выражения типа "Больше", "В списке" или "Не равно" данный механизм, к сожалению, не поддерживает.
  2. Логическое "И": Если вы добавите в структуру несколько полей, система будет скрывать строки, которые не соответствуют одновременно всем условиям.
  3. Визуальный характер: Важно понимать, что ОтборСтрок скрывает данные только на экране. Если вы решите обойти табличную часть в коде (например, в цикле Для каждого Строка Из Объект.Товары), вы все равно увидите абсолютно все записи, включая скрытые.

Метод 2: Динамический список как альтернатива табличной части

Если требования к фильтрации строк более сложные (например, нужно скрыть строки по условию "ИЛИ" или по вхождению в массив), стандартного свойства ОтборСтрок будет недостаточно. В таких случаях мы рекомендуем рассмотреть использование Динамического списка вместо стандартного вывода табличной части объекта.

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

  1. Добавим на форму реквизит с типом ДинамическийСписок.
  2. В качестве основного стола укажем таблицу части нашего объекта (например, БизнесПроцесс.Согласование.Задачи).
  3. Установим флаг Произвольный запрос. Это откроет нам всю мощь системы компоновки данных (СКД).

В тексте запроса мы можем прописать любые условия:


ВЫБРАТЬ
    ТЧ.НомерСтроки,
    ТЧ.Исполнитель,
    ТЧ.Статус
ИЗ
    БизнесПроцесс.Согласование.Задачи КАК ТЧ
ГДЕ
    ТЧ.Ссылка = &Ссылка
    И (ТЧ.Статус = ЗНАЧЕНИЕ(Перечисление.Статусы.Активен) ИЛИ ТЧ.ВажнаяОтметка = ИСТИНА)

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

Метод 3: Использование промежуточной Таблицы Значений

Рассмотрим еще один продвинутый метод, который часто применяется в сложных интерфейсах. Мы можем создать на форме реквизит с типом ТаблицаЗначений, который будет служить "буфером".

Выясним алгоритм работы этого механизма:

  1. При создании формы на сервере мы выгружаем данные из Объект.ТабЧасть в нашу программную таблицу значений.
  2. Применяем к этой таблице метод НайтиСтроки() или используем построитель запроса для фильтрации данных по любым правилам.
  3. Очищаем визуальную таблицу на форме и загружаем в нее только отфильтрованный результат.
  4. Критически важный момент: Чтобы данные не потерялись при сохранении объекта, нам необходимо перед записью (в обработчике ПередЗаписьюНаСервере) синхронизировать изменения из нашей "визуальной" таблицы обратно в реальную табличную часть объекта, учитывая скрытые ранее строки.

Этот метод дает максимальную гибкость, но требует внимательности при написании кода синхронизации, чтобы не допустить дублирования или потери записей.

Почему Условное оформление не подходит для скрытия?

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

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

Метод «Выгрузить/Загрузить» (Временное удаление)

В исключительных случаях, когда нужно скрыть строки "здесь и сейчас" без создания дополнительных элементов, можно использовать временное удаление:

  1. Перед отображением формы выгружаем ТЧ в массив или скрытую ТЗ.
  2. Удаляем из Объект.ВашаТЧ все строки, которые не должны быть видны.
  3. Перед записью объекта программно восстанавливаем строки из временного хранилища.

Внимание: Мы не рекомендуем этот метод для новичков, так как при любой ошибке в коде или аварийном завершении сеанса данные, которые были "скрыты" (фактически удалены из объекта в памяти), могут быть безвозвратно потеряны.

Резюме

Для решения задачи скрытия строк в 1С:

Выбор метода зависит от сложности бизнес-логики и требований к производительности системы.

← На главную