Отображает результат как форму с блоками.
Если в результате больше одной строки, то для каждой будет отрисована своя форма.

Форма является контейнером для полей с данными, а так же для других представлений - на одной форме можно разместить несколько вложенных таблиц, канбан-досок, таймлайнов, а также добавить отображения графиков, карт и прочих компонентов с помощью iframes.
SELECT 
        @type = 'form',
    @title = 'Отчет',
    @block_sizes = array[
    		6, 6
    ],
    SUM(amount) as sum_amount @{
    		caption = 'Сумма (за все время)',
        form_block = 0
    },
    {
    		ref: &crm.sales_report_table,
        args: {
        		date_from: $$transaction_time - '1 month'::interval,
            date_to: $$transaction_time
        }
    } as sales @{
    		control = 'user_view',
        form_block = 1,
    },
FROM crm.sales
block_sizes buttons create_buttons create_link disable_auto_save export_to_csv extra_actions help_embedded_page_name help_page lazy_load max_width panel_buttons post_create_link  show_argument_button show_argument_editor title typecaption control_height form_block visiblecell_color cell_variant control default_value extra_select_views fraction_digits link number_format options_view referenced_entity select_view show_seconds soft_disabled text_align text_typeОбозначения:
⚠️ - атрибут устарел (deprecated) и больше не поддерживаетсяИспользование:
Атрибуты представления и атрибуты строк начинаются с@и могут быть указаны в любом месте блокаSELECT
Атрибуты колонок и ячеек указываются после поля в блокеSELECTв форматеfield_name @{ attribute = value }
block_sizes[]// отображение в две строки по три колонки
@block_sizes = array[
        4, 4, 4, 
    4, 4, 4
] 
// отображение в две строки, на первой две колонки, на второй - одна во всю ширину
@block_sizes = array[
        4, 8, 
    12
]
buttons@buttons = [
        {
    		caption: 'Сгенерировать действия',
        action: {
           schema: 'crm',
           name: 'gerenate_actions'
        },
        args: {
        	id: $id,
          type: 'Звонок'
        },
        icon: 'flag',
        display: 'desktop',
        variant: 'info'
    }
]
create_buttonscreate_link). Добавляет выпадающий список с кнопками в шапку таблицы и "кебаб-меню".@create_buttons = [
        {
    		caption: 'Новый Человек',
        new: true,
        ref: &base.person_form,
        default_values: {
        	is_client: true
        },
        icon: 'person_add_alt_1'
    },
    {
    		caption: 'Новая Организация',
        ref: &base.organization_form,
        new: true,
        default_values: {
        		is_client: true
        },
        icon: 'add_business'
]
create_link@create_link = {
        ref: &base.person_form,
        default_values: {
                is_client: true
        }
 }
disable_auto_savefalse@disable_auto_save = true,
export_to_csvfalse@export_to_csv = true,
Подробнее: Экспорт в csv в ozma.io
extra_actions ⚠️buttons).help_embedded_page_name ⚠️help_page).help_page).help_pagefunapp.embedded_pages).@help_page = { 
        schema: 'admin', 
        name: 'help__admin__main' 
},
Подробнее: Справки, туториалы и поддержка
lazy_loadтребуется обновление страницы браузера после установки нового значения lazy_load
// разбивает данные на страницы по 10 записей.
@lazy_load = {
        pagination: {
    		per_page: 10
   }
}
max_widthpx), либо строкой с числом и %. Примеры: 500, '500', '500px' (ширина 500 пикселей), '100%' (ширина экрана).'1140px'// 500 пикселей
@max_width = 500,
-- @max_width = '500',
-- @max_width = '500px',
// ширина экрана
@max_width = '100%',
Подробнее: Задание ширины формы с помощью
@max_width
panel_buttons ⚠️buttons).buttons)post_create_link@post_create_link = &pm.action_additional_form,
Подробнее: Открытие другого представления после сохранения новой записи
show_argument_buttonfalse@show_argument_button = true,
Подробнее: Редактор аргументов
show_argument_editorfalse@show_argument_editor = true,
Подробнее: Редактор аргументов
title@title = 'Сделки',
type'type' | 'table', 'form', 'board', 'menu', 'timeline', 'multiselect']'table'captionname @{
        caption = 'Имя'
}
control_heightnotes @{
        text_type = 'multiline',
    control_height = 300
},
form_block0status @{
  form_block = 1
}
visibledefault_value позволяет задать значения по умолчанию для создаваемых строк, которые скрыты от пользователя.truecreated_on @{
  visible = false,
}
cell_color ⚠️cell_variant)cell_variant@cell_variant в качестве атрибута cтрок, окрашиваются все ячейки строк.// окрашивает все строки
@cell_variant = 'secondary',
status @{
  // окрашивает ячейку со статусом Завершено
  cell_variant = CASE WHEN status = 'done' THEN 'success' END
}
Подробнее: Цветовые варианты и настройка тем ozma.io
control'user_view' | 'iframe')user_view вместо ячейки отображается вложенное отображение, соответствующее значению ячейки, интерпретированному как ссылка с идентификатором.iframe вместо ячейки отображается айфрейм, и значение передаётся в него.// user_view
{
 ref: &admin.users_table,
 args: {  }
} as users @{
 	control = 'user_view'
}
// iframe
( SELECT full_name, amount FROM crm.clients ) as clients_amount @{
  	control = 'iframe',
    iframe_markup = {
                schema: 'admin',
  			name: 'stacked_multibar_chart'               
        }
}
default_valuedefault для колонки в её определении.extra_select_views"name": 'Название действия'.client @{
  	extra_select_views = [
  			{ name: 'Человек', new: true, ref: &crm.person_form },
  			{ name: 'Организация', new: true, ref: &crm.organization_form }
        ]
}
fraction_digitsnumber_format. Указывает, сколько цифр после запятой отображать. Не работает на формах для редактируемых полей.SUM(amount) as sum_amount @{
  	number_format = 'ru',
  	fraction_difits = 2
}
linkuser @{
  link = &admin.user_form
}
number_formatauto, en, ruint и decimal. При значении auto формат выберется на основе языка браузера пользователя.  // 'ru': 123 456,789
 	SUM(amount) as sum_amount @{
    number_format = 'ru',
    fraction_digits = 3
  }
    // 'en': 123,456.789
    SUM(amount) as sum_amount @{
    number_format = 'en',
    fraction_digits = 3
  }
options_viewvalue (значения в которой равны id сущностей, которые можно выбрать) и pun, содержащую строки-лейблы, используемые для отображения опций вместо главной колонки сущности.responsible_person @{
  options_view = &base.employees_view
}
// base.employees_view
SELECT id as value, __main as pun
FROM base.people 
WHERE is_client 
ORDER BY __main
referenced_entity ⚠️options_view.select_viewextra_select_views. Кнопка для выбора связанной сущности из отображения. Удобна, когда не требуется кастомизация надписи на кнопке и кнопка только одна.client @{
  	select_view = {
  			ref: &base.client_form,
  			new: true,
  			default_values: {
  					is_client: true 
                }
        }
}
show_secondsdatetime.falsecreated_on @{
  	show_seconds = true 
}
soft_disabledtrue, то ячейку нельзя редактировать.
falseorders.delivery_date @{
  	soft_disabled = (orders.status = 'on_delivery')
}
text_alignleft | center | right]right,leftamount @{
        text_align = 'left'
},
name @{
  	text_align = 'center'
}
text_typeactions.description @{
  	text_type = 'markdown'
}
Подробнее: Как включить форматирование текста в ozma.io
-- Для отображения одной записи на форме необходимо передать в нее 
-- идентификатор записи $id и обработать выборку этой записи условием в блоке WHERE
( 
    $id reference(public.entities) 
): 
SELECT
    @type = 'form', -- Как отображать результат
    @title = 'Entity: ' || $id=>name,
    @block_sizes = array[ -- Разметка блоков на форме
        4, 8,
        12
    ],
    @disabled_auto_save = true,
    @max_width = '100%',
    
    @buttons = [{   
        name: 'Архивировать',
        icon: 'edit',
        action: &admin.archive_record,
        visible: NOT $id=>is_archived,
        args: {
        	id: $id,
        	is_archived: true
        },
        display: 'desktop'
    }, {
    	name: 'Убрать из архива',
        icon: 'edit',
        action: &admin.archive_record,
        visible: $id=>is_archived,
        args: {
        	id: $id,
        	is_archived: false
        },
        display: 'desktop'
    }, {
    	name: 'История изменений',
    	icon: 'change_history',
    	ref: &admin.change_history,
    	args: {
    		schema: 'public', name: 'entities', id: $id
    	}
    }],
    
    schema_id @{
        form_block = 0, -- Индекс блока, в котором расположить поле-инпут
        soft_disabled = $id=>is_archived,
        cell_variant = CASE WHEN $id=>is_archived THEN 'light' END
    }, 
    name @{
        form_block = 0,
        soft_disabled = $id=>is_archived,
        cell_variant = CASE WHEN $id=>is_archived THEN 'light' END
    },
    main_field @{
        form_block = 1,
        soft_disabled = $id=>is_archived,
        cell_variant = CASE WHEN $id=>is_archived THEN 'light' END
    },
    -- Вложенные представления на форме
    { 
    	ref: &admin.unique_constraints_table, 
        args: { id: $id } 
    } as unique_constraints @{
        control = 'user_view',
        form_block = 0,
        -- Указание caption в родительской форме заменит title из вложенного представления. 
        -- Значение caption будет отображаться и на форме создания, и на форме редактирования---- записи. 
        caption = 'Unique Constraints'
    },
  
    { 
    	ref: &admin.column_fields_table, 
        args: { id: $id } 
    } as column_fields @{
        control = 'user_view',
        form_block = 1,
        caption = 'Column Fields'
    },
FROM
    public.entities
WHERE
    id = $id 
FOR INSERT INTO
    public.entities