Имя: Пароль:
1C
 
УФ. 8.3. Как на форме в контексте сервера хранить значение со сложными типами?
,
0 SeiOkami
 
04.09.14
13:47
Вопрос, возможно, туповат, но всё же. Имеется отчет для тонкого клиента. Нужно иметь возможность в контексте серверных процедур хранить структуру, в которой несколько ТЗ, схемы компоновки и прочее. Как это оптимальнее делать?
Общая переменная очищается при каждом выходе из сервера на клиент, поэтому не подходит.
Реквизит не подходит, потому что, насколько я понял, ему нельзя присвоить значение типа, которого нет на клиенте, даже если реквизит не выводится на форму для отображения.
Временное хранилище. Не вижу смысла постоянно поднимать хранилище, чтобы обратиться к моим данным.

Как сделать такую простую вещь правильнее?
1 Cube
 
04.09.14
13:50
(0) Храни во временном файле или в РС СохраненныеНастройки
2 Cube
 
04.09.14
13:51
+(1) Или вообще в настройках пользователя, если другим пользователям доступ не нужен
3 SeiOkami
 
04.09.14
13:52
(1),(2), это стеб такой? легче уже во временном хранилище)
4 MrStomak
 
04.09.14
13:53
(0) ЗначениеВСтрокуВнутр?
5 Cube
 
04.09.14
13:54
(3) Это информация))
6 SeiOkami
 
04.09.14
13:55
(4), думал об этом, но это же похуже временного хранилища будет. Постоянно преобразовывать из значения в строку и обратно...

Неужели в УФ нельзя хранить такие значения без всяких махинаций?
7 SeiOkami
 
04.09.14
13:56
Нет альтернативы переменной? Чтобы не очищалась постоянно
8 Maxus43
 
04.09.14
13:57
Реквизит формы - альтернатива, другой нет
9 Maxus43
 
04.09.14
13:57
а, ну параметр Сеанса можно ещё заюзать)
10 Chai Nic
 
04.09.14
13:57
(8) По идее это же вызовет перекачку данных клиент-сервер при каждом серверном вызове.. что вряд ли полезно..
11 SeiOkami
 
04.09.14
13:58
(8), хорошо, можно тогда заставить реквизит хранить типы, которых нет на клиенте? Мне ведь не нужно с ними что-то на клиенте делать. Главное, чтобы на сервере были
12 SeiOkami
 
04.09.14
13:58
(10), проблема в том, что в реквизит нельзя запихнуть структуру с ТЗшками
13 Chai Nic
 
04.09.14
13:59
(12) Это не проблема. ЗначениеВСтрокуВнутр.
14 MrStomak
 
04.09.14
13:59
(11) ТЗ нет на клиенте, но её можно хранить в реквизите формы.
15 SeiOkami
 
04.09.14
13:59
(9), ну можно тогда уже и регистр специальный сделать. Гулять так гулять)
16 Chai Nic
 
04.09.14
13:59
Проблема как раз в том, что использование реквизитов формы вынуждает гонять данные между сервером и клиентом почем зря..
17 SeiOkami
 
04.09.14
14:00
(14), мне нужно хранить структуру, которая содержит помимо всего прочего ТЗ
18 Maxus43
 
04.09.14
14:00
Правильнее логику будет пересмотреть и уйти от необходимости хранить такого рода данные в памяти во время работы с объектом, имхо
19 SeiOkami
 
04.09.14
14:00
(13), да, но это тоже не выход - постоянно преобразовывать
20 MrStomak
 
04.09.14
14:00
(17) Можно использовать параметры формы, там может быть произвольный тип.
21 Chai Nic
 
04.09.14
14:01
(19) Преобразование дешевле обходится, чем перекачка
22 Локи-13
 
04.09.14
14:01
Временное хранилище.

"Не вижу смысла постоянно поднимать хранилище, чтобы обратиться к моим данным." - что значит поднимать?

можно использовать общий модуль с повторным использованием на время сеанса
23 SeiOkami
 
04.09.14
14:01
(20), но тогда данные очистятся после создания формы. Если сделаю ключевым, то результат будет как с реквизитами - будет ругаться
24 MrStomak
 
04.09.14
14:02
(22) А если структура меняется?:)
25 SeiOkami
 
04.09.14
14:03
(22), вот! это надо бы обмозговать...
26 SeiOkami
 
04.09.14
14:03
(24), да, меняется )
27 SeiOkami
 
04.09.14
14:04
(21), мне бы как раз без перекачки. Просто чтобы только на сервере и было
28 lxndr
 
04.09.14
14:04
гугли ПоместитьВоВременноеХранилище
29 MrStomak
 
04.09.14
14:04
(26) Сделай не структуру, а ТЗ. В ТЗ могут содержаться другие ТЗ в реквизитах формы.
30 Локи-13
 
04.09.14
14:05
(24) обновлять. делов то
31 MrStomak
 
04.09.14
14:05
(30) Так обновляется сразу весь кеш.
32 SeiOkami
 
04.09.14
14:06
(29), нет это архитектурно не верно. У меня именно структура. Плюс, колонки придется все прописывать на форме, а они могут измениться
33 MrStomak
 
04.09.14
14:10
(32) Ну и программно прописать колонки как бы не проблема. Блин, короче есть 100500 способов, тебе все не нравятся.
Используй временное хранилище, это лучший вариант.
34 famnam
 
04.09.14
14:11
у меня сейчас подобная задачка :) создал структуру, в которой несколько компоновщиков, таблица и прочие доп.данные. держу все это хозяйство во временном хранилище
35 Chai Nic
 
04.09.14
14:14
(34) Если бы еще там можно было хранить всё что угодно. Так фигвам.. во временное хранилище можно засунуть лишь то, что сериализуется..
36 SeiOkami
 
04.09.14
14:14
(33), ну согласись, они ведь реально не удобны)

Почему переменные очищаются? Ну за что такая хрень ? =(
37 SeiOkami
 
04.09.14
14:15
(35), кстати, да. Что вообще странно. Получается в УФ нельзя хранить, например, настроеный запрос с МВТ
38 olegves
 
04.09.14
14:15
(0) Реквизит формы произвольного типа - сворачивай свои данные в структуру и туда прячь
39 SeiOkami
 
04.09.14
14:17
(38), я же написал уже, что нельзя - ругается
40 Chai Nic
 
04.09.14
14:18
(37) Угу.. вот что мешало фирме 1с сделать "глобальный контекст сеанса", доступный из всех серверных вызовов одного сеанса? Насколько бы это упростило всё..
41 SeiOkami
 
04.09.14
14:19
(40), пусть бы хотя бы переменные не очищали
42 Локи-13
 
04.09.14
14:20
1с сейчас уходит от несериализуемых объектов
учитесь программировать правильно.
43 Chai Nic
 
04.09.14
14:22
(41) Это то же самое, но другими словами. Контекст сервера каждый раз новый, и переменные соответственно каждый раз новые.. а глобального контекста в 8.2 нет.
(42) На сериализацию уходит время и процессорные ресурсы. Там, где раньше можно было обойтись передачей адреса из нескольких байт, теперь приходится передавать сериализованный буфер..
44 SeiOkami
 
04.09.14
14:26
(42), и как в данной ситуации будет правильно?
45 MrStomak
 
04.09.14
14:33
(44) Использовать временное хранилище. В которое, кстати, начиная с 8.3 тоже только сериализуемые данные нужно помещать. Потому что содержание хранилища может между серверами перекидываться при падении.
46 SeiOkami
 
04.09.14
14:34
(45), жесть... в погоню за "тонким" клиентом сделали всё намного "толще"
47 Chai Nic
 
04.09.14
14:37
(46) В угоду "мультисерверности" пожертвовали глобальным контекстом.. "не осилили" прозрачную передачу контекста между серверами..
48 Зойч
 
04.09.14
15:02
Но вот почему вдруг ТЗ оказалась несереализуема это большой вопрос
49 SeiOkami
 
04.09.14
15:07
(48), эту тайну знает только Он
50 MrStomak
 
04.09.14
15:10
(48) ТЗ сериализуется, просто она не поддерживается на клиенте:

Возможен обмен с сервером. Сериализуется. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.1/data/core}. Имя типа XDTO: ValueTable.
51 Зойч
 
04.09.14
15:29
(50) не нужно словам придираться
Закон Брукера: Даже маленькая практика стоит большой теории.