إنتقل إلى المحتوى الرئيسي

تصميم تقرير

الهدف​

رتّب التقرير داخل المنصّة — على لوحة، بجوار الاستعلامات التي تملؤه — بدل رسمه في أداة منفصلة ثم لصق JSON هنا مرة أخرى.

أين يُفتح​

افتح حلّك، واختر التقارير، وحدّد تقريرًا، ثم اضغط تصميم. تُفتح اللوحة في مكانها، تحت مسار التنقّل نفسه ومنتقيَي البيئة والحلّ اللذين كنت تعمل فيهما بالفعل. ليست تطبيقًا ثانيًا ولا تبويبًا جديدًا: تصميم التقرير عملُ مُنشئ، وهذه هي بوّابة المُنشئ.

تصميم وتحرير أمران اثنان لأنهما يملكان نصفين مختلفين:

  • تصميم هو التخطيط — الصفحة وأشرطتها وجداولها وشعارها.
  • تحرير هو كل ما لا تستطيع اللوحة معرفته — أي الاستعلامات المحفوظة تملأ القالب، وأي حقل يضيّق كلًّا منها حين يطبع أحدهم سجلًّا واحدًا.

ستستخدم كليهما في معظم التقارير، ولا يطمس أيٌّ منهما نصف الآخر.

المتطلّبات المسبقة​

  • أنت مسجَّل الدخول كمُنشئ، مع اختيار حلّ وبيئة.
  • التقرير موجود بالفعل. أنشئه أولًا — انظر إنشاء تقرير — ثم صمّمه.

الخطوات​

  1. افتح حلّك واختر التقارير.
  2. حدّد التقرير واضغط تصميم.
  3. إذا لم يُصمَّم التقرير قط، تُفتح اللوحة وعليها لوحة Styles وحدها — الألوان وأنماط النص التي يبدأ منها التصميم، ولا تُطبع أبدًا. استخدم إدراج ← صفحة تقرير لإسقاط صفحة، ثم رتّب محتواك داخلها.
  4. ارسم التقرير: أشرطة للترويسة والتذييل، ومكرّر للصفوف، ونصوص مرتبطة بحقول مجموعة بياناتك. تعمل اللوحة الجانبية ولوحة الطبقات كما كانت؛ أما المفتّش فصار له لسانان — انظر أدناه.
  5. اضغط حفظ.

ابدأ من عيّنة​

إدراج ← تقارير العيّنة يُسقط صفحة تقرير كاملة على اللوحة إلى جانب ما رسمته سابقًا — لا يُستبدل شيء — ويُحمّل بيانات عيّنتها في محرّر بيانات التقرير، فتظهر المعاينة فورًا.

القائمة نصفان، وكلّ نصف يجيب عن سؤال مختلف.

الخمسة الأولى مستندات مكتملة — فاتورة، مبيعات، قائمة جهات اتصال، ملخّص، لوحة معلومات — وهي هناك لتُظهر الشكل الذي يمكن أن يبدو عليه تقرير.

والأربعة التالية يُظهر كلّ منها ميزة واحدة، وهو ما تحتاجه حين تعرف الأثر المطلوب ولا تعرف الحركة التي تحقّقه. يحمل كلّ منها في تذييل صفحته سطرًا يقول أين تنظر:

العيّنةما تُظهره
التنسيق (صفوف مخطّطة + تنسيق شرطي)صفوف مخطّطة، ولون وسماكة يتغيّران فوق عتبة، ولون للحالة، وعلامة تظهر فقط على الصفوف المعنيّة
العلامة المائيةختم DRAFT فوق كلّ صفحة، وكتلة ضبط مستند في الزاوية
رأس وتذييل متكرّرانترويسة وتذييل على كلّ ورقة، وعناوين أعمدة تعود أينما استمر الجدول، ومجموع لكلّ ورقة إلى جانب مجموع الجدول كلّه
الرسوم البيانيةرسم أعمدة ورسم خطّي، وجدول يقرأ مجموعة البيانات نفسها تحتهما

افتح واحدة، واختر شريطًا أو خليّة، واقرأ تعبيراتها في المفتّش أو في صفحة الكود. هذه رسوم عادية — حرّرها، واحتفظ بالنصف الذي أردته، واحذف الباقي.

هذه الأربع مرتبطة بجدول حقيقي

تقرأ خلاياها row.par_name وrow.par_amount وrow.par_currency وrow.par_status — أعمدة جدول النفقات النموذجي — لا أسماء مخترعة. وهذا ما يتيح تثبيت الرسم نفسه تقريرًا عاملًا بصفوف حقيقية، بدل أن يعاين جيّدًا ويُطبع فارغًا. وجّهها إلى جدولك بتحرير مجموعة البيانات والارتباطات؛ الأساليب كما هي.

انسخ قاعدة تخطيط الصفوف

التخطيط هو الخلفية على إطار صفّ المكرّر، ويقرأ rowIndex % 2 == 1 ? '#f8fafc' : '' — رقم الصف، لا حقلًا. قراءة قيمة تبدو مطابقة تمامًا إلى أن يعيد أحدهم ترتيب الجدول.

الاختبار المتسلسل يحتاج أقواسًا

a ? b : c ? d : e لا يُحلَّل. اكتب row.status == 'Approved' ? '#059669' : (row.status == 'Rejected' ? '#be123c' : '#b45309'). تعبير لا يمكن تحليله يترك الخاصية كما رسمتها تمامًا، فتكون العلامة لونًا لا يتغيّر أبدًا لا خطأً.

التوليد بالذكاء الاصطناعي​

التوليد بالذكاء الاصطناعي يصف صفحة بالكلمات ويرسمها. صِف ما تريد — الصندوق كبير عمدًا، فالصفحة التي تستحق التوليد تحتاج إلى فقرة — واضغط «ولّد» أو Ctrl/⌘+Enter. ما يعود يُضاف إلى ما على اللوحة؛ لا يُستبدل شيء مما رسمته. للبدء من جديد، امسح اللوحة أولًا ثم ولّد.

وأيًّا كان ما يعود، يُتحقّق منه قبل أن يظهر شيء — فكلّ شكل يجب أن يكون شكلًا يقدر هذا المحرّر على بنائه — فردّ يسمّي شكلًا لا وجود له لا يضع صندوقًا مكسورًا في صفحتك.

يصحّح نفسه قبل أن يستسلم. إذا لم يعد شيء صالح للاستعمال، تعيد المنصّة الردّ إلى النموذج مع تسمية الخلل، ولا تطلب منك إصلاح خطأ لم تكتبه أنت. يحاول حتّى ثلاث مرّات، ويقول الزرّ «جارٍ التصحيح… المحاولة ٢ من ٣» أثناء ذلك.

الردّ الصالح جزئيًا يُحفظ ولا يُطرح. الأشكال التي أمكن رسمها على اللوحة، ويبقى الحوار مفتوحًا يسرد ما تُرِك — فردّ من عشرة أشكال فيه اثنان غير صالحين يصل ثمانية أشكال وجملتين، لا ثمانية وصمتًا. والنتيجة الجزئية التي لا تُخبَر بها تقرأها على أنّ وصفك أنت طلب أقلّ.

التقرير المولَّد بسيط ما لم تطلب ألوانًا: نص داكن على أبيض، وشريط رمادي فاتح لرأس الجدول، وزوايا قائمة. قل «بألوان علامتنا» أو «بترويسة ملوّنة» لتحصل على أكثر.

أضف مجموعة البيانات أولًا. تُبلَّغ مجموعات بيانات هذا التصميم وحقول كل صفّ فيها إلى الذكاء الاصطناعي، فالتقرير المولَّد بعد إضافة مجموعة بيانات يتكرّر عليها ويعرض حقولها الحقيقية. وإن وُلِّد قبل ذلك فعليه أن يخمّن اسم مجموعة البيانات، وتقول النافذة أيّ اسم خمّن.

أنت تصف التصميم فقط، لا أكثر. أيُ نموذج ذكاء اصطناعي يجيب أمرٌ يهيّئه المسؤول مرّة واحدة للمنصّة كلّها — لا مفتاح تلصقه ولا مزوّد تختاره.

إن لم يكن هناك زرّ للذكاء الاصطناعي، فهذه المنصّة بلا ذكاء اصطناعي مهيّأ. اطلب من المسؤول؛ فهو إعداد على الخادم، لا شيء يملك الصانع تشغيله.

يقول مربع الحوار ما الذي سيُبلَّغ به الذكاء الاصطناعي قبل أن تطلب. يسمّي مجموعات البيانات التي يُبلَّغ بها بالأسماء التي أعطيتها (items أو expenses، كلاهما يصلح)، أو ينبّه إلى أن التقرير لا يحتوي على أيٍّ منها بعد. أضف مجموعة البيانات أولًا: من دونها يخمّن الذكاء الاصطناعي اسمًا وتظهر معاينة التقرير فارغة.

غيّرت طريقة عرض مجموعة بيانات؟ عد إلى المصمّم. حين تضيف عمودًا إلى طريقة العرض في علامة تبويب أخرى، يقرأ المصمّم طريقة العرض من جديد عند عودتك، فيُعرض العمود الجديد للربط ويصل إلى الذكاء الاصطناعي ويظهر في المعاينة. يُطبع مجموع عمود لا تحدّده طريقة العرض فارغًا، فأضف العمود إلى طريقة العرض لا إلى التقرير وحده.

لسانا المفتّش​

للوحة الخصائص لسانان، يجيب كلٌّ منهما عن سؤال مختلف:

  • الرسم — ما هو الكائن: أين يجلس، وما حجمه، وتعبئته وحدّه ونصّه.
  • التقرير — ما يعنيه الكائن للتقرير: أن هذا الإطار هو الصفحة، أو شريط ترويسة، أو مكرِّر، وبأي شيء يرتبط نصّ أو صورة.

نقطة على لسان التقرير تعني أن الكائن المحدَّد جزء من التقرير بالفعل — الصفحة، أو شريط، أو نص مرتبط — فتراه دون فتح اللسان. وأيّ لسان تتركه مفتوحًا يبقى مفتوحًا وأنت تحدّد كائنات أخرى.

وبعض الكائنات لا شيء لها على لسان التقرير: فلا يكون الصفحة أو شريطًا إلا إطار، ولا يرتبط بالبيانات إلا نص أو صورة. واللسان يقول ذلك بدل أن يُفتح فارغًا.

يفعل الحفظ أمرين معًا، وهذا هو الجزء الجدير بالفهم: فهو يترجم ما رسمته إلى القالب الذي يُطبع، ويخزّن رسمك إلى جانبه. لهذا يمكنك الضغط على تصميم غدًا فتستعيد تخطيطك أنت، لا إعادة بناء له — فالرسم محفوظ، لا مخرجاته وحدها.

تصميم صفحة واحد، مهما بلغت الأوراق المطبوعة​

تصميمُ الصفحة يُصفَّح: يتدفق المتن على ما يلزمه المحتوى من أوراق، ويُعاد رسم ترويسة الصفحة وتذييلها أعلى كل ورقة وأسفلها. فقائمة فواتير من مئة صف هي تصميم صفحة واحد وأربع أوراق مطبوعة.

عدّة تصاميم صفحات في تقرير واحد — الأقسام​

ارسم إطار صفحة تقرير ثانيًا على اللوحة لتحصل على قسم: غلافٌ بتخطيط، ومتنٌ بتخطيط آخر، وشروطٌ وأحكام في الظهر. كل إطار مُعلَّم كصفحة تقرير هو قسم، بالترتيب الذي تجلس به على اللوحة، وكل قسم يبدأ في ورقته الخاصة.

ولكل قسم هوامشه وترويسته وتذييله وترويسته المطبوعة وعلامته المائية — غلافٌ بلا ترويسة ولا رقم صفحة، ومتنٌ يملك الاثنين، في تقرير واحد. والقسم الذي لا شيء فيه لا يُطبع أصلًا، لا ورقةً بيضاء.

وأرقام الصفحات تعدّ التقرير كله لا القسم: فالغلاف هو الصفحة ١ من n، وn يعدّ كل ورقة يأخذها المتن والشروط أيضًا. فمن بيده ورقة مطبوعة يريد «٣ من ٩».

ملاحظة

تُطبع كل الأقسام على ورق بالحجم نفسه، مأخوذًا من إطار الصفحة الأول. فللطابعة درجٌ واحد، وتقريرٌ يخلط A4 بـ A5 لا يُطبع صحيحًا في أي مكان. وإن غيّرتَ حجم أحد الإطارات قال لك المصمّم ذلك عند الحفظ، ثم طبع كل شيء على ورق الإطار الأول. أما الهوامش فلك أن تغيّرها في كل قسم؛ وحجم الورقة لا.

القسم يعني «من هنا يختلف شكل الصفحة». وحين لا تريد إلا ورقة جديدة بالتصميم نفسه، فتلك هي العلامة أدناه.

بدء منطقة في صفحة جديدة​

تكسر الصفحاتُ حين لا يتّسع البلوك التالي. وهذا جواب «لا تقسم هذا الصف»، وليس جوابًا عن «هذا الجزء يبدأ في صفحته الخاصة»، إذ لا صلة لذلك بمقدار ما بقي من فراغ.

اختر المنطقة — شريطًا أو مكرِّرًا أو حاوية أعمدة أو رسمًا — وأشِّر على يبدأ في صفحة جديدة في لسان التقرير بلوحة الخصائص. فينكسر التقرير قبلها مباشرة، امتلأت الصفحة أم لم تمتلئ. استعمله لدفعة مطالبات لكل عميل، أو حيثما أردتَ ورقة جديدة بتصميم الصفحة نفسه. أما حين ينبغي أن تختلف الصفحة نفسها، فارسم إطار صفحة ثانيًا واستعمل قسمًا بدلًا من ذلك.

تفصيلان يستحقّان المعرفة:

  • لا يترك ورقة بيضاء أبدًا. فالكسر في أعلى صفحة فارغة أصلًا لا يفعل شيئًا، فالتأشير عليه في أول منطقة من التقرير — أو في منطقتين متتاليتين — لا يكلّفك ورقًا.
  • على شريط يتكرّر بوصفه ترويسة جدول، يقع الكسر قبل الترويسة، وهو المطلوب: تُفتح الصفحة الجديدة بعناوين الأعمدة وتتبعها الصفوف.

ولا تلجأ إليه لتجعل شريطًا يقع في موضع مرتّب — فحشو الشريط بفراغ حتى يفيض يبدو صحيحًا اليوم وينكسر لحظة تتغيّر البيانات. والتأشير هو الطريقة الباقية لقول ذلك.

التكرار على مجموعة بيانات​

يرسم إطار المكرِّر محتواه مرة لكل صف. علّم الإطار كمكرِّر على لسان التقرير في لوحة الخصائص، ثم اختر في التكرار على ما الذي يمشي عليه.

«التكرار على» قائمة منسدلة بمجموعات بيانات التقرير نفسه — rows وinvoices — فلا اسم يُحفظ ولا اسم يُخطئ في هجائه. وإن لم تكن المجموعة التي تريدها مسرودة، أضِفها تحت تحرير في درج التقارير فتظهر هنا.

وكونها قائمة لا مربعًا تكتب فيه أمرٌ مقصود: المكرِّر يمشي على مجموعة بيانات كاملة، فسؤال «أيّها» له من الأجوبة بعدد مجموعات التقرير تمامًا. أما تضييق الصفوف — المطالبات المعتمدة وحدها مثلًا — فموضعه مجموعة البيانات نفسها، حيث يعيش الاستعلام وحيث يحصل كل شريط يقرأ تلك المجموعة على الجواب ذاته؛ وإن وضعتَه في مربع إطار واحد احتاج الشريط التالي إلى نسخته الخاصة منه.

ما الذي يعرضه نص أو صورة​

النص أو الصورة داخل المكرِّر مرتبط، ويُكتب الارتباط في المحرّر نفسه الذي تُكتب فيه كل قطعة BS Lang في المنصّة: يُكمل ما يمكنك استدعاؤه، ويعرض ما تأخذه كل دالة، ويضع خطًّا تحت الخطأ وأنت تكتب لا خانةً فارغة عند الطباعة.

في لسان التقرير من المفتّش، الارتباط قائمةٌ منسدلة بالحقول التي يمكنك الارتباط بها — فذلك ما يكونه الارتباط عادةً، والاسم الذي يُختار اسمٌ لا يُخطأ في كتابته.

وما يزيد على حقل يُكتب في صفحة الكود: حدِّد النص واضغط كتابة كود في شريط الأدوات (زر </>). تبدأ القائمة على جانبها بـما الذي يعرضه، أي الارتباط، ثم تسرد كل خاصية يمكن أن تتبع البيانات (انظر مظهر يأتي من البيانات أدناه). وفي المحرّر متّسع للعمل: إكمال تلقائي، وما تأخذه كل دالة، وخطٌّ أحمر تحت الخطأ أثناء الكتابة؛ وتَسِم القائمة كل بند بأنه مكتوب أو فيه خطأ. هناك يُكتب ‎concat('Page ', pageNumber, ' of ', pageCount)‎. وعلامة ✕ في زاويتها تعيدك إلى الرسم، وما كتبتَه يُحفظ معه حين تضغط حفظ.

وافتح العين لترى ما يمكنك كتابته. كل مربع تعبير في المنصّة يحمل واحدة، وخلفها كل ما يستطيع هذا التعبير بلوغه: الصفحة (‎pageNumber‎ و‎pageCount‎ و‎page.rows‎)، وصف المكرِّر (‎row‎ و‎rowIndex‎ و‎rows‎ و‎rowCount‎)، وأعمدة المجموعة التي يمشي عليها هذا المكرِّر، ودوالّ التجميع الخاصة بالتقرير وما تأخذه كل منها، ودوالّ اللغة نفسها. ابحث فيها، وانقر مدخلًا فيُدرَج حيث المؤشّر. وهي موجودة لأن الإكمال التلقائي لا يجيب عن «ما الموجود في هذا الصف؟» — فالإكمال يقول ما يأتي بعد ما بدأتَه، والعين تقول ما هو موجود قبل أن تبدأ.

وداخل المكرِّر تُكتب الأعمدة على هيئة row.<field> — لأن row سجلٌّ من مجموعة واحدة بالضبط، وحقلٌ من غيرها لا يُحلّ إلى شيء. وخارج المكرِّر لا وجود لـ row أصلًا، فتُخاطَب الحقول نفسها عبر مجموعتها: rows[0].total.

يُكتب عمود الجدول المرتبط تحت الاسم الذي أعطاه الاستعلام للربط. فالاستعلام المحفوظ الذي يربط العميل باسم customer يعرض أعمدته على هيئة row.customer.par_name و row.customer.par_credit_limit، وتأخذ دوال القوائم الاسم نفسه بين علامتي اقتباس: ‎sum(rows, 'customer.par_credit_limit')‎. وإن غيّرت اسم الربط في الاستعلام فعلى الربوط أن تتبعه.

وهو تعبير لا اسم حقل فحسب. ‎row.amount * 1.2‎ و ‎row.status == 'Approved' ? 'Yes' : 'No'‎ و‎concat(row.first, ' ', row.last)‎، ولمجموع كل صفحة ‎sum(page.rows, 'amount')‎ — اللغة نفسها التي تُكتب بها قاعدة العمل وارتباطات الشاشة ونصوص الحل.

أين أنتما المتاح
صفٌّ في مكرِّر‎row‎ و‎rowIndex‎ و‎rows‎ و‎rowCount‎ وكل مجموعة باسمها
ترويسة صفحة أو تذييلها‎pageNumber‎ و‎pageCount‎ و‎page.rows‎ و‎page.rowCount‎
في كل مكانالمجموعات بأسمائها، و‎data‎، والدوال التجميعية أدناه

المجاميع والمجموعات والمجموع الجاري​

إجمالي الجدول موضعه «صف الإجمالي». ارسم شريطًا تحت المكرِّر وأشِّر على صف الإجمالي للمكرِّر أعلاه في لسان التقرير. يُرسم مرة واحدة بعد آخر صف، ويرى ‎rows‎ و‎rowCount‎ لـكل مجموعة البيانات — فـ‎sum(rows, 'amount')‎ هناك هو إجمالي الجدول.

وهو رقم غير إجمالي الصفحة، الذي هو ‎sum(page.rows, 'amount')‎ في تذييل الصفحة ولا يعدّ إلا الصفوف التي حطّت على تلك الورقة. كلاهما مفيد؛ فاختر عن قصد.

المجموع الجاري في الصف نفسه: ‎sum(take(rows, rowIndex + 1), 'amount')‎.

التجميع مهمّة مجموعة البيانات. احفظ استعلامًا يجمِّع — صفًّا لكل حالة، مع عددٍ ومجموع (انظر حفظ استعلام) — وأضِفه إلى التقرير مجموعةَ بيانات ثانية من مجموعات البيانات، وكرِّر عليه كما تكرّر على أي مجموعة أخرى: كل صف يرسمه مجموعةٌ معدودة ومجموعة سلفًا، وصفُّ مجموعٍ تحته يجمع المجموعات. ولا يمكن أن يقع مكرِّر داخل صف مكرِّر آخر، فلا يسرد التقرير صفوف كل مجموعة تحت عنوان لها.

الوصول إلى مجموعة بيانات ثانية يكون بـ‎lookup(regions, 'code', row.region).manager‎.

مظهر يأتي من البيانات​

حدِّد شريطًا أو خانة أو شكلًا، واضغط كتابة كود، واختر خاصية من القائمة تحت الخصائص: كلٌّ منها تأخذ تعبيرًا يُجاب لكل صف:

الخاصيةمثال
الخلفية‎row.amount > 1000 ? '#fee2e2' : ''‎
لون النص‎row.overdue ? '#b91c1c' : ''‎
ثِخَن الخط‎row.isTotal ? '700' : ''‎
يظهر عندما‎row.note != ''‎

والفارغ يعني «اتركها كما رسمتها» — لذلك يحمل الطرف الآخر في الأمثلة ‎''‎ فارغة، ولذلك لا يمكن لتشغيل هذه الميزة أن يُبيّض تقريرًا كان سليمًا. ويظهر عندما هو الاستثناء: الجواب بالنفي يزيل العنصر كلَّه، بخلفيته وحدّه.

ولتلوين صف كامل، ضع الخلفية على إطار صف المكرِّر لا على خانة بداخله.

الدوال التجميعية: sum · count · avg · min · max · pluck · round · abs · upper · lower · concat · ifEmpty · format. كلٌّ منها يأخذ قائمة، وعند الحاجة اسم العمود الذي يقرأه: ‎sum(claims, 'par_amount')‎.

‏pluck وحدها هي التي تُجيب بـقائمة بدل قيمة واحدة، وهي ما يرتبط به الرسم البياني. فالرسم يريد سلسلة، ومجموعة البيانات صفوف — فتعطيه ‎pluck(revenue, 'amount')‎ القيمَ، وتعطيه ‎pluck(revenue, 'month')‎ التسميات بجانبها، وكلتاهما من مجموعة واحدة فلا تتزحزح إحداهما صفًّا عن الأخرى.

مخطّط​

إدراج ← مخطّط أعمدة أو مخطّط خطّي يضع مخطّطًا على الصفحة تحت منتصف عرضك: إطارًا يرسم فيه محرّك التقارير، مع عنوان. لا شيء فيه يُرسم باليد — فالمقياس والتدريجات والتسميات تُستخرج من البيانات في كل تشغيل للتقرير. وعلى الشاشة تعرض القائمة نفسها أنواعًا أكثر بوصفها رسومًا؛ أما التقرير فيعرض النوعين اللذين يستطيع طباعتهما.

حدِّد الإطار، واضغط كتابة كود، واملأ قيم الرسم وتسميات الرسم، كلاهما بـpluck لتخرجا متوافقتين من مجموعة بيانات واحدة: ‎pluck(bystatus, 'total')‎ و‎pluck(bystatus, 'par_status')‎. والأعمدة أو الخط، واللون، في لسان التقرير. والمعاينة والصفحة المطبوعة ترسمان المخطّط نفسه.

والمخطّط الذي لا يتّسع تحت ما قبله ينتقل إلى الورقة التالية، كأي كتلة أخرى.

الرموز الشريطية ورموز QR​

إدراج ← رمز شريطي أو إدراج ← رمز QR يضع رمزًا حقيقيًا قابلًا للمسح في الإطار الموجود وسط العرض: إذا وضعته في رأس الصفحة طُبع على كل ورقة. في علامة التبويب التقرير اضبط القيمة، والهامش الصامت (الهامش الفارغ الذي يحتاجه الماسح)، وإما طباعة القيمة تحت الأشرطة (Code 128) أو تصحيح الأخطاء (QR). يحمل Code 128 محارف ASCII القابلة للطباعة؛ ويحمل رمز QR أي نص، ومنه الروابط.

لرمز يختلف في كل صف، حدّده داخل المكرِّر، واضغط كتابة كود، واملأ قيمة الرمز الشريطي: row.par_reference. ترسم اللوحة القيمة الثابتة، لأن اللوحة لا صفوف فيها.

الورق والاتجاه​

حجم إطار الصفحة هو الورق، بالنقاط (72 في البوصة): 595 × 842 هو A4. لتغيير ورق صفحة، اكتب W وH لها؛ وأحجام الورق في قائمة الإطار ترسم إطارًا جديدًا.

للاتجاه الأفقي، أخبر الأشرطة أولًا أن تتبع الورق: اضبط القيد الأفقي لكل شريط على يسار ويمين، وكل ما يلتصق بحافته اليمنى على يمين. ثم اجعل الصفحة 842 × 595.

الهامش، في علامة التبويب التقرير للصفحة، هو المساحة التي تبقى فارغة أعلى كل ورقة وأسفلها. أما بالعرض فيُطبع كل شيء حيث رسمته. طباعة / PDF تطبع كل صفحة على ورقة بحجم الصفحة تمامًا، فلا يجد المتصفح هامشًا يضع فيه رأسه وتذييله.

تقرير بالفارسية أو العربية​

اكتب الكلمات فيجعل المصمّم النص من اليمين إلى اليسار. النص الذي كلماته فارسية أو عربية أو عبرية يُضبط من اليمين إلى اليسار ويُحاذى إلى اليمين حين تنتهي من الكتابة، وتطبعه الصفحة كذلك: النقطة أو الرقم في آخر السطر يبقى في آخره. أما النص المربوط فلا كلمات له يُستدل بها، فاضبط من اليمين إلى اليسار بنفسك في تبويب الرسم، بجانب أزرار المحاذاة. ورتّب الأعمدة من اليمين كما يقرؤها القارئ.

الأرقام والتقويم للقارئ. النص الذي تنسيقه number أو date يُكتب بلغة من يفتح التقرير وتقويمه: أرقام عربية مشرقية لقارئ يعمل بالعربية، وتاريخ هجري شمسي لمن جعل إعدادات المظهر ← التقويم لديه فارسي. المعاينة في المصمّم تتبع إعداداتك أنت، والتطبيق يتبع إعدادات كل قارئ، فيطبع التقرير نفسه ‎7,890.50‎ لواحد و‎٧٬٨٩٠٫٥٠‎ لآخر.

الرقم داخل concat يُكتب كما خُزّن، فأعطه تنسيقًا خاصًّا به: ‎concat('صفحة ', format(pageNumber, 'integer'), ' من ', format(pageCount, 'integer'))‎.

معاينة تقرير يُطبع لسجل واحد​

عندما يكون لمجموعة البيانات الأولى حقل سجل، يُطبع التقرير من سجل واحد، وتعرضه المعاينة كذلك: تأخذ الصف الأول من مجموعة البيانات الأولى على أنه السجل، وتقصر عليه كل مجموعة بيانات لها حقل سجل. تظهر الفاتورة في المعاينة على أنها الفاتورة الأولى ببنودها هي، لا ببنود الفواتير كلها.

تقرير رفعتَ له قالبًا​

التقارير المنشأة بلصق قالب ليس خلفها رسم. والضغط على تصميم في أحدها يفتح لوحة فارغة بدل محاولة إعادة بناء التخطيط من القالب.

وهذا مقصود. القالب يسجّل الأشرطة والمكرّرات والارتباطات — لا الإطارات والأدلّة والأنماط التي رتّبتها للوصول إليها — فأيّ شيء ترسمه المنصّة انطلاقًا منه سيكون تخمينًا، وحفظ ذلك التخمين يستبدل قالبك الحقيقي به. إن أردت تقريرًا مرفوعًا على اللوحة، فرتّبه مرة واحدة واحفظ؛ ومن ثَمّ تصير رحلته ذهابًا وإيابًا سليمة.

والعكس آمن: تحرير مجموعات بيانات تقرير مُصمَّم من درج التقارير يترك رسمه دون مساس.

الحفظ، وإلى أين يذهب​

هناك حفظ واحد فقط، وهو في شريط العنوان أعلى الشاشة — المكان نفسه في كل شاشة أخرى في المنتج. يكتب التقرير كمكوّن حلّ: مُطبَّق بالطبقات، مملوك لحلّك، مُتحقَّق منه، وجاهز للتصدير.

أما قائمة «ملف» الخاصة بالمصمّم فلا تظهر هنا. ففي الوضع المستقل تحفظ تلك القائمة ملف JSON على قرصك؛ وداخل المنصّة سيكون ذلك أمرًا ثانيًا يبدو أنه حفظ عملك وهو لم يفعل. ويبقى التصدير (PNG، SVG) متاحًا، لأن صورة التقرير مفيدة في الحالتين.

نقله بين البيئات​

لا شيء يتغيّر: التقرير مكوّن حلّ ويسافر كما كان دائمًا، وقالبه بداخله. ورسمك يسافر معه أيضًا، فمن يستورده يستطيع الضغط على تصميم ومتابعة تخطيطك بدل البدء من جديد.

استكشاف الأخطاء​

  • «لا يحتوي هذا التصميم على صفحة تقرير بعد.» — رسمت على اللوحة لكن ليس داخل صفحة تقرير. استخدم إدراج ← صفحة تقرير وضع محتواك فيها؛ إطار الصفحة هو ما يخبر المترجم أين يبدأ التقرير.
  • زر الحفظ باهت. — لم يتغيّر شيء منذ فتحته. ارسم شيئًا أولًا.
  • يُطبع التقرير لكن الصفحة فارغة. — المكرّر غير موجَّه إلى أي مجموعة بيانات. افتح التكرار على: تُسرد كل مجموعة يملكها هذا التقرير فعلًا. اختر واحدة، أو أضِف المفقودة تحت تحرير ثم اخترها.
  • عاد تخطيطي مختلفًا. — أنت على تقرير رُفع قالبه ولم يُصمَّم. انظر قسم تقرير رفعتَ له قالبًا أعلاه.
  • خانة فارغة وبقية التقرير سليمة. — لم يستطع ارتباطها العمل. افتحه: يضع المحرّر خطًّا تحت ما لم يفهمه. والارتباط الفاشل يترك خانة فارغة عمدًا بدل أن يُسقط الصفحة كلها.
  • ‏rows.length تقول ‎'length' is a method — write length() to call it‎.** إنها دالة في BS Lang وتحتاج قوسيها: ‎rows.length()‎. و‎count(rows)‎ أوضح في تقرير. (كانت تُجيب بالقائمة كلها بدل العدد، دون أن تقول شيئًا. لم تعد.)
  • ‏sum تحته خط أحمر. — راجع هجاءه في القائمة أعلاه. يعرف المحرّر دوال التقرير التجميعية وحدها؛ ودالةٌ لا تملكها المنصّة دالةٌ لن يستدعيها شيء.
  • ارتباط كتبته سابقًا توقّف. — صارت تعبيرات التقرير BS Lang، اللغة نفسها في كل المنصّة. وينتقل كل شيء تقريبًا بلا تغيير — مسارات الحقول والحساب والمقارنات و?: والدوال التجميعية — لكن تعبيرًا اتّكأ على شيء كان المقيّم القديم يقبله مصادفةً يستحق أن تفتحه، لأن المحرّر سيخبرك الآن.

سيناريوهات ذات صلة​