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