Статические объекты
Статические (или встроенные) объекты - это объекты, которые определяются разработчиком и автоматически встраиваются в систему при старте (если на момент старта они в системе отсутствуют). Кроме того, такие объекты запрещено удалять.
При объявлении пользовательского класса можно объявить объекты этого класса, которые будут являться статическими объектами. Если это сделать, этот пользовательский класс автоматически наследуется от класса System.StaticObject. Статические объекты можно добавить классу и позже, расширением класса. Описанные ниже свойства статических объектов применимы к объектам System.StaticObject и его потомков: класс становится потомком, объявляя статические объекты либо явно наследуясь от System.StaticObject — сам или через предка, — а к объектам класса, который не делает ни того ни другого, эти свойства применить нельзя.
Каждому статическому объекту пользовательского класса необходимо задать определенное имя и заголовок, а также можно задать иконку, к которым впоследствии можно обращаться при помощи свойств name[StaticObject], caption[StaticObject] и image[StaticObject] соответственно. name[StaticObject] возвращает каноническое имя объекта — его идентификатор с пространством имён модуля и классом, в виде <пространство_имён>_<Класс>.<объект> (для объекта Direction.north ниже name[StaticObject] даёт <пространство_имён>_Direction.north, а не просто north), тогда как caption[StaticObject] возвращает показываемый пользователю заголовок. Короткое имя без квалификации (часть после точки) возвращает свойство basicName[StaticObject] из системного модуля Utils.
Статическими объектами встроенных классов являются конкретные числа, строки, значения дат и т.п., используемые пользователем при описании логики.
Статические объекты можно использовать для создания ограниченного множества объектов некоторого класса. Такое множество можно использовать в качестве перечисляемого типа данных, чтобы предоставлять выбор из ограниченного набора значений. Чтобы показать такое значение-перечисление на форме и дать пользователю его изменять, выводится не сама связь со статическим объектом, а её композиция с caption[StaticObject]: интерактивное представление при описанных там условиях показывает такую композицию элементом выбора из объектов класса, а запись через неё уходит в связь, а не в заголовок статического объекта.
Сопоставление объектам такого множества значений — например, номеров — выбором с условием равенства объекту даёт запрос с отдельным фрагментом на каждый вариант выбора: условие, в котором результат такого выбора сравнивается с параметром или сам выбор идёт по параметру, раскрывается по вариантам, и в каждом фрагменте параметр заменён своим значением. Несколько таких условий по разным параметрам в одной группировке или фильтре умножают число фрагментов — до произведения чисел вариантов (три, четыре и двенадцать вариантов — до ста сорока четырёх фрагментов). В зависимости от запроса фрагменты остаются встроенными условиями или становятся отдельными подзапросами, а длина запроса и время его построения растут вместе с их числом — вплоть до ограничения длины запроса. Такое сопоставление можно задать и первичным свойством или материализовать: сравнение с хранимым значением по вариантам не раскрывается.
Язык
Статические объекты пользовательских классов задаются в инструкции CLASS в блоке, ограниченном фигурными скобками.
Примеры
CLASS Direction 'Направление'
{
north 'Север',
east 'Восток',
south 'Юг',
west 'Запад'
}
direction = DATA Direction ();
showDirection {
MESSAGE name(direction());
MESSAGE caption(direction());
}
// создаем форму по выбору объекта класса Direction
FORM directions 'Направления'
OBJECTS d = Direction
PROPERTIES(d) READONLY caption
LIST Direction OBJECT d
;
// выбор направления на форме: выводится композиция заголовка,
// запись через нее уходит в свойство direction
FORM windRose 'Роза ветров'
PROPERTIES captionDirection 'Направление' = caption(direction())
;