![]() |
![]() |
![]() |
|
Работа с хранилищем значений | ☑ | ||
---|---|---|---|---|
0
Castlevania
24.08.10
✎
21:20
|
Есть справочник. В его реквезите нужно хранить файлы в различных форматах-doc, xls. Я слышала что можно это сделать через Хранилище значений. Но никогда с хранилищем не работала. Подскажите пожалуйста, как это сделать?
|
|||
1
Лефмихалыч
24.08.10
✎
21:26
|
ХранилищеЗначения (ValueStorage)
Методы: Получить (Get) Конструкторы: На основании значения Описание: Предназначен для хранения значения в специальном формате. Он может быть записан в поля базы данных, имеющие соответствующий тип. Это позволят сохранять в базе данных значения, тип которых не может быть выбран в качестве типа поля, например, Картинка. Большинство объектов, которые имеют неизменяемое значение, а также универсальные коллекции, могут быть помещены в ХранилищеЗначения. К значению, хранящемуся в объекте, нельзя обращаться, его можно только извлечь из хранилища. Описания типов объектов, которые могут быть помещены в ХранилищеЗначения, включают текст "Сериализуется". Замечание! Не рекомендуется хранить в реквизитах типа ХранилищеЗначения ссылки на другие объекты базы данных. Важно! В системе не поддерживается ссылочная целостность по объектам, сохраненным в базе данных в полях типа ХранилищеЗначения. Это означает, что при попытке удаления, например, элементов справочников система не контролирует ссылки на эти элементы, сохраненные в ХранилищеЗначения. Возможен обмен с сервером. Сериализуется. XML-сериализация. Поддержка отображения в XDTO; пространство имен: {http://v8.1c.ru/8.1/data/core}. Имя типа XDTO: ValueStorage. Пример: МояКартинка = Новый Картинка("C:\Мои документы\Картинка1.bmp"); ХранилищеКартинки = Новый ХранилищеЗначения(МояКартинка); НовНоменклатура = Справочники.Номенклатура.СоздатьЭлемент(); НовНоменклатура.Наименование = "Диван ""Маргарита"""; НовНоменклатура.Изображение = ХранилищеКартинки; НовНоменклатура.Записать(); См. также: ДвоичныеДанные, метод Записать |
|||
2
Лефмихалыч
24.08.10
✎
21:26
|
это в общем, а в частности:
ДвоичныеДанные (BinaryData) Методы: Записать (Write) Конструкторы: На основании файла Описание: Значение содержит двоичные данные, которые считываются из файла. Значение может быть сохранено в ХранилищеЗначения. Хранимые данные могут быть записаны в файл. Сериализуется. XML-сериализация. Поддержка отображения в XDTO; пространство имен: {http://www.w3.org/2001/XMLSchema}. Имя типа XDTO: может быть любым из перечисленных: base64Binary, hexBinary. Пример: МояКартинка = Новый ДвоичныеДанные("C:\Мои документы\Картинка1.bmp"); ХранилищеКартинки = Новый ХранилищеЗначения(МояКартинка); // сохранение значения типа ХранилищеЗначения в базе данных НовНоменклатура = Справочники.Номенклатура.СоздатьЭлемент(); НовНоменклатура.Наименование = "Диван ""Маргарита"""; // реквизит Изображение имеет тип ХранилищеЗначения НовНоменклатура.Изображение = ХранилищеКартинки; НовНоменклатура.Записать(); ... // выгрузка значения типа ДвоичныеДанные из хранилища значений в файл ИмяФайла = "C:\Мои документы\Картинка2.bmp"; НовНоменклатура.Изображение.Получить().Записать(ИмяФайла); См. также: ПочтовоеВложение, свойство Данные ПочтовыеВложения, метод Добавить ИнтернетПочтовыеВложения, метод Добавить Картинка, метод ПолучитьДвоичныеДанные Глобальный контекст, метод Base64Значение Глобальный контекст, метод Base64Строка Картинка, конструктор Формирование из двоичных данных ИнтернетТекстПочтовогоСообщения, свойство Данные |
|||
3
Лефмихалыч
24.08.10
✎
21:27
|
СП током бьется при попытке его почитать, что ли?
|
|||
4
Castlevania
24.08.10
✎
21:32
|
(3) Чтобы его применить, нужно создать реквизит в справочнике?
|
|||
5
H A D G E H O G s
24.08.10
✎
21:33
|
Плохой пример.
Примерщика на мыло. |
|||
6
Castlevania
24.08.10
✎
21:33
|
Или можно элемент формы с типом Хранилище?
|
|||
7
Лефмихалыч
24.08.10
✎
21:33
|
(4) чтобы применить - не нужно а вот, чтобы сохранить - обязательно
|
|||
8
Castlevania
24.08.10
✎
21:34
|
А как его потом извлечь?
|
|||
9
H A D G E H O G s
24.08.10
✎
21:34
|
(4) Безусловно
|
|||
10
Castlevania
24.08.10
✎
21:35
|
И еще такой ламерский вопрос: можно ли хранить сразу несколько файлов одного или разных типов?
|
|||
11
Лефмихалыч
24.08.10
✎
21:35
|
(5) дай свой
(8) обратным образом, об этом тоже в СП написано точно такими же русскими буквами, только спрашивать ни о чем не надо |
|||
12
Castlevania
24.08.10
✎
21:36
|
+(10) В одном реквезите
|
|||
13
H A D G E H O G s
24.08.10
✎
21:36
|
Смотрим типовые конфы, не зря там в Номенклатуре Ссылка на справочник с Хранилищем, а не само Хранилище.
Отдел разработки типовых конфигураций так исправил косяк отдела разработки платформы. |
|||
14
Лефмихалыч
24.08.10
✎
21:37
|
(10) скрючь раром в один и храни наздоровье. А еще лучше, открой любую туповую и погляди, как там ХранилищеДополнительнойИнформации сделано
|
|||
15
Лефмихалыч
24.08.10
✎
21:37
|
(12) а зачем именно в одном? чтобы понятнее было и проще потом с этим работать?
|
|||
16
H A D G E H O G s
24.08.10
✎
21:37
|
(10) Да!
Храни в хранилище СписокЗначений с элементами - ДвоичнымиДанными. |
|||
17
Castlevania
24.08.10
✎
21:39
|
(15) Просто я не знаю что юзвери там будут хранить :) Просили сделать возможность сохранения всех файлов
|
|||
18
Лефмихалыч
24.08.10
✎
21:41
|
(17) смотри ХранилищеДополнительнойИнформации, не изобретай велосипедов
|
|||
19
Castlevania
24.08.10
✎
21:43
|
(18) Это не типовая. Самописная
|
|||
20
Лефмихалыч
24.08.10
✎
21:44
|
(19) тем более
|
|||
21
Лефмихалыч
24.08.10
✎
21:44
|
+(20) это будет единственная качественная вещь во всей конфе
|
|||
22
Castlevania
24.08.10
✎
21:47
|
(21) А где можно почитать про это?
|
|||
23
Castlevania
24.08.10
✎
21:47
|
Или это тоже самое, что и Хранилище Значения?
|
|||
24
Лефмихалыч
24.08.10
✎
21:50
|
(22) открой УТ, БП или УПП, найди там справочник ХранилищеДополнительнойИнформации, посмотри, как он работает в предприятии (он как раз для хранения файлов и придуман), а потом иди в конфигуратор и изучи, как эти сотонисты из 1С этого добились. Потом тебе не составит труда методом копипасты в свой нетленке сделать то же самое, даже лучше
|
|||
25
Castlevania
24.08.10
✎
21:51
|
(24) Спасибо огромное. Сейчас этим займусь:)
|
|||
26
Castlevania
25.08.10
✎
13:02
|
В общем сделала так:
/ запишем файл в хранилище Отказ = Ложь; Если ЭтоНовый() Тогда Вопрос = "Перед вводом файлов и изображений необходимо записать элемент. Записать?"; Ответ = Вопрос(Вопрос, РежимДиалогаВопрос.ОКОтмена); Если Ответ = КодВозвратаДиалога.ОК Тогда Отказ = Не ЗаписатьВФорме(); Иначе Отказ = Истина; КонецЕсли; КонецЕсли; Если НЕ Отказ Тогда ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогОткрытияФайла.Заголовок = "Выберите файл"; Если ДиалогОткрытияФайла.Выбрать() Тогда ВыбранныйФайл = Новый Файл(ДиалогОткрытияФайла.ПолноеИмяФайла); //ЭлементыФормы.ОсновноеИзображение.Картинка = ВыбранноеФото; Файл = Новый Файл(ДиалогОткрытияФайла.ПолноеИмяФайла); НайтиИмя = Справочники.ХранилищеДополнительнойИнформации.НайтиПоНаименованию(Строка(Файл.ПолноеИмя)); Если НайтиИмя.Наименование = "" Тогда НовыйЭлемент = Справочники.ХранилищеДополнительнойИнформации.СоздатьЭлемент(); НовыйЭлемент.Объект = ЭтотОбъект.Ссылка; НовыйЭлемент.ВидДанных = Перечисления.ВидыДополнительнойИнформацииОбъектов.Файл; НовыйЭлемент.Наименование = Строка(Файл.ПолноеИмя); НовыйЭлемент.Хранилище = Новый ХранилищеЗначения(Файл); НовыйЭлемент.Записать(); //ОсновноеИзображение = НовыйЭлемент.Ссылка; //Иначе //ОсновноеИзображение = НайтиИмя.ССылка; КонецЕсли; Иначе Отказ = Истина; Возврат; КонецЕсли; КонецЕсли; Но как его оттуда извлечь, я не найду. В типовой сложно все |
|||
27
Amiralnar
25.08.10
✎
13:06
|
(16) ОМГ!!! В кошмарном сне врагу не пожелаю...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |