Переименование колонки таблицы значений, табличной части и формы ТСД в 1С

· 9 мин

Содержание

Колонку таблицы значений в 1С 8.3 переименовывают одной строкой: ТЗ.Колонки.Найти("СтароеИмя").Имя = "НовоеИмя";. Свойство Имя у колонки доступно на запись, данные в колонке при этом не теряются. Если нужно поменять только то, что видит пользователь, меняют не имя, а Заголовок.

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

Имя колонки и её заголовок: в чём разница

У колонки таблицы значений, дерева значений и реквизита табличной части есть два разных «названия».

ЧтоГде используетсяОграничения
Имяв коде: Строка.Количество, Колонки.Найти("Количество"), в запросахтолько буквы, цифры и _, первым — не цифра, без пробелов, уникально в коллекции
Заголовокв шапке таблицы на форме, при выводе в табличный документ, в отладчикелюбая строка, пробелы и знаки препинания разрешены
Синоним (в конфигураторе)подпись реквизита по умолчанию на формах и в отчётахлюбая строка

📌 Правило простое:

  • 🔧 ломается код или обмен — нужно менять Имя;
  • 👁 не нравится подпись в интерфейсе — меняйте Заголовок или Синоним;
  • 📱 подпись на ТСД — почти всегда это Заголовок элемента формы, а не имя реквизита.

Если у колонки заголовок пустой, платформа показывает в шапке имя. Поэтому НоменклатураКод на экране превращается в «Номенклатура код»: подпись собрана из имени автоматически.

Переименование колонки в таблице значений программно

Способ 1. Присвоить новое имя

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

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

Проверка на Неопределено обязательна. Метод Найти не выбрасывает исключение, если колонки нет, а просто возвращает пустое значение. Без проверки следующая строка упадёт.

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

Способ 2. Создать новую колонку и перенести данные

Нужен, когда меняется не только имя, но и тип значения. Свойство ТипЗначения у существующей колонки только для чтения, поэтому колонку пересоздают.

ТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"), "Количество, шт.");
ТЗ.ЗагрузитьКолонку(ТЗ.ВыгрузитьКолонку("Кол"), "Количество");
ТЗ.Колонки.Удалить("Кол");

ВыгрузитьКолонку возвращает массив значений, ЗагрузитьКолонку раскладывает его по строкам в том же порядке. Строки не пересоздаются, порядок не меняется.

Чтобы новая колонка встала на место старой, а не в конец, используйте Колонки.Вставить(Индекс, ...). Индекс берут так: ТЗ.Колонки.Индекс(ТЗ.Колонки.Кол).

Способ 3. Переименовать сразу в запросе

Если таблица получена из Запрос.Выполнить().Выгрузить(), проще всего дать нужное имя псевдонимом:

Запрос.Текст =
"ВЫБРАТЬ
|    Остатки.Номенклатура КАК Товар,
|    Остатки.КоличествоОстаток КАК Количество
|ИЗ
|    РегистрНакопления.ТоварыНаСкладах.Остатки КАК Остатки";

Колонки выгруженной таблицы получат имена Товар и Количество. Переименовывать что-то после выгрузки не придётся.

Переименовать несколько колонок за один проход

Когда таблица приходит из внешнего файла или обработки загрузки, имена колонок часто чужие: Kod, Naim, Kol_vo. Удобно держать соответствие «старое → новое» и пройти по нему один раз:

Замены = Новый Соответствие;
Замены.Вставить("Kod",    "Код");
Замены.Вставить("Naim",   "Наименование");
Замены.Вставить("Kol_vo", "Количество");

Для Каждого Пара Из Замены Цикл
    Колонка = ТЗ.Колонки.Найти(Пара.Ключ);
    Если Колонка = Неопределено Тогда
        Продолжить;
    КонецЕсли;
    Если ТЗ.Колонки.Найти(Пара.Значение) <> Неопределено Тогда
        ВызватьИсключение "Колонка " + Пара.Значение + " уже есть в таблице";
    КонецЕсли;
    Колонка.Имя = Пара.Значение;
КонецЦикла;

Отсутствующие колонки пропускаются молча, а конфликт имён останавливает загрузку с понятным текстом. Так проще разобраться, чем с безымянным исключением где-то в середине обработки.

💡 Соответствие удобно вынести в макет или константу. Тогда при смене формата файла правят настройку, а не код.

Какой способ выбрать

СпособКогда подходитРиски
Колонка.Имя = ...меняется только имястарые обращения в коде перестанут работать
Добавить → перенести → удалитьменяется тип или порядокна больших таблицах лишний проход по строкам
Псевдоним КАК в запросетаблица строится из запросанет, это самый чистый вариант

То же самое работает для ДеревоЗначений: у него тоже есть коллекция Колонки с теми же свойствами Имя и Заголовок.

Переименование реквизита табличной части в конфигураторе

Если «колонка» — это реквизит табличной части документа или справочника, переименование делают в конфигураторе.

  1. Откройте конфигурацию: Конфигурация → Открыть конфигурацию.
  2. В дереве найдите объект, раскройте Табличные части, затем нужную табличную часть.
  3. Выделите реквизит и откройте палитру свойств (Alt+Enter).
  4. Поменяйте поле Синоним, если нужна другая подпись. Поле Имя — если нужно другое имя в коде.
  5. Обновите конфигурацию базы данных (F7).

Перед обновлением структуры сделайте резервную копию базы . Для изменения структуры нужен монопольный доступ, пользователей придётся попросить выйти.

Смена Имя у реквизита не трогает код. Все обращения СтрокаТЧ.СтароеИмя, тексты запросов, обработчики форм и правила обмена нужно поправить самому. Найдите их глобальным поиском Ctrl+Shift+F по старому имени до того, как переименуете.

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

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

Синоним и заголовок на форме

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

Заголовок колонки на форме мобильного клиента и ТСД

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

Через редактор формы

  1. Откройте форму в конфигураторе (мобильного приложения или основной конфигурации, если терминал работает через мобильный клиент).
  2. На вкладке Элементы раскройте таблицу и выделите поле-колонку.
  3. В палитре свойств заполните Заголовок.
  4. Сохраните и обновите приложение на устройстве.

Имя элемента формы (например, ТоварыКоличество) при этом остаётся прежним, обращения из кода не ломаются.

📱 Что учесть именно на ТСД:

  • 📏 экран узкий — длинный заголовок обрежется, лучше «Кол.» или «Факт», чем «Количество фактическое»;
  • 🔢 при нескольких колонках подумайте, не убрать ли шапку совсем и не вывести ли поля в несколько строк внутри группы;
  • 🔄 мобильное приложение после правки формы нужно пересобрать и заново установить на терминал, иначе останется старая версия;
  • 🌐 если терминал работает через мобильный клиент, достаточно обновить конфигурацию на сервере — форма подтянется при следующем подключении.

Программно при открытии формы

Подпись можно сменить в коде, например в зависимости от режима работы — приёмка или инвентаризация:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Параметры.Режим = "Инвентаризация" Тогда
        Элементы.ТоварыКоличество.Заголовок = "Факт";
    Иначе
        Элементы.ТоварыКоличество.Заголовок = "Принято";
    КонецЕсли;
КонецПроцедуры

Обращение идёт к элементу формы по его имени из вкладки Элементы, а не к реквизиту.

Мини-кейс: «Количество» на приёмке и инвентаризации

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

Колонки таблицы значений на управляемой форме

Если на форме лежит реквизит типа ТаблицаЗначений, на клиенте он превращается в ДанныеФормыКоллекция. У такой коллекции нет Колонки, поэтому код Объект.Товары.Колонки.Найти(...) на клиенте не сработает.

Варианты:

  • 🖥 Только подпись. Меняйте Заголовок элемента таблицы, как в примере выше. Работает и на клиенте, и на сервере.
  • 🗄 Имя колонки в реквизите формы. Колонки реквизита формы переименовать напрямую нельзя. На сервере вызывают ИзменитьРеквизиты(): добавляют реквизит-колонку с новым именем, удаляют старую, затем создают для неё элемент формы через Элементы.Добавить().
  • 🔁 Переименовать в обычной ТЗ. Получите таблицу через РеквизитФормыВЗначение("ИмяРеквизита"), переименуйте колонку на сервере и подумайте, нужно ли возвращать её на форму. Обратно через ЗначениеВРеквизитФормы загрузятся только колонки, которые есть у реквизита формы.

Динамическое изменение реквизитов через ИзменитьРеквизиты() — тяжёлая операция. Не вызывайте её в цикле и в обработчиках, которые срабатывают при каждой смене строки.

Подпись колонки в табличном документе и отчёте

Таблица значений сама по себе на печать не выходит. Подпись колонки в печатной форме или отчёте зависит от того, как строится вывод.

Печатная форма по макету

Шапка таблицы в макете — это просто ячейки области, например ШапкаТаблицы. Чтобы переименовать колонку:

  1. Откройте макет в конфигураторе.
  2. Найдите ячейку шапки и поменяйте текст.
  3. Если подпись должна меняться по условию, сделайте ячейку параметром (свойство Заполнение — Параметр) и заполняйте её в коде: ОбластьШапка.Параметры.ЗаголовокКолонки = "Факт";.

Отчёт на системе компоновки данных

В схеме компоновки на закладке Наборы данных у каждого поля есть колонка Заголовок. Она и попадает в шапку отчёта. Правка в схеме меняет подпись для всех вариантов отчёта.

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

Вывод таблицы значений «как есть»

Если таблица выводится универсальным кодом, который проходит по ТЗ.Колонки и печатает заголовки, в шапку попадёт Колонка.Заголовок, а при пустом заголовке — имя. Достаточно заполнить заголовок до вывода.

Типовые ошибки после переименования

Диагностика: выберите симптом

Частые вопросы

Можно ли дать колонке имя с пробелом?
Нет. Имя колонки — это идентификатор, пробелы в нём недопустимы. Пробелы и любые символы пишите в заголовок.
Сохраняется ли порядок колонок после переименования через Имя?
Да. Колонка остаётся на своём месте, меняется только её имя. Порядок меняют методом Колонки.Сдвинуть().
Почему в отладчике видно старое имя колонки?
Скорее всего, в отладчике раскрыт снимок значения до выполнения строки с переименованием. Обновите значение в окне выражений после шага.
Можно ли переименовать колонку в результате запроса без выгрузки в ТЗ?
Выборка из результата запроса только читает данные, переименовать в ней колонку нельзя. Задайте нужное имя псевдонимом КАК в тексте запроса.
Влияет ли переименование реквизита табличной части на обмен с ТСД?
Да, если правила обмена или код загрузки обращаются к реквизиту по имени. После смены имени проверьте обработчики выгрузки и загрузки и прогоните тестовый обмен с одним документом.