Генератор документов в ozma.io позволяет собирать договора, отчеты, накладные, наклейки для продукции и любые другие документы, использующие данные из системы.
Генератор документов сейчас на раннем этапе развития, так что возможны баги. При обнаружении странного поведения - пишите нам в телеграм
Администратор решения:
Пользователь решения:
.pdf, .html, .txt)Для генерации документа необходим шаблон документа, который после обработки превратится в .pdf, .html, .txt документы.
Шаблон представляет из себя произвольный текстовый документ формата .odt. Шаблон содержит разметку, позволяющую включать и исключать области документа, вставлять результаты произвольных запросов на языке FunQL в виде
Шаблон состоит из 2-х блоков:

{{FieldName}} подставлены вместо конкретных значений<query>{$id reference(base.people)}SELECT name FROM base.people WHERE id = $id</query><query>/views/schema/userview_name</query>Если запрос возвращает одну запись - используйте в запросе значение type="SingleRow
<query name="Operation" type="SingleRow">/views/schema/userview</query>
Пример:
https://acmeinc.ozma.org/views/reports/operation_info?id=11Запрос
<query name="Operation" type="SingleRow">/views/reports/operation_info</query>возвращает 6 колонок для одной записи Операции:
id,op_datetime,from_storage,to_storage,lines_count,barcodeТеперь в любом месте тела отчета можно использовать
{{Operation.id}},{{Operation.op_datetime}}и т.п. для вставки данных об этой операции в конкретное место документа.

Если нужно отобразить таблицу - используйте в запросе type="ManyRows"
<query name="ProductsList" type="ManyRows">/views/schema/userview</query>
В теле документа используйте конструкцию
{% for product in ProductsList %}
Любой контент с использованием {{product.id}} или например, {{product.name}}
{% endfor %}
Пример:
https://acmeinc.ozma.org/views/reports/products_in_operation?id=3
Запрос<query name="Products" type="ManyRows">/views/reports/products_in_operation</query>возвращает 4 колонок для четырех Продуктов:
article,name,base_count,base_unitТеперь можно отрисовать в отчете таблицу с данными о четырех продуктах вот так:
Артикул Наименование Количество Единица {% for product in Products %}{{product.article}}{{product.name}}{{product.base_count}}{{product.base_unit}}{% endfor %}
В отчеты можно встраивать штрихкоды (поддерживаемые форматы - itf-14, ean-13, code-39) и QR-коды.

В самом шаблоне документа для их использования ничего не нужно.
Для того, чтобы генератор отобразил что-то как штрихкод необходимо добавить два атрибута в представления, из которых генератор будет брать данные:
SELECT
products.id as qrcode @{
control = 'qrcode',
image_height = 100
},
products.id as barcode @{
control = 'itf-14',
image_height = 100
},
FROM
production.products
control - указывает тип генерируемого штрихкодаimage_height - задает высоту генерируемого штрихкодаАдминистрирование шаблонов для конкретного решения осуществляется через админку генератора по адресу:
https://report-generator.ozma.io/admin/{instance-name}
Для работы с админкой необходимы права администратора инстанса (users.is_root = true)

.odtCсылка для генерации документа по шаблону fin.invoice для транзакции с id=501 будет выглядеть так:
https://report-generator.ozma.io/api/instance-name/fin/invoice/generate/My-invoice-501.pdf?id=501
Чтобы по нажатию на кнопку в системе пользователь получил готовый PDF файл - добавьте информацию для генератора на кнопку.
Формат данных для генерации:
{
document_template: {
schema: string,
name: string
},
filename?: string,
args?: object
}
document_template - содержит информацию о схеме и названии шаблона документаfilename - имя готового сгенерированного документа. Можно указать имя вместе с расширением (например, my-document.odt), если расширение не указано - по умолчанию pdfargs - аргументы, передаваемые в генераторПример:
{
$type enum('products', 'details', 'materials', 'all')
}:
SELECT
@type = 'table',
@title = 'Справочник товаров',
@row_link = &production.good_form,
goods.attribute @{ column_width = 125 },
goods.name @{ column_width = 375 },
goods.base_unit @{ column_width = 150 },
goods.notes @{ column_width = 450 },
[{
name: 'Наклейки', icon: 'qr_code_2',
document_template: {
schema: 'storage',
name: 'product10',
},
filename: goods.attribute || '-stickers',
args: {
id: goods.id
},
}] as buttons @{
column_type = 'buttons',
cell_color = '#F4F4F4',
column_width = 130,
caption = 'Печать'
},
FROM
production.goods
ORDER BY
goods.name
Пример: https://acmeinc.ozma.org/views/production/goods_table_all?type="all"
Если вы получили 500-ую ошибку при генерации, проверьте
<query> - что юзервью существуют и не сломаны<query> - что запрос возвращает данныеЕсли есть уверенность, что все в шаблоне верно, а генератор все равно возвращает 500 - попробуйте в удалить все элементы в фигурных скобках {{element.id}} и написать их еще раз вручную (не используя copy-paste). И загрузить новый шаблон в систему.