Имя: Пароль:
1C
1С v8
v8: УФ, как получить из ХранилищеЗначений, данные в двоичном формате.
0 Alex11
 
05.12.13
17:30
Ни как не могу вытащить данные, в том виде в котором они там записаны.
Т.е. Если написать
СсылкаНаКартинку = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ФотоМатериалы.ДанныеФайла", Индекс);

ПолучитьФайл(СсылкаНаКартинку);

И в зависимости от параметров, то получаем либо в интерактивном режиме диалог сохранения файла, либо с указанными параметрами сохранится по указанному пути в параметре.

А надо что то как при сохранении в хранилище.
Типа как то так
ДвоичныеДанные = СсылкаНаКартинку.(И не известный метод получения)

Метод Получить() соот-но не работает тонком клиенте, а нужна универсальность.
Может кто знает как быть?
1 Alex11
 
05.12.13
19:19
up
2 Fram
 
05.12.13
19:52
ПоместитьВоВременноеХранилище
ПолучитьИзВременногоХранилища
3 olegves
 
05.12.13
19:53
ДВДАнные = Объект.РеквизитХЗ.Получить()
4 Fram
 
05.12.13
19:55
(3) чукча не читатель? :)
5 olegves
 
05.12.13
20:01
(4) самокритично, Временное хранилище от хранилища значений не отличил?
6 Alex11
 
05.12.13
20:07
(3) как сказано выше отпадает, в тонком клиенте не отработает.
(2) Пробовал, но не выходит каменный цветок, каким образом из хранилища данные то забрать
Должно быть тогда типа такого:

ДвоичныеДанные(ПоместитьВоВременноеХранилище(ПолучитьНавигационнуюСсылку(Объект.Ссылка,"ФотоМатериалы.ДанныеФайла", Индекс);

Но не пашет
7 Alex11
 
05.12.13
20:08
точнее вот так
ДвоичныеДанные = ПоместитьВоВременноеХранилище(ПолучитьНавигационнуюСсылку(Объект.Ссылка,"ФотоМатериалы.ДанныеФайла", Индекс));
8 Пират
 
05.12.13
20:08
Как огромную таблицу значений записать в двоичные данные и получить ее на клиенте в виде коллекции?
9 olegves
 
05.12.13
20:09
(7) что ты собираешься делать с двоичными данными в тонком клиенте?
10 Alex11
 
05.12.13
20:17
(8), (9)
Есть таблица, с полем ХЗ, в справочнике. Открывается таблица в произвольной форме из открытого элемента номенклатуры, в произвольную форму передается параметром, там обрабатывается и кидается на реквизит формы.
В этой форме, добавляются фото, там же и просматриваются, если уже были добавленные.
Проблема в следующем:
Создаю новый элемент, открываю форму, кидаю фоты, записываю, все работает, фоты сохраняются, потом снова открываются в произвольной форме. НО если внести какие то изменений в эту таблицу в произвольной форме, то данные ХЗ теряются, при чем в

ПередЗаписьюНаСервере

Проверяю новые данные являются ли временным хранилищем, если да записываю, если нет пропускаю, и оставляю как было. Но тем не менее фоты теряются.

Вот возникла мысль, при открытии произвольной формы, создать некий кэш из данных с фотками, потом снова сохранить.

Да и я тут подумать. что в тонком клиенте, при методе ПОлучитьНавигационнуюСсылку, также данные передаются и в том же объеме.
11 Alex11
 
05.12.13
20:23
При чем думаю. что проблема где то кроется в вызове и обработке произвольной формы, но размещать таблицу на основной форме справочника не хочу, задача не перегружать интерфейс элементами, которые не являются основными.
12 olegves
 
05.12.13
20:27
(10) 1.создаешь реквизит формы тип строка
2. привязываешь его к элементу формы тип Адрес картинки
3. при создании на сервере получаешь навиг.ссылку и помещаешь ее в этот реквизит
4. при получении из файла помещаешь картинку во врем.хр-ще, а ссылку на ВХ в этот реквизит
5. перед записью на серв проверяешь тип реквизита, если это врем.хр-ще, то получаешь из ВХ данные и помещаешь в реквизит объекта
13 Alex11
 
05.12.13
20:32
(12) Спасибо за развернутый ответ!
Только я все это сделал уже, и с начала так все и работает. тут проблема в том, что при закрытии произвольной формы, я данные из реквизиты формы отдаю в объект элемента (как раз ту таблицу с ХЗ), через метод Загрузить(Выгрузить()) И при добавлении все работает. но если я открываю записанный элемент, добавляю 1 фоту новую, потом записываю, то новая записывается, а все что было становится пустым, хотя навигационную ссылку на эти фотки формирует
14 Alex11
 
05.12.13
20:33
Ща основные блоки кода покажу
15 olegves
 
05.12.13
20:36
(13) перед записью перечитывай свою таблицу с ХЗ, и заменяй только ту строку, которая на форме изменилась из вр.хр-ща
16 Alex11
 
05.12.13
20:38
Открытие произвольной формы:
    Для Каждого СтрокаТЧ Из Объект.ФотоМатериалы Цикл
        НоваяСтрока = ФотоМатериалы.Добавить();
        НоваяСтрока.Наименование = СтрокаТЧ.Наименование;
        
        Если ЭтоАдресВременногоХранилища(СтрокаТЧ.СсылкаНаКартинку) Тогда
            НоваяСтрока.СсылкаНаКартинку = СтрокаТЧ.СсылкаНаКартинку
        Иначе
            НоваяСтрока.СсылкаНаКартинку = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ФотоМатериалы.ДанныеФайла", НомерСтроки);
        КонецЕсли;
        НомерСтроки = НомерСтроки + 1;
    КонецЦикла;

    
    ПараметрыФормы = Новый Структура("ФотоМатериалы, СсылкиНаПродукцию, ЧПУ, Наименование, КраткаяЗапись",
                                     ФотоМатериалы, Объект.СсылкиНаПродукцию);
    
    Результат = ОткрытьФормуМодально("Справочник.Сайт1С_Новости.Форма.ДополнительныеМатериалы", ПараметрыФормы,УникальныйИдентификатор);
    
    Если Результат <> Неопределено Тогда
        ЗанесениеДополнительныхМатериалов(Результат);    
        Модифицированность = Истина
    КонецЕсли;



В произвольной форме, при открытии:

    ФотоМатериалы.Очистить();
    ФотоМатериалы.Загрузить(Параметры.ФотоМатериалы.Выгрузить());


В произвольной форме при закрытии:
    Если ЭтаФорма.Модифицированность Тогда
        Данные = Новый Структура;
        Данные.Вставить("ФотоМатериалы", ФотоМатериалы);
        Данные.Вставить("СсылкиНаПродукцию", СсылкиНаПродукцию);

        ОповеститьОВыборе(Данные);
    КонецЕсли;


В произвольной форме, загрузка фото:

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


В форме элемента справочника, при закрытии произвольной формы

Функция ЗанесениеДополнительныхМатериалов(ДанныеРеквизитов)
    Объект.ФотоМатериалы.Очистить();
    Для каждого Реквизит из ДанныеРеквизитов Цикл
           Объект[Реквизит.Ключ].Загрузить(Реквизит.Значение.Выгрузить());
        КонецЦикла
        

    
КонецФункции

И

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

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

          КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры
17 Alex11
 
05.12.13
20:43
(15) Процедура ПередЗаписьюНаСервере по сути это и должна делать, там проверка на типссылки, и если она временная, то сохраняет, если нет пропускает.

Но я думаю, возможно когда делаю вот так:
    Объект.ФотоМатериалы.Очистить();
    Для каждого Реквизит из ДанныеРеквизитов Цикл
           Объект[Реквизит.Ключ].Загрузить(Реквизит.Значение.Выгрузить());
        КонецЦикла

Я убиваю уже те данные, которые хранились в Объект.ФотоМатериалы

Но сразу отмечу, что без Объект.ФотоМатериалы.Очистить();
Происходит тоже самое, теряются уже внесенные до этого данные, я подумал, что ссылки навигационные у меня и так сохранены в реквизите формы, вот они обратно может туда и попадут
18 olegves
 
05.12.13
20:48
(17) ты на форме несколько картинок меняешь?

СсылкиНаПродукцию - тип какой?
19 Alex11
 
05.12.13
20:50
тип Строка
20 olegves
 
05.12.13
20:53
внимательно прочитай (12) и сделай так - у тебя не так
21 olegves
 
05.12.13
20:55
(19) в одной строке все ссылки?