Файл с клиента на сервер (когда нет СсылкаНаФайл, а есть путь к файлу)

1. Vidz 30.04.24 11:11 Сейчас в теме
Платформа 1С:Предприятие 8.3 (8.3.23.1912)
Конфа Управление торговлей, редакция 11 (11.5.14.82)

Вопрос простой (на самом деле - нет):
1. Пользователь выбирает файлы через ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие)
2. Делает свои пользовательские дела
3. Жмёт кнопку "Сделать всё" → мне надо создать элемент Справочник.Претензии и добавить к нему выбранные ранее файлы.

И вот именно с добавлением файлов проблема. Как передать с клиента на сервер файлы? Методы:

ПоместитьФайлыНаСерверАсинх(...)
НачатьПомещениеФайловНаСервер(...)


предполагают, что им нужно скормить <ПомещаемыеФайлы> - тип: Массив. Массив элементов типа СсылкаНаФайл
А у меня есть только пути к файлам, а не СсылкаНаФайл. И как получить этот самый СсылкаНаФайл (видимо - никак) не понятно
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user1880116 30.04.24 11:28 Сейчас в теме
(1)
ПоместитьФайлыНаСерверАсинх

Там есть вариант вызова с ОписанияПередаваемыхФайлов, который массив из ОписаниеПередаваемогоФайла, которые по имени конструируются. Полистай содержимое СП вниз.
3. Vidz 30.04.24 14:08 Сейчас в теме
(2) Действительно помог:

Вариант синтаксиса: По описанию передаваемых файлов
Синтаксис:
ПоместитьФайлыНаСерверАсинх(<ОписаниеОповещенияОХодеВыполнения>, <ОписаниеОповещенияПередНачалом>, <ОписанияПередаваемыхФайлов>, <УникальныйИдентификаторФормы>)

Правда теперь не могу понять что делать дальше. Если добавить ОписаниеОповещенияОХодеВыполнения(...)
то мы получаем СсылкаНаФайл. Но как его добавить к присоединённым файлам?
Если пытаться делать через РаботаСФайлами.ДобавитьФайл - это сереверный вызов. При попытке его сделать клиентское клиентское приложение зависает намертво
4. user1880116 30.04.24 18:21 Сейчас в теме
(3)
теперь не могу понять
Это один из редких случаев, когда в СП косяк =]

ПоместитьФайлыНаСерверАсинх - это функция которая возвращает тебе новый массив из ОписаниеПомещенногоФайла, у которых заполнено поле адреса во временном хранилище. Будет примерно так:
    ПомещаемыеФайлы = Новый Массив;
	
    ОписаниеФайла = Новый ОписаниеПередаваемогоФайла("C:\123.xlsx");
    ОписаниеФайла = Новый ОписаниеПередаваемогоФайла("C:\456.xlsx");
    ПомещаемыеФайлы.Добавить(ОписаниеФайла);
	
    ПомещенныеФайлы = Ждать ПоместитьФайлыНаСерверАсинх(, , ПомещаемыеФайлы, ЭтотОбъект.УникальныйИдентификатор);

    Сообщить(ПомещенныеФайлы[0].Адрес);
Показать

И делай с ним что хочешь
7. Vidz 03.05.24 10:48 Сейчас в теме
(4) Я бы добавил важную мелочь, на которую не сразу обратил внимание: процедура/функция в которой прописан этот код должна быть с припиской Асинх. Получилось что-то вроде:

// ВладелецФайла - объект для которого требуется присоеденить файлы
// ПомещаемыеФайлы - Массив, где элементы - полный путь к файлу вида "C:\123.xlsx"
&НаКлиенте
Асинх Процедура ПоместитьНужныеФайлыНаСервер(ВладелецФайла, ПомещаемыеФайлы)
	
	МассивФайлов = Новый Массив;
	Для каждого ТекПутьКФайлу Из ПомещаемыеФайлы Цикл
		МассивФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(ТекПутьКФайлу));
	КонецЦикла;
		
	ФайлыНаДобавление = Новый Массив;
		
	ПомещенныеФайлы = Ждать ПоместитьФайлыНаСерверАсинх(,,МассивФайлов, УникальныйИдентификатор);  
	
	Если ПомещенныеФайлы <> Неопределено Тогда
		
		Для каждого ТекОписаниеФайла Из ПомещенныеФайлы Цикл
				
			Если ТекОписаниеФайла.ПомещениеФайлаОтменено Тогда
				Продолжить;
			КонецЕсли;
				
			ПараметрыФайла = РаботаСФайламиСлужебныйКлиентСервер.ПараметрыДобавленияФайла();
			ПараметрыФайла.Автор = ПользователиКлиентСервер.ТекущийПользователь();
			ПараметрыФайла.ВладелецФайлов = ВладелецФайла;
			ПараметрыФайла.ИмяБезРасширения = ТекОписаниеФайла.СсылкаНаФайл.Файл.ИмяБезРасширения;
			ПараметрыФайла.РасширениеБезТочки = СтрЗаменить(ТекОписаниеФайла.СсылкаНаФайл.Файл.Расширение, ".", "");
				
			ФайлыНаПрикрепление.Добавить(Новый Структура("ПараметрыФайла,Адрес", ПараметрыФайла,ТекОписаниеФайла.Адрес));
				
		КонецЦикла;	
		
		ДобавитьФайлыНаСервере(ВладелецФайла, ФайлыНаПрикрепление);
		
	КонецЕсли; 
	
КонецПроцедуры  

&НаСервере
Процедура ДобавитьФайлыНаСервере(ВладелецФайла, ДанныеФайлов) 
	
	БылиДобавленыФайлы = Ложь;
	
	Для каждого ТекДанныеФайла Из ДанныеФайлов Цикл
		
		Попытка
			Результат = РаботаСФайлами.ДобавитьФайл(ТекДанныеФайла.ПараметрыФайла, ТекДанныеФайла.Адрес);  
			Если ЗначениеЗаполнено(Результат) Тогда
				БылиДобавленыФайлы = Истина;
			КонецЕсли;
		Исключение 
			ОписаниеОшибки = ОписаниеОшибки();
			Сообщить(СтрШаблон("Не удалось прикрепить файл %1! Причина: %2", 
							   ТекДанныеФайла.ПараметрыФайла.ИмяБезРасширения, 
							   КраткоеПредставлениеОшибки(ИнформацияОбОшибке())),
					 СтатусСообщения.Важное); 
		КонецПопытки; 
				 
	КонецЦикла;   
	
КонецПроцедуры
Показать
5. spacecraft 30.04.24 18:59 Сейчас в теме
да нормально там с описанием метода:
Возвращаемое значение:
Тип: Обещание.
Результат выполнения обещания - массив объектов типа ОписаниеПомещенногоФайла, либо Неопределено, если помещение файлов было отменено.
6. user1880116 30.04.24 19:17 Сейчас в теме
(5) Ну, значит я пессимист, а платформщики молодцы.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот