Watch
1
0
Fork
You've already forked Seyyed_arc
0
forked from hesabix/arc
Seyyed_arc/docs/HSCRIPT_USER_GUIDE.wiki

481 lines
18 KiB
Text
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

= راهنمای کامل گزارش‌ساز اسکریپتی (HScript) =
این راهنما برای '''کاربران عادی و گزارش‌نویسان''' نوشته شده است. هدف آن توضیح ساده و کامل سیستم گزارش‌ساز اسکریپتی حسابیکس است؛ از ورود به صفحه تا ساخت داشبورد، قالب‌بندی عدد/تاریخ، خروجی PDF/Excel و کار با هوش مصنوعی.
{| class="wikitable" style="background-color:#f8f9fa; border-left:4px solid #3366cc;"
|-
| '''HScript چیست؟''' یک زبان ساده شبیه پایتون است که داخل حسابیکس اجرا می‌شود. با آن می‌توانید داده بگیرید، محاسبه کنید و گزارش/داشبورد بسازید — بدون دسترسی مستقیم به دیتابیس و بدون خطر اجرای کد ناامن.
|}
== ۱) از کجا شروع کنیم؟ ==
=== مسیر دسترسی ===
# وارد '''پنل کسب‌وکار''' شوید.
# از منوی راست، بخش '''سرویس‌ها و افزونه‌ها'''، گزینه '''گزارش‌ساز اسکریپتی''' را باز کنید.
# یا از صفحه '''گزارش‌ها''' کارت '''گزارش‌ساز اسکریپتی''' را انتخاب کنید.
# آدرس مستقیم: <code>/business/{شناسه-کسب‌وکار}/hscript</code>
=== دسترسی لازم ===
{| class="wikitable"
! کار !! دسترسی موردنیاز
|-
| دیدن/اجرا/ذخیره گزارش || <code>reports</code> → <code>view</code>
|-
| خروجی PDF و Excel || <code>reports</code> → <code>export</code>
|}
اگر دسترسی ندارید، از مدیر کسب‌وکار بخواهید مجوز گزارش‌ها را برای شما فعال کند.
=== افزونه و سقف استفاده ===
* بدون خرید افزونه هم می‌توانید کار کنید (پلن رایگان با سقف محدود).
* با فعال‌سازی افزونه '''گزارش‌ساز اسکریپتی (HScript)''' از بازار افزونه‌ها، سقف تعداد گزارش ذخیره‌شده و تعداد اجرا بالاتر می‌رود.
* در بالای صفحه، در صورت نیاز بنر ارتقا نمایش داده می‌شود.
== ۲) آشنایی با صفحه استودیو ==
وقتی گزارش جدید می‌سازید یا یکی را ویرایش می‌کنید، وارد '''استودیو HScript''' می‌شوید.
{| class="wikitable"
! بخش !! کاربرد
|-
| عنوان گزارش || نامی که در فهرست گزارش‌ها دیده می‌شود
|-
| ادیتور اسکریپت (چپ‌چین) || محل نوشتن کد HScript
|-
| پارامترها (JSON) || مقادیر متغیر مثل بازه تاریخ؛ اختیاری
|-
| پیش‌نمایش || نتیجه KPI، جدول و نمودار بعد از اجرا
|-
| اعتبارسنجی || فقط بررسی نحو اسکریپت (بدون گرفتن داده)
|-
| اجرا || اجرای واقعی و ساخت پیش‌نمایش
|-
| ذخیره / انتشار || ذخیره پیش‌نویس یا انتشار برای استفاده
|-
| PDF / Excel || خروجی فایل (نیازمند دسترسی export)
|-
| از AI بساز || کمک گرفتن از هوش مصنوعی برای نوشتن/اصلاح اسکریپت
|}
{| class="wikitable" style="background-color:#fff8e1; border-left:4px solid #ff9800;"
|-
| '''نکته:''' ادیتور کد همیشه '''چپ‌چین (LTR)''' است تا خواندن کد راحت باشد؛ حتی اگر پنل شما راست‌چین باشد.
|}
== ۳) اولین گزارش در ۳۰ ثانیه ==
اسکریپت نمونه زیر را در استودیو بگذارید و دکمه '''اجرا''' را بزنید:
<pre>
report.calendar("jalali")
report.number_format(style="western")
report.dashboard(columns=12)
report.title("داشبورد فروش")
rows = invoices.all(limit=50)
report.kpi("تعداد فاکتور", rows.count(), format="integer", span=4)
report.kpi("جمع بدهکار", rows.sum("total_debit"), format="currency", span=4)
report.card("وضعیت", "آماده", subtitle="پیش‌نمایش", span=4)
report.row_break()
top_rows = rows.top(10, by="total_debit")
report.bar_chart(top_rows, x="code", y="total_debit", title="بیشترین بدهکار", span=6)
report.table(
rows.limit(15),
columns=["code", "document_date", "total_debit", "total_credit"],
formats={"total_debit": "currency", "total_credit": "currency"},
title="آخرین فاکتورها",
span=6
)
</pre>
اگر داده فاکتور داشته باشید، KPI، نمودار و جدول را در پیش‌نمایش می‌بینید.
== ۴) مفاهیم پایه به زبان ساده ==
=== داده از کجا می‌آید؟ ===
شما SQL نمی‌نویسید. فقط از '''درگاه‌های مجاز''' استفاده می‌کنید:
{| class="wikitable"
! ماژول !! معنی ساده !! مثال
|-
| <code>invoices</code> || فاکتورها/اسناد فروش و مشابه || <code>invoices.all(limit=50)</code>
|-
| <code>customers</code> || مشتریان || <code>customers.all(limit=100)</code>
|-
| <code>products</code> || کالا/خدمات || <code>products.all(limit=100)</code>
|-
| <code>payments</code> || دریافت/پرداخت || <code>payments.this_month()</code>
|}
همیشه فقط دادهٔ '''همین کسب‌وکار''' برمی‌گردد؛ نمی‌توانید به کسب‌وکار دیگر دسترسی پیدا کنید.
=== نتیجه گزارش چیست؟ ===
خروجی یک '''Report Spec''' است: ساختار استاندارد شامل عنوان، کارت‌های آماری (KPI)، جدول، نمودار و تنظیمات. همین ساختار در پنل، PDF و Excel استفاده می‌شود.
=== چه چیزهایی ممنوع است؟ ===
* <code>import</code> و دسترسی به فایل/شبکه
* SQL خام و دستورات سیستم‌عامل
* تغییر <code>business_id</code> یا دور زدن امنیت
این محدودیت‌ها عمدی است تا گزارش‌نویسی امن بماند.
== ۵) بلوک‌های گزارش (report.*) ==
=== عنوان و متن ===
<pre>
report.title("گزارش فروش ماه")
report.heading("خلاصه", level=2)
report.text("این گزارش به‌صورت خودکار ساخته شده است.")
report.section("جزئیات")
</pre>
=== KPI و کارت ===
<pre>
report.kpi("تعداد", 120, format="integer")
report.kpi("مبلغ", 15000000, format="currency", hint="ریال")
report.card("وضعیت", "فعال", subtitle="تا امروز")
</pre>
=== جدول ===
<pre>
rows = invoices.all(limit=30)
report.table(
rows,
columns=["code", "document_date", "total_debit"],
formats={"total_debit": "currency"},
title="فاکتورها"
)
</pre>
=== نمودار ===
<pre>
data = rows.top(8, by="total_debit")
report.bar_chart(data, x="code", y="total_debit", title="بیشترین‌ها")
report.line_chart(data, x="code", y="total_debit", title="روند")
report.pie_chart(data, label="code", value="total_debit", title="سهم")
</pre>
=== داشبورد و چیدمان ===
<pre>
report.dashboard(columns=12)
report.kpi("A", 1, span=4)
report.kpi("B", 2, span=4)
report.kpi("C", 3, span=4)
report.row_break()
report.table(rows, span=12)
</pre>
* <code>columns</code>: شبکه ۶ یا ۱۲ یا ۲۴ ستونه
* <code>span</code>: عرض هر بلوک در شبکه
* <code>row_break()</code>: رفتن به ردیف بعد
== ۶) قالب‌بندی اعداد (جداکننده هزارگان و بیشتر) ==
=== تنظیم پیش‌فرض گزارش ===
<pre>
# سبک غربی: 1,234,567.50
report.number_format(style="western")
# سبک فارسی (جداکننده فارسی): 1٬234٬567٫50
report.number_format(style="fa")
</pre>
یا دستی:
<pre>
report.number_format(thousands_sep=",", decimal_sep=".")
</pre>
=== قالب‌های آماده ===
{| class="wikitable"
! مقدار format !! نتیجه نمونه برای ۱۲۳۴۵۶۷٫۵
|-
| <code>integer</code> || 1,234,568 (گرد شده بدون اعشار)
|-
| <code>number</code> || با جداکننده هزارگان
|-
| <code>number:2</code> || 1,234,567.50
|-
| <code>currency</code> یا <code>money</code> || 1,234,568 (پیش‌فرض بدون اعشار)
|-
| <code>currency:0</code> || 1,234,568
|-
| <code>decimal:3</code> || 1,234,567.500
|-
| <code>percent</code> || ۱۲٫۵٪ برای مقدار ۱۲٫۵
|-
| <code>raw</code> || بدون قالب (همان عدد خام)
|}
=== در KPI ===
<pre>
report.kpi("فروش", 12500000, format="currency")
report.kpi("رشد", 12.5, format="percent")
report.kpi("نرخ", 0.3567, format="number:4")
</pre>
=== در جدول (برای هر ستون) ===
<pre>
report.table(
rows,
columns=["code", "total_debit", "total_credit"],
formats={
"total_debit": "currency",
"total_credit": "currency"
}
)
</pre>
=== قالب‌بندی دستی داخل متن ===
<pre>
msg = "جمع کل: " + format_number(2500000, "currency")
report.text(msg)
# معادل:
report.text("جمع: " + numbers.format(2500000, "currency"))
</pre>
== ۷) تقویم شمسی و میلادی ==
حسابیکس دو تقویم دارد: '''جلالی (شمسی)''' و '''میلادی'''.
=== تنظیم تقویم گزارش ===
<pre>
report.calendar("jalali") # شمسی
# یا
report.calendar("gregorian") # میلادی
</pre>
با این کار:
* تاریخ‌های جدول با همان تقویم نمایش داده می‌شوند
* فیلترهای تاریخی می‌توانند با همان تقویم نوشته شوند
اگر <code>report.calendar</code> ننویسید، معمولاً همان تقویم پنل شما (هدر <code>X-Calendar-Type</code>) استفاده می‌شود.
=== قالب‌بندی تاریخ ===
<pre>
report.calendar("jalali")
report.kpi("امروز", format_date("2026-07-20"))
report.text(dates.format("2026-07-20", calendar="gregorian"))
</pre>
=== فیلتر با تاریخ شمسی ===
<pre>
report.calendar("jalali")
rows = invoices.filter(
from_date="1404/01/01",
to_date="1404/12/29",
limit=200
)
report.table(rows, columns=["code", "document_date", "total_debit"], formats={"total_debit": "currency"})
</pre>
{| class="wikitable" style="background-color:#e8f5e9; border-left:4px solid #2e7d32;"
|-
| اگر سال بین حدود ۱۲۰۰ تا ۱۵۰۰ باشد و با <code>/</code> نوشته شود، سیستم آن را '''شمسی''' می‌فهمد و برای جستجو به میلادی تبدیل می‌کند.
|}
== ۸) کار با جدول داده (HTable) ==
وقتی از <code>invoices.all()</code> یا مشابه استفاده می‌کنید، یک جدول در حافظه می‌گیرید:
<pre>
rows = invoices.all(limit=100)
n = rows.count()
s = rows.sum("total_debit")
avg = rows.avg("total_debit")
top10 = rows.top(10, by="total_debit")
few = rows.limit(20)
sorted_rows = rows.sort("document_date", desc=True)
</pre>
ساخت جدول دستی:
<pre>
demo = table([
{"name": "علی", "amount": 1000},
{"name": "سارا", "amount": 2500}
])
report.table(demo, formats={"amount": "currency"})
</pre>
== ۹) مثال‌های کاربردی بیشتر ==
=== مثال ۱: فروش ماه جاری ===
<pre>
report.calendar("jalali")
report.number_format(style="western")
report.title("فروش این ماه")
rows = invoices.this_month(limit=500)
report.kpi("تعداد", rows.count(), format="integer")
report.kpi("جمع بدهکار", rows.sum("total_debit"), format="currency")
report.table(
rows.limit(50),
columns=["code", "document_date", "total_debit"],
formats={"total_debit": "currency"}
)
</pre>
=== مثال ۲: مقایسه ماه قبل ===
<pre>
report.calendar("jalali")
cur = invoices.this_month(limit=1000)
prev = invoices.last_month(limit=1000)
report.kpi("این ماه", cur.sum("total_debit"), format="currency")
report.kpi("ماه قبل", prev.sum("total_debit"), format="currency")
</pre>
=== مثال ۳: فیلتر سفارشی ===
<pre>
report.calendar("jalali")
rows = invoices.filter(
document_type="invoice_sales",
from_date="1404/04/01",
to_date="1404/04/31",
limit=300
)
report.bar_chart(rows.top(10, by="total_debit"), x="code", y="total_debit", title="۱۰ فاکتور برتر تیر")
</pre>
=== مثال ۴: داشبورد دو ستونه ===
<pre>
report.dashboard(columns=12)
report.title("نمای کلی")
rows = invoices.all(limit=80)
report.kpi("تعداد", rows.count(), format="integer", span=6)
report.kpi("جمع", rows.sum("total_debit"), format="currency", span=6)
report.row_break()
report.pie_chart(rows.top(5, by="total_debit"), label="code", value="total_debit", title="سهم ۵ تای برتر", span=6)
report.table(rows.limit(10), columns=["code", "total_debit"], formats={"total_debit": "currency"}, span=6)
</pre>
=== مثال ۵: پارامتر ورودی ===
در کادر پارامترها:
<pre>
{
"min_amount": 1000000
}
</pre>
در اسکریپت:
<pre>
min_amount = param["min_amount"]
rows = invoices.all(limit=200)
# فقط نمایش مبلغ حداقل (نمونه ساده با فیلتر جدول)
report.kpi("آستانه", min_amount, format="currency")
report.table(rows.limit(30), columns=["code", "total_debit"], formats={"total_debit": "currency"})
</pre>
== ۱۰) ذخیره، انتشار و خروجی ==
=== ذخیره و انتشار ===
# '''ذخیره''': گزارش به‌صورت پیش‌نویس نگه داشته می‌شود.
# '''انتشار''': گزارش برای استفاده/اجرای بعدی در وضعیت منتشرشده قرار می‌گیرد.
# '''بایگانی''': گزارش از فهرست فعال خارج می‌شود (حذف نرم).
=== PDF ===
از دکمه PDF در استودیو (نیازمند <code>reports.export</code>). خروجی همان Spec را به PDF امن تبدیل می‌کند.
=== Excel ===
از دکمه Excel. معمولاً شامل:
* شیت خلاصه (KPIها)
* یک شیت برای هر جدول
* شیت داده نمودارها
== ۱۱) کمک گرفتن از هوش مصنوعی ==
# در استودیو روی '''از AI بساز''' کلیک کنید.
# درخواست خود را بنویسید؛ مثلاً: «گزارش فروش ماه با KPI و نمودار میله‌ای».
# AI با ابزارهای HScript و مستندات کمک می‌کند.
# در منوی پیام پاسخ، می‌توانید '''اعمال به استودیو HScript''' را بزنید تا اسکریپت مستقیم وارد ادیتور شود.
# همیشه قبل از اتکا، '''اجرا''' و در صورت نیاز '''اعتبارسنجی''' کنید.
== ۱۲) خطاهای رایج و راه حل ===
{| class="wikitable"
! مشکل !! علت محتمل !! راه حل
|-
| خطای نحوی || پرانتز/کوتیشن ناقص یا دستور چندخطی نامعتبر || پیام خطا خط را نشان می‌دهد؛ ساده کنید و دوباره اعتبارسنجی کنید
|-
| داده خالی || بازه تاریخ یا نوع سند اشتباه || از <code>all</code> یا بازه وسیع‌تر شروع کنید
|-
| تاریخ اشتباه دیده می‌شود || تقویم تنظیم نشده || <code>report.calendar("jalali")</code> بگذارید
|-
| عدد بدون جداکننده || قالب مشخص نشده || <code>format="currency"</code> یا <code>formats={...}</code>
|-
| دسترسی ندارید || مجوز گزارش || از مدیر دسترسی <code>view/export</code> بگیرید
|-
| سقف گزارش پر شده || پلن رایگان || افزونه را فعال کنید یا گزارش‌های قدیمی را حذف/بایگانی کنید
|}
== ۱۳) نکات امنیتی و محدودیت‌ها (به زبان ساده) ==
* اسکریپت فقط داده همان کسب‌وکار را می‌بیند.
* تعداد فراخوانی داده، حجم خروجی و زمان اجرا سقف دارد.
* تعداد اجرای زیاد در دقیقه محدود است (برای جلوگیری از فشار به سرور).
* کد خطرناک (فایل، شبکه، import) اجرا نمی‌شود.
== ۱۴) واژه‌نامه کوتاه ==
{| class="wikitable"
! واژه !! معنی
|-
| HScript || زبان امن گزارش‌نویسی حسابیکس
|-
| Spec || ساختار خروجی گزارش (JSON)
|-
| KPI || کارت آماری (عدد مهم)
|-
| Gateway || درگاه مجاز دریافت داده
|-
| Studio || صفحه نوشتن و اجرای اسکریپت
|-
| span || عرض بلوک در داشبورد
|-
| format || قالب نمایش عدد/مقدار
|}
== ۱۵) چک‌لیست شروع سریع ==
# منوی '''گزارش‌ساز اسکریپتی''' را باز کنید
# گزارش جدید بسازید
# اسکریپت نمونه را اجرا کنید
# <code>report.calendar</code> و <code>report.number_format</code> را مطابق نیاز تنظیم کنید
# جدول/نمودار را شخصی‌سازی کنید
# ذخیره و در صورت نیاز PDF/Excel بگیرید
# برای گزارش‌های پیچیده‌تر از AI کمک بگیرید و نتیجه را بازبینی کنید
{| class="wikitable" style="background-color:#e3f2fd; border-left:4px solid #1565c0;"
|-
| '''جمع‌بندی:''' HScript ابزاری برای ساخت گزارش سفارشی است؛ داده را از درگاه‌های امن می‌گیرد، با دستورات ساده محاسبه می‌کند، و خروجی را به‌صورت داشبورد، PDF یا Excel نشان می‌دهد. با تنظیم تقویم و قالب عدد، گزارش‌ها دقیقاً به سبک کسب‌وکار شما نمایش داده می‌شوند.
|}