بومیسازی حسابداری¶
هشدار
این آموزش به دانش دربارهٔ نحوهٔ ساخت یک ماژول در Odoo نیاز دارد (نگاه کنید به Server framework 101).
روند نصب¶
هنگام نصب ماژول account، ماژول بومیسازی متناظر با کد کشور شرکت بهصورت خودکار نصب میشود. در صورتی که کد کشور تعیین نشده باشد یا ماژول بومیسازی یافت نشود، ماژول بومیسازی l10n_generic_coa (آمریکا) بهصورت پیشفرض نصب میشود. برای جزئیات بیشتر post init hook را بررسی کنید.
برای مثال، اگر شرکت Switzerland را بهعنوان کشور داشته باشد، l10n_ch نصب خواهد شد.
ساخت یک ماژول بومیسازی¶
ساختار یک ماژول پایهٔ l10n_XX را میتوان با فایل __manifest__.py زیر توصیف کرد:
{
"name": "COUNTRY - Accounting",
"version": "1.0.0",
"category": "Accounting/Localizations/Account Charts",
"license": "LGPL-3",
"depends": [
"account",
],
"data": [
"data/other_data.xml",
"views/xxxmodel_views.xml",
],
"demo": [
"demo/demo_company.xml",
]
}
درخت کاری شما باید به این شکل باشد
l10n_xx
├── data
│ ├── template
│ │ ├── account.account-xx.csv
│ │ ├── account.group-xx.csv
│ │ └── account.tax.group-xx.csv
│ └── other_data.xml
├── views
│ └── xxxmodel_views.xml
├── demo
│ └── demo_company.xml
├── models
│ ├── template_xx.py
│ └── __init__.py
├── __init__.py
└── __manifest__.py
در فایل اول models/template_xx.py، نام چارت حسابها را به همراه برخی فیلدهای پایه تعیین میکنیم.
همچنین ببینید
چارت حسابها¶
حسابها¶
همچنین ببینید
بدیهی است که Chart of Accounts بدون Accounts نمیتواند وجود داشته باشد. باید آنها را در data/account.account.template.csv مشخص کنید.
هشدار
از استفادهٔ
asset_cashaccount_typeپرهیز کنید! در واقع، حسابهای بانکی و نقدی مستقیماً هنگام نصب ماژول بومیسازی ایجاد میشوند و سپس به یکaccount.journalپیوند داده میشوند.برای حالت عمومی، تنها یک حساب از نوع پرداختنی/دریافتنی کافی است. با این حال، باید یک حساب دریافتنی PoS نیز تعریف کنیم. (در CoA پیوند داده میشود)
حسابهای زیادی ایجاد نکنید: ۲۰۰ تا ۳۰۰ کافی است. اما در بیشتر مواقع، سعی میکنیم تعادل خوبی پیدا کنیم تا CoA پس از آن برای بیشتر شرکتها به حداقل تغییر نیاز داشته باشد.
گروههای حساب¶
همچنین ببینید
گروههای حساب امکان توصیف ساختار سلسلهمراتبی چارت حسابها را فراهم میکنند. فیلتر باید در گزارش فعال شود و سپس وقتی به اسناد حسابداری باز میشوید، والدهای حساب را نشان خواهد داد.
این با پیشوند start/end کار میکند، بنابراین هر حسابی که کد آن با چیزی بین start و end شروع شود، این account.group را بهعنوان گروه والد خواهد داشت. علاوه بر این، گروههای حساب میتوانند یک گروه حساب والد نیز برای تشکیل سلسلهمراتب داشته باشند.
مالیاتها¶
همچنین ببینید
برای افزودن مالیاتها، ابتدا باید موقعیتهای مالی و گروههای مالیاتی را مشخص کنید. معمولاً برای هر نرخ مالیاتی فقط به یک گروه مالیاتی نیاز دارید، بهجز برای ۰٪، زیرا اغلب باید بین مالیاتهای معاف، ۰٪، مشمولنبوده و ... تمایز قائل شوید. این مدل تنها دو فیلد الزامی دارد: name و country. فایل data/template/account.tax.group-xx.csv را ایجاد کنید و گروهها را فهرست کنید.
مالیاتها باید حداقل به یک موقعیت مالی تعلق داشته باشند، اما میتوانند توسط چند موقعیت به اشتراک گذاشته شوند. اگر میخواهید مالیات بین همهٔ موقعیتهای مالی به اشتراک گذاشته شود، فیلد را خالی بگذارید.
اکنون میتوانید مالیاتها را از طریق فایل data/template/account.tax-xx.csv اضافه کنید. اولین مالیاتی که بهعنوان خرید/فروش تعریف میکنید، به مالیات پیشفرض خرید/فروش برای محصولات شما نیز تبدیل میشود.
یک مالیات میتواند جایگزین مالیات دیگری نیز باشد. این جایگزینی زمانی اعمال میشود که موقعیت مالی مقصد استفاده شود.
گزارش مالیاتی¶
گزارش مالیاتی در اپلیکیشن Invoicing (account) اعلان میشود، اما گزارش تنها زمانی قابل دسترسی است که Accounting (account_accountant) نصب باشد.
همچنین ببینید
در بخش قبل، فیلدهای invoice_repartition_line_ids یا refund_repartition_line_ids را دیدید و احتمالاً چیزی از آنها متوجه نشدید. خبر خوب: شما در این عدم درک تنها نیستید. خبر بد: باید کمی آن را بفهمید. این موضوع پیچیده است. در واقع:
accounting_localization/tax_report.dot > Graph not rendered because `dot` is not installed
نسخهٔ ساده این است که در قالب مالیات، در خطوط بازتوزیع فاکتور/بازپرداخت مشخص میکنید که آیا پایه یا درصدی از مالیات باید در کدام خط گزارش گزارش شود (از طریق فیلدهای minus/plus_report_line_ids). همچنین زمانی که پیکربندی مالیات را در رابط Odoo بررسی کنید، روشن میشود (یا اسناد Tax References, Tax Repartition References را بررسی کنید).
بنابراین، پس از پیکربندی صحیح مالیاتها، تنها کافی است فایل data/account_tax_report_data.xml را با یک رکورد برای account.report خود اضافه کنید. برای اینکه بهعنوان گزارش مالیاتی در نظر گرفته شود، باید root_report_id صحیح را برای آن فراهم کنید.
<odoo>
<record id="tax_report" model="account.report">
<field name="name">Tax Report</field>
<field name="root_report_id" ref="account.generic_tax_report"/>
<field name="country_id" ref="base.XX"/>
</record>
...
</odoo>
... که به دنبال آن اعلان خطوط آن، بهصورت رکوردهای account.report.line میآید.
موقعیتهای مالی¶
همچنین ببینید
موقعیتهای مالی را در فایل data/template/account.fiscal.position-xx.csv مشخص کنید. اولین موقعیت مالی که با کشور شرکت تطابق داشته باشد، بهعنوان موقعیت مالی داخلی در نظر گرفته میشود.
گامهای نهایی¶
در نهایت، میتوانید یک شرکت دموی اضافه کنید تا بومیسازی بهسادگی در حالت دمو قابل آزمایش باشد.
گزارشهای حسابداری¶
همچنین ببینید
گزارشهای حسابداری باید از طریق یک ماژول جداگانه l10n_XX_reports اضافه شوند که باید در مخزن enterprise قرار گیرد.
فایل پایهٔ __manifest__.py برای چنین ماژولی به این شکل خواهد بود:
{
"name": "COUNTRY - Accounting Reports",
"category": "Accounting/Localizations/Reporting",
"version": "1.0.0",
"author": "Odoo S.A.",
"license": "OEEL-1",
"depends": [
"l10n_XX", "account_reports"
],
"data": [
"data/balance_sheet.xml",
"data/profit_and_loss.xml",
],
"auto_install": True,
}
مرور کارکردی گزارشهای مالی در اینجا قرار دارد: گزارشگیری.
چند نمونهٔ خوب:
میتوانید معنای فیلدها را در اینجا بررسی کنید:
اگر به گزارش خود یک root_report_id داده باشید، اکنون در انتخابکنندهٔ نوع آن در دسترس است. در غیر این صورت، هنوز باید یک آیتم منو برای آن اضافه کنید. یک آیتم منوی پیشفرض را میتوان از نمای فرم گزارش با کلیک روی ایجاد کرد. سپس باید صفحه را برای دیدن آن بازنشانی کنید. بهصورت جایگزین، برای ایجاد یک بخش اختصاصی برای یک گزارش کاملاً جدید در منوی Reporting، باید یک رکورد جدید ir.ui.menu (معمولاً در ماژول اصلی l10n_XX) و یک ir.actions.client جدید (معمولاً در فایل XML گزارش جدید) ایجاد کنید که account.report را با report id جدید فراخوانی میکند. سپس منوی جدید را بهعنوان فیلد parent_id در مدل اکشن تنظیم کنید.