Как скрыть ячейки колонки, сохранив ее заголовок в табличной части 1С

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

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

Рассмотрим подробнее, как решить проблему, когда заголовок колонки (например, «Лимиты на производство») нам необходим для визуальной структуры, а сами пустые строки под ним — нет. Выясним причину, почему стандартная настройка «Видимость» в свойствах элемента не подходит, и разберем по шагам правильные способы программной маскировки этих ячеек.

Почему стандартное свойство «Видимость» не решает задачу?

Многие начинающие разработчики пытаются снять галочку Видимость в палитре свойств элемента формы для этой колонки. Проанализируем ситуацию: свойство Видимость для колонки табличного поля в 1С управляет отображением всего объекта целиком. Если мы установим это свойство в значение Ложь, исчезнет не только область данных (строки), но и сам заголовок. В результате соседние колонки сдвинутся влево, и вся задуманная группировка «развалится».

Для достижения нужного эффекта — когда «шапка» остается, а «тело» ячейки исчезает — необходимо управлять оформлением каждой конкретной строки в момент ее отрисовки на экране.

Способ 1: Использование события ПриВыводеСтроки (Основное решение)

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

Для начала нам нужно создать обработчик этого события. Разберем по шагам, как это сделать:

  1. Откроем форму в конфигураторе.
  2. Нажмем правой кнопкой мыши на табличную часть (табличное поле) и выберем пункт «Свойства».
  3. В открывшейся панели свойств прокрутим список вниз до раздела «События».
  4. Найдем строку ПриВыводеСтроки и нажмем на иконку с лупой, чтобы создать процедуру в модуле формы.

В созданной процедуре пропишем следующий код:


Процедура ТабличнаяЧасть1ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    
    // Скрываем отображение ячейки для конкретной колонки
    // Замените "ИмяКолонки" на реальное имя вашего элемента формы
    ОформлениеСтроки.Ячейки.ИмяКолонки.Видимость = Ложь;
    
КонецПроцедуры

Важное замечание: При использовании этого метода свойство Видимость = Ложь применяется не к колонке в целом, а к объекту Ячейка внутри конкретной строки. Это позволяет сохранить заголовок таблицы нетронутым, при этом область данных в этой колонке станет пустой и прозрачной.

Способ 2: Тонкая настройка через визуальные свойства ячейки

Иногда простое отключение видимости ячейки может привести к артефактам отрисовки (например, появлению белых пятен при выделении строки). В таких случаях мы можем использовать более «мягкий» подход, отключая только содержимое ячейки. Рассмотрим альтернативный вариант кода в том же событии ПриВыводеСтроки:


Процедура ТабличнаяЧасть1ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    
    ТекущаяЯчейка = ОформлениеСтроки.Ячейки.ЛимитыНаПроизводство;
    
    // Убираем все возможные элементы отображения
    ТекущаяЯчейка.ОтображатьТекст    = Ложь;
    ТекущаяЯчейка.ОтображатьФлажок   = Ложь;
    ТекущаяЯчейка.ОтображатьКартинку = Ложь;
    
    // Делаем ячейку недоступной для взаимодействия
    ТекущаяЯчейка.ТолькоПросмотр     = Истина;
    
КонецПроцедуры

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

Способ 3: Повышение производительности через ПриПолученииДанных

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


Процедура ТабличнаяЧасть1ПриПолученииДанных(Элемент, ОформленияСтрок)
    
    Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
        // Обращаемся к ячейке по имени
        ОформлениеСтроки.Ячейки.ЛимитыНаПроизводство.Видимость = Ложь;
    КонецЦикла;
    
КонецПроцедуры

Этот метод работает быстрее, так как платформа минимизирует количество обращений к графической подсистеме.

Различие подходов в Управляемых формах

Стоит отметить, что описанные выше методы относятся к Обычным формам. Если вы переходите на Управляемые формы (современный стандарт 1С 8.3), там концепция работы с группами колонок в корне изменилась. В управляемом приложении вам не нужно создавать «пустую» колонку для заголовка. Там используется специальный элемент — Группа колонок. Для планирования такой миграции можно подобрать раздел с решениями по переходу на новые конфигурации в зависимости от требований бизнеса.

В управляемом интерфейсе мы просто создаем группу, перетаскиваем в нее нужные колонки и устанавливаем свойство группы Группировка (например, «Вертикальная»). Заголовок группы будет отображаться над всеми вложенными колонками автоматически, и при этом в области данных не будет создаваться никаких лишних «пустых» ячеек. Это архитектурно более правильный подход, исключающий необходимость написания кода для оформления.

Структурные рекомендации

Подводя итог, при работе с интерфейсом таблиц в 1С придерживайтесь следующих правил:

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

← На главную