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