Public release from ruodoo-project: 19.0 - 2026-11-01 22:52:25 UTC
This commit is contained in:
177
rsbu_chart_of_accounts/wizards/rsbu_account_load_wizard.py
Normal file
177
rsbu_chart_of_accounts/wizards/rsbu_account_load_wizard.py
Normal file
@@ -0,0 +1,177 @@
|
||||
from odoo import fields, models, _
|
||||
|
||||
# Типовой план счетов по Приказу Минфина № 94н.
|
||||
# Формат: (код, наименование, признак, [субконто]).
|
||||
# Признак: A - активный, P - пассивный, AP - активно-пассивный, OB - забалансовый.
|
||||
# Субконто: p - partner, pr - product, u - user, e - employee.
|
||||
CHART_94N = [
|
||||
# Раздел I. Внеоборотные активы
|
||||
('01', 'Основные средства', 'A', []),
|
||||
('02', 'Амортизация основных средств', 'P', []),
|
||||
('03', 'Доходные вложения в материальные ценности', 'A', []),
|
||||
('04', 'Нематериальные активы', 'A', []),
|
||||
('05', 'Амортизация нематериальных активов', 'P', []),
|
||||
('07', 'Оборудование к установке', 'A', []),
|
||||
('08', 'Вложения во внеоборотные активы', 'A', []),
|
||||
('09', 'Отложенные налоговые активы', 'A', []),
|
||||
# Раздел II. Производственные запасы
|
||||
('10', 'Материалы', 'A', ['pr']),
|
||||
('11', 'Животные на выращивании и откорме', 'A', []),
|
||||
('14', 'Резервы под снижение стоимости материальных ценностей', 'P', []),
|
||||
('15', 'Заготовление и приобретение материальных ценностей', 'A', []),
|
||||
('16', 'Отклонение в стоимости материальных ценностей', 'AP', []),
|
||||
('19', 'Налог на добавленную стоимость по приобретённым ценностям', 'A', []),
|
||||
# Раздел III. Затраты на производство
|
||||
('20', 'Основное производство', 'A', []),
|
||||
('21', 'Полуфабрикаты собственного производства', 'A', []),
|
||||
('23', 'Вспомогательные производства', 'A', []),
|
||||
('25', 'Общепроизводственные расходы', 'A', []),
|
||||
('26', 'Общехозяйственные расходы', 'A', []),
|
||||
('28', 'Брак в производстве', 'A', []),
|
||||
('29', 'Обслуживающие производства и хозяйства', 'A', []),
|
||||
# Раздел IV. Готовая продукция и товары
|
||||
('40', 'Выпуск продукции (работ, услуг)', 'AP', []),
|
||||
('41', 'Товары', 'A', ['pr']),
|
||||
('42', 'Торговая наценка', 'P', []),
|
||||
('43', 'Готовая продукция', 'A', ['pr']),
|
||||
('44', 'Расходы на продажу', 'A', []),
|
||||
('45', 'Товары отгруженные', 'A', []),
|
||||
('46', 'Выполненные этапы по незавершённым работам', 'A', []),
|
||||
# Раздел V. Денежные средства
|
||||
('50', 'Касса', 'A', []),
|
||||
('51', 'Расчётные счета', 'A', []),
|
||||
('52', 'Валютные счета', 'A', []),
|
||||
('55', 'Специальные счета в банках', 'A', []),
|
||||
('57', 'Переводы в пути', 'A', []),
|
||||
('58', 'Финансовые вложения', 'A', []),
|
||||
('59', 'Резервы под обесценение финансовых вложений', 'P', []),
|
||||
# Раздел VI. Расчёты
|
||||
('60', 'Расчёты с поставщиками и подрядчиками', 'AP', ['p']),
|
||||
('62', 'Расчёты с покупателями и заказчиками', 'AP', ['p']),
|
||||
('63', 'Резервы по сомнительным долгам', 'P', []),
|
||||
('66', 'Расчёты по краткосрочным кредитам и займам', 'P', ['p']),
|
||||
('67', 'Расчёты по долгосрочным кредитам и займам', 'P', ['p']),
|
||||
('68', 'Расчёты по налогам и сборам', 'AP', []),
|
||||
('69', 'Расчёты по социальному страхованию и обеспечению', 'AP', []),
|
||||
('70', 'Расчёты с персоналом по оплате труда', 'P', ['e']),
|
||||
('71', 'Расчёты с подотчётными лицами', 'AP', ['e']),
|
||||
('73', 'Расчёты с персоналом по прочим операциям', 'AP', ['e']),
|
||||
('75', 'Расчёты с учредителями', 'AP', ['p']),
|
||||
('76', 'Расчёты с разными дебиторами и кредиторами', 'AP', ['p']),
|
||||
('77', 'Отложенные налоговые обязательства', 'P', []),
|
||||
('79', 'Внутрихозяйственные расчёты', 'AP', []),
|
||||
# Раздел VII. Капитал
|
||||
('80', 'Уставный капитал', 'P', []),
|
||||
('81', 'Собственные акции (доли)', 'A', []),
|
||||
('82', 'Резервный капитал', 'P', []),
|
||||
('83', 'Добавочный капитал', 'P', []),
|
||||
('84', 'Нераспределённая прибыль (непокрытый убыток)', 'AP', []),
|
||||
('86', 'Целевое финансирование', 'P', []),
|
||||
# Раздел VIII. Финансовые результаты
|
||||
('90', 'Продажи', 'AP', []),
|
||||
('91', 'Прочие доходы и расходы', 'AP', []),
|
||||
('94', 'Недостачи и потери от порчи ценностей', 'A', []),
|
||||
('96', 'Резервы предстоящих расходов', 'P', []),
|
||||
('97', 'Расходы будущих периодов', 'A', []),
|
||||
('98', 'Доходы будущих периодов', 'P', []),
|
||||
('99', 'Прибыли и убытки', 'AP', []),
|
||||
# Забалансовые счета
|
||||
('001', 'Арендованные основные средства', 'OB', []),
|
||||
('002', 'Товарно-материальные ценности, принятые на ответственное хранение', 'OB', []),
|
||||
('003', 'Материалы, принятые в переработку', 'OB', []),
|
||||
('004', 'Товары, принятые на комиссию', 'OB', []),
|
||||
('005', 'Оборудование, принятое для монтажа', 'OB', []),
|
||||
('006', 'Бланки строгой отчётности', 'OB', []),
|
||||
('007', 'Списанная в убыток задолженность неплатёжеспособных дебиторов', 'OB', []),
|
||||
('008', 'Обеспечения обязательств и платежей полученные', 'OB', []),
|
||||
('009', 'Обеспечения обязательств и платежей выданные', 'OB', []),
|
||||
('010', 'Износ основных средств', 'OB', []),
|
||||
('011', 'Основные средства, сданные в аренду', 'OB', []),
|
||||
]
|
||||
|
||||
# Ключевые субсчета по регламенту (../../docs/research/08-business-process-usn.md).
|
||||
# Формат: (код субсчёта, наименование, признак, [субконто], код родителя).
|
||||
SUBACCOUNTS_94N = [
|
||||
('62.01', 'Расчёты с покупателями и заказчиками', 'A', ['p'], '62'),
|
||||
('62.АВ', 'Авансы полученные', 'P', ['p'], '62'),
|
||||
('68.НДС', 'НДС', 'AP', [], '68'),
|
||||
('68.НДФЛ', 'НДФЛ', 'P', [], '68'),
|
||||
('69.ЕТ', 'Страховые взносы по единому тарифу', 'P', [], '69'),
|
||||
('69.ТР', 'Взносы на травматизм', 'P', [], '69'),
|
||||
('76.АВ', 'НДС по авансам полученным', 'A', ['p'], '76'),
|
||||
('90.01', 'Выручка', 'P', [], '90'),
|
||||
('90.02', 'Себестоимость продаж', 'A', [], '90'),
|
||||
('90.03', 'Налог на добавленную стоимость', 'A', [], '90'),
|
||||
('90.08', 'Управленческие расходы', 'A', [], '90'),
|
||||
('90.09', 'Прибыль/убыток от продаж', 'AP', [], '90'),
|
||||
('91.01', 'Прочие доходы', 'P', [], '91'),
|
||||
('91.02', 'Прочие расходы', 'A', [], '91'),
|
||||
('91.09', 'Сальдо прочих доходов и расходов', 'AP', [], '91'),
|
||||
]
|
||||
|
||||
KIND_MAP = {'A': 'active', 'P': 'passive', 'AP': 'active_passive', 'OB': 'off_balance'}
|
||||
SUBCONTO_FIELD = {'p': 'subconto_partner', 'pr': 'subconto_product',
|
||||
'u': 'subconto_user', 'e': 'subconto_employee'}
|
||||
|
||||
|
||||
class RsbuAccountLoadWizard(models.TransientModel):
|
||||
"""Визард загрузки типового плана счетов 94н для компании."""
|
||||
_name = 'rsbu.account.load.wizard'
|
||||
_description = 'РСБУ — Загрузка типового плана счетов'
|
||||
|
||||
company_id = fields.Many2one(
|
||||
'res.company', string='Компания', required=True,
|
||||
default=lambda self: self.env.company,
|
||||
)
|
||||
overwrite = fields.Boolean(
|
||||
string='Не создавать существующие',
|
||||
default=True,
|
||||
help='Пропускать счета, код которых уже есть у компании.',
|
||||
)
|
||||
|
||||
def _subconto_vals(self, subconto):
|
||||
vals = {}
|
||||
for key in subconto:
|
||||
vals[SUBCONTO_FIELD[key]] = True
|
||||
return vals
|
||||
|
||||
def action_load(self):
|
||||
self.ensure_one()
|
||||
Account = self.env['rsbu.account']
|
||||
company = self.company_id
|
||||
existing = {a.code: a for a in Account.with_context(
|
||||
active_test=False).search([('company_id', '=', company.id)])}
|
||||
|
||||
# 1) Синтетические счета.
|
||||
for code, name, kind, subconto in CHART_94N:
|
||||
if code in existing:
|
||||
continue
|
||||
vals = {
|
||||
'code': code, 'name': name,
|
||||
'account_kind': KIND_MAP[kind],
|
||||
'company_id': company.id,
|
||||
}
|
||||
vals.update(self._subconto_vals(subconto))
|
||||
existing[code] = Account.create(vals)
|
||||
|
||||
# 2) Субсчета (с привязкой к родителю).
|
||||
for code, name, kind, subconto, parent_code in SUBACCOUNTS_94N:
|
||||
if code in existing:
|
||||
continue
|
||||
parent = existing.get(parent_code)
|
||||
vals = {
|
||||
'code': code, 'name': name,
|
||||
'account_kind': KIND_MAP[kind],
|
||||
'company_id': company.id,
|
||||
'parent_id': parent.id if parent else False,
|
||||
}
|
||||
vals.update(self._subconto_vals(subconto))
|
||||
existing[code] = Account.create(vals)
|
||||
|
||||
return {
|
||||
'type': 'ir.actions.act_window',
|
||||
'name': _('План счетов РСБУ'),
|
||||
'res_model': 'rsbu.account',
|
||||
'view_mode': 'list,form',
|
||||
'domain': [('company_id', '=', company.id)],
|
||||
}
|
||||
Reference in New Issue
Block a user