Инициализация реквизитов при создании нового объекта
Один из методов упрощения работы пользователя - это заполнение реквизитов нового объекта (элемент справочник, документ) значениями по умолчанию. Реализовать заполнение реквизитов можно двумя способами:
Второй способ намного проще, т.к. он предусмотрен платформой и рекомендован к использованию. Создадим в модуле объекта обработчик события ОбработкаЗаполнения и напишем программный код по заполнению реквизитов объекта без каких-либо проверок, потому что данное событие возникает при интерактивном вводе нового объекта. Более подробное описание обработчика события см. в синтакс-помощнике.
Пару слов из личного опыта: не стоит вешать тяжелые операции по инициализации реквизитов на события, которые вызываются при открытии объекта, так как они будут существенно увеличивать время открытия объекта. Предоставьте выполнение таких операций на выбор пользователю, создав команду формы.
- в обработчике события формы элемента - ПриСозданииНаСервере;
- в обработчике события объекта - ОбработкаЗаполнения.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Если ссылка у объекта пустая, значит он еще не записан,
// а следовательно он является новым объектом.
ЭтоНовыйОбъект = Объект.Ссылка.Пустая();
// Если объект новый, то выполняем заполнение реквизитов.
Если ЭтоНовыйОбъект Тогда
Объект.Ответственный = Пользователи.ТекущийПользователь();
Объект.Комментарий = "Документ создан " + Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");
КонецЕсли;
КонецПроцедуры
Второй способ намного проще, т.к. он предусмотрен платформой и рекомендован к использованию. Создадим в модуле объекта обработчик события ОбработкаЗаполнения и напишем программный код по заполнению реквизитов объекта без каких-либо проверок, потому что данное событие возникает при интерактивном вводе нового объекта. Более подробное описание обработчика события см. в синтакс-помощнике.
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
ЭтотОбъект.Ответственный = Пользователи.ТекущийПользователь();
ЭтотОбъект.Комментарий = "Документ создан " + Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");
КонецПроцедуры
Пару слов из личного опыта: не стоит вешать тяжелые операции по инициализации реквизитов на события, которые вызываются при открытии объекта, так как они будут существенно увеличивать время открытия объекта. Предоставьте выполнение таких операций на выбор пользователю, создав команду формы.
Второй способ не годится, так как событие "ОбработкаЗаполнения" не возникает, например, при копировании объекта. И в этом случае вы получите новый объект со "старым" пользователем и датой, а не текущими.
ОтветитьУдалитьДа, при втором способе нужно учитывать, что при копировании (как интерактивном, так и средствами встроенного языка), обработчик "ОбработкаЗаполнения" не вызывается, следовательно нужно в обработчике "ПриКопировании" дополнительно прописать логику заполнения. Спасибо за замечание!
Удалить