Почему при обновлении формы в расширении 1С появляется список расширений для выбора?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Выясняем причину: почему платформа предлагает выбор?

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

В такой ситуации, когда вы в конфигураторе открываете заимствованную форму в одном из расширений и видите предложение "Обновить форму в расширении", платформа 1С сталкивается с неоднозначностью. Она не может однозначно определить, какое именно из расширений вы имеете в виду для обновления. Ведь по идее эта форма может быть помещена в несколько расширений.

Этот механизм можно сравнить с процессом "добавления в расширение". Если вы пытаетесь добавить какой-либо объект в расширение, а у вас открыто несколько расширений, платформа также предложит вам выбрать, в какое именно расширение вы хотите добавить этот объект. В нашем случае с обновлением формы происходит нечто похожее: платформа просит нас уточнить контекст действия. Вероятной причиной такого поведения является потеря контекста при вызове функции обновления формы, то есть платформа как бы "забывает", из какого именно расширения была вызвана эта функция.

Что означает диалоговое окно и что в нем выбирать?

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

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

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

Подробный механизм работы с формами в расширениях

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

Когда мы с вами заимствуем форму из основной конфигурации в расширение, ее визуальная часть фиксируется в расширении. Эта копия формы становится "сохраненной" в рамках расширения. Любые наши доработки, внесенные в эту форму внутри расширения, делают ее "расширяющей".

При запуске конфигурации 1С:Предприятие в пользовательском режиме, система тщательно анализирует изменения. Она сравнивает текущее состояние формы в основной конфигурации с ее состоянием в расширяющей форме.

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

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

Практические рекомендации по работе с формами и расширениями

Чтобы минимизировать подобные ситуации и обеспечить более стабильную и управляемую разработку, мы рекомендуем придерживаться следующих практических советов:

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

    Пример программного изменения видимости элемента:

    
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
        Если ПараметрыСеанса.ТекущийПользователь.РольДоступна("РасширенныеПрава") Тогда
            Элементы.ГруппаДополнительныеРеквизиты.Видимость = Истина;
        Иначе
            Элементы.ГруппаДополнительныеРеквизиты.Видимость = Ложь;
        КонецЕсли;
    КонецПроцедуры
    
  2. Избегайте множественных расширений для одного объекта: Старайтесь не создавать несколько расширений, которые изменяют один и тот же объект метаданных, в частности, одну и ту же форму. Когда несколько расширений конкурируют за один и тот же ресурс, это может привести к запутыванию логики, неочевидным конфликтам и значительным сложностям при отладке и поддержке. Исключением могут быть временные исправления ошибок ("хотфиксы"), которые планируется устранить в следующем релизе основной конфигурации. В таких случаях можно создать отдельное временное расширение, но после выхода официального исправления его следует удалить.
  3. Права доступа и монопольный режим при обновлении: При выполнении операций обновления расширения, особенно если оно затрагивает важные метаданные или формы, убедитесь, что у вас есть права администратора. Также крайне желательно, чтобы база находилась в монопольном режиме. Это означает, что все пользователи должны выйти из программы 1С:Предприятие, чтобы избежать блокировок и обеспечить целостность данных в процессе обновления.
  4. Перезапуск программы: После любого обновления расширения или конфигурации (включая обновление форм), обязательно перезапустите программу 1С:Предприятие. Это гарантирует, что все изменения будут корректно применены и кэшированные данные будут обновлены. Без перезапуска вы можете продолжать видеть старое поведение или некорректно отображаемые формы.

Понимание этих нюансов и применение рекомендуемых практик значительно упростит вашу работу с расширениями в 1С, сделает процесс разработки более предсказуемым и уменьшит количество непредвиденных ситуаций.

← На главную