|
НачатьПомещениеФайловНаСервер - Вариант синтаксиса: По ссылкам на файлы | ☑ | ||
---|---|---|---|---|
0
ass1c
01.12.22
✎
15:13
|
Коллеги, привет! Подскажите кто встречал и использовал вариант работы метода глобального контекста "НачатьПомещениеФайловНаСервер" по ссылкам на файлы (в синтаксис помощнике метода есть такой вариант)
Вариант синтаксиса: По ссылкам на файлы Синтаксис: НачатьПомещениеФайловНаСервер(<ОписаниеОповещенияОЗавершении>, <ОписаниеОповещенияОХодеВыполнения>, <ОписаниеОповещенияПередНачалом>, <СсылкиНаФайлы>, <УникальныйИдентификаторФормы>) <СсылкиНаФайлы> (обязательный) Тип: Массив. Содержит массив объектов типа СсылкаНаФайл. Не смог понять как работает этот вариант. Есть рабочий пример формирования данного массива? |
|||
1
shuhard
01.12.22
✎
15:29
|
(0) не оно ?
https://its.1c.ru/db/intgr83#content:193:1 Передача нескольких файлов на сервер Предположим, у нас на локальном диске есть файлы изображений с картинками товаров и нам нужно поместить эти картинки в виде двоичных данных в справочник товаров. Будем считать, что для соотнесения файла картинки и товара имена файлов должны совпадать с наименованиями товаров. Для решения этой задачи добавим команду УстановитьКартинкиТоваров. Обработчик команды заполним следующим образом (листинг 6.22). Листинг 6.22. Обработчик команды «УстановитьКартинкиТоваров» &НаКлиенте Процедура УстановитьКартинкиТоваров(Команда) ОповещениеОЗавершении = Новый ОписаниеОповещения("УстановитьКартинкиТоваровЗавершение", ЭтотОбъект); //СтрокаПоиска = "e:\pictures\*.jpg"; //НачатьПомещениеФайловНаСервер(ОповещениеОЗавершении, , , СтрокаПоиска, УникальныйИдентификатор); ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов("Выберите файлы картинок", Истина, "*.jpg"); НачатьПомещениеФайловНаСервер(ОповещениеОЗавершении, , , ПараметрыДиалога, УникальныйИдентификатор); //ОповещениеОХодеВыполнения = Новый ОписаниеОповещения("УстановитьКартинкиТоваровХодВыполнения", ЭтотОбъект); //НачатьПомещениеФайловНаСервер(ОповещениеОЗавершении, ОповещениеОХодеВыполнения, , ПараметрыДиалога, // УникальныйИдентификатор); КонецПроцедуры В этом обработчике сначала мы создаем описание оповещения, указывающее на экспортную процедуру УстановитьКартинкиТоваровЗавершение(), которая будет выполнена, после того как все файлы картинок будут помещены во временное хранилище (листинг 6.23). Затем мы создаем объект ПараметрыДиалогаПомещенияФайлов и задаем заголовок, возможность множественного выбора файлов и строку фильтра файлов (в нашем случае "*.jpg"), отображаемых для выбора в диалоге. В общем случае можно задать несколько вариантов фильтра (например: «Текстовый документ(*.txt)|*.txt;*rtf |Табличный документ(*.mxl)|*.mxl»), а при отображении диалога выбрать нужный фильтр. И передаем описание оповещения о завершении и параметры диалога помещения файлов в метод глобального контекста НачатьПомещениеФайловНаСервер(), с помощью которого начинается помещение файлов с картинками товаров из локальной файловой системы во временное хранилище. При этом пользователю показывается диалог выбора файлов, соответствующих заданному фильтру. Можно также использовать вариант вызова этого метода с указанием в четвертом параметре строки поиска файлов вместо диалога (см. закомментированный фрагмент кода), но следует иметь в виду, что для работы этого метода в веб-клиенте потребуется установить расширение для работы с файлами. В то время как в первом случае это расширение не требуется. Листинг 6.23. Процедура «УстановитьКартинкиТоваровЗавершение()» &НаКлиенте Процедура УстановитьКартинкиТоваровЗавершение(ПомещенныеФайлы, Дополнительно) Экспорт Если ПомещенныеФайлы = Неопределено Тогда Возврат; КонецЕсли; Для Каждого ПомещенныйФайл Из ПомещенныеФайлы Цикл НаименованиеТовара = ПомещенныйФайл.СсылкаНаФайл.Файл.ИмяБезРасширения; ИмяФайла = ПомещенныйФайл.СсылкаНаФайл.Имя; АдресФайла = ПомещенныйФайл.Адрес; ПоместитьФайлКартинки(НаименованиеТовара, ИмяФайла, АдресФайла); КонецЦикла; КонецПроцедуры В этой процедуре в параметре ПомещенныеФайлы будет содержаться массив объектов ОписаниеПомещенногоФайла (адрес данных в хранилище и ссылка на помещенный файл). По мере обхода элементов этого массива мы получаем по ссылке на каждый помещенный файл имя файла без расширения и имя файла с расширением, а также получаем адрес каждого помещенного файла картинки. И передаем все эти параметры в серверную процедуру ПоместитьФайлКартинки(), в которой данные по этому адресу получаются из временного хранилища и записываются в виде двоичных данных в реквизит товара типа ХранилищеЗначения (листинг 6.24). Листинг 6.24. Процедура «ПоместитьФайлКартинки()» &НаСервереБезКонтекста Процедура ПоместитьФайлКартинки(НаименованиеТовара, ИмяФайла, АдресФайла) ТоварСсылка = Справочники.Товары.НайтиПоНаименованию(НаименованиеТовара, Истина); Если ТоварСсылка <> Справочники.Товары.ПустаяСсылка() Тогда Товар = ТоварСсылка.ПолучитьОбъект(); ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайла); Товар.ДанныеФайлаКартинки = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных()); Товар.ИмяФайлаКартинки = ИмяФайла; Товар.Записать(); УдалитьИзВременногоХранилища(АдресФайла); КонецЕсли; КонецПроцедуры В этой процедуре в справочнике товаров находится товар с наименованием, совпадающим с именем помещенного файла без расширения (параметр НаименованиеТовара). Затем на основе двоичных данных, полученных из временного хранилища по адресу файла (параметр АдресФайла), создается объект ХранилищеЗначения и записывается в реквизит товара ДанныеФайлаКартинки, а в реквизите ИмяФайлаКартинки сохраняется имя (с расширением) помещенного файла (параметр ИмяФайла). Если на сервер помещается большой объем данных, то имеет смысл вывести в окно состояния прогресс помещения файлов. Для этого в метод НачатьПомещениеФайловНаСервер() вторым параметром нужно передать описание оповещения о ходе выполнения (см. закомментированный фрагмент кода в листинге 6.22), указывающее на экспортную процедуру, которая будет вызвана несколько раз по мере помещения файлов (листинг 6.25). Листинг 6.25. Процедура «УстановитьКартинкиТоваровХодВыполнения()» &НаКлиенте Процедура УстановитьКартинкиТоваровХодВыполнения(ПомещаемыйФайлы, Помещено, ОтказОтПомещенияФайла, ПомещеноВсего, ОтказОтПомещенияФайлов, Дополнительно) Экспорт Состояние("Помещение файлов картинок товаров", ПомещеноВсего); КонецПроцедуры В параметре ПомещеноВсего содержится процент помещенной части всех файлов, который мы и выводим в окно Состояние (рис. 6.1). |
|||
2
ass1c
01.12.22
✎
15:32
|
(1) Это вариант "Вариант синтаксиса: С диалогом выбора файлов" - тут все понятно, есть еще "Вариант синтаксиса: По описанию передаваемых файлов" - понятно как работает и "Вариант синтаксиса: По строке поиска" тоже понятно.
А вот как сделать вариант "Вариант синтаксиса: По ссылкам на файлы" не понятно |
|||
3
ass1c
01.12.22
✎
15:42
|
(1) Кстати взглянув еще раз на код, возможно понял что "СсылкиНаФайл" хранятся в массиве "ПомещенныеФайлы", т.е. в переменной "ПереданныйФайл.СсылкаНаФайл" типа "ОписаниеПомещенногоФайла" есть свойство "СсылкаНаФайл" типа "Ссылка" на файл
&НаКлиенте Процедура ЗавершениеВызов(ПомещенныеФайлы, ДополнительныеПараметры) Экспорт Если ПомещенныеФайлы = Неопределено Тогда Возврат; КонецЕсли; Для каждого ПереданныйФайл Из ПомещенныеФайлы Цикл ПрочитатьЗагрузитьФайлНаСервере(ПереданныйФайл.Адрес, ПереданныйФайл.СсылкаНаФайл.Имя); КонецЦикла; КонецПроцедуры Попробую пример сделать, если получится скину |
|||
4
ass1c
01.12.22
✎
15:57
|
Спасибо (1) что в твоей инфе увидел откуда вытащить нужные данные... Вариант конечно так себе, но работает. Не понятно где его применять и как по другому получить ссылки на файл:
&НаКлиенте Процедура ПомещениеФайлов(Команда) ЗавершениеВызов = Новый ОписаниеОповещения("ЗавершениеВызов" , ЭтотОбъект); ПрогрессВызов = Новый ОписаниеОповещения("ПрогрессВызов" , ЭтотОбъект); ПередНачаломВызов = Новый ОписаниеОповещения("ПередНачаломВызов" , ЭтотОбъект); Фильтр = "Excel файлы(*.xls;*.xlsx)|*.xls;*.xlsx"; ДиалогПомещенияФайлов = новый ПараметрыДиалогаПомещенияФайлов("Выберите файл для загрузки", , Фильтр); НачатьПомещениеФайловНаСервер(ЗавершениеВызов, ПрогрессВызов, ПередНачаломВызов ,ДиалогПомещенияФайлов , ЭтаФорма.УникальныйИдентификатор); КонецПроцедуры &НаКлиенте Процедура ЗавершениеВызов(ПомещенныеФайлы, ДополнительныеПараметры) Экспорт МассивСсылокНаФайлы = Новый Массив; Если ПомещенныеФайлы = Неопределено Тогда Возврат; КонецЕсли; Для каждого ПереданныйФайл Из ПомещенныеФайлы Цикл МассивСсылокНаФайлы.Добавить(ПереданныйФайл.СсылкаНаФайл); КонецЦикла; Если МассивСсылокНаФайлы.Количество() > 0 Тогда ЗавершениеВызовМассивСсылокНаФайлы = Новый ОписаниеОповещения("ЗавершениеВызовМассивСсылокНаФайлы" , ЭтотОбъект); НачатьПомещениеФайловНаСервер(ЗавершениеВызовМассивСсылокНаФайлы, , ,МассивСсылокНаФайлы , ЭтаФорма.УникальныйИдентификатор); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ЗавершениеВызовМассивСсылокНаФайлы(ПомещенныеФайлы, ДополнительныеПараметры) Экспорт Если ПомещенныеФайлы = Неопределено Тогда Возврат; КонецЕсли; Для каждого ПереданныйФайл Из ПомещенныеФайлы Цикл КонецЦикла; КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |