Переименование колонки таблицы значений, табличной части и формы ТСД в 1С
Содержание
Колонку таблицы значений в 1С 8.3 переименовывают одной строкой: ТЗ.Колонки.Найти("СтароеИмя").Имя = "НовоеИмя";. Свойство Имя у колонки доступно на запись, данные в колонке при этом не теряются. Если нужно поменять только то, что видит пользователь, меняют не имя, а Заголовок.
Частая ошибка — путать эти два свойства. Программист меняет Заголовок, а потом удивляется, что код по-прежнему обращается к Строка.СтароеИмя. Или наоборот: меняет Имя, а на форме терминала сбора данных (ТСД) кладовщик видит прежнюю подпись. Ниже — все варианты: таблица значений, результат запроса, реквизит в конфигураторе, форма мобильного клиента и табличный документ.
Имя колонки и её заголовок: в чём разница
У колонки таблицы значений, дерева значений и реквизита табличной части есть два разных «названия».
| Что | Где используется | Ограничения |
|---|---|---|
Имя | в коде: Строка.Количество, Колонки.Найти("Количество"), в запросах | только буквы, цифры и _, первым — не цифра, без пробелов, уникально в коллекции |
Заголовок | в шапке таблицы на форме, при выводе в табличный документ, в отладчике | любая строка, пробелы и знаки препинания разрешены |
Синоним (в конфигураторе) | подпись реквизита по умолчанию на формах и в отчётах | любая строка |
📌 Правило простое:
- 🔧 ломается код или обмен — нужно менять
Имя; - 👁 не нравится подпись в интерфейсе — меняйте
ЗаголовокилиСиноним; - 📱 подпись на ТСД — почти всегда это
Заголовокэлемента формы, а не имя реквизита.
Если у колонки заголовок пустой, платформа показывает в шапке имя. Поэтому НоменклатураКод на экране превращается в «Номенклатура код»: подпись собрана из имени автоматически.
Переименование колонки в таблице значений программно
Способ 1. Присвоить новое имя
Самый короткий путь. Подходит для таблиц, созданных в коде или выгруженных из запроса.
Колонка = ТЗ.Колонки.Найти("Кол");
Если Колонка <> Неопределено Тогда
Колонка.Имя = "Количество";
Колонка.Заголовок = "Количество, шт.";
КонецЕсли;
Проверка на Неопределено обязательна. Метод Найти не выбрасывает исключение, если колонки нет, а просто возвращает пустое значение. Без проверки следующая строка упадёт.
💡 Новое имя должно быть свободным. Если в таблице уже есть колонка Количество, присвоение вызовет исключение. Сначала проверьте ТЗ.Колонки.Найти("Количество") = Неопределено.
Способ 2. Создать новую колонку и перенести данные
Нужен, когда меняется не только имя, но и тип значения. Свойство ТипЗначения у существующей колонки только для чтения, поэтому колонку пересоздают.
ТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"), "Количество, шт.");
ТЗ.ЗагрузитьКолонку(ТЗ.ВыгрузитьКолонку("Кол"), "Количество");
ТЗ.Колонки.Удалить("Кол");
ВыгрузитьКолонку возвращает массив значений, ЗагрузитьКолонку раскладывает его по строкам в том же порядке. Строки не пересоздаются, порядок не меняется.
Чтобы новая колонка встала на место старой, а не в конец, используйте Колонки.Вставить(Индекс, ...). Индекс берут так: ТЗ.Колонки.Индекс(ТЗ.Колонки.Кол).
Способ 3. Переименовать сразу в запросе
Если таблица получена из Запрос.Выполнить().Выгрузить(), проще всего дать нужное имя псевдонимом:
Запрос.Текст =
"ВЫБРАТЬ
| Остатки.Номенклатура КАК Товар,
| Остатки.КоличествоОстаток КАК Количество
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки КАК Остатки";
Колонки выгруженной таблицы получат имена Товар и Количество. Переименовывать что-то после выгрузки не придётся.
Переименовать несколько колонок за один проход
Когда таблица приходит из внешнего файла или обработки загрузки, имена колонок часто чужие: Kod, Naim, Kol_vo. Удобно держать соответствие «старое → новое» и пройти по нему один раз:
Замены = Новый Соответствие;
Замены.Вставить("Kod", "Код");
Замены.Вставить("Naim", "Наименование");
Замены.Вставить("Kol_vo", "Количество");
Для Каждого Пара Из Замены Цикл
Колонка = ТЗ.Колонки.Найти(Пара.Ключ);
Если Колонка = Неопределено Тогда
Продолжить;
КонецЕсли;
Если ТЗ.Колонки.Найти(Пара.Значение) <> Неопределено Тогда
ВызватьИсключение "Колонка " + Пара.Значение + " уже есть в таблице";
КонецЕсли;
Колонка.Имя = Пара.Значение;
КонецЦикла;
Отсутствующие колонки пропускаются молча, а конфликт имён останавливает загрузку с понятным текстом. Так проще разобраться, чем с безымянным исключением где-то в середине обработки.
💡 Соответствие удобно вынести в макет или константу. Тогда при смене формата файла правят настройку, а не код.
Какой способ выбрать
| Способ | Когда подходит | Риски |
|---|---|---|
Колонка.Имя = ... | меняется только имя | старые обращения в коде перестанут работать |
| Добавить → перенести → удалить | меняется тип или порядок | на больших таблицах лишний проход по строкам |
Псевдоним КАК в запросе | таблица строится из запроса | нет, это самый чистый вариант |
То же самое работает для ДеревоЗначений: у него тоже есть коллекция Колонки с теми же свойствами Имя и Заголовок.
Переименование реквизита табличной части в конфигураторе
Если «колонка» — это реквизит табличной части документа или справочника, переименование делают в конфигураторе.
- Откройте конфигурацию:
Конфигурация → Открыть конфигурацию. - В дереве найдите объект, раскройте
Табличные части, затем нужную табличную часть. - Выделите реквизит и откройте палитру свойств (
Alt+Enter). - Поменяйте поле
Синоним, если нужна другая подпись. ПолеИмя— если нужно другое имя в коде. - Обновите конфигурацию базы данных (
F7).
Перед обновлением структуры сделайте резервную копию базы . Для изменения структуры нужен монопольный доступ, пользователей придётся попросить выйти.
Смена Имя у реквизита не трогает код. Все обращения СтрокаТЧ.СтароеИмя, тексты запросов, обработчики форм и правила обмена нужно поправить самому. Найдите их глобальным поиском Ctrl+Shift+F по старому имени до того, как переименуете.
Данные при переименовании реквизита в конфигураторе не пропадают: платформа связывает реквизит с колонкой в базе не по имени, а по внутреннему идентификатору. Проблема возникает, только если реквизит удалили и создали новый с тем же именем — тогда старые значения теряются.
💡 Если конфигурация типовая и стоит на поддержке, переименовывать реквизиты в ней не стоит. Создайте расширение, а подпись меняйте на уровне формы: так обновления встанут без конфликтов.
Синоним и заголовок на форме
Подпись колонки на форме берётся из синонима реквизита, если у элемента формы не задан свой Заголовок. Отсюда частая путаница: синоним поменяли, а на одной из форм осталась старая подпись. Значит, у элемента этой формы заголовок прописан явно — его и правьте.
Заголовок колонки на форме мобильного клиента и ТСД
Приложения для ТСД на мобильной платформе 1С используют те же управляемые формы, что и обычная конфигурация. Колонка таблицы на экране терминала — это элемент формы типа Поле внутри элемента Таблица.
Через редактор формы
- Откройте форму в конфигураторе (мобильного приложения или основной конфигурации, если терминал работает через мобильный клиент).
- На вкладке
Элементыраскройте таблицу и выделите поле-колонку. - В палитре свойств заполните
Заголовок. - Сохраните и обновите приложение на устройстве.
Имя элемента формы (например, ТоварыКоличество) при этом остаётся прежним, обращения из кода не ломаются.
📱 Что учесть именно на ТСД:
- 📏 экран узкий — длинный заголовок обрежется, лучше «Кол.» или «Факт», чем «Количество фактическое»;
- 🔢 при нескольких колонках подумайте, не убрать ли шапку совсем и не вывести ли поля в несколько строк внутри группы;
- 🔄 мобильное приложение после правки формы нужно пересобрать и заново установить на терминал, иначе останется старая версия;
- 🌐 если терминал работает через мобильный клиент, достаточно обновить конфигурацию на сервере — форма подтянется при следующем подключении.
Программно при открытии формы
Подпись можно сменить в коде, например в зависимости от режима работы — приёмка или инвентаризация:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Режим = "Инвентаризация" Тогда
Элементы.ТоварыКоличество.Заголовок = "Факт";
Иначе
Элементы.ТоварыКоличество.Заголовок = "Принято";
КонецЕсли;
КонецПроцедуры
Обращение идёт к элементу формы по его имени из вкладки Элементы, а не к реквизиту.
Мини-кейс: «Количество» на приёмке и инвентаризации
Склад работает с одной формой подбора на ТСД. При приёмке кладовщик вводит принятое количество, при инвентаризации — фактическое. Колонка одна, реквизит один — Количество. Переименовывать реквизит под каждый режим незачем: достаточно менять заголовок элемента при открытии формы, как в примере выше. Код обмена с учётной базой при этом не трогают вовсе.
Колонки таблицы значений на управляемой форме
Если на форме лежит реквизит типа ТаблицаЗначений, на клиенте он превращается в ДанныеФормыКоллекция. У такой коллекции нет Колонки, поэтому код Объект.Товары.Колонки.Найти(...) на клиенте не сработает.
Варианты:
- 🖥 Только подпись. Меняйте
Заголовокэлемента таблицы, как в примере выше. Работает и на клиенте, и на сервере. - 🗄 Имя колонки в реквизите формы. Колонки реквизита формы переименовать напрямую нельзя. На сервере вызывают
ИзменитьРеквизиты(): добавляют реквизит-колонку с новым именем, удаляют старую, затем создают для неё элемент формы черезЭлементы.Добавить(). - 🔁 Переименовать в обычной ТЗ. Получите таблицу через
РеквизитФормыВЗначение("ИмяРеквизита"), переименуйте колонку на сервере и подумайте, нужно ли возвращать её на форму. Обратно черезЗначениеВРеквизитФормызагрузятся только колонки, которые есть у реквизита формы.
Динамическое изменение реквизитов через ИзменитьРеквизиты() — тяжёлая операция. Не вызывайте её в цикле и в обработчиках, которые срабатывают при каждой смене строки.
Подпись колонки в табличном документе и отчёте
Таблица значений сама по себе на печать не выходит. Подпись колонки в печатной форме или отчёте зависит от того, как строится вывод.
Печатная форма по макету
Шапка таблицы в макете — это просто ячейки области, например ШапкаТаблицы. Чтобы переименовать колонку:
- Откройте макет в конфигураторе.
- Найдите ячейку шапки и поменяйте текст.
- Если подпись должна меняться по условию, сделайте ячейку параметром (свойство
Заполнение—Параметр) и заполняйте её в коде:ОбластьШапка.Параметры.ЗаголовокКолонки = "Факт";.
Отчёт на системе компоновки данных
В схеме компоновки на закладке Наборы данных у каждого поля есть колонка Заголовок. Она и попадает в шапку отчёта. Правка в схеме меняет подпись для всех вариантов отчёта.
Пользователь без конфигуратора может поменять подпись в настройках отчёта: у выбранного поля в расширенном режиме настроек задаётся свой заголовок. Он сохраняется в варианте отчёта и не затрагивает схему.
Вывод таблицы значений «как есть»
Если таблица выводится универсальным кодом, который проходит по ТЗ.Колонки и печатает заголовки, в шапку попадёт Колонка.Заголовок, а при пустом заголовке — имя. Достаточно заполнить заголовок до вывода.