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