Имя: Пароль:
1C
1С v8
1с 8.2 Как поместить таблицу значений в хранилище значений?
,
0 zvivla
 
19.12.11
11:44
Здравствуйте!
Есть документ, в нем реквизит Хранилище, необходимо при сохранении дока помещать в хранилище некую таблицу значений, которая формируется в процессе заполнения пользователем формы.

Подскажите пожалуйста как это сделать?

&НаСервере
Процедура СохранитьВХранилищеНажатие()
    Хранилище=Новый ХранилищеЗначения(ТемпературныйЛист);    
КонецПроцедуры

&НаСервере
Процедура ВосстановитьИзХранилищаНажатие()
   ТабДок=Хранилище.Получить();
   Если ТабДок<>Неопределено Тогда
      Сообщить(ТабДок);
   КонецЕсли;
КонецПроцедуры

так не выходит(
1 Ринат-СПб
 
19.12.11
11:49
отладчик что говорит пр получении? Какой тип у табДок?
2 Maxus43
 
19.12.11
11:49
что не выходит? ТабДок = неопределено получается?
3 acsent
 
19.12.11
11:55
Что есть Хранилище?
4 zvivla
 
19.12.11
11:58
ПРошу прощенья, вместо строки -  ТабДок=Хранилище.Получить();
вот такая -ТабДок=Объект.Хранилище.Получить();
На нее собственно и ругается -  Поле объекта не обнаружено (Хранилище)
   ТабДок=Объект.Хранилище.Получить();

Хотя в документе есть данный реквизит и когда реквизиты формы просматриваешь он тоже есть.
5 Maxus43
 
19.12.11
11:58
надеюсь что "Хранилище" есть реквизит)
6 zvivla
 
19.12.11
12:03
Да, "хранилище" реквизит типа-хранилище значений, присутствует как в документе так и на самой форме. Подскажите пожалуйста, в чем может быть проблема?
7 Maxus43
 
19.12.11
12:07
У "Объект" нет "Хранилище". ЭтотОбъект может? ну или просто Хранилище.Получить();
8 zvivla
 
19.12.11
12:18
Если писать
Переменная не определена (Хранилище)
Хранилище.Получить();
то прямо в конфигураторе ошибка-
   ТабДок=<<?>>Хранилище.Получить(); (Проверка: Сервер)
Если писать ЭтотОбъект.Хранилище.Получить();

ошибка - Переменная не определена (ЭтотОбъект)
   ТабДок=<<?>>ЭтотОбъект.Хранилище.Получить(); (Проверка: Сервер)

в процедуре
&НаСервере
Процедура СохранитьВХранилищеНажатие()
    Хранилище=Новый ХранилищеЗначения(ТемпературныйЛист);    
КонецПроцедуры

на Хранилище не ругается
9 H A D G E H O G s
 
19.12.11
12:29
(6) Между серверными вызовами оно теряется.
10 zvivla
 
19.12.11
12:29
помогите кто-нибудь)
11 zvivla
 
19.12.11
12:31
Между серверными вызовами оно теряется.

Как исправить?
12 H A D G E H O G s
 
19.12.11
12:43
ААаа, все пропало..

Вот, максимальный вариант.
Так, как надо делать

http://zalil.ru/32313870
13 zvivla
 
19.12.11
17:10
Скачала вашу обработку. попробовала в своем доке
&НаСервереБезКонтекста
Функция ПоместитьНаСервере(УникальныйИдентификатор,СтарыйАдресХранилища)
   Если ТипЗнч(СтарыйАдресХранилища)=Тип("Строка") И СтарыйАдресХранилища<>"" И ЭтоАдресВременногоХранилища(СтарыйАдресХранилища) Тогда
       УдалитьИзВременногоХранилища(СтарыйАдресХранилища);
   КонецЕсли;
   Хранилище=Новый ХранилищеЗначения(ТемпературныйЛист);
   АдресХранилища=ПоместитьВоВременноеХранилище(Хранилище,УникальныйИдентификатор);
   Возврат АдресХранилища;
КонецФункции


Тут ругается на
Переменная не определена (ТемпературныйЛист)
   Хранилище=Новый ХранилищеЗначения(<<?>>ТемпературныйЛист); (Проверка: Сервер)

ТемпературныйЛист(таблица значений) - это реквизит формы документа. В самом же документе нет такого реквизита
14 H A D G E H O G s
 
19.12.11
17:14
&НаСервереБезКонтекста
заменить на
&НаСервере
15 Defender aka LINN
 
19.12.11
17:14
(0) А какая религия мешает сделать табличную часть?
16 zvivla
 
19.12.11
17:16
=) Вы имеете ввиду реквизит для дока или где?
17 zvivla
 
20.12.11
06:53
Уфффф кое как
Вобщем, чтобы записать в хранилище таблицу значений
тз=новый ТаблицаЗначений;
   тз=ТемпературныйЛист.Выгрузить();
   ЭтотОбъект = РеквизитФормыВЗначение("Объект");
   //Сообщить(ТипЗнч(ЭтотОбъект.Хранилище.Получить()));
   ЭтотОбъект.Хранилище = Новый ХранилищеЗначения(тз);
   ЭтотОбъект.Записать();

Тз-спецально создаю, ибо если в хранилище запихивать реквизит ТемпературныйЛист, то потом при получении оказывается, что хранилище пустое

Получаю значение из хранилища и присваиваю содержимое ТемпературныйЛист

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

Все работает. Всем большое спасибо за оперативные ответы и помощь=)
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой