Разработка и Конфигурация · 12 мин
Как добавить колонку в таблицу 1С
Как добавить колонку в табличную часть документа, таблицу значений и динамический список в 1С. Пошаговые инструкции с кодом, проверкой результата и типичными ошибками.
Вопрос «как добавить колонку в таблицу» в 1С возникает в нескольких разных ситуациях, и способ решения зависит от того, о какой таблице идёт речь. Чаще всего требуется добавить реквизит в табличную часть документа или справочника через конфигуратор. Реже — программно добавить колонку в таблицу значений, вывести дополнительное поле в динамический список или отчёт на СКД.
Каждый сценарий имеет свои инструменты, ограничения и риски. Добавление реквизита в табличную часть типовой конфигурации затрагивает структуру базы данных и требует реструктуризации, а колонка таблицы значений существует только в оперативной памяти и ничего не сохраняет. Ниже разобраны все основные варианты с конкретными действиями и проверкой результата.
Перед любыми изменениями конфигурации обязательно сделайте резервную копию информационной базы. Ошибка при реструктуризации может привести к потере данных, особенно если база файловая и процесс прервётся.
Определите, с какой таблицей вы работаете
В терминологии 1С слово «таблица» скрывает несколько разных объектов. Табличная часть — это структура хранения данных внутри документа или справочника (например, список товаров в «Реализации»). Таблица значений — временная структура в памяти, которую программист наполняет кодом. Динамический список — таблица формы списка, данные которой формируются запросом. Отчёт на СКД — ещё один отдельный случай.
Способ добавления колонки для каждого случая принципиально разный. Если вы добавите реквизит в табличную часть, данные будут храниться в базе постоянно. Если добавите колонку в таблицу значений — после закрытия формы или завершения процедуры данные исчезнут. Поэтому сначала ответьте себе на вопрос: должна ли новая колонка сохраняться в базе или нужна только для отображения и расчёта.
Как выбрать действие
Добавление колонки в табличную часть через конфигуратор
Это самый частый сценарий. Откройте конфигуратор (потребуются права на изменение конфигурации и монопольный доступ к базе при обновлении). В дереве конфигурации найдите нужный документ или справочник, раскройте его и перейдите в ветку «Табличные части». Выберите нужную табличную часть, например «Товары».
Нажмите кнопку добавления реквизита (зелёный плюс на панели или пункт контекстного меню «Добавить»). Задайте имя реквизита — оно должно быть уникальным в рамках табличной части и начинаться с буквы. Выберите тип: строка с указанием длины, число с точностью, дата, булево или ссылка на справочник. Для строк обязательно задайте длину, иначе получите неограниченную строку, которая замедляет работу и не поддерживается в ряде операций запроса.
После добавления реквизита обновите конфигурацию базы данных: меню «Конфигурация → Обновить конфигурацию базы данных» или клавиша F7. Платформа выполнит реструктуризацию — добавит физическую колонку в таблицу базы данных. В больших базах с миллионами строк это может занять заметное время.
- 1Сделайте резервную копию базы (Файл → Сохранить копию или выгрузка в dt)
- 2Откройте конфигуратор и найдите документ или справочник в дереве конфигурации
- 3Раскройте ветку «Табличные части», выберите нужную табличную часть
- 4Добавьте реквизит: задайте имя, тип, длину или точность
- 5Нажмите F7 и подтвердите реструктуризацию
- 6Добавьте реквизит на форму документа, чтобы колонка стала видна пользователям
- 7Проверьте: откройте документ в режиме Предприятия и заполните новую колонку
Вывод колонки на форму документа
Добавленный в конфигураторе реквизит не появится на форме автоматически, если форма настраивалась вручную. Откройте форму документа, найдите в дереве элементов таблицу табличной части и перетащите новый реквизит из панели реквизитов в структуру таблицы. Убедитесь, что у элемента не снят флаг видимости.
В типовых конфигурациях на управляемых формах таблица часто связана с объектом напрямую, и достаточно добавить элемент формы с путём к данным вида «Объект.Товары.ВашРеквизит». После сохранения формы откройте документ в режиме Предприятия и убедитесь, что колонка отображается, редактируется и значение сохраняется после записи документа.
Добавление колонки в таблицу значений программно
Таблица значений создаётся и изменяется кодом. Для добавления колонки используется метод Колонки.Добавить(), где указывается имя, тип (через ОписаниеТипов), представление и ширина. Тип лучше задавать явно — это ускоряет работу и позволяет корректно сортировать и итожить данные.
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
ТЗ.Колонки.Добавить("Комментарий", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(200)));Если таблица значений получена запросом (метод Выгрузить() у результата запроса), колонки создаются автоматически по полям запроса. Дополнительную колонку можно добавить тем же методом Колонки.Добавить() после выгрузки, а затем заполнить её в цикле по строкам. Учтите: добавление колонки в большую таблицу само по себе быстрое, но заполнение значений в цикле — основная нагрузка.
Помните, что таблица значений живёт в памяти. Если её нужно показать пользователю на форме, создайте реквизит формы типа «ТаблицаЗначений» с соответствующими колонками и загрузите данные через ЗначениеВРеквизитФормы().
Колонка в динамическом списке и в отчёте
Для динамического списка (таблица формы списка документов или справочника) колонка появляется из запроса. Если список работает в автоматическом режиме, платформа сама выводит основные реквизиты; чтобы добавить своё поле, включите у списка флаг «Произвольный запрос» и допишите нужное поле в текст запроса. После этого поле станет доступно в настройках списка, и пользователь сможет вывести его через «Ещё → Изменить форму» или настройку списка.
В отчётах на СКД колонка добавляется либо в запрос набора данных (если это новое поле из базы), либо как вычисляемое поле (если значение рассчитывается из других полей). Затем поле включается в настройках отчёта на закладке «Выбранные поля». Пользователь типового отчёта может добавить уже существующее в схеме поле самостоятельно через «Настройки → Расширенная» без изменения конфигурации.
Сравнение вариантов
Данные хранятся в базе, доступны в запросах, проводках, печати. Минус: требует реструктуризации и прав на изменение конфигурации
Быстро и без изменения конфигурации, но данные не сохраняются после закрытия формы или завершения процедуры
Подходит для отображения в списках без изменения структуры данных, но значение нельзя редактировать напрямую в списке
Идеально для отчётов: не меняет базу, но доступно только внутри конкретного отчёта
Изменение типовой конфигурации и расширения
Если конфигурация типовая и находится на поддержке, прямое изменение снимет объекты с полной поддержки и усложнит обновления. Современный безопасный путь — расширение конфигурации. В расширении можно добавить собственный реквизит в табличную часть типового объекта: создайте расширение, заимствуйте документ, добавьте реквизит в его табличную часть и выведите его на заимствованную форму.
Расширение обновляется независимо от основной конфигурации и не блокирует типовые обновления. Ограничение: данные реквизитов расширения хранятся отдельно, и при отключении расширения они станут недоступны (физически не удаляются сразу, но работать с ними нельзя). Перед промышленным использованием проверьте, что ваша версия платформы поддерживает добавление реквизитов табличных частей в расширениях — эта возможность появилась в относительно свежих версиях платформы.
Проверка результата и типичные ошибки
После добавления колонки проверьте три вещи: колонка видна пользователю на форме, введённое значение сохраняется после записи и повторного открытия объекта, значение доступно в запросе или в полях отчёта. Если колонка есть в конфигураторе, но не видна пользователю — почти всегда проблема в форме: реквизит не добавлен в элементы формы или у элемента снята видимость.
Как проверить результат
Колонка видна в табличной части документа, доступна для ввода
Колонки нет на форме — реквизит не добавлен в элементы формы
После записи и повторного открытия значение на месте
Значение пропадает — реквизит не связан с данными объекта
Поле выбирается конструктором запросов из табличной части
Ошибка «поле не обнаружено» — конфигурация базы данных не обновлена
Частые вопросы
Можно ли добавить колонку в табличную часть без конфигуратора?
Нет, реквизит табличной части создаётся только на уровне конфигурации — в конфигураторе или через расширение. Пользователь без прав разработчика может лишь настроить отображение уже существующих колонок через настройку формы или списка. Альтернатива без изменения конфигурации — дополнительные реквизиты и сведения, которые поддерживаются для многих объектов в типовых конфигурациях, но они отображаются отдельно, а не как колонка табличной части.
Почему после добавления реквизита возникает ошибка «Поле не обнаружено»?
Конфигурация базы данных не обновлена. Изменения, сделанные в конфигураторе, сначала сохраняются только в конфигурации разработчика. Нажмите F7 («Обновить конфигурацию базы данных»), дождитесь реструктуризации — после этого новый реквизит станет доступен в режиме Предприятия и в запросах.
Как добавить колонку в табличную часть всех документов сразу?
Штатного массового механизма нет: реквизит добавляется в табличную часть каждого объекта отдельно. Практический приём — создать общий объект (например, использовать критерии отбора или подписки на события для заполнения), но сама структура всё равно описывается в каждом документе. Через расширение также придётся заимствовать каждый нужный объект.
Чем дополнительные реквизиты отличаются от обычной колонки?
Дополнительные реквизиты — механизм типовых конфигураций, позволяющий добавить характеристику объекту без изменения конфигурации. Они хранятся в отдельной таблице и выводятся в отдельной группе на форме, а не внутри табличной части. Для аналитики по строкам товаров они не подходят — там нужен полноценный реквизит табличной части.
Можно ли добавить колонку в таблицу значений на форме, созданную динамически?
Да. Для реквизита формы типа «ТаблицаЗначений» колонки добавляются программно через массив добавляемых реквизитов метода ИзменитьРеквизиты(), после чего создаётся элемент формы, связанный с новой колонкой. Это стандартный приём для обработок с настраиваемым набором колонок, но код заметно сложнее, чем статическая настройка формы.
Удалятся ли данные из колонки при обновлении типовой конфигурации?
Если реквизит добавлен прямо в конфигурацию, при обновлении его могут «затереть», если поставщик изменил тот же объект — обычно платформа предупреждает о различиях, но на практике самодельные реквизиты часто требуют ручного восстановления. Реквизиты расширения при обновлении основной конфигурации не затрагиваются, что и делает расширения предпочтительным способом.
Что важно запомнить
Способ добавления колонки зависит от типа таблицы: реквизит табличной части — через конфигуратор с реструктуризацией, колонка таблицы значений — методом Колонки.Добавить(), поле списка — через запрос динамического списка. Для типовых конфигураций используйте расширения, а перед реструктуризацией всегда делайте резервную копию.