К статье
Практический материал

Разработка и Конфигурация · 12 мин

Как добавить колонку в таблицу 1С

Как добавить колонку в табличную часть документа, таблицу значений и динамический список в 1С. Пошаговые инструкции с кодом, проверкой результата и типичными ошибками.

Вопрос «как добавить колонку в таблицу» в 1С возникает в нескольких разных ситуациях, и способ решения зависит от того, о какой таблице идёт речь. Чаще всего требуется добавить реквизит в табличную часть документа или справочника через конфигуратор. Реже — программно добавить колонку в таблицу значений, вывести дополнительное поле в динамический список или отчёт на СКД.

Каждый сценарий имеет свои инструменты, ограничения и риски. Добавление реквизита в табличную часть типовой конфигурации затрагивает структуру базы данных и требует реструктуризации, а колонка таблицы значений существует только в оперативной памяти и ничего не сохраняет. Ниже разобраны все основные варианты с конкретными действиями и проверкой результата.

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

Определите, с какой таблицей вы работаете

В терминологии 1С слово «таблица» скрывает несколько разных объектов. Табличная часть — это структура хранения данных внутри документа или справочника (например, список товаров в «Реализации»). Таблица значений — временная структура в памяти, которую программист наполняет кодом. Динамический список — таблица формы списка, данные которой формируются запросом. Отчёт на СКД — ещё один отдельный случай.

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

Маршрут решения

Как выбрать действие

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

Добавление колонки в табличную часть через конфигуратор

Это самый частый сценарий. Откройте конфигуратор (потребуются права на изменение конфигурации и монопольный доступ к базе при обновлении). В дереве конфигурации найдите нужный документ или справочник, раскройте его и перейдите в ветку «Табличные части». Выберите нужную табличную часть, например «Товары».

Нажмите кнопку добавления реквизита (зелёный плюс на панели или пункт контекстного меню «Добавить»). Задайте имя реквизита — оно должно быть уникальным в рамках табличной части и начинаться с буквы. Выберите тип: строка с указанием длины, число с точностью, дата, булево или ссылка на справочник. Для строк обязательно задайте длину, иначе получите неограниченную строку, которая замедляет работу и не поддерживается в ряде операций запроса.

После добавления реквизита обновите конфигурацию базы данных: меню «Конфигурация → Обновить конфигурацию базы данных» или клавиша F7. Платформа выполнит реструктуризацию — добавит физическую колонку в таблицу базы данных. В больших базах с миллионами строк это может занять заметное время.

Порядок действий в конфигураторе
  1. 1
    Сделайте резервную копию базы (Файл → Сохранить копию или выгрузка в dt)
  2. 2
    Откройте конфигуратор и найдите документ или справочник в дереве конфигурации
  3. 3
    Раскройте ветку «Табличные части», выберите нужную табличную часть
  4. 4
    Добавьте реквизит: задайте имя, тип, длину или точность
  5. 5
    Нажмите F7 и подтвердите реструктуризацию
  6. 6
    Добавьте реквизит на форму документа, чтобы колонка стала видна пользователям
  7. 7
    Проверьте: откройте документ в режиме Предприятия и заполните новую колонку

Вывод колонки на форму документа

Добавленный в конфигураторе реквизит не появится на форме автоматически, если форма настраивалась вручную. Откройте форму документа, найдите в дереве элементов таблицу табличной части и перетащите новый реквизит из панели реквизитов в структуру таблицы. Убедитесь, что у элемента не снят флаг видимости.

В типовых конфигурациях на управляемых формах таблица часто связана с объектом напрямую, и достаточно добавить элемент формы с путём к данным вида «Объект.Товары.ВашРеквизит». После сохранения формы откройте документ в режиме Предприятия и убедитесь, что колонка отображается, редактируется и значение сохраняется после записи документа.

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

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

bsl
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
ТЗ.Колонки.Добавить("Комментарий", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(200)));

Если таблица значений получена запросом (метод Выгрузить() у результата запроса), колонки создаются автоматически по полям запроса. Дополнительную колонку можно добавить тем же методом Колонки.Добавить() после выгрузки, а затем заполнить её в цикле по строкам. Учтите: добавление колонки в большую таблицу само по себе быстрое, но заполнение значений в цикле — основная нагрузка.

Помните, что таблица значений живёт в памяти. Если её нужно показать пользователю на форме, создайте реквизит формы типа «ТаблицаЗначений» с соответствующими колонками и загрузите данные через ЗначениеВРеквизитФормы().

Колонка в динамическом списке и в отчёте

Для динамического списка (таблица формы списка документов или справочника) колонка появляется из запроса. Если список работает в автоматическом режиме, платформа сама выводит основные реквизиты; чтобы добавить своё поле, включите у списка флаг «Произвольный запрос» и допишите нужное поле в текст запроса. После этого поле станет доступно в настройках списка, и пользователь сможет вывести его через «Ещё → Изменить форму» или настройку списка.

В отчётах на СКД колонка добавляется либо в запрос набора данных (если это новое поле из базы), либо как вычисляемое поле (если значение рассчитывается из других полей). Затем поле включается в настройках отчёта на закладке «Выбранные поля». Пользователь типового отчёта может добавить уже существующее в схеме поле самостоятельно через «Настройки → Расширенная» без изменения конфигурации.

Сравнение вариантов

Реквизит табличной части

Данные хранятся в базе, доступны в запросах, проводках, печати. Минус: требует реструктуризации и прав на изменение конфигурации

Колонка таблицы значений

Быстро и без изменения конфигурации, но данные не сохраняются после закрытия формы или завершения процедуры

Поле динамического списка

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

Вычисляемое поле СКД

Идеально для отчётов: не меняет базу, но доступно только внутри конкретного отчёта

Изменение типовой конфигурации и расширения

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

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

Проверка результата и типичные ошибки

После добавления колонки проверьте три вещи: колонка видна пользователю на форме, введённое значение сохраняется после записи и повторного открытия объекта, значение доступно в запросе или в полях отчёта. Если колонка есть в конфигураторе, но не видна пользователю — почти всегда проблема в форме: реквизит не добавлен в элементы формы или у элемента снята видимость.

Типичные ошибки
01
Добавили реквизит, но не обновили конфигурацию базы данных — при обращении к реквизиту возникает ошибка «Поле не обнаружено»
02
Забыли вывести реквизит на форму — колонка существует, но пользователи её не видят
03
Не задали длину строки — получили неограниченную строку, которую нельзя использовать в объединениях запросов и которая замедляет работу
04
Изменили типовую конфигурацию напрямую вместо расширения — усложнили себе все будущие обновления
05
Добавили колонку в таблицу значений и ожидали, что данные сохранятся в базе — таблица значений живёт только в памяти
06
Не сделали резервную копию перед реструктуризацией — при сбое на большой базе восстановление затруднено
Контрольные точки

Как проверить результат

Отображение колонки
Норма

Колонка видна в табличной части документа, доступна для ввода

Тревожный признак

Колонки нет на форме — реквизит не добавлен в элементы формы

Сохранение данных
Норма

После записи и повторного открытия значение на месте

Тревожный признак

Значение пропадает — реквизит не связан с данными объекта

Доступность в запросе
Норма

Поле выбирается конструктором запросов из табличной части

Тревожный признак

Ошибка «поле не обнаружено» — конфигурация базы данных не обновлена

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

Можно ли добавить колонку в табличную часть без конфигуратора?

Нет, реквизит табличной части создаётся только на уровне конфигурации — в конфигураторе или через расширение. Пользователь без прав разработчика может лишь настроить отображение уже существующих колонок через настройку формы или списка. Альтернатива без изменения конфигурации — дополнительные реквизиты и сведения, которые поддерживаются для многих объектов в типовых конфигурациях, но они отображаются отдельно, а не как колонка табличной части.

Почему после добавления реквизита возникает ошибка «Поле не обнаружено»?

Конфигурация базы данных не обновлена. Изменения, сделанные в конфигураторе, сначала сохраняются только в конфигурации разработчика. Нажмите F7 («Обновить конфигурацию базы данных»), дождитесь реструктуризации — после этого новый реквизит станет доступен в режиме Предприятия и в запросах.

Как добавить колонку в табличную часть всех документов сразу?

Штатного массового механизма нет: реквизит добавляется в табличную часть каждого объекта отдельно. Практический приём — создать общий объект (например, использовать критерии отбора или подписки на события для заполнения), но сама структура всё равно описывается в каждом документе. Через расширение также придётся заимствовать каждый нужный объект.

Чем дополнительные реквизиты отличаются от обычной колонки?

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

Можно ли добавить колонку в таблицу значений на форме, созданную динамически?

Да. Для реквизита формы типа «ТаблицаЗначений» колонки добавляются программно через массив добавляемых реквизитов метода ИзменитьРеквизиты(), после чего создаётся элемент формы, связанный с новой колонкой. Это стандартный приём для обработок с настраиваемым набором колонок, но код заметно сложнее, чем статическая настройка формы.

Удалятся ли данные из колонки при обновлении типовой конфигурации?

Если реквизит добавлен прямо в конфигурацию, при обновлении его могут «затереть», если поставщик изменил тот же объект — обычно платформа предупреждает о различиях, но на практике самодельные реквизиты часто требуют ручного восстановления. Реквизиты расширения при обновлении основной конфигурации не затрагиваются, что и делает расширения предпочтительным способом.

Итог

Что важно запомнить

Способ добавления колонки зависит от типа таблицы: реквизит табличной части — через конфигуратор с реструктуризацией, колонка таблицы значений — методом Колонки.Добавить(), поле списка — через запрос динамического списка. Для типовых конфигураций используйте расширения, а перед реструктуризацией всегда делайте резервную копию.