Использование выражений в журналах ===================================== .. _journal_expressions: В журналах есть возможность настраивать не только простые атрибуты (name, counterparty и др.), но и выражения. **Выражение**- набор функций, операторов, скобок и атрибутов, который позволяет вычислить значение на основе данных в БД. .. note:: :ref:`Вычисляемые атрибуты`, которые описаны в типе, имеют схожую с выражениями функциональность и позволяют более гибко настраивать значения атрибутов, но у них есть ограничения при поиске, группировке и сортировке. Эти операции доступны, только если для вычисляемого атрибута настроено сохранение в БД, но и в этом случае есть ограничение - их перерасчет будет произведен, только когда произойдет обновление сущности. Если обновляются связанные сущности или глобальные объекты, которые использовались для вычисления, то вычисляемый атрибут не пересчитается. В отличии от вычисляемых атрибутов, выражения в журнале позволяют настраивать вычисления, которые вычисляются в момент запроса для каждой записи, что позволяет искать, группировать и сортировать по ним с гарантией актуальности данных. Выражения настраиваются в дополнительных настройках колонки в поле **"Атрибут для загрузки"**. .. list-table:: :widths: 20 20 :class: tight-table :align: center * - | .. image:: _static/expressions/01.png :width: 400 :align: center - | .. image:: _static/expressions/02.png :width: 400 :align: center Для настройки выражения нужно, чтобы в содержимом этого поля была или функция или выражение полностью обернутое в скобки. Примеры ------- Расчет разницы между датами в днях ------------------------------------ .. code-block:: ceil(((date_part('epoch', date0) - date_part('epoch', date1)) / (60 * 60 * 24))) - **date0**и **date1** - атрибуты с датой или датой_временем между которыми происходит расчет. - **ceil** - округлить до ближайшего целого, которое больше или равно аргументу. Вместо этой функции можно использовать: - **floor** - отбросить дробную часть - **round** - округлить результат до ближайшего целого Произвольные математические операции ------------------------------------- .. code-block:: ceil(field0 + field1) (field0 + field1) (10 * (field0 + field1)) - **field0** и **field1** - это атрибуты сущности. Сложность выражений и количество атрибутов не ограничено. Получить месяц и год --------------------- .. code-block:: to_char(date0, 'MM.YYYY') - **date0** - это атрибут с датой или датой_временем.