Посылает оповещение владельцу формы о записи нового объекта и передает ему ссылку на этот объект.
Синтаксис
ОповеститьОЗаписиНового(<Объект>)Полное описание, параметры и ограничения
ФормаКлиентскогоПриложения.ОповеститьОЗаписиНового (ClientApplicationForm.NotifyWritingNew)
ФормаКлиентскогоПриложения (ClientApplicationForm)
ОповеститьОЗаписиНового (NotifyWritingNew)
Доступен, начиная с версии 8.2.
Синтаксис:
ОповеститьОЗаписиНового(<Объект>)
Параметры:
<Объект> (необязательный)
Тип: Ссылка на объект информационной базы.
Добавленный объект.
Описание:
Посылает оповещение владельцу формы о записи нового объекта и передает ему ссылку на этот объект.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, толстый клиент, мобильное приложение (клиент).
Примечание:
Может быть использован, если добавление нового объекта при помощи подчиненной формы необходимо обработать в форме владельце.
Использование в версии:
Доступен, начиная с версии 8.2.
Методическая информация
Практические примеры
Записать одну свою карточку из общей формы и уведомить форму-владельца
Редактор не является стандартной объектной формой, поэтому явное оповещение владельца после реальной записи необходимо. Отображение изменения получает действительную ссылку и вид Добавление, а не выдуманный ключ.
Где и как запускать
Полный модуль собственной общей управляемой формы; серверная запись одной своей карточки, затем клиентские отображение изменения и оповещение владельца.
Подготовка
Создайте с нуля пустую конфигурацию УчебныеОповещенияФорм85 на платформе8.5.1.1343, управляемое приложение, Такси. Без рабочих данных, расширений, подписок, разделителей и чужих обработчиков.
Справочники → УчебныеКарточки85: неиерархический, Наименование длиной80, стандартная автонумерация кода. Добавьте реквизит Метка85 типа Строка длиной36. В новом справочнике исходно нет ни одного элемента.
Создайте управляемую форму списка УчебныйСписок85 и назначьте основной формой списка. Основной реквизит Список типа ДинамическийСписок, главная таблица Справочник.УчебныеКарточки85, без произвольного запроса. Таблица формы Карточки привязана к Список; в ней выводятся Код и Наименование.
В списке создайте реквизиты Метка85 типа Строка36, ПерваяКарточка85, ВтораяКарточка85, НоваяКарточка85 типа СправочникСсылка.УчебныеКарточки85, ПодтверждаюПустойСтенд типа Булево и Итог85 типа Строка неограниченной длины. Ссылки, метку и Итог показывайте только для просмотра.
Добавьте команды и кнопки ПодготовитьСвоиКарточки85, ОткрытьНаблюдателя85, ПерейтиККниге85, ПерейтиКРучке85, ОткрытьСвойРедактор85. Действия — одноимённые процедуры основного модуля списка. Назначьте форме ОбработкаЗаписиНового с точной сигнатурой из модуля.
Общие формы → УчебныйНаблюдатель85, управляемая. Параметр Метка85 типа Строка36; реквизиты Метка85 Строка36, АктивнаяКарточка85 типа СправочникСсылка.УчебныеКарточки85 и Итог85 Строка. Все отображаемые поля только для просмотра. Вставьте модуль наблюдателя и назначьте ПриСозданииНаСервере и ОбработкаАктивизации.
Общие формы → УчебныйРедактор85, управляемая. Параметр Метка85 Строка36; реквизиты Метка85 Строка36, Наименование85 Строка80, СозданнаяКарточка85 типа СправочникСсылка.УчебныеКарточки85, ПодтверждаюЗапись85 Булево, Итог85 Строка. Метка, ссылка и итог только для просмотра; добавьте кнопку ЗаписатьСвоюНовую85 и назначьте ПриСозданииНаСервере.
Справочник → Формы → УчебнаяКарточка85, управляемая форма объекта, основная форма объекта. Основной реквизит Объект автоматически связан с учебным справочником. Добавьте несохраняемые реквизиты ПодтверждаюОпыт85 Булево и Итог85 Строка, команду ПроверитьСвоюБлокировку85 и её кнопку; модуль объектной формы указан отдельно.
Нажмите F7 и обновите только новый стенд. runtimeVerifiedScenarios=0: 1С здесь не запускалась, учебные элементы не создавались, блокировки и оповещения не выполнялись. Код и проверки подготовлены статически.
Вручную откройте свой список, подтвердите пустой стенд и подготовьте две карточки. Подготовка реально записывает Книга и Ручка только при вашем будущем запуске; обе получают один новый UUID. Повторная подготовка непустого справочника отклоняется, автоматического удаления данных нет.
Все дополнительные модули вставляются в свои отдельные формы, не в основной модуль списка. Открывайте наблюдателя и редактор только кнопками списка: ПолучитьФорму передаёт реального владельца, метку и ключ уникальности. Отдельно открытая общая форма не является тем же опытом.
Основной код этого урока — модуль общей формы УчебныйРедактор85. Полный модуль списка-владельца приведён дополнительным блоком; его ОбработкаЗаписиНового должна быть назначена событию формы.
Откройте редактор только из своего подготовленного списка, оставьте Наименование85=Тетрадь и установите ПодтверждаюЗапись85. В этом окне разрешено создание только одной карточки.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Метка85 = Параметры.Метка85;
Наименование85 = "Тетрадь";
КонецПроцедуры
&НаКлиенте
Процедура ЗаписатьСвоюНовую85(Команда)
Если Не ПодтверждаюЗапись85 Тогда
ВызватьИсключение "Подтвердите запись одной своей учебной карточки";
КонецЕсли;
Если ВладелецФормы = Неопределено Тогда
ВызватьИсключение "Редактор должен быть открыт из собственного учебного списка";
КонецЕсли;
СсылкаНовой = СоздатьСвоюКарточкуНаСервере();
ЭтаФорма.ОтобразитьИзменениеДанных(СсылкаНовой, ВидИзмененияДанных.Добавление);
ЭтаФорма.ОповеститьОЗаписиНового(СсылкаНовой);
Итог85 = "Собственная Тетрадь записана и владелец оповещён";
КонецПроцедуры
&НаСервере
Функция СоздатьСвоюКарточкуНаСервере()
Если Не ПодтверждаюЗапись85 Тогда
ВызватьИсключение "Только свой подтверждённый стенд";
КонецЕсли;
Если Не СозданнаяКарточка85.Пустая() Тогда
ВызватьИсключение "В этом редакторе уже создана одна собственная карточка";
КонецЕсли;
Если Строка(Новый УникальныйИдентификатор(Метка85)) <> Метка85 Тогда
ВызватьИсключение "Нужна настоящая метка собственной подготовленной пары";
КонецЕсли;
ИмяКарточки = СокрЛП(Наименование85);
Если ИмяКарточки = "" Или СтрДлина(ИмяКарточки) > 80 Тогда
ВызватьИсключение "Укажите учебное наименование длиной1–80 символов";
КонецЕсли;
Своя = Справочники.УчебныеКарточки85.СоздатьЭлемент();
Своя.Наименование = ИмяКарточки;
Своя.Метка85 = Метка85;
Своя.Записать();
СозданнаяКарточка85 = Своя.Ссылка;
Возврат СозданнаяКарточка85;
КонецФункцииУчебныйСписок85
УчебныеОповещенияФорм85 → Справочники → УчебныеКарточки85 → Формы → УчебныйСписок85 → Модуль
Полный модуль собственной формы списка-владельца, с обработчиком записи нового объекта.
&НаКлиенте
Перем Наблюдатель85;
&НаКлиенте
Процедура ПодготовитьСвоиКарточки85(Команда)
Если Не ПодтверждаюПустойСтенд Тогда
ВызватьИсключение "Подтвердите только свой новый пустой стенд";
КонецЕсли;
Если Не ПерваяКарточка85.Пустая() Тогда
ВызватьИсключение "В этой форме опыт уже подготовлен; используйте существующие свои карточки";
КонецЕсли;
Данные = СоздатьСвоюПаруНаСервере();
Метка85 = Данные.Метка85;
ПерваяКарточка85 = Данные.Первая;
ВтораяКарточка85 = Данные.Вторая;
ОповеститьОбИзменении(Тип("СправочникСсылка.УчебныеКарточки85"));
Итог85 = "Подготовлены две собственные карточки. Откройте наблюдателя.";
КонецПроцедуры
&НаСервереБезКонтекста
Функция СоздатьСвоюПаруНаСервере()
Выборка = Справочники.УчебныеКарточки85.Выбрать();
Если Выборка.Следующий() Тогда
ВызватьИсключение "Учебный справочник должен быть пустым до первой подготовки";
КонецЕсли;
МеткаПары = Строка(Новый УникальныйИдентификатор);
НачатьТранзакцию();
Попытка
Первая = Справочники.УчебныеКарточки85.СоздатьЭлемент();
Первая.Наименование = "Книга";
Первая.Метка85 = МеткаПары;
Первая.Записать();
Вторая = Справочники.УчебныеКарточки85.СоздатьЭлемент();
Вторая.Наименование = "Ручка";
Вторая.Метка85 = МеткаПары;
Вторая.Записать();
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
Возврат Новый Структура("Метка85,Первая,Вторая", МеткаПары, Первая.Ссылка, Вторая.Ссылка);
КонецФункции
&НаКлиенте
Процедура ОткрытьНаблюдателя85(Команда)
Если ПерваяКарточка85.Пустая() Тогда
ВызватьИсключение "Сначала подготовьте свою пару";
КонецЕсли;
ПараметрыНаблюдателя = Новый Структура("Метка85", Метка85);
Наблюдатель85 = ПолучитьФорму("ОбщаяФорма.УчебныйНаблюдатель85", ПараметрыНаблюдателя, ЭтаФорма, Метка85);
Если Наблюдатель85 = Неопределено Тогда
ВызватьИсключение "Создание собственной формы наблюдателя отклонено";
КонецЕсли;
Наблюдатель85.Открыть();
КонецПроцедуры
&НаКлиенте
Процедура ПерейтиККниге85(Команда)
Если ПерваяКарточка85.Пустая() Тогда
ВызватьИсключение "Сначала подготовьте собственную пару";
КонецЕсли;
ЭтаФорма.ВыполнитьПереход(ПерваяКарточка85);
ЭтаФорма.ОповеститьОбАктивизации(ПерваяКарточка85);
Итог85 = "Выбрана собственная Книга; проверьте поле наблюдателя после завершения команды";
КонецПроцедуры
&НаКлиенте
Процедура ПерейтиКРучке85(Команда)
Если ВтораяКарточка85.Пустая() Тогда
ВызватьИсключение "Сначала подготовьте собственную пару";
КонецЕсли;
ЭтаФорма.ВыполнитьПереход(ВтораяКарточка85);
ЭтаФорма.ОповеститьОбАктивизации(ВтораяКарточка85);
Итог85 = "Выбрана собственная Ручка; проверьте поле наблюдателя после завершения команды";
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьСвойРедактор85(Команда)
Если ПерваяКарточка85.Пустая() Тогда
ВызватьИсключение "Сначала подготовьте собственную пару";
КонецЕсли;
ПараметрыРедактора = Новый Структура("Метка85", Метка85);
Редактор = ПолучитьФорму("ОбщаяФорма.УчебныйРедактор85", ПараметрыРедактора, ЭтаФорма, Метка85);
Если Редактор = Неопределено Тогда
ВызватьИсключение "Создание своего редактора отклонено";
КонецЕсли;
Редактор.Открыть();
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаЗаписиНового(НовыйОбъект, Источник, СтандартнаяОбработка)
Если ТипЗнч(Источник) <> Тип("ФормаКлиентскогоПриложения") Тогда
Возврат;
КонецЕсли;
Если Источник.ИмяФормы <> "ОбщаяФорма.УчебныйРедактор85" Тогда
Возврат;
КонецЕсли;
Если Источник.Метка85 <> Метка85 Или ТипЗнч(НовыйОбъект) <> Тип("СправочникСсылка.УчебныеКарточки85") Тогда
Возврат;
КонецЕсли;
НоваяКарточка85 = НовыйОбъект;
Итог85 = "Владелец получил свою новую карточку. Стандартное позиционирование списка оставлено включённым.";
КонецПроцедурыУчебныйНаблюдатель85
УчебныеОповещенияФорм85 → Общие формы → УчебныйНаблюдатель85 → Модуль
Полный модуль собственного наблюдателя; обработчик активизации не выполняет серверных вызовов.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Метка85 = Параметры.Метка85;
Итог85 = "Ожидается активизация своей карточки владельцем";
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаАктивизации(АктивныйОбъект, Источник)
Если ТипЗнч(Источник) <> Тип("ФормаКлиентскогоПриложения") Тогда
Возврат;
КонецЕсли;
Если Источник <> ВладелецФормы Или Источник.ИмяФормы <> "Справочник.УчебныеКарточки85.Форма.УчебныйСписок85" Тогда
Возврат;
КонецЕсли;
Если Источник.Метка85 <> Метка85 Или ТипЗнч(АктивныйОбъект) <> Тип("СправочникСсылка.УчебныеКарточки85") Тогда
Возврат;
КонецЕсли;
АктивнаяКарточка85 = АктивныйОбъект;
Итог85 = "Получена активизация именно своей формы-владельца";
КонецПроцедурыРазбор по шагам
Редактор получает реальную метку собственной пары из параметров и фактического владельца при ПолучитьФорму; отсутствие владельца прерывает команду до записи.
Сервер повторно проверяет учебную конфигурацию, согласие, отсутствие уже созданной карточки, формат UUID и длину наименования. Это подготовка только нового стенда, не универсальный production-сервис.
СоздатьЭлемент и Записать создают именно собственный новый элемент УчебныеКарточки85. Его фактическая ссылка сохраняется в реквизите редактора и возвращается клиенту.
ОтобразитьИзменениеДанных получает реальную новую ссылку и ВидИзмененияДанных.Добавление: уведомляются динамические списки и отображается изменение. Этот метод сам объект не записывает.
ОповеститьОЗаписиНового на этой подчинённой форме вызывает ОбработкаЗаписиНового у владельца. Он проверяет имя источника, метку и тип ссылки, затем сохраняет ссылку в НоваяКарточка85.
СтандартнаяОбработка в обработчике владельца не отключается: стандартное позиционирование списка на добавленном объекте остаётся возможным. Новое оповещение не является отменой или повторной записью объекта.
Как проверить результат
После собственного ручного запуска Тетрадь действительно записана в учебный справочник с той же меткой.
СозданнаяКарточка85 редактора и НоваяКарточка85 владельца содержат одну фактическую ссылку.
В списке появилась новая строка, а отображение добавления и обработчик владельца сработали после успешной записи.
Повторное создание в том же редакторе отклоняется. Если уведомление после записи завершилось ошибкой, уже сохранённый объект не считается автоматически отменённым.
Ожидаемый результат
Одна собственная карточка реально сохранена при будущем запуске, изменение отображено, владелец получил её ссылку.
На что обратить внимание
ОповеститьОЗаписиНового не записывает объект. Нельзя вызывать его с пустой или произвольной ссылкой до успешного сохранения.
Это общая форма собственного редактора. В стандартной объектной форме платформа может выполнять оповещение сама; не дублируйте его автоматически при переносе кода.
СтандартнаяОбработка=Ложь в событии владельца не отменяет запись. В уроке системная обработка не отключается.
ОтобразитьИзменениеДанных является UI-операцией и может обращаться к серверу. Здесь она вызвана из обычной клиентской команды, не из ограниченного обработчика активизации.
Сбой оповещения после Записать не откатывает уже выполненную запись. Проверьте СозданнаяКарточка85, прежде чем пытаться создавать повторный объект.
Ссылка, метка и ограничения формы здесь принадлежат собственному пустому стенду. Для production нужны отдельная авторизация, контроль конкурентной записи и прикладные правила.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.