ВерсииФайловПриЗаписи (БСП)

Автор: 1С
ОбщийМодуль.РаботаСФайламиСлужебный
БСП

Версии файлов при записи. Обработчик подписки "при записи" версии файла.

// Обработчик подписки "при записи" версии файла.
//
Процедура ВерсииФайловПриЗаписи(Источник, Отказ) Экспорт
	
	Если Источник.ОбменДанными.Загрузка Тогда
		ЗаписатьДанныеФайлаВРегистрПриОбмене(Источник);
		Возврат;
	КонецЕсли;
	
	Если Источник.ДополнительныеСвойства.Свойство("ПереименованиеФайла") Тогда
		Возврат;
	КонецЕсли;
	
	Если Источник.ДополнительныеСвойства.Свойство("КонвертацияФайлов") Тогда
		Возврат;
	КонецЕсли;
	
	// Копируем реквизиты из версии в файл.
	ТекущаяВерсия = Источник;
	Если Не ТекущаяВерсия.Ссылка.Пустая() Тогда
	
		ФайлСсылка = Источник.Владелец;
		
		РеквизитыФайла = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ФайлСсылка, 
			"ИндексКартинки, Размер, ДатаСоздания, Изменил, Расширение, Том, ПутьКФайлу, ДатаМодификацииУниверсальная");
			
			Если РеквизитыФайла.Размер <> ТекущаяВерсия.Размер 
				ИЛИ РеквизитыФайла.ДатаСоздания <> ТекущаяВерсия.ДатаСоздания
				ИЛИ РеквизитыФайла.Расширение <> ТекущаяВерсия.Расширение
				ИЛИ РеквизитыФайла.Том <> ТекущаяВерсия.Том
				ИЛИ РеквизитыФайла.ПутьКФайлу <> ТекущаяВерсия.ПутьКФайлу 
				ИЛИ РеквизитыФайла.ИндексКартинки <> ТекущаяВерсия.ИндексКартинки
				ИЛИ РеквизитыФайла.ДатаМодификацииУниверсальная <> ТекущаяВерсия.ДатаМодификацииФайла Тогда
				НачатьТранзакцию();
				Попытка
					БлокировкаДанных = Новый БлокировкаДанных;
					ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ФайлСсылка)).ПолноеИмя());
					ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлСсылка);
					БлокировкаДанных.Заблокировать();
					ФайлОбъект = ФайлСсылка.ПолучитьОбъект();
					// Сменим индекс картинки, возможно, появилась версия или сменился индекс картинки у версии.
					ФайлОбъект.ИндексКартинки = ТекущаяВерсия.ИндексКартинки;
					
					// Копируем реквизиты для ускорения работы ограничения на уровне записей.
					ФайлОбъект.Размер           = ТекущаяВерсия.Размер;
					ФайлОбъект.ДатаСоздания     = ТекущаяВерсия.ДатаСоздания;
					ФайлОбъект.Изменил          = ТекущаяВерсия.Автор;
					ФайлОбъект.Расширение       = ТекущаяВерсия.Расширение;
					ФайлОбъект.Том              = ТекущаяВерсия.Том;
					ФайлОбъект.ПутьКФайлу       = ТекущаяВерсия.ПутьКФайлу;
					ФайлОбъект.ТипХраненияФайла = ТекущаяВерсия.ТипХраненияФайла;
					ФайлОбъект.ДатаМодификацииУниверсальная = ТекущаяВерсия.ДатаМодификацииУниверсальная;
					
					Если Источник.ДополнительныеСвойства.Свойство("ЗаписьПодписанногоОбъекта") Тогда
						ФайлОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта",
							Источник.ДополнительныеСвойства.ЗаписьПодписанногоОбъекта);
					КонецЕсли;
					
					ФайлОбъект.Записать();
					ЗафиксироватьТранзакцию();
				Исключение
					ОтменитьТранзакцию();
					ВызватьИсключение;
				КонецПопытки;
			КонецЕсли;
		
	КонецЕсли;
	
	ОбновитьСостояниеОчередиИзвлеченияТекста(Источник.Ссылка, Источник.СтатусИзвлеченияТекста);
	
КонецПроцедуры

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

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

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

СравнитьФайлы (БСП)

Формирование файла CSV с записью в файл на клиенте

ПолучитьКодировкуВерсииФайла (БСП)

ОбновитьВерсиюВФайле (БСП)

СоздатьФайлСВерсией (БСП)

ЗаписатьКодировкуВерсииФайла (БСП)

ОткрытьВерсиюФайла (БСП)

ПриЗаписиПрисоединенногоФайлаСервер (БСП)

УдалитьЗаписиКэшаВерсий (БСП)

1С Менеджер конфигураций