ПередЗаписьюВидаОбъекта (БСП)

Автор: 1С
ОбщийМодуль.УправлениеСвойствами
БСП

Перед записью вида объекта. Обновляет наборы дополнительных реквизитов и сведений для вида объектов со свойствами.

// Обновляет наборы дополнительных реквизитов и сведений для вида объектов со свойствами.
//  Используется при записи элементов справочников, которые являются видами объектов со свойствами.
//  Например, если есть справочник Номенклатура, к которому применяется подсистема Свойства, для него создан
// справочник ВидыНоменклатуры, то при записи элемента ВидНоменклатуры необходимо вызывать эту процедуру.
//
// Параметры:
//  ВидОбъекта                - Объект - например вид номенклатуры перед записью.
//  ИмяОбъектаСоСвойствами    - Строка - например "Номенклатура".
//  ИмяРеквизитаНабораСвойств - Строка - используется, когда наборов свойств несколько или
//                              используется имя реквизита основного набора, отличное от "НаборСвойств".
//
Процедура ПередЗаписьюВидаОбъекта(ВидОбъекта,
                                  ИмяОбъектаСоСвойствами,
                                  ИмяРеквизитаНабораСвойств = "НаборСвойств") Экспорт
	
	УстановитьПривилегированныйРежим(Истина);
	
	НаборСвойств   = ВидОбъекта[ИмяРеквизитаНабораСвойств];
	РодительНабора = НаборСвойствПоИмени(ИмяОбъектаСоСвойствами);
	Если РодительНабора = Неопределено Тогда
		РодительНабора = Справочники.НаборыДополнительныхРеквизитовИСведений[ИмяОбъектаСоСвойствами];
	КонецЕсли;
	
	Если ЗначениеЗаполнено(НаборСвойств) Тогда
		
		СтарыеСвойстваНабора = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(
			НаборСвойств, "Наименование, Родитель, ПометкаУдаления");
		
		Если СтарыеСвойстваНабора.Наименование    = ВидОбъекта.Наименование
		   И СтарыеСвойстваНабора.ПометкаУдаления = ВидОбъекта.ПометкаУдаления
		   И СтарыеСвойстваНабора.Родитель        = РодительНабора Тогда
			
			Возврат;
		КонецЕсли;
		
		Если СтарыеСвойстваНабора.Родитель = РодительНабора Тогда
			ЗаблокироватьДанныеДляРедактирования(НаборСвойств);
			НаборСвойствОбъект = НаборСвойств.ПолучитьОбъект();
		Иначе
			НаборСвойствОбъект = НаборСвойств.Скопировать();
		КонецЕсли;
	Иначе
		НаборСвойствОбъект = Справочники.НаборыДополнительныхРеквизитовИСведений.СоздатьЭлемент();
		НаборСвойствОбъект.Используется = Истина;
	КонецЕсли;
	
	НаборСвойствОбъект.Наименование    = ВидОбъекта.Наименование;
	НаборСвойствОбъект.ПометкаУдаления = ВидОбъекта.ПометкаУдаления;
	НаборСвойствОбъект.Родитель        = РодительНабора;
	НаборСвойствОбъект.Записать();
	
	ВидОбъекта[ИмяРеквизитаНабораСвойств] = НаборСвойствОбъект.Ссылка;
	
	// Обновление наименований необщих дополнительных реквизитов и сведений.
	Если Не ЗначениеЗаполнено(НаборСвойств) Тогда
		Возврат;
	КонецЕсли;
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("НаборСвойств", НаборСвойств);
	Запрос.Текст =
	"ВЫБРАТЬ
	|	Свойства.Ссылка КАК Ссылка,
	|	Свойства.НаборСвойств.Наименование КАК НаименованиеНабора,
	|	Свойства.НаборСвойств.ПометкаУдаления КАК ПометкаУдаленияНабора
	|ИЗ
	|	ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства
	|ГДЕ
	|	Свойства.НаборСвойств = &НаборСвойств
	|	И ВЫБОР
	|			КОГДА Свойства.Наименование <> Свойства.Заголовок + "" ("" + Свойства.НаборСвойств.Наименование + "")""
	|				ТОГДА ИСТИНА
	|			КОГДА Свойства.ПометкаУдаления <> Свойства.НаборСвойств.ПометкаУдаления
	|				ТОГДА ИСТИНА
	|			ИНАЧЕ ЛОЖЬ
	|		КОНЕЦ";
	
	ВыборкаСвойств = Запрос.Выполнить().Выбрать();
	Пока ВыборкаСвойств.Следующий() Цикл
		ЗаблокироватьДанныеДляРедактирования(ВыборкаСвойств.Ссылка);
		Объект = ВыборкаСвойств.Ссылка.ПолучитьОбъект();
		Объект.Наименование = Объект.Заголовок + " (" + Строка(ВыборкаСвойств.НаименованиеНабора) + ")";
		Объект.ПометкаУдаления = ВыборкаСвойств.ПометкаУдаленияНабора;
		Объект.Записать();
	КонецЦикла;
	
КонецПроцедуры

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ПередЗаписьюНаСервере (БСП)

ПередЗаписьюОбъекта (БСП)

МеханизмРегистрацииОбъектовПередЗаписьюДокумента (БСП)

МеханизмРегистрацииОбъектовПередЗаписьюРегистра (БСП)

МеханизмРегистрацииОбъектовПередЗаписьюКонстанты (БСП)

МеханизмРегистрацииОбъектовПередЗаписью (БСП)

ДанныеОбновленыНаНовуюВерсиюПрограммы (БСП)

УстановитьПометкуУдаленияФайловДокументовПередЗаписью (БСП)

TurboConf 6 - расширение Конфигуратора 1С