Имя: Пароль:
1C
1С v8
Проблема с множественным наследованием
0 jsmith
 
25.04.12
10:51
Так вышло, что в документе есть такая ситуация..
y = f(P1, P2)
P1 = f(A)
P2 = f(А)
в итоге при измении А происходит двойной пересчет y = f(P1, P2)
что делать?
(P1, P2) = f(A)?
1 orefkov
 
25.04.12
10:58
P1 = f(A)
P2 = f(А)
y = f(P1, P2)
2 jsmith
 
25.04.12
11:00
если быть точнее, то
P1 - курс договора
P2 - курс цены товара
y - цена товара в валюте договора
A - дата документа
При изменении даты происходит пересчет курсов
Сейчас такая ситуация, что при пересчете каждого курса P1 и P2 вызывается y = f(P1, P2)
3 jsmith
 
25.04.12
11:02
думаю, если данные класса модифицируются (то бишь меняется дата A), он должен взять управление модификацией своих потомков
то бишь изменить сам курсы P1 и P2 и вызвать функцию y
а в обработчик ПриИзмененииP1 и ПриИзмененииP2 передать параметр.. типа, который показыввал бы, что надо изменять, а что родитель сам уже сделал
то бишь родитель сам управляет множественным наследовванием
4 jsmith
 
25.04.12
11:04
сейчас ситуация такая

Процедура ПриИзменении_Дата()
Записать_КурсДоговора();
Записать_КурсТовара();
КонецПроцедуры

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

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

Процедура ПриИзменении_КурсДоговора()
Записать_Цена();
КонецПроцедуры

Процедура ПриИзменении_КурсТовара()
Записать_Цена();
КонецПроцедуры
5 jsmith
 
25.04.12
11:07
а сделат вот так вот

Процедура ПриИзменении_Дата()
Записать_КурсДоговора(параметр="сделать только вот это");
Записать_КурсТовара(параметр="сделать только вот это");
Записать_Цена();
КонецПроцедуры

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

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

Процедура ПриИзменении_КурсДоговора(параметр)
если параметр содержит записать цена, то
Записать_Цена();
конецесли
КонецПроцедуры

Процедура ПриИзменении_КурсТовара()
если параметр содержит записать цена, то
Записать_Цена();
конецесли
КонецПроцедуры
6 jsmith
 
25.04.12
11:08
просто матан по этой теме плохо знаю
7 jsmith
 
25.04.12
11:17
покурил матан, почти везде всё сводится к квалификации метода (в с++ через две точки)
значит надо квалифицировать вызов, что в принципе я и сделал
8 jsmith
 
25.04.12
11:17
жуткая вещь
Программист всегда исправляет последнюю ошибку.