При разработке интерфейсов в 1С, особенно для сложных объектов, таких как Бизнес-процессы или комплексные документы, часто возникает задача скрыть часть данных в табличной части. Это необходимо, чтобы не перегружать пользователя лишней информацией, оставить только актуальные на текущем этапе записи или разграничить права доступа к строкам. В этой статье мы подробно разберем, как эффективно управлять видимостью строк, какие инструменты предоставляет платформа 1С и с какими ограничениями можно столкнуться.
Самый быстрый и штатный способ скрыть строки в табличной части управляемой формы — это использование свойства элемента формы ОтборСтрок. Этот механизм позволяет задать фильтрацию данных без изменения самого объекта. Рассмотрим, как это реализовать программно.
Для установки отбора нам потребуется объект ФиксированнаяСтруктура. Проанализируем пример кода, который можно разместить в процедуре ПриОткрытии или в обработчике события, отвечающего за смену условий отображения:
// Пример установки отбора по реквизиту "Филиал"
Если Не ЭтоЦентральнаяБаза Тогда
НовыйОтбор = Новый ФиксированнаяСтруктура("Филиал", Объект.ТекущийФилиал);
Элементы.Товары.ОтборСтрок = НовыйОтбор;
КонецЕсли;
Разберем важные нюансы этого метода:
ФиксированнойСтруктуры можно реализовать отбор только по условию "Равно". Выражения типа "Больше", "В списке" или "Не равно" данный механизм, к сожалению, не поддерживает.ОтборСтрок скрывает данные только на экране. Если вы решите обойти табличную часть в коде (например, в цикле Для каждого Строка Из Объект.Товары), вы все равно увидите абсолютно все записи, включая скрытые.Если требования к фильтрации строк более сложные (например, нужно скрыть строки по условию "ИЛИ" или по вхождению в массив), стандартного свойства ОтборСтрок будет недостаточно. В таких случаях мы рекомендуем рассмотреть использование Динамического списка вместо стандартного вывода табличной части объекта.
Проанализируем ситуацию: на форме бизнес-процесса нам нужно отображать только те задачи или этапы, которые относятся к текущему пользователю или определенному статусу. Посмотрим на алгоритм настройки:
ДинамическийСписок.БизнесПроцесс.Согласование.Задачи).В тексте запроса мы можем прописать любые условия:
ВЫБРАТЬ
ТЧ.НомерСтроки,
ТЧ.Исполнитель,
ТЧ.Статус
ИЗ
БизнесПроцесс.Согласование.Задачи КАК ТЧ
ГДЕ
ТЧ.Ссылка = &Ссылка
И (ТЧ.Статус = ЗНАЧЕНИЕ(Перечисление.Статусы.Активен) ИЛИ ТЧ.ВажнаяОтметка = ИСТИНА)
Такой подход позволяет использовать сложные отборы, группировки и даже условное оформление на уровне настроек списка. Основной минус — редактирование данных в таком списке потребует написания дополнительного кода для записи изменений в реальную табличную часть объекта.
Рассмотрим еще один продвинутый метод, который часто применяется в сложных интерфейсах. Мы можем создать на форме реквизит с типом ТаблицаЗначений, который будет служить "буфером".
Выясним алгоритм работы этого механизма:
Объект.ТабЧасть в нашу программную таблицу значений.НайтиСтроки() или используем построитель запроса для фильтрации данных по любым правилам.ПередЗаписьюНаСервере) синхронизировать изменения из нашей "визуальной" таблицы обратно в реальную табличную часть объекта, учитывая скрытые ранее строки.Этот метод дает максимальную гибкость, но требует внимательности при написании кода синхронизации, чтобы не допустить дублирования или потери записей.
Многие начинающие разработчики пытаются найти в Условном оформлении свойство "Видимость" для строки. Разберем, почему это не сработает. В управляемых формах 1С условное оформление позволяет управлять цветом текста, фоном, шрифтом и доступностью, но не позволяет полностью удалить строку из визуального пространства.
Вы можете сделать текст невидимым (установив цвет текста равным цвету фона), но сама строка останется пустой полосой в списке, что выглядит непрофессионально и путает пользователя. Поэтому для полноценного скрытия используйте ОтборСтрок или Динамический список.
В исключительных случаях, когда нужно скрыть строки "здесь и сейчас" без создания дополнительных элементов, можно использовать временное удаление:
Объект.ВашаТЧ все строки, которые не должны быть видны.Внимание: Мы не рекомендуем этот метод для новичков, так как при любой ошибке в коде или аварийном завершении сеанса данные, которые были "скрыты" (фактически удалены из объекта в памяти), могут быть безвозвратно потеряны.
Для решения задачи скрытия строк в 1С:
ОтборСтрок, если условия простые (на равенство).Выбор метода зависит от сложности бизнес-логики и требований к производительности системы.