Добрый день! Подскажите пожалуйста как открыть файл из хранилища. Делаю следующим образом, не получается
Добавление файла:
Открытие файла
Добавление файла:
&НаКлиенте
Процедура ЗагрузитьФайлыСДискаОповещение(ЭтотОбъект)
Оповещение = Новый ОписаниеОповещения("ОбработатьВыборФайла", ЭтотОбъект);
НачатьПомещениеФайла(Оповещение, , , Истина, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьВыборФайла(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
//Если пользователь отказался от выбора файла, то закрываем форму
Если Не Результат Тогда
Возврат;
КонецЕсли;
Модифицированность = Истина;
ЗаписатьВложениеНаСервере(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры);
КонецПроцедуры
&НаСервере
Процедура ЗаписатьВложениеНаСервере(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)
ВыбранныйФайл = Новый Файл(ВыбранноеИмяФайла);
НовыйФайл = Справочники.ХранилищеФайлов.СоздатьЭлемент();
НовыйФайл.Наименование = ВыбранныйФайл.ИмяБезРасширения;
НовыйФайл.ИмяФайла = ВыбранныйФайл.Имя; //Тип Строка (неограниченная)
НовыйФайл.ВладелецФайла = Объект.Ссылка; // Тип ДокументСсылка, СправочникСсылка
СтруктураДанныхФайла = Новый Структура;
СтруктураДанныхФайла.Вставить("ИмяФайла", ВыбранныйФайл.Имя);
СтруктураДанныхФайла.Вставить("ДанныеФайла", ПолучитьИзВременногоХранилища(Адрес));
НовыйФайл.Файлы = Новый ХранилищеЗначения(СтруктураДанныхФайла); //Тип ХранилищеЗначения
НовыйФайл.Записать();
КонецПроцедуры
ПоказатьОткрытие файла
&НаКлиенте
Процедура СписокФайловВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
НачатьПолучениеКаталогаДокументов(Новый ОписаниеОповещения("КаталогДокументовЗавершение", ЭтотОбъект));
КонецПроцедуры
&НаКлиенте
Процедура КаталогДокументовЗавершение(ИмяКаталогаДокументов, ДополнительныеПараметры) Экспорт
Адрес = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
ИмяФайла = "";
ПолучитьДанныеФайлаНаСервереБезКонтекста(Адрес, ИмяФайла);
ПолноеИмяФайла = ИмяКаталогаДокументов + ИмяФайла;
МассивПолучаемыхФайлов = Новый Массив;
МассивПолучаемыхФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(ПолноеИмяФайла, Адрес));
НачатьПолучениеФайлов(Новый ОписаниеОповещения("ОткрытьФайлЗавершение", ЭтотОбъект), МассивПолучаемыхФайлов,, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФайлЗавершение(ПолученныеФайлы, ДополнительныеПараметры) Экспорт
Если ПолученныеФайлы = Неопределено
И Не (ТипЗнч(ПолученныеФайлы) = Тип("Массив")
И ПолученныеФайлы.Количество()) Тогда
Возврат;
КонецЕсли;
НачатьЗапускПриложения(Новый ОписаниеОповещения("НачатьЗапускПриложенияЗавершение", ЭтотОбъект), ПолученныеФайлы[0].Имя);
КонецПроцедуры
&НаКлиенте
Процедура НачатьЗапускПриложенияЗавершение(КодВозврата, ДополнительныеПараметры) Экспорт
КонецПроцедуры
&НаСервере
Процедура ПолучитьДанныеФайлаНаСервереБезКонтекста(Адрес, ИмяФайла)
СтруктураФайла = Справочники.ХранилищеФайлов.НайтиПоНаименованию(ИмяФайла);
ПоместитьВоВременноеХранилище(СтруктураФайла.Файлы, Адрес);
КонецПроцедуры
ПоказатьПо теме из базы знаний
Найденные решения
Добила это открытие. Вот что получилось:
Загрузка файла
Открытие (оно же сохранение)
Загрузка файла
&НаКлиенте
Процедура ЗагрузитьДоговор(Команда)
Оповещение = Новый ОписаниеОповещения("ОбработатьВыборФайла", ЭтотОбъект);
НачатьПомещениеФайла(Оповещение, , , Истина, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьВыборФайла(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
//Если пользователь отказался от выбора файла, то закрываем форму
Если Не Результат Тогда
Возврат;
КонецЕсли;
Модифицированность = Истина;
ЗаписатьВложениеНаСервере(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры);
КонецПроцедуры
&НаСервере
Процедура ЗаписатьВложениеНаСервере(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)
ВыбранныйФайл = Новый Файл(ВыбранноеИмяФайла);
НовыйФайл = Справочники.ХранилищеФайлов.СоздатьЭлемент();
НовыйФайл.Наименование = ВыбранныйФайл.Имя;
НовыйФайл.ИмяФайла = ВыбранныйФайл.Имя;
НовыйФайл.ВладелецФайла = Объект.Ссылка;
//Записываем данные файла из временного хранилища в реквизит формы справочника.
Если ЭтоАдресВременногоХранилища(Адрес) Тогда
НовыйФайл.Файлы = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(Адрес));
КонецЕсли;
НовыйФайл.Записать();
КонецПроцедуры
ПоказатьОткрытие (оно же сохранение)
&НаКлиенте
Процедура СписокФайловВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
СсылкаНаФайл = ПолучитьНавигационнуюСсылку(Элементы.СписокФайлов.ТекущиеДанные.Файл, "Файлы");
ПолучитьФайл(СсылкаНаФайл, Элементы.СписокФайлов.ТекущиеДанные.Файл);
КонецПроцедуры
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
а что конкретно не получается ? В каком месте ошибка, или что у вас происходит ?
и в этой строке, если отладчиком встать
то что находится в ПолученныеФайлы[0].Имя ? Это нормальное имя файла, с расширением, или абракадаберное временное имя без расширения ?
и в этой строке, если отладчиком встать
НачатьЗапускПриложения(Новый ОписаниеОповещения("НачатьЗапускПриложенияЗавершение", ЭтотОбъект), ПолученныеФайлы[0].Имя);
то что находится в ПолученныеФайлы[0].Имя ? Это нормальное имя файла, с расширением, или абракадаберное временное имя без расширения ?
(2)он сюда даже не заходит
останавливается по ошибки
тут вроде все получает
останавливается по ошибки
НачатьПолучениеФайлов(Новый ОписаниеОповещения("ОткрытьФайлЗавершение", ЭтотОбъект), МассивПолучаемыхФайлов,, Ложь);
тут
МассивПолучаемыхФайлов = Новый Массив;
МассивПолучаемыхФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(ПолноеИмяФайла, Адрес));
Попробуйте через ДвоичныеДанные
&НаСервере
Процедура ЗаписатьВложениеНаСервере(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)
ВыбранныйФайл = Новый Файл(ВыбранноеИмяФайла);
НовыйФайл = Справочники.ХранилищеФайлов.СоздатьЭлемент();
НовыйФайл.Наименование = ВыбранныйФайл.ИмяБезРасширения;
НовыйФайл.ИмяФайла = ВыбранныйФайл.Имя; //Тип Строка (неограниченная)
НовыйФайл.ВладелецФайла = Объект.Ссылка; // Тип ДокументСсылка, СправочникСсылка
СтруктураДанныхФайла = Новый Структура;
СтруктураДанныхФайла.Вставить("ИмяФайла", ВыбранныйФайл.Имя);
СтруктураДанныхФайла.Вставить("ДанныеФайла", Новый ДвоичныеДанные(ВыбранныйФайл.Имя));
НовыйФайл.Файлы = Новый ХранилищеЗначения(СтруктураДанныхФайла); //Тип ХранилищеЗначения
НовыйФайл.Записать();
КонецПроцедуры
Показать
(5) Да, все правильно пишет. Извиняюсь, недостаточно внимательно код прочитал. У вас сохранение на клиенте идет и потом имя файла на клиенте передается на сервер. Там оно уже не актуально.... Нужно сохранять двоичные данные на клиенте, помещать в хранилище на клиенте и адрес передавать на сервер.
Както так...
&НаКлиенте
Процедура ОбработатьВыборФайла(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
//Если пользователь отказался от выбора файла, то закрываем форму
Если Не Результат Тогда
Возврат;
КонецЕсли;
Модифицированность = Истина;
ДвоичныеДанные = Новый ДвоичныеДанные(ВыбранноеИмяФайла);
Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные)
ЗаписатьВложениеНаСервере(Результат, Адрес, ДополнительныеПараметры);
КонецПроцедуры
&НаСервере
Процедура ЗаписатьВложениеНаСервере(Результат, Адрес, ДополнительныеПараметры)
ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
ВыбранноеИмяФайла = ПолучитьИмяВременногоФайла();
ДвоичныеДанные.Записать(ВыбранноеИмяФайла);
ВыбранныйФайл = Новый Файл(ВыбранноеИмяФайла);
НовыйФайл = Справочники.ХранилищеФайлов.СоздатьЭлемент();
НовыйФайл.Наименование = ВыбранныйФайл.ИмяБезРасширения;
НовыйФайл.ИмяФайла = ВыбранныйФайл.Имя; //Тип Строка (неограниченная)
НовыйФайл.ВладелецФайла = Объект.Ссылка; // Тип ДокументСсылка, СправочникСсылка
СтруктураДанныхФайла = Новый Структура;
СтруктураДанныхФайла.Вставить("ИмяФайла", ВыбранныйФайл.Имя);
СтруктураДанныхФайла.Вставить("ДанныеФайла", ДвоичныеДанные);
НовыйФайл.Файлы = Новый ХранилищеЗначения(СтруктураДанныхФайла); //Тип ХранилищеЗначения
НовыйФайл.Записать();
КонецПроцедуры
ПоказатьКакто так...
(7)
вот здесь бы я не передавал на сервер адрес а сделал бы функцию серверную.
Ну и имя файла тоже...
Вот. На 100% правильность не претендую, т.к. код не отлаживал и в принципе его в 1с не проверял щас. но общая идея такая
вот здесь бы я не передавал на сервер адрес а сделал бы функцию серверную.
Ну и имя файла тоже...
&НаКлиенте
Процедура КаталогДокументовЗавершение(ИмяКаталогаДокументов, ДополнительныеПараметры) Экспорт
// Адрес = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
ИмяФайла = ПолучитьИмяВременногоФайла();
Адрес = ПолучитьДанныеФайлаНаСервереБезКонтекста(ИмяКаталогаДокументов);
ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
ДвоичныеДанные.Записать(ИмяФайла);
// Это тогда не надо
// ПолноеИмяФайла = ИмяКаталогаДокументов + ИмяФайла;
МассивПолучаемыхФайлов = Новый Массив;
МассивПолучаемыхФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяФайла, Адрес));
НачатьПолучениеФайлов(Новый ОписаниеОповещения("ОткрытьФайлЗавершение", ЭтотОбъект), МассивПолучаемыхФайлов,, Ложь);
КонецПроцедуры
&НаСервере
Функция ПолучитьДанныеФайлаНаСервереБезКонтекста(ИмяФайла)
СтруктураФайла = Справочники.ХранилищеФайлов.НайтиПоНаименованию(ИмяФайла);
возврат ПоместитьВоВременноеХранилище(СтруктураФайла.Файлы);
КонецФункции
ПоказатьВот. На 100% правильность не претендую, т.к. код не отлаживал и в принципе его в 1с не проверял щас. но общая идея такая
Добила это открытие. Вот что получилось:
Загрузка файла
Открытие (оно же сохранение)
Загрузка файла
&НаКлиенте
Процедура ЗагрузитьДоговор(Команда)
Оповещение = Новый ОписаниеОповещения("ОбработатьВыборФайла", ЭтотОбъект);
НачатьПомещениеФайла(Оповещение, , , Истина, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьВыборФайла(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
//Если пользователь отказался от выбора файла, то закрываем форму
Если Не Результат Тогда
Возврат;
КонецЕсли;
Модифицированность = Истина;
ЗаписатьВложениеНаСервере(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры);
КонецПроцедуры
&НаСервере
Процедура ЗаписатьВложениеНаСервере(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)
ВыбранныйФайл = Новый Файл(ВыбранноеИмяФайла);
НовыйФайл = Справочники.ХранилищеФайлов.СоздатьЭлемент();
НовыйФайл.Наименование = ВыбранныйФайл.Имя;
НовыйФайл.ИмяФайла = ВыбранныйФайл.Имя;
НовыйФайл.ВладелецФайла = Объект.Ссылка;
//Записываем данные файла из временного хранилища в реквизит формы справочника.
Если ЭтоАдресВременногоХранилища(Адрес) Тогда
НовыйФайл.Файлы = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(Адрес));
КонецЕсли;
НовыйФайл.Записать();
КонецПроцедуры
ПоказатьОткрытие (оно же сохранение)
&НаКлиенте
Процедура СписокФайловВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
СсылкаНаФайл = ПолучитьНавигационнуюСсылку(Элементы.СписокФайлов.ТекущиеДанные.Файл, "Файлы");
ПолучитьФайл(СсылкаНаФайл, Элементы.СписокФайлов.ТекущиеДанные.Файл);
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот