mcpField
F
frappe-syntax-reports

frappe-syntax-reports

github.com/impertio-studioデータ・データベース198110 回インストール30 週間前に更新
リポジトリ

frappe-syntax-reports について

Frappe の開発者や管理者向けに、レポートの種類、データやチャートの形式、フィルター、集計、非同期処理を解説するリファレンススキルです。

主な機能

  1. 01Report Builder、Query Report、Script Report の解説
  2. 02列とフィルターの定義
  3. 03チャートとレポート集計の形式
  4. 04大規模データ向けの事前生成レポート
  5. 05Number Cards とダッシュボードチャートのソース

活用シーン

  1. 01Frappe の作業に適したレポート形式の選択
  2. 02フィルターやチャート、集計付きレポートの作成
  3. 03大規模データのレポートを非同期で実行

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/impertio-studio/frappe_claude_skill_package --skill frappe-syntax-reports

インストール後、Claude Code で/frappe-syntax-reportsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
.gitkeep
anti-patterns.md
dashboard.md
examples.md
query-report.md
script-report.md

詳細

レポート:クエリ、スクリプト、レポートビルダー

クイックリファレンス

レポートの種類の概要
種類コードが必要用途権限
レポートビルダーなしフィルターやグループ化に対応した、単一の DocType のシンプルな一覧すべてのユーザー
クエリレポートSQL のみ直接 SQL クエリを実行する場合、従来の列形式システムマネージャー
スクリプトレポート(標準)Python + JS複雑なロジック、グラフ、概要、ツリー管理者 + 開発者モード
スクリプトレポート(カスタム)UI 内の Pythonアプリのデプロイなしで手早くカスタムレポートを作成システムマネージャー
スクリプトレポートの execute() 戻り値
def execute(filters=None):
    columns = [...]   # List of dicts
    data = [...]      # List of dicts or lists
    message = "..."   # Optional: HTML message above report
    chart = {...}     # Optional: chart configuration
    report_summary = [...]  # Optional: summary cards
    skip_total_row = False  # Optional: suppress auto-total
    return columns, data, message, chart, report_summary, skip_total_row
列の定義(Dict 形式)
columns = [
    {
        "fieldname": "customer",
        "label": _("Customer"),
        "fieldtype": "Link",
        "options": "Customer",
        "width": 200
    },
    {
        "fieldname": "amount",
        "label": _("Amount"),
        "fieldtype": "Currency",
        "options": "currency",  # field in row holding currency code
        "width": 120
    }
]
クエリレポートの列形式(レガシー文字列)
SELECT
  name as "Sales Order:Link/Sales Order:200",
  customer as "Customer:Link/Customer:180",
  grand_total as "Total:Currency:120",
  transaction_date as "Date:Date:100"
FROM `tabSales Order`
WHERE docstatus = 1

形式:"Label:Fieldtype/Options:Width" — Link、Dynamic Link、Currency の場合のみ Options が必要です。

フィルターの定義(JS)
frappe.query_reports["My Report"] = {
    filters: [
        {
            fieldname: "company",
            label: __("Company"),
            fieldtype: "Link",
            options: "Company",
            default: frappe.defaults.get_user_default("company"),
            reqd: 1
        },
        {
            fieldname: "from_date",
            label: __("From Date"),
            fieldtype: "Date",
            default: frappe.datetime.add_months(frappe.datetime.get_today(), -1)
        },
        {
            fieldname: "status",
            label: __("Status"),
            fieldtype: "Select",
            options: "\nDraft\nSubmitted\nCancelled"
        }
    ]
};

選択フロー:レポートの種類を選ぶ

Need a report?
├─ Simple list/group of one DocType → Report Builder
│   (no code, UI-only, supports Group By with Count/Sum/Avg)
├─ Direct SQL query, no Python logic needed → Query Report
│   (SQL in Report doc, column format in aliases)
├─ Complex logic, calculations, charts → Script Report (Standard)
│   (Python .py + JS .js files, requires Developer Mode)
└─ Quick one-off with Python but no app deploy → Script Report (Custom)
    (Python in Report doc UI, System Manager can create)
Script Report returns what?
├─ Just data → return columns, data
├─ Data + chart → return columns, data, None, chart
├─ Data + summary → return columns, data, None, None, report_summary
├─ Data + message → return columns, data, message
└─ Everything → return columns, data, message, chart, report_summary, skip_total_row

列でサポートされる Fieldtype

FieldtypeOptions が必要備考
Dataいいえプレーンテキスト
LinkDocType 名ドキュメントへのクリック可能なリンク
Dynamic LinkDocType を保持するフィールド名DocType を含む列と組み合わせます
Currency通貨フィールドまたはコード通貨を保持する行内のフィールド名
Floatいいえ小数
Intいいえ整数
Percentいいえパーセントバーを表示
Dateいいえ日付表示
Datetimeいいえ日付 + 時刻
Checkいいえブール値のチェックボックス
Selectいいえドロップダウンの値
Textいいえ長文テキスト
HTMLいいえ生の HTML をレンダリング

サポートされるフィルターの Fieldtype

FieldtypeOptions動作
LinkDocType 名DocType からのオートコンプリート
Select改行区切りの値固定オプションのドロップダウン
Date—日付ピッカー
DateRange—[from_date, to_date] のリストを返します
Check—ブール値の切り替え
Dynamic LinkLink フィルターのフィールド名別のフィルター値に応じて変わります
Data—自由形式のテキスト入力
Int—数値入力
MultiSelectListDocType 名複数の値を選択

グラフデータ形式

chart = {
    "data": {
        "labels": ["Jan", "Feb", "Mar", "Apr"],
        "datasets": [
            {"name": _("Revenue"), "values": [100, 200, 150, 300]},
            {"name": _("Expense"), "values": [80, 150, 120, 250]}
        ]
    },
    "type": "bar",        # bar, line, pie, donut, percentage
    "fieldtype": "Currency",
    "options": "currency",
    "currency": "USD",
    "colors": ["#5e64ff", "#ffa00a"]  # Optional custom colors
}

レポートの概要形式

report_summary = [
    {
        "value": total_revenue,
        "label": _("Total Revenue"),
        "datatype": "Currency",
        "currency": "USD",
        "indicator": "Green"   # Green, Blue, Orange, Red
    },
    {
        "value": total_count,
        "label": _("Total Orders"),
        "datatype": "Int",
        "indicator": "Blue"
    }
]

準備済みレポート

大規模なデータセットを処理するレポートでは、非同期で実行するために 準備済みレポート を有効にします。

  1. Report ドキュメントで prepared_report = 1 を設定します
  2. ユーザーが「新しいレポートを生成」をクリックすると、enqueue() によりバックグラウンドで実行されます
  3. 結果はファイルに保存され、準備ができたらユーザーがダウンロードまたは表示できます
  4. 10 万行を超えるデータをクエリするレポート、または完了までに 30 秒以上かかるレポートでは、必ず使用してください

数値カード

ソースの種類必須フィールド動作
ドキュメントタイプdocument_type、function、aggregate_function_based_onDocType に対する SQL 集計
レポートreport_name、report_field、functionレポート列から値を取得
カスタムメソッドmethod許可リストに登録された Python メソッドを呼び出します

カスタムメソッドのシグネチャ:

@frappe.whitelist()
def get_total_active_users(filters=None):
    return frappe.db.count("User", {"enabled": 1})

ダッシュボードチャート

ソース設定データ形式
レポートchart_type = "Report" を設定し、レポートを選択しますレポートのチャートデータを使用します
カスタムchart_type = "Custom" を設定し、source を定義しますフックは {"labels": [...], "datasets": [...]} を返します
グループ化chart_type = "Group By" を設定し、フィールドを選択しますフィールドごとに自動集計します

hooks.py のダッシュボードチャートソースフック:

dashboard_chart_source = [
    "myapp.dashboard_chart_source.get_chart_data"
]

重要なルール

  • 必ず、fieldname、label、fieldtypeを含む辞書のリストとして列を定義してください。従来の文字列形式を使用できるのは、Query ReportのSQLエイリアスだけです。
  • execute()でcolumnsまたはdataにNoneを決して返さないでください。必ず空のリスト[]を返してください。
  • 列とreport_summaryの翻訳可能なラベルには、必ず_(...)を使用してください。
  • ユーザーが指定したフィルター値をf文字列に直接埋め込んで、frappe.db.sqlを決して使用しないでください。必ずパラメーターとして渡してください:frappe.db.sql(query, filters, as_dict=True)。
  • Reportドキュメントには、必ずReference DocTypeを設定してください。これはユーザーアクセス権限を制御します。
  • 列定義でwidthを決して省略しないでください。幅を指定していない列は、適切に表示されません。
  • チャートデータでは、datasets[].valuesの長さをlabelsの長さに必ず合わせてください。長さが一致しないと、チャートの描画エラーが発生します。

関連項目

コメント