Имя: Пароль:
1C
1С v8
Работа с хранилищем значения (управляемое приложение)
,
0 Ayvengo
 
28.11.12
11:46
Что-то не понимаю как мне в тонком клиенте заполнить хранилище значения у объекта.
Делаю следующее:
1. На сервере выполняю
   ЭтотОбъект = РеквизитФормыВЗначение("Объект");
   Сжатие = Новый СжатиеДанных(9);
   ЭтотОбъект.Файл = Новый ХранилищеЗначения(ДвоичныеДанные, Сжатие);
   ЗначениеВРеквизитФормы(ЭтотОбъект, "Объект");
2. Проверяю, получилось ли подгрузить файл:
&НаСервере
Функция ФайлСуществует()
   ЭтотОбъект = РеквизитФормыВЗначение("Объект");
   врФайл = ЭтотОбъект.Файл.Получить();
   Возврат врФайл <> Неопределено;
КонецФункции

Как же заполнить хранилище значения в управляемом приложении?
1 Wobland
 
28.11.12
11:52
вот у меня что-то такое
&НаКлиенте
Процедура Загрузить(Команда)
   Диалог=Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
   Диалог.МножественныйВыбор=Ложь;
   Диалог.Фильтр="Документы Word|*.doc|Все файлы|*.*";
   Если Диалог.Выбрать() Тогда
       АдресФайла=ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(Диалог.ПолноеИмяФайла), УникальныйИдентификатор);
       Ф=Новый Файл(Диалог.ПолноеИмяФайла);
       РасширениеФайла=Сред(Ф.Расширение, 2);
       Модифицированность=Истина;
   КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура Показать(Команда)
   #Если ВебКлиент Тогда
       Предупреждение("Не доделано, не додумано");
   #Иначе
       Если НЕ ЭтоАдресВременногоХранилища(АдресФайла) Тогда
           Возврат;
       КонецЕсли;
       ВременноеИмя=ПолучитьИмяВременногоФайла(РасширениеФайла);
       ПолучитьФайл(АдресФайла, ВременноеИмя, Ложь);
       ЗапуститьПриложение(ВременноеИмя);
   #КонецЕсли
КонецПроцедуры
2 Wobland
 
28.11.12
11:52
&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
   Если НЕ ЭтоАдресВременногоХранилища(АдресФайла) Тогда
       Возврат;
   КонецЕсли;
   НЗ=РегистрыСведений.ФайлыЗаданий.СоздатьНаборЗаписей();
   НЗ.Отбор.Задание.Установить(Объект.Ссылка);
   Запись=НЗ.Добавить();
   //к этому моменту ссылка не должна быть пустой
   Запись.Задание=Объект.Ссылка;
   Запись.Файл=Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(АдресФайла));
   Запись.Расширение=РасширениеФайла;
   НЗ.Записать();
КонецПроцедуры
3 Ayvengo
 
28.11.12
11:54
(2) мне не нужно программно записывать. Я бы могу в принципе сделать так, но я не хочу сохранять объект.

   ЭтотОбъект = РеквизитФормыВЗначение("Объект");
   Сжатие = Новый СжатиеДанных(9);
   ЭтотОбъект.Файл = Новый ХранилищеЗначения(ДвоичныеДанные, Сжатие);
   ЭтотОбъект.Записать();
4 Ayvengo
 
28.11.12
12:02
Цель следующая: подгрузить файл (картинку) в хранилище значения, а потом из хранилища загрузить на клиент и отобразить на форме.
Как бы это сделать =\
5 Wobland
 
28.11.12
12:19
&НаКлиенте
Процедура ФотоПриАктивизацииСтроки(Элемент)
   Если Элемент.ТекущиеДанные<>Неопределено Тогда
       АдресКартинки=ПолучитьНавигационнуюСсылку(Элемент.ТекущиеДанные.Фотография, "Фото");
   КонецЕсли;
КонецПроцедуры

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


фотография - справочнник, фото - как раз ХЗ
6 Ayvengo
 
28.11.12
12:28
(5) ээм... чет я не понял,а где мы подгружаем? Проблема в заполнении ХЗ.
7 Wobland
 
28.11.12
12:31
вот так я "подгружаю" в справочник
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
   Если ЭтоАдресВременногоХранилища(АдресКартинки) Тогда
       ТекущийОбъект.Фото=Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(АдресКартинки));
   КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура Загрузить(Команда)
   Перем Адрес;
   
   Диалог=Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
   Диалог.МножественныйВыбор=Ложь;
   Диалог.Фильтр=ПолучитьФильтрИзображений();
   Если Диалог.Выбрать() Тогда
       ПоместитьФайл(Адрес, Диалог.ПолноеИмяФайла, , Ложь, УникальныйИдентификатор);
       АдресКартинки=Адрес;
       Если ПустаяСтрока(Объект.Наименование) Тогда
           ф=Новый Файл(Диалог.ПолноеИмяФайла);
           Объект.Наименование=ф.ИмяБезРасширения;
       КонецЕсли;
       Модифицированность=Истина;
   КонецЕсли;
КонецПроцедуры
8 Ayvengo
 
28.11.12
12:32
(7) файловый вариант базы что ли или на сервере все работают?
9 Wobland
 
28.11.12
12:33
(8) чо?
10 Ayvengo
 
28.11.12
12:35
Ай, все понял.. ПоместитьВоВременноеХранилище - помещает его на сервере к себе куда-то. А потом можно спокойно извлекать.
Спасибо!
11 Ayvengo
 
28.11.12
12:48
(9) Я думал, что АдресКартинки - это путь к файлу .. от сюда и вопрос (8).