Имя: Пароль:
1C
1С v8
ХранилищеЗначения и внешняя обработка
0 Aradel3d
 
24.02.15
11:57
Добрый день!
Не могу разобраться с хранилищем значения. В примерах создают новое ХранилищеЗначения, помещают туда данные, затем считывают, когда переменная уже объявлена. Так и у меня работает. Однако мне нужно получать данные из хранилища при открытии формы, в этот момент разумеется моя переменная-хранилище еще не создана. А если и создать,  то там по идее будет пусто, неопределено. Также находил пример использования ХЗ в документах-справочниках, там объявляют реквизит ХЗ и записывают документ со значением. А после у них есть метод получить(). Но как быть внешней обработкой?
1 Aradel3d
 
24.02.15
11:58
Форма обычная.
2 hawksib
 
24.02.15
11:59
В переменную среды запишите значение
3 Aradel3d
 
24.02.15
12:06
Как? Есть реквизит внешней обработки "Хранилище" с типом произвольный, туда помещаю НОВЫЙ ХранилищеЗначения(Организация). Это ведь не документ, как записать внешнюю обработку?
4 hawksib
 
24.02.15
12:09
помещайте НОВЫЙ чето там не в реквизит внешней обработки, а в переменную среды, прочитайте про метод СохранитьЗначение(Имя, Значение) в справке
5 D_E_S_131
 
24.02.15
12:09
Ну сохранять как параметры формы можно, используя предопределенные процедуры "ПриСохранении" и "ПослеВосстановления".
6 Aradel3d
 
24.02.15
12:11
Ненене (5) я поэтому и занялся изучением Хранилища, т.к. велено отказаться от стандартного сохранить восстановить настройки.
7 hawksib
 
24.02.15
12:14
(6) реквизиты внешней обработки должны быть куда-нибудь записаны, когда форма открывается, если не запрограммировано заполнение реквизитов, это нормально, что реквизиты обработки не заполнены
8 Aradel3d
 
24.02.15
12:25
(7) и все-таки не могу понять...

Моя задача такая: уйти от "Сохранить/восстановить значения" из-за того, что они постоянно слетают у пользователей, а настроек много. Сказано задействовать ХранилищеЗначения. Но при этом мне не ясно: 1) не тоже самое ли это, что и в предыдущем случае т.к. вы упомянули про СохранитьЗначение, а там сказано про связку информационная база - пользователь 2) Сохранил значения, при след. открытии формы реквизит также Неопределено, никакого получить() разумеется не содержит.

Не могли бы вы объяснить целостно механизм?
9 Boroda
 
24.02.15
12:36
Может посмотреть в сторону "Внешние отчеты и обработки"  УТ11? Там вроде как и пример есть загрузки прайс-листа, где как раз используется хранилище значения для хранения настроек.
10 hawksib
 
24.02.15
12:54
(8) если слетают настройки, непонятно почему! (причем непонятно мне, ни разу не сталкивался) как вариант сохраняйте настойку в файл на диске, а при открытии формы восстанавливайте их из файла, пример можете в моей обработке глянуть http://infostart.ru/public/150719/
в файлик я сохранял "структуру группировок документов информационной базы"
11 Aradel3d
 
24.02.15
13:00
(10) Хотелось бы узнать - есть ли разница в таком случае между сохранением настроек по кнопкам на форме и программной записью в хранилище? Т.е. если связка слетает, то в обоих случаях один эффект?
12 hawksib
 
24.02.15
13:06
думаю что есть

Глобальный контекст (Global context)
ХранилищаНастроек (SettingsStorages)
Использование:
Только чтение.
Описание:
Тип: ХранилищаНастроекМенеджер.
Предназначено для доступа к хранилищам настроек, которые созданы в конфигурации.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Примечание:
Не дает доступа к стандартному хранилищу.

ХранилищеЗначения (ValueStorage)
Методы:
Получить (Get)
Конструкторы:
На основании значения
Описание:
Предназначен для хранения значения в специальном формате. Он может быть записан в поля базы данных, имеющие соответствующий тип. Это позволяет сохранять в базе данных значения, тип которых не может быть выбран в качестве типа поля, например, Картинка.
Большинство объектов, которые имеют неизменяемое значение, а также универсальные коллекции, могут быть помещены в ХранилищеЗначения. К значению, хранящемуся в объекте, нельзя обращаться, его можно только извлечь из хранилища.
Описания типов объектов, которые могут быть помещены в ХранилищеЗначения, включают текст "Сериализуется".
Замечание! Не рекомендуется хранить в реквизитах типа ХранилищеЗначения ссылки на другие объекты базы данных.
Важно! В системе не поддерживается ссылочная целостность по объектам, сохраненным в базе данных в полях типа ХранилищеЗначения. Это означает, что при попытке удаления, например, элементов справочников система не контролирует ссылки на эти элементы, сохраненные в ХранилищеЗначения.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Возможен обмен с сервером. Сериализуется. Данный объект может быть сериализован в/из XML. Может использоваться в реквизитах управляемой формы. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.1/data/core}. Имя типа XDTO: ValueStorage.
Пример:
МояКартинка = Новый Картинка("C:\Мои документы\Картинка1.bmp");
ХранилищеКартинки = Новый ХранилищеЗначения(МояКартинка);
НовНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
НовНоменклатура.Наименование = "Диван ""Маргарита""";
НовНоменклатура.Изображение = ХранилищеКартинки;
НовНоменклатура.Записать();
См. также:
ДвоичныеДанные, метод Записать
13 D_E_S_131
 
24.02.15
13:25
(11) Разница в том, что можно сохранить что-то, что не выведено как реквизит на форме. А вообще в типовых конфигурациях бывает, что уже есть какой-нибудь регистр сведений для хранения информации. Я вот, например, как-то делал для УТ 10.3 печатную форму ТТН. Для заполнения нужных полей для формирования ТТН предварительно открывалась форма. Тут же потребовалось сохранить введенные данные на форме. Стал закидывать их в XML, а файл XML сохранять через механизм прикрепленных файлов.