گزارشهای PDF¶
با استودیو، میتوانید گزارشهای PDF موجود را ویرایش کنید (مانند فاکتورها، پیشنهادات، و غیره) یا گزارشهای جدید ایجاد کنید.
طرح پیشفرض¶
چیدمان پیشفرض گزارشها خارج از Studio مدیریت میشود. به مسیر شرکتها در صفحه اصلی، روی پیکربندی چیدمان اسناد کلیک کنید. تنظیمات چیدمان مختص شرکت هستند اما برای تمامی گزارشها اعمال میشوند.
بروید، سپس در بخشنکته
شما میتوانید ببینید که تنظیمات مختلف چگونه بر طرحبندی گزارش تأثیر میگذارند، در پیشنمایش گزارش در سمت راست پنجره پیکربندی طرحبندی سند شما. هنگام ایجاد یا ویرایش یک گزارش، میتوانید با کلیک بر روی پیشنمایش چاپ در سمت چپ صفحه، پیشنمایشی از گزارش را مشاهده کنید.
از تنظیمات زیر استفاده کنید:
طرحبندی: هفت طرحبندی موجود است:
پسزمینه: پسزمینههای زیر در دسترس هستند:
خالی: هیچ چیزی نمایش داده نمیشود.
لوگوی نمایشی: یک لوگوی نمایشی در پسزمینه نمایش داده میشود.
سفارشی: یک تصویر پسزمینه سفارشی بارگذاری کنید.
متن: هشت فونت موجود هستند: Lato، Roboto، Open Sans، Montserrat، Oswald، Raleway، Tajawal (که از اسکریپتهای عربی و لاتین پشتیبانی میکند)، و Fira Mono. برای پیشنمایش آنها به وبسایت فونتهای گوگل مراجعه کنید.
لوگوی شرکت: روی دکمه ویرایش کلیک کنید تا لوگو را بارگذاری یا تغییر دهید. این کار لوگو را به رکورد شرکت در مدل شرکت اضافه میکند، که میتوانید با رفتن به و سپس کلیک روی بهروزرسانی اطلاعات در بخش شرکتها به آن دسترسی پیدا کنید.
رنگها: رنگهای اصلی و فرعی مورد استفاده برای ساختاردهی گزارشها را تغییر دهید. رنگهای پیشفرض بهطور خودکار بر اساس رنگهای لوگو تولید میشوند.
آدرس: نام و آدرس شرکت در سربرگ گزارشهای خارجی نمایش داده میشود. شما میتوانید چندین خط متن اضافه کنید.
شعار: این متن در سربرگ گزارشهای خارجی با استفاده از طرحهای سبک، راهراه، حبابی، موج و پوشه نمایش داده میشود و در پاورقی گزارشهای خارجی با استفاده از طرحهای جعبهای و برجسته نمایش داده میشود. شما میتوانید چندین خط متن اضافه کنید.
فرمت کاغذ: این گزینه اندازه پیشفرض کاغذ گزارشها را تعریف میکند. میتوانید A4 (۲۱ سانتیمتر × ۲۹.۷ سانتیمتر) و US Letter (۲۱.۵۹ سانتیمتر × ۲۷.۵۴ سانتیمتر) را انتخاب کنید. این گزینه همچنین میتواند برای گزارشهای جداگانه در فیلد فرمت کاغذ در استودیو تعریف شود.
توجه
فرمتهای دیگر کاغذ ممکن است بسته به اینکه کدام برنامهها یا ماژولها را نصب کردهاید در دسترس باشند، به عنوان مثال، برگههای برچسب برای برنامه انبار یا نشانهای رویداد برای برنامه رویدادها.
ایجاد گزارشهای جدید PDF¶
برای ایجاد یک گزارش جدید برای یک مدل (مثلاً سفارشهای فروش)، به مدل دسترسی پیدا کنید، روی دکمه (تغییر به استودیو) کلیک کنید، سپس روی گزارشها کلیک کنید. روی جدید کلیک کنید و در پنجره پاپآپی که باز میشود، نوع گزارش را انتخاب کنید. این فقط برای تعیین آنچه در سربرگ و پاورقی نمایش داده میشود استفاده میشود.
پس از ایجاد گزارش، میتوانید ویرایش آن را شروع کنید.
ویرایش گزارشهای PDF¶
برای دسترسی به گزارشهای موجود برای یک مدل، وارد مدل شوید، روی دکمه (تغییر حالت استودیو) کلیک کنید، سپس روی گزارشها کلیک کنید. یک گزارش موجود را انتخاب کنید تا باز شود.
همچنین میتوانید استودیو را باز کنید، روی گزارشها کلیک کنید و به دنبال گزارش یا مدل خاصی بگردید.
مهم
توصیه میشود که گزارش استاندارد را کپی کرده و تغییرات را در نسخه کپی شده اعمال کنید. برای کپی کردن یک گزارش، نشانگر ماوس را روی گوشه بالا سمت راست گزارش ببرید، روی آیکون (سه نقطه عمودی) کلیک کنید و سپس گزینه کپی کردن را انتخاب کنید.

گزینهها¶
پس از انتخاب یا ایجاد گزارش، میتوانید از گزینههای موجود در قسمت چپ صفحه استفاده کنید تا:
تغییر نام گزارش: نام جدید در همه جا اعمال میشود (در Studio، در منوی چاپ زیر آیکون (چرخدنده) در نمای فرم، و در نام فایل PDF).
ویرایش فرمت کاغذ: اگر هیچ مقداری انتخاب نشود، فرمت تعریفشده در چیدمان پیشفرض استفاده میشود.
:گزارش را به منوی :گuilabel:`چاپ` در نمای فرم اضافه کنید.
بارگذاری مجدد از پیوست: برای ذخیره گزارش بهعنوان یک پیوست در رکورد در اولین باری که تولید میشود و بارگذاری نسخه اصلی گزارش در دفعات بعدی. این مورد بهصورت قانونی برای فاکتورها الزامی است و عمدتاً در این مورد استفاده میشود.
محدود کردن دید به گروهها: برای محدود کردن دسترسی به گزارش PDF به گروههای کاربری خاص <../general/users/access_rights>.
ویرایش منابع: برای ویرایش گزارش بهطور مستقیم در فایل XML.
بازنشانی گزارش: برای لغو تمام تغییرات اعمالشده بر گزارش و بازگرداندن آن به نسخه استاندارد.
پیشنمایش چاپ: برای ایجاد و دانلود پیشنمایش گزارش.
ویرایشگر گزارش¶
ویرایشگر گزارش به شما امکان میدهد محتوای گزارش و قالببندی آن را تغییر دهید.
نکته
شما میتوانید تغییرات را با استفاده از دکمههای مربوطه یا میانبرهای
CTRL
+Z
وCTRL
+Y
بازگردانی یا تکرار کنید.تغییرات بهصورت خودکار هنگام ترک گزارش یا بهصورت دستی با استفاده از دکمه ذخیره ذخیره میشوند.
شما میتوانید گزارش را به نسخه استاندارد آن بازنشانی کنید با کلیک بر روی دکمه بازنشانی گزارش در بخش سمت چپ صفحه.
مهم
ویرایش سربرگ و پابرگ یک گزارش بر تمامی گزارشهای استاندارد و سفارشی تأثیر میگذارد.
بلوکهای شرطی¶
مستطیلهای خطچین نشاندهنده بلوکهای شرطی (دستورات if/else) هستند. این بلوکها برای نمایش/پنهان کردن محتوا بر اساس شرایط خاص استفاده میشوند. برای مشاهده شرایط، روی بلوک کلیک کنید.

یک مقدار را انتخاب کنید تا خروجی مربوطه را پیشنمایش کرده و در صورت نیاز آن را ویرایش کنید.

توجه
شرایط فقط میتوانند در XML ویرایش شوند.
سایر محتوا¶
دو نوع محتوای متنی در گزارشها وجود دارد:
متن ثابت، یعنی متنی که با رنگ آبی مشخص نشده و میتوان آن را مستقیماً در ویرایشگر تغییر داد.
متن پویا، یعنی متنی که با رنگ آبی برجسته شده است و هنگام تولید گزارش با مقادیر فیلد جایگزین میشود، مانند شماره سفارش فروش یا تاریخ پیشفاکتور.
شما میتوانید با استفاده از دستورات، محتوا (مانند فیلدها، لیستها، جداول، تصاویر، بنرها و غیره) را به گزارش اضافه کنید. کلید /
را فشار دهید تا powerbox باز شود، سپس نام دستور را تایپ کنید یا آن را از لیست انتخاب کنید.
برای افزودن متن ثابت به گزارش، متن را در جایی که میخواهید تایپ کنید.
برای تغییرات پیشرفتهتر، میتوانید گزارش را مستقیماً در XML ویرایش کنید.
افزودن یک فیلد¶
برای افزودن یک فیلد، علامت /
را تایپ کنید و دستور Field را انتخاب کنید. در لیستی که باز میشود، فیلد مورد نظر را انتخاب یا جستجو کنید؛ اگر نیاز باشد، روی فلش سمت راست کنار نام فیلد کلیک کنید تا به لیست فیلدهای مرتبط دسترسی پیدا کنید. سپس مقدار پیشفرضی را مشخص کنید که در صورت تکمیل نشدن فیلد در رکورد نمایش داده شود و کلید Enter
را فشار دهید.

افزودن یا ویرایش جدول¶
دو نوع جدول در گزارشها وجود دارد:
جداول ثابت که برای نمایش متن یا فیلدهای ثابت استفاده میشوند. برای این نوع جدول، تعداد ستونها و ردیفها را هنگام افزودن جدول تعریف میکنید.
جداول پویا که برای نمایش دادهها از فیلدهای رابطهای استفاده میشوند. برای این نوع جدول، شما فقط تعداد ستونها را هنگام افزودن جدول تعریف میکنید. تعداد ردیفها در گزارش تولید شده بر اساس تعداد رکوردهای موجود در مدل مرتبط که با مدل فعلی لینک شدهاند تعیین میشود.
Example
در گزارش سفارش فروش، یک جدول پویا برای نمایش خطوط سفارش مرتبط با سفارش فروش استفاده میشود. اگر سفارش فروش شامل ۱۰ خط سفارش باشد، جدول در گزارش تولید شده ۱۰ ردیف دارد؛ اگر شامل دو خط سفارش باشد، جدول دو ردیف خواهد داشت.
افزودن یا ویرایش یک جدول ثابت¶
برای افزودن یک جدول ثابت، علامت /
را تایپ کنید و دستور Table را انتخاب کنید. تعداد ستونها و ردیفهای جدول را تعیین کنید. پس از افزودن جدول، میتوانید ویرایش آن را آغاز کنید.
شما میتوانید ستونها و ردیفها را با استفاده از ابزارهای جدول وارد کنید، جابجا کنید و حذف کنید. نشانگر را بالای ستون یا سمت چپ ردیف قرار دهید، سپس روی مستطیل بنفش کلیک کرده و گزینهای را انتخاب کنید.

برای تغییر اندازه یک ستون، مرز ستون را به موقعیت دلخواه بکشید؛ برای بازنشانی تمام ستونها به اندازه استانداردشان، گزینه بازنشانی اندازه را از ابزارهای جدول انتخاب کنید.
در یک سلول، فیلد مورد نظر خود را اضافه کنید یا متن ثابت را با تایپ کردن اضافه کنید.
نکته
برای افزودن متن به صورت ساختاریافته بدون استفاده از جدول، میتوانید از ستونها استفاده کنید. ستونها را با تایپ کردن /
و انتخاب دستور مناسب اضافه کنید: 2 ستون، 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>
عنوان پیشفاکتور بسته به برخی شرایط متنی استفاده میشود. اگر این شرایط برآورده نشوند و وضعیت سند یا پیشنویس
یا ارسالشده
باشد، در این صورت از پیشنهاد قیمت استفاده میشود. اگر هیچیک از این شرایط برآورده نشوند، عنوان گزارش سفارش خواهد بود.
کار با تصاویر در یک گزارش میتواند چالشبرانگیز باشد، زیرا کنترل دقیق بر اندازه و رفتار تصویر همیشه واضح نیست. شما میتوانید با استفاده از ویرایشگر گزارش (با استفاده از دستور فیلد) فیلدهای تصویر را وارد کنید، اما وارد کردن آنها در XML با استفاده از دستور t-field
و ویژگیهای همراه t-options
کنترل بهتری بر اندازه و موقعیت ارائه میدهد.
به عنوان مثال، کد زیر فیلد image_128
محصول خط را به عنوان یک تصویر با عرض 64 پیکسل (با ارتفاع خودکار بر اساس نسبت ابعاد تصویر) نمایش میدهد.
<span t-field="line.product_id.image_128" t-options-widget="image" t-options-width="64px"/>
گزینههای زیر برای ویجتهای تصویر در دسترس هستند:
عرض
: عرض تصویر، معمولاً به پیکسل یا واحدهای طول CSS (مانندrem
) (برای عرض خودکار خالی بگذارید).ارتفاع
: ارتفاع تصویر، معمولاً بر حسب پیکسل یا واحدهای طول CSS (مانندrem
) (برای ارتفاع خودکار خالی بگذارید).class
: کلاسهای CSS که بر روی تگimg
اعمال میشوند؛ کلاسهای Bootstrap در دسترس هستند.alt
: متن جایگزین تصویرstyle
: ویژگی style؛ این امکان را فراهم میکند که سبکها را آزادانهتر از کلاسهای Bootstrap تغییر دهید.
این ویژگیها باید شامل رشتهها باشند، یعنی متنی که در داخل نقلقولها قرار گرفته باشد، مانند t-options-width="'64px'"
(یا بهطور جایگزین، یک عبارت معتبر پایتون).
توجه
ویجت تصویر نمیتواند روی تگ 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
عرض تصویر را به ۶۴ پیکسل محدود میکند و کلاسهای Bootstrap استفادهشده در t-options-class
یک حاشیه شبیه به تصویر بندانگشتی با گوشههای گرد و سایه ایجاد میکنند.
