Имя: Пароль:
1C
 
Помещение\Извлечение данных из хранилища значения
0 NIGHTHUNTER
 
05.11.20
04:30
Разбирал пример по помещению, извлечению данных в хранилище значения. В разбираемом примере было 2 способа помещения данных в реквизит типа ХранилищеЗначения .
Сработал второй способ. На помещения работаю оба. но потом при помещении данных первым способом, нет возможности их извлечь. В чем не удача первого способа???

1. Способ - ЗаписатьФайлВрХр
2. Способ - ЗаписатьФайлДвД

3. Извлечение из хранилища значения ПолучитьДанные()


&НаКлиенте
Процедура ЗагрузитьWordМакет(Команда)
    ПолноеИмяФайла = "";
    ПутьФайла      = "";
    Если ПоместитьФайл(ПутьФайла, , ПолноеИмяФайла, Истина) = Истина Тогда
        // Временное хранилище
        //АдресВоВременномХранилище = ПутьФайла;
        //ЗаписатьФайлВрХр(АдресВоВременномХранилище, ПолучитьИмяФайла(ПолноеИмяФайла));
        //
        // Двоичные данные
        Данные = Новый ДвоичныеДанные(ПолноеИмяФайла);
        ЗаписатьФайлДвД(ПолучитьИмяФайла(ПолноеИмяФайла), Данные);
        //
    КонецЕсли;
КонецПроцедуры
//
&НаСервере
Процедура ЗаписатьФайлВрХр(АдресВоВременномХранилище, ИмяФайла)
    НовыйФайл               = Справочники.ФайлыWord.СоздатьЭлемент();
    НовыйФайл.Файл          = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(АдресВоВременномХранилище));
    НовыйФайл.Наименование  = ИмяФайла;
    НовыйФайл.ИмяФайла      = ИмяФайла;
    НовыйФайл.ВладелецФайла = Объект.Ссылка;
    НовыйФайл.Записать();
    //
    Объект.ФайлWordВ1с = НовыйФайл.Ссылка;
КонецПроцедуры
//
&НаСервере
Процедура ЗаписатьФайлДвД(ИмяФайла, Данные)
    НовыйФайл               = Справочники.ФайлыWord.СоздатьЭлемент();
    НовыйФайл.Файл          = Новый ХранилищеЗначения(Данные, Новый СжатиеДанных());
    НовыйФайл.Наименование  = ИмяФайла;
    НовыйФайл.ИмяФайла      = ИмяФайла;
    НовыйФайл.ВладелецФайла = Объект.Ссылка;
    НовыйФайл.Записать();
    //
    Объект.ФайлWordВ1с = НовыйФайл.Ссылка;
КонецПроцедуры
//
&НаКлиенте
Процедура ВыгрузитьМакетWord(Команда)
    Диалог                    = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
    Диалог.Заголовок          = "Выберите папку для сохранения";
    Диалог.МножественныйВыбор = Ложь;
    Если Диалог.Выбрать() Тогда
        ПолучитьДанные(Диалог.Каталог);
    КонецЕсли;
КонецПроцедуры
//
&НаСервере
Процедура ПолучитьДанные(Каталог)
    Если Прав(Каталог, 1) = "\" Тогда
        ИмяФайла = Каталог + Объект.ИмяФайла;
    Иначе
        ИмяФайла = Каталог + "\" + Объект.ФайлWordВ1с.ИмяФайла;
    КонецЕсли;
    Знч = Объект.ФайлWordВ1с.Файл.Получить();
    Знч.Записать(ИмяФайла);
КонецПроцедуры
//
1 Chameleon1980
 
05.11.20
06:31
не вчитывался, но зачем файл для хз? хз это тип значения. вот и смотри его методы
2 NIGHTHUNTER
 
05.11.20
11:34
(1) Для загрузки файла в 1с, в хранилище значения.
3 Kassern
 
05.11.20
12:27
(0) Если бы запихали во временное хранилище Двоичные данные, то все бы отработало. А вообще не мешало бы почитать следующее https://its.1c.ru/db/metod8dev#content:2597:hdoc
4 NIGHTHUNTER
 
05.11.20
12:39
(3) Так и было сделано.
В примере (0) было описано что метод ЗаписатьФайлВрХр . Не всегда работает.
Вот я и пытался узнать, когда он работает а когда нет.
Если он не работает, то зачем его вообще приводить.
Так как сам не опытный в помещении, извлечении данных из хранилища значения.
5 H A D G E H O G s
 
05.11.20
12:45
"Так как сам не опытный в помещении, извлечении данных из хранилища значения."
Да ладно, вы скромничаете.
У вас стаж работы даже с восьмеркой уже под 10 лет, а общего стажа в ИТ - 16 лет, побольше многих здесь будет. Да и такая стопка фирм, что огого. Вон, даже в Gigabyte работали.
https://docsarchive.net/691989/
6 H A D G E H O G s
 
05.11.20
12:47
Я конечно могу заблуждаться эту ссылку мне Боги интернета нашептали, поэтому все туманно и неточно.
7 Kassern
 
05.11.20
14:18
(4) Все зависит от того, что вы туда пытаетесь запихать. Почитайте Особенности использования сериализации https://its.1c.ru/db/metod8dev/content/2612/hdoc