Разработка ERP на tryton: Часть 1

К нам пришел крупный проект по созданию ERP-системы для компании производителя. В качестве сервера выбор пал на tryton. Однако у них с документацией достаточно плохо. На просторах интернета удалось найти

. Данной информации очень мало для разработки какой-либо системы на tryton. Что б закрыть этот пробел, было решено документировать весь процесс разработки, в особенности подводные камни, с которыми пришлось столкнуться. Итак приступим.

Установить tryton можно из репозитариев, однако, нам данный путь не подходит. Так что идем к ним на 

. trytond — исходники сервера, tryton — gtk клиент. У нас в качестве клиента будет веб-интерфейс (yii), так что качаем непосредственно сервер

. На данный момент последняя версия 3.2.0, её и будем рассматривать.

Скрипт сервера лежит в папке bin и называется trytond. У меня при попытке запуска trytond вываливался с ошибкой доступа к файлу конфига в /etc/trytond.conf. Волшебный ключик --help подсказал, что есть аргумент -c (--config) с помощью которого можно указать файл конфига. Запускать сервер приходится так python trytond -с /home/username/trytond_path/etc/trytond.conf.

В документации заявлена поддержка postgresql, mysql, sqlite. Исходя из переписки разработчиков trytond в irc, то лучше mysql не использовать. Соответсвенно выбор пал на postgresql. С данной БД раньше не приходилось работать, поэтому я воспользовался небольшим

.

Нам необходимо установить postgresql, создать там пользователя и обязательно наделить его правами для создания БД:

Приступаем к правке конфига. Первое что мы видим — это не закомментированная строка

. Во всей документации используется xml-rpc, хотя он по дефолту не включен. Меня устраивает json-rpc, так что оставляем как есть.

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

Зададим пароль администратора trytond admin_passwd = tryton; у меня trytond отказался создавать БД с пустым паролем админа.В последстви нам придется работать с модулями, так что включим автоматическую перезагрузку модулей auto_reload = True.Укажем, куда складывать логи logfile = /home/username/trytond_path/log/debug.log.

trytond.conf #This file is part of Tryton. The COPYRIGHT file at the top level of #this repository contains the full copyright notices and license terms. [options]

# Activate the json-rpc protocol jsonrpc = localhost:8000 #ssl_jsonrpc = False

# This is the hostname used when generating tryton URI #hostname_jsonrpc =

# Configure the path of json-rpc data #jsondata_path = /var/www/localhost/tryton

# Activate the xml-rpc protocol #xmlrpc = *:8069 #ssl_xmlrpc = False

# Activate the webdav protocol #webdav = *:8080 #ssl_webdav = False

# This is the hostname used when generating WebDAV URI #hostname_webdav =

# Configure the database type # allowed values are postgresql, sqlite, mysql db_type = postgresql

# Configure the database connection ## Note: Only databases owned by db_user will be displayed in the connection dialog ## of the Tryton client. db_user must have create permission for new databases ## to be able to use automatic database creation with the Tryton client. db_host = localhost db_port = 5432 db_user = tryton db_password = tryton #db_minconn = 1 #db_maxconn = 64

# Configure the postgresql path for the executable #pg_path = None

# Configure the Tryton server password admin_passwd = tryton

# Configure the path of the files for the pid and the logs #pidfile = False logfile = /home/clutcher/projects/erp/log/debug.log

#privatekey = server.pem #certificate = server.pem

# Configure the SMTP connection #smtp_server = localhost #smtp_port = 25 #smtp_ssl = False #smtp_tls = False #smtp_password = False #smtp_user = False #smtp_default_from_email = False

# Configure the path to store attachments and sqlite database #data_path = /var/lib/trytond

# Allow to run more than one instance of trytond #multi_server = False

# Configure the session timeout (inactivity of the client in sec) #session_timeout = 600

# Enable auto-reload of modules if changed auto_reload = True

# Prevent database listing #prevent_dblist = False

# Enable cron # cron = True

# unoconv connection #unoconv = pipe, name=trytond; urp; StarOffice.ComponentContext

# Number of retries on database operational error # retry = 5

# Default language code # language = en_US указаны DEBUG, INFO, WARNING, ERROR, CRITICAL). В исходниках библиотеки logging нашлись такие строки:

Чем больше цифра, тем менее детальные логи. В irc мелькало, что NOTSET делает самые расширенные логи, хотя в документации не слово об этом не сказано, так что я остановился на уровне DEBUG.

Для того, что бы задать уровень логирования необходимо отредактировать trytond/server.py (27 строка): level=logging.INFO.

Конфиг поменяли, теперь запускаем сервер. Скудное описания API сервера я можно найти

, но этого явно не достаточно, поэтому продолжаем разбираться дальше. В сети полно python кода для работы с сервером напрямую. Выглядит он примерно так:

После долгих попыток зауска этого кода, оказалось, что jsonrpc — это не стандартная библиотека из pypi, а собственная библиотека разработчиков trytond, которую можно выковырять из клиента (не путать с trytond/protocols/jsonrpc.py — это разные библиотеки). Качаем tryton, распаковываем, и в папке tryton находим наш заветный jsonrpc.py. Теперь можно на python общаться с trytond, однако у нас фронтенд будет на php, поэтому продолжаем копать дальше.

После продолжительного разбора полётов получаем первый рабочий код (не забываем, что сервер trytond должен быть запущен):

Этот код уже понятен и его не сложно перенести на необходимый ЯП (php, Java …). Теперь изучим этот запрос.

Разберемся с url запроса. Все действия с БД делаются на url http://localhost:8000/. Дл работы с БД мы делаем запросы на url http://localhost:8000/db_name. Предполагается, что читатель уже знаком с json-rpc, поэтому структуру запроса описывать не будем.

, которое удалось вытащить из trytond/protocols/dispatcher.py и кусков кода из irc канала:

Первые два аргумента None, None обязательны, без них выбрасывает ошибки, к примеру для common.db.create: create () takes exactly 4 arguments (2 given). Что это за аргмуенты, я пока что не разобрался.

Следующий шаг — создать БД, которая необходима для функционирования trytond (юзеры, кеширование …) и непосрдственно ERP-системы. Скрипт выполняется около минуты:

tryton сам создаст нужные ему таблицы в БД. Следует отметить, что tryton не сможет создать таблицы в существующей пустой БД даже, если дать пользователю соответсвующие права. Мы назвали БД tryton, поэтому в дальнейшем запросы необходимо делать на адрес http://localhost:8000/tryton.

Где-то на просторах гугл групп по tryton мне удалось найти метод

.

И наконец-то получаем долгожданный ответ сервера с названиями методов, некоторые из которых описаны в документации:

Методы trytond {«id»: 3, «result»: [«model.ir.module.module.config_wizard.done.view_toolbar_get», «model.ir.module.module.config_wizard.done.fields_view_get», «model.ir.module.module.config_wizard.done.on_change_with», «model.ir.module.module.config_wizard.done.pre_validate», «model.ir.module.module.config_wizard.done.fields_get», «model.ir.module.module.config_wizard.done.default_get», «model.ir.model.print_model_graph.start.view_toolbar_get», «model.ir.model.print_model_graph.start.fields_view_get», «model.ir.model.print_model_graph.start.on_change_with», «model.ir.model.print_model_graph.start.pre_validate», «model.ir.model.print_model_graph.start.fields_get», «model.ir.model.print_model_graph.start.default_get», «model.ir.module.module.install_upgrade.start.view_toolbar_get», «model.ir.module.module.install_upgrade.start.fields_view_get», «model.ir.module.module.install_upgrade.start.on_change_with», «model.ir.module.module.install_upgrade.start.pre_validate», «model.ir.module.module.install_upgrade.start.fields_get», «model.ir.module.module.install_upgrade.start.default_get», «model.res.user.login.attempt.pre_validate», «model.res.user.login.attempt.fields_get», «model.res.user.login.attempt.default_get», «model.res.user.login.attempt.on_change_with», «model.ir.ui.menu-res.group.pre_validate», «model.ir.ui.menu-res.group.fields_get», «model.ir.ui.menu-res.group.default_get», «model.ir.ui.menu-res.group.on_change_with», «model.ir.action.act_window.domain.view_toolbar_get», «model.ir.action.act_window.domain.fields_view_get», «model.ir.action.act_window.domain.export_data», «model.ir.action.act_window.domain.search_read», «model.ir.action.act_window.domain.import_data», «model.ir.action.act_window.domain.create», «model.ir.action.act_window.domain.search», «model.ir.action.act_window.domain.on_change_with», «model.ir.action.act_window.domain.write», «model.ir.action.act_window.domain.read», «model.ir.action.act_window.domain.search_count», «model.ir.action.act_window.domain.history_revisions», «model.ir.action.act_window.domain.pre_validate», «model.ir.action.act_window.domain.copy», «model.ir.action.act_window.domain.fields_get», «model.ir.action.act_window.domain.default_get», «model.ir.action.act_window.domain.delete», «model.ir.model.access.view_toolbar_get», «model.ir.model.access.fields_view_get», «model.ir.model.access.export_data», «model.ir.model.access.search_read», «model.ir.model.access.import_data», «model.ir.model.access.create», «model.ir.model.access.get_access», «model.ir.model.access.search», «model.ir.model.access.on_change_with», «model.ir.model.access.write», «model.ir.model.access.read», «model.ir.model.access.search_count», «model.ir.model.access.history_revisions», «model.ir.model.access.pre_validate», «model.ir.model.access.copy», «model.ir.model.access.fields_get», «model.ir.model.access.default_get», «model.ir.model.access.delete», «model.ir.ui.view_tree_state.view_toolbar_get», «model.ir.ui.view_tree_state.fields_view_get», «model.ir.ui.view_tree_state.export_data», «model.ir.ui.view_tree_state.search_read», «model.ir.ui.view_tree_state.import_data», «model.ir.ui.view_tree_state.create», «model.ir.ui.view_tree_state.get», «model.ir.ui.view_tree_state.search», «model.ir.ui.view_tree_state.on_change_with», «model.ir.ui.view_tree_state.write», «model.ir.ui.view_tree_state.read», «model.ir.ui.view_tree_state.search_count», «model.ir.ui.view_tree_state.set», «model.ir.ui.view_tree_state.history_revisions», «model.ir.ui.view_tree_state.pre_validate», «model.ir.ui.view_tree_state.copy», «model.ir.ui.view_tree_state.fields_get», «model.ir.ui.view_tree_state.default_get», «model.ir.ui.view_tree_state.delete», «model.ir.action.act_window.view_toolbar_get», «model.ir.action.act_window.fields_view_get», «model.ir.action.act_window.export_data», «model.ir.action.act_window.search_read», «model.ir.action.act_window.import_data», «model.ir.action.act_window.create», «model.ir.action.act_window.get», «model.ir.action.act_window.search», «model.ir.action.act_window.on_change_with», «model.ir.action.act_window.write», «model.ir.action.act_window.read», «model.ir.action.act_window.search_count», «model.ir.action.act_window.history_revisions», «model.ir.action.act_window.pre_validate», «model.ir.action.act_window.copy», «model.ir.action.act_window.fields_get», «model.ir.action.act_window.default_get», «model.ir.action.act_window.delete», «model.res.user.config.start.view_toolbar_get», «model.res.user.config.start.fields_view_get», «model.res.user.config.start.on_change_with», «model.res.user.config.start.pre_validate», «model.res.user.config.start.fields_get», «model.res.user.config.start.default_get», «model.ir.module.module.dependency.view_toolbar_get», «model.ir.module.module.dependency.fields_view_get», «model.ir.module.module.dependency.export_data», «model.ir.module.module.dependency.search_read», «model.ir.module.module.dependency.import_data», «model.ir.module.module.dependency.create», «model.ir.module.module.dependency.search», «model.ir.module.module.dependency.on_change_with», «model.ir.module.module.dependency.write», «model.ir.module.module.dependency.read», «model.ir.module.module.dependency.search_count», «model.ir.module.module.dependency.history_revisions», «model.ir.module.module.dependency.pre_validate», «model.ir.module.module.dependency.copy», «model.ir.module.module.dependency.fields_get», «model.ir.module.module.dependency.default_get», «model.ir.module.module.dependency.delete», «model.ir.module.module.view_toolbar_get», «model.ir.module.module.fields_view_get», «model.ir.module.module.export_data», «model.ir.module.module.search_read», «model.ir.module.module.import_data», «model.ir.module.module.create», «model.ir.module.module.on_write», «model.ir.module.module.search», «model.ir.module.module.on_change_with», «model.ir.module.module.write», «model.ir.module.module.read», «model.ir.module.module.search_count», «model.ir.module.module.history_revisions», «model.ir.module.module.pre_validate», «model.ir.module.module.copy», «model.ir.module.module.fields_get», «model.ir.module.module.default_get», «model.ir.module.module.delete», «model.ir.module.module.upgrade_cancel», «model.ir.module.module.upgrade», «model.ir.module.module.install», «model.ir.module.module.uninstall_cancel», «model.ir.module.module.install_cancel», «model.ir.module.module.uninstall», «model.ir.action-res.group.pre_validate», «model.ir.action-res.group.fields_get», «model.ir.action-res.group.default_get», «model.ir.action-res.group.on_change_with», «model.ir.translation.export.result.view_toolbar_get», «model.ir.translation.export.result.fields_view_get», «model.ir.translation.export.result.on_change_with», «model.ir.translation.export.result.pre_validate», «model.ir.translation.export.result.fields_get», «model.ir.translation.export.result.default_get», «model.ir.action.view_toolbar_get», «model.ir.action.fields_view_get», «model.ir.action.get_action_id», «model.ir.action.export_data», «model.ir.action.search_read», «model.ir.action.import_data», «model.ir.action.create», «model.ir.action.search», «model.ir.action.on_change_with», «model.ir.action.write», «model.ir.action.read», «model.ir.action.search_count», «model.ir.action.history_revisions», «model.ir.action.pre_validate», «model.ir.action.copy», «model.ir.action.fields_get», «model.ir.action.default_get», «model.ir.action.delete», «model.ir.translation.set.succeed.view_toolbar_get», «model.ir.translation.set.succeed.fields_view_get», «model.ir.translation.set.succeed.on_change_with», «model.ir.translation.set.succeed.pre_validate», «model.ir.translation.set.succeed.fields_get», «model.ir.translation.set.succeed.default_get», «model.ir.property.view_toolbar_get», «model.ir.property.fields_view_get», «model.ir.property.export_data», «model.ir.property.search_read», «model.ir.property.import_data», «model.ir.property.create», «model.ir.property.search», «model.ir.property.on_change_with», «model.ir.property.write», «model.ir.property.read», «model.ir.property.search_count», «model.ir.property.history_revisions», «model.ir.property.pre_validate», «model.ir.property.models_get», «model.ir.property.copy», «model.ir.property.fields_get», «model.ir.property.default_get», «model.ir.property.delete», «model.ir.rule.group-res.group.pre_validate», «model.ir.rule.group-res.group.fields_get», «model.ir.rule.group-res.group.default_get», «model.ir.rule.group-res.group.on_change_with», «model.ir.ui.view_search.view_toolbar_get», «model.ir.ui.view_search.fields_view_get», «model.ir.ui.view_search.get_search», «model.ir.ui.view_search.export_data», «model.ir.ui.view_search.search_read», «model.ir.ui.view_search.import_data», «model.ir.ui.view_search.create», «model.ir.ui.view_search.search», «model.ir.ui.view_search.on_change_with», «model.ir.ui.view_search.write», «model.ir.ui.view_search.read», «model.ir.ui.view_search.search_count», «model.ir.ui.view_search.history_revisions», «model.ir.ui.view_search.pre_validate», «model.ir.ui.view_search.copy», «model.ir.ui.view_search.fields_get», «model.ir.ui.view_search.default_get», «model.ir.ui.view_search.delete», «model.ir.module.module.config_wizard.first.view_toolbar_get», «model.ir.module.module.config_wizard.first.fields_view_get», «model.ir.module.module.config_wizard.first.on_change_with», «model.ir.module.module.config_wizard.first.pre_validate», «model.ir.module.module.config_wizard.first.fields_get», «model.ir.module.module.config_wizard.first.default_get», «model.ir.action.url.view_toolbar_get», «model.ir.action.url.fields_view_get», «model.ir.action.url.export_data», «model.ir.action.url.search_read», «model.ir.action.url.import_data», «model.ir.action.url.create», «model.ir.action.url.search», «model.ir.action.url.on_change_with», «model.ir.action.url.write», «model.ir.action.url.read», «model.ir.action.url.search_count», «model.ir.action.url.history_revisions», «model.ir.action.url.pre_validate», «model.ir.action.url.copy», «model.ir.action.url.fields_get», «model.ir.action.url.default_get», «model.ir.action.url.delete», «model.ir.action.act_window.view.view_toolbar_get», «model.ir.action.act_window.view.fields_view_get», «model.ir.action.act_window.view.export_data», «model.ir.action.act_window.view.search_read», «model.ir.action.act_window.view.import_data», «model.ir.action.act_window.view.create», «model.ir.action.act_window.view.search», «model.ir.action.act_window.view.on_change_with», «model.ir.action.act_window.view.write», «model.ir.action.act_window.view.read», «model.ir.action.act_window.view.search_count», «model.ir.action.act_window.view.history_revisions», «model.ir.action.act_window.view.pre_validate», «model.ir.action.act_window.view.copy», «model.ir.action.act_window.view.fields_get», «model.ir.action.act_window.view.default_get», «model.ir.action.act_window.view.delete», «model.ir.sequence.strict.view_toolbar_get», «model.ir.sequence.strict.fields_view_get», «model.ir.sequence.strict.export_data», «model.ir.sequence.strict.search_read», «model.ir.sequence.strict.import_data», «model.ir.sequence.strict.create», «model.ir.sequence.strict.search», «model.ir.sequence.strict.on_change_with», «model.ir.sequence.strict.write», «model.ir.sequence.strict.read», «model.ir.sequence.strict.search_count», «model.ir.sequence.strict.code_get», «model.ir.sequence.strict.history_revisions», «model.ir.sequence.strict.pre_validate», «model.ir.sequence.strict.copy», «model.ir.sequence.strict.fields_get», «model.ir.sequence.strict.default_get», «model.ir.sequence.strict.delete», «model.ir.ui.menu.favorite.view_toolbar_get», «model.ir.ui.menu.favorite.fields_view_get», «model.ir.ui.menu.favorite.export_data», «model.ir.ui.menu.favorite.search_read», «model.ir.ui.menu.favorite.import_data», «model.ir.ui.menu.favorite.create», «model.ir.ui.menu.favorite.get», «model.ir.ui.menu.favorite.search», «model.ir.ui.menu.favorite.on_change_with», «model.ir.ui.menu.favorite.write», «model.ir.ui.menu.favorite.read», «model.ir.ui.menu.favorite.search_count», «model.ir.ui.menu.favorite.set», «model.ir.ui.menu.favorite.history_revisions», «model.ir.ui.menu.favorite.pre_validate», «model.ir.ui.menu.favorite.copy», «model.ir.ui.menu.favorite.fields_get», «model.ir.ui.menu.favorite.default_get», «model.ir.ui.menu.favorite.unset», «model.ir.ui.menu.favorite.delete», «model.res.user-res.group.pre_validate», «model.res.user-res.group.fields_get», «model.res.user-res.group.default_get», «model.res.user-res.group.on_change_with», «model.ir.ui.view.show.start.view_toolbar_get», «model.ir.ui.view.show.start.fields_view_get», «model.ir.ui.view.show.start.on_change_with», «model.ir.ui.view.show.start.pre_validate», «model.ir.ui.view.show.start.fields_get», «model.ir.ui.view.show.start.default_get», «model.ir.attachment.view_toolbar_get», «model.ir.attachment.fields_view_get», «model.ir.attachment.export_data», «model.ir.attachment.search_read», «model.ir.attachment.import_data», «model.ir.attachment.create», «model.ir.attachment.search», «model.ir.attachment.on_change_with_summary», «model.ir.attachment.on_change_with», «model.ir.attachment.write», «model.ir.attachment.read», «model.ir.attachment.search_count», «model.ir.attachment.history_revisions», «model.ir.attachment.pre_validate», «model.ir.attachment.models_get», «model.ir.attachment.copy», «model.ir.attachment.fields_get», «model.ir.attachment.default_get», «model.ir.attachment.delete», «model.ir.translation.update.start.view_toolbar_get», «model.ir.translation.update.start.fields_view_get», «model.ir.translation.update.start.on_change_with», «model.ir.translation.update.start.pre_validate», «model.ir.translation.update.start.fields_get», «model.ir.translation.update.start.default_get», «model.ir.export.view_toolbar_get», «model.ir.export.fields_view_get», «model.ir.export.export_data», «model.ir.export.search_read», «model.ir.export.import_data», «model.ir.export.create», «model.ir.export.search», «model.ir.export.on_change_with», «model.ir.export.write», «model.ir.export.read», «model.ir.export.search_count», «model.ir.export.history_revisions», «model.ir.export.pre_validate», «model.ir.export.copy», «model.ir.export.fields_get», «model.ir.export.default_get», «model.ir.export.delete», «model.ir.ui.view_tree_width.view_toolbar_get», «model.ir.ui.view_tree_width.fields_view_get», «model.ir.ui.view_tree_width.set_width», «model.ir.ui.view_tree_width.export_data», «model.ir.ui.view_tree_width.search_read», «model.ir.ui.view_tree_width.import_data», «model.ir.ui.view_tree_width.create», «model.ir.ui.view_tree_width.search», «model.ir.ui.view_tree_width.on_change_with», «model.ir.ui.view_tree_width.write», «model.ir.ui.view_tree_width.read», «model.ir.ui.view_tree_width.search_count», «model.ir.ui.view_tree_width.history_revisions», «model.ir.ui.view_tree_width.pre_validate», «model.ir.ui.view_tree_width.copy», «model.ir.ui.view_tree_width.fields_get», «model.ir.ui.view_tree_width.default_get», «model.ir.ui.view_tree_width.delete», «model.res.group.view_toolbar_get», «model.res.group.fields_view_get», «model.res.group.export_data», «model.res.group.search_read», «model.res.group.import_data», «model.res.group.create», «model.res.group.search», «model.res.group.on_change_with», «model.res.group.write», «model.res.group.read», «model.res.group.search_count», «model.res.group.history_revisions», «model.res.group.pre_validate», «model.res.group.copy», «model.res.group.fields_get», «model.res.group.default_get», «model.res.group.delete», «model.ir.sequence.view_toolbar_get», «model.ir.sequence.fields_view_get», «model.ir.sequence.export_data», «model.ir.sequence.search_read», «model.ir.sequence.import_data», «model.ir.sequence.create», «model.ir.sequence.search», «model.ir.sequence.on_change_with», «model.ir.sequence.write», «model.ir.sequence.read», «model.ir.sequence.search_count», «model.ir.sequence.code_get», «model.ir.sequence.history_revisions», «model.ir.sequence.pre_validate», «model.ir.sequence.copy», «model.ir.sequence.fields_get», «model.ir.sequence.default_get», «model.ir.sequence.delete», «model.ir.model.data.view_toolbar_get», «model.ir.model.data.fields_view_get», «model.ir.model.data.export_data», «model.ir.model.data.search_read», «model.ir.model.data.import_data», «model.ir.model.data.create», «model.ir.model.data.search», «model.ir.model.data.on_change_with», «model.ir.model.data.write», «model.ir.model.data.read», «model.ir.model.data.search_count», «model.ir.model.data.history_revisions», «model.ir.model.data.pre_validate», «model.ir.model.data.copy», «model.ir.model.data.fields_get», «model.ir.model.data.default_get», «model.ir.model.data.delete», «model.ir.sequence.type-res.group.pre_validate», «model.ir.sequence.type-res.group.fields_get», «model.ir.sequence.type-res.group.default_get», «model.ir.sequence.type-res.group.on_change_with», «model.ir.trigger.log.pre_validate», «model.ir.trigger.log.fields_get», «model.ir.trigger.log.default_get», «model.ir.trigger.log.on_change_with», «model.ir.ui.view.view_toolbar_get», «model.ir.ui.view.fields_view_get», «model.ir.ui.view.export_data», «model.ir.ui.view.search_read», «model.ir.ui.view.import_data», «model.ir.ui.view.create», «model.ir.ui.view.search», «model.ir.ui.view.on_change_with», «model.ir.ui.view.write», «model.ir.ui.view.read», «model.ir.ui.view.search_count», «model.ir.ui.view.history_revisions», «model.ir.ui.view.pre_validate», «model.ir.ui.view.copy», «model.ir.ui.view.fields_get», «model.ir.ui.view.default_get», «model.ir.ui.view.delete», «model.ir.ui.view.show», «model.ir.action.report.view_toolbar_get», «model.ir.action.report.fields_view_get», «model.ir.action.report.on_change_with_report_content_name», «model.ir.action.report.export_data», «model.ir.action.report.search_read», «model.ir.action.report.import_data», «model.ir.action.report.create», «model.ir.action.report.search», «model.ir.action.report.on_change_with», «model.ir.action.report.write», «model.ir.action.report.read», «model.ir.action.report.search_count», «model.ir.action.report.history_revisions», «model.ir.action.report.pre_validate», «model.ir.action.report.copy», «model.ir.action.report.fields_get», «model.ir.action.report.default_get», «model.ir.action.report.delete», «model.res.user-ir.action.pre_validate», «model.res.user-ir.action.fields_get», «model.res.user-ir.action.default_get», «model.res.user-ir.action.on_change_with», «model.ir.model.field-res.group.pre_validate», «model.ir.model.field-res.group.fields_get», «model.ir.model.field-res.group.default_get», «model.ir.model.field-res.group.on_change_with», «model.ir.module.module.install_upgrade.done.view_toolbar_get», «model.ir.module.module.install_upgrade.done.fields_view_get», «model.ir.module.module.install_upgrade.done.on_change_with», «model.ir.module.module.install_upgrade.done.pre_validate», «model.ir.module.module.install_upgrade.done.fields_get», «model.ir.module.module.install_upgrade.done.default_get», «model.ir.rule.view_toolbar_get», «model.ir.rule.fields_view_get», «model.ir.rule.export_data», «model.ir.rule.search_read», «model.ir.rule.import_data», «model.ir.rule.create», «model.ir.rule.search», «model.ir.rule.on_change_with», «model.ir.rule.write», «model.ir.rule.read», «model.ir.rule.search_count», «model.ir.rule.history_revisions», «model.ir.rule.pre_validate», «model.ir.rule.copy», «model.ir.rule.fields_get», «model.ir.rule.default_get», «model.ir.rule.delete», «model.ir.translation.view_toolbar_get», «model.ir.translation.fields_view_get», «model.ir.translation.export_data», «model.ir.translation.search_read», «model.ir.translation.import_data», «model.ir.translation.create», «model.ir.translation.search», «model.ir.translation.on_change_with», «model.ir.translation.write», «model.ir.translation.read», «model.ir.translation.search_count», «model.ir.translation.get_language», «model.ir.translation.history_revisions», «model.ir.translation.pre_validate», «model.ir.translation.copy», «model.ir.translation.fields_get», «model.ir.translation.default_get», «model.ir.translation.delete», «model.ir.model.button.view_toolbar_get», «model.ir.model.button.fields_view_get», «model.ir.model.button.export_data», «model.ir.model.button.search_read», «model.ir.model.button.import_data», «model.ir.model.button.create», «model.ir.model.button.search», «model.ir.model.button.on_change_with», «model.ir.model.button.write», «model.ir.model.button.read», «model.ir.model.button.search_count», «model.ir.model.button.history_revisions», «model.ir.model.button.pre_validate», «model.ir.model.button.copy», «model.ir.model.button.fields_get», «model.ir.model.button.default_get», «model.ir.model.button.delete», «model.ir.translation.export.start.view_toolbar_get», «model.ir.translation.export.start.fields_view_get», «model.ir.translation.export.start.on_change_with», «model.ir.translation.export.start.pre_validate», «model.ir.translation.export.start.fields_get», «model.ir.translation.export.start.default_get», «model.ir.sequence.type.view_toolbar_get», «model.ir.sequence.type.fields_view_get», «model.ir.sequence.type.export_data», «model.ir.sequence.type.search_read», «model.ir.sequence.type.import_data», «model.ir.sequence.type.create», «model.ir.sequence.type.search», «model.ir.sequence.type.on_change_with», «model.ir.sequence.type.write», «model.ir.sequence.type.read», «model.ir.sequence.type.search_count», «model.ir.sequence.type.history_revisions», «model.ir.sequence.type.pre_validate», «model.ir.sequence.type.copy», «model.ir.sequence.type.fields_get», «model.ir.sequence.type.default_get», «model.ir.sequence.type.delete», «model.ir.action.wizard.view_toolbar_get», «model.ir.action.wizard.fields_view_get», «model.ir.action.wizard.export_data», «model.ir.action.wizard.search_read», «model.ir.action.wizard.import_data», «model.ir.action.wizard.create», «model.ir.action.wizard.search», «model.ir.action.wizard.on_change_with», «model.ir.action.wizard.write», «model.ir.action.wizard.read», «model.ir.action.wizard.search_count», «model.ir.action.wizard.history_revisions», «model.ir.action.wizard.pre_validate», «model.ir.action.wizard.copy», «model.ir.action.wizard.fields_get», «model.ir.action.wizard.default_get», «model.ir.action.wizard.delete», «model.res.user.get_preferences_fields_view», «model.res.user.view_toolbar_get», «model.res.user.fields_view_get», «model.res.user.export_data», «model.res.user.search_read», «model.res.user.import_data», «model.res.user.create», «model.res.user.search», «model.res.user.on_change_with», «model.res.user.write», «model.res.user.read», «model.res.user.search_count», «model.res.user.get_preferences», «model.res.user.history_revisions», «model.res.user.pre_validate», «model.res.user.set_preferences», «model.res.user.copy», «model.res.user.fields_get», «model.res.user.default_get», «model.res.user.delete», «model.ir.translation.clean.start.view_toolbar_get», «model.ir.translation.clean.start.fields_view_get», «model.ir.translation.clean.start.on_change_with», «model.ir.translation.clean.start.pre_validate», «model.ir.translation.clean.start.fields_get», «model.ir.translation.clean.start.default_get», «model.ir.ui.menu.view_toolbar_get», «model.ir.ui.menu.fields_view_get», «model.ir.ui.menu.export_data», «model.ir.ui.menu.search_read», «model.ir.ui.menu.import_data», «model.ir.ui.menu.create», «model.ir.ui.menu.search», «model.ir.ui.menu.on_change_with», «model.ir.ui.menu.write», «model.ir.ui.menu.read», «model.ir.ui.menu.search_count», «model.ir.ui.menu.history_revisions», «model.ir.ui.menu.pre_validate», «model.ir.ui.menu.copy», «model.ir.ui.menu.fields_get», «model.ir.ui.menu.default_get», «model.ir.ui.menu.list_icons», «model.ir.ui.menu.delete», «model.ir.cache.pre_validate», «model.ir.cache.fields_get», «model.ir.cache.default_get», «model.ir.cache.on_change_with», «model.ir.module.module.config_wizard.other.view_toolbar_get», «model.ir.module.module.config_wizard.other.fields_view_get», «model.ir.module.module.config_wizard.other.on_change_with», «model.ir.module.module.config_wizard.other.pre_validate», «model.ir.module.module.config_wizard.other.fields_get», «model.ir.module.module.config_wizard.other.default_get», «model.ir.ui.icon.view_toolbar_get», «model.ir.ui.icon.fields_view_get», «model.ir.ui.icon.export_data», «model.ir.ui.icon.search_read», «model.ir.ui.icon.import_data», «model.ir.ui.icon.create», «model.ir.ui.icon.search», «model.ir.ui.icon.on_change_with», «model.ir.ui.icon.write», «model.ir.ui.icon.read», «model.ir.ui.icon.search_count», «model.ir.ui.icon.history_revisions», «model.ir.ui.icon.pre_validate», «model.ir.ui.icon.copy», «model.ir.ui.icon.fields_get», «model.ir.ui.icon.default_get», «model.ir.ui.icon.list_icons», «model.ir.ui.icon.delete», «model.ir.configuration.pre_validate», «model.ir.configuration.fields_get», «model.ir.configuration.default_get», «model.ir.configuration.on_change_with», «model.ir.rule.group.view_toolbar_get», «model.ir.rule.group.fields_view_get», «model.ir.rule.group.export_data», «model.ir.rule.group.search_read», «model.ir.rule.group.import_data», «model.ir.rule.group.create», «model.ir.rule.group.search», «model.ir.rule.group.on_change_with», «model.ir.rule.group.write», «model.ir.rule.group.read», «model.ir.rule.group.search_count», «model.ir.rule.group.history_revisions», «model.ir.rule.group.pre_validate», «model.ir.rule.group.copy», «model.ir.rule.group.fields_get», «model.ir.rule.group.default_get», «model.ir.rule.group.delete», «model.ir.rule.group-res.user.pre_validate», «model.ir.rule.group-res.user.fields_get», «model.ir.rule.group-res.user.default_get», «model.ir.rule.group-res.user.on_change_with», «model.res.user.warning.view_toolbar_get», «model.res.user.warning.fields_view_get», «model.res.user.warning.export_data», «model.res.user.warning.search_read», «model.res.user.warning.import_data», «model.res.user.warning.create», «model.res.user.warning.search», «model.res.user.warning.on_change_with», «model.res.user.warning.write», «model.res.user.warning.read», «model.res.user.warning.search_count», «model.res.user.warning.history_revisions», «model.res.user.warning.pre_validate», «model.res.user.warning.copy», «model.res.user.warning.fields_get», «model.res.user.warning.default_get», «model.res.user.warning.delete», «model.ir.translation.clean.succeed.view_toolbar_get», «model.ir.translation.clean.succeed.fields_view_get», «model.ir.translation.clean.succeed.on_change_with», «model.ir.translation.clean.succeed.pre_validate», «model.ir.translation.clean.succeed.fields_get», «model.ir.translation.clean.succeed.default_get», «model.ir.trigger.view_toolbar_get», «model.ir.trigger.fields_view_get», «model.ir.trigger.on_change_on_time», «model.ir.trigger.on_change_on_write», «model.ir.trigger.export_data», «model.ir.trigger.search_read», «model.ir.trigger.import_data», «model.ir.trigger.create», «model.ir.trigger.on_change_on_delete», «model.ir.trigger.search», «model.ir.trigger.on_change_with», «model.ir.trigger.write», «model.ir.trigger.read», «model.ir.trigger.search_count», «model.ir.trigger.history_revisions», «model.ir.trigger.pre_validate», «model.ir.trigger.on_change_on_create», «model.ir.trigger.copy», «model.ir.trigger.fields_get», «model.ir.trigger.default_get», «model.ir.trigger.delete», «model.ir.action.keyword.view_toolbar_get», «model.ir.action.keyword.fields_view_get», «model.ir.action.keyword.export_data», «model.ir.action.keyword.search_read», «model.ir.action.keyword.import_data», «model.ir.action.keyword.create», «model.ir.action.keyword.get_keyword», «model.ir.action.keyword.search», «model.ir.action.keyword.on_change_with», «model.ir.action.keyword.write», «model.ir.action.keyword.read», «model.ir.action.keyword.search_count», «model.ir.action.keyword.history_revisions», «model.ir.action.keyword.pre_validate», «model.ir.action.keyword.models_get», «model.ir.action.keyword.copy», «model.ir.action.keyword.fields_get», «model.ir.action.keyword.default_get», «model.ir.action.keyword.delete», «model.ir.date.pre_validate», «model.ir.date.fields_get», «model.ir.date.default_get», «model.ir.date.today», «model.ir.date.on_change_with», «model.ir.model.field.access.view_toolbar_get», «model.ir.model.field.access.fields_view_get», «model.ir.model.field.access.export_data», «model.ir.model.field.access.search_read», «model.ir.model.field.access.import_data», «model.ir.model.field.access.create», «model.ir.model.field.access.search», «model.ir.model.field.access.on_change_with», «model.ir.model.field.access.write», «model.ir.model.field.access.read», «model.ir.model.field.access.search_count», «model.ir.model.field.access.history_revisions», «model.ir.model.field.access.pre_validate», «model.ir.model.field.access.copy», «model.ir.model.field.access.fields_get», «model.ir.model.field.access.default_get», «model.ir.model.field.access.delete», «model.ir.model.button-res.group.pre_validate», «model.ir.model.button-res.group.fields_get», «model.ir.model.button-res.group.default_get», «model.ir.model.button-res.group.on_change_with», «model.ir.lang.view_toolbar_get», «model.ir.lang.fields_view_get», «model.ir.lang.export_data», «model.ir.lang.search_read», «model.ir.lang.import_data», «model.ir.lang.create», «model.ir.lang.search», «model.ir.lang.on_change_with», «model.ir.lang.write», «model.ir.lang.read», «model.ir.lang.search_count», «model.ir.lang.history_revisions», «model.ir.lang.pre_validate», «model.ir.lang.copy», «model.ir.lang.fields_get», «model.ir.lang.default_get», «model.ir.lang.delete», «model.ir.cron.view_toolbar_get», «model.ir.cron.fields_view_get», «model.ir.cron.export_data», «model.ir.cron.search_read», «model.ir.cron.import_data», «model.ir.cron.create», «model.ir.cron.search», «model.ir.cron.on_change_with», «model.ir.cron.write», «model.ir.cron.read», «model.ir.cron.search_count», «model.ir.cron.history_revisions», «model.ir.cron.pre_validate», «model.ir.cron.copy», «model.ir.cron.fields_get», «model.ir.cron.default_get», «model.ir.cron.delete», «model.ir.export.line.view_toolbar_get», «model.ir.export.line.fields_view_get», «model.ir.export.line.export_data», «model.ir.export.line.search_read», «model.ir.export.line.import_data», «model.ir.export.line.create», «model.ir.export.line.search», «model.ir.export.line.on_change_with», «model.ir.export.line.write», «model.ir.export.line.read», «model.ir.export.line.search_count», «model.ir.export.line.history_revisions», «model.ir.export.line.pre_validate», «model.ir.export.line.copy», «model.ir.export.line.fields_get», «model.ir.export.line.default_get», «model.ir.export.line.delete», «model.ir.translation.set.start.view_toolbar_get», «model.ir.translation.set.start.fields_view_get», «model.ir.translation.set.start.on_change_with», «model.ir.translation.set.start.pre_validate», «model.ir.translation.set.start.fields_get», «model.ir.translation.set.start.default_get», «model.ir.model.field.view_toolbar_get», «model.ir.model.field.fields_view_get», «model.ir.model.field.export_data», «model.ir.model.field.search_read», «model.ir.model.field.import_data», «model.ir.model.field.create», «model.ir.model.field.search», «model.ir.model.field.on_change_with», «model.ir.model.field.write», «model.ir.model.field.read», «model.ir.model.field.search_count», «model.ir.model.field.history_revisions», «model.ir.model.field.pre_validate», «model.ir.model.field.copy», «model.ir.model.field.fields_get», «model.ir.model.field.default_get», «model.ir.model.field.delete», «model.ir.module.module.config_wizard.item.view_toolbar_get», «model.ir.module.module.config_wizard.item.fields_view_get», «model.ir.module.module.config_wizard.item.export_data», «model.ir.module.module.config_wizard.item.search_read», «model.ir.module.module.config_wizard.item.import_data», «model.ir.module.module.config_wizard.item.create», «model.ir.module.module.config_wizard.item.search», «model.ir.module.module.config_wizard.item.on_change_with», «model.ir.module.module.config_wizard.item.write», «model.ir.module.module.config_wizard.item.read», «model.ir.module.module.config_wizard.item.search_count», «model.ir.module.module.config_wizard.item.history_revisions», «model.ir.module.module.config_wizard.item.pre_validate», «model.ir.module.module.config_wizard.item.copy», «model.ir.module.module.config_wizard.item.fields_get», «model.ir.module.module.config_wizard.item.default_get», «model.ir.module.module.config_wizard.item.delete», «model.ir.model.global_search», «model.ir.model.view_toolbar_get», «model.ir.model.fields_view_get», «model.ir.model.list_models», «model.ir.model.export_data», «model.ir.model.search_read», «model.ir.model.import_data», «model.ir.model.create», «model.ir.model.search», «model.ir.model.list_history», «model.ir.model.on_change_with», «model.ir.model.write», «model.ir.model.read», «model.ir.model.search_count», «model.ir.model.history_revisions», «model.ir.model.pre_validate», «model.ir.model.copy», «model.ir.model.fields_get», «model.ir.model.default_get», «model.ir.model.delete», «wizard.ir.module.module.config_wizard.create», «wizard.ir.module.module.config_wizard.execute», «wizard.ir.module.module.config_wizard.delete», «wizard.ir.translation.update.create», «wizard.ir.translation.update.execute», «wizard.ir.translation.update.delete», «wizard.ir.translation.set.create», «wizard.ir.translation.set.execute», «wizard.ir.translation.set.delete», «wizard.ir.module.module.install_upgrade.create», «wizard.ir.module.module.install_upgrade.execute», «wizard.ir.module.module.install_upgrade.delete», «wizard.ir.translation.export.create», «wizard.ir.translation.export.execute», «wizard.ir.translation.export.delete», «wizard.res.user.config.create», «wizard.res.user.config.execute», «wizard.res.user.config.delete», «wizard.ir.ui.view.show.create», «wizard.ir.ui.view.show.execute», «wizard.ir.ui.view.show.delete», «wizard.ir.module.module.config.create», «wizard.ir.module.module.config.execute», «wizard.ir.module.module.config.delete», «wizard.ir.model.print_model_graph.create», «wizard.ir.model.print_model_graph.execute», «wizard.ir.model.print_model_graph.delete», «wizard.ir.translation.clean.create», «wizard.ir.translation.clean.execute», «wizard.ir.translation.clean.delete», «report.ir.model.graph.execute»]}

P.S. Если тема интересна, то в следующих статьях будет про подключение стандартных модулей и их API, использование стандартных модулей, разработка своих модулей и т.д.

© Habrahabr.ru