Типы операций
Тип позволяет определить структуру некого множества операций. Если Вы создадите новый журнал, откроете его и попытаетесь добавить операцию в таблицу - откроется диалог для выбора типа операции. Пока для журнала не определены типы операций - список типов в этом диалоге будет пустым, соответственно, добавить типовую операцию в журнал не получится. Тип операции может содержать определения аналитических и табличных признаков, а также алгоритмы модификации операций, алгоритмы, задающие дополнительные возможности отображения окон в журнале (расчетные столбцы, расчетная подчиненная таблица), и проч. Количество типов операций в журнале может быть любым. При добавлении новой операции в журнал пользователь выбирает конкретный тип операции, после чего может отображаться либо стандартный диалог платформы для редактирования операции, либо диалог, созданный прикладными разработчиками. При редактировании операции задаются значения определенных в типе признаков; возможно, производятся какие-то дополнительные действия, определенные алгоритмами типа операции.
Типы операций задаются в редакторе типов операций. Редактор типов операций можно вызвать из всплывающего меню в окне настройки журналов. В этом случае он вызывается в контексте выбранного журнала, и соответственно, в нем редактируются типы операций, относящиеся к этому журналу. Существует также параметрическое действие "Редактор типов операций", которое позволяет отображать в редакторе типы операций для заданного списка журналов.
Типы операций могут быть двух видов: собственные и разделяемые. Собственные операции могут быть добавлены только в один журнал, в контексте которого определен тип операции. Разделяемый тип операции может быть объявлен для нескольких журналов, соответственно, операции этого типа можно добавлять во все журналы, разделяющие данный тип. В соответствии с этой концепцией существует два варианта отображения редактора типов операций. Если в диалоге редактирования параметров редактора установлен признак "Только разделяемые типы" - в редакторе будут отображаться только разделяемые типы операций, и при добавлении нового типа он автоматически получает признак "Разделяемый". В диалоге редактирования типа операции можно выбрать журналы, которым будет принадлежать данный тип. Если признак "Только разделяемые типы" не установлен - в редакторе отображаются все типы операций, но добавлять, удалять и редактировать можно только собственные типы. Аналогично в редакторе типов операций, вызванном в контексте определенного журнала, можно редактировать только собственные типы операций.
Типы операций могут образовывать иерархию наследования. При этом от родительских объектов к дочерним наследуются признаки и алгоритмы. Допускается переопределение значений по умолчанию унаследованных аналитических признаков, а также переопределение алгоритмов. Переопределение табличных признаков запрещено. Допустимы следующие формы наследования типов:
- разделяемый --> разделяемый
- разделяемый --> собственный
- собственный --> собственный
Наследование разделяемого типа от собственного не допускается. На иерархию наследования типов можно накладывать ограничения. Так, при создании типа можно объявить его абстрактным или терминальным. Абстрактный тип не может непосредственно использоваться при создании операций, но от него могут наследоваться другие типы. Терминальный тип используется только для создания операций и является типом последнего уровня, то есть добавление к нему дочерних типов запрещено. Иерархическая организация типов предоставляет разработчику возможность комплексной модификации операций. К примеру, изменение установленной формы накладной не приведет к необходимости вносить изменения во все типы операций, описывающие различные накладные, если эти типы наследуются от абстрактной накладной. В этом случае достаточно будет внести изменения в абстрактную накладную, содержащую общие для всех накладных поля. Типы операций представляются во внутреннем языке как типы времени выполнения (RunTime типы), наследованные от базового типа ОПЕРАЦИЯ. Признаки и табличные признаки типа операции представляются как поля типа.