#Область ПрограммныйИнтерфейс
Функция Описание(ИдентификаторХранилища, ИдентификаторДанных) Экспорт
Результат = Неопределено;
Если ИдентификаторХранилища = "files" Тогда
Запрос = Новый Запрос(
"ВЫБРАТЬ
| Файлы.Имя КАК Имя,
| Файлы.ПутьКФайлу КАК ПутьКФайлу,
| Файлы.Размер КАК Размер,
| Файлы.ТомНаДиске КАК ТомНаДиске,
| Файлы.ХранитьНаДиске КАК ХранитьНаДиске,
| ЕСТЬNULL(ВременныеФайлы.ИмяФайла, НЕОПРЕДЕЛЕНО) КАК ИмяВременногоФайла
|ИЗ
| РегистрСведений.Файлы КАК Файлы
|
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВременныеФайлы КАК ВременныеФайлы
| ПО (НЕ Файлы.ХранитьНаДиске)
| И Файлы.Идентификатор = ВременныеФайлы.Идентификатор
|
|ГДЕ
| Файлы.Идентификатор = &ИдентификаторФайла");
Запрос.УстановитьПараметр("ИдентификаторФайла", Новый УникальныйИдентификатор(ИдентификаторДанных));
УстановитьПривилегированныйРежим(Истина);
РезультатЗапроса = Запрос.Выполнить();
УстановитьПривилегированныйРежим(Ложь);
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
Результат = Новый Структура;
Результат.Вставить("ИмяФайла", Выборка.Имя);
Результат.Вставить("Размер", Выборка.Размер);
Если Выборка.ХранитьНаДиске Тогда
Результат.Вставить("Данные", ФайловыеФункции.ПолныйПутьТома(Выборка.ТомНаДиске) + Выборка.ПутьКФайлу);
ИначеЕсли ЗначениеЗаполнено(Выборка.ИмяВременногоФайла) Тогда
РегистрыСведений.ВременныеФайлы.ПродлитьДействиеВременногоФайла(Выборка.ИмяВременногоФайла);
Результат.Вставить("Данные", Выборка.ИмяВременногоФайла);
Иначе
УстановитьПривилегированныйРежим(Истина);
ИдентификаторФайла = Новый УникальныйИдентификатор(ИдентификаторДанных);
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("dt");
Запись = РегистрыСведений.Файлы.СоздатьМенеджерЗаписи();
Запись.Идентификатор = ИдентификаторФайла;
Запись.Прочитать();
ЗаписьВременныйФайл = РегистрыСведений.ВременныеФайлы.СоздатьМенеджерЗаписи();
ЗаписьВременныйФайл.ИмяФайла = ИмяВременногоФайла;
ЗаписьВременныйФайл.Идентификатор = ИдентификаторФайла;
ЗаписьВременныйФайл.Записать();
Запись.Файл.Получить().Записать(ИмяВременногоФайла);
Результат.Вставить("Данные", ИмяВременногоФайла);
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
Иначе
ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Файл с идентификатором %1 не найден.'"), ИдентификаторДанных));
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
Функция Данные(ОписаниеДанных) Экспорт
Возврат ОписаниеДанных.Данные;
КонецФункции
Функция Загрузить(ОписаниеДанных) Экспорт
Идентификатор = Новый УникальныйИдентификатор;
Если ОписаниеДанных.Размер < ФайлыМС.МаксРазмерСинхроннойОбработки() Тогда
СохранитьДвоичныеДанные(ОписаниеДанных.ИмяФайла, ОписаниеДанных.Данные, Идентификатор);
Иначе
ПараметрыМетода = Новый Массив;
ПараметрыМетода.Добавить(ОписаниеДанных.ИмяФайла);
ПараметрыМетода.Добавить(ОписаниеДанных.Данные);
ПараметрыМетода.Добавить(Идентификатор);
ПараметрыЗадания = Новый Структура;
ПараметрыЗадания.Вставить("ИмяМетода", "ЛогическоеХранилище.СохранитьДвоичныеДанные");
ПараметрыЗадания.Вставить("Параметры", ПараметрыМетода);
ПараметрыЗадания.Вставить("ЭксклюзивноеВыполнение", Истина);
УстановитьПривилегированныйРежим(Истина);
ОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания);
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
ОписаниеДанных.УдалитьФайлДанных = Ложь;
Возврат Строка(Идентификатор);
КонецФункции
#КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс
Процедура СохранитьДвоичныеДанные(Имя, ПолноеИмя, Идентификатор, СобытиеЖурнала = Неопределено) Экспорт
Попытка
ФайлыМС.СохранитьДвоичныеДанные(Имя,, ПолноеИмя,, Идентификатор);
Исключение
Попытка
УдалитьФайлы(ПолноеИмя);
Исключение
Если СобытиеЖурнала = Неопределено Тогда
СобытиеЖурнала = НСтр("ru = 'ЛогическоеХранилище'");
КонецЕсли;
ЗаписьЖурналаРегистрации(СобытиеЖурнала, УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
ВызватьИсключение;
КонецПопытки;
Попытка
УдалитьФайлы(ПолноеИмя);
Исключение
Если СобытиеЖурнала = Неопределено Тогда
СобытиеЖурнала = НСтр("ru = 'ЛогическоеХранилище'");
КонецЕсли;
ЗаписьЖурналаРегистрации(СобытиеЖурнала, УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецПроцедуры
#КонецОбласти
|