Файл с клиента на сервер (когда нет СсылкаНаФайл, а есть путь к файлу)
Платформа 1С:Предприятие 8.3 (8.3.23.1912)
Конфа Управление торговлей, редакция 11 (11.5.14.82)
Вопрос простой (на самом деле - нет):
1. Пользователь выбирает файлы через ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие)
2. Делает свои пользовательские дела
3. Жмёт кнопку "Сделать всё" → мне надо создать элемент Справочник.Претензии и добавить к нему выбранные ранее файлы.
И вот именно с добавлением файлов проблема. Как передать с клиента на сервер файлы? Методы:
предполагают, что им нужно скормить <ПомещаемыеФайлы> - тип: Массив. Массив элементов типа СсылкаНаФайл
А у меня есть только пути к файлам, а не СсылкаНаФайл. И как получить этот самый СсылкаНаФайл (видимо - никак) не понятно
Конфа Управление торговлей, редакция 11 (11.5.14.82)
Вопрос простой (на самом деле - нет):
1. Пользователь выбирает файлы через ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие)
2. Делает свои пользовательские дела
3. Жмёт кнопку "Сделать всё" → мне надо создать элемент Справочник.Претензии и добавить к нему выбранные ранее файлы.
И вот именно с добавлением файлов проблема. Как передать с клиента на сервер файлы? Методы:
ПоместитьФайлыНаСерверАсинх(...)
НачатьПомещениеФайловНаСервер(...)
предполагают, что им нужно скормить <ПомещаемыеФайлы> - тип: Массив. Массив элементов типа СсылкаНаФайл
А у меня есть только пути к файлам, а не СсылкаНаФайл. И как получить этот самый СсылкаНаФайл (видимо - никак) не понятно
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) Действительно помог:
Вариант синтаксиса: По описанию передаваемых файлов
Синтаксис:
ПоместитьФайлыНаСерверАсинх(<ОписаниеОповещенияОХодеВыполнения>, <ОписаниеОповещенияПередНачалом>, <ОписанияПередаваемыхФайлов>, <УникальныйИдентификаторФормы>)
Правда теперь не могу понять что делать дальше. Если добавить ОписаниеОповещенияОХодеВыполнения(...)
то мы получаем СсылкаНаФайл. Но как его добавить к присоединённым файлам?
Если пытаться делать через РаботаСФайлами.ДобавитьФайл - это сереверный вызов. При попытке его сделать клиентское клиентское приложение зависает намертво
Вариант синтаксиса: По описанию передаваемых файлов
Синтаксис:
ПоместитьФайлыНаСерверАсинх(<ОписаниеОповещенияОХодеВыполнения>, <ОписаниеОповещенияПередНачалом>, <ОписанияПередаваемыхФайлов>, <УникальныйИдентификаторФормы>)
Правда теперь не могу понять что делать дальше. Если добавить ОписаниеОповещенияОХодеВыполнения(...)
то мы получаем СсылкаНаФайл. Но как его добавить к присоединённым файлам?
Если пытаться делать через РаботаСФайлами.ДобавитьФайл - это сереверный вызов. При попытке его сделать клиентское клиентское приложение зависает намертво
(3)
ПоместитьФайлыНаСерверАсинх - это функция которая возвращает тебе новый массив из ОписаниеПомещенногоФайла, у которых заполнено поле адреса во временном хранилище. Будет примерно так:
И делай с ним что хочешь
теперь не могу понять
Это один из редких случаев, когда в СП косяк =]
ПоместитьФайлыНаСерверАсинх - это функция которая возвращает тебе новый массив из ОписаниеПомещенногоФайла, у которых заполнено поле адреса во временном хранилище. Будет примерно так:
ПомещаемыеФайлы = Новый Массив;
ОписаниеФайла = Новый ОписаниеПередаваемогоФайла("C:\123.xlsx");
ОписаниеФайла = Новый ОписаниеПередаваемогоФайла("C:\456.xlsx");
ПомещаемыеФайлы.Добавить(ОписаниеФайла);
ПомещенныеФайлы = Ждать ПоместитьФайлыНаСерверАсинх(, , ПомещаемыеФайлы, ЭтотОбъект.УникальныйИдентификатор);
Сообщить(ПомещенныеФайлы[0].Адрес);
ПоказатьИ делай с ним что хочешь
(4) Я бы добавил важную мелочь, на которую не сразу обратил внимание: процедура/функция в которой прописан этот код должна быть с припиской Асинх. Получилось что-то вроде:
// ВладелецФайла - объект для которого требуется присоеденить файлы
// ПомещаемыеФайлы - Массив, где элементы - полный путь к файлу вида "C:\123.xlsx"
&НаКлиенте
Асинх Процедура ПоместитьНужныеФайлыНаСервер(ВладелецФайла, ПомещаемыеФайлы)
МассивФайлов = Новый Массив;
Для каждого ТекПутьКФайлу Из ПомещаемыеФайлы Цикл
МассивФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(ТекПутьКФайлу));
КонецЦикла;
ФайлыНаДобавление = Новый Массив;
ПомещенныеФайлы = Ждать ПоместитьФайлыНаСерверАсинх(,,МассивФайлов, УникальныйИдентификатор);
Если ПомещенныеФайлы <> Неопределено Тогда
Для каждого ТекОписаниеФайла Из ПомещенныеФайлы Цикл
Если ТекОписаниеФайла.ПомещениеФайлаОтменено Тогда
Продолжить;
КонецЕсли;
ПараметрыФайла = РаботаСФайламиСлужебныйКлиентСервер.ПараметрыДобавленияФайла();
ПараметрыФайла.Автор = ПользователиКлиентСервер.ТекущийПользователь();
ПараметрыФайла.ВладелецФайлов = ВладелецФайла;
ПараметрыФайла.ИмяБезРасширения = ТекОписаниеФайла.СсылкаНаФайл.Файл.ИмяБезРасширения;
ПараметрыФайла.РасширениеБезТочки = СтрЗаменить(ТекОписаниеФайла.СсылкаНаФайл.Файл.Расширение, ".", "");
ФайлыНаПрикрепление.Добавить(Новый Структура("ПараметрыФайла,Адрес", ПараметрыФайла,ТекОписаниеФайла.Адрес));
КонецЦикла;
ДобавитьФайлыНаСервере(ВладелецФайла, ФайлыНаПрикрепление);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ДобавитьФайлыНаСервере(ВладелецФайла, ДанныеФайлов)
БылиДобавленыФайлы = Ложь;
Для каждого ТекДанныеФайла Из ДанныеФайлов Цикл
Попытка
Результат = РаботаСФайлами.ДобавитьФайл(ТекДанныеФайла.ПараметрыФайла, ТекДанныеФайла.Адрес);
Если ЗначениеЗаполнено(Результат) Тогда
БылиДобавленыФайлы = Истина;
КонецЕсли;
Исключение
ОписаниеОшибки = ОписаниеОшибки();
Сообщить(СтрШаблон("Не удалось прикрепить файл %1! Причина: %2",
ТекДанныеФайла.ПараметрыФайла.ИмяБезРасширения,
КраткоеПредставлениеОшибки(ИнформацияОбОшибке())),
СтатусСообщения.Важное);
КонецПопытки;
КонецЦикла;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот