گزارش‌های PDF

با Studio، می‌توانید گزارش‌های PDF موجود را ویرایش کنید (مثلاً، فاکتورها، پیش‌فاکتورها و غیره) یا گزارش‌های جدید ایجاد کنید.

طرح پیش‌فرض

طرح پیش‌فرض گزارش‌ها خارج از Studio مدیریت می‌شود. به تنظیمات بروید، سپس، در بخش شرکت‌ها صفحهٔ اصلی، روی پیکربندی طرح اسناد کلیک کنید. تنظیمات طرح مختص شرکت هستند اما به همهٔ گزارش‌ها اعمال می‌شوند.

نکته

می‌توانید ببینید چگونه تنظیمات مختلف بر طرح گزارش در پیش‌نمایش گزارش در سمت راست پنجرهٔ پیکربندی طرح بندی اسناد شرکت خود تأثیر می‌گذارند. هنگام ایجاد یا ویرایش یک گزارش، می‌توانید با کلیک روی Print preview در سمت چپ صفحه یک پیش‌نمایش از گزارش ببینید.

از تنظیمات زیر استفاده کنید:

  • طرح‌بندی: هفت طرح در دسترس هستند:

    نمونهٔ طرح گزارش Light
  • پس‌زمینه: پس‌زمینه‌های زیر در دسترس هستند:

    • خالی: چیزی نمایش داده نمی‌شود.

    • نشان نمونه: یک لوگوی demo در پس‌زمینه نمایش داده می‌شود.

    • سفارشی: یک تصویر پس‌زمینهٔ سفارشی آپلود کنید.

  • متن: هشت فونت در دسترس هستند: Lato، Roboto، Open Sans، Montserrat، Oswald، Raleway، Tajawal (که از اسکریپت‌های عربی و لاتین پشتیبانی می‌کند) و Fira Mono. به وب‌سایت Google Fonts بروید تا آنها را پیش‌نمایش کنید.

  • رنگ‌ها: رنگ‌های اولیه و ثانویه استفاده‌شده برای ساختاردهی گزارش‌ها را تغییر دهید. رنگ‌های پیش‌فرض به‌طور خودکار بر اساس رنگ‌های لوگو تولید می‌شوند.

  • شعار: این در سربرگ گزارش‌های خارجی با استفاده از طرح‌بندی‌های Light، Striped، Bubble، Wave و Folder و در پابرگ گزارش‌های خارجی با استفاده از طرح‌بندی‌های Boxed و Bold نمایش داده می‌شود. می‌توانید چندین خط متن اضافه کنید.

  • قالب کاغذ: این اندازهٔ کاغذ پیش‌فرض گزارش‌ها را تعریف می‌کند. می‌توانید A4 (21 سانتی‌متر در 29.7 سانتی‌متر) و US Letter (21.59 سانتی‌متر در 27.54 سانتی‌متر) را انتخاب کنید. این را همچنین می‌توان برای گزارش‌های فردی در فیلد قالب کاغذ در Studio تعریف کرد.

    توجه

    بسته به اینکه کدام اپ‌ها یا ماژول‌ها را نصب کرده‌اید، فرمت‌های کاغذ دیگری ممکن است در دسترس باشند، برای مثال، برگه‌های برچسب برای اپ موجودی یا نشان‌های رویداد برای اپ رویدادها.

ایجاد گزارش‌های PDF جدید

برای ایجاد یک گزارش جدید برای یک model، (مثلاً، سفارش‌های فروش) به مدل دسترسی پیدا کنید، روی دکمهٔ (Toggle Studio) کلیک کنید، سپس روی گزارش‌ها کلیک کنید. روی جدید

هنگامی که گزارش را ایجاد کردید، می‌توانید شروع به ویرایش آن کنید.

ویرایش گزارش‌های PDF

برای دسترسی به گزارش‌های در دسترس برای یک مدل، به مدل دسترسی پیدا کنید، روی دکمهٔ (Toggle Studio) کلیک کنید، سپس روی گزارش‌ها کلیک کنید. یک گزارش موجود را انتخاب کنید تا باز شود.

یا، می‌توانید همچنین Studio را باز کنید، روی گزارش‌ها کلیک کنید و یک گزارش یا مدل خاص را جستجو کنید.

مهم

به‌شدت توصیه می‌شود گزارش استاندارد را تکثیر کنید و تغییرات را در نسخهٔ تکثیرشده اعمال کنید. برای تکثیر یک گزارش، اشاره‌گر ماوس را روی گوشهٔ بالا سمت راست گزارش نگه دارید، روی آیکون (vertical ellipsis) کلیک کنید و سپس تکثیر کردن را انتخاب کنید.

تکثیر یک گزارش PDF

گزینه‌ها

هنگامی که یک گزارش را انتخاب یا ایجاد کردید، می‌توانید از گزینه‌های در سمت چپ صفحه برای موارد زیر استفاده کنید:

  • نام گزارش را تغییر دهید: نام جدید در همه جا اعمال می‌شود (در استودیو، در منوی چاپ زیر آیکون (gear) در نمای فرم، و در نام فایل PDF).

  • قالب کاغذ را تغییر دهید: اگر هیچ مقداری انتخاب نشده باشد، فرمت تعریف‌شده در default layout استفاده می‌شود.

  • Show in print menu: برای افزودن گزارش به منوی چاپ

  • بازخوانی از پیوست: برای ذخیرهٔ گزارش به‌عنوان یک پیوست روی رکورد اولین بار که تولید می‌شود و بارگذاری مجدد نسخهٔ اصلی گزارش هر بار بعدی. این از نظر قانونی برای فاکتورها لازم است و عمدتاً در این مورد استفاده می‌شود.

  • Limit visibility to groups: برای محدود کردن در دسترس بودن گزارش PDF به user groups خاص.

  • Edit sources: برای تغییر گزارش به‌طور مستقیم در XML file.

  • Reset report: برای دور انداختن همهٔ تغییرات اعمال‌شده به گزارش و reset آن به نسخهٔ استاندارد آن.

  • Print preview: برای تولید و دانلود یک پیش‌نمایش گزارش.

ویرایشگر گزارش

ویرایشگر گزارش به شما اجازه می‌دهد محتوا و قالب‌بندی گزارش را تغییر دهید.

نکته

  • می‌توانید تغییرات را لغو آخرین تغییر یا Redo کنید با استفاده از دکمه‌های مربوطه یا shortcut‌های CTRL + Z و CTRL + Y.

  • تغییرات به‌طور خودکار هنگام ترک گزارش یا به‌صورت دستی با استفاده از دکمهٔ ذخیره ذخیره می‌شوند.

  • می‌توانید گزارش را به نسخهٔ استاندارد خود با کلیک روی دکمهٔ Reset report در سمت چپ صفحه reset کنید.

مهم

ویرایش سربرگ و پابرگ یک گزارش روی همهٔ گزارش‌های استاندارد و سفارشی تأثیر می‌گذارد.

بلوک‌های شرطی

مستطیل‌های نقطه‌چین conditional blocks (دستورات if/else) را نشان می‌دهند. اینها برای نشان دادن/پنهان کردن محتوا بر اساس شرایط خاص استفاده می‌شوند. روی بلوک کلیک کنید تا شرایط را مشاهده کنید.

شرایط نما اعمال‌شده روی یک بلوک.

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

پیش‌نمایش خروجی یک شرط دیگر.

توجه

شرایط را فقط می‌توان در XML ویرایش کرد.

سایر محتوا

دو نوع محتوای متنی در گزارش‌ها وجود دارد:

  • متن استاتیک، یعنی، متنی که در آبی برجسته نشده، که می‌توان به‌طور مستقیم در ویرایشگر تغییر داد.

  • متن پویا، یعنی، متنی که در آبی برجسته شده، که با مقادیر field هنگام تولید گزارش جایگزین می‌شود، مثلاً، شمارهٔ سفارش فروش یا تاریخ پیش‌فاکتور.

می‌توانید محتوا (مثلاً، فیلدها، فهرست‌ها، جداول، تصاویر، بنرها و غیره) را به گزارش با استفاده از دستورات اضافه کنید. / را تایپ کنید تا powerbox باز شود، سپس نام دستور را تایپ کنید یا از فهرست انتخاب کنید.

برای افزودن متن استاتیک به گزارش، متن را جایی که می‌خواهید تایپ کنید.

برای تغییرات پیشرفته‌تر، می‌توانید گزارش را مستقیماً در XML ویرایش کنید.

اضافه کردن یک فیلد

برای افزودن یک فیلد، / را تایپ کنید و دستور فیلد را انتخاب کنید. در فهرستی که باز می‌شود، فیلد را انتخاب یا جستجو کنید؛ روی فلش راست کنار نام فیلد کلیک کنید تا در صورت لزوم به فهرست فیلدهای مرتبط دسترسی پیدا کنید. سپس، مقدار پیش‌فرض که اگر فیلد در رکورد تکمیل نشود نشان داده می‌شود را مشخص کنید و Enter را فشار دهید.

انتخاب یک فیلد مرتبط.
اضافه کردن یا ویرایش یک جدول

دو نوع جدول در گزارش‌ها وجود دارد:

  • Static tables، که برای نمایش متن استاتیک یا فیلدها استفاده می‌شوند. برای این نوع جدول، تعداد ستون‌ها و ردیف‌ها را هنگام افزودن جدول تعریف می‌کنید.

  • Dynamic tables، که برای نمایش داده‌ها از relational fields استفاده می‌شوند. برای این نوع جدول، فقط تعداد ستون‌ها را هنگام افزودن جدول تعریف می‌کنید. تعداد ردیف‌ها در گزارش تولیدشده توسط تعداد رکوردها در مدل مرتبط که با مدل فعلی پیوند داده شده‌اند تعیین می‌شود.

    Example

    در یک گزارش سفارش فروش، یک جدول پویا برای نشان دادن خطوط سفارش مربوط به سفارش فروش استفاده می‌شود. اگر سفارش فروش شامل 10 خط سفارش باشد، جدول در گزارش تولیدشده 10 ردیف دارد؛ اگر شامل دو خط سفارش باشد، جدول دو ردیف دارد.

اضافه کردن یا ویرایش یک جدول ایستا

برای افزودن یک جدول استاتیک، / را تایپ کنید و دستور میز را انتخاب کنید. تعداد ستون‌ها و ردیف‌ها برای جدول را تعیین کنید. هنگامی که جدول اضافه شد، می‌توانید شروع به ویرایش آن کنید.

می‌توانید با استفاده از ابزارهای جدول ستون‌ها و ردیف‌ها را درج، جابجا و حذف کنید. مکان‌نما را در بالای ستون یا در سمت چپ ردیف قرار دهید سپس روی مستطیل بنفش کلیک کنید و یک گزینه انتخاب کنید.

فهرست گزینه‌های در دسترس برای ویرایش ساختار جدول.

برای تغییر اندازه یک ستون، مرز ستون را به موقعیت مورد نظر بکشید؛ همهٔ ستون‌ها را به اندازهٔ استاندارد آنها reset کنید با انتخاب Reset Size از ابزارهای جدول.

فیلد انتخابی خود را در یک سلول اضافه کنید یا با تایپ متن استاتیک اضافه کنید.

نکته

برای افزودن متن به‌صورت ساختاریافته بدون استفاده از یک جدول، می‌توانید از ستون‌ها استفاده کنید. ستون‌ها را با تایپ / و انتخاب دستور مناسب اضافه کنید: 2 columns، 3 columns یا 4 columns.

اضافه کردن یا ویرایش یک جدول پویا

توجه

  • فقط روابط نوع one2many یا many2many را می‌توان به‌عنوان جداول پویا نمایش داد.

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

برای افزودن یک جدول پویا، / را تایپ کنید و دستور Dynamic Table را انتخاب کنید. در فهرستی که باز می‌شود، رابطه‌ای که جدول بر اساس آن خواهد بود را انتخاب یا جستجو کنید و Enter را فشار دهید. هنگامی که جدول اضافه شد، می‌توانید شروع به ویرایش آن کنید.

می‌توانید با استفاده از ابزارهای جدول ستون‌ها را درج، جابجا و حذف کنید، مانند یک static table. همچنین امکان درج ردیف‌های استاتیک که در بالا یا پایین ردیف‌های تولیدشده ظاهر می‌شوند وجود دارد.

برای افزودن یک فیلد به یک سلول، هر متن placeholder را حذف کنید سپس فیلد انتخابی خود را اضافه کنید. پنجرهٔ بازشو که نمایان می‌شود، شیء منبع برای فیلد (مثلاً، مدل خطوط سفارش) و فهرست فیلدهای در دسترس را نشان می‌دهد.

فهرست فیلدهای در دسترس برای مدل خطوط سفارش فروش.

label نام ستون را با label انتخابی خود جایگزین کنید.

توجه

ردیف پیش‌فرض به‌طور خودکار روی محتوای فیلد تکرار می‌شود، که یک ردیف در گزارش برای هر مقدار فیلد تولید می‌کند (مثلاً، یک ردیف به ازای هر خط سفارش).

قالب‌بندی

برای قالب‌بندی متن در گزارش، آن را انتخاب کنید، سپس با استفاده از گزینه‌ها در text editor آن را قالب‌بندی کنید.

قالب‌بندی متن با استفاده از ویرایشگر متن.

ویرایش XML گزارش

هشدار

تغییر مستقیم XML ممکن است در طول upgrades منجر به مسائل گزارش شود. اگر این اتفاق بیفتد، به‌سادگی تغییرات خود را از پایگاه دادهٔ قدیمی به پایگاه دادهٔ ارتقایافتهٔ خود کپی کنید.

برای ویرایش XML گزارش، روی Edit sources در پنل چپ کلیک کنید.

نمونه‌ها

برای تغییر نحوهٔ ارائه داده‌ها در گزارش شما، می‌توانید widget پیش‌فرض یک فیلد را به‌صورت دستی تغییر دهید. در مثال زیر، تاریخ سفارش تاریخ و زمان را به‌صورت پیش‌فرض نشان می‌دهد، در حالی که قیمت واحد به یک دقت دو رقم اعشار پیش‌فرض می‌شود.

<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 باشد، آنگاه پیش‌فاکتور استفاده می‌شود. اگر هیچ یک از آن شرایط برآورده نشود، عنوان گزارش سفارش است.

کار با تصاویر در یک گزارش می‌تواند چالش‌برانگیز باشد، زیرا کنترل دقیق روی اندازه و رفتار تصویر همیشه واضح نیست. می‌توانید فیلدهای تصویر را با استفاده از ویرایشگر گزارش (با استفاده از Field command) درج کنید، اما درج آنها در XML با استفاده از دستور t-field و ویژگی‌های همراه t-options کنترل بهتری روی اندازه و موقعیت‌یابی فراهم می‌کند.

برای مثال، کد زیر فیلد image_128 محصول خط را به‌عنوان یک تصویر 64 پیکسلی-عرض (با ارتفاع خودکار بر اساس نسبت تصویری تصویر) خروجی می‌دهد.

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

گزینه‌های زیر برای widget‌های تصویر در دسترس هستند:

  • width: عرض تصویر، معمولاً در پیکسل یا واحدهای طول CSS (مثلاً، rem) (برای auto-width خالی رها کنید).

  • height: ارتفاع تصویر، معمولاً در پیکسل یا واحدهای طول CSS (مثلاً، rem) (برای auto-height خالی رها کنید).

  • class: کلاس‌های CSS اعمال‌شده روی برچسب img؛ Bootstrap classes در دسترس هستند.

  • alt: متن جایگزین تصویر

  • style: ویژگی style؛ به شما اجازه می‌دهد style‌ها را آزادانه‌تر از Bootstrap classes override کنید.

این ویژگی‌ها باید شامل رشته‌ها باشند، یعنی، متن محصور در نقل‌قول داخل نقل‌قول، مثلاً، t-options-width="'64px'" (یا، به‌جای آن، یک عبارت Python معتبر).

توجه

widget تصویر را نمی‌توان روی یک برچسب img استفاده کرد. در عوض، دستور t-field را روی یک گرهٔ span (برای محتوای inline) یا 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 یک حاشیهٔ thumbnail-like با گوشه‌های گرد و یک سایه ایجاد می‌کنند.

افزودن یک ستون با تصویر محصول در جدول پیش‌فاکتور.