Имя: Пароль:
1C
1С v8
Какое соглашение вызова предпочесть
,
0 jsmith
 
10.04.12
20:44
Переписываю нетленку. Привожу в порядок логику событий формы.
Столкнулся с выбором.

1. Первый вариант (stdcall)

Процедура ПриИзмененииРеквизита_А()
   ЗаписатьРеквизит_B();
КонецПроцедуры

Процедура ЗаписатьРеквизит_B()
   // рутина
   ПриИзмененииРеквизита_B();
КонецПроцедуры

2. Второй вариант (cdecl)

Процедура ПриИзмененииРеквизита_А()
   ЗаписатьРеквизит_B();
   ПриИзмененииРеквизита_B();
КонецПроцедуры

Процедура ЗаписатьРеквизит_B()
   // рутина
КонецПроцедуры

Что бы вы предпочли?
1 jsmith
 
10.04.12
20:45
stdcall, вроде как, популярней
2 НикДляЗапросов
 
10.04.12
20:45
пофиг
3 НикДляЗапросов
 
10.04.12
20:46
может и не пофиг, но мне пофиг
4 jsmith
 
10.04.12
20:46
(2) понимаю, что пофиг, но, если бы пришлось выбрать, ткнул бы пальцем в первый попавшийся?
5 НикДляЗапросов
 
10.04.12
20:49
Не  ну первый вроде както ближе
6 jsmith
 
10.04.12
20:49
(5) ок. я тоже так думаю
7 Один С
 
10.04.12
20:50
вот что за мода пошла беспричинно код по процедурам разбрасывать.
ведь эта процедура все равно только из одного места вызывается, так нет же, надо ж выебнуться..
8 cViper
 
10.04.12
20:52
я бы выбрал второй вариант.
ЗаписатьРеквизит_B() и
ПриИзмененииРеквизита_B() 2 разных события, какой смысл вкладывать одно в другое?
9 cViper
 
10.04.12
20:53
А если надо, то проще можно сделать так, как говорит (7)
10 Ахиллес
 
10.04.12
20:54
(7) Всегда вроде так было. У каждого обработчика ровно одна процедура и вызывается она ровно из одного места (события). А какой смысл всё валить в кучу?
11 jsmith
 
10.04.12
20:54
(9) это пять! )
12 cViper
 
10.04.12
20:55
(11) Сам толком не понял что написал )))
13 jsmith
 
10.04.12
20:57
просто боюсь, подводные камни какие могут быть
14 Один С
 
10.04.12
20:57
(10) смысл в том, что потом другие программисты собирают эти 18-этажные конструкции, и пытаются понять логику.
15 Ахиллес
 
10.04.12
20:59
(14) Наверно, я о чём то другом подумал, когда тебе отвечал. Явно ответил не на тот вопрос, который задали :-)
Всё, я домой, а то башка уж не варит.
16 cViper
 
10.04.12
21:00
ЗаписатьРеквизит_B() используется где-нибудь еще? если да, то мой выбор 1, если нет, то 2
17 cViper
 
10.04.12
21:02
(16) Надо идти спать, все перепутал. если да, то 2, если нет - 1
18 cViper
 
10.04.12
21:03
(16) я о ПриИзмененииРеквизита_B() говорил )))
19 cViper
 
10.04.12
21:03
почему здесь нет смайлов ?
20 Один С
 
10.04.12
21:04
сВайперу больше не наливать
21 jsmith
 
10.04.12
21:13
чёто хотел сказать, но запутался
22 zak555
 
10.04.12
21:17
(0) забудь ты про процедуры
используй функции !
23 orefkov
 
10.04.12
21:24
stdcall? cdecl? Понтануться красивыми непонятными словами решил?

А по сути - вариант 2.
Другие точки вызова должны только записывать В, и совершенно не обязаны знать, что там должно быть при его изменении.
24 jsmith
 
10.04.12
21:27
(23) понтануться - озвучил по факту
красивыми - ну я бы не сказал
непонятными - у тебя монополия на системное программирование?
учитывая твой солидный вес в этой области, серьёзно отнесусь к твоему варианту
25 jsmith
 
10.04.12
21:28
хотя, если реквизит В меняется, то и при изменении должно срабатывать
26 orefkov
 
10.04.12
21:35
(24)
Сорри, в (23) перепутал номера, конечно же вариант 1 - вызов записать_в, а из него уже приизменении_в.
27 jsmith
 
10.04.12
21:36
(26) спс. так и поступлю. если орефков говорит, значит так и надо
28 zak555
 
10.04.12
21:39
//запретить клиенту нажимать на реквизиты А и В


&НаКлиенте
Процедура ПриИзмененииРеквизита_А()
   ПриИзмененииРеквизита_B();
КонецПроцедуры

&НаКлиенте
Процедура ПриИзмененииРеквизита_B()
   ПриИзмененииРеквизита_A();
КонецПроцедуры
29 jsmith
 
10.04.12
21:41
(28) зато без вызовов сервера!
30 zak555
 
10.04.12
21:45
(29) про сервер ничего не сказано =)