Имя: Пароль:
1C
1С v8
Как программно получить данные которые были переданы в вызывающую процедуру?
0 D_Pavel
 
16.01.13
10:33
Одна процедура вызывает вторую. Во второй процедуре нужно получить значения переменных или переданных параметров первой процедуры.

В отладчике это легко. А программно как?
1 DrShad
 
16.01.13
10:34
передать их в ту процедуру где они нужны, коли они не глобальные
2 ДенисЧ
 
16.01.13
10:34
ммм.. передать эти параметры как параметры второй процедуры?
3 Maxus43
 
16.01.13
10:38
как может быть в отладчике легко, а в коде не легко?
4 Starhan
 
16.01.13
10:39
(3) вселенская тайна.
5 acsent
 
16.01.13
10:40
(3) как раз можно.
Открыть стек вызовов, посмотреть значения
6 cw014
 
16.01.13
10:40
После третьей "передачи параметров процедуре" у меня моск сломался
7 D_Pavel
 
16.01.13
10:41
В (0) частный случай.
А если это одна и та же процедура, вызывает сама себя рекурсивно много раз. И нужно на уровне вложенности "N" вытащить параметры из уровня "D".
8 D_Pavel
 
16.01.13
10:41
(3) Ну мне не легко. А тебе легко?
9 Starhan
 
16.01.13
10:43
(7) давай нормальный пример, пока не понятно чем не подходят параметры методов.
10 Starhan
 
16.01.13
10:43
и вообще похоже на проблему в архитектуре :)
11 Deniskind
 
16.01.13
10:44
Два параметра - ссылка на массив и уровень вложенности не подойдет?
12 D_Pavel
 
16.01.13
10:45
(9) Что именно не понятно? Вроде в (0) всё проще некуда расписал
13 Reset
 
16.01.13
10:46
(0) Программно никак, параметры процедуры видны только в ней.

Только передавать параметры явно, в том или ином виде.
14 Maxus43
 
16.01.13
10:46
(8) код покажи, или пример нормальный. Если внутри процедуры2 ты отладчиком видишь значение нужное - где проблема его в коде получить?
15 Reset
 
16.01.13
10:46
(14) Не тормози, он переключает контекст с помощью стека вызовов :)
16 D_Pavel
 
16.01.13
10:46
(11) там скорее не массив, а ветвистая структура со вложенными структурами получается.
17 D_Pavel
 
16.01.13
10:47
(14) Понятно. Очень жаль.
18 D_Pavel
 
16.01.13
10:48
+(17) это не туда. Для (13)
19 Maxus43
 
16.01.13
10:48
(15) хорошо, пойду кофя пить
20 Starhan
 
16.01.13
10:49
Давай пример. А про (0)уже сказали либо передаешь параметры дальше по процедурам. Либо переменные модуля и т.п.
21 Deniskind
 
16.01.13
10:51
(16) Тогда ДеревоЗначений
22 D_Pavel
 
16.01.13
10:53
(20) Зачем тебе пример?


функция УУУУ(А)
   //Тут нужно узнать что было передано в предыдущем вызове
   А = А % 5;
   А = УУУУ(А);
КонецФункции
23 ДенисЧ
 
16.01.13
10:54
(22) а узнать, что сейчас думает президент Гондураса, в этот момент программно не надо?
24 D_Pavel
 
16.01.13
10:55
(23) что за бред?
25 D_Pavel
 
16.01.13
10:56
(21) можно. Но сложно
26 ДенисЧ
 
16.01.13
10:57
(24) бред - это то, что ты несёшь.
27 D_Pavel
 
16.01.13
10:58
(26) Где именно?
28 eklmn
 
гуру
16.01.13
10:58
(22)че за бред ?
29 D_Pavel
 
16.01.13
10:58
(28) Просили пример.
30 eklmn
 
гуру
16.01.13
10:58
чувак по ходу не познал циклы?
31 Rovan
 
гуру
16.01.13
10:58
(11) поддерживаю
32 D_Pavel
 
16.01.13
10:59
(30) цыкл тебя познал. Иди отсюда
33 Maxus43
 
16.01.13
10:59
(22) тебе (11) в помощь. Но ИМХО - не должен алгоритм опираться на данные, не относящиеся к данной итерации
34 Starhan
 
16.01.13
10:59
(29) просили нормальный пример :)
35 Rovan
 
гуру
16.01.13
11:00
(22)
функция УУУУ(А, ПредА)
   Блин = А;
   А = А % 5;
   А = УУУУ(А,Блин);
КонецФункции
36 D_Pavel
 
16.01.13
11:00
(34) Этот самый простой.

(33) в (21) получше
37 Maxus43
 
16.01.13
11:00
(36) да не суть
38 eklmn
 
гуру
16.01.13
11:02
(32) у тебя ошибка в голове
39 Starhan
 
16.01.13
11:02
(35) правильнее так :)

функция УУУУ(А, ПредА=Неопределено)
   Блин = А;
   А = А % 5;
   А = УУУУ(А,Блин);
КонецФункции;

но поскольку пример простой то и ответ простой.
Все таки интересно что хочет автор
40 D_Pavel
 
16.01.13
11:03
(35) А если нужно на несколько уровней выше получить, то придется много параметров передавать. Или массив параметров.
41 Starhan
 
16.01.13
11:03
(40) ну скажи зачем.....
дай пример с чем ты столкнулся
42 D_Pavel
 
16.01.13
11:04
функция УУУУ(А, МассивА)
   МассивА.Добавить(А);
   А = А % 5;
   УУУУ(А, МассивА);
КонецФункции;

Только вопрос: Массив не будет каждый раз копироваться и забивать память?
43 Maxus43
 
16.01.13
11:04
(40) > (33). Пример алгоритма где это может требоваться есть? Опираться на предыдущие итерации? Рекурсия не для этого придумана, чтоб в 10-й итерации смотреть что было в 1-й
44 Rovan
 
гуру
16.01.13
11:05
(44) дык про массив же сразу сказали - см (11)
45 D_Pavel
 
16.01.13
11:05
(41) У меня в функции случается что параметр принимает определенное значение, и нужно проследить цепочку как это случилось.
46 Rovan
 
гуру
16.01.13
11:06
(42) нет...это ссылка на массив
47 D_Pavel
 
16.01.13
11:07
(44) Там про "Два параметра - ссылка на массив и уровень вложенности"
Да, слово массив тоже присутствует, но для другой цели
48 Rovan
 
гуру
16.01.13
11:07
(+43) да... обычно так делают: рекурсией заполняют некий список (массив, деревозначений), а затем уже его обрабатывают
49 D_Pavel
 
16.01.13
11:07
(46) ок
50 Rovan
 
гуру
16.01.13
11:08
(47) в рамках твоей задачи цель только 1
51 D_Pavel
 
16.01.13
11:10
(48) У меня уже заполнена структура, ветвистая, с массивами структур и структурами структур.
Функция рекурсивно пробегает по этой структуре и копирует ее в другое хранилище. И на каком-то уровне вложенности по переданной подструктуре нельзя определить в каком месте первоначальной структуры мы находимся.
52 D_Pavel
 
16.01.13
11:11
+(51) то есть нужно зная подструктуру получить ее родителя и дедушку и прапрадедушку.
53 Reset
 
16.01.13
11:14
Хранить в подструктурах родителя не подойдет?
54 Reset
 
16.01.13
11:15
+Это как дерево получится, но с произвольными наборами колонко в узлах
55 Maxus43
 
16.01.13
11:17
а тупо ТЗ не прокатит? индекс - вот тебе и номер цикла рекурсии
56 D_Pavel
 
16.01.13
11:19
(53) Сильно много переделывать. Много веток у структуры.
57 D_Pavel
 
16.01.13
11:19
(55) не
58 D_Pavel
 
16.01.13
11:23
(46) Блин, не подходит. В параллельных ветвях рекурсии будут попадать данные из других веток.
Придется каждый раз новый массив создавать.
59 D_Pavel
 
16.01.13
11:26
Как вызывать процедуру чтобы массив передавался не ссылкой?
60 acsent
 
16.01.13
11:29
итого вывод: ты неправильно реализовал алгоритм изначально
61 D_Pavel
 
16.01.13
11:33
(60) о_О ничего себе какие выводы ты делаешь!
62 Reset
 
16.01.13
11:33
(59) Это называется дать намыленную веревку:

СЗ=Новый СписокЗначений;
СЗ.ЗагрузитьЗначения(А);
УУУУ(СЗ.ВыгрузитьЗначения()); // Будет передана копия массива
63 D_Pavel
 
16.01.13
11:34
(62) точно
64 Reset
 
16.01.13
11:35
(61) Он правильные выводы делает. Когда для продолжения работы с алгоритмом внезапно потребовались нестандартные (даже кривые) методы, это значит требуется рефакторинг алгоритма.
65 D_Pavel
 
16.01.13
11:37
(64) алгоритм хороший. Просто нет методов для того чтобы его улучшить.
66 D_Pavel
 
16.01.13
11:42
+(65) просто хотелось сделать более информативные сообщения пользователю.
Вместо:
"Не правильный номер дома (питнацать)"
Хотелось:
"Не правильный номер дома (питнацать) по улице (Ленина) в городе (Чемкент)"

Ну да ладно, обойдутся.
67 Privalov
 
16.01.13
11:48
(22) Бред!
68 ДенисЧ
 
16.01.13
11:48
(67) Баян! :-)
69 D_Pavel
 
16.01.13
11:53
(67) Просили пример, написал ))))
70 Starhan
 
16.01.13
11:55
(66) да полюбэ все реально, проблема у тя в архитектуре.  эт я еще в (10) сказал
71 D_Pavel
 
16.01.13
11:57
(70) Да я видел, ты еще в (10) ошибся.
Никак не реально
72 D_Pavel
 
16.01.13
11:58
Точнее нормальным способом не реально, только извращаться