Имя: Пароль:
1C
1С v8
ХранилищеЗначения в реквизите РС
0 PuhUfa
 
24.05.16
16:52
Чет туплю...
УФ. У РС есть реквизит с типом ХранилищеЗначения. Как правильно с ним работать из ФормыЗаписи самого РС (при открытии читать, при записи - сохранять)?
Через Запись.МоеХранилище оно не доступно.
1 Nuobu
 
24.05.16
16:53
ЗначениеХранилища = Запись.МоеХранилище.Получить();
Запись.МоеХранилище = Новый ХранилищеЗначения(ЗначениеХранилища);
2 PuhUfa
 
24.05.16
16:56
(1) В Процедура ПриСозданииНаСервере:
Поле объекта не обнаружено (МоеХранилище)
ППСС = Запись.МоеХранилище.Получить();
3 PuhUfa
 
24.05.16
16:57
+(2) Смотрю отладчиком, у объекта Запись действительно нет такого реквизита.
4 Nuobu
 
24.05.16
16:58
(2) Напиши весь код, пожалуйста и обозначь структуру регистра.
5 PuhUfa
 
24.05.16
17:01
РС - Непереодический, Независимый. 3 Измерения, 7 ресурсов, 17 реквизитов. 1 реквизит имеет тип ХранилищеЗначения.

ФормаЗаписи:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    Если Не ЗначениеЗаполнено(Запись.УникальныйИдентификатор) = Истина Тогда
        Запись.УникальныйИдентификатор = Новый УникальныйИдентификатор();
    КонецЕсли;
    
    ППСС = Запись.МоеХранилище.Получить();
    
КонецПроцедуры
6 Lexey_
 
24.05.16
17:02
(0) ХЗ недоступно в данных формы, используй РеквизитФормыВЗначение()
7 Nuobu
 
24.05.16
17:04
Если Не ЗначениеЗаполнено(Запись.УникальныйИдентификатор) = Истина Тогда

У меня кровь из глаз брызнула.
8 PuhUfa
 
24.05.16
17:07
(7) копипаст - зло, спс
9 PuhUfa
 
24.05.16
17:24
Поборол следующим образом:
в
ПриСозданииНаСервере(
Простым запросом читаю ХранилищеЗначений

а в
ПередЗаписьюНаСервере(
нормально пишет и так:
ТекущийОбъект.МоеХранилище = Новый ХранилищеЗначения(ППСС);
10 Nuobu
 
24.05.16
17:28
(9) Чем "РеквизитФормыВЗначение()" не подошел?
11 Fragster
 
гуру
24.05.16
17:29
(9) а почему не в ПриЧтенииНаСервере*
12 Fragster
 
гуру
24.05.16
17:29
(10) а он не работает ;)
13 Nuobu
 
24.05.16
17:31
(12) Да? Я что-то пропустил? Почему он не работает?
14 Fragster
 
гуру
24.05.16
17:33
(13) потому что в реквизите формы нет хранилища значения.
15 Локи-13
 
24.05.16
17:37
в реквизитах формы не может быть хранилища значений, нужно через временное хранилище отправлять на сервер и там писать непосредственно в объект.
16 PuhUfa
 
24.05.16
17:37
(11) Прикольно. В ПриЧтенииНаСервере даже и запроса не надо. Хранилище доступно через ТекущийОбъект.МоеХранилище
Спс.
17 Fragster
 
гуру
24.05.16
17:39
вот в случае с копированием и хранилищем я не разобрался, как без запроса обойтись.
18 Nuobu
 
24.05.16
17:42
(17) Не понимаю, о чем вы. У меня всё получается для справочника...

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ЗначениеРеквизита = РеквизитФормыВЗначение("Объект");
    ЗначениеХранилища = ЗначениеРеквизита.Реквизит1.Получить();
    Если ЗначениеЗаполнено(ЗначениеХранилища) Тогда
        Сообщить(ЗначениеХранилища);
    КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    ЗначениеХранилища = ТекущийОбъект.Реквизит1.Получить();
    Если Не ЗначениеЗаполнено(ЗначениеХранилища) Тогда
        ЗначениеХранилища = "" + ТекущаяДата();
    КонецЕсли;
    
    ТекущийОбъект.Реквизит1 = Новый ХранилищеЗначения(ЗначениеХранилища);
КонецПроцедуры
19 Fragster
 
гуру
24.05.16
17:58
(18) вероятно, я криворук, ибо такая конструкция у меня не взлетела
20 singlych
 
24.05.16
18:10
Вроде обсуждали недавно. Хранилище недоступно в _данных формы_, но НаСервере его можно достать хоть запросом, хоть из объекта, в том числе из записи регистра (для этого подойдет и РеквизитФормыВЗначение, и ТекущийОбъект там, где он есть). (17) работает и для формы записи.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.