Перейти к содержимому

Поле Tracking в Odoo: как отслеживать изменения записей уверенно

Разберитесь, как в Odoo работает атрибут отслеживания (tracking), в каких случаях его включать и как правильно задать его в модели данных.
6 марта 2026 г. от
Поле Tracking в Odoo: как отслеживать изменения записей уверенно
Dasolo
| Комментариев пока нет

Если вы когда‑нибудь задавались вопросом, кто и когда изменил значение в карточке Odoo — функция отслеживания даёт на это прямой ответ.


Odoo умеет фиксировать изменения выбранных полей и записывать каждую правку прямо в «чат» записи. Это простая и встроенная метрика истории, которая даёт команде прозрачную хронологию изменений без необходимости разворачивать отдельную систему аудита.

Независимо от того, добавляете ли вы поле через Studio или пишете модуль на Python, знание механики отслеживания — базовый навык при работе с моделью данных Odoo. В этой статье собраны ключевые понятия и практические советы.

Что такое Tracking-поле в Odoo


Важно понимать, что tracking — это не новый тип данных. Это опция, которую можно включить для существующих полей (Char, Many2one, Selection, Integer, Date и т. п.). При включённом tracking Odoo автоматически сохраняет старое и новое значение, дату изменения и пользователя прямо в переписку записи.

В интерфейсе это выглядит как системная запись в потоке сообщений. Например, по сделке в CRM вы увидите запись вроде «Статус изменён с Новая на Квалифицированная», которая появляется в момент перемещения сделки по воронке.

Опция доступна для большинства стандартных типов полей и подключается как из Odoo Studio, так и через определение поля в коде при разработке модулей.

Какие данные сохраняются

Каждое изменение сохраняется как запись mail.message, привязанная к самой документу. В теле сообщения фиксируются:

  • Название (метка) поля, где произошло изменение
  • Предыдущее значение до правки
  • Новое значение после правки
  • Время изменения
  • Пользователь, выполнивший изменение

Эти записи доступны всем, у кого есть права чтения на документ — дополнительных настроек для просмотра истории обычно не требуется.

Принцип работы поля отслеживания


Для работы отслеживания модель должна наследоваться от миксина mail.thread. Этот миксин предоставляет инфраструктуру сообщений и логов, которую использует chatter. Большинство стандартных бизнес-моделей Odoo уже включают mail.thread.

Когда пользователь сохраняет запись, в которой изменились отслеживаемые поля, Odoo сравнивает старые и новые значения и автоматически добавляет системную запись в чат — от пользователя никаких дополнительных действий не требуется.

Техническое поведение в ORM Odoo

На уровне ORM Odoo перехватывает операцию записи. В момент вызова write(), если меняются отслеживаемые поля, фреймворк берёт предыдущее значение, применяет изменения и создаёт запись mail.message с описанием разницы.

В Python включение отслеживания выполняется через параметр tracking=True в объявлении поля в классе модели:

state = fields.Selection(
    [('draft', 'Draft'), ('confirmed', 'Confirmed')],
    tracking=True
)

Для управления порядком отображения нескольких изменений за одно сохранение можно указать приоритет от 1 до 10 — меньшие числа выводятся первыми в логах.

partner_id = fields.Many2one('res.partner', tracking=1)
priority = fields.Selection(tracking=10)

Взаимодействие с другими записями

Логи привязываются к той записи, где расположено поле — они не распространяются автоматически на связанные документы. Если нужна история в родственных моделях, включайте tracking отдельно в каждой нужной модели.

Это сделано намеренно: история хранится рядом с объектом изменений, что упрощает проверку событий без перехода между множеством связанных записей.

Где это реально полезно в бизнесе


Пять практических сценариев, где отслеживание действительно помогает в повседневной работе


1. Управление воронкой продаж и CRM

Команде продаж важно видеть, когда лид перемещался между этапами и кто это сделал. Включение tracking для поля stage_id в CRM даёт менеджерам полную хронологию переходов.

Это помогает понять, где сделки «заедают», строить объективный разбор воронки и точечно тренировать продавцов по реальным данным.


2. Согласование заказов и счетов

В закупках и бухгалтерии часто требуется доказать, кто утвердил документ и когда. Отслеживание поля state в заказах на покупку и счетах делает эту информацию доступной в чате без отдельного аудита.

Это особенно важно для компаний с финансовым контролем и внутренним аудитом.


3. Управление запасами и склад

При неожиданном изменении количества или мест хранения отслеживаемые поля в операциях склада помогают быстро понять источник расхождений.

Вместо длительного расследования или опросов коллег нужная информация уже будет в потоке сообщений соответствующей операции.


4. Качество данных клиентов

Если сотрудники часто правят карточки партнёров, полезно включить tracking для полей типа email, phone или pricelist_id. Это даёт историю изменений контактов прямо в CRM и облегчает работу службы поддержки и проверки качества данных.


5. Кадровые записи и HR

Отслеживание изменений должности, отдела или уровня оплаты в карточке сотрудника обеспечивает прозрачность и упрощает внутренние проверки — важный элемент соответствия в HR‑процессах.


Как создать или настроить поле с отслеживанием


Способы включения отслеживания

Два основных пути: Odoo Studio для администраторов без кода и правка Python‑модулей для разработчиков.

Через Odoo Studio

Studio позволяет включить tracking без программиста: откройте модель в Studio, выберите поле и включите переключатель «Track Changes» в настройках поля.

При создании нового поля через Studio вы также можете сразу включить отслеживание — удобный вариант для быстрых кастомизаций администраторами.

Через Python в модуле

Разработчики добавляют параметр tracking прямо в объявление поля в классе модели — стандартная практика при создании или расширении модулей Odoo.

Не забудьте, что модель должна наследовать mail.thread, иначе tracking не сработает. Небольшой пример ниже:

from odoo import models, fields

class ProjectTask(models.Model):
    _name = 'project.task'
    _inherit = ['project.task', 'mail.thread']

    x_client_priority = fields.Selection(
        [('low', 'Low'), ('medium', 'Medium'), ('high', 'High')],
        string='Client Priority',
        tracking=True
    )

Это типичный шаблон при расширении существующей модели: поле ведёт себя как обычное поле базы данных, но теперь каждое изменение его значения автоматически фиксируется в истории.

Важное замечание для полностью новых моделей

При создании своей модели обязанно указывать _inherit = ['mail.thread', 'mail.activity.mixin'], иначе tracking будет игнорироваться без предупреждений — миксин обязателен для работы логов.

Эта деталь часто останавливает разработчиков на первом шаге: без наследования от mail.thread всё кажется правильно, но логи не появляются.

Рекомендации по использованию


Лучшие практики использования tracking

Трекать только то, что действительно важно

Включение отслеживания на всех полях приводит к шуму и усложняет поиск полезной информации. Отслеживайте состояния, ответственных, ключевые даты и финансовые показатели — поля с реальной ценностью для аудита или операций.

Используйте приоритеты для читабельности

При большом количестве отслеживаемых полей задавайте приоритеты (1–10) — это улучшит группировку и восприятие сообщений в чате.

Согласуйте с правами доступа

Отслеживание имеет смысл только при корректной настройке прав и правил доступа: бесполезно фиксировать изменения, если любой пользователь может их свободно менять.

Документируйте, какие поля трекаются

Ведите список отслеживаемых полей, особенно в командах с несколькими разработчиками, чтобы избежать путаницы при апдейтах модулей и ревью кода.

Тестируйте в стейджинге перед продом

Проверяйте поведение отслеживания на тестовом экземпляре: некоторые вычисляемые или related‑поля могут вести себя иначе, чем обычные хранимые поля.

Типичные ошибки и ловушки


Типичные ошибки при работе с tracking

Забыли унаследовать mail.thread

Самая частая проблема: без mail.thread параметр tracking просто игнорируется — ошибок не будет, но записей в чате не появится. Проверьте наследование модели.

Трекинг несторируемых вычисляемых полей

Вычисляемые поля можно трекать только если они сохранены (store=True). Несторируемое computed‑поле не имеет постоянного значения в базе, и потому отслеживание не сработает.

Слишком много трекаемых полей

Желание всё отследить создаёт информационный шум. Будьте избирательны — отслеживайте только ключевые поля.

Ожидание трекинга при массовых или прямых обновлениях БД

Tracking срабатывает через ORM и метод write(). Прямые SQL‑записи, обход ORM или некоторые низкоуровневые операции не создают логов. При импортах и API‑взаимодействиях убедитесь, что изменения идут через ORM.

Конфликты между Studio и кодом

Если поле создано в Studio с включённым tracking, а затем его меняют в Python‑модуле, возможны конфликты при обновлениях — следите за согласованностью определений.

Вопросы и ответы


Можно ли трекать поле в любой модели Odoo?

Только модели, унаследованные от mail.thread, поддерживают tracking. Большинство стандартных моделей уже это делают; кастомные модели должны явно добавить миксин.

Не ухудшит ли это производительность?

Накладные расходы небольшие: для каждого изменения создаётся запись mail.message. Для очень высоконагруженных моделей разумно ограничивать количество трекаемых полей, чтобы не накапливать слишком много логов.

Можно ли отключить tracking, не потеряв историю?

Да: отключение прекращает запись новых изменений, но уже существующие сообщения в чате сохраняются и остаются доступными.

Работает ли tracking для Many2many полей?

Да, Many2many поддерживается: в чате показываются добавленные или удалённые связанные записи, формат отображения отличается от простых полей, но информация доступна.

Можно ли использовать tracking без Odoo Studio?

Безусловно. Параметр tracking — стандартный атрибут поля в Python. Studio лишь даёт визуальный интерфейс для тех же настроек, но полную функциональность можно реализовать через код.

Вывод


Отслеживание — простая и мощная опция Odoo, которая приносит большую пользу при минимальных усилиях. Включённая в нужных местах, она даёт надёжный аудит, снижает споры о том, кто что изменил, и усиливает управление данными в компании.

Неважно, подключаете вы tracking через Studio для быстрой настройки или реализуете его в модуле как часть масштабного проекта разработки — итог один: вы получаете прозрачную историю изменений данных.

Ключевое правило — применять tracking там, где это действительно влияет на решения, согласования и ответственность. Тогда вы получите максимум пользы при минимальных затратах.

В компании Dasolo мы помогаем адаптировать и оптимизировать Odoo под конкретные процессы: от проектирования модели данных до включения трекинга и разработки кастомных модулей.

Свяжитесь с нами — обсудим вашу задачу и предложим как быстро включить нужный функционал, так и спроектировать долгосрочное решение. Контакты Давайте вместе подберём оптимальный путь внедрения для вашего проекта.

Поле Tracking в Odoo: как отслеживать изменения записей уверенно
Dasolo 6 марта 2026 г.
Поделиться этой записью
Войти оставить комментарий