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