Разработка и Конфигурация · 10 мин
Как переименовать колонку в таблице значений 1С
Переименование колонки в таблице значений 1С: установка свойства Имя, методы работы с коллекцией Колонки, типичные ошибки и проверка результата.
Переименование колонки таблицы значений (ТЗ) — типовая задача при доработке обработок, отчётов и обменов данными в 1С. Таблица значений хранится в оперативной памяти, а её структура описывается коллекцией «Колонки», поэтому переименование выполняется программно через свойство Имя конкретной колонки. Конструкции вида «переименовать» в языке 1С нет — имя меняется прямым присваиванием.
Важно понимать: имя колонки — это её программный идентификатор, а не заголовок, который видит пользователь. Если нужно изменить только подпись на форме или в отчёте, меняется свойство Заголовок, и структура таблицы при этом не трогается. Смешение этих двух задач — самая частая причина ошибок «Поле объекта не обнаружено» после правок.
Ниже разобраны способы переименования, ограничения платформы, проверка результата и ситуации, когда вместо переименования правильнее создать новую колонку с копированием данных.
Что нужно знать о колонках таблицы значений перед переименованием
Каждая колонка таблицы значений — это объект со свойствами Имя, ТипЗначения, Заголовок, Ширина и другими. Доступ к колонке возможен двумя путями: по имени (ТЗ.Колонки.Номенклатура) и по индексу (ТЗ.Колонки[0]). Индексация начинается с нуля, и порядок колонок соответствует порядку их добавления.
Имя колонки должно удовлетворять правилам идентификаторов встроенного языка: начинаться с буквы или символа подчёркивания, не содержать пробелов и специальных символов, не совпадать с именами других колонок той же таблицы. Регистр букв в имени не учитывается: «Цена» и «цена» для платформы — одно и то же имя.
Базовый способ: присваивание нового имени
Переименование выполняется одной строкой кода — нужно обратиться к колонке через коллекцию и присвоить свойству Имя новое значение. Данные в колонке при этом сохраняются полностью, тип значения не меняется.
ТЗ.Колонки.Контрагент.Имя = "Покупатель";
После выполнения этой строки обращение ТЗ.Колонки.Контрагент вызовет ошибку, а данные будут доступны через ТЗ.Колонки.Покупатель. Это нужно учитывать во всём последующем коде: обращения к старому имени в циклах, запросах и выражениях СКД потребуют замены.
Если имя колонки заранее неизвестно или приходит параметром, используйте метод Найти коллекции колонок — он возвращает объект колонки или Неопределено, если колонки с таким именем нет:
Колонка = ТЗ.Колонки.Найти(СтароеИмя);
Если Колонка <> Неопределено Тогда
Колонка.Имя = НовоеИмя;
КонецЕсли;
- 1Убедитесь, что таблица значений создана и заполнена, а колонка существует: ТЗ.Колонки.Найти(СтароеИмя) не возвращает Неопределено
- 2Проверьте, что новое имя не занято другой колонкой и соответствует правилам идентификаторов
- 3Выполните присваивание: ТЗ.Колонки.СтароеИмя.Имя = "НовоеИмя"
- 4Найдите в коде все обращения к старому имени и замените их на новое
- 5Запустите обработку и проверьте результат через отладчик или вывод структуры таблицы
Переименование с проверками: безопасный вариант
Прямое присваивание без проверок опасно двумя ошибками: обращением к несуществующей колонке и попыткой присвоить имя, которое уже занято. Обе ситуации приводят к исключению и остановке кода. В обработках, где структура таблицы формируется динамически (например, загрузка из Excel или результата запроса), проверки обязательны.
Функция ПереименоватьКолонкуТЗ(ТЗ, СтароеИмя, НовоеИмя)
Колонка = ТЗ.Колонки.Найти(СтароеИмя);
Если Колонка = Неопределено Тогда
Возврат Ложь; // колонки нет
КонецЕсли;
Если ТЗ.Колонки.Найти(НовоеИмя) <> Неопределено Тогда
Возврат Ложь; // имя занято
КонецЕсли;
Колонка.Имя = НовоеИмя;
Возврат Истина;
КонецФункции
Такая обёртка удобна при массовом переименовании по соответствию: например, когда нужно привести имена колонок загруженной таблицы к именам реквизитов справочника. Перебираете соответствие «старое имя → новое имя» и вызываете функцию для каждой пары, а неуспешные случаи фиксируете в журнале или сообщении пользователю.
Изменение заголовка вместо имени
Частая ситуация: разработчику нужно, чтобы пользователь видел колонку под другим названием в табличном поле на форме или в печатной форме. Менять Имя для этого не нужно и вредно — достаточно установить свойство Заголовок:
ТЗ.Колонки.Номенклатура.Заголовок = "Товар (артикул)";
Заголовок может содержать пробелы, скобки и любые символы — ограничения идентификаторов на него не распространяются. Программный доступ к данным по-прежнему идёт по имени, поэтому весь остальной код не затрагивается. Признак того, что нужен именно заголовок: меняется только отображение, а логика обработки, запросы и обмены работают как раньше.
Сравнение вариантов
Меняет программный идентификатор колонки. Требуется, когда таблица передаётся дальше: в запрос, СКД, обмен данными. Все обращения к старому имени в коде нужно обновить.
Меняет только подпись для пользователя. Подходит для форм, отчётов и печати. Код и структура данных не затрагиваются.
Добавляется колонка с нужным именем, данные переносятся в цикле, старая удаляется. Нужен, когда одновременно меняется тип значения или когда прямое переименование невозможно.
Альтернатива: новая колонка с переносом данных
Прямое присваивание имени не подходит, если одновременно с переименованием нужно изменить тип значения колонки — например, превратить строку в ссылку на справочник. В этом случае последовательность такая: добавить новую колонку с нужным именем и типом через ТЗ.Колонки.Добавить(), перенести данные в цикле по строкам, затем удалить старую колонку методом ТЗ.Колонки.Удалить().
ТЗ.Колонки.Добавить("Покупатель", Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));
Для Каждого Строка Из ТЗ Цикл
Строка.Покупатель = Справочники.Контрагенты.НайтиПоНаименованию(Строка.Контрагент);
КонецЦикла;
ТЗ.Колонки.Удалить("Контрагент");
Учтите, что новая колонка встаёт в конец коллекции. Если порядок колонок важен (например, для вывода в табличный документ), используйте метод ТЗ.Колонки.Сдвинуть(), чтобы вернуть колонку на нужную позицию.
Проверка результата и типичные ошибки
После переименования проверьте структуру таблицы. Быстрый способ — цикл по коллекции колонок с выводом имён и типов в сообщения, либо просмотр таблицы в отладчике через «Вычислить выражение» → ТЗ.Колонки.Количество() и обход по индексам. Убедитесь, что количество колонок не изменилось, данные на месте, а новое имя доступно.
Как проверить результат
Значение ТЗ.Колонки.Количество() не изменилось
Колонок стало больше или меньше — вероятно, добавили новую вместо переименования
ТЗ.Колонки.Найти(НовоеИмя) возвращает колонку, данные читаются
Найти() возвращает Неопределено — присваивание не выполнилось
Значения в переименованной колонке совпадают с исходными
Значения пустые — возможно, создана новая колонка без переноса данных
FAQ: частые вопросы о переименовании колонок в 1С
Можно ли переименовать колонку в запросе 1С?
Да, но это другой механизм. В тексте запроса используется конструкция «ВЫБРАТЬ Поле КАК НовоеИмя» — псевдоним задаётся для поля результата запроса. Если таблица значений получена из запроса, проще задать нужные псевдонимы сразу в тексте, чем переименовывать колонки после выгрузки.
Что произойдёт с данными при переименовании колонки?
Ничего — данные полностью сохраняются. Присваивание свойству Имя меняет только идентификатор колонки, значения в строках и тип значения остаются прежними. Данные теряются только при удалении колонки методом Удалить().
Как переименовать колонку, если её имя содержит пробел?
Колонки с пробелами в имени появляются, например, при загрузке из Excel через табличный документ. Обратиться к такой колонке напрямую через точку нельзя — используйте метод Найти(): ТЗ.Колонки.Найти("Цена за единицу").Имя = "Цена". Новое имя уже должно быть корректным идентификатором без пробелов.
Можно ли переименовать колонку таблицы значений на форме?
Если таблица является реквизитом формы, программное переименование колонки реквизита в режиме предприятия невозможно — структура реквизитов формы фиксирована. Меняйте заголовок колонки элемента формы через свойства табличного поля, а если нужно другое имя программно — создавайте реквизит с нужным именем в конфигураторе или через ИзменитьРеквизиты().
Как переименовать сразу несколько колонок по списку?
Заполните соответствие, где ключ — старое имя, значение — новое, и пройдите по нему циклом с вызовом функции-обёртки с проверками. Проверка на занятость имени обязательна: при массовом переименовании легко получить конфликт, если одно из новых имён совпадает с ещё не переименованной колонкой.
Что важно запомнить
Колонка таблицы значений переименовывается присваиванием свойству Имя, данные при этом сохраняются. Перед присваиванием проверяйте существование колонки и уникальность нового имени. Для изменения подписи на форме используйте Заголовок, для смены типа — новую колонку с переносом данных. После переименования обновите все обращения к старому имени в коде.