Имя: Пароль:
1C
1С v8
1с 8.3 хранилище значения
0 putilin
 
18.06.14
10:02
Помогите, пожалуйста, разобраться с хранилищем значения.

На управляемой форме кнопка ЗаписатьХЗ

&НаКлиенте
Процедура ЗаписатьХЗ(Команда)
    ЗаписатьХЗ_НаСервере();
КонецПроцедуры

&НаСервере
Процедура ЗаписатьХЗ_НаСервере()
    аСтрока    = "12345";
    ХранилищеЗ = Новый ХранилищеЗначения(аСтрока);
    ХЗ         = ХранилищеЗ;
    Записать();
    
    //--- проверяем что в Рез записана строка 12345
    Рез = ХЗ.Получить();
КонецПроцедуры

Работает!

А вот прочитать :(

&НаКлиенте
Процедура ПрочитатьХЗ(Команда)
    ПрочитатьХЗ_НаСервере();
КонецПроцедуры

&НаСервере
Процедура ПрочитатьХЗ_НаСервере()
    //ЭтотОбъект = РеквизитФормыВЗначение("Объект");
    //Адрес      = //ПоместитьВоВременноеХранилище(ЭтотОбъект.ХЗ.Получить(),УникальныйИдентификатор);
    //Рез        = ПолучитьИзВременногоХранилища(Адрес);    
    //
    //или
    Адрес = ПолучитьНавигационнуюСсылку(Объект.Ссылка,"ХЗ");
    Рез   = ПолучитьИзВременногоХранилища(Адрес);    
КонецПроцедуры

Не получается....
1 Рэйв
 
18.06.14
10:06
А так?

Рез   = ПолучитьИзВременногоХранилища(Объект.ХЗ)
2 Infsams654
 
18.06.14
10:14
(1)+ а вообще, зачем Новый ХранилищеЗначений?
Есть
ПоместитьВоВременноеХранилище.
См. справку последнюю строку


ПолучитьИзВременногоХранилища (GetFromTempStorage)
Синтаксис:

ПолучитьИзВременногоХранилища(<Адрес>)
Параметры:

<Адрес> (обязательный)

Тип: Строка.
Адрес, указывающий на значение во временном хранилище.
Возвращаемое значение:

Тип: Произвольный.
Значение, ранее помещенное с помощью метода ПоместитьВоВременноеХранилище.
3 putilin
 
18.06.14
10:17
Рэйв, Не получается...
Объект.ХЗ - Ошибка: поле объекта не обнаружено

Если так:
    ЭтотОбъект = РеквизитФормыВЗначение("Объект");
    Адрес      = ПоместитьВоВременноеХранилище(ЭтотОбъект.ХЗ.Получить(),УникальныйИдентификатор);
    Рез   = ПолучитьИзВременногоХранилища(ЭтотОбъект.ХЗ);

Неправильный путь к файлу ХранилищеЗначений...
4 Рэйв
 
18.06.14
10:19
(3)Тогда пробуй как в (2) и не мучайся.
5 putilin
 
18.06.14
10:20
Infsams654
ХЗ это реквизит справочника с типом ХранилищеЗначения
Мне кажется чтобы туда записать это значение, надо создать
Новый
а потом записать элемент справочника, затем из справочника считать во временное хранилище (не понимаю почему) и тогда считываю со временного хранилища...
6 Рэйв
 
18.06.14
10:23
(5) ХЗ реквизит?
А почему ты тогда пишешь
ХЗ         = ХранилищеЗ;

А нет
Объект.ХЗ         = ХранилищеЗ;
?

в первом случае это у тебя просто переменная.
7 putilin
 
18.06.14
10:24
Ой, конечно....
8 putilin
 
18.06.14
10:30
Исправил запись в реквизит справочника

&НаСервере
Процедура ЗаписатьХЗ_НаСервере()
    ЭтотОбъект = РеквизитФормыВЗначение("Объект");
    аСтрока    = "12345";
    ХранилищеЗ = Новый ХранилищеЗначения(аСтрока);
    ЭтотОбъект.ХЗ  = ХранилищеЗ;
    Записать();
    
    //--- проверяем что в Рез записана строка 12345
    Рез = ЭтотОбъект.ХЗ.Получить();
КонецПроцедуры

а чтение все равно не работает
&НаСервере
Процедура ПрочитатьХЗ_НаСервере()
    ЭтотОбъект = РеквизитФормыВЗначение("Объект");
    Адрес      = ПоместитьВоВременноеХранилище(ЭтотОбъект.ХЗ.Получить(),УникальныйИдентификатор);
    Рез   = ПолучитьИзВременногоХранилища(ЭтотОбъект.ХЗ);
КонецПроцедуры

ЭтотОбъект.ХЗ.Получить() = неопределено
9 Рэйв
 
18.06.14
10:34
:-)
РеквизитФормыВЗначение("Объект");

подразумевает в конце

ЗначениевРеквизитФормы(ЭтотОбъект,"Объект");
10 Рэйв
 
18.06.14
10:34
в конце серверной процедуры
11 Рэйв
 
18.06.14
10:35
инчае при возврате на клииент объект теряется и у тебя ничего не записывается
12 Infsams654
 
18.06.14
10:40
(11)+ это раз. Во 2-х:
"ХЗ это реквизит справочника с типом ХранилищеЗначения" -
зачем тогда временное хранилище, если это реквизит объекта?
Ничего никуда передавать не надо, просто достать от туда
13 putilin
 
18.06.14
10:49
Переделал
&НаСервере
Процедура ЗаписатьХЗ_НаСервере()
    ЭтотОбъект = РеквизитФормыВЗначение("Объект");
    аСтрока    = "12345";
    ХранилищеЗ = Новый ХранилищеЗначения(аСтрока);
    ЭтотОбъект.ХЗ  = ХранилищеЗ;
    //Записать(); убрал, а то давала ошибку
    
    //--- проверяем что в Рез записана строка 12345
    Рез = ЭтотОбъект.ХЗ.Получить();
    ЗначениевРеквизитФормы(ЭтотОбъект,"Объект");
КонецПроцедуры

Записываю элемент справочника стандартной кнопкой

Читаю
&НаСервере
Процедура ПрочитатьХЗ_НаСервере()
    ЭтотОбъект = РеквизитФормыВЗначение("Объект");
    Рез = ЭтотОбъект.ХЗ.Получить();
Показывает Рез = Неопределено
КонецПроцедуры
14 Infsams654
 
18.06.14
11:04
(13) //Записать(); убрал, а то давала ошибку
ЗначениевРеквизитФормы( - это что, не дает ошибку?
Есть ЗначениеВРеквизитФормы

данные объекта должны перенестись в данные формы, а потом
"Записываю элемент справочника стандартной кнопкой "
15 putilin
 
18.06.14
11:09
там есть в, только она маленькая
16 putilin
 
18.06.14
11:11
Может просто есть пример, записать в реквизит справочника типа хранилище значения строку и прочитать после записи этого элемента значение из реквизита
17 Kalambur
 
18.06.14
11:22
(16) в типовой есть
18 putilin
 
18.06.14
11:55
Так ничего не получилось...
19 Рэйв
 
18.06.14
12:00
возникает вопрос на засыпку. А нахрена табе это хранилище?:-)
Сорее всего можно и без него прекрасно обойтись.
20 putilin
 
18.06.14
12:22
Ну пусть там не строка будет с ней проще разобраться
21 Рэйв
 
18.06.14
12:23
(20)Что ты там хранить собрался?
22 putilin
 
18.06.14
12:27
ХЭШ пароля
23 Рэйв
 
18.06.14
12:30
так храни строкой, наига тебе извраты такие
24 putilin
 
18.06.14
12:52
хотелось бы научиться пользоваться возможностями 1С не урезанными
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший