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

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

Добавить из файловой системы расширением синхронно. На основе переданного пути к файлу на диске создает Файл его и открывает карточку.

// На основе переданного пути к файлу на диске создает Файл его и открывает карточку.
//
//  ПараметрыДобавления - Структура:
//       * ПолноеИмяФайла - Строка - Необязательный. Полный путь и имя файла на клиенте.
//             Если не указан, то будет открыт синхронный диалог для выбора файла.
//       * ВладелецФайла - ЛюбаяСсылка - владелец файла.
//       * УникальныйИдентификатор - УникальныйИдентификатор - Идентификатор формы для хранения файла.
//       * ИмяСоздаваемогоФайла - Строка - Необязательный. Новое имя файла.
//
// Возвращаемое значение:
//   Структура - Результат.
//       * ФайлДобавлен - Булево - успешно ли выполнена операция.
//       * ФайлСсылка - СправочникСсылка.Файлы
//       * ТекстОшибки - Строка.
//
Функция ДобавитьИзФайловойСистемыСРасширениемСинхронно(ПараметрыВыполнения) Экспорт
	
	Результат = Новый Структура;
	Результат.Вставить("ФайлДобавлен", Ложь);
	Результат.Вставить("ФайлСсылка",   Неопределено);
	Результат.Вставить("ТекстОшибки",  "");
	
	ФильтрДиалога = ?(ПараметрыВыполнения.Свойство("ФильтрДиалогаВыбора"),
		ПараметрыВыполнения.ФильтрДиалогаВыбора, НСтр("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
///////////////////////////////////////////////////////////////////////////////////////////////////////

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

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

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

ДобавитьИзФайловойСистемыСРасширением (БСП)

ДобавитьИзФайловойСистемыБезРасширенияПослеОтветаНаВопросПовторить (БСП)

ДобавитьФайлИзФайловойСистемы (БСП)

ДобавитьФайлСДиска (БСП)

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

ОбработчикВыбораФайловогоКаталога (БСП)

ПараметрыЗагрузкиФайла (БСП)

Выбор каталога (папки) файловой системы

1С Менеджер конфигураций