Имя: Пароль:
1C
 
Глобальные переменные на УФ
,
0 ArturDoo
 
08.06.22
18:24
Есть форма, создал в ней глобальную переменную. В процедуре задал ей значение, но в других процедурах она пустая. В чем здесь ошибка?

Перем Данные;


&НаСервере
Процедура ИзменитьИсп (Значение)
    Попытка
    Данные = Значение;
    Исключение
    КонецПопытки;    
КонецПроцедуры
1 Галахад
 
гуру
08.06.22
18:24
По умолчанию на клиенте.
2 DGorgoN
 
08.06.22
18:25
Сервер и клиент вестимо.
3 butterbean
 
08.06.22
18:25
это все переменные бессмысленны на сервере, нужно делать через реквизиты формы или передавать параметрами процедур
4 ArturDoo
 
08.06.22
18:25
(1) Можно пользоваться ГП на сервере?
5 DGorgoN
 
08.06.22
18:26
(4) Я вообще против ГП
6 ArturDoo
 
08.06.22
18:26
(3) А можно как-то передать данные на сервере без реквизитов формы в не взаимосвязанных процедурах?
7 Выпрь
 
08.06.22
18:28
На сервере переменные будут жить до конца вызова. Юзай временное ранилище
8 Выпрь
 
08.06.22
18:28
(1) таки по умолчанию на сервере
9 ArturDoo
 
08.06.22
18:29
Так как передать адрес в не взаимосвязанных процедурах?
10 butterbean
 
08.06.22
18:31
(9) чем не устраивает реквизит формы или параметр процедуры (если без контекста)?
11 Выпрь
 
08.06.22
18:31
Адрес через реквизит передают обычно
12 ArturDoo
 
08.06.22
18:32
Без реквизита. Да и данные текстовые все равно, как их передавать, через хранилище или без него
13 Выпрь
 
08.06.22
18:33
(12) юзай метод г1с через справочник
14 Выпрь
 
08.06.22
18:33
Можно еще через параметр сеанса
15 butterbean
 
08.06.22
18:33
(12) сделай параметр сеанса
16 ArturDoo
 
08.06.22
18:34
(13) можно подробней?
17 RomanYS
 
08.06.22
18:40
(4) только если понимаешь, в каждом сервером вызове контекст формы создаётся заново
18 ДедМорроз
 
08.06.22
22:59
Есть еще вариант через функции повторного вызова,когда функция возвращает структуру,а потом в эту структуру добавляется все,что хочется сохранить между вызовами.
19 Бабрак Кармаль
 
08.06.22
23:17
(18) > Есть еще вариант

А потом наступает одно из https://its.1c.ru/db/v8321doc#bookmark:dev:TI000000181

"Сохраненные значения будут удалены:
- на сервере, в толстом клиенте, во внешнем соединении, в тонком клиенте и в веб-клиенте с обычной скоростью соединения - через 20 минут после вычисления сохраняемого значения или через 6 минут после последнего использования;
- в тонком клиенте и веб-клиенте с низкой скоростью соединения - через 20 минут после вычисления сохраняемого значения;
- при нехватке оперативной памяти в рабочем процессе сервера;
- при перезапуске рабочего процесса;
- при переключении клиента на другой рабочий процесс."

И очередного ливингстара, доверившегося "профи" с мисты увольняют нахрен, потому что он ничего не может понять.
20 palsergeich
 
09.06.22
00:55
(1) По умолчанию - на сервере.
Но до конца текущего вызова)
21 palsergeich
 
09.06.22
00:57
(19) - при переключении клиента на другой рабочий процесс.
- при нехватке оперативной памяти в рабочем процессе сервера;
от эти штуки я ловил.
когда вопт исп жило меньше минуты, и это была поццтава)
С тех пор я к документацииотношусь гораздо трепетнее и читаю ее внимательнее)
22 palsergeich
 
09.06.22
00:58
(0) Если нужна глобальная серверная переменная - используй параметры сеанса.
1с так и делает кста)
23 palsergeich
 
09.06.22
00:58
(22) никакой магии и ограниченного времени жизни
24 Сергиус
 
09.06.22
01:27
(0)Сделай реквизит формы и в нем храни.
25 MyNick
 
09.06.22
06:18
(24) он боится. Этож целый реквизит надо создавать, а ему всего лишь переменная нужна (сарказм).
Всегда удивляли люди, упорно изобретающие квадратные колеса при наличии круглых в свободном доступе.
Автор, реквизиты формы - это самое верное и надёжное решение для твоей Перем.
Кроме того, механизм реквизитов формы и создан именно для того, чтобы решить твою "проблему". И используются повсеместно и независимо от того, что ты свою "проблему" считаешь уникальной, придумывая какой бы костыль, да покривее вкорячить в свою никчемную поделку.
26 Мультук
 
гуру
09.06.22
07:04
Вот такой просто пример.
Желающие могут написать, что скажет "сообщить" при двух нажатиях на кнопку "Тест"





&НаСервере
Перем Данные;

&НаСервере
Процедура ТестНаСервере()
    Сообщить(Данные);
    Данные    = Данные + 1;
КонецПроцедуры

&НаКлиенте
Процедура Тест(Команда)

    ТестНаСервере();
    
КонецПроцедуры

Данные = 123;
27 DimVad
 
09.06.22
07:10
(25) Про реквизит формы - вещь общеизвестная. Ещё у Хрусталёвой в её книжке про управляемые формы всё описано.
Однако люди продолжают спрашивать ибо в реальной работе "возникают нюансы".

Что-то типа "вот отчёт, вызывается форма, а из неё - ещё форма, а из неё - серверный код, он получает данные которые нужно передать в дальние долбеня и вернуть их потом в зад (в вызывающую всю хрень процедуру)".

Вот тут возникаю НЕУДОБСТВА к которым программист 1С, который много лет был в ОФ просто не привык. Он привык заводить переменные уровня модуля этого отчёта с ключом "Экспорт" - и  всё. Хоть структура там, хоть ТЗ, хоть соответствие...

И ничто никуда не пропадает между разными вызовами.

Под УФ же он не о задаче думает - а с бубнами танцует. Вот и рождаются идеи в стиле "а заведу я справочник/РС/временный файл и буду писать туда мою ценную хрень".
28 Выпрь
 
09.06.22
07:10
(26) а как сохранить значение между нажатиями?
29 DimVad
 
09.06.22
07:13
+(27) Знаю я чела - он имел специальный каталог на сервере "для обмена". Там он туда файлы сбрасывал.
AdBlock убивает бесплатный контент. 1Сергей