ПерейтиНаВерсиюСервер (БСП)

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

Перейти на версию сервер.

Функция ПерейтиНаВерсиюСервер(Ссылка, НомерВерсии, ТекстСообщенияОбОшибке, ОтменаПроведения = Ложь) Экспорт
	
	Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда
		ВызватьИсключение НСтр("ru = 'Недостаточно прав для выполнения операции.'");
	КонецЕсли;
	
	ПользовательскоеПредставлениеНомера = НомерВерсииВИерархии(Ссылка, НомерВерсии);
	Информация = СведенияОВерсииОбъекта(Ссылка, НомерВерсии);
	
	ДополнительныеРеквизиты = Неопределено;
	Если ТипЗнч(Информация.ВерсияОбъекта) = Тип("Структура") Тогда
		Если Информация.ВерсияОбъекта.Свойство("ДополнительныеРеквизиты", ДополнительныеРеквизиты) Тогда
			НайденныеРеквизиты = ДополнительныеРеквизиты.НайтиСтроки(Новый Структура("Идентификатор", Неопределено));
			Для Каждого Реквизит Из НайденныеРеквизиты Цикл
				ДополнительныеРеквизиты.Удалить(Реквизит);
			КонецЦикла;
		КонецЕсли;
	КонецЕсли;
	
	ТекстСообщенияОбОшибке = "";
	Объект = ВосстановитьОбъектПоXML(Информация.ВерсияОбъекта, ТекстСообщенияОбОшибке);
	
	Если Не ПустаяСтрока(ТекстСообщенияОбОшибке) Тогда
		Возврат "ОшибкаВосстановления";
	КонецЕсли;
	
	Объект.ДополнительныеСвойства.Вставить("ВерсионированиеОбъектовКомментарийКВерсии",
		СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Выполнен переход к версии №%1 от %2'"),
			ПользовательскоеПредставлениеНомера,
			Формат(Информация.ДатаВерсии, "ДЛФ=DT")));
			
	
	РежимЗаписи = Неопределено;
	ИдентификаторОшибки = "ОшибкаВосстановления";
	
	Если ОбщегоНазначения.ЭтоДокумент(Объект.Метаданные()) И Объект.Метаданные().Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить Тогда
		Если Объект.Проведен И Не ОтменаПроведения Тогда
			РежимЗаписи = РежимЗаписиДокумента.Проведение;
		Иначе
			РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения;
		КонецЕсли;
		ИдентификаторОшибки = "ОшибкаПроведения";
	КонецЕсли;
	
	НачатьТранзакцию();
	Попытка
		ЗаписатьДанныеТекущейВерсии(Ссылка);
		ВыполняетсяЗаписьОбъекта(Истина);
		Если ЗначениеЗаполнено(РежимЗаписи) Тогда
			Объект.Записать(РежимЗаписи);
		Иначе
			Объект.Записать();
		КонецЕсли;
		Если ЗначениеЗаполнено(ДополнительныеРеквизиты) Тогда
			Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
				МодульУправлениеСвойствамиСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствамиСлужебный");
				МодульУправлениеСвойствамиСлужебный.ПриВосстановленииВерсииОбъекта(Объект, ДополнительныеРеквизиты);
			КонецЕсли;
			ВерсионированиеОбъектовПереопределяемый.ПриВосстановленииВерсииОбъекта(Объект, ДополнительныеРеквизиты);
		КонецЕсли;
		ВыполняетсяЗаписьОбъекта(Ложь);
		ЗаписатьВерсиюОбъекта(Объект);
		ЗафиксироватьТранзакцию();
	Исключение
		ОтменитьТранзакцию();
		ВыполняетсяЗаписьОбъекта(Ложь);
		ТекстСообщенияОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
		Возврат ИдентификаторОшибки;
	КонецПопытки;
	
	Возврат "ВосстановлениеВыполнено";
	
КонецФункции

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

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

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

ПерейтиПоСсылке (БСП)

ДоступныеВерсииАдресныхСведений (БСП)

ИзвлечьТекстВерсии (БСП)

ПерейтиКДокументацииПоВводуУчетнойЗаписиЭлектроннойПочты (БСП)

ПерейтиКФормеФайла (БСП)

ПерейтиПоВебСсылке (БСП)

ИР Перейти к определению

ПерейтиНаНовуюРедакцию (БСП)

ПерейтиНаДругуюПрограмму (БСП)

Обновлятор-1С: групповое (пакетное) обновление и обслуживание всех баз за один раз