Имя: Пароль:
1C
 
Расширения 8.3: передача из ДО в ПОСЛЕ
,
0 Euroset1
 
25.04.18
10:08
Скажите. Как передать переменную из процедуры до в процедуру после? Вот для чего это потребовалось:

Есть табличная часть некая. Есть ее реквизит, который типовая процедура портит в процессе выполнения. Но подменять стандартную процедуру я не хочу - велика вероятность, что при очередном обновлении коробки там будут важные изменения. Поэтому нужно перед типовой процедурой запомнить данные, а после нее эти данные вернуть.

Конечно, первая мысль - реквизит формы, но есть же еще и бесконтекстные вызовы...
1 mszsuz
 
25.04.18
10:49
Есть ещё &Вместо. Там сразу и До и После.
2 mehfk
 
25.04.18
11:12
(0) Завести переменную модуля формы.
3 Ненавижу 1С
 
гуру
25.04.18
11:13
зачем вообще аннотации &Перед и &После, если есть универсальная &Вместо и ПродолжитьВызов()?
4 AlvlSpb
 
25.04.18
11:47
(3) Для описанной ситуации не пойдет. Абсолютно правильно в (2)
5 Ненавижу 1С
 
гуру
25.04.18
11:53
(4) это почему не пойдет?
6 Cyberhawk
 
25.04.18
12:00
(5) Так типовой код меняет данные
7 AlvlSpb
 
25.04.18
12:00
(5) Немного не так выразился. Без (2) ваше предложение не поможет.
8 Ненавижу 1С
 
гуру
25.04.18
12:08
(6)
1. скопировали данные
2. вызвали ПродолжитьВызов
3. вернули что хотели из копии
9 Euroset1
 
25.04.18
13:17
(8) (3) А зачем тогда нужны ДО и ПОСЛЕ?
Есть ли задачи, которые можно решить только ими? Только если играться с "у меня в базе 20 расширений и я запутался какое после какого вызывается"?)))

(7) Я в топике уже описал, почему (2) не подойдет. Контекст н не всегда доступен, да и помимо всего прочего хорошо бы уметь это делать в модуле объекта. Склоняюсь к (8), ибо эта матрёшка вполне себе выглядит годно. По крайней мере, пока у меня только одним расширением идет доработка данного продукта и другие не планируются
10 Ненавижу 1С
 
гуру
25.04.18
14:12
(9) зачем &Перед и &После обсуждалось много раз и никто внятно ничего не сказал. Максимум это возможно чуть меньше разматывается стек вызовов

в нормальных ООП есть единый подход использования override методов с возможностью вызова родительских версий через base
11 Euroset1
 
26.04.18
09:12
(10) Ну я как минимум нашел одну причину.
Есть у тебя непонятки с тем, сколько еще будет расширений по этой процедуре, а тебе нужно гарантированно выполнить код до или после. В таком случае не придется постоянно заботиться о последовательности подключения расширений.
12 Ненавижу 1С
 
гуру
26.04.18
11:17
(11) не вижу проблем: http://v8.1c.ru/o7/201603module/13.png
13 Euroset1
 
26.04.18
11:21
(12) А я вижу. Расширение2 добавляет код, который нужно выполнять прям прям 100% до всего остального. Ты добавляешь Расширение3 и оно выполняется раньше. А если бы ты использовал в Расширение2 ПЕРЕД, то при добавлении Расширение3 она также и будет выполняться ПЕРЕД.
14 Ненавижу 1С
 
гуру
26.04.18
11:28