К статье
Практический материал

Разработка и Конфигурация · 10 мин

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

Переименование колонки в таблице значений 1С: установка свойства Имя, методы работы с коллекцией Колонки, типичные ошибки и проверка результата.

Переименование колонки таблицы значений (ТЗ) — типовая задача при доработке обработок, отчётов и обменов данными в 1С. Таблица значений хранится в оперативной памяти, а её структура описывается коллекцией «Колонки», поэтому переименование выполняется программно через свойство Имя конкретной колонки. Конструкции вида «переименовать» в языке 1С нет — имя меняется прямым присваиванием.

Важно понимать: имя колонки — это её программный идентификатор, а не заголовок, который видит пользователь. Если нужно изменить только подпись на форме или в отчёте, меняется свойство Заголовок, и структура таблицы при этом не трогается. Смешение этих двух задач — самая частая причина ошибок «Поле объекта не обнаружено» после правок.

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

Что нужно знать о колонках таблицы значений перед переименованием

Каждая колонка таблицы значений — это объект со свойствами Имя, ТипЗначения, Заголовок, Ширина и другими. Доступ к колонке возможен двумя путями: по имени (ТЗ.Колонки.Номенклатура) и по индексу (ТЗ.Колонки[0]). Индексация начинается с нуля, и порядок колонок соответствует порядку их добавления.

Имя колонки должно удовлетворять правилам идентификаторов встроенного языка: начинаться с буквы или символа подчёркивания, не содержать пробелов и специальных символов, не совпадать с именами других колонок той же таблицы. Регистр букв в имени не учитывается: «Цена» и «цена» для платформы — одно и то же имя.

Базовый способ: присваивание нового имени

Переименование выполняется одной строкой кода — нужно обратиться к колонке через коллекцию и присвоить свойству Имя новое значение. Данные в колонке при этом сохраняются полностью, тип значения не меняется.

ТЗ.Колонки.Контрагент.Имя = "Покупатель";

После выполнения этой строки обращение ТЗ.Колонки.Контрагент вызовет ошибку, а данные будут доступны через ТЗ.Колонки.Покупатель. Это нужно учитывать во всём последующем коде: обращения к старому имени в циклах, запросах и выражениях СКД потребуют замены.

Если имя колонки заранее неизвестно или приходит параметром, используйте метод Найти коллекции колонок — он возвращает объект колонки или Неопределено, если колонки с таким именем нет:

Колонка = ТЗ.Колонки.Найти(СтароеИмя);

Если Колонка <> Неопределено Тогда

Колонка.Имя = НовоеИмя;

КонецЕсли;

Порядок действий
  1. 1
    Убедитесь, что таблица значений создана и заполнена, а колонка существует: ТЗ.Колонки.Найти(СтароеИмя) не возвращает Неопределено
  2. 2
    Проверьте, что новое имя не занято другой колонкой и соответствует правилам идентификаторов
  3. 3
    Выполните присваивание: ТЗ.Колонки.СтароеИмя.Имя = "НовоеИмя"
  4. 4
    Найдите в коде все обращения к старому имени и замените их на новое
  5. 5
    Запустите обработку и проверьте результат через отладчик или вывод структуры таблицы

Переименование с проверками: безопасный вариант

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

Функция ПереименоватьКолонкуТЗ(ТЗ, СтароеИмя, НовоеИмя)

Колонка = ТЗ.Колонки.Найти(СтароеИмя);

Если Колонка = Неопределено Тогда

Возврат Ложь; // колонки нет

КонецЕсли;

Если ТЗ.Колонки.Найти(НовоеИмя) <> Неопределено Тогда

Возврат Ложь; // имя занято

КонецЕсли;

Колонка.Имя = НовоеИмя;

Возврат Истина;

КонецФункции

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

Изменение заголовка вместо имени

Частая ситуация: разработчику нужно, чтобы пользователь видел колонку под другим названием в табличном поле на форме или в печатной форме. Менять Имя для этого не нужно и вредно — достаточно установить свойство Заголовок:

ТЗ.Колонки.Номенклатура.Заголовок = "Товар (артикул)";

Заголовок может содержать пробелы, скобки и любые символы — ограничения идентификаторов на него не распространяются. Программный доступ к данным по-прежнему идёт по имени, поэтому весь остальной код не затрагивается. Признак того, что нужен именно заголовок: меняется только отображение, а логика обработки, запросы и обмены работают как раньше.

Сравнение вариантов

Свойство Имя

Меняет программный идентификатор колонки. Требуется, когда таблица передаётся дальше: в запрос, СКД, обмен данными. Все обращения к старому имени в коде нужно обновить.

Свойство Заголовок

Меняет только подпись для пользователя. Подходит для форм, отчётов и печати. Код и структура данных не затрагиваются.

Новая колонка + копирование

Добавляется колонка с нужным именем, данные переносятся в цикле, старая удаляется. Нужен, когда одновременно меняется тип значения или когда прямое переименование невозможно.

Альтернатива: новая колонка с переносом данных

Прямое присваивание имени не подходит, если одновременно с переименованием нужно изменить тип значения колонки — например, превратить строку в ссылку на справочник. В этом случае последовательность такая: добавить новую колонку с нужным именем и типом через ТЗ.Колонки.Добавить(), перенести данные в цикле по строкам, затем удалить старую колонку методом ТЗ.Колонки.Удалить().

ТЗ.Колонки.Добавить("Покупатель", Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));

Для Каждого Строка Из ТЗ Цикл

Строка.Покупатель = Справочники.Контрагенты.НайтиПоНаименованию(Строка.Контрагент);

КонецЦикла;

ТЗ.Колонки.Удалить("Контрагент");

Учтите, что новая колонка встаёт в конец коллекции. Если порядок колонок важен (например, для вывода в табличный документ), используйте метод ТЗ.Колонки.Сдвинуть(), чтобы вернуть колонку на нужную позицию.

Проверка результата и типичные ошибки

После переименования проверьте структуру таблицы. Быстрый способ — цикл по коллекции колонок с выводом имён и типов в сообщения, либо просмотр таблицы в отладчике через «Вычислить выражение» → ТЗ.Колонки.Количество() и обход по индексам. Убедитесь, что количество колонок не изменилось, данные на месте, а новое имя доступно.

Типичные ошибки
01
Присваивание имени, которое уже занято другой колонкой, — возникает исключение, код останавливается
02
Обращение к старому имени после переименования — ошибка «Поле объекта не обнаружено» в циклах и запросах
03
Использование пробелов и кириллических знаков препинания в имени — нарушение правил идентификаторов
04
Переименование вместо установки Заголовка, когда нужно было изменить только подпись на форме
05
Игнорирование регистра имён: колонки «Цена» и «цена» считаются одной, попытка создать обе приведёт к конфликту
Контрольные точки

Как проверить результат

Количество колонок до и после
Норма

Значение ТЗ.Колонки.Количество() не изменилось

Тревожный признак

Колонок стало больше или меньше — вероятно, добавили новую вместо переименования

Доступ по новому имени
Норма

ТЗ.Колонки.Найти(НовоеИмя) возвращает колонку, данные читаются

Тревожный признак

Найти() возвращает Неопределено — присваивание не выполнилось

Данные в строках
Норма

Значения в переименованной колонке совпадают с исходными

Тревожный признак

Значения пустые — возможно, создана новая колонка без переноса данных

FAQ: частые вопросы о переименовании колонок в 1С

Можно ли переименовать колонку в запросе 1С?

Да, но это другой механизм. В тексте запроса используется конструкция «ВЫБРАТЬ Поле КАК НовоеИмя» — псевдоним задаётся для поля результата запроса. Если таблица значений получена из запроса, проще задать нужные псевдонимы сразу в тексте, чем переименовывать колонки после выгрузки.

Что произойдёт с данными при переименовании колонки?

Ничего — данные полностью сохраняются. Присваивание свойству Имя меняет только идентификатор колонки, значения в строках и тип значения остаются прежними. Данные теряются только при удалении колонки методом Удалить().

Как переименовать колонку, если её имя содержит пробел?

Колонки с пробелами в имени появляются, например, при загрузке из Excel через табличный документ. Обратиться к такой колонке напрямую через точку нельзя — используйте метод Найти(): ТЗ.Колонки.Найти("Цена за единицу").Имя = "Цена". Новое имя уже должно быть корректным идентификатором без пробелов.

Можно ли переименовать колонку таблицы значений на форме?

Если таблица является реквизитом формы, программное переименование колонки реквизита в режиме предприятия невозможно — структура реквизитов формы фиксирована. Меняйте заголовок колонки элемента формы через свойства табличного поля, а если нужно другое имя программно — создавайте реквизит с нужным именем в конфигураторе или через ИзменитьРеквизиты().

Как переименовать сразу несколько колонок по списку?

Заполните соответствие, где ключ — старое имя, значение — новое, и пройдите по нему циклом с вызовом функции-обёртки с проверками. Проверка на занятость имени обязательна: при массовом переименовании легко получить конфликт, если одно из новых имён совпадает с ещё не переименованной колонкой.

Итог

Что важно запомнить

Колонка таблицы значений переименовывается присваиванием свойству Имя, данные при этом сохраняются. Перед присваиванием проверяйте существование колонки и уникальность нового имени. Для изменения подписи на форме используйте Заголовок, для смены типа — новую колонку с переносом данных. После переименования обновите все обращения к старому имени в коде.