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

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

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

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

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

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

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

Создание расширения и подготовка к работе

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

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

Заимствование формы в расширение

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

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

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

Добавление реквизита: в объект или в форму

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

Реквизит объекта (хранится в базе)

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

Реквизит формы (только на время работы с формой)

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

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

Реквизит объекта метаданных

Хранится в базе, доступен в запросах, отчётах и обменах. Требует реструктуризации при обновлении. Подходит для постоянных данных.

Реквизит формы

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

Программное создание элемента

Элемент и реквизит создаются кодом в ПриСозданииНаСервере. Гибче, но сложнее в поддержке и отладке.

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

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

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

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

Программное добавление реквизита и элемента

Если элемент нужно создавать динамически (например, по условию), используйте обработчик ПриСозданииНаСервере в модуле заимствованной формы. Сначала добавьте реквизит формы методом ИзменитьРеквизиты, затем создайте элемент формы:

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Добавляемые = Новый Массив;

Добавляемые.Добавить(Новый РеквизитФормы("Расш_Комментарий",

Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(150))));

ИзменитьРеквизиты(Добавляемые);

Элемент = Элементы.Добавить("Расш_Комментарий", Тип("ПолеФормы"));

Элемент.ПутьКДанным = "Расш_Комментарий";

Элемент.Вид = ВидПоляФормы.ПолеВвода;

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

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

bsl
Элемент = Элементы.Добавить("Расш_Поле", Тип("ПолеФормы"), Родитель);
Элемент.ПутьКДанным = "Расш_Поле";

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

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

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

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

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

Поле видно на форме в нужной группе

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

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

Запись значения
Норма

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

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

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

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

Расширение остаётся работоспособным после обновления

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

Ошибки контроля применимости — изменилась типовая форма

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

Ограничения расширений и альтернативы

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

Итог

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

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

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

Можно ли добавить реквизит на форму списка, а не форму объекта?

Да. Форма списка заимствуется так же, как форма объекта. Если реквизит добавлен в объект метаданных, он доступен в динамическом списке; добавьте колонку в таблицу списка и укажите путь к данным через основной реквизит формы, например «Список.Расш_Реквизит».

Что произойдёт с расширением при обновлении типовой конфигурации?

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

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

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

Как скрыть типовой реквизит, который мешает на форме?

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

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

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

Расширение подключено, но форма открывается без изменений. В чём причина?

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