Имя: Пароль:
1C
1С v8
УФ: Переменные &НаСервере
0 Полотенчик
 
14.01.13
13:03
Ситуация:
В обычных формах было описание переменных, например, в модуле формы, из которых потом читается/пишется из разных процедур и функций.
Так использовалось, допустим, чтобы хранить в описанной переменной Запрос сам запрос. В одной процедуре запрос создавался, в нем создавались какие-то временные таблицы, потом пользователь что-то мог выбрать/сделать, в других процедурах читалась эта переменная Запрос (т.к. в ней уже есть нужные временные таблицы), создавались, например новые таблицы, и т.д.: чтобы в каждой процедуре не выбирать заново данные использовалась единая переменная с запросом.
Как что-то подобное реализовать в УФ если переменная, объявленная &НаСервере уничтожается при завершении серверного вызова?
1 Wobland
 
14.01.13
13:09
за собой таскать? реквизит завести?
2 SUA
 
14.01.13
13:13
не перескакивать на клиент лишний раз?
3 Полотенчик
 
14.01.13
13:16
(2) В том и соль что клиент во время работы с формой может что-то изменить, после чего надо что-то пересчитать и чтобы каждый раз не выбирать данные из БД они выбирались один раз и хранились во временных таблицах.
Например, есть какая-то пошаговая обработка данных...
4 LAAry
 
14.01.13
13:17
Никак. На клиенте не может быть запроса. Из одной серверной процедуры вызывать другую.
Правила хорошего тона говорят, что количества обращений на сервер должно быть минимальным. Значит все что нужно на сервере лучше делать за 1 раз.
5 LAAry
 
14.01.13
13:19
(3) если у тебя к-с вариант, то данные и так закешируются. повторный запрос выполнится в разы быстрее.
6 Полотенчик
 
14.01.13
13:21
(5) на кэш надейся, а сам не плошай - поэтому используется один раз выбор данных из БД, а далее уже временные таблицы
7 SUA
 
14.01.13
13:23
(3) еще вариант:
- вытащить все из ВТ и утянуть на клиента
- (вытащить все из ВТ - наверное все же нужно) использовать временное хранилище между вызовами
8 Defender aka LINN
 
14.01.13
13:24
Временное хранилище кто мешает использовать?
9 lefthander
 
14.01.13
13:33
ДанныеФормыВЗначение - делаешь все что нужно на сервере и ЗначениеВданныеФормы.
10 LAAry
 
14.01.13
13:34
(9)И что за данные формы, которые хранят запрос или его результат?
11 Полотенчик
 
14.01.13
13:35
(8) а если там десяток временных таблиц с десятком тысяч строк в каждой? каждый раз выгружать все таблицы, сохранять во временном, читать из временного, загружать таблицы в запрос?
оптимальнее бы сохранять/передавать Запрос или МенеджерВременныхТаблиц
12 lefthander
 
14.01.13
13:36
Правила хорошего тона говорят что если не нужны данные формы для запроса то &НаСервереБезКонтента, если в запрос нужны данные из формы то &НаСервере
13 olegves
 
14.01.13
13:36
(0) реквизит формы пользуй - доступен и на клиенте и на сервере
14 LAAry
 
14.01.13
13:36
Во временном можно хранить не обязательно результат.
15 lefthander
 
14.01.13
13:36
(10) Странный вопрос, может начнете с того что такое УФ?
16 LAAry
 
14.01.13
13:43
(15) У Вас пожалуй поостерегусь спрашивать.
17 lefthander
 
14.01.13
13:54
(16) Согласен, но можете в синтакс помошник заглянуть при случае.
в (3) автор топика спрашивает, как быть если юзер данные изменил во время работы с формой? Для того что бы исключить потерю измененных, но не записанных данных и используют выше названные методы.
18 lefthander
 
14.01.13
13:56
Вопрос в другом, есть ли смысл на сервере хранить результаты запроса в переменной, не проще ли снова выполнить запрос, когда понадобятся данные. Ведь их может изменить и другой юзер.
19 Defender aka LINN
 
14.01.13
13:59
(11) А кто сказал, что будет легко?
20 Полотенчик
 
14.01.13
14:03
(20) ужас. есть же МенеджерВременныхТаблиц. почему нельзя где-то его сохранить чтобы использовать в других процедурах? это же так очевидно!
21 Defender aka LINN
 
14.01.13
14:07
(20) Таков путь 1С
22 lefthander
 
14.01.13
14:08
(3) Может это спасет - переменная в модуле управляемого приложения, экспортная? Будет доступна из любого модуля.
Перем (Var)
Синтаксис:

    Перем <Имя переменной 1> [Экспорт] [, <Имя переменной 2> [Экспорт], …]

Англоязычный синтаксис:

    Var <Имя переменной 1> [Export] [, <Имя переменной 2> [Export], …]

Параметры:

    <Имя переменной 1>[, <Имя переменной 2>, …]
    Задается имя или имена объявляемых переменных.

    Экспорт
    Необязательное ключевое слово.
    Указывает, что данная переменная доступна при обращении к контексту этого модуля из других модулей. Не имеет смысла при объявлении переменных отдельных процедур или функций.

Описание:
Позволяет в явном виде объявить переменную.
23 Reset
 
14.01.13
14:18
(22) Она же не будет видна на сервере?
24 lefthander
 
14.01.13
14:20
(20) Почему нельзя? Можно.
Вот из того же Синтакс Помошника
Предназначен для хранения временных таблиц. При уничтожении или закрытии объекта временные таблицы, находящиеся в нем, удаляются.
Если временная таблица создается, используется и уничтожается в рамках одного пакета запросов, менеджер временных таблиц создавать не нужно.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Пример:

МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;

Запрос.Выполнить();
Запрос.Текст="ВЫБРАТЬ * из ВременнаяОсновная";
ТзПередано=Запрос.Выполнить().Выгрузить();
25 Defender aka LINN
 
14.01.13
14:21
(24) Между серверными вызовами его сохрани, продемонстрируй мастер-класс.
26 lefthander
 
14.01.13
14:22
(23) Это почему же?
ОбъектМетаданныхКонфигурация (ConfigurationMetadataObject)
МодульУправляемогоПриложения (ManagedApplicationModule)
Использование:

Только чтение.
Описание:

Тип: Неопределено.


Доступность:

Сервер, толстый клиент, внешнее соединение.
27 Reset
 
14.01.13
14:23
Еще есть серверные модули с повторным использованием значений, возможно можно использовать
28 Полотенчик
 
14.01.13
14:25
(22) для каждой задачи где надо ради оптимизации выбирать данные из БД 1 раз, а не 100 создавать переменную в модуле управляемого приложения? О_о
29 lefthander
 
14.01.13
14:28
(25) Мне это не надо, я не сторонник сохранять данные запроса между разными вызовами. Так как следить за актуальностью данных в переменной нет смысла, особенно если в переменную могут попасть десятки тысяч строк. Проще заново сделать запрос. Вот оптимизировать запрос, что бы туда не попадали ненужные данные, это более интересно.
30 MSII
 
14.01.13
14:28
(28) Если данные нужно извлечь один раз, то хранить их можно и нужно в реквизитах формы, в параметрах сеанса либо используя упомянутое в (27). Выбор конкретного варианта - в зависимости от задачи.
31 Reset
 
14.01.13
14:29
(26) Насколько я понимаю, процитированное не имеет отношения к видимости переменных
32 lefthander
 
14.01.13
14:29
(28) А что вы так боитесь переменных? Если локальная переменная, то время ее жизни не превышает время жизни локального контекста.
33 LAAry
 
14.01.13
14:29
Такое чувство, что леворукий тролит в этом топике.
34 Defender aka LINN
 
14.01.13
14:30
(29) Ты же сказал, что "Можно" и "Легко". так что пруф или GTFO
35 lefthander
 
14.01.13
14:33
(31) Это было к вопросу доступности переменных на сервере.
(34) GTFO, и можно, и легко ... удачи.
36 Reset
 
14.01.13
14:34
(35) Именно к вопросу доступности переменных (а также процедур и функциий) процитированное не имеет отношения
37 LAAry
 
14.01.13
14:36
(27) Это, кстати, мысль. Нужно погонять повторное использование - что можно, а что нельзя вернуть. Спасибо.
38 lefthander
 
14.01.13
14:58
(36) Экспортная переменная объявленная в этом модуле будет видна для серверных вызовов.
39 Defender aka LINN
 
14.01.13
14:58
(38) Ну закинь туда Менеджер, вперед.
40 Reset
 
14.01.13
14:59
(38) Не будет.
41 lefthander
 
14.01.13
15:03
(40) Будет, но доказывать не буду. :)
42 Reset
 
14.01.13
15:07
(40) На твоей стороне а) то я почти полный ноль в УП и знания эпизодически/теоретические, то есть могу ошибаться.
б)Также на твоей стороне интересная цитата из справки:
"В модуле управляемого приложения возможно объявление переменных, а также объявление и описание процедур и функций, которые будут доступны в любом модуле конфигурации (кроме модуля внешнего соединения)."

На моей стороне - что переменная не видна. И все тут :)
43 Reset
 
14.01.13
15:11
(41) Почему не будешь? Сделай (39).
Объяви такую пременную и занесив нее, к примеру, объект который процитировал в (26).
44 Defender aka LINN
 
14.01.13
15:15
(41) Идешь по стопам Петрика?