تنسيق الورق المخصص في تقارير QWeb لأودو
كيفية إنشاء وتهيئة وربط تنسيقات الورق المخصصة بتقارير QWeb لأودو — يشمل إعداد واجهة المستخدم، وتجاوز XML، والتحكم في الهوامش، وضبط حجم الرأس والتذييل.
يُنشئ محرك QWeb في أودو تقارير PDF باستخدام تنسيق ورق يتحكم في حجم الصفحة والاتجاه والهوامش والمسافة المحجوزة للرؤوس والتذييلات. يناسب تنسيق الورق الافتراضي (A4 عمودي) معظم المستندات القياسية — الفواتير وأوامر الشراء وقوائم التسليم. عندما تحتاج الشركة إلى حجم مستند مخصص أو تخطيط أفقي أو عرض هوامش محددة للقرطاسية مسبقة الطباعة، يصبح تنسيق الورق المخصص ضروريًا.
يغطي هذا الدليل ثلاثة أساليب: تهيئة تنسيق الورق عبر واجهة مستخدم أودو، وربطه بإجراء تقرير في XML، وتجاوزه مباشرةً في قالب تقرير QWeb. الأساليب الثلاثة متوافقة ويمكن دمجها.
ما هو تنسيق الورق في أودو؟
تنسيق الورق في أودو هو سجل في نموذج `ir.paper.format` يحدد الخصائص المادية وتخطيط صفحة PDF المطبوعة. كل `ir.actions.report` (إجراء تقرير) له حقل `paper_format_id` — عندما يكون هذا الحقل فارغًا، يعود التقرير إلى تنسيق الشركة الافتراضي.
| اسم الحقل | النوع | الوصف | القيم الشائعة |
|---|---|---|---|
| name | نص | الاسم المعروض في واجهة المستخدم وقائمة إجراء التقرير | "A4 Custom"، "Invoice Landscape" |
| default | منطقي | إذا كانت True، يُعدّ هذا التنسيق الافتراضي للشركة لجميع التقارير التي لا تحتوي على paper_format_id صريح | True / False |
| format | اختيار | الحجم القياسي المسمى — يُستخدم عندما لا تُحدد الأبعاد المخصصة | A4, A3, Letter, Legal |
| orientation | اختيار | دوران الصفحة عمودي أو أفقي | Portrait / Landscape |
| margin_top / margin_bottom / margin_left / margin_right | عشري | هوامش الصفحة بالمليمتر. تُمرَّر هذه القيم مباشرة إلى wkhtmltopdf | 10.0، 15.0، 20.0 |
| header_line | منطقي | رسم خط أفقي أسفل منطقة الرأس | True / False |
| header_spacing | صحيح | المسافة الرأسية (بالمليمتر) بين أعلى الصفحة وبداية محتوى الجسم. يجب أن تكون ≥ ارتفاع قالب رأس QWeb. | 30، 40، 60 |
| page_width / page_height | عشري | أبعاد الصفحة المخصصة بالمليمتر. عند تعيينها، تتجاوز حقل `format`. | 210.0 / 297.0 لـ A4 |
إنشاء تنسيق ورق مخصص عبر واجهة مستخدم أودو
- انتقل إلى الإعدادات ← التقني ← التقارير ← تنسيقات الورق.
- انقر على جديد.
- اضبط الاسم على معرّف وصفي (مثلاً "Invoice A4 Narrow Margin").
- اختر التنسيق (A4، A3، Letter، Legal) أو اتركه فارغًا إذا كنت ستضبط الأبعاد المخصصة عبر عرض الصفحة / ارتفاع الصفحة.
- اضبط الاتجاه على Portrait أو Landscape.
- اضبط حقول الهامش الأربعة (أعلى، أسفل، يسار، يمين) بالمليمتر. نقطة بداية آمنة للفواتير هي 10 / 10 / 10 / 10.
- اضبط تباعد الرأس بالمليمتر. يتحكم هذا الإعداد في الفجوة بين الحافة العليا للصفحة وبداية محتوى الجسم. ابدأ بارتفاع رأسك بالمليمتر وأضف 5–10 مم هامشًا.
- احفظ السجل. أصبح تنسيق الورق متاحًا الآن في قائمة تنسيق الورق لأي إجراء تقرير.
ربط تنسيق الورق بإجراء تقرير في XML
بالنسبة للوحدات المخصصة، حدد سجل تنسيق الورق وربط إجراء التقرير في ملفات بيانات XML. هذا النهج قابل للتكرار ومتحكم به بالإصدارات ويُثبَّت بشكل صحيح على أي نسخة أودو.
الخطوة 1 — تعريف سجل تنسيق الورق
<!-- data/paper_format_data.xml -->
<odoo>
<record id="paperformat_invoice_custom" model="ir.paper.format">
<field name="name">Invoice A4 Narrow Margin</field>
<field name="default" eval="False"/>
<field name="format">A4</field>
<field name="orientation">Portrait</field>
<field name="margin_top">10.0</field>
<field name="margin_bottom">10.0</field>
<field name="margin_left">10.0</field>
<field name="margin_right">10.0</field>
<field name="header_line" eval="False"/>
<field name="header_spacing">40</field>
</record>
</odoo>الخطوة 2 — ربط تنسيق الورق بإجراء التقرير
<!-- report/account_invoice_report.xml -->
<odoo>
<!-- Define the report action and reference the paper format -->
<report
id="account_invoices_custom"
model="account.move"
string="Custom Invoice"
report_type="qweb-pdf"
name="your_module.report_invoice_custom_document"
file="your_module.report_invoice_custom_document"
paper_format="your_module.paperformat_invoice_custom"
print_report_name="(object.name or 'Invoice')"
/>
</odoo>قالب تقرير QWeb — تخطيط الرأس والتذييل والجسم
يتحكم تنسيق الورق في منطقة الطباعة المتاحة. يتحكم قالب تقرير QWeb فيما يُعرض داخل تلك المنطقة. يتم تعريف الأجزاء الثلاثة — الرأس والتذييل والجسم — باستخدام نقاط وراثة `t-call` محددة في تخطيط التقرير الأساسي لأودو.
<!-- report/report_invoice_custom_document.xml -->
<odoo>
<!-- Outer wrapper must inherit web.html_container -->
<template id="report_invoice_custom_document">
<t t-call="web.html_container">
<t t-foreach="docs" t-as="doc">
<t t-call="web.external_layout">
<t t-set="doc" t-value="doc.with_context(lang=doc.partner_id.lang)"/>
<!-- Body content goes here -->
<div class="page">
<h2 t-field="doc.name"/>
<p t-field="doc.invoice_date"/>
<!-- ... your report body ... -->
</div>
</t>
</t>
</t>
</template>
</odoo>قوالب رأس وتذييل مخصصة
يُقدّم أودو الرؤوس والتذييلات عبر `web.external_layout_header` و`web.external_layout_footer`. لاستبدالهما لتقرير محدد، ورّث هذه القوالب وقيّد التجاوز باستخدام `t-if` على متغير `report_name`.
<!-- Custom header for a specific report only -->
<template id="report_invoice_custom_header"
inherit_id="web.external_layout_header">
<xpath expr="//div[hasclass('header')]" position="replace">
<!-- Only override for our custom report -->
<t t-if="report_name == 'your_module.report_invoice_custom_document'">
<div class="header" style="height: 35mm;">
<!-- Your custom header HTML here -->
<img t-att-src="'/web/image/res.company/%s/logo' % company.id"
style="max-height: 30mm;"/>
<div class="text-right">
<strong t-field="company.name"/>
</div>
</div>
</t>
<t t-else="">
<!-- Fall back to default header for all other reports -->
<t t-call="web.external_layout_standard_header"/>
</t>
</xpath>
</template>مشكلات تنسيق الورق الشائعة وحلولها
| الأعراض | السبب الجذري | الحل |
|---|---|---|
| يتداخل الرأس مع محتوى الجسم في كل صفحة | header_spacing أصغر من ارتفاع HTML الرأس المُقدَّم | زد header_spacing في تنسيق الورق. قِس ارتفاع رأسك في المتصفح عند دقة 96 DPI (1 مم ≈ 3.78 بكسل)، ثم أضف هامش 5–10 مم. |
| PDF بحجم A4 رغم تعيين page_width / page_height مخصص | حقل `format` في ir.paper.format لا يزال مضبوطًا على "A4"، مما يتجاوز الأبعاد المخصصة في بعض إصدارات wkhtmltopdf | امسح حقل `format` (اضبطه على خيار مخصص / فارغ) عند استخدام page_width / page_height. لا يمكن تفعيل كلا الحقلين في آن واحد. |
| يتجاهل التقرير تنسيق الورق المضبوط في إجراء التقرير | تنسيق ورق افتراضي على مستوى الشركة مضبوط على `default = True` ويتجاوز التنسيق على مستوى الإجراء | إما أن تلغي `default` في تنسيق ورق الشركة، أو تضبط `paper_format_id` صراحةً على إجراء التقرير بدلًا من الاعتماد على الافتراضي. |
| يتم تجاهل الهامش الأيمن؛ المحتوى يمتد خارج الصفحة | أنماط عرض مُضمَّنة بشكل ثابت في قالب QWeb (مثل `width: 210mm`) لا تحسب الهوامش | استخدم عروضًا نسبية أو `max-width: 100%` في CSS لـ QWeb بدلًا من عروض مم مطلقة. دع هوامش تنسيق الورق تحدد منطقة الطباعة. |
| محتوى التذييل مقطوع في أسفل الصفحة | margin_bottom صغير جدًا لارتفاع HTML التذييل | زد margin_bottom في تنسيق الورق. يُقدَّم التذييل ضمن منطقة الهامش السفلي — إذا كان HTML التذييل أطول من margin_bottom، يتم اقتطاعه. |
ملاحظات الإصدار ودليل المراجعة السريعة
| إصدار أودو | محرك PDF | مسار واجهة المستخدم | تغيير بارز |
|---|---|---|---|
| أودو 16 / 17 | wkhtmltopdf (أساسي) | الإعدادات ← التقني ← التقارير ← تنسيقات الورق | أضيف Headless Chrome كمحرك اختياري لبعض التقارير؛ API تنسيق ورق QWeb دون تغيير |
| أودو 18 | wkhtmltopdf (أساسي) | الإعدادات ← التقني ← التقارير ← تنسيقات الورق | لا تغييرات في API لـ ir.paper.format. وراثة قالب الرأس/التذييل دون تغيير. |
| أودو 19 | wkhtmltopdf (أساسي) | الإعدادات ← التقني ← التقارير ← تنسيقات الورق | لا تغييرات في API لـ ir.paper.format. موثق يونيو 2026. |
| أودو 20 (متوقع أواخر 2026) | غير محدد — اتبع المراجعة السريعة أعلاه | متوقع استقراره — تحقق عند الإصدار | تحقق مما إذا كان wkhtmltopdf لا يزال أساسيًا أم استُبدل بـ headless Chrome كافتراضي. يُتوقع أن تظل API نموذج تنسيق الورق مستقرة. |
هل تحتاج مساعدة في تقارير أودو المخصصة لشركتك في السعودية أو البحرين؟
يتولى فريق تطوير أودو في iWesabe قوالب تقارير QWeb المخصصة وتهيئة تنسيق الورق وتخطيطات الفواتير المتوافقة مع ZATCA. احجز مكالمة تحديد نطاق.
الأسئلة الشائعة
أين توجد قائمة تنسيقات الورق في أودو 19؟
كيف أضبط حجم صفحة مخصصًا (غير A4 أو Letter) في أودو؟
كيف أطبق تنسيق ورق على تقرير واحد فقط دون بقية التقارير؟
لماذا يتداخل رأس تقرير QWeb مع محتوى الجسم؟
هل يمكنني استخدام تنسيق ورق مختلف للصفحة الأولى مقابل الصفحات اللاحقة؟
هل يؤثر تنسيق الورق على التقرير عند طباعته من الشاشة (وليس تنزيله كـ PDF)؟

iWesabe Editorial Team
رؤى عملية حول Odoo ERP وامتثال ZATCA والعمليات الرقمية للشركات السعودية — بقلم فرق الاستشارات والمالية والهندسة في iWesabe.
مقالات ذات صلة
لماذا يهمّ الدعم المحلي في تطبيقات Odoo ERP بالمملكة العربية السعودية (٢٠٢٦)
يُتقن شركاء Odoo من الخارج العروض ويُخطئون التطبيقات. الانضباط الميداني الذي يحتاجه فعلاً المدير المالي أو التشغيلي أو مدير تكنولوجيا المعلومات السعودي من شريك Odoo محلي — مُعرَّف، ومُسعَّر، وجاهز للتدقيق.
أفضل مزوّد لبرنامج Odoo ERP في المملكة العربية السعودية: ٧ علامات جدوى للمشتري (٢٠٢٦)
ما الذي يُميّز شريك Odoo قابلاً للدفاع تدقيقياً عن عرض مبيعات: سلسلة الاعتماد، ومراجع العملاء بالاسم، وعمق الجهات التنظيمية (ZATCA / GOSI / PDPL)، ودعم بالساعات العربية، والنموذج التجاري، والمنهجية، وبند الخروج — مع الإشارات الحمراء التي يجب الانتباه إليها.
ما هو نظام أودو ERP؟ الدليل الشامل لأودو (المعروف سابقاً بـ OpenERP) للشركات السعودية
من TinyERP إلى OpenERP إلى أودو 19 — كيف تطوّر النظام ولماذا يستخدمه أكثر من 12 مليون مستخدم حول العالم