Разработка #3241
Переопределение методов 2 = виртуальные методы с помощью классов
0%
Связанные редакции
Редакция fb92c6de
(Разница(diff))
пример класса ГМ для переопределения refs #3241
Редакция 9b49d1eb
(Разница(diff))
пример класса ГМ для переопределения refs #3241
пример класса ГМ для переопределения refs #3241
История
#1 Обновлено кб99 Синявский Филипп почти 5 года назад
Спасибо Алексей Диркс
git
Техника такая
в файле определения классов я вношу такие изменения
класс Меркурий_ГлобальныйМодуль.База = ExtForms\Меркурий\Меркурий_ГлобальныйМодуль.ert{}; класс Меркурий_ГлобальныйМодуль = ExtForms\Меркурий\Меркурий_ГлобальныйМодуль_МС.ert : Меркурий_ГлобальныйМодуль.База{};
Таким образом получаю класс Меркурий_ГлобальныйМодуль, который наследует от Меркурий_ГлобальныйМодуль.База. Теперь в наследнике я могу переопределять любые методы базового класса, с возможностью вызова методов базового класса в произвольном порядке.
например:
Функция ЗаполнитьСтрокуДокумента(тзРезультат, тзОснование, докОснование = "") Экспорт //Базовый функционал База = Сам(Контекст).ПолучитьБазовыйКласс(); База.ЗаполнитьСтрокуДокумента(тзРезультат, тзОснование, докОснование); //==== Наша самодеятельность ==== оНом = СоздатьОбъект("ТСправочник.Номенклатура"); ПродЭл = тзРезультат.Продукция_Элемент; //:Справочник.ВСД_Продукция_Элемент Мест = оНом.Мест(тзРезультат.Номенклатура, тзРезультат.Количество); тзРезультат.ФормаУпак2 = ПродЭл.ФормаУпаковки; тзРезультат.КолВоУпак2 = Мест; /// и т.д. КонецФункции
И чтобы всё это работало, в базовом классе все вызовы методов, которые могут быть переопределены, длжны выполняться через Сам().
Т.е. вместо
ЗаполнитьСтрокуДокумента( ТЗПартий, тз, Докум );
надо писать
Сам().ЗаполнитьСтрокуДокумента( ТЗПартий, тз, Докум );
В парадигме ООП это называется виртуальными методами.
#2 Обновлено кб99 Синявский Филипп почти 5 года назад
- Параметр Статус изменился с Новая на Завершена
Merge pull request #3 from ADirks-nsk/dev
[**] виртуализация переопределяемых методов refs #3241