В процессе разработки на платформе 1С:Предприятие 7.7 часто возникает необходимость хранить в объекте ТаблицаЗначений (ТЗ) служебные данные, которые не должны отображаться пользователю. Это могут быть внутренние идентификаторы (ID), ссылки на объекты, флаги состояния или промежуточные расчеты. Если такая таблица размещена на форме, перед разработчиком встает задача: как сделать колонку "невидимой", сохранив при этом программный доступ к ее содержимому. В этой статье мы подробно разберем все способы решения данной задачи, проанализируем штатные возможности платформы и рассмотрим некоторые хитрости.
Основным и наиболее правильным инструментом для управления отображением столбцов является встроенный метод ВидимостьКолонки. Рассмотрим его синтаксис и особенности применения. Рассмотрим ситуацию, когда у нас есть таблица с идентификатором ТЗДанных, созданная программно или размещенная на форме как элемент управления.
Синтаксис метода выглядит следующим образом:
ВидимостьКолонки(<Колонки>,<Видимость>,<Позиция>)
Разберем параметры подробнее:
Проанализируем пример кода, в котором мы создаем таблицу и скрываем служебную колонку с идентификатором СкрытыйID:
// Создаем колонки в таблице значений
ТЗДанных.НоваяКолонка("Товар", "Справочник.Номенклатура");
ТЗДанных.НоваяКолонка("Количество", "Число", 10, 2);
ТЗДанных.НоваяКолонка("СкрытыйID", "Строка"); // Эту колонку нужно скрыть
// Управляем видимостью
ТЗДанных.ВидимостьКолонки("СкрытыйID", 0);
После выполнения данного кода колонка СкрытыйID перестанет отображаться на форме, но останется доступной для любых программных манипуляций. Мы можем обращаться к ней через ТЗДанных.ПолучитьЗначение() или напрямую через точку ТЗДанных.СкрытыйID.
В сложных интерфейсах часто требуется скрыть сразу несколько полей. Платформа позволяет сделать это одной строкой кода, перечислив идентификаторы через запятую. Выясним, как это реализовать на практике:
// Скрываем сразу три служебных колонки
ТЗДанных.ВидимостьКолонки("ID, ФлагУдаления, ТехническийТип", 0);
Важно помнить: если при перечислении названий вы допустите опечатку в одном из имен, платформа может не выдать ошибку выполнения, но и действие не будет применено корректно ко всей группе. Поэтому для целей отладки иногда удобнее настраивать каждую колонку отдельно.
Существует распространенное мнение, что скрываемые колонки обязательно должны находиться в самом конце списка колонок таблицы. Проанализируем это утверждение. На самом деле, метод ВидимостьКолонки работает корректно независимо от физического расположения столбца в структуре ТЗ. Однако использование третьего параметра метода (Позиция) позволяет более гибко управлять визуальным рядом.
Например, если мы хотим не просто скрыть колонку, но и гарантировать, что при включении видимости она окажется в определенном месте, мы можем написать так:
// Делаем колонку видимой и перемещаем ее на второе место
ТЗДанных.ВидимостьКолонки("Артикул", 1, 2);
Иногда требуется управлять видимостью системных полей, таких как НомерСтроки. По умолчанию эта колонка часто бывает избыточно широкой или вовсе не нужна пользователю. Мы можем сделать ее видимой или скрыть аналогичным образом:
ТЗДанных.ВидимостьКолонки("НомерСтроки", 0);
Однако стандартные средства 1С 7.7 не позволяют программно менять ширину колонки НомерСтроки, если она включена. В таких случаях программисты часто прибегают к использованию внешних компонент, таких как FormEx. Рассмотрим пример использования объекта РасширениеФормы для более тонкой настройки:
// Использование внешней компоненты для управления шириной
Сервис = СоздатьОбъект("Сервис"); // Если используется FormEx
ФормаРасш = СоздатьОбъект("РасширениеФормы");
ФормаРасш.УстановитьШиринуКолонки("ТЗДанных", 0, 20); // Установка ширины для колонки №0
Интересной особенностью метода ВидимостьКолонки является возможность его использования в качестве функции для проверки существования колонки. Если в качестве единственного параметра передать имя колонки, метод вернет индекс этой колонки или -1, если колонка отсутствует. Проанализируем этот прием:
Если ТЗДанных.ВидимостьКолонки("Товар") >= 0 Тогда
// Колонка существует, можно выполнять операции
Сообщить("Колонка найдена!");
Иначе
// Колонки с таким идентификатором нет
Предупреждение("Ошибка структуры таблицы!");
КонецЕсли;
Этот способ является более быстрым и лаконичным, чем перебор всех колонок в цикле с проверкой их идентификаторов через функцию ПолучитьПараметрыКолонки().
Рассмотрим несколько критических моментов, которые стоит учитывать при работе со скрытыми колонками:
Загрузить(Источник) настройки видимости на форме могут сбрасываться. Если вы полностью заменяете содержимое и структуру таблицы, рекомендуется повторно вызывать методы настройки видимости.0 при создании колонки методом НоваяКолонка не приведет к ее скрытию. Платформа интерпретирует нулевую ширину как "значение по умолчанию" и подбирает размер автоматически. Скрытие выполняется только через ВидимостьКолонки.НайтиЗначение, сортировки Сортировать и другие.Таким образом, использование метода ВидимостьКолонки является стандартом де-факто для разработки удобных и функциональных интерфейсов в 1С 7.7. Скрытые колонки позволяют создавать "под капотом" мощную логику обработки данных, оставляя для пользователя только чистую и понятную информацию.