Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
18 апр 2024, 13:45

Сохранение файла в тонком клиенте

Автор SkyWorker, 12 окт 2012, 14:29

0 Пользователей и 1 гость просматривают эту тему.

SkyWorker

После выбора файла через диалоговое окно, для его дальнейшей передачи в реквизит документа типа "хранилищезначения" при работе через браузер (IE) вылетает ошибка: Конструктор не обнаружен. В чем может быть проблема?

Модуль формы документа:
&НаСервере
Процедура ПеремещениеФайлаВХранилище(ДанныеФайла)
Хранилище = Новый ХранилищеЗначения(ДанныеФайла);
ЭлементДок = РеквизитФормыВЗначение("Объект");
ЭлементДок.ХранилищеДокумента = Хранилище;
ЭлементДок.Записать();
ЗначениеВРеквизитФормы(ЭлементДок, "Объект");
КонецПроцедуры

&НаКлиенте
Процедура ФайлНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Если ПодключитьРасширениеРаботыСФайлами()=Ложь Тогда
УстановитьРасширениеРаботыСФайлами();
КонецЕсли;
СтандартнаяОбработка=ложь;
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытияФайла.ПолноеИмяФайла = "";
ДиалогОткрытияФайла.Заголовок = "Выберите файлы";
Если ДиалогОткрытияФайла.Выбрать() Тогда
ИмяФайла=ДиалогОткрытияФайла.ПолноеИмяФайла;
ВыборФайла =Новый Файл(ИмяФайла);
Объект.ИмяФайла=ВыборФайла.Имя;
ДанныеФайла = Новый ДвоичныеДанные(ИмяФайла);
ПеремещениеФайлаВХранилище(ДанныеФайла);
КонецЕсли;
КонецПроцедуры

Dethmontt

Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

SkyWorker

Цитата: Dethmontt от 12 окт 2012, 16:18
Заюзай
ПоместитьФайл()

Есть пример с получением параметров загружаемого файла через фунцию ПоместитьФайл(), в частности имени файла и дальнейшей выгрузкой из хранилищазначения из веб-клиента?

Dethmontt

Точно знаю в книжке Радченко есть... (Сам когда-то писал для примера знакомому....)
Если найду скину сюда
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

SkyWorker

Цитата: Dethmontt от 12 окт 2012, 19:57
Точно знаю в книжке Радченко есть... (Сам когда-то писал для примера знакомому....)
Если найду скину сюда

буду очень признателен, задача простая, но времени отнимает порядочно адаптация под тонкий клиент...

SkyWorker

Изменил вгрузку файла:
&НаСервере
Процедура ПеремещениеФайлаВХранилище(ДанныеФайла)
Хранилище = Новый ХранилищеЗначения(ДанныеФайла);
ЭлементДок = РеквизитФормыВЗначение("Объект");
ЭлементДок.ХранилищеДокумента = Хранилище;
ЭлементДок.Записать();
ЗначениеВРеквизитФормы(ЭлементДок, "Объект");
КонецПроцедуры

&НаКлиенте
Процедура ФайлНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Если ПодключитьРасширениеРаботыСФайлами()=Ложь Тогда
УстановитьРасширениеРаботыСФайлами();
КонецЕсли;
ИмяФайла = "";
ПоместитьФайл(,,ИмяФайла,,);
Файл = Новый Файл(ИмяФайла);
Объект.ИмяФайла=Файл.Имя;
КонецПроцедуры

Добавлено: 15 окт 2012, 11:20


Извиняюсь за предыдущий пост, вот корректное помещение в хранилище:
&НаСервере
Процедура ПеремещениеФайлаВХранилище(ДвоичныеДанные)
Хранилище = новый ХранилищеЗначения(ДвоичныеДанные);
ЭлементДок = РеквизитФормыВЗначение("Объект");
ЭлементДок.ХранилищеДокумента = Хранилище;
ЭлементДок.Записать();
ЗначениеВРеквизитФормы(ЭлементДок, "Объект");
КонецПроцедуры

&НаКлиенте
Процедура ФайлНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Если ПодключитьРасширениеРаботыСФайлами()=Ложь Тогда
УстановитьРасширениеРаботыСФайлами();
КонецЕсли;
ИмяФайла = ""; Адрес = "";
ПоместитьФайл(Адрес,,ИмяФайла,,);
Файл = Новый Файл(ИмяФайла);
Объект.ИмяФайла=Файл.Имя;
ПеремещениеФайлаВХранилище(ПолучитьИзВременногоХранилища(Адрес));
КонецПроцедуры

Dethmontt

&НаКлиенте
Процедура Команда1(Команда)
               
                Адрес = "";
                Выбфайл = "";
                Если ПоместитьФайл(Адрес,,Выбфайл,,УникальныйИдентификатор) Тогда
                               
                               Элементы.Имя.Видимость = Истина;
                               мФайл = Новый Файл(Выбфайл);
                               имя = мФайл.Имя;
                               СсылкаНа = Адрес;
                               
                               Модифицированность = Истина;
                               
                КонецЕсли;
               
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
               
                Если Объект.ИмяФ <> "" Тогда
                               СсылкаНа = ПолучитьНавигационнуюСсылку(Объект.Ссылка,"Файл");
                КонецЕсли;
                               
КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
               
                Если ЭтоАдресВременногоХранилища(СсылкаНа) Тогда
                               Двд = ПолучитьИзВременногоХранилища(СсылкаНа);
                               ТекущийОбъект.Файл = Новый ХранилищеЗначения(Двд, Новый СжатиеДанных(9));
                               ТекущийОбъект.ИмяФ = Имя;
                КонецЕсли;       
               
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
               
                Если Объект.ИмяФ <> "" Тогда
                               Элементы.Имя.Видимость = Истина;
                КонецЕсли;       
               
КонецПроцедуры
//СсылкаНА - Это реквизит формы с типом Картинка и ПутьКДанным на реквизит объекта Файл - тип Строка
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

SkyWorker

Открытие нужных данных реализовал так:
&НаСервере
Функция Адрес(Номер)
Запрос = новый запрос("
|ВЫБРАТЬ ПорядковыйНомер, ХранилищеДокумента, ИмяФайла
|ИЗ РегистрНакопления.Разнарядки КАК Разнарядки
|ГДЕ ПорядковыйНомер=&Номер");
Запрос.УстановитьПараметр("Номер",Номер);
РезультатЗапроса = запрос.Выполнить();
таб = новый таблицазначений;
таб=РезультатЗапроса.Выгрузить();
Хранилище=таб.Получить(0).ХранилищеДокумента;
ИмяФайла=таб.Получить(0).ИмяФайла;
Адрес=ПоместитьВоВременноеХранилище(Хранилище.Получить(),ЭтаФорма.УникальныйИдентификатор);
Возврат(Адрес);
КонецФункции

&НаКлиенте
Процедура ТаблицаОснованиеОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка=ложь;
ПолучитьФайл(Адрес(Элементы.Таблица.ТекущиеДанные.ПорядковыйНомер),Элементы.Таблица.ТекущиеДанные.Основание,Истина);
КонецПроцедуры

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск