Почему не работает метод ВидимостьКолонки в таблице значений 1С 7.7 и как скрыть колонки на форме?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

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

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

Синтаксис и особенности работы метода ВидимостьКолонки

Метод ВидимостьКолонки() объекта ТаблицаЗначений предназначен для управления отображением колонок в визуальной таблице на форме. Его базовый синтаксис выглядит следующим образом:

ВидимостьКолонки(<Колонки>, <Видимость>, <Позиция>)

Разберем параметры данного метода:

  1. <Колонки> — имя колонки (строка), ее порядковый номер (число) или строка с перечислением нескольких колонок через запятую (например, "Месяц, Год, Фамилия" или "1, 2, 3").
  2. <Видимость> — числовой флаг: 1 — сделать колонку видимой, 0 — скрыть колонку.
  3. <Позиция> — необязательный числовой параметр, задающий порядковый номер позиции колонки на экране слева направо.

Выясним важное свойство: если передать имя одной колонки, метод возвращает числовое значение — предыдущее состояние видимости (1 — была видна, 0 — была скрыта). Если колонка с переданным именем отсутствует в таблице значений, метод возвратит -1. Важно понимать, что скрытие колонки изменяет исключительно визуальное отображение элемента диалога. Из самой структуры данных колонка никуда не удаляется: к ней по-прежнему можно обращаться по имени или номеру, считывать и записывать значения программным путем.

Почему метод может не сработать: разбор типичных ошибок

Проанализируем две главные проблемы, с которыми сталкиваются при групповом вызове метода:

1. Опечатки в идентификаторах колонок. Если в длинной строке со списком колонок допущена хотя бы одна ошибка (например, колонка создана как "Неполн", а в списке написано "Неролн"), внутренний парсер платформы 1С 7.7 прерывает разбор строки именно на ошибочном идентификаторе. В результате все колонки, перечисленные после несуществующего имени, просто не обрабатываются и остаются видимыми.

2. Ожидание инверсии видимости. Платформа 1С 7.7 не инвертирует видимость колонок. Если написать ТЗ.ВидимостьКолонки("ИНН, ДнейБольн", 1), платформа сделает указанные колонки видимыми, однако все остальные колонки останутся в своем исходном состоянии (по умолчанию вновь созданные колонки всегда видимы). Указание видимости для группы элементов не приводит к автоматическому скрытию всех остальных.

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

Способ 1. Устранение опечаток и разбиение списка колонок

Если требуется скрыть конкретные колонки по именам или номерам, убедимся в точном совпадении идентификаторов. Чтобы избежать сбоев разбора длинных строк, список колонок можно разбить на несколько коротких вызовов либо указать номера колонок вместо строк:


Процедура ПриОткрытии()
    // Создаем структуру колонок
    ТЗ.НоваяКолонка("Месяц", "Число", 2, 0);
    ТЗ.НоваяКолонка("Год", "Число", 4, 0);
    ТЗ.НоваяКолонка("ИНН", "Строка", 10, 0);
    ТЗ.НоваяКолонка("Фамилия", "Строка", 100, 0);
    ТЗ.НоваяКолонка("Неполн", "Число", 1, 0);

    // Скрываем колонки порциями по их именам без опечаток
    ТЗ.ВидимостьКолонки("Месяц, Год", 0);
    ТЗ.ВидимостьКолонки("Фамилия, Неполн", 0);
КонецПроцедуры

Также можно использовать номера колонок по порядку их создания:

ТЗ.ВидимостьКолонки("1, 2, 4, 5", 0);

Способ 2. Паттерн «Скрыть всё, показать только нужное»

Когда таблица содержит 20–30 колонок, а показать пользователю требуется лишь 4–5, гораздо надежнее применить двухэтапный алгоритм: сначала программно скрыть абсолютно все колонки в цикле, а затем явно отобразить требуемые. Посмотрим на реализацию этого подхода:


Процедура НастроитьОтображениеТаблицы()
    // Шаг 1: Скрываем абсолютно все колонки
    Для Ном = 1 По ТЗ.КоличествоКолонок() Цикл
        ТЗ.ВидимостьКолонки(Ном, 0);
    КонецЦикла;

    // Шаг 2: Включаем видимость только тех колонок, которые нужны на форме
    // При необходимости третьим параметром можно сразу задать порядок вывода на экран
    ТЗ.ВидимостьКолонки("ИНН", 1, 1);
    ТЗ.ВидимостьКолонки("ДнейБольн", 1, 2);
    ТЗ.ВидимостьКолонки("ОбщСум", 1, 3);
    ТЗ.ВидимостьКолонки("СумМакс", 1, 4);
    ТЗ.ВидимостьКолонки("Разница", 1, 5);
    ТЗ.ВидимостьКолонки("ЕСВНафонд", 1, 6);
КонецПроцедуры

Такой подход полностью исключает человеческий фактор: опечатка в имени одной скрываемой колонки не повлияет на остальные, а код останется читаемым и простым в сопровождении.

Ограничения при загрузке данных

Обратим внимание на работу метода Загрузить(). Если в коде выполняется перезаполнение объекта из другой таблицы значений (например, ТЗ.Загрузить(ВременнаяТЗ);), платформа полностью пересоздает структуру колонок исходного объекта. При этом все настройки видимости и ширины колонок сбрасываются к стандартным значениям. Настройку скрытия и порядка отображения колонок всегда следует выполнять после вызова метода Загрузить(), а не до него.

← На главную