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