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