گزارش های پی دی اف

گزارش های پی دی اف

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


پیکربندی طرح سند


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

نکته

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


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


پیکربندی طرح سند: چهار طرح در دسترس است:


Light


Boxed


Bold

Striped


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


لوگوی شرکت: برای آپلود یا تغییر لوگو روی دکمه ویرایش کلیک کنید. با این کار لوگو به رکورد شرکت در مدل شرکت اضافه می شود که می توانید با رفتن به تنظیمات و سپس کلیک بر روی ذخیره در بخش شرکت ها به آن دسترسی داشته باشید.


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


پس زمینه طرح: پس زمینه های زیر در دسترس هستند:


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


  • هندسی: تصویری با اشکال هندسی در پس زمینه نمایش داده می شود.


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


شعار شرکت: این در سربرگ گزارش های خارجی نمایش داده می شود. می توانید چندین خط نوشتاری اضافه کنید.


جزئیات شرکت: اینها در سرصفحه گزارش های خارجی نمایش داده می شوند. می توانید چندین خط نوشتاری اضافه کنید.


پاورقی: این متن در پاورقی گزارش های خارجی استفاده می شود. می توانید چندین خط نوشتاری اضافه کنید. همچنین می توانید پاورقی را با استفاده از ویرایشگر گزارش ویرایش کنید.


قالب کاغذ: برای تعریف اندازه کاغذ پیش فرض گزارش ها. می توانید صفحه A4 (21 سانتی متر در 29.7 سانتی متر)، US Letter (21.59 سانتی متر در 27.54 سانتی متر) یا صفحه کدهای QR را انتخاب کنید. قالب کاغذ را می توان برای گزارش های سفارشی در قسمت قالب کاغذ در استودیو نیز تعریف کرد.


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


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

  • خارجی
    • هدر لوگو، شعار و جزئیات شرکت را نمایش میدهد
    • پاورقی مقادیر تنظیم شده در قسمت پاورقی و شماره صفحه را نمایش می دهد.
  • داخلی: سربرگ تاریخ و زمان فعلی کاربر، نام شرکت و شماره صفحه را نشان می دهد. پاورقی وجود ندارد.
  • خالی: نه سرصفحه وجود دارد و نه پاورقی. برای ویرایش گزارش در گوشه سمت چپ بالای صفحه کلیک کنید.

پس از ایجاد گزارش، میتوانید ویرایش آن را شروع کنید.


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


برای دسترسی به گزارش های موجود برای یک مدل، به مدل دسترسی پیدا کنید (به عنوان مثال، سفارشات فروش)، روی دکمه استودیو کلیک کنید، سپس روی گزارش ها کلیک کنید. یک گزارش موجود را برای باز کردن یا ایجاد گزارش جدید انتخاب کنید.

نکته

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


مهم

اکیدا توصیه می شود گزارش استاندارد را کپی کرده و تغییراتی را در نسخه کپی شده انجام دهید. برای کپی کردن یک گزارش، نشانگر ماوس را در گوشه سمت چپ بالای گزارش نگه دارید، روی نماد بیضی عمودی (⋮) کلیک کنید و سپس تکثیر را انتخاب کنید.



گزینه

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


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


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


  • نمایش در منوی چاپ: برای افزودن گزارش در منوی چاپ رکورد.


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


  • محدود کردن قابلیت دید به گروه ها: برای محدود کردن در دسترس بودن گزارش PDF به گروه های کاربری خاص.


  • ویرایش منابع: برای تغییر گزارش به طور مستقیم در فایل XML.


  • بازنشانی گزارش: برای کنار گذاشتن تمام تغییرات ایجاد شده در گزارش و بازنشانی آن به نسخه استاندارد خود.


  • پیش نمایش چاپ: برای ایجاد و بارگیری پیش نمایش گزارش.


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

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


نکته

  • می توانید با استفاده از دکمه ها یا میان برهای مرتبط، بازگشت یا انجام مجدد را انجام دهید CTRL+Z و CTRL+Y.


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


  • می توانید با کلیک بر روی دکمه بازنشانی گزارش در قسمت سمت راست صفحه، گزارش را به نسخه استاندارد خود بازنشانی کنید.

مهم

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


بلوک های شرطی

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



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


توجه

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


مطالب دیگر

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


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


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


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


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


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


افزودن فیلد

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



افزودن جدول داده

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


توجه

فقط روابط از نوع یک به چند یا چند به چند می تواند به عنوان جداول داده نمایش داده شود.


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


سپس می توانید فیلد مورد نظر خود را در ستون ها وارد کنید. کادر محاوره ای که باز می شود، شیء منبع فیلد (به عنوان مثال، مدل برچسب) و لیست فیلدهای موجود را نشان می دهد.


توجه 

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


همچنین می توانید با تغییر XML گزارش، جداول داده را اضافه کنید.

قالب بندی

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



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

هشدار

تغییر مستقیم XML ممکن است منجر به مشکلات گزارش در حین ارتقاء شود. اگر این اتفاق افتاد، به سادگی تغییرات خود را از پایگاه داده قدیمی در پایگاه داده ارتقا یافته خود کپی کنید.


برای ویرایش XML گزارش، روی ویرایش منابع در کادر سمت راست کلیک کنید.


نمونه

  • اصلاح ساختار جداول

گاهی اوقات، جداول به دلیل ساختارهای پیچیده به درستی تشخیص داده نمی شوند. در این موارد، همچنان می توانید آنها را به صورت دستی در XML گزارش تغییر دهید. به عنوان مثال، با یک سفارش فروش، می توانید ساختار زیر را در XML پیدا کنید (ساده شده برای اهداف مستندسازی):


حافظه موقت
</table
</tbody>
    </tr>
        />"line.price"t-out= <td
            />"line.name"t-out= <td
            <!-- for each line, we output the name and price as table cells -->
            >"line"t-as= "record.some_relation_ids"t-foreach= <tr
        <!-- we create a row for each subrecord with t-foreach -->
        <tbody>
    <!-- table body, the main content -->
    </thead>
    </tr>
        </th>Price<th>
            </th>Name<th>
            <!-- table header element -->
            <tr>
        <!-- table row element -->
        <thead>
    <!-- thead = table header, the row with column titles -->
    <table>
<!-- table root element -->

برای تغییر یک جدول، باید اطمینان حاصل کنید که هر ردیف تعداد سلول های داده یکسانی دارد. به عنوان مثال، در مورد بالا، باید یک سلول در بخش سرصفحه (به عنوان مثال، عنوان ستون) و یک سلول دیگر در بخش بدنه با محتوای فیلد (معمولا با یک t-out یا t-field).


حافظه موقت
<table> <!-- table root element -->
    <thead> <!-- thead = table header, the row with column titles -->
        <tr> <!-- table row element -->
            <th>Name</th> <!-- table header element -->
            <th>Price</th>
            <th>Category</th>
        </tr>
    </thead>
    <tbody>  <!-- table body, the main content -->
        <tr t-foreach="record.some_relation_ids" t-as="line">  <!-- we create a row for each subrecord with t-foreach -->
            <td t-out="line.name"/>  <!-- for each line, we output the name and price as table cells -->
            <td t-out="line.price"/>
            <td t-out="line.category_id.display_name"/>
        </tr>
    </tbody>
</table>

توجه

سلول ها می توانند چندین ردیف یا ستون را در بر بگیرند. برای اطلاعات بیشتر، به وب سایت شبکه توسعه دهندگان موزیلا بروید.


به عنوان مثال، می توانید گزارش پیش فاکتور/سفارش فروش را تغییر دهید تا ستونی برای نمایش دسته بندی محصول در جدول اصلی اضافه کنید:

حافظه موقت
<table class="table table-sm o_main_table table-borderless mt-4">
    <!-- In case we want to repeat the header, remove "display: table-row-group" -->
    <thead style="display: table-row-group">
        <tr>
            <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>
[...]
            <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 name="td_name"><span t-field="line.name">Bacon Burger</span></td>
                    <td t-out="line.product_id.categ_id.display_name"/>
                    <td name="td_quantity" class="text-end">
                        <span t-field="line.product_uom_qty">3</span>
                        <span t-field="line.product_uom">units</span>
                        <span t-if="line.product_packaging_id">
  • افزودن جدول داده

برای افزودن جدول در XML، باید نام فیلدها و اشیایی را که می خواهید به آنها دسترسی داشته باشید و نمایش دهید، بدانید. به عنوان مثال، بیایید جدولی اضافه کنیم که جزئیات برچسب های یک سفارش فروش را نشان می دهد:

حافظه موقت
<!-- table root element -->
<table class="table">
    <!-- 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>

توجه

هنگام افزودن جداول به صورت دستی، آنها را با استفاده از کلاس های بوت استرپ، مانند table در مثال بالا اضافه نمایید.



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

اگر می خواهید محتوا را بر اساس شرایط خاص نشان دهید/پنهان کنید، می توانید به صورت دستی 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">پروفورما # </span>
<span t-elif="doc.state in ['draft','sent']">پیش فاکتور # </span>
<span t-else="">سفارش # </span>
<span t-field="doc.name">SO0000</span>
</h2>

عنوان پروفورما بسته به برخی شرایط استفاده می شود. اگر این شرایط برآورده نشود و وضعیت سند یا پیشنویس (draft) یا ارسال شده (sent) باشد، از عنوان پیش فاکتور استفاده می شود. اگر هیچ یک از این شرایط برآورده نشود، عنوان گزارش سفارش است.


  • تصاویر

کار با تصاویر در یک گزارش می تواند چالش برانگیز باشد، زیرا کنترل دقیق اندازه و رفتار تصویر همیشه ساده نیست. می توانید فیلدهای تصویر را با استفاده از ویرایشگر گزارش (با استفاده از دستور /فیلد) وارد کنید، اما با استفاده از دستور 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 برچسب; کلاس های بوت استرپ در دسترس هستند.


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


  • style ویژگی سبک؛ این به شما امکان می دهد سبک ها را آزادانه تر از کلاس های بوت استرپ لغو کنید.


این ویژگی ها باید حاوی رشته هایی باشند، یعنی متنی که در گیومه ها درج شده است، به عنوان مثال، 

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 ویژگی عرض تصویر را به 64 پیکسل محدود می کند و کلاس های بوت استرپ مورد استفاده در t-options-class یک حاشیه کوچک با گوشه های گرد و یک سایه ایجاد می کنند.