Как правильно удалить колонку из таблицы значений в 1С?

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

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

Понимаем разницу между данными и формой

Первое, что необходимо уяснить: таблица значений, с которой вы работаете программно, и табличное поле, которое видит пользователь — это две разные сущности, хоть они и связаны между собой. Когда вы вызываете метод Колонки.Удалить() у самой таблицы значений (или у реквизита формы), вы меняете внутреннюю структуру данных. Но элемент управления ТабличноеПоле на форме — это отдельный объект, который «помнит» свою структуру отображения. Чтобы изменения вступили в силу на экране, необходимо синхронизировать форму с актуальными данными.

Решение 1: Удаление из данных и обновление формы

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


// Удаляем колонку из структуры данных
ТабличноеПоле2.Колонки.Удалить("ИмяНенужнойКолонки");

// Обновляем структуру отображения на форме
ЭлементыФормы.ТабличноеПоле2.СоздатьКолонки();

Метод СоздатьКолонки() заставляет элемент управления перечитать структуру источника данных и заново отрисовать колонки, что гарантированно уберет «фантомную» колонку с экрана.

Решение 2: Управление видимостью

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

Вместо удаления мы обращаемся к свойству Видимость колонки элемента управления:


// Скрываем колонку от пользователя, не удаляя её из памяти
ЭлементыФормы.ТабличноеПоле2.Колонки.ИмяНенужнойКолонки.Видимость = Ложь;

Этот метод предпочтителен в сложных отчетах и обработках, так как он позволяет динамически переключать состав видимых столбцов без риска потерять данные или вызвать ошибку при повторном обращении к колонке.

Решение 3: Использование метода Свернуть

Если ваша задача состоит не просто в удалении лишнего, а в подготовке итоговой таблицы с определенным набором полей, можно воспользоваться методом Свернуть(). Этот метод позволяет одновременно выбрать нужные колонки для группировки и рассчитать агрегатные функции (суммы).

Посмотрим на пример работы с методом Свернуть():


// Оставляем только нужные колонки и суммируем числовые показатели
ТЗ.Свернуть("Колонка1, Колонка2", "Сумма1, Сумма2");

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

А что делать с табличными частями объектов?

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

Итоги и рекомендации

  1. Всегда разделяйте понятия «объект данных» и «элемент формы».
  2. Для удаления в обычных формах используйте комбинацию Колонки.Удалить() и ЭлементыФормы.ТабличноеПоле.СоздатьКолонки().
  3. При возможности используйте Видимость = Ложь — это безопаснее и быстрее.
  4. Если используете Свернуть(), помните, что это изменяет состав строк, а не просто скрывает лишние столбцы.
  5. Избегайте одинаковых имен для реквизитов формы и элементов управления, чтобы не создавать путаницу в коде.

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

← На главную