Имя: Пароль:
1C
1С v8
ПолучитьИзВременногоХранилища(Адрес)
0 Мятежник
 
13.04.16
10:39
Привет всем. Есть табличный документ с рисунком. В форме обработки засовываю его во временное хранилище, получаю адрес.
Адрес = ПоместитьВоВременноеХранилище(ТабДок, УникальныйИдентификатор);
Открываю другую управляемую форму, передаю в реквизит формы адрес. при открытии формы:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Таб1 = ПолучитьИзВременногоХранилища(Адрес1);
КонецПроцедуры

В форме появляется таб документ с рисунком. все работает.

Теперь перехожу по вкладкам, на каждой вкладке есть свой Табличный документ (Таб1, Таб2 и т.д.)

&НаКлиенте
Процедура СтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница)
Таб1 = ПолучитьИзВременногоХранилища(Адрес1);
Таб2 = ПолучитьИзВременногоХранилища(Адрес1);
КонецПроцедуры

при таком коде, все таб документы пустые.
Если пишу так:

&НаКлиенте
Процедура СтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница)
Таб1 = ПолучитьизХранилищаНаСервере();
Таб2 = ПолучитьизХранилищаНаСервере();
КонецПроцедуры

Функция ПолучитьизХранилищаНаСервере()
Возврат ПолучитьИзВременногоХранилища(Адрес1);
КонецФункции

то, табличные документы заполняются, но без рисунков!
как правильно сделать? и почему ПолучитьИзВременногоХранилища при открытии на клиенте отрабатывает, а при смене страниц на клиенте нет?
1 Pro-tone
 
13.04.16
10:42
(0) подозреваю, что дело в

Глобальный контекст (Global context)
ПоместитьВоВременноеХранилище (PutToTempStorage)

Если передан УникальныйИдентификатор, не являющийся уникальным идентификатором формы, то значение будет удалено после завершения сеанса пользователя.
2 Pro-tone
 
13.04.16
10:43
(0) то есть у тебя стек временного хранилища очищается скорее всего
3 Мятежник
 
13.04.16
10:50
(2) что значит после завершения сеанса пользователя?
у меня форма открылась, макет есть с рисунком, как только переходишь на другую вкладку, макет очищается. где тут завершение сеанса?
4 Pro-tone
 
13.04.16
10:53
(3) сеанс имеется в виду - это контекст серверной процедуры, при переходе в другую вкладку срабатывает новый обработчик, ты его вызываешь, а это уже новый сеанс
5 Pro-tone
 
13.04.16
10:55
(3) другими словами - при непрерывном вызове обработчиков ты получаешь один сеанс, если было прерывание и пользователь что-то сделал на форме, это уже новый сеанс, значение во временном хранилище не живет если поставишь не те параметры, короче пробуй

ПоместитьВоВременноеХранилище(ТабДок, ЭтаФорма.УникальныйИдентификатор)
6 Мятежник
 
13.04.16
10:58
хм... как раз ЭтаФорма.УникальныйИдентификатор мне не подойдет. я в первой форме могу создать таб документов штук 5 и потом мне надо 5 уникальных адресов передать во вторую форму. а ЭтаФорма.УникальныйИдентификатор насколько я понял из описания даст мне один адрес на все таб документы
7 Pro-tone
 
13.04.16
11:01
(6) у тебя так работать не будет
8 Pro-tone
 
13.04.16
11:01
(6) сохраняй рисунки тогда на диске во временном каталоге
9 Мятежник
 
13.04.16
11:10
(7) не будет при каком варианте?
если использовать ЭтаФорма.УникальныйИдентификатор или Новый УникальныйИдентификатор?
10 Pro-tone
 
13.04.16
11:11
(9) при Новый УникальныйИдентификатор
11 Pro-tone
 
13.04.16
11:12
(9) и ЭтаФорма.УникальныйИдентификатор тоже, так как адрес один, а объектов много, ты можешь правда добавлять объекты по адресу врем хранилища
12 Pro-tone
 
13.04.16
11:13
создаешь массив табдоков, пихаешь в него табдоки, по одному адресу обращаешься
13 Мятежник
 
13.04.16
11:16
(12) по-моему отл идея! попробую сейчас
14 Pro-tone
 
13.04.16
11:16
Помещение в массив

МассивТабДококов.Добавить(ТабДок1);
Адрес = ПоместитьВоВременноеХранилище(МассивТабДококов, УникальныйИдентификатор);

Извлечение из массива

Таб1 = ПолучитьИзВременногоХранилища(Адрес1).Получить(0);
Таб2 = ПолучитьИзВременногоХранилища(Адрес1).Получить(1);
15 Pro-tone
 
13.04.16
11:17
вместо Адрес1 просто Адрес ) ну ты понял идею)
16 Pro-tone
 
13.04.16
11:19
1.
МассивТабДококов.Добавить(ТабДок1);
МассивТабДококов.Добавить(ТабДок2);
Адрес = ПоместитьВоВременноеХранилище(МассивТабДококов, ЭтаФорма.УникальныйИдентификатор);


2.
Таб1 = ПолучитьИзВременногоХранилища(Адрес).Получить(0);
Таб2 = ПолучитьИзВременногоХранилища(Адрес).Получить(1);
17 Мятежник
 
13.04.16
11:30
сделал, но ЭтаФорма.УникальныйИдентификатор  ведет себя также как и Новый УникальныйИдентификатор. либо пустые макеты, либо без рисунков. :((
18 Pro-tone
 
13.04.16
11:45
(17) тогда дело вообще не в этом, а в выводе рисунков в табдок возможно
19 Мятежник
 
13.04.16
11:46
я из-за чего начал использовать временное хранилище при смене страниц, из за того что, если пишу
при открытии формы
Таб1 = ПолучитьИзВременногоХранилища(Адрес1);
Таб2 = ПолучитьИзВременногоХранилища(Адрес2);
и потом просто перехожу по вкладкам без кода возникает ошибка из-за наличия рисунков

Ошибка преобразования данных XDTO:
Запись значения свойства:
    форма: Элемент
    имя: {http://v8.1c.ru/8.2/data/spreadsheet}object
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'ActiveX'
поэтому решил сохранять адрес и каждый раз при смене страницы  вытаскивать из хранилища таб документ
20 Мятежник
 
14.04.16
10:36
Проблему решил. Сделал так: макет создается с пустой картинкой, потом отдельно создаю картинку Штрихкод (помогла конфа "Управляемое приложение"), вставляю ее в макет.
Тему можно закрывать.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший