
У нас была рабочая, детально проработанная российская бухгалтерская локализация для Odoo 17 Community — план счетов, налоги, печатные формы, отчётность. Когда вышла Odoo 19, официальной русской локализации под неё ещё не было, поэтому мы полностью перенесли свой модуль на новую версию, а не стали ждать.
Что входит в локализацию
- План счетов РФ (Приказ МФ РФ № 94н);
- налоги: НДС 20%, 10%, 0%, без НДС; УСН 6% и УСН 15%;
- справочники ОКПО, ОКТМО, ОКВЭД, ОКОПФ;
- платёжные поручения (форма 0401060);
- печатные формы: Счёт-фактура, УПД, ТОРГ-12, Акт выполненных работ;
- отчёты: Оборотно-сальдовая ведомость, Бухгалтерский баланс (Форма 1), Отчёт о прибылях и убытках (Форма 2);
- реквизиты организации (ИНН, КПП, ОГРН, расчётный счёт, БИК), основные средства и амортизация, бюджетирование, анализ задолженности по срокам, контроль дебиторской задолженности, повторяющиеся платежи, блокировка периода.
Совместимость API — за три с лишним года Odoo многое поменялось
Между Odoo 17 и Odoo 19 накопился десяток мелких, но ломающих совместимость изменений ядра, и модуль на них не запускался без правок:
- поле
account.account.deprecatedубрали из ядра — заменили на работу через полеactive; account.account.company_idстало множественным полемcompany_ids;- у налоговых позиций (
account.fiscal.position) полеtax_idsтеперь простой M2M наaccount.tax, а сопоставление «откуда → куда» переехало вaccount.tax.original_tax_ids; - из
ir.cronубрали поляnumbercall/doall; - в view-архитектуре тег
<tree>переименован в<list>, у<group>в search-view больше нет атрибутов expand/string, встречались дублирующиеся имена фильтров; - сокращённая запись
<report .../>в XML стала недопустимой — пришлось переписать явной записьюir.actions.report; - несколько external id в правах доступа (
ir.model.access.csv) и часть ссылок на action в меню не совпадали с реальными именами моделей/экшенов; - две вьюхи вообще ссылались на модели, которых давно нет ни в одной части модуля (
asset.asset.report,res.partner.followup_status) — такие файлы просто убрали.
Всего правки затронули 43 файла — в основном точечные, но их надо было найти по одной: Odoo при установке останавливается на первой же ошибке.
Перевод интерфейса — в три прохода
У исходного модуля файл переводов (i18n/ru.po) существовал только формально — в нём был один заголовок и ни одной переведённой строки, поэтому вся локализация фактически работала на английском независимо от языка интерфейса. Перевод делался в три захода:
- около 320 строк — названия полей, действий, меню, отчётов, вариантов выбора и описания моделей, взятые из Python-кода;
- ещё около 110 строк — подписи кнопок, вкладок и групп, которые прописаны прямо в XML вьюхах и не попадают в первый проход;
- отдельно — заголовки нескольких визардов и отчётов, у которых не было формы для какого-то вида отображения (например, kanban): Odoo в этом случае показывает как заголовок значение атрибута
_descriptionпрямо из Python-класса, а это обычная строка, которая никогда не проходит через .po-перевод в принципе — её пришлось перевести прямо в исходном коде.
Заодно нашли и закрыли скрытый баг: у четырёх моделей (financial.report, account.common.account.report, account.common.partner.report, account.account.type) не было ни одной записи в правах доступа — без права на чтение Odoo просто не показывает пункт меню вообще никому, независимо от языка. Из-за этого их и не было видно, что там оставался непереведённый текст: увидеть их можно было только после того, как права появились.
Меню без дублей
Четыре пункта меню из исходного модуля были когда-то прицеплены прямо к базовым меню ядра (account.menu_finance_reports, account.root_payment_menu) и указывали на те же самые действия, что уже были собраны в собственном дереве меню «Локализация РФ». В интерфейсе одни и те же ссылки показывались дважды — убрали дубли, оставили только собственное дерево меню как единственный источник правды.
Итог
Модуль версии 19.0.1.0.0 установлен и проверен на живом инстансе Odoo 19.0: интерфейс полностью на русском, дублирующихся пунктов меню нет, ни один раздел не оказывается скрытым из-за отсутствующих прав доступа.