СохранитьИзмененияФайла (БСП)

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

Сохранить изменения файла. Предназначена для записи изменений файла без его освобождения.

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

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

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

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

ПолучитьДанныеФайлаИСохранитьИзмененияФайла (БСП)

СохранитьИзмененияИОсвободитьФайл (БСП)

СохранитьИзмененияФайлаБезРасширенияПослеЗагрузкиФайла (БСП)

СохранитьИзмененияФайлаБезРасширенияПослеШифрованияФайла (БСП)

СохранитьИзмененияФайлаСОповещением (БСП)

СохранитьИзмененияФайлаПослеУстановкиРасширения (БСП)

СохранитьИзмененияФайлаСРасширениемПослеПроверкиЗашифрован (БСП)

СохранитьИзмененияФайлаСРасширениемПослеПоказаОповещения (БСП)

СохранитьИзмененияФайлаБезРасширенияПослеНапоминания (БСП)

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