گزارش‌های سفارشی

Odoo با یک framework گزارش‌دهی قدرتمند و آسان برای استفاده می‌آید. این موتور به شما اجازه می‌دهد گزارش‌های جدیدی ایجاد کنید، مانند گزارش‌های مالیاتی، ترازنامه‌ها و income statement‌ها با گروه‌بندی‌ها و طرح‌های خاص.

مهم

developer mode را فعال کنید تا به پیکربندی گزارش accounting دسترسی پیدا کنید.

برای ایجاد یک گزارش جدید، به حسابداری ↤ پیکربندی ↤ گزارشات حسابداری بروید. از اینجا، یا یک گزارش مرجع یا یک واریانت ایجاد کنید.

نکته

  • در نظر بگیرید که گزارش‌های تغییریافته را به‌عنوان واریانت‌های گزارش ذخیره کنید تا گزارش‌های مرجع آنها دست‌نخورده باقی بمانند.

  • برای دسترسی به رابط مدیریت یک گزارش موجود از خود گزارش، روی آیکون (gears) کلیک کنید.

گزارش‌های مرجع

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

Example

یک گزارش مالیاتی برای Belgium و US هر دو از همان نسخهٔ generic به‌عنوان پایه استفاده می‌کنند و آن را برای مقررات داخلی خود تطبیق می‌دهند.

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

توجه

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

واریانت‌ها

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

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

Example

VAT Report (BE) یک واریانت از گزارش مرجع Generic Tax report است.

انتخاب واریانت گزارش.

خطوط

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

گزینه‌های خطوط Engine.

عبارت‌ها

هر خط می‌تواند شامل یک یا چند expression باشد. Expression‌ها را می‌توان به‌عنوان sub-variable‌هایی که توسط یک خط گزارش مورد نیاز هستند در نظر گرفت. برای ایجاد یک expression، روی افزودن یک سطر در داخل پنجرهٔ بازشوی یک خط کلیک کنید.

هنگام ایجاد یک عبارت، باید یک بر چسب وارد کنید که برای ارجاع به آن عبارت استفاده می‌شود. برچسب باید در میان عبارت‌های هر خط گزارش یکتا باشد. فیلدهای موتور محاسبه و فرمول باید نیز تکمیل شوند. موتور محاسبه تعریف می‌کند چگونه فرمول(ها) و زیرفرمول(ها) تفسیر می‌شوند. می‌توان عبارت‌ها را با استفاده از موتورهای محاسبهٔ مختلف زیر همان خط در صورت لزوم ترکیب کرد.

توجه

بسته به engine، subformulas نیز ممکن است مورد نیاز باشد.

موتور محاسبهٔ دامنهٔ Odoo

هنگام استفاده از موتور محاسبهٔ دامنه‌ی اودوو، یک فرمول به‌عنوان یک دامنهٔ Odoo که هدف‌گذاری روی شیء account.move.line است تفسیر می‌شود.

subformula به شما اجازه می‌دهد تعریف کنید چگونه move line‌هایی که با domain مطابقت دارند برای محاسبهٔ مقدار expression استفاده می‌شوند:

sum

نتیجه مجموع همهٔ موجودی‌های move line‌های تطبیق‌داده‌شده است.

sum_if_pos

نتیجه مجموع همهٔ موجودی‌های move line‌های تطبیق‌داده‌شده است اگر این مبلغ مثبت باشد. در غیر این صورت، 0 است.

sum_if_neg

نتیجه مجموع همهٔ موجودی‌های move line‌های تطبیق‌داده‌شده است اگر این مبلغ منفی باشد. در غیر این صورت، 0 است.

count_rows

نتیجه تعداد sub-line‌های این expression است. اگر خط parent یک مقدار group-by داشته باشد، این با تعداد کلیدهای گروه‌بندی متمایز در move line‌های تطبیق‌داده‌شده مطابقت خواهد داشت. در غیر این صورت، تعداد move line‌های تطبیق‌داده‌شده خواهد بود.

نکته

برای معکوس کردن علامت نتیجه، یک علامت - در ابتدای subformula قرار دهید.

خط Expression در یک گزارش خط

موتور محاسبهٔ برچسب‌های مالیاتی

هنگام استفاده از computation engine برچسب‌های مالیاتی، محتویات فیلد فرمول با برچسب‌های مالیاتی تطبیق داده می‌شوند. اگر چنین برچسب‌هایی هنگام ایجاد expression وجود نداشته باشند، ایجاد می‌شوند.

هنگام ارزیابی expression، محاسبه expression به‌طور کلی به‌صورت زیر می‌تواند بیان شود: (مبلغ move line‌ها با برچسب + ) - (مبلغ move line‌ها با برچسب - ).

Example

اگر فرمول به tag_name تنظیم شود، engine برچسب‌های مالیاتی +tag_name و -tag_name را تطبیق می‌دهد و در صورت لزوم ایجاد می‌کند. برای مثال بیشتر: دو برچسب توسط فرمول تطبیق داده می‌شوند. اگر فرمول A باشد، برچسب‌های +A و -A (و در صورت نیاز ایجاد) لازم خواهد بود.

موتور محاسبهٔ مجموع سایر فرمول‌ها

computation engine مجموع سایر فرمول‌ها عملیات حسابی را روی مبالغ به‌دست‌آمده از expression‌های دیگر انجام می‌دهد. فرمول‌ها در اینجا از ارجاعات به expression‌ها جدا شده توسط یکی از چهار عملگر حسابی پایه (جمع +، تفریق -، تقسیم / و ضرب *) تشکیل شده‌اند. برای ارجاع به یک expression، code خط parent آن را تایپ کنید سپس یک نقطه . و label expression (مثلاً، code.label).

Subformulas می‌توانند یکی از موارد زیر باشند:

if_above(CUR(amount))

مقدار expression حسابی فقط در صورتی برگردانده می‌شود که بزرگ‌تر از مرز ارائه‌شده باشد. در غیر این صورت، نتیجه 0 خواهد بود.

if_below(CUR(amount))

مقدار expression حسابی فقط در صورتی برگردانده می‌شود که کمتر از مرز ارائه‌شده باشد. در غیر این صورت، نتیجه 0 خواهد بود.

if_between(CUR1(amount1), CUR2(amount2))

مقدار expression حسابی فقط در صورتی برگردانده می‌شود که اکیداً بین مرزهای ارائه‌شده باشد. در غیر این صورت، به نزدیک‌ترین مرز بازگردانده می‌شود.

if_other_expr_above(LINE_CODE.EXPRESSION_LABEL, CUR(amount))

مقدار expression حسابی فقط در صورتی برگردانده می‌شود که مقدار expression نشان‌داده‌شده توسط کد خط و label expression ارائه‌شده بزرگ‌تر از مرز ارائه‌شده باشد. در غیر این صورت، نتیجه 0 خواهد بود.

if_other_expr_below(LINE_CODE.EXPRESSION_LABEL, CUR(amount))

مقدار expression حسابی فقط در صورتی برگردانده می‌شود که مقدار expression نشان‌داده‌شده توسط کد خط و label expression ارائه‌شده کمتر از مرز ارائه‌شده باشد. در غیر این صورت، نتیجه 0 خواهد بود.

CUR کد ارز با حروف بزرگ است، و amount مقدار مرز است که به آن ارز بیان شده است.

cross_report(xml_id | report_id)

برای تطبیق یک expression از گزارش دیگر که توسط xml_id یا خود شناسهٔ گزارش هدف‌گذاری شده استفاده می‌شود.

موتور محاسبهٔ پیشوند کدهای حساب

computation engine پیشوند کدهای حساب برای تطبیق مبالغ روی حساب‌ها با استفاده از پیشوندهای کدهای این حساب‌ها به‌عنوان متغیرها در یک expression حسابی استفاده می‌شود.

Example

21
expression‌های حسابی می‌توانند همچنین یک پیشوند واحد باشند، مانند اینجا.

Example

21 + 10 - 5
این فرمول موجودی‌های move line‌هایی که روی حساب‌هایی که کدهای آنها با 21 و 10 شروع می‌شوند را جمع می‌کند و موجودی آنهایی که روی حساب‌هایی با پیشوند 5 هستند را کم می‌کند.

همچنین می‌توان یک انتخاب از sub-prefix‌ها را نادیده گرفت.

Example

21 + 10\(101, 102) - 5\(57)
این فرمول به همان شیوهٔ مثال قبلی کار می‌کند اما پیشوندهای 101، 102 و 57 را نادیده می‌گیرد.

می‌توانید 'sub-filtering' روی credit‌ها و debit‌ها با استفاده از پسوندهای C و D اعمال کنید. در این صورت، یک حساب فقط در صورتی در نظر گرفته می‌شود که پیشوند آن مطابقت داشته باشد، و اگر کل موجودی move line‌های روی این حساب credit/debit باشد.

Example

حساب 210001 موجودی -42 دارد و حساب 210002 موجودی 25 دارد. فرمول 21D فقط با حساب 210002 تطبیق می‌دهد و بنابراین 25 برمی‌گرداند. 210001 تطبیق نمی‌یابد، زیرا موجودی آن credit است.

حذف پیشوند می‌تواند با پسوندهای C و D ترکیب شود.

Example

21D + 10\(101, 102)C - 5\(57)
این فرمول موجودی‌های move line‌هایی که روی حساب‌هایی که کد آنها با 21 شروع می‌شود اگر debit (D) باشد و 10 اگر credit (C) باشد را جمع می‌کند، اما پیشوندهای 101، 102 را نادیده می‌گیرد، و موجودی آنهایی که روی حساب‌هایی با پیشوند 5 هستند را کم می‌کند، با نادیده گرفتن پیشوند 57.

برای تطبیق حرف C یا D در یک پیشوند و استفاده نکردن از آن به‌عنوان پسوند، از یک exclusion خالی () استفاده کنید.

Example

21D\()
این فرمول حساب‌هایی را که کد آنها با 21D شروع می‌شود، صرف‌نظر از علامت موجودی آنها، تطبیق می‌دهد.

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

Example

tag(25)
این فرمول حساب‌هایی که برچسب‌های مرتبط آنها شامل آن با ID 25 است را تطبیق می‌دهد.

اگر برچسبی که به آن ارجاع می‌دهید در یک فایل داده تعریف شده است، یک XMLID می‌تواند به‌جای ID استفاده شود.

Example

tag(my_module.my_tag)
این فرمول حساب‌هایی که برچسب‌های مرتبط آنها شامل برچسب نشان‌داده‌شده توسط my_module.my_tag است را تطبیق می‌دهد.

همچنین می‌توانید از expression‌های حسابی با برچسب‌ها استفاده کنید، احتمالاً آنها را با انتخاب پیشوند ترکیب کنید.

Example

tag(my_module.my_tag) + tag(42) + 10
موجودی‌های حساب‌های برچسب‌خورده به‌عنوان my_module.my_tag با حساب‌های پیوندخورده به برچسب با ID 42 و حساب‌هایی با پیشوند کد 10 جمع می‌شوند

پسوندهای C و D می‌توانند به همان روش با برچسب‌ها استفاده شوند.

Example

tag(my_module.my_tag)C
این فرمول حساب‌هایی با برچسب my_module.my_tag و موجودی بستانکار را تطبیق می‌دهد.

حذف پیشوند نیز با برچسب‌ها کار می‌کند.

Example

tag(my_module.my_tag)\(10)
این فرمول حساب‌هایی با برچسب my_module.my_tag و کدی که با 10 شروع نمی‌شود را تطبیق می‌دهد.

موتور محاسبهٔ ارزش خارجی

computation engine ارزش خارجی برای ارجاع به مقادیر manual و carryover استفاده می‌شود. آن مقادیر با استفاده از account.move.line ذخیره نمی‌شوند، بلکه با account.report.external.value. هر یک از این اشیاء مستقیماً به expression که تحت تأثیر قرار می‌دهد اشاره می‌کند، بنابراین دربارهٔ انتخاب آنها در اینجا کار بسیار کمی لازم است.

فرمول‌ها می‌توانند یکی از موارد زیر باشند:

sum

اگر نتیجه باید مجموع همهٔ external value‌ها در دوره باشد.

most_recent

اگر نتیجه باید مقدار جدیدترین external value در دوره باشد.

علاوه بر این، subformulas را می‌توان به دو روش استفاده کرد:

rounding=X

جایگزین کردن X با یک عدد دستور می‌دهد مبلغ را به X اعشار round کند.

editable

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

توجه

مقادیر دستی در date_to انتخاب‌شدهٔ فعلی در گزارش ایجاد می‌شوند.

هر دو subformula می‌توانند با جدا کردن آنها با یک ; ترکیب شوند.

Example

editable;rounding=2
این subformula روش صحیح ترکیب هر دو رفتار را نشان می‌دهد.

موتور محاسبهٔ Custom Python Function

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

ستون‌ها

گزارش‌ها می‌توانند تعداد نامحدودی از ستون‌ها برای نمایش داشته باشند. هر ستون مقادیر خود را از expression‌های اعلام‌شده روی خطوط دریافت می‌کند. فیلد expression_label ستون label expression‌هایی که مقدار آنها نمایش داده می‌شود را می‌دهد. اگر یک خط هیچ expression در آن فیلد نداشته باشد، آنگاه چیزی برای آن در این ستون نمایش داده نمی‌شود. اگر چندین ستون مورد نیاز است، باید از label‌های expression مختلف استفاده کنید.

ستون‌های گزارش.

هنگام استفاده از ویژگی مقایسهٔ دوره که در زبانهٔ گزینه‌ها یک گزارش حسابداری یافت می‌شود، همهٔ ستون‌ها در و برای هر دوره تکرار می‌شوند.

گروه‌بندی خطوط

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

توجه

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

ایجاد یک فیلد جدید در آیتم روزنامه

برای ایجاد یک فیلد غیرذخیره‌شده و مرتبط در مدل آیتم روزنامه، ابتدا به حسابداری ↤ آیتم های روزنامه بروید و روی آیکون (bug) کلیک کنید، سپس روی فیلدها کلیک کنید. روی جدید کلیک کنید تا یک فیلد جدید ایجاد کنید، و فیلدهای زیر را تکمیل کنید:

  • نام فیلد: یک نام فنی برای فیلد

  • برچسب فیلد: برچسبی که برای فیلد نمایش داده می‌شود

  • نوع فیلد: نوع فیلدی که این فیلد مرتبط باید به آن اشاره کند

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

  • مدل مرتبط: اگر نوع فیلد one2many، many2many یا many2one است، مدل فیلد اصلی برای گروه‌بندی را انتخاب کنید.

  • Related Field Definition: مسیر فنی به فیلدی که می‌خواهید بر اساس آن گروه‌بندی کنید

    Example

    برای گروه‌بندی بر اساس تیم فروش شریک تجاری، تعریف فیلد مرتبط را به move_id.team_id تنظیم کنید.

گروه‌بندی خطوط

برای گروه‌بندی خطوط، به زبانهٔ Lines گزارش مورد نظر بروید، روی خطی که می‌خواهید گروه‌بندی کنید کلیک کنید و فیلد گروه‌بندی برمبنای را ویرایش کنید. نام فنی (نام فیلد) فیلدی که به‌عنوان کلید گروه‌بندی استفاده شود را وارد کنید.

نکته

برای یافتن یک فهرست از همهٔ فیلدهای مدل و نام‌های فنی آنها، به حسابداری ↤ آیتم های روزنامه بروید، و روی آیکون (bug) کلیک کنید، سپس روی فیلدها کلیک کنید. نام فنی هر فیلد در ستون نام فیلد فهرست شده است.