artbear писал(а) 30. Мая 2006 :: 15:30:Федор, еще раз поясни, что ты хочешь от ЗаменитьБазовыйОбъект? с учетом того, как счас мы построили иерархию
Еще раз от начала и до самого конца.
Итак, у нас есть два документа, и два класса, расширяющих функционал штатных 1С-вых документов.
Например "Документ.РКО" => "Документ_РКО" и "Документ.РКО_Вексельный" => "Документ_РКО_Вексельный".
Смотрим мы в модуль проведения каждого из этих документов и видим, что у нас имеется одинаковая последовательность методов:
_Сам = СоздатьОбъект("Документ_РКО");
_Сам.ЗаменитьЭксзБазовогоКласса("Документ.РКО", Контекст);
_Сам.__Инит__();
В _Сам.__Инит__() происходит расчет всяких разных нужных данных. Например бухитогов на позицию документа. Более того, метод __Инит__() для обоих классов одинаковый, и реализован в суперклассе "Документы_СБухИтогами".
Итоговая иерархия вот такая:
defcls.prm
класс Документы_СБухИтогами = __Документы_СБухИтогами@MD
{
void __Инит__();
};
класс Документ_РКО = __Документ_РКО@MD : Документ.РКО, Документы_СБухИтогами
{};
класс Документ_РКО_Вексельный = __Документ_РКО_Вексельный@MD : Документ.РКО_Вексельный, Документы_СБухИтогами
{};
Хочется и строчку _Сам.ЗаменитьЭксзБазовогоКласса("Документ.РКО", Контекст); засунуть в этот самый __Инит__(), с тем чтобы это выглядело примерно так:
_Сам = СоздатьОбъект("Документ_РКО");
_Сам.__Инит__(Контекст);
При этом в методе Документы_СБухИтогами::__Инит__(КонтекстДокумента) первой строчкой будет стоять вот такое:
Сам(Контекст).ЗаменитьЭксзБазовогоКласса("Документ."+КонтекстДокумента.Вид(), КонтекстДокумента)
Так вот, когда такое делаешь - реальной замены базового класса не происходит. То есть если в тот же самый __Инит__ следующими строчками вставить
Сообщить(""""+КонтекстДокумента.Фирма+"""");
Сообщить(""""+Сам(Контекст).Фирма+"""");
то будет написано
Цитата:"ООО Альтерпласт"
""