Новая колонка в табличной части документа или справочника: Конфигуратор, форма, код
Содержание
Менеджер просит добавить в табличную часть «Товары» поступления колонку «Номер партии поставщика». Вы открываете документ в режиме 1С:Предприятие и не находите ни одной кнопки, которая бы это делала. Так и должно быть: колонка табличной части — это реквизит объекта метаданных, и создаётся он только в Конфигураторе.
Порядок всегда один: добавить реквизит табличной части, обновить конфигурацию базы данных, вывести колонку в форму. Если нужно только показать уже существующее поле или собрать временную таблицу в коде, Конфигуратор не нужен. Что и когда применять, видно из таблицы.
Какой способ выбрать
| Задача | Где делается | Нужен ли Конфигуратор |
|---|---|---|
| Новое хранимое поле в строках документа или справочника | Реквизит табличной части в дереве конфигурации | Да |
| Показать уже существующую колонку, которая скрыта в форме | Режим Предприятие, настройка формы | Нет |
| Добавить поле в список (динамический список) | Запрос списка и форма списка | Да, если поля нет в источнике |
| Временная таблица в обработке или отчёте | Код: таблица значений | Нет |
| Типовая конфигурация на поддержке | Расширение конфигурации | Да, но без правки типовых объектов |
Если колонка нужна только в одной печатной форме или в отчёте, не плодите реквизит. Посчитайте значение запросом или в макете, а в данные документа ничего не добавляйте.
Добавляем реквизит табличной части в Конфигураторе
Запустите базу в режиме Конфигуратор под пользователем с полными правами. Для типовой конфигурации на поддержке сначала решите вопрос с поддержкой (об этом ниже), иначе платформа не даст сохранить правку или потребует снять объект с поддержки.
Пошагово:
- Откройте дерево метаданных:
Конфигурация → Открыть конфигурацию. - Найдите нужный объект, например документ
ПоступлениеТоваровУслуг, и откройте его двойным щелчком. - Перейдите на закладку
Данные. В списке табличных частей выберите нужную, напримерТовары. - В нижней части найдите список реквизитов табличной части. Нажмите правой кнопкой и выберите
Добавить(или кнопку со знаком «плюс»). - В палитре свойств задайте
Имябез пробелов, напримерНомерПартииПоставщика,Синонимдля людей («Номер партии поставщика») иТип. - Закройте окно объекта.
Дальше сразу сохраняйте изменения в базу, об этом следующий раздел.
Имя реквизита — часть кода: на него ссылаются обработки, запросы, права. Переименовывать его после запуска в работу неприятно. Придумывайте имя сразу окончательным: короткое, понятное, без сокращений, которые знаете только вы.
Обновляем конфигурацию базы данных
Правка в дереве метаданных меняет только конфигурацию. Таблица в самой базе остаётся прежней, пока вы не примените изменения. Нажмите F7 или откройте меню Конфигурация → Обновить конфигурацию базы данных. Платформа покажет список изменений структуры, согласитесь с ним.
Когда в базе работают пользователи, платформа попросит монопольный доступ. Поэтому делайте это вне рабочего времени или предварительно попросите людей выйти из базы. Сеансы тех, кто остался, оборвутся.
Для файловой базы монопольный режим означает, что в базе больше никого нет. Для клиент-серверной базы платформа предложит завершить сеансы. Если нужна только отладка своей правки, можно запустить базу кнопкой запуска отладки, но на рабочую базу так изменения лучше не накатывать.
Прежде чем обновлять рабочую базу, сделайте выгрузку информационной базы (.dt) или копию каталога файловой базы. Структура таблиц меняется необратимо, откатиться можно только из копии.
Новая колонка в уже существующих документах будет пустой. Для строки это пустая строка, для числа ноль, для ссылки пустая ссылка. Если старым документам нужно значение по умолчанию, заполните их отдельной обработкой, а не вручную.
Выводим колонку в форме документа
В управляемом приложении новый реквизит сам в форме не появляется. Платформа его знает, а форма ещё нет.
Как добавить:
- В дереве метаданных раскройте объект, затем ветку
Формы, откройте форму документа. - В правой верхней панели
Элементынайдите таблицу с нужной табличной частью, напримерТовары. - В правой нижней панели
РеквизитыраскройтеОбъекти табличную часть. Новая колонка там уже есть. - Перетащите её мышью в таблицу на панели
Элементы. Появится поле формы, привязанное к данным. - Задайте у поля
Вид(поле ввода, флажок и так далее) и при необходимости ширину и заголовок.
Если колонка не нужна всем, пользователь управляет видимостью сам. В режиме 1С:Предприятие откройте форму, выберите в меню Еще команду Изменить форму и включите в списке нужное поле. В этом окне можно только скрывать и показывать то, что разработчик уже положил в форму, новых полей оно не создаёт. Поэтому, если колонки нет и в списке доступных полей, значит, её не вывели в форму в Конфигураторе.
Заодно проверьте печатные формы и обработки заполнения. Колонка, которой нет в макете, на бумаге не появится, а код, который заполняет табличную часть по шаблону, новое поле не знает.
Колонки в списках и в таблицах, созданных кодом
Динамический список
Динамический список строится по запросу. Колонку, которой нет в таблице-источнике, в нём не создать: сначала поле должно появиться в запросе. Откройте в форме списка реквизит с типом ДинамическийСписок, перейдите к его свойствам и включите настройку запроса. Добавьте поле в запрос и сохраните. Затем в панели Реквизиты у списка появится новая колонка, которую можно перетащить в таблицу формы.
Когда запрос нужно менять на лету (например, добавлять поле только для определённых ролей), используйте свойство ТекстЗапроса у динамического списка в обработчике формы, обычно ПриСозданииНаСервере. Не подменяйте запрос строкой, не проверив результат: ошибка в тексте запроса проявляется только при открытии списка.
Таблица значений
В обработках и отчётах таблицу собирают сами. Колонки задаются методом Колонки.Добавить:
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
Таблица.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
Таблица.Колонки.Добавить("Комментарий", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(100)));
Строка = Таблица.Добавить();
Строка.Номенклатура = Справочники.Номенклатура.ПустаяСсылка();
Строка.Количество = 5;
Строка.Комментарий = "тестовая строка";
Колонки таблицы значений живут только в памяти. В базу они не пишутся, и реквизитом табличной части не становятся.
Таблица на форме, созданная программно
Если таблица формы целиком динамическая, колонки можно создать в коде: массив РеквизитФормы передаётся в метод ИзменитьРеквизиты, а для вывода на форму создаются поля через Элементы.Добавить. Колонке нужен путь к данным вида ТаблицаДинамика.Колонка. Метод работает на сервере, а изменяются реквизиты формы, а не объекта. Такой приём годится для разовых отчётных форм, а не для хранения данных документа.
Реквизит самой табличной части документа из кода добавить нельзя. Метаданные меняются только в Конфигураторе.
Типы данных и ограничения при выборе
Тип реквизита выбирайте до обновления базы. Менять его потом можно, но с последствиями.
- 🔢
Число: задайте длину и точность. Для количества часто хватает 15 знаков и 3 после запятой, для суммы обычно 15 и 2. Слишком короткое поле «режет» большие значения. - 🔤
Строка: длина фиксированная или неограниченная. Неограниченную строку нельзя использовать в отборах и индексах так же свободно, как строку с длиной, поэтому для коротких кодов задавайте разумный предел. - 🔗
Ссылка: выбирайте конкретный справочник или документ. Составной тип делайте только когда без него нельзя: с ним сложнее отборы, отчёты и проверка значений. - 📅
Дата: выберите состав (дата или дата и время), от этого зависит поле ввода. - ☑️
Булево: флажок в таблице, значение по умолчанию «Ложь».
Пример выбора. Колонка «Номер партии поставщика» хранит значения вроде ПП-2026/0457. Это короткий код, поэтому тип Строка длиной 25 знаков закроет его с запасом. Колонка «Вес брутто, кг» принимает значения вроде 12,345: хватит числа длиной 10 и точностью 3, максимум тогда 9 999 999,999. Колонку «Страна происхождения» делайте ссылкой на справочник, а не строкой: так не будет опечаток, и по ней удобно отбирать.
Реквизит табличной части может быть проиндексирован для ускорения выборок, но это нужно не всем колонкам. Включайте индекс, если по колонке часто отбирают в запросах, и не ставьте на все подряд: индексы замедляют запись.
Когда меняете тип на другой при заполненных данных, платформа при обновлении базы предупредит о потере данных. Читайте это предупреждение внимательно. Укорочение строки или уменьшение разрядности числа часть значений обрежет.
Отдельно проверьте режим «Заполнение»: проверка заполнения помечает колонку обязательной, и тогда документ не запишется, пока она не заполнена у каждой строки. Для старых документов, которые перезаписывают, это неприятный сюрприз.
Типовая конфигурация и поддержка
Типовые конфигурации, например «Бухгалтерия предприятия», стоят на поддержке: часть объектов запрещено менять. Если вы добавите реквизит прямо в типовой документ, обновление релиза потребует объединения, а платформа спросит, что делать с вашим изменением. Один из вариантов — потерять его.
Есть два рабочих пути:
- ✅ Расширение конфигурации
. Объект заимствуется в расширение, а в нём уже добавляются новые реквизиты и колонки табличной части. Типовая конфигурация остаётся нетронутой. Расширения появились в платформе 8.3.6, нужна платформа не ниже этого номера. Загрузка файла расширения (
.cfe) и командаОбновить конфигурацию базы данных— отдельные шаги, не пропускайте второй. - ⚠️ Снятие объекта с поддержки. Быстро, но с этого момента вы сами отвечаете за слияние при каждом обновлении. Оправдано, когда типовой документ вы правите постоянно.
Если это не критично, посмотрите, нет ли в конфигурации дополнительных реквизитов и сведений: их можно добавлять без Конфигуратора. Для табличной части они обычно недоступны, поэтому для колонки это рабочий вариант не всегда.
Типичные ошибки и что с ними делать
| Симптом | Вероятная причина | Что проверить |
|---|---|---|
| Колонки нет в форме | Реквизит не перетащили в таблицу | Панель Реквизиты формы, раздел Объект |
| В режиме 1С:Предприятие поля нет, в Конфигураторе есть | Не обновлена конфигурация БД | Повторить F7 |
| Платформа просит монопольный доступ и не продолжает | В базе открыты сеансы | Завершить сеансы, затем повторить |
| При записи «Поле не заполнено» | Включена проверка заполнения | Свойство реквизита, значение по умолчанию |
| Значения в старых строках пустые | Новое поле всегда пустое для старых данных | Обработка перезаполнения |
| Правка пропала после обновления релиза | Объект на поддержке, правка не сохранена | Расширение или объединение |
| Число в колонке обрезается | Мала разрядность | Длина и точность в свойствах типа |
Если после обновления структуры база ведёт себя странно: не открывается форма, пишет об ошибке структуры, проверьте, что обновление завершилось. Не прерывайте окно обновления закрытием Конфигуратора. При сомнениях откатитесь на выгрузку .dt, сделанную перед работой.
Перед тем как закрыть задачу , пройдитесь по списку:
Частые вопросы
Можно ли добавить колонку в табличную часть без Конфигуратора?
Нужно ли обновлять конфигурацию базы данных после добавления колонки?
F7, таблицы в базе остаются прежними, а пользователи колонку не увидят.Что будет в старых документах после добавления колонки?
Можно ли добавить колонку в типовую конфигурацию, не ломая обновления?
Колонка есть в Конфигураторе, но в форме её нет. Почему?
Реквизиты и перетащите её в таблицу.Как добавить колонку в таблицу значений?
Колонки.Добавить с именем и описанием типов. Такая колонка существует только в памяти и в базу не записывается.