Разработка #3241: Переопределение методов 2 = виртуальные методы с помощью классов - 1Cv7 ВСД в ГИС Меркурий - КБ99 Redmine

Проект

Общее

Профиль

Разработка #3241

Переопределение методов 2 = виртуальные методы с помощью классов

Добавил(а) кб99 Синявский Филипп почти 5 года назад. Обновлено почти 5 года назад.

Статус:
Завершена
Приоритет:
Нормальный
Назначена:
-
Версия:
Дата начала:
28.11.2019
Срок завершения:
Готовность:

0%

Оценка временных затрат:

Связанные редакции

Редакция 6e59dbca
Добавил(а) кб99 Синявский Филипп почти 5 года назад

Merge pull request #3 from ADirks-nsk/dev

[**] виртуализация переопределяемых методов refs #3241

Редакция fb92c6de (Разница(diff))
Добавил(а) кб99 Синявский Филипп почти 5 года назад

пример класса ГМ для переопределения refs #3241

Редакция 9b49d1eb (Разница(diff))
Добавил(а) кб99 Синявский Филипп почти 5 года назад

пример класса ГМ для переопределения refs #3241

Редакция 7d00f883
Добавил(а) кб99 Синявский Филипп почти 5 года назад

пример класса ГМ для переопределения refs #3241

История

#1 Обновлено кб99 Синявский Филипп почти 5 года назад

Спасибо Алексей Диркс
git

Техника такая
в файле определения классов я вношу такие изменения

класс Меркурий_ГлобальныйМодуль.База = ExtForms\Меркурий\Меркурий_ГлобальныйМодуль.ert{};
класс Меркурий_ГлобальныйМодуль = ExtForms\Меркурий\Меркурий_ГлобальныйМодуль_МС.ert : Меркурий_ГлобальныйМодуль.База{};

Таким образом получаю класс Меркурий_ГлобальныйМодуль, который наследует от Меркурий_ГлобальныйМодуль.База. Теперь в наследнике я могу переопределять любые методы базового класса, с возможностью вызова методов базового класса в произвольном порядке.
например:

Функция ЗаполнитьСтрокуДокумента(тзРезультат, тзОснование, докОснование = "") Экспорт
//Базовый функционал
База = Сам(Контекст).ПолучитьБазовыйКласс();
База.ЗаполнитьСтрокуДокумента(тзРезультат, тзОснование, докОснование);

//====   Наша самодеятельность  ====
оНом = СоздатьОбъект("ТСправочник.Номенклатура");
ПродЭл = тзРезультат.Продукция_Элемент; //:Справочник.ВСД_Продукция_Элемент

Мест = оНом.Мест(тзРезультат.Номенклатура, тзРезультат.Количество);
тзРезультат.ФормаУпак2 = ПродЭл.ФормаУпаковки;
тзРезультат.КолВоУпак2 = Мест;

/// и т.д.

КонецФункции

И чтобы всё это работало, в базовом классе все вызовы методов, которые могут быть переопределены, длжны выполняться через Сам().
Т.е. вместо

ЗаполнитьСтрокуДокумента( ТЗПартий, тз, Докум );

надо писать
Сам().ЗаполнитьСтрокуДокумента( ТЗПартий, тз, Докум );

В парадигме ООП это называется виртуальными методами.

#2 Обновлено кб99 Синявский Филипп почти 5 года назад

  • Параметр Статус изменился с Новая на Завершена

Экспортировать в Atom PDF