تقارير PDF

باستخدام الاستوديو، يمكنك تعديل تقارير PDF الموجودة (مثل الفواتير والعروض، إلخ) أو إنشاء تقارير جديدة.

المخطط الافتراضي

يتم إدارة التخطيط الافتراضي للتقارير خارج الاستوديو. انتقل إلى الإعدادات، ثم في قسم الشركات في الصفحة الرئيسية، انقر على تكوين تخطيط المستند. إعدادات التخطيط خاصة بالشركة ولكنها تنطبق على جميع التقارير.

نصيحة

يمكنك معرفة كيفية تأثير الإعدادات المختلفة على تخطيط التقرير في معاينة التقرير على الجانب الأيمن من نافذة تكوين تخطيط المستند. عند إنشاء أو تحرير تقرير، يمكنك رؤية معاينة للتقرير من خلال النقر على معاينة الطباعة على الجانب الأيسر من الشاشة.

استخدم الإعدادات التالية:

  • التخطيط: يتوفر سبعة تخطيطات:

    نموذج تخطيط تقرير فاتح
  • الخلفية: تتوفر الخلفيات التالية:

    • فارغ: لا يتم عرض أي شيء.

    • شعار تجريبي: يتم عرض شعار تجريبي في الخلفية.

    • مخصص: قم بتحميل صورة خلفية مخصصة.

  • النص: يتوفر ثمانية خطوط: Lato وRoboto وOpen Sans وMontserrat وOswald وRaleway وTajawal (الذي يدعم النصوص العربية واللاتينية) وFira Mono. انتقل إلى موقع Google Fonts لمعاينتها.

  • الألوان: قم بتغيير الألوان الأساسية والثانوية المستخدمة لهيكلة التقارير. يتم إنشاء الألوان الافتراضية تلقائيًا بناءً على ألوان الشعار.

  • العنوان: يتم عرض اسم الشركة وعنوانها في رأس التقارير الخارجية. يمكنك إضافة أسطر نصية متعددة.

  • الشعار: يتم عرض هذا في رأس التقارير الخارجية باستخدام تخطيطات Light وStriped وBubble وWave وFolder وفي تذييل التقارير الخارجية باستخدام تخطيطات Boxed وBold. يمكنك إضافة أسطر نصية متعددة.

  • تنسيق الورق: يحدد هذا حجم الورق الافتراضي للتقارير. يمكنك تحديد A4 (21 سم × 29.7 سم) و:guilabel:US Letter (21.59 سم × 27.54 سم). يمكن أيضًا تحديد هذا للتقارير الفردية في حقل تنسيق الورق في الاستوديو.

    ملاحظة

    قد تتوفر تنسيقات ورق أخرى حسب التطبيقات أو الوحدات التي قمت بتثبيتها، على سبيل المثال، أوراق الملصقات لتطبيق المخزون أو شارات الفعاليات لتطبيق الفعاليات.

إنشاء تقارير PDF جديدة

لإنشاء تقرير جديد لـ نموذج، (مثل أوامر المبيعات)، قم بالوصول إلى النموذج، انقر على زر (تبديل الاستوديو)، ثم انقر على التقارير. انقر على جديد وفي النافذة المنبثقة التي تفتح، حدد نوع التقرير. يُستخدم هذا فقط لتحديد ما يُعرض في الرأس والتذييل:

بمجرد إنشاء التقرير، يمكنك البدء في تحريره.

تحرير تقارير PDF

للوصول إلى التقارير المتاحة لنموذج، قم بالوصول إلى النموذج، انقر على زر (تبديل الاستوديو)، ثم انقر على التقارير. حدد تقريرًا موجودًا لفتحه.

بدلاً من ذلك، يمكنك أيضًا فتح الاستوديو، والنقر على التقارير، والبحث عن تقرير أو نموذج معين.

مهم

يُوصى بشدة بنسخ التقرير القياسي وإجراء التغييرات في النسخة المنسوخة. لنسخ تقرير، ضع مؤشر الماوس في الزاوية العلوية اليمنى من التقرير، انقر على أيقونة (القطع الناقص العمودي)، ثم حدد نسخ.

نسخ تقرير PDF

الخيارات

بمجرد تحديد أو إنشاء تقرير، يمكنك استخدام الخيارات في الجزء الأيسر من الشاشة من أجل:

  • تغيير اسم التقرير: يُطبق الاسم الجديد في كل مكان (في الاستوديو، في قائمة طباعة تحت أيقونة (الترس) في عرض النموذج، وفي اسم ملف PDF).

  • تعديل تنسيق الورق: إذا لم يتم تحديد قيمة، يُستخدم التنسيق المحدد في التخطيط الافتراضي.

  • إظهار في قائمة الطباعة: لإضافة التقرير إلى قائمة طباعة في عرض النموذج.

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

  • تقييد الرؤية للمجموعات: لتقييد توفر تقرير PDF لـ مجموعات مستخدمين محددة.

  • تحرير المصادر: لتعديل التقرير مباشرة في ملف XML.

  • إعادة تعيين التقرير: لتجاهل جميع التغييرات التي تم إجراؤها على التقرير وإعادته إلى نسخته القياسية.

  • معاينة الطباعة: لإنشاء وتنزيل معاينة للتقرير.

محرر التقارير

يتيح لك محرر التقارير تعديل محتوى التقرير وتنسيقه.

نصيحة

  • يمكنك التراجع أو الإعادة عن التغييرات باستخدام الأزرار ذات الصلة أو اختصارات CTRL + Z و CTRL + Y.

  • يتم حفظ التغييرات تلقائيًا عند مغادرة التقرير أو يدويًا باستخدام زر حفظ.

  • يمكنك إعادة تعيين التقرير إلى نسخته القياسية بالنقر على زر إعادة تعيين التقرير في الجزء الأيسر من الشاشة.

مهم

يؤثر تحرير رأس وتذييل التقرير على جميع التقارير القياسية والمخصصة.

الكتل الشرطية

تمثل المستطيلات المتقطعة كتلًا شرطية (عبارات if/else). تُستخدم لإظهار/إخفاء المحتوى بناءً على شروط محددة. انقر على الكتلة لعرض الشروط.

عرض الشروط المطبقة على كتلة.

حدد قيمة لمعاينة المخرجات المقابلة لها وتحريرها إذا لزم الأمر.

معاينة مخرجات شرط آخر.

ملاحظة

لا يمكن تحرير الشروط إلا في XML.

محتوى آخر

هناك نوعان من محتوى النص في التقارير:

  • النص الثابت، أي النص غير المظلل باللون الأزرق، والذي يمكن تعديله مباشرة في المحرر.

  • النص الديناميكي، أي النص المظلل باللون الأزرق، والذي يتم استبداله بقيم الحقول عند إنشاء التقرير، مثل رقم أمر البيع أو تاريخ عرض الأسعار.

يمكنك إضافة محتوى (مثل الحقول والقوائم والجداول والصور واللافتات وغيرها) إلى التقرير باستخدام الأوامر. اكتب / لفتح صندوق الطاقة، ثم اكتب اسم الأمر أو حدده من القائمة.

لإضافة نص ثابت إلى التقرير، اكتب النص في المكان الذي تريده.

لإجراء تغييرات أكثر تقدمًا، يمكنك تحرير التقرير في XML مباشرة.

إضافة حقل

لإضافة حقل، اكتب / وحدد أمر الحقل. في القائمة التي تفتح، حدد أو ابحث عن الحقل؛ انقر على السهم الأيمن بجوار اسم الحقل للوصول إلى قائمة الحقول ذات الصلة إذا لزم الأمر. ثم حدد القيمة الافتراضية التي ستظهر إذا لم يكتمل الحقل في السجل واضغط على Enter.

اختر حقلًا مرتبطًا.
إضافة أو تحرير جدول

هناك نوعان من الجداول في التقارير:

  • الجداول الثابتة، والتي تستخدم لعرض نص ثابت أو حقول. بالنسبة لهذا النوع من الجداول، تحدد عدد الأعمدة والصفوف عند إضافة الجدول.

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

    Example

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

إضافة أو تحرير جدول ثابت

لإضافة جدول ثابت، اكتب / وحدد أمر جدول. حدد عدد الأعمدة والصفوف للجدول. بمجرد إضافة الجدول، يمكنك البدء في تحريره.

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

قائمة الخيارات المتاحة لتحرير بنية الجدول.

لتغيير حجم عمود، اسحب حد العمود إلى الموضع المطلوب؛ أعد تعيين جميع الأعمدة إلى حجمها القياسي بتحديد إعادة تعيين الحجم من أدوات الجدول.

أضف الحقل الذي تختاره في خلية أو أضف نصًا ثابتًا بالكتابة.

نصيحة

لإضافة نص بطريقة منظمة دون استخدام جدول، يمكنك استخدام الأعمدة. أضف أعمدة بكتابة / وتحديد الأمر المناسب: عمودان، 3 أعمدة أو 4 أعمدة.

إضافة أو تحرير جدول ديناميكي

ملاحظة

  • يمكن عرض العلاقات من نوع one2many أو many2many فقط كجداول ديناميكية.

  • الجدول الديناميكي الموجود في تقرير قياسي له بنية أكثر تعقيدًا من الجدول الديناميكي الذي تضيفه بنفسك. بالنسبة لهذه الجداول، من الممكن إدراج الأعمدة أو حذفها؛ لكن لا يمكن نقل الأعمدة أو إدراج الصفوف أو نقلها أو حذفها.

لإضافة جدول ديناميكي، اكتب / واختر أمر جدول ديناميكي. في القائمة التي تفتح، حدد أو ابحث عن العلاقة التي سيعتمد عليها الجدول واضغط على Enter. بمجرد إضافة الجدول، يمكنك البدء في تحريره.

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

لإضافة حقل إلى خلية، احذف أي نص نائب ثم أضف الحقل الذي تختاره. يعرض مربع الحوار الذي يفتح الكائن المصدر للحقل (على سبيل المثال، نموذج بنود الطلب) وقائمة الحقول المتاحة.

قائمة الحقول المتاحة لنموذج بنود أمر البيع.

استبدل تسمية اسم العمود بالتسمية التي تختارها.

ملاحظة

يتكرر الصف الافتراضي تلقائياً على محتوى الحقل، مما ينشئ صفاً في التقرير لكل قيمة حقل (على سبيل المثال، صف واحد لكل بند طلب).

التنسيق

لتنسيق النص في التقرير، حدده، ثم نسّقه باستخدام الخيارات الموجودة في محرر النصوص.

تنسيق النص باستخدام محرر النصوص.

تحرير XML الخاص بالتقرير

تحذير

قد يؤدي تعديل XML مباشرةً إلى مشكلات في التقرير أثناء الترقيات. إذا حدث ذلك، ما عليك سوى نسخ التغييرات من قاعدة البيانات القديمة إلى قاعدة البيانات المُرقّاة.

لتحرير XML الخاص بالتقرير، انقر على تحرير المصادر في الجزء الأيسر.

أمثلة

لتغيير كيفية عرض البيانات في تقريرك، يمكنك تعديل الأداة الافتراضية للحقل يدوياً. في المثال أدناه، يعرض تاريخ الطلب التاريخ والوقت افتراضياً، بينما يعرض سعر الوحدة دقة منزلتين عشريتين افتراضياً.

<div class="oe_structure">
 <span t-field="doc.date_order"/>
 <span t-field="doc.price_unit"/>
</div>

باستخدام t-options، في هذه الحالة خيار widget، يمكن تعديل هذه الحقول لإظهار التاريخ فقط ودقة أربعة منازل عشرية على التوالي:

<div class="oe_structure">
 <span t-field="doc.date_order" t-options="{'widget': 'date'}"/>
 <span t-field="doc.price_unit" t-options="{'widget': 'float', 'precision': 4}"/>
</div>

إذا كنت تريد إظهار/إخفاء المحتوى بناءً على شروط محددة، يمكنك إضافة عبارات التحكم if/else يدوياً في XML الخاص بالتقرير.

على سبيل المثال، إذا كنت تريد إخفاء جدول بيانات مخصص في حالة عدم وجود وسوم، يمكنك استخدام سمة t-if لتحديد الشرط، والذي يتم تقييمه بعد ذلك على أنه True أو False. لن يتم عرض الجدول إذا لم تكن هناك وسوم في عرض الأسعار.

<!-- table root element -->
<table class="table" t-if="len(doc.tag_ids) > 0">
    <!-- thead = table header, the row with column titles -->
    <thead>
        <!-- table row element -->
        <tr>
            <!-- table header element -->
            <th>ID</th>
            <th>Name</th>
        </tr>
    </thead>
    <!-- table body, the main content -->
    <tbody>
        <!-- we create a row for each subrecord with t-foreach -->
        <tr t-foreach="doc.tag_ids" t-as="tag">
            <!-- for each line, we output the name and price as table cells -->
            <td t-out="tag.id"/>
            <td t-out="tag.name"/>
        </tr>
    </tbody>
</table>

إذا كنت تريد عرض كتلة أخرى في حالة تقييم عبارة t-if على أنها False، يمكنك تحديدها باستخدام عبارة t-else. يجب أن تتبع كتلة t-else مباشرةً كتلة t-if في بنية المستند. لا حاجة لتحديد أي شرط في سمة t-else. كمثال، لنعرض رسالة سريعة توضح أنه لا توجد وسوم في عرض الأسعار:

<!-- table root element -->
<table class="table" t-if="len(doc.tag_ids) > 0">
    <!-- thead = table header, the row with column titles -->
    <thead>
        <!-- table row element -->
        <tr>
            <!-- table header element -->
            <th>ID</th>
            <th>Name</th>
        </tr>
    </thead>
    <!-- table body, the main content -->
    <tbody>
        <!-- we create a row for each subrecord with t-foreach -->
        <tr t-foreach="doc.tag_ids" t-as="tag">
            <!-- for each line, we output the name and price as table cells -->
            <td t-out="tag.id"/>
            <td t-out="tag.name"/>
        </tr>
    </tbody>
</table>
<div class="text-muted" t-else="">No tag present on this document.</div>

باستخدام ترميز t-if/t-else، يتعرف محرر التقارير على أن هذه الأقسام حصرية متبادلة ويجب عرضها ككتل شرطية:

معاينة الإخراج إذا كانت هناك وسوم.

يمكنك تبديل الشروط باستخدام المحرر لمعاينة إخراجها:

معاينة الإخراج إذا لم تكن هناك وسوم.

إذا كنت ترغب في الحصول على خيارات متعددة، يمكنك أيضًا استخدام توجيهات t-elif لإضافة شروط وسيطة. على سبيل المثال، هذه هي الطريقة التي يتغير بها عنوان تقارير أمر البيع بناءً على حالة المستند الأساسي.

<h2 class="mt-4">
    <span t-if="env.context.get('proforma', False) or is_pro_forma">Pro-Forma Invoice # </span>
    <span t-elif="doc.state in ['draft','sent']">Quotation # </span>
    <span t-else="">Order # </span>
    <span t-field="doc.name">SO0000</span>
</h2>

يتم استخدام العنوان فاتورة أولية اعتمادًا على بعض الشروط السياقية. إذا لم يتم استيفاء هذه الشروط وكانت حالة المستند إما draft أو sent، فسيتم استخدام عرض أسعار. إذا لم يتم استيفاء أي من هذه الشروط، فسيكون عنوان التقرير أمر.

يمكن أن يكون العمل مع الصور في التقرير أمرًا صعبًا، حيث أن التحكم الدقيق في حجم الصورة وسلوكها ليس واضحًا دائمًا. يمكنك إدراج حقول الصور باستخدام محرر التقارير (باستخدام أمر الحقل)، ولكن إدراجها في XML باستخدام توجيه t-field وسمات t-options المصاحبة يوفر تحكمًا أفضل في الحجم والموضع.

على سبيل المثال، الكود التالي يُخرج الحقل image_128 من منتج السطر كصورة بعرض 64 بكسل (مع ارتفاع تلقائي بناءً على نسبة العرض إلى الارتفاع للصورة).

<span t-field="line.product_id.image_128" t-options-widget="image" t-options-width="64px"/>

الخيارات التالية متاحة لعناصر الصور:

  • width: عرض الصورة، عادة بالبكسل أو وحدات طول CSS (مثل rem) (اتركه فارغًا للعرض التلقائي).

  • height: ارتفاع الصورة، عادة بالبكسل أو وحدات طول CSS (مثل rem) (اتركه فارغًا للارتفاع التلقائي).

  • class: فئات CSS المطبقة على وسم img؛ فئات Bootstrap متاحة.

  • alt: النص البديل للصورة

  • style: سمة النمط؛ تتيح لك تجاوز الأنماط بحرية أكبر من فئات Bootstrap.

يجب أن تحتوي هذه السمات على سلاسل نصية، أي نص محاط بعلامات اقتباس داخل علامات اقتباس، على سبيل المثال t-options-width="'64px'" (أو بدلاً من ذلك، تعبير Python صالح).

ملاحظة

لا يمكن استخدام عنصر الصورة على وسم img. بدلاً من ذلك، قم بتعيين توجيه t-field على عقدة span (للمحتوى المضمن) أو div (لمحتوى الكتلة).

على سبيل المثال، لنضف عمودًا مع صورة المنتج في جدول عرض الأسعار:

<table class="table table-sm o_main_table table-borderless mt-4">
    <thead style="display: table-row-group">
        <tr>
            <th>Image</th>
            <th name="th_description" class="text-start">Description</th>
            <th>Product Category</th>
            <th name="th_quantity" class="text-end">Quantity</th>
            <th name="th_priceunit" class="text-end">Unit Price</th>
[...]
        <t t-foreach="lines_to_report" t-as="line">
            <t t-set="current_subtotal" t-value="current_subtotal + line.price_subtotal"/>
            <tr t-att-class="'bg-200 fw-bold o_line_section' if line.display_type == 'line_section' else 'fst-italic o_line_note' if line.display_type == 'line_note' else ''">
                <t t-if="not line.display_type">
                   <td>
                       <span t-field="line.product_template_id.image_128"
                             t-options-widget="'image'"
                             t-options-width="'64px'"
                             t-options-class="'rounded-3 shadow img-thumbnail'"
                           />
                   </td>
                    <td name="td_name"><span t-field="line.name">Bacon Burger</span></td>
                    <td t-out="line.product_id.categ_id.display_name"/>

تقيد سمة t-options-width عرض الصورة إلى 64 بكسل، وتنشئ فئات Bootstrap المستخدمة في t-options-class حدًا يشبه الصورة المصغرة مع زوايا مستديرة وظل.

أضف عمودًا مع صورة المنتج في جدول عرض الأسعار.