Frappe Framework
Script Report
execute reçoit les filtres et renvoie colonnes et données. Depuis la v12, un rapport personnalisé écrit le script dans la fiche, via l’API restreinte.
Rôle
Ce que le constructeur et le Query Report ne font pas, un Script Report le fait en Python. L’accès n’est pas restreint : seuls les Administrators les créent, pendant le développement, dans l’application. Le mode développeur est obligatoire. L’habillage Excel est dans Style de l’export Excel.
AwesomeBar, new report. Report Type : Script Report. Is Standard : Yes. Choisir le module. Les fichiers naissent dans le dossier du module, par exemple erpnext/accounts/report/[report-name]. Le texte publié écrit « ill be » et « ERPnext ». Le Python va dans {report-name}.py, les filtres dans {report-name}.js.
Standard et personnalisé
Depuis la version 12, on peut faire des Query Reports et Script Reports personnalisés. Le script se saisit dans le rapport et n’utilise que l’API de script. Exemple : return frappe.db.get_all('User', ['first_name', 'last_name'], filters=filters).
Depuis la version 13, colonnes et filtres se règlent sur le document Report : libellé, largeur, format. Un filtre sert de variable, %(customer)s pour un filtre customer.
execute
Le fichier généré importe unicode_literals et définit execute(filters=None), qui renvoie columns, data. On peut y mêler modules Python et SQL. En plus, le développeur peut renvoyer message, chart, report_summary et skip_total_rows. La page dit que l’ordre est imposé, sans lister la séquence au-delà de ces noms. L’exemple ERPNext cité est le bilan : erpnext/accounts/report/balance_sheet/balance_sheet.py sur la branche develop.
Les colonnes ne se renvoient que si elles ne sont pas déjà sur le Report. Chaque dictionnaire a fieldname, label, fieldtype, options. L’exemple : account (Link Account), currency (Link Currency), balance (Currency, options currency).
Les résultats sont une liste de listes ou de dictionnaires. L’exemple montre des lignes d’actif en INR. Le tableau publié s’interrompt par ....
chart configure le graphique par défaut. report_summary est une liste affichée en haut : value, indicator Green ou Red selon le signe, label, datatype Currency, currency INR.
Filtres JavaScript
frappe.query_reports['Balance Sheet'] décrit les filtres. L’exemple a un Link Company, défaut frappe.defaults.get_user_default('company'), et un Select Periodicity (Monthly, Quarterly, Half-Yearly, Yearly), défaut Yearly. depends_on, depuis la v13, affiche le filtre selon une condition. Ici : eval:doc.company=="Gadget Technologies Pvt. Ltd.". Les valeurs arrivent dans execute sous forme de dict. L’AwesomeBar ouvre un rapport par son nom.
Snapshot
Moteur avancé : il faut réécrire le rapport pour une base OLAP.
- System Settings, Advanced, cocher Snapshot Report. Une tâche de fond synchronise MariaDB vers DuckDB.
- Cocher Snapshot Report sur la fiche Report.
- Écrire
execute_snapshot_report(filters).
La docstring publiée parle de « Synced Report » alors que les cases s’appellent Snapshot Report. Le framework appelle cette méthode à chaque rafraîchissement ou changement de filtre. get_latest_sync vient de frappe.database.duckdb.database. L’exemple renvoie get_columns() et get_data() sans les définir dans la page.
Point d’attention
Un rapport standard vit dans l’application et demande le mode développeur. Un rapport personnalisé reste dans l’API de script. Le nom Synced Report n’apparaît que dans la docstring.
