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