Три уровня «русскости» системы: интерфейс, документы, учёт
Меня зовут Евгений Семёнов, я технический директор ITfresh. Мы обслуживаем компании до 50 рабочих мест в Москве, держим клиентские серверы в дата-центре МТС и не первый год внедряем Odoo как операционную систему бизнеса. Как только речь заходит про переход на Odoo, у клиента почти всегда всплывает один и тот же вопрос — иногда с тревогой в голосе: «А как же наши счета, УПД и вообще бухгалтерия? Это же западная программа». Вопрос правильный, и отвечать на него надо не маркетинговыми лозунгами, а как инженер-практик. Именно этим я и займусь в этой статье.
Чтобы разговор не превратился в кашу, я предлагаю сразу разложить «русскость» любой зарубежной системы на три независимых уровня. Их постоянно путают между собой, и из-за этой путаницы рождаются либо необоснованные страхи, либо, наоборот, наивные ожидания. Вот эти уровни.
- Уровень интерфейса. На каком языке подписаны кнопки, поля, меню и подсказки. Видит ли менеджер «Продажи» или «Sales», «Контрагенты» или «Contacts». Это чисто вопрос перевода, и он к учёту не имеет никакого отношения.
- Уровень документов. Может ли система напечатать привычные российские бумаги — счёт на оплату, УПД, ТОРГ-12, акт, доверенность — в том виде, который примут ваш клиент и его бухгалтерия. Это уже вопрос печатных форм и шаблонов.
- Уровень учёта. Ведёт ли система регламентированный бухгалтерский и налоговый учёт по российским правилам, считает ли НДС, формирует ли отчётность в ФНС и фонды. Это самый глубокий и самый капризный слой, потому что правила здесь меняются постоянно.
И вот главный тезис, ради которого я эти уровни развожу: Odoo закрывает первый уровень из коробки, второй — сторонними модулями, а третий — не закрывает вовсе. И это нормально. Более того, я считаю такую границу здоровой, а не ущербной. Ниже разберу каждый уровень честно, без попыток выдать желаемое за действительное, и покажу рабочую архитектуру, в которой Odoo и 1С не конкурируют, а делят обязанности.
Сразу зафиксирую про версию, чтобы не было разночтений. Актуальная на момент написания — Odoo 19, представленная на конференции Odoo Experience в Брюсселе в сентябре 2025 года. Community-редакция распространяется под свободной лицензией LGPLv3 и не имеет лимита на число пользователей — вы платите только за сервер и за работу тех, кто настроит систему. Всё, о чём я говорю дальше про интерфейс и обмен данными, относится именно к свободной редакции.
Интерфейс — самый простой уровень, решается галочкой
С языком интерфейса всё хорошо, и это первое, что я показываю клиенту, чтобы снять тревогу. Официальный русский перевод в Odoo есть, он входит в поставку и ведётся силами вендора и сообщества. Включается элементарно: Настройки → Языки, добавляете русский как язык системы, а в профиле конкретного пользователя выставляете его как предпочитаемый. После этого меню, названия сущностей, подсказки и большинство системных сообщений становятся русскими.
Качество перевода — рабочее. Менеджер, который целый день живёт в карточках сделок и заказов, ни разу не спотыкается об английский. Отдельные редкие технические строки в глубоких настройках иногда остаются на английском, но это не то, с чем сталкивается рядовой пользователь. Важно: перевод обновляется вместе с релизами платформы, то есть это не самодельный костыль, который отвалится на следующем апдейте, а часть официального продукта. Первый уровень «русскости» закрыт полностью и бесплатно.
Печатные формы и документы РФ: чем закрывается второй уровень
Теперь второй уровень — документы. Здесь начинается самое интересное и самое непонятое. В стандартной поставке Odoo печатные формы западные: их инвойсы и накладные не совпадают с тем, что требует российский документооборот. Но это не тупик — это ровно тот слой, который закрывается модулями. Разберу по порядку.
Что реально нужно торговой компании
Прежде чем гнаться за «полной локализацией», полезно честно выписать, какие бумаги торговая компания печатает каждый день. В большинстве проектов список короткий и предсказуемый:
- Счёт на оплату — самый частый документ, с ним менеджер работает постоянно.
- УПД (универсальный передаточный документ) — закрывает и накладную, и счёт-фактуру одновременно, поэтому у многих это основной отгрузочный документ.
- Товарная накладная ТОРГ-12 — если контрагент по старинке требует именно её, а не УПД.
- Акт выполненных работ / оказанных услуг — для тех, кто продаёт не только товар.
- Доверенность на получение ТМЦ — для отгрузок через представителя.
Ключевая мысль: вам почти никогда не нужна «вся российская локализация целиком». Вам нужны вот эти пять-шесть форм, которые печатает менеджер по продажам. Это принципиально меняет масштаб задачи — вместо неподъёмного «перепишем весь учёт под РФ» получается конкретный, обозримый набор шаблонов.
Экосистема Rudoo и модули российских интеграторов
Этими печатными формами занимается не сам вендор Odoo, а сообщество и российские интеграторы. Есть отраслевая экосистема Rudoo и отдельные команды, которые выпускают модули локализации: русские печатные формы, справочники, доработки под наши реалии. Модули ставятся поверх стандартной Odoo и добавляют кнопки «Печать УПД», «Печать счёта» и так далее.
И вот здесь — принципиальное преимущество открытого кода, о котором я всегда напоминаю клиенту. Исходники модуля открыты, и перед установкой мы их читаем. Это не «чёрная коробка с сайта», которую ставишь на веру. Прежде чем взять модуль в продакшен, мы проверяем несколько вещей:
- Под какую версию Odoo он написан. Модуль под 16-ю ветку не встанет на 19-ю без правок — это первое, что смотрим.
- Живой ли он. Когда были последние коммиты, реагируют ли авторы на проблемы, есть ли обновления под свежие релизы.
- Как устроен код. Аккуратный ли, нет ли грубых хаков, которые сломают обновление всей системы; не лезет ли модуль туда, куда не следует.
- Совместимость с другими модулями. Не конфликтует ли он с тем, что уже стоит.
Реквизиты компании: ИНН, КПП, ОГРН как поля партнёра
Отдельная мелочь, о которую спотыкаются на старте. В карточке контрагента Odoo из коробки нет привычных нам полей ИНН, КПП, ОГРН — там западная модель реквизитов. Решается это добавлением дополнительных полей к модели партнёра (res.partner): либо тем же локализационным модулем, либо парой строк доработки. После этого реквизиты хранятся у каждого контрагента и подставляются в печатные формы. Задача рутинная, делается один раз на внедрении, но забыть про неё нельзя — без ИНН/КПП ни один российский документ не соберётся корректно.
Таблица: документ → чем закрывается
Сведу второй уровень в наглядную таблицу — что за форма и откуда она берётся в Odoo.
| Документ | Чем закрывается в Odoo | Где обычно ведут по факту |
|---|---|---|
| Счёт на оплату | Модуль локализации (печатная форма) или стандартный инвойс с доработкой шаблона | Можно в Odoo или в 1С |
| УПД | Сторонний модуль печатных форм РФ | Чаще в 1С (первичка учёта) |
| ТОРГ-12 | Сторонний модуль печатных форм РФ | Чаще в 1С |
| Акт работ/услуг | Модуль локализации или кастомный шаблон отчёта | Odoo или 1С |
| Доверенность на ТМЦ | Кастомный шаблон отчёта | Odoo или 1С |
| Счёт-фактура, книги покупок/продаж | Не закрывается разумной ценой | Только 1С |
Обратите внимание на нижнюю строку: счёт-фактуру, книги покупок и продаж, декларации я сознательно вывел за границу Odoo. Это уже не «печатная форма», а регламентированный учёт — третий уровень, к которому мы переходим. И именно про него дальше самый важный разговор.
Почему мы НЕ тащим бухгалтерию РФ в Odoo
А теперь тезис, который я защищаю перед каждым клиентом, даже когда он изначально хочет «всё в одной системе». Регламентированный бухгалтерский и налоговый учёт РФ мы в Odoo не переносим, и это не компромисс от бессилия, а инженерно правильное решение. Объясню на пальцах, почему.
Причина первая — регуляторка меняется постоянно. Формы отчётности, ставки, правила расчёта НДС, коды, форматы электронных документов для ФНС корректируются буквально ежеквартально, а иногда и чаще. Бухгалтер живёт в этом потоке изменений. Держать учётный контур в актуальном состоянии — это не разовая настройка, а бесконечная гонка за законодательством.
Причина вторая — за 1С эту гонку бежит вендор. Когда меняется форма или правило, фирма-разработчик 1С выпускает обновление конфигурации, и оно прилетает всем пользователям в рамках сопровождения. Вы не пишете код — за вас его написали и протестировали на всю страну. В Odoo регламентированного учёта РФ от вендора нет вовсе (полноценная бухгалтерия есть только в Enterprise, но она не про наши формы). Значит, самодельный бухконтур в Odoo пришлось бы сопровождать вам — точнее, вашему интегратору, за ваши деньги, при каждом изменении закона.
Считаем стоимость владения на горизонте трёх лет
Давайте на цифрах, пусть и модельных, — важны не абсолютные суммы, а соотношение. Сравним две схемы: «самодельная бухгалтерия внутри Odoo» против «учёт в 1С, продажи в Odoo». Горизонт — три года, потому что именно на нём проявляется разница между разовыми и постоянными затратами.
| Статья затрат (3 года) | Бухгалтерия внутри Odoo | Учёт в 1С + продажи в Odoo |
|---|---|---|
| Лицензия/подписка учётной системы | 0 ₽ за лицензию, но… | Лицензия 1С + ИТС — предсказуемо |
| Разработка учётного контура | Дорогой разовый проект «с нуля» | Не требуется — учёт готов у вендора |
| Актуализация под изменения закона | Постоянные платные доработки каждый квартал | Входит в сопровождение 1С (вендор) |
| Риск ошибки в отчётности | Высокий — контур самодельный | Низкий — проверено на всей стране |
| Печать первички и продажи | В Odoo | Первичка в 1С, воронка и склад в Odoo |
Вывод из таблицы очевиден. Строка «0 ₽ за лицензию» в левой колонке обманчива: за ней прячется дорогая разработка и, что хуже, вечное содержание учётного контура под меняющуюся регуляторку. Правая схема выигрывает не потому, что 1С дешевле сама по себе, а потому что вы не платите за то, что вендор 1С уже сделал и сопровождает за вас. Каждая система занимается тем, в чём она сильна: Odoo — операционкой и продажами, 1С — регламентированным учётом. Граница между ними проходит ровно там, где надо, и держать её — самое разумное, что можно сделать.
Архитектура обмена Odoo ↔ 1С на практике
Раз системы две, между ними нужно наладить обмен данными — чтобы не вбивать одно и то же дважды. Здесь нет единственно правильного способа: выбор зависит от объёма документов и зрелости процессов. Я обычно предлагаю две схемы — «минимум» и «автомат» — и честно объясняю, где проходит граница между ними.
Вариант «минимум» — регулярная выгрузка в CSV/Excel
Самая простая и самая недооценённая схема. Из Odoo регулярно (например, раз в день или раз в неделю) выгружаются реализации и поступления в файл CSV или Excel, а бухгалтер загружает их в 1С штатными средствами загрузки из табличного документа. Никакого программирования, никаких серверов обмена — просто дисциплина выгрузки.
Когда этого достаточно? По моему опыту — примерно до 200 документов в месяц. Если у вас поток отгрузок в этих пределах, ручная выгрузка-загрузка занимает у бухгалтера считанные минуты в день и работает абсолютно надёжно, потому что ломаться там просто нечему. Я специально начинаю с этого варианта: очень часто клиент приходит с запросом «постройте нам сложную автоматическую интеграцию», а после разбора реального объёма оказывается, что файловая выгрузка закрывает задачу с запасом и без лишних затрат. Не усложняйте там, где можно не усложнять.
Вариант «автомат» — External API Odoo
Когда документов реально много или нужна оперативность (данные должны попадать в 1С в течение минут, а не раз в день), включаем автоматический обмен через External API Odoo. У Odoo есть два равнозначных протокола для внешнего доступа:
- XML-RPC — классический, с эндпоинтами
/xmlrpc/2/common(аутентификация) и/xmlrpc/2/object(работа с данными). Методauthenticateвозвращает идентификатор пользователя, аexecute_kwвызывает операции над моделями. - JSON-RPC — то же самое, но поверх JSON; удобнее, если интеграция пишется на стороне веб-сервиса.
Через этот API можно читать и писать практически любые модели Odoo: контрагентов (res.partner), номенклатуру (product.product), заказы продаж (sale.order), проводки и счета (account.move), складские перемещения (stock.picking). Архитектурно обмен строится одним из двух способов: либо отдельный HTTP-сервис-посредник, который по расписанию ходит в Odoo и в 1С и перекладывает данные, либо обработка на стороне самой 1С, которая через HTTP-запросы обращается к API Odoo. Оба варианта рабочие; выбор зависит от того, где у клиента сильнее компетенция сопровождения.
Чтобы это не звучало абстрактно, вот короткий и корректный пример на Python из стандартной библиотеки xmlrpc.client — читаем список контрагентов из Odoo:
import xmlrpc.client
url = "https://odoo.example.ru"
db = "prod"
username = "integration@example.ru"
api_key = "СЕКРЕТНЫЙ_КЛЮЧ"
# 1. Аутентификация — получаем uid
common = xmlrpc.client.ServerProxy(f"{url}/xmlrpc/2/common")
uid = common.authenticate(db, username, api_key, {})
# 2. Читаем контрагентов (модель res.partner)
models = xmlrpc.client.ServerProxy(f"{url}/xmlrpc/2/object")
partners = models.execute_kw(
db, uid, api_key,
"res.partner", "search_read",
[[["customer_rank", ">", 0]]],
{"fields": ["name", "vat", "email"], "limit": 100},
)
for p in partners:
print(p["name"], p.get("vat"))
Здесь search_read сразу и ищет записи по условию, и возвращает нужные поля. Точно так же через execute_kw вызываются create (создать запись), write (изменить) и read. То есть весь обмен строится на нескольких предсказуемых методах — освоив их, вы можете синхронизировать любую сущность в обе стороны.
Что синхронизируем и в какую сторону мастер-данные
Самый частый источник боли в интеграциях — не техника, а неопределённость с тем, какая система «главная» по каждому справочнику. Если это не решить на берегу, вы получите дубли и расхождения. Я всегда фиксирую направление мастер-данных явно, ещё до написания кода:
| Сущность | Направление обмена | Кто мастер |
|---|---|---|
| Контрагенты | Odoo ↔ 1С (по договорённости) | Обычно 1С (там реквизиты и договоры) |
| Номенклатура | 1С → Odoo или Odoo → 1С | Один источник, выбирается на старте |
| Реализации (продажи) | Odoo → 1С | Odoo (там ведут сделки) |
| Поступления (закупки) | Odoo → 1С или 1С → Odoo | Зависит от того, где ведут закупки |
| Платежи | 1С → Odoo (факт оплаты) | 1С (банк и касса там) |
Правило простое: у каждого справочника ровно один хозяин. Контрагенты и платежи логично держать мастером в 1С — там договоры, реквизиты, банк. Реализации рождаются в Odoo, где менеджеры ведут продажи, и уезжают в 1С для учёта. Номенклатуру выбираем одним источником и не редактируем в двух местах одновременно. Как только это зафиксировано письменно, интеграция перестаёт быть источником хаоса.
Миграция стартовых данных: номенклатура, контрагенты, остатки
Отдельная большая тема — как вообще завести в новую Odoo первоначальные данные. У клиента они почти всегда лежат в Excel: прайсы, справочник контрагентов, остатки склада. Хорошая новость — у Odoo есть штатный импорт, и в большинстве случаев внешние инструменты не нужны.
Штатный импорт CSV/XLSX и маппинг колонок
Импорт встроен в интерфейс: почти в любом списочном представлении (контрагенты, товары) есть кнопка загрузки из файла CSV или XLSX. Вы выбираете файл, и Odoo показывает сопоставление колонок: слева — заголовки из вашего Excel, справра — поля модели Odoo, куда эти данные лягут. Система пытается угадать соответствие по названиям, а вы поправляете вручную. Это наглядно и не требует программирования.
Ключевой приём, который я всегда закладываю, — External ID (внешний идентификатор). Это уникальный код записи, который вы задаёте сами в отдельной колонке файла. Зачем он нужен: если импортировать тот же файл повторно, Odoo по External ID поймёт, что запись уже существует, и обновит её, а не создаст дубль. Это делает загрузку идемпотентной — можно перезаливать данные сколько угодно раз без размножения записей. Кроме того, через External ID удобно связывать сущности: например, в файле товаров сослаться на категорию по её внешнему коду.
Начальные остатки склада через инвентаризацию
Остатки товара на складе не импортируют как «поле количества» — это неверно с точки зрения учёта. Правильный путь: сначала загрузить саму номенклатуру, а затем провести инвентаризацию в модуле склада. В инвентаризации вы указываете фактическое количество каждой позиции, и Odoo сама формирует корректные складские движения, которые выставляют начальные остатки. Так система остаётся в согласованном состоянии, а не получает «остатки из ниоткуда».
Типичные ошибки импорта
За годы миграций набор граблей стал предсказуемым. Предупреждаю заранее, чтобы вы на них не наступили:
- Дубли контрагентов. Самая частая беда. Один и тот же клиент в старом Excel записан то как «ООО Ромашка», то как «Ромашка, ООО», то с лишним пробелом. Без предварительной чистки и без External ID вы получите три карточки вместо одной. Чистить справочник надо до импорта.
- Единицы измерения. Odoo строга к единицам: если в файле «шт», «штука» и «шт.» встречаются вперемешку, часть строк не сопоставится. Единицы надо привести к единому справочнику заранее.
- Кодировки. Классика русскоязычного импорта — CSV в кодировке Windows-1251 вместо UTF-8, из-за чего кириллица превращается в «кракозябры». Сохраняйте файлы в UTF-8 и проверяйте первые строки после загрузки.
- Числовые форматы. Запятая как десятичный разделитель, пробелы-разделители тысяч, цены как текст — всё это ломает импорт сумм. Форматы колонок надо привести к числу до загрузки.
Интеграции, которые просят все
Помимо обмена с 1С, есть набор интеграций, про которые спрашивает почти каждый клиент. Пройдусь по ним коротко и по делу — что реально закрывается в Odoo и на что обратить внимание.
Почта: сборщик писем прямо в CRM
Odoo умеет собирать входящую почту по IMAP и отправлять по SMTP. Практическая ценность в том, что переписка привязывается к карточкам сделок и контрагентов: письмо от клиента автоматически «прилипает» к его сделке, и вся история общения лежит в одном месте, а не разбросана по личным ящикам менеджеров. Настраивается это стандартными средствами почтового шлюза Odoo — указываете параметры входящего и исходящего серверов, и переписка начинает жить внутри CRM.
Телефония: SIP-виджеты и модули OCA
С телефонией два пути. Первый — SIP-виджеты, которые позволяют звонить прямо из карточки клиента кликом по номеру и фиксировать звонки. Второй — модули сообщества OCA (Odoo Community Association), которые связывают Odoo с популярными в РФ АТС и облачными телефониями. Здесь совет тот же, что и с локализацией: смотреть, под какую версию Odoo написан модуль коннектора и живой ли он, потому что телефонные интеграции особенно чувствительны к версиям API АТС.
Telegram-уведомления
Очень популярный запрос — чтобы менеджер или руководитель получал уведомления в Telegram: новая заявка с сайта, смена стадии сделки, просроченная задача. Реализуется через автоматизацию Odoo, которая по событию дёргает Telegram Bot API. Это лёгкая, дешёвая и очень заметная для пользователя доработка — люди любят, когда система сама пишет им в мессенджер, а не заставляет заходить проверять.
Интернет-магазин: встроенный Website против внешнего сайта
Здесь развилка, которую стоит осознать до старта. Первый путь — встроенный модуль Website с интернет-магазином: сайт и витрина живут прямо в Odoo, заказы и лиды с сайта сразу падают в ту же базу, где вся CRM и склад, — без единого коннектора. Второй путь — оставить свой существующий сайт на отдельном движке и выгружать в него товары и остатки, а обратно забирать заказы через тот же External API. Первый вариант проще и целостнее, если сайта ещё нет или его не жалко переносить; второй — если у вас уже есть раскрученный сайт, который менять не хочется. Оба рабочие, выбор — вопрос вашей текущей ситуации, а не технических ограничений.
Кейс из практики: как связывали Odoo с 1С у торгового клиента
Чтобы всё вышесказанное не осталось теорией, расскажу обобщённый кейс — типовой для наших торговых клиентов. Детали я намеренно усредняю, но суть и грабли настоящие.
Пришла торговая компания, около 15 менеджеров. Продажи вели в переписке и таблицах, учёт — в 1С. Хотели навести порядок в воронке и перестать вбивать реализации в 1С руками с бумажек. Решили так: воронку, сделки, склад и печать счёта переносим в Odoo, регламентированный учёт и первичку оставляем в 1С. Ровно та архитектура, которую я защищал выше.
Что автоматизировали. Настроили выгрузку реализаций из Odoo в 1С. Объём документов был пограничным между «минимумом» и «автоматом», и мы начали с ежедневной выгрузки, а через пару месяцев, когда поток вырос, перевели реализации и справочник контрагентов на автоматический обмен через XML-RPC по расписанию. Контрагентов сделали мастером в 1С (там договоры и реквизиты), реализации — мастером в Odoo. Номенклатуру завели одним источником и запретили править её в двух местах.
Что оставили руками. Сознательно не стали автоматизировать всё до последней проводки. Сверку платежей и закрытие месяца бухгалтер делал в 1С как обычно — тянуть банк и кассу в Odoo не было смысла. Редкие нестандартные документы тоже оставили ручными: автоматизировать то, что случается раз в квартал, дороже, чем делать это вручную.
Где ловили расхождения. Главная головная боль оказалась не в коде обмена, а в справочниках. Один и тот же контрагент в старой базе 1С и в свежей Odoo назывался по-разному, номенклатура не билась по наименованиям. Первые прогоны обмена дали дубли ровно там, где мы этого ждали (см. раздел про ошибки импорта). Лечилось это сопоставлением по External ID и разовой чисткой справочников — после наведения порядка в мастер-данных расхождения ушли.
Итоговая таблица и чек-лист подготовки данных
Собираю всё в две практические шпаргалки: где что живёт и как готовиться к миграции.
Работает из коробки / нужен модуль / оставить в 1С
| Задача | Odoo из коробки | Нужен модуль | Оставить в 1С |
|---|---|---|---|
| Русский интерфейс | ✅ да | — | — |
| CRM, воронка, сделки | ✅ да | — | — |
| Складской учёт (операционный) | ✅ да | — | — |
| Печать счёта на оплату | ⚠️ шаблон | ✅ модуль/доработка | — |
| УПД, ТОРГ-12 | ❌ | ✅ модуль РФ | чаще в 1С |
| Реквизиты ИНН/КПП/ОГРН | ❌ | ✅ доп-поля партнёра | — |
| Регламентированный учёт, НДС | ❌ | ❌ не окупается | ✅ только 1С |
| Отчётность в ФНС и фонды | ❌ | ❌ | ✅ только 1С |
| Обмен данными между системами | ✅ External API | — | — |
Чек-лист подготовки данных к миграции
- Почистить справочник контрагентов в Excel: убрать дубли, привести названия к единому виду, проверить ИНН/КПП.
- Привести номенклатуру к порядку: единый справочник единиц измерения, единообразные наименования, категории.
- Проставить External ID в отдельной колонке для контрагентов и товаров — чтобы повторные загрузки не плодили дубли.
- Сохранить файлы в UTF-8 и проверить числовые форматы (десятичный разделитель, отсутствие текста в ценах).
- Решить направление мастер-данных по каждому справочнику: кто хозяин — Odoo или 1С — и зафиксировать это письменно.
- Загрузить на тестовую копию базы, проверить десяток записей глазами, и только потом — на боевую.
- Остатки склада завести инвентаризацией, а не импортом «поля количества».
Подведу черту. Odoo в России — это не «западная программа, которая у нас не работает», и не «полная замена 1С». Это операционная система бизнеса: русский интерфейс из коробки, печатные формы через проверенные модули, честная граница с 1С по регламентированному учёту и предсказуемый обмен данными между ними. Держите эту границу, готовьте справочники заранее — и связка Odoo + 1С будет работать спокойно и дёшево, отдавая каждой системе то, в чём она сильна.
Если разбираться самостоятельно некогда, а Odoo и обмен с 1С нужны уже сейчас — вы знаете, к кому обратиться. Пишите в Telegram @ITfresh_Boss или звоните +7 903 729-62-41, обсудим вашу задачу без обязательств.
Оставить комментарий