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

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

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

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

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

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

Ниже разобраны оба сценария для управляемых форм (1С:Предприятие 8.3), приведены коды, риски и способы проверки результата. Для типовых конфигураций (Бухгалтерия, УТ, ERP) предпочтителен путь через расширение — он не нарушает поддержку и не мешает обновлениям.

Определяемся: нужен реквизит или только колонка на форме

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

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

Если поле вычисляемое — его удобнее вывести программно на форме. Пример: колонка «Маржа», которая считается из цены и себестоимости, или «Остаток на складе», подтягиваемый запросом при вводе строки. Хранить такие значения в базе не нужно и даже вредно: они быстро устаревают.

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

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

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

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

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

Откройте конфигуратор, в дереве конфигурации найдите нужный объект: «Документы» → нужный документ (например, «РеализацияТоваровУслуг»). Раскройте ветку «Табличные части», найдите нужную (например, «Товары») и через контекстное меню выберите «Добавить» → «Реквизит». Задайте имя (латиницей, без пробелов, например «СрокПоставки»), синоним (его увидит пользователь) и тип данных.

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

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

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

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

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

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

Заимствуйте также форму документа и добавьте колонку на неё. Сохраните расширение и обновите конфигурацию базы данных. В режиме предприятия проверьте, что расширение подключено: «Все функции» → «Стандартные» → «Управление расширениями конфигурации».

Программное добавление колонки на форму

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

bsl
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	НоваяКолонка = Элементы.Добавить("ТоварыМаржа", Тип("ПолеФормы"), Элементы.Товары);
	НоваяКолонка.ПутьКДанным = "Объект.Товары.Маржа";
	НоваяКолонка.Вид = ВидПоляФормы.ПолеВвода;
	НоваяКолонка.Заголовок = "Маржа";
КонецПроцедуры

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

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

Выбор типа данных для нового столбца

Тип реквизита определяет, что пользователь сможет ввести и как данные будут храниться. Ошибка на этом этапе — частая причина переделок: например, строка фиксированной длины 25 символов обрежет длинные комментарии, а число без дробной части не даст хранить копейки.

Назначение столбцаПодходящий типНа что обратить внимание
Комментарий, примечаниеСтрока неограниченной длиныНе индексируется, не используйте для отборов
Количество, суммаЧисло (длина и точность по задаче)Для сумм обычно нужны 2 знака после запятой
Дата поставки, срокДатаУточните состав: дата или дата и время
Ссылка на товар, склад, сотрудникаСсылка на справочникПроверьте, что выбран правильный справочник
Признак «да/нет»БулевоНа форме отображается флажком

Если тип выбран неверно и реквизит уже заполнен данными, изменение типа может привести к потере значений: например, при смене «Строка» на «Число» нечисловые значения обнулятся. Перед изменением типа в рабочей базе сделайте резервную копию.

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

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

Контрольные точки

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

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

Колонка видна в табличной части с заданным заголовком

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

Реквизит есть в метаданных, но на форме его нет — добавьте элемент на форму

Сохранение значений
Норма

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

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

Значение пропадает — реквизит добавлен только на форму, а не в данные

Проведение документа
Норма

Документ проводится без ошибок

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

Ошибки проведения — проверьте обработчики проведения, если новый реквизит в них участвует

Обновление конфигурации
Норма

Расширение не конфликтует, обновление проходит штатно

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

Новый реквизит добавлен в основную конфигурацию и мешает обновлению

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

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

Ограничения и риски

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

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

Итог

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

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

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

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

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

Добавил реквизит, но столбец не появился в документе. Что делать?

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

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

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

Как добавить столбец в табличную часть только для определённых пользователей?

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

Нужно ли менять запросы и отчёты после добавления реквизита?

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

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

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