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