HelpF.pro

Последовательность событий при открытии формы нового элемента

Последовательность событий, которые происходят при открытии формы нового элемента, можно представить следующей схемой:

Прежде всего, при заполнении нового объекта данными, можно попробовать обойтись вообще без написания какого-либо кода. Для этого у реквизитов объектов конфигурации есть свойства ЗначениеЗаполнения и ЗаполнятьИзДанныхЗаполнения.

Эти свойства позволяют визуально (в конфигураторе) задать правила, по которым реквизит будет заполняться данными при создании нового объекта.

Если этих возможностей недостаточно, то тогда нужно использовать возможности встроенного языка.

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

  • при интерактивном создании нового объекта,
  • при вводе на основании,
  • при выполнении метода объекта Заполнить().

При этом параметр Основание, передаваемый в этот обработчик, может иметь различные значения в зависимости от того, каким образом создается новый элемент.

Например, он может иметь тип ссылки, если новый объект вводится на основании.

Или он может иметь тип Структура, если новый объект создается интерактивной командой из списка, в котором установлен отбор. В этом случае структура будет содержать значения элементов отбора этого списка.

Также этот параметр может иметь тип Неопределено, если новый элемент создается интерактивной командой из панели действий. То есть в своем алгоритме начального заполнения полезно анализировать этот параметр.

Что касается внешнего вида формы нового объекта, то им нужно управлять в обработчике события формы ПриСозданииНаСервере.

Это событие возникает и для новых, и для существующих объектов. Поэтому в нем нужно убедиться в том, что открывается форма именно нового объекта. Убедиться в этом можно проанализировав параметр формы Ключ.

Если объект новый, в этом параметре будет пустая ссылка. Если это существующий объект – в этом параметре будет ссылка на этот объект:

Код 1C v 8.2 УП
 &НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Ключ.Пустой() Тогда //ЭтоНовый

КонецЕсли; 
КонецПроцедуры

Если требуется выполнять какие-то действия в обработчике события формы ПриОткрытии, то в нем ситуация аналогичная, нужно анализировать параметр формы Ключ. 

Для тех кто не хочет читать все что выше, код проверки на ЭтоНовый в Управляемом приложении:

Код 1C v 8.3
 &НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Ключ.Пустой() Тогда //ЭтоНовый

КонецЕсли; 
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
//1С советует и тут использовать Параметры.Ключ.Пустой()
// но можно и так:
Если Объект.Ссылка.Пустая() Тогда //ЭтоНовый
//
КонецЕсли;
КонецПроцедуры

Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq83/view/1829.html