|
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) в одной строке все ссылки?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |