Перед записью вида объекта. Обновляет наборы дополнительных реквизитов и сведений для вида объектов со свойствами.
// Обновляет наборы дополнительных реквизитов и сведений для вида объектов со свойствами.
// Используется при записи элементов справочников, которые являются видами объектов со свойствами.
// Например, если есть справочник Номенклатура, к которому применяется подсистема Свойства, для него создан
// справочник ВидыНоменклатуры, то при записи элемента ВидНоменклатуры необходимо вызывать эту процедуру.
//
// Параметры:
// ВидОбъекта - Объект - например вид номенклатуры перед записью.
// ИмяОбъектаСоСвойствами - Строка - например "Номенклатура".
// ИмяРеквизитаНабораСвойств - Строка - используется, когда наборов свойств несколько или
// используется имя реквизита основного набора, отличное от "НаборСвойств".
//
Процедура ПередЗаписьюВидаОбъекта(ВидОбъекта,
ИмяОбъектаСоСвойствами,
ИмяРеквизитаНабораСвойств = "НаборСвойств") Экспорт
УстановитьПривилегированныйРежим(Истина);
НаборСвойств = ВидОбъекта[ИмяРеквизитаНабораСвойств];
РодительНабора = НаборСвойствПоИмени(ИмяОбъектаСоСвойствами);
Если РодительНабора = Неопределено Тогда
РодительНабора = Справочники.НаборыДополнительныхРеквизитовИСведений[ИмяОбъектаСоСвойствами];
КонецЕсли;
Если ЗначениеЗаполнено(НаборСвойств) Тогда
СтарыеСвойстваНабора = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(
НаборСвойств, "Наименование, Родитель, ПометкаУдаления");
Если СтарыеСвойстваНабора.Наименование = ВидОбъекта.Наименование
И СтарыеСвойстваНабора.ПометкаУдаления = ВидОбъекта.ПометкаУдаления
И СтарыеСвойстваНабора.Родитель = РодительНабора Тогда
Возврат;
КонецЕсли;
Если СтарыеСвойстваНабора.Родитель = РодительНабора Тогда
ЗаблокироватьДанныеДляРедактирования(НаборСвойств);
НаборСвойствОбъект = НаборСвойств.ПолучитьОбъект();
Иначе
НаборСвойствОбъект = НаборСвойств.Скопировать();
КонецЕсли;
Иначе
НаборСвойствОбъект = Справочники.НаборыДополнительныхРеквизитовИСведений.СоздатьЭлемент();
НаборСвойствОбъект.Используется = Истина;
КонецЕсли;
НаборСвойствОбъект.Наименование = ВидОбъекта.Наименование;
НаборСвойствОбъект.ПометкаУдаления = ВидОбъекта.ПометкаУдаления;
НаборСвойствОбъект.Родитель = РодительНабора;
НаборСвойствОбъект.Записать();
ВидОбъекта[ИмяРеквизитаНабораСвойств] = НаборСвойствОбъект.Ссылка;
// Обновление наименований необщих дополнительных реквизитов и сведений.
Если Не ЗначениеЗаполнено(НаборСвойств) Тогда
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("НаборСвойств", НаборСвойств);
Запрос.Текст =
"ВЫБРАТЬ
| Свойства.Ссылка КАК Ссылка,
| Свойства.НаборСвойств.Наименование КАК НаименованиеНабора,
| Свойства.НаборСвойств.ПометкаУдаления КАК ПометкаУдаленияНабора
|ИЗ
| ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства
|ГДЕ
| Свойства.НаборСвойств = &НаборСвойств
| И ВЫБОР
| КОГДА Свойства.Наименование <> Свойства.Заголовок + "" ("" + Свойства.НаборСвойств.Наименование + "")""
| ТОГДА ИСТИНА
| КОГДА Свойства.ПометкаУдаления <> Свойства.НаборСвойств.ПометкаУдаления
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ";
ВыборкаСвойств = Запрос.Выполнить().Выбрать();
Пока ВыборкаСвойств.Следующий() Цикл
ЗаблокироватьДанныеДляРедактирования(ВыборкаСвойств.Ссылка);
Объект = ВыборкаСвойств.Ссылка.ПолучитьОбъект();
Объект.Наименование = Объект.Заголовок + " (" + Строка(ВыборкаСвойств.НаименованиеНабора) + ")";
Объект.ПометкаУдаления = ВыборкаСвойств.ПометкаУдаленияНабора;
Объект.Записать();
КонецЦикла;
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
МеханизмРегистрацииОбъектовПередЗаписьюДокумента (БСП)
МеханизмРегистрацииОбъектовПередЗаписьюРегистра (БСП)
МеханизмРегистрацииОбъектовПередЗаписьюКонстанты (БСП)
МеханизмРегистрацииОбъектовПередЗаписью (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)