Имя: Пароль:
1C
 
Передать значение в другую процедуру без использования параметров
0 LeoKeyn
 
05.03.18
12:33
Здравствуйте, Всем! Помогите, пожалуйста, есть ли способ передать
значение(какое-либо, в моем случае ссылку) в другую процедуру без
параметров. Мой способ не сработал, но для примера:

Функция ЗапускОбработчикаОжидания(ДокументСсылка) Экспорт
    СтрокаGUID = "a763cfbb-f94f-4c67-8e13-0e96a3a7f353";
    НовыйGUID = Новый УникальныйИдентификатор(СтрокаGUID);
    Адрес = ПоместитьВоВременноеХранилище("212121115", НовыйGUID);
    ПодключитьОбработчикОжидания("ВыполнениеОбработчикаОжидания", 5, Истина);
    

КонецФункции

&НаКлиенте
Процедура ВыполнениеОбработчикаОжидания() Экспорт
    СтрокаGUID = "e1cib/tempstorage/fe5a376e-4e52-41b0-a3d5-5637380d3f5a";
    Ссылка = ПолучитьИзВременногоХранилища(СтрокаGUID);
     //СистемныеФункцииСервер.СменаСтатуса(Ссылка);

КонецПроцедуры
1 LeoKeyn
 
05.03.18
12:35
(0) На выходе получаю неопределено, но это не удивительно, учитывая, что адрес меняется при каждом запуске. Можно ли это сделать как то еще?
2 Torquader
 
05.03.18
12:35
Не очень понятно, какая связь между этими функциями.
Вы запихиваете GUID, а ищете строку GUID, причём совершенно в другом формате.
3 Torquader
 
05.03.18
12:36
Обработчик ожидания работает на клиенте - почему бы - для него не использовать реквизит - получил значение - посмотрел и уже с ним пошёл на сервер за статусом.
4 LeoKeyn
 
05.03.18
12:38
(3) Действие происходит в общем глобальном модуле, поэтому то и нет реквизита. Мне и нужно передать ссылку на документ
5 Lexey_
 
05.03.18
12:41
(4) используй глобальную переменную
6 Torquader
 
05.03.18
12:41
Или параметр сеанса.
7 LeoKeyn
 
05.03.18
12:43
(5) А можно пример?)
8 LeoKeyn
 
05.03.18
12:43
(5) Они вроде как в общих модулях не доступны)
9 LeoKeyn
 
05.03.18
12:44
(6) А это как то единственный экземляр, тоже не подходит наверное)
10 Torquader
 
05.03.18
12:45
(8) Обычно, для этого есть функция глЗначениеПеременной, чтобы из любого места получить значение.
11 LeoKeyn
 
05.03.18
12:45
(6) или я не до конца понимаю как этим пользоваться
12 Torquader
 
05.03.18
12:45
(11) Создаёшь свой параметр сеанса, он будет доступен и на клиенте и на сервере.
13 Cyberhawk
 
05.03.18
12:46
"нужно передать ссылку на документ" // Откуда и куда? Ни о чем информация
14 Serg_1960
 
05.03.18
12:49
(11) Угу, не понимаешь. Разные адреса подставляешь.

PS: Ты только не говори до сотого поста, что хочешь это использоваться в различных сеансах, да и пользователи - тоже различные. Сохраняй интригу!
15 LeoKeyn
 
05.03.18
12:50
(13) ИЗ
Функция ЗапускОбработчикаОжидания(ДокументСсылка) Экспорт

В
Процедура ВыполнениеОбработчикаОжидания() Экспорт
16 LeoKeyn
 
05.03.18
12:50
(14) Нет, Право на это у одного пользователя, просто запусков этой процедуры может быть и будет не одно)
17 LeoKeyn
 
05.03.18
12:51
(16) не одно одновременно)
18 Тихий омут
 
05.03.18
12:52
(12) на толстом клиенте, на тонком не видно
19 Lexey_
 
05.03.18
12:52
(15) почему не делать всё в одной процедуре?
20 LeoKeyn
 
05.03.18
12:53
Вообще задача стоит в том, чтобы сменить статус через некоторое время после выполнения некоторого действия
21 LeoKeyn
 
05.03.18
12:55
И лучше ничего кроме обработчика ожидания я не придумал, но тут засада с передачей параметров
22 Lexey_
 
05.03.18
12:56
(21) пиши в базу, обработчиком ожидания запускай фоновое задание
23 LeoKeyn
 
05.03.18
12:57
(22) А вот с этим у меня проблемки, в корень не понимаю, как работает фоновые задания)))
24 Lexey_
 
05.03.18
12:59
(23) асинхронно, на сервере
25 Torquader
 
05.03.18
13:13
(23) Фоновое задание работает на сервере в отдельной области памяти и ничем, кроме базы данных, с клиентскими сеансами не связано.
Соответственно, если мы хотим с клиента узнать что-то о фоновом задании, то мы должны обратиться к серверу, чтобы получить информацию из базы данных.
26 Torquader
 
05.03.18
13:14
Если файловый вариант, то фоновое задание выполняется в отдельном сеансе.
27 LeoKeyn
 
05.03.18
13:17
(26) серверный
28 LeoKeyn
 
05.03.18
13:18
(25) А можно ссылочку на какой нибудь пример с использованием, найти не могу
29 catena
 
05.03.18
13:21
(20)>>Вообще задача стоит в том, чтобы сменить статус через некоторое время после выполнения некоторого действия

А что будет, если за это "некоторое время" пользователь произведет "некоторое действие" с другим документом?
30 LeoKeyn
 
05.03.18
13:26
(29) Тот документ так ж должен сесть на таймер и сменить статус через скажем час
31 Torquader
 
05.03.18
13:26
(28) Я вот не очень понимаю:
Сменить статус документа - если статус документа в базе отражается, то мы просто пишем в базу (статус обычно в регистре сведений) - просто, клиенты, если их статус интересует, периодически читают этот регистр.
Если статус в базе не хранится, то вообще зачем он нужен ?
Тогда, опять же - пишем в регистр изменение, а клиент, которому оно нужно, читает и удаляет запись, чтобы в регистре ничего не было.
32 LeoKeyn
 
05.03.18
13:27
(29) если подробнее после того как статус стал равер СовершилПосадку, через час у этого документа должен смениться статус на РейсЗавершен
33 Torquader
 
05.03.18
13:27
(30) Вообще - это называется "бизнес процесс" - мы ждём час, если наши черепахи не доползли, то им нужен втык - запускается дочерний бизнес-процесс.
34 Torquader
 
05.03.18
13:28
(32) Вот я и говорю, бизнес-процесс "полёт" с переходом из одного состояния в другое - перевод сервисом.
35 FIXXXL
 
05.03.18
13:28
(28) (32) складируй данные для обработки в очередь, используй РегистрСведений
36 LeoKeyn
 
05.03.18
13:30
(31) (35) А вот это кажется понимаю. Создать регистр и класть туда данные, которые нужно переделать через час? И как? проверять их каждые минуту?
37 LeoKeyn
 
05.03.18
13:31
(35) Или фоновое задание которое будет висеть вечно и проверять?
38 тарам пам пам
 
05.03.18
13:37
а не проще сделать периодический регистр сведений со статусом и писать туда статус сразу с нужным временем?
39 тарам пам пам
 
05.03.18
13:37
и не нужно тогда никаких регл. заданий и прочих извращений
40 LeoKeyn
 
05.03.18
13:42
(38) Суть в том, что система должна поменять статус через час. А не пользователь
41 тарам пам пам
 
05.03.18
13:46
(40) ну и пиши в этот регистр данные при проведении документа "Рейс" или что у тебя там фиксирует вылет
42 LeoKeyn
 
05.03.18
13:56
(41) Ну а как мне поменять статус этого рейса после часа как он получил статус СовершилПосадку?)
43 LeoKeyn
 
05.03.18
13:57
(41) Через час после СОвершилПосадку он должен стать РейсЗавершен автоматом и провестись)
44 Mankubus
 
05.03.18
15:26
(43) Сделай статус расчётным значением там где он отображается
45 FIXXXL
 
05.03.18
16:13
(42)(43) вынеси Статус полностью в периодический РС
при записи СОвершилПосадку пиши сразу запись "в будущее" с РейсЗавершен  
срез не забудь только на дату всегда брать :)
46 dezss
 
05.03.18
16:42
(45) +100500)
47 Мимохожий Однако
 
05.03.18
16:56
А если через 20 минут взлетит? ))
48 H A D G E H O G s
 
05.03.18
17:03
Вообще то фоновое задание связано с основным.
49 catena
 
06.03.18
05:10
(43)Делаешь сразу две записи в регистре:
ТекущаяДата()             "Приземлился"
ТекущаяДата()+60*60       "Завершен"

Все, никаких обработчиков и фоновых не нужно.
Закон Брукера: Даже маленькая практика стоит большой теории.