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

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

Как добавить реквизит в расширение 1С и вывести его в форму

Пошаговая инструкция: как добавить реквизит в расширение 1С, вывести его в форму объекта, настроить типы данных и проверить результат. Частые ошибки и FAQ.

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

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

Материал рассчитан на типовые управляемые приложения («Управление торговлей», «ERP», «Комплексная автоматизация», «Бухгалтерия предприятия») в режиме управляемых форм. Для обычных форм подход отличается, но в современных конфигурациях он практически не встречается.

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

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

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

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

Создание расширения конфигурации

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

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

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

Заимствование объекта и добавление реквизита

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

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

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

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

Вывод реквизита в форму объекта

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

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

Настройте свойства элемента: заголовок (по умолчанию берётся из синонима реквизита), подсказку, доступность, отметку незаполненного значения. Чтобы реквизит попал в форму списка, заимствуйте и её, добавив колонку аналогично — но учитывайте, что сортировка и отбор по реквизиту расширения в динамическом списке могут работать медленнее, чем по типовым полям.

Если форма генерируется программно

В некоторых типовых конфигурациях формы объектов создаются кодом (через БСП или собственные механизмы), и заимствованная форма может не содержать явного дерева элементов. В этом случае добавьте элемент в обработчике ПриСозданииНаСервере заимствованной формы программно: создайте элемент через Элементы.Добавить(), укажите родителя, тип Тип("ПолеФормы") и привяжите ПутьКДанным к реквизиту.

bsl
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    НовыйЭлемент = Элементы.Добавить("Расш1_КомментарийПоставки", Тип("ПолеФормы"), Элементы.ГруппаШапка);
    НовыйЭлемент.ПутьКДанным = "Объект.Расш1_КомментарийПоставки";
    НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
    НовыйЭлемент.Заголовок = НСтр("ru = 'Комментарий поставки'");
КонецПроцедуры

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

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

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

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

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

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

Поле видно в нужной группе, заголовок корректный

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

Поля нет на форме или оно появилось в конце формы без привязки к группе

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

Значение сохраняется и отображается после повторного открытия

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

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

Окно реструктуризации
Норма

Изменяются только реквизиты с префиксом расширения

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

В списке есть типовые объекты с удалением или изменением

Права пользователей
Норма

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

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

Поле недоступно — проверьте роли и функциональные опции

Ограничения и частые ошибки

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

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

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

Типичные ошибки
01
Не выполнено обновление конфигурации базы данных — реквизит существует в конфигураторе, но недоступен в режиме предприятия
02
Реквизит добавлен в объект, но не размещён на форме — пользователи его не видят
03
Заимствована форма целиком — после обновления типовой конфигурации новые элементы поставщика не появляются; для изменчивых форм лучше программное добавление
04
Строка неограниченной длины использована для реквизита, по которому нужен отбор или сортировка — поиск работает медленно или недоступен
05
Реквизит расширения ожидается в типовом обмене данными — типовые планы обмена его не переносят без отдельной настройки

Альтернативы: когда расширение не нужно

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

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

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

Реквизит в расширении

Подходит для одного-двух полей, участвующих в отборах и отчётах. Требует конфигуратора и обновления базы

Дополнительные реквизиты БСП

Добавляются пользователем без конфигуратора, выводятся на формы автоматически. Медленнее в запросах при больших объёмах

Собственный регистр сведений в расширении

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

Итог

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

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

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

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

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

Почему реквизит не виден пользователям, хотя в конфигураторе он есть?

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

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

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

Участвует ли реквизит расширения в типовых отчётах?

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

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

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

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

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