پرش به مطلب اصلی

ساخت یک گزارش

هدف​

یک قالب طراحی‌شده را به گزارشی تبدیل کنید که کاربران بتوانند اجرا کنند: چاپ برای یک رکورد («این فاکتور را چاپ کن») یا روی یک فهرست کامل، از نوار فرمان، در همان برنامه‌ای که باز دارند.

یک گزارش از چه ساخته شده است​

دو نیمه، که سرِ یک نام به هم می‌رسند.

  • قالب — صفحه: نوارها، جدول‌ها، لوگو، واترمارک. در طراح گرافیکی طراحی و به‌صورت JSON صادر می‌شود، و شما همان را اینجا می‌چسبانید.
  • مجموعه‌داده‌ها — سطرهایی که قالب را پر می‌کنند. هرکدام یا یک کوئری ذخیره‌شده را نام می‌برد یا کوئری خودش را دارد، زیر نامی که قالب به آن ارجاع می‌دهد.

گزارش هیچ داده‌ای از آنِ خودش ندارد. هر چیزی که چاپ می‌کند یک کوئری است که هنگام فشردن «چاپ» اجرا می‌شود، با مجوزهای همان شخص. دو نفر که یک گزارش را چاپ می‌کنند، هرکدام رکوردهایی را می‌بینند که اجازه دارند — گزارش یک چیدمان روی داده‌های شماست، نه راهی برای دور زدنِ اینکه چه کسی چه چیزی را می‌تواند بخواند.

پیش‌نیازها​

  • به‌عنوان سازنده وارد شده‌اید و راه‌حل و محیطی برگزیده‌اید.
  • کوئری‌های ذخیره‌شده‌ای که گزارش به کار می‌برد از پیش وجود دارند (یا کوئری را درجا می‌نویسید).
  • قالبی دارید که از طراح صادر شده است.

گام‌ها​

  1. راه‌حل خود را باز کنید و گزارش‌ها را برگزینید.
  2. جدید را بزنید و نام نمایشی بدهید — نام منطقی خودش پر می‌شود.
  3. مجموعه‌داده‌ها را پر کنید. برای هرکدام:
    • نام — آنچه قالب این سطرها را با آن صدا می‌زند. تکرارکنندهٔ قالب همان را نام می‌برد، پس این دو باید دقیقاً یکی باشند.
    • کوئری ذخیره‌شده — پرسشی که آن را پر می‌کند، که به‌جای تایپ شدن از میان کوئری‌های ذخیره‌شدهٔ محیط انتخاب می‌شود. هر گزینه می‌گوید کوئری کدام جدول را می‌خواند، چون نام نمایشی به‌ندرت دو کوئری را از هم جدا می‌کند. نخست پرسش را بنویسید — «ذخیرهٔ یک کوئری».
    • فیلد رکورد — اختیاری؛ پایین‌تر ببینید.
  4. JSON قالب را بچسبانید.
  5. ذخیره را بزنید. پلتفرم می‌سنجد که گزارش سالم باشد، هر کوئری کوئریِ معتبری باشد، و هرکدام واقعاً اینجا اجرا شود — هر فیلد، پیوند و سنجه در برابر جدول‌های واقعی همین محیط. فیلدِ غلط‌نوشته همین حالا رد می‌شود، نه آنکه کسی هنگام فشردن «چاپ» کشفش کند.

مجموعه‌دادهٔ اول اصلی است. جدول آن همان است که گزارش دربارهٔ آن است: تعیین می‌کند کدام رکوردها و کدام فهرست‌ها گزارش را روی نوار فرمانشان پیشنهاد دهند، و فیلتر جاریِ یک فهرست به همان داده می‌شود.

چاپ یک رکورد​

روی یک مجموعه‌داده فیلد رکورد را تعیین کنید تا گزارش برای یک رکورد تنها چاپ شود.

  • روی مجموعه‌دادهٔ اصلی معمولاً id است — «همین فاکتور».
  • روی مجموعه‌دادهٔ فرزند، لوکاپِ بازگشت به والد است — par_invoiceid روی سطرها، تا چاپِ فاکتور ۴۲ سطرهای فاکتور ۴۲ را چاپ کند و نه دیگری را.
  • خالی بگذارید و آن مجموعه‌داده از اینکه از روی کدام رکورد چاپ کرده‌اید اثر نمی‌گیرد. همین است که یک گزارش می‌تواند یک فاکتور را کنار جدولِ نرخ‌های ارز این ماه چاپ کند.

اجرای گزارش​

گزارش آگاهانه باز می‌شود — هیچ دکمه‌ای صرفاً به این دلیل که گزارشی نام جدولی را برده روی آن جدول ظاهر نمی‌شود. سه راه ورود:

  • از پیمایش برنامه، اگر سازنده گزارش را آنجا گذاشته باشد. روی کل جدول باز می‌شود.
  • از دستوری که سازنده کشیده روی یک فرم یا نما، با رفتار اجرای یک گزارش. اگر روی یک رکورد باز فشرده شود همان رکورد را چاپ می‌کند؛ اگر روی یک فهرست فشرده شود روی کل جدول است. کاری کنید دکمه کاری انجام دهد را ببینید.
  • از ابزارک یک داشبورد که آن را نام می‌برد.

در هر سه حالت گزارش همچون صفحه‌ای مستقل باز می‌شود، پیمایش برنامه کنارش می‌ماند و نشانی‌اش در نوار نشانی است — پس گزارشی که می‌بینید را می‌توان تازه‌سازی کرد، نشانک گذاشت یا برای همکاری فرستاد. گزارشی که یک دستور باز کرده باشد دکمهٔ → در ابتدای نوار ابزار نمایشگر دارد که به صفحه‌ای بازمی‌گردد که دکمه در آن فشرده شده است.

جست‌وجو و پالایهٔ فهرست همراهش نمی‌آیند. گزارش با نام خودش نشانی داده می‌شود و پالایه چیزی نیست که یک نشانی بتواند حملش کند؛ برای گزارش‌گرفتن از مجموعه‌ای محدودتر، پالایه را به خودِ گزارش بدهید.

خواندن گزارش روی صفحه​

نمایشگر با یک صفحه در هر بار باز می‌شود، با بزرگ‌نمایی‌ای که یک صفحهٔ کامل جا شود، و چاپ در انتها. چهار کنترل آنچه را می‌بینید عوض می‌کنند:

  • صفحه‌ها — یک صفحه با صفحه‌گردان (شیوهٔ خواندن گزارش) یا همهٔ صفحه‌ها با پیمایش (شیوهٔ وارسی پیش از چاپ). در همهٔ صفحه‌ها صفحه‌گردان می‌رود، چون پاسخ دومی به «کجا هستم» می‌شد.
  • بزرگ‌نمایی — اندازهٔ صفحه، اندازهٔ عرض یا اندازهٔ واقعی. اندازه‌کردن در هر دو جهت است: صفحه‌ای باریک‌تر از پنجره‌تان بزرگ می‌شود تا آن را پر کند، چون فرمان برای همین نام گرفته است. اگر ۱:۱ می‌خواهید، اندازهٔ واقعی پاسخ آن است.
  • تمام‌صفحه — پنجره را با گزارش پر می‌کند. Esc از آن بیرون می‌آید. گزارش درون برنامه می‌ماند، پس پیام‌ها و بقیهٔ محصول همچنان کار می‌کنند.
  • چاپ.

چاپ همهٔ صفحه‌ها را در اندازهٔ کامل می‌گیرد، نه صفحهٔ روی نمایش و نه با بزرگ‌نمایی‌ای که با آن می‌خواندید، و هیچ‌کدام از دکمه‌های خودِ نمایشگر را. کاغذ همان اندازه‌ای است که گزارش برایش طراحی شده — گزارش A4 روی A4 چاپ می‌شود، لبه تا لبه، بدون سرصفحه، پاصفحه، نشانی یا شمارهٔ صفحهٔ مرورگر در حاشیه، چون حاشیه‌ای برای چاپ آن‌ها نمانده است.

یادداشت

اگر سرصفحه و پاصفحه را در کادر چاپ خودِ مرورگر روشن کرده باشید، باز هم می‌آیند — آن تنظیم از آنِ شماست و پلتفرم آن را نادیده نمی‌گیرد. «Headers and footers» را همان‌جا خاموش کنید.

گزارش، متن است نه تصویری از متن​

می‌توانید هر متنی را در گزارش انتخاب و کپی کنید، و جست‌وجوی مرورگر (Ctrl+F / ⌘F) در صفحه‌ای که باز است جست‌وجو می‌کند. صفحه‌خوان هم گزارش را می‌خواند، نه اینکه اعلام کند «تصویر». هیچ‌کدام از این‌ها تنظیم نیست: صفحهٔ گزارش، متنِ معمولی روی صفحه است — و همین است که باعث می‌شود سطرهای فارسی و عربی درست نمایش داده شوند وقتی کد کالا یا مبلغی لاتین در میانشان هست؛ ترتیب این آمیختگی را خودِ مرورگر تعیین می‌کند.

جست‌وجو صفحه‌هایی را می‌گردد که روی صفحه‌اند. در حالت یک صفحه یعنی همان صفحه‌ای که می‌خوانید؛ برای جست‌وجو در کل گزارش به همهٔ صفحه‌ها بروید.

تاریخ‌ها، عددها و ارقام​

گزارش تاریخ‌ها را با همان تقویم و الگویی چاپ می‌کند که شبکهٔ کنارش، و عددها را با همان ارقام — ارقام فارسی و تاریخ جلالی برای مستأجر فارسی. این را برای هر گزارش تنظیم نمی‌کنید: از تنظیمات ← تقویم و زبان مستأجر می‌آید، پس گزارش نمی‌تواند از بقیهٔ محصول فاصله بگیرد.

جابه‌جایی میان محیط‌ها​

گزارش یک مؤلفهٔ راه‌حل است که زیر جدولی که دربارهٔ آن است بایگانی می‌شود. آن را از فهرست مدیریت مؤلفه‌های همان جدول به راه‌حل خود بیفزایید تا همراه بقیه صادر و وارد شود — از جمله قالبش، که درونِ گزارش جابه‌جا می‌شود نه کنارش.

کوئری‌های ذخیره‌شده‌اش هم می‌روند و پیش از آن وارد می‌شوند: گزارشی که کوئری‌ای را نام ببرد که محیط مقصد ندارد رد می‌شود، و این شکستِ صادقانه است در برابر گزارشی که وارد می‌شود و بعد هیچ چاپ نمی‌کند.

عیب‌یابی​

  • «قالب، JSON معتبری نیست.» — چسباندن ناقص بوده یا نویسه‌ای اضافه دارد. کادر آنچه را می‌نویسید بازقالب‌بندی نمی‌کند، پس آنچه می‌بینید همان است که فرستاده شد.
  • «یک گزارش دست‌کم به یک مجموعه‌داده نیاز دارد.» — یک سطر مجموعه‌داده برای شمرده‌شدن هم نام می‌خواهد هم کوئری ذخیره‌شده؛ سطر نیمه‌پر نادیده گرفته می‌شود.
  • «مجموعه‌دادهٔ rows باید دقیقاً یکی از savedQuery یا query را نام ببرد.» — هر دو را داده‌اید، یا هیچ‌کدام را.
  • «… کوئری ذخیره‌شدهٔ x را نام می‌برد که در این محیط وجود ندارد.» — املا را بسنجید، یا کوئری را به راه‌حل بیفزایید تا جابه‌جا شود.
  • «فیلد ناشناخته …» — کوئری فیلدی را نام برده که روی جدولش نیست. کوئری را درست کنید، نه گزارش را.
  • گزارش چاپ می‌شود ولی صفحه خالی است. — تکرارکنندهٔ قالب مجموعه‌داده‌ای را نام می‌برد که گزارش تعریف نکرده است. نام‌ها باید دقیقاً یکی باشند.
  • «قالب این گزارش صفحه‌بندی نشد.» — موتور نتوانست از آن صفحه بسازد. دوباره از طراح صادر کنید؛ قالبی که دستی ویرایش شود به‌آسانی می‌شکند.
  • روی رکورد هیچ فرمان گزارشی پیدا نمی‌شود. — هیچ چیز چنین فرمانی نمی‌سازد. دکمه‌ای بکشید و رفتار اجرای یک گزارش را به آن بدهید، یا گزارش را در پیمایش برنامه بگذارید.
  • گزارش باز شد اما همهٔ رکوردها را نشان می‌دهد. — از روی یک فهرست اجرا شده، یا از روی رکوردی که هرگز ذخیره نشده. فقط رکورد ذخیره‌شدهٔ باز گزارش را محدود می‌کند.

سناریوهای مرتبط​