Добавление новых полей в 1С 8.3: конфигуратор, расширения и код

· 9 мин

Содержание

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

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

Какой способ добавления поля подходит вашей задаче

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

🔹 Реквизит в конфигураторе — когда база самописная или уже снята с поддержки. Поле хранится в базе, доступно в запросах и отчётах.

🔹 Реквизит в расширении — для типовой конфигурации (Бухгалтерия, ЗУП, УТ). Типовая остаётся на полной поддержке, ваше поле живёт отдельным модулем и не слетает при обновлении релиза.

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

Куда и зачем добавляется поле?

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

Это базовый способ. Поле становится полноценной колонкой в таблице базы.

  1. Откройте конфигуратор: Конфигурация → Открыть конфигурацию.
  2. В дереве найдите объект — например Справочники → Контрагенты.
  3. Раскройте ветку Реквизиты, правой кнопкой — Добавить.
  4. В палитре свойств задайте Имя (латиница, без пробелов, например ДатаПроверки) и Синоним — то, что увидит пользователь.
  5. Выберите Тип. Для текста это Строка: укажите длину; 0 означает неограниченную строку — ставьте её только там, где длина действительно непредсказуема, иначе поле нельзя проиндексировать.
  6. При необходимости включите Индексирование, если по полю будут искать или отбирать.

Для ссылочных данных выбирайте тип СправочникСсылка.<Имя> или ДокументСсылка.<Имя> — поле станет ссылкой на другой объект. Если значение бывает разного типа, задайте составной тип и отметьте нужные типы в списке.

Полезные свойства реквизита, которые часто забывают:

  • Проверка заполнения — поставьте «Выдавать ошибку», и платформа не даст провести документ с пустым обязательным полем.
  • Заполнять / Значение заполнения — задаёт значение по умолчанию для новых объектов (у существующих записей оно не меняется).
  • Многострочный режим — для длинных текстовых реквизитов, чтобы поле на форме разворачивалось в несколько строк.

После этого изменения существуют только в конфигурации. Чтобы они попали в базу данных, нажмите F7 (Конфигурация → Обновить конфигурацию базы данных).

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

У существующих записей новый реквизит получит пустое значение своего типа: пустую строку, 0, пустую дату или пустую ссылку. Чтобы заполнить его осмысленно, запустите разовую обработку или пропишите заполнение в модуле объекта.

Как вывести новое поле на форму — вручную и программно

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

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

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

&НаСервере
Процедура ДобавитьПолеКомментарий()

    НовыеРеквизиты = Новый Массив;
    НовыеРеквизиты.Добавить(
        Новый РеквизитФормы("Комментарий", Новый ОписаниеТипов("Строка")));
    ИзменитьРеквизиты(НовыеРеквизиты);

    НовоеПоле = Элементы.Добавить("Комментарий", Тип("ПолеФормы"));
    НовоеПоле.Вид = ВидПоляФормы.ПолеВвода;
    НовоеПоле.ПутьКДанным = "Комментарий";

КонецПроцедуры

Метод ИзменитьРеквизиты() принадлежит управляемой форме и работает только на сервере. Вызывайте процедуру из обработчика ПриСозданииНаСервере.

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

Чтобы поле встало в конкретную группу, третьим параметром Элементы.Добавить() передают родителя, например Элементы.ГруппаШапка. Свойством ТолькоПросмотр поле делают нередактируемым, а свойством Видимость — скрывают по условию. Так собирают формы, которые меняют состав полей в зависимости от вида операции или прав пользователя.

Добавление колонки в табличную часть документа

Отдельный частый случай — добавить поле не в шапку, а в табличную часть: новую колонку в строки товаров, услуг или начислений.

  1. В конфигураторе откройте документ, раскройте ветку Табличные части и выберите нужную (например Товары).
  2. Внутри неё раскройте Реквизиты и добавьте новый реквизит — так же, как у обычного объекта, с именем и типом.
  3. Обновите структуру базы (F7).
  4. Откройте форму документа. В дереве реквизитов формы новая колонка появится внутри таблицы; перетащите её в таблицу на форме или добавьте колонку программно в элемент-таблицу.

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

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

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

Порядок действий:

  1. Конфигурация → Расширения конфигурации. Создайте новое расширение, задайте имя и префикс.
  2. Откройте конфигурацию расширения. Найдите нужный типовой объект, правой кнопкой — команда добавления объекта в расширение (заимствование). Объект станет «заимствованным».
  3. В заимствованном объекте добавьте собственный реквизит — так же, как в конфигураторе. Имя лучше начинать с префикса расширения, чтобы не конфликтовать с типовыми именами.
  4. Сохраните расширение и обновите структуру базы (F7).

Если расширение приходит отдельным файлом .cfe, его сначала загружают (Конфигурация → Расширения конфигурации → загрузить), и только потом выполняют Обновить конфигурацию базы данных. Это два разных шага: загрузка файла структуру базы ещё не меняет.

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

Выносить новое поле на типовую форму из расширения тоже удобнее через саму форму расширения: заимствуете форму и добавляете на неё элемент, привязанный к вашему реквизиту.

Новые поля в регистрах сведений и накопления

В регистрах «поля» называются иначе, и от выбора зависит логика учёта. Путать их нельзя.

Что добавляемРегистр сведенийРегистр накопления
Разрез, по которому различаются записиИзмерениеИзмерение
Числовой показатель, который суммируетсяРесурсРесурс
Справочная информацияРеквизитРеквизит

Добавляется поле так же: раскрываете ветку Измерения, Ресурсы или Реквизиты объекта, правой кнопкой — Добавить, задаёте имя и тип.

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

Если новое поле — просто пояснение к записи и в отборах или итогах не участвует, делайте его реквизитом, а не измерением. Лишнее измерение раздувает индекс регистра и замедляет запись.

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

Контроль изменений и производительность

Несколько приёмов, без которых добавление полей в рабочей базе рано или поздно приводит к проблемам.

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

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

📌 Индексы — осознанно. Индексирование ускоряет отбор по полю, но замедляет запись и увеличивает базу. Индексируйте только те реквизиты, по которым реально идёт поиск или отбор в списках и отчётах.

📌 Длина строки имеет значение. Неограниченная строка (длина 0) хранится отдельно и не индексируется. Для кодов, артикулов, коротких пометок задавайте конкретную длину.

📌 Сначала копия, потом рабочая база. Любое изменение структуры сперва проверяйте на копии рабочей базы: добавили поле, обновили структуру, прогнали типовые операции. Так вы поймаете конфликт имён или долгий пересчёт итогов до того, как он остановит работу бухгалтерии.

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

Перед изменением рабочей базы пройдитесь по короткому чек-листу.

Перед обновлением структуры базы
Выполнено: 0 / 5

Частые ошибки при добавлении полей

🔸 Реквизит добавлен, но его нет в базе. Забыли обновить структуру (F7). Изменения в конфигураторе и в базе данных — это два разных состояния, пока не нажата кнопка обновления.

🔸 Поле есть в конфигураторе, но не видно на форме. Управляемая форма не подхватывает новые реквизиты автоматически, если она уже редактировалась. Вынесите поле на форму вручную или программно.

🔸 Не удаётся обновить базу — «требуется монопольный доступ». В базе работают пользователи или висит сеанс. Структуру базы меняют только при монопольном доступе.

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

🔸 Имя реквизита в расширении совпало с типовым. Приводит к ошибкам при применении расширения. Используйте префикс расширения в именах.

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

Появится ли новое поле в базе сразу после добавления реквизита?
Нет. В конфигураторе вы меняете только конфигурацию. Поле попадает в таблицы базы лишь после Обновить конфигурацию базы данных (F7) и требует монопольного доступа.
Можно ли добавить поле, не снимая конфигурацию с поддержки?
Да, через расширение конфигурации. Вы заимствуете типовой объект и добавляете собственный реквизит. Типовая остаётся на поддержке и обновляется штатно.
Почему реквизит есть в конфигураторе, а на форме его нет?
Отредактированная управляемая форма не добавляет новые поля сама. Откройте форму и перетащите реквизит из дерева объекта в элементы либо добавьте поле программно в ПриСозданииНаСервере.
Что будет со старыми записями после добавления реквизита?
У них новый реквизит получит пустое значение своего типа: пустую строку, 0, пустую дату, пустую ссылку. Чтобы заполнить их данными, запустите разовую обработку.
В чём разница между измерением, ресурсом и реквизитом регистра?
Измерение — разрез, по которому различаются записи. Ресурс — числовой показатель, который суммируется. Реквизит — дополнительная справочная информация, в итогах не участвует.
Нужно ли перезапускать сеансы пользователей после добавления поля?
Да. Структура базы меняется при монопольном обновлении, когда все вышли. Чтобы увидеть новое поле, пользователям нужно снова зайти в программу — работавшие до обновления сеансы его не подхватят.