Скрытие колонки табличной части: свойство, код, расширение, права
Содержание
Чаще всего колонку «прячут» одним и тем же способом: открывают форму, снимают флажок у поля, и на этом всё. Для своей конфигурации это работает. Для типовой — нет: платформа не даст сохранить правку, пока объект стоит на поддержке. Выход есть, и не один. Какой выбрать, зависит от того, кто и когда должен колонку не видеть.
Коротко: колонка табличной части скрывается свойством Видимость у поля формы. Задать его можно в конструкторе формы, из кода, через условное оформление, через расширение конфигурации
или правом на реквизит в роли. Отчёты на СКД — отдельный случай, там колонки убирают из выбранных полей.
Сначала определите, что именно вы скрываете
От этого зависит инструмент. Здесь три разных вещи, и их часто путают.
| Что нужно | Чем решается | Кого касается |
|---|---|---|
| Убрать колонку из формы навсегда | Свойство Видимость в конструкторе | Всех пользователей |
| Показывать колонку по условию | Код или условное оформление | Зависит от условия |
| Убрать колонку у части пользователей | Права на реквизит в роли или проверка роли в коде | Выбранные роли |
| Убрать колонку из отчёта | Выбранные поля в настройках СКД | Отчёт целиком или вариант |
| Дать человеку решить самому | Пользовательская видимость + «Изменить форму» | Каждого лично |
Скрыть колонку и закрыть данные — не одно и то же. Если нужно, чтобы человек не получил цены или себестоимость вообще, одной видимости мало: значение остаётся в данных формы. Для этого есть права на реквизит (раздел про роли ниже).
Как скрыть колонку в табличной части через конструктор формы
Этот способ годится для собственных конфигураций и для тех, где вы уже сняли объект с поддержки.
- Откройте конфигуратор и найдите нужный объект в дереве конфигурации: документ или справочник.
- Раскройте ветку
Формыи откройте форму объекта двойным щелчком. - В верхней части конструктора найдите дерево элементов. Раскройте таблицу табличной части и выберите колонку.
- Откройте палитру свойств (
F4, если она закрыта) и снимите флажокВидимость. - Сохраните конфигурацию и запустите 1С:Предприятие в режиме отладки, проверьте форму.
В палитре есть ещё два соседних свойства, которые легко принять за видимость:
Доступность— колонка видна, но не активна, значение не меняется;Только просмотр— значение видно, но править нельзя.
Если нужно оставить колонку на экране, но защитить от правок, берите их, а не видимость.
Если форма принадлежит типовой конфигурации (Бухгалтерия предприятия, ЗУП, Управление торговлей), сначала откройте Конфигурация → Поддержка → Настройка поддержки и включите возможность изменения для нужного объекта. После этого вы получите конфигурацию «на поддержке с изменениями»: каждое обновление придётся сливать вручную. Часто выгоднее расширение, о нём ниже.
Пользовательская видимость: пусть решает сам пользователь
У поля есть свойство Пользовательская видимость. Если оно включено, любой пользователь в режиме 1С:Предприятия открывает меню Ещё → Изменить форму… и сам снимает флажок у ненужной колонки. Настройка запоминается для него лично и не затрагивает остальных.
Это самый безопасный вариант для колонок вроде «Номер строки» или «Артикул», которые одним мешают, а другим нужны. В типовых формах свойство у многих полей уже включено, так что проверьте сначала, не хватает ли вам этой возможности: сам пользователь справится без разработчика.
Динамическое управление видимостью колонки из кода
Нужно, чтобы колонка появлялась только при определённом виде операции или значении флажка? Тогда видимость переключают программно. Обращение идёт через коллекцию Элементы: сначала таблица, затем её подчинённые элементы.
Имя колонки обычно составное: имя таблицы формы плюс имя реквизита. У таблицы Товары и колонки Цена получится ТоварыЦена. Точное имя посмотрите в дереве элементов формы, оно могло быть изменено.
&НаСервере
Процедура УстановитьВидимостьКолонки()
Элементы.Товары.ПодчиненныеЭлементы.ТоварыЦена.Видимость = Объект.УчитыватьЦены;
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьВидимостьКолонки();
КонецПроцедуры
&НаКлиенте
Процедура УчитыватьЦеныПриИзменении(Элемент)
Элементы.Товары.ПодчиненныеЭлементы.ТоварыЦена.Видимость = Объект.УчитыватьЦены;
КонецПроцедуры
Здесь УчитыватьЦены — условный булев реквизит объекта. Подставьте своё условие: сравнение вида операции, проверку заполненности, значение функциональной опции.
Что важно в этом коде:
- 🔹 Первичную установку делайте в
ПриСозданииНаСервере, а не вПриОткрытии. Иначе пользователь на долю секунды увидит колонку, и она «моргнёт». - 🔹 Повторную установку вешайте на событие изменения того реквизита, от которого зависит видимость.
- 🔹 Если форма читается заново (
ПриЧтенииНаСервере), условие стоит применить и там: данные могли поменяться. - 🔹 Свойство
Видимостьможно менять и на клиенте, и на сервере. На клиенте это дешевле, потому что нет серверного вызова.
Скрыть колонку только для определённой роли
Если колонка должна пропадать у бухгалтеров, но оставаться у руководителя, проверьте роль при создании формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Не РольДоступна("ПросмотрСебестоимости") Тогда
Элементы.Товары.ПодчиненныеЭлементы.ТоварыСебестоимость.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
Роль ПросмотрСебестоимости здесь условная: используйте имя своей роли из конфигурации. Недостаток способа в том, что значения всё равно лежат в данных формы. Для надёжной защиты читайте следующий раздел.
Условное оформление вместо кода
Тот же эффект даёт условное оформление формы. В конструкторе откройте вкладку Условное оформление и добавьте элемент: в оформляемых полях укажите колонку, в условии — отбор по реквизиту, а в оформлении задайте параметр Видимость. Плюс в том, что условие читается глазами в одном месте, а не разбросано по обработчикам. Минус — сложные условия с несколькими зависимостями в таком виде тяжело отлаживать, и тогда код выигрывает.
Права на реквизит: как скрыть колонку по-настоящему
Видимость на форме — косметика. Если у колонки есть чувствительные данные, управляйте правом на реквизит табличной части.
- В конфигураторе откройте роль, затем вкладку с правами на объекты.
- Найдите документ или справочник, раскройте его табличные части и нужный реквизит.
- Для реквизита снимите право
Просмотру роли, которой колонка не нужна.
Если у пользователя нет права просмотра реквизита, платформа не показывает поле на форме, и значение ему не отдаётся. Править форму при этом не нужно.
Не путайте это с ограничением доступа к данным на уровне записей. Это механизм про строки: он отбирает, какие документы и элементы справочника пользователь вообще видит. Колонку он не убирает. Право на реквизит и ограничение по записям — два разных инструмента, и для скрытия колонки нужен именно первый.
Расширения конфигурации: меняем форму, не трогая типовую
Если вы работаете на типовой конфигурации и хотите получать обновления без ручного слияния, используйте расширение. Расширения появились в платформе 8.3.6, так что на современных версиях они доступны везде.
Порядок такой:
- В конфигураторе откройте
Конфигурация → Расширения конфигурациии создайте новое расширение. - Добавьте в расширение нужный объект, а затем заимствуйте его форму: расширение получит копию формы, ссылающуюся на оригинал.
- Откройте заимствованную форму и снимите
Видимостьу нужной колонки в палитре свойств. Либо добавьте обработчик в модуль формы расширения. - Примените расширение к базе и перезапустите сеанс 1С:Предприятия.
Для условного скрытия в модуле формы расширения используют перехват с аннотацией &После:
&НаСервере
&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Элементы.Товары.ПодчиненныеЭлементы.ТоварыЦена.Видимость = Ложь;
КонецПроцедуры
Имя процедуры в расширении должно начинаться с префикса расширения (здесь Расш1_), он задаётся при создании.
Загрузка файла .cfe и обновление структуры базы — отдельные шаги. Если расширение подключено, а колонка на месте, проверьте, что изменения применены, а в расширении отмечена галочка Активно.
⚠️ Расширение применяется ко всем пользователям базы. Если колонка нужна части людей, закладывайте условие в код расширения, а не просто снимайте видимость.
Колонки в отчётах на СКД: другой механизм
Отчёт на системе компоновки данных не имеет формы с колонками в привычном смысле. Колонка отчёта — это выбранное поле, и скрывается она иначе.
В конфигураторе откройте схему компоновки отчёта, перейдите на вкладку Настройки, затем на Выбранные поля. У поля, которое не должно выводиться, снимите флажок. Поле останется доступным для отбора и группировки, но в результат не попадёт.
Пользователь может сделать то же без разработчика: в открытом отчёте нажать Настройки…, перейти к выбранным полям и снять флажок у лишней колонки. Затем сохранить такой вариант отчёта, чтобы не настраивать его каждый раз.
Программно это выглядит так:
Для Каждого ЭлементВыбора Из КомпоновщикНастроек.Настройки.Выбор.Элементы Цикл
Если ТипЗнч(ЭлементВыбора) = Тип("ВыбранноеПолеКомпоновкиДанных")
И ЭлементВыбора.Поле = Новый ПолеКомпоновкиДанных("Себестоимость") Тогда
ЭлементВыбора.Использование = Ложь;
КонецЕсли;
КонецЦикла;
Здесь поле Себестоимость взято для примера. Таблица на форме и отчёт на СКД спутаны чаще всего: пользователь просит «убрать колонку» в отчёте, а разработчик ищет её в дереве элементов формы и не находит.
Какой способ выбрать
Один и тот же результат на экране достигается по-разному, а цена поддержки у способов разная. Прикиньте свой случай.
Видимость в конструкторе формы. Это самый простой и самый дешёвый в поддержке вариант.Видимость в ПриСозданииНаСервере и в обработчике изменения реквизита-условия. Для простых случаев хватит условного оформления.Просмотр на реквизит табличной части. Видимость на форме здесь только дополнение.Пользовательская видимость и подскажите пользователю меню Ещё → Изменить форму…. Разработчик не нужен.Прежде чем править форму, проверьте две вещи. Первая: действительно ли колонка принадлежит форме документа, а не вынесена в отдельную обработку или в подчинённую форму выбора. Вторая: нет ли у колонки зависимых элементов, например итогов в подвале таблицы. Подвал привязан к полю, и при скрытии колонки итог под ней пропадает вместе с ней. Если сумма нужна, выведите её отдельным полем вне таблицы.
Типичные ошибки при скрытии колонки
Скрыли обязательное поле — и документ не записывается. Если у колонки включена проверка заполнения, а пользователь её не видит, платформа выдаст сообщение о незаполненном поле, но показать его будет нечего. Либо отключите проверку для этой колонки, либо заполните значение программно перед записью.
Колонка не пропала в режиме работы. Проверьте, что вы правили именно ту форму, которая открывается. У документа бывает несколько форм: основная, для списка, для выбора. Ещё одна причина — после правки не перезапустили сеанс.
Код не находит элемент. Ошибка «Поле объекта не обнаружено» почти всегда значит, что имя колонки составлено неверно. Откройте дерево элементов и скопируйте имя оттуда.
Скрытая колонка влияет на итоги. Видимость не меняет данные: суммы, ставки и проверки продолжают работать. Если нужно остановить расчёт, это уже логика модуля, а не вид формы.
Правка типовой формы сломала обновление. После снятия объекта с поддержки при обновлении появится окно сравнения с вашими изменениями. Чтобы его избежать, выносите такие правки в расширение.
Частые вопросы
Можно ли скрыть колонку табличной части без конфигуратора?
Ещё → Изменить форму… и снимите флажок у колонки. Настройка сохранится для вас лично.Чем отличается Видимость от Доступности?
Скрытая колонка продолжает заполняться?
Как вернуть колонку, которую скрыл пользователь?
Ещё → Изменить форму…: отметьте флажок у колонки. Если нужно сбросить все личные настройки формы, в этом же окне есть кнопка для возврата к стандартному виду.