| Nombre Técnico | Etiqueta (String) | Tipo de Campo | Relación (Relation) | Requerido | Solo Lectura | Acción |
|---|---|---|---|---|---|---|
| Ingresa un modelo y presiona "Explorar Campos". | ||||||
| ID | Nombre de la Tarea | Estado | Intervalo | Próxima Ejecución | Acción |
|---|---|---|---|---|---|
| Conéctate a una instancia para listar los cron jobs. | |||||
| Nombre Técnico | Descripción | Versión | Autor | Acción |
|---|---|---|---|---|
| Haz clic en "Cargar Módulos" para inspeccionar. | ||||
| Clave (Key) | Valor (Value) | Última Modificación | Acción |
|---|---|---|---|
| Cargando parámetros... | |||
| Fecha | Usuario | Instancia / BD | Modo | Comando / Código | Estado | Commit | Tiempo | IP | Acción |
|---|---|---|---|---|---|---|---|---|---|
| Cargando registros de auditoría... | |||||||||
| ID | Usuario | Nombre | Rol | Permisos | Estado | Acciones |
|---|---|---|---|---|---|---|
| Cargando usuarios... | ||||||
| ID | Nombre | URL | Base de Datos | Usuario Odoo | Clave Guardada | Descripción | Acciones |
|---|---|---|---|---|---|---|---|
| Cargando instancias... | |||||||
| Usuario del Portal | Instancia Autorizada | Acciones |
|---|---|---|
| Cargando asignaciones... | ||
Referencia exhaustiva de comandos normalizados, mejores prácticas de Odoo XML-RPC y casos de uso desde nivel básico hasta scripts complejos de lote.
limit=None para todos.action_post).Obtiene los primeros 15 contactos marcados como empresa junto con su RIF/NIF y correo:
search_read(
'res.partner',
[('is_company', '=', True), ('active', '=', True)],
['id', 'name', 'vat', 'email', 'phone'],
limit=15
)
Compara la cantidad de registros usando search_count:
borradores = search_count('account.move', [('state', '=', 'draft')])
publicadas = search_count('account.move', [('state', '=', 'posted')])
result = {
'facturas_borrador': borradores,
'facturas_publicadas': publicadas,
'total': borradores + publicadas
}
Permite descubrir nombres técnicos, tipos y relaciones antes de hacer escrituras:
fields_get('material.purchase.requisition', ['state', 'requisition_type', 'company_id', 'line_ids'])
Modifica de forma directa el tipo de requisición y la compañía asociada:
write('material.purchase.requisition', 21101, {
'company_id': 12,
'requisition_type': 'service',
'name': 'RAGICA00016383'
})
Crea el registro y guarda el nuevo ID:
partner_id = create('res.partner', {
'name': 'Tecnología & Soluciones Globales C.A.',
'is_company': True,
'vat': 'J-12345678-9',
'email': 'contacto@tecnosoluciones.com',
'comment': 'Creado vía Odoo Remote Portal'
})
result = f"Contacto creado exitosamente con ID: {partner_id}"
Usa read_group para sumar totales agrupados por partner_id:
read_group(
'account.move',
[('state', '=', 'posted'), ('move_type', '=', 'out_invoice')],
['amount_total:sum', 'amount_untaxed:sum'],
['partner_id'],
limit=10,
orderby='amount_total desc'
)
Extrae todas las líneas (con limit=None) que cumplan una condición y las actualiza masivamente con una sola llamada atómica:
# 1. Extraer todas las líneas asociadas a la requisición
lines = search_read(
'material.purchase.requisition.line',
[('requisition_id', '=', 21225), ('requisition_type', '=', 'internal')],
['id'],
limit=None
)
line_ids = [l['id'] for l in lines]
# 2. Actualizar tipo a 'purchase' en lote
if line_ids:
write('material.purchase.requisition.line', line_ids, {'requisition_type': 'purchase'})
result = f"✅ Se actualizaron con éxito {len(line_ids)} líneas: {line_ids}"
else:
result = "⚠️ No se encontraron líneas internas para esta requisición."
Invoca un método nativo del modelo (ej: action_post o action_confirm):
# Buscar facturas en borrador listas para validar
moves = search_read('account.move', [('state', '=', 'draft'), ('move_type', '=', 'out_invoice')], ['id'], limit=5)
move_ids = [m['id'] for m in moves]
if move_ids:
# Invocar método action_post
call('account.move', 'action_post', move_ids)
result = f"Facturas validadas exitosamente: {move_ids}"
else:
result = "No hay facturas pendientes."
Busca registros sin padre o sin referencias y los elimina de forma controlada:
# Buscar líneas sin pedido asociado
orphan_lines = search_read(
'purchase.order.line',
[('order_id', '=', False)],
['id'],
limit=50
)
ids_to_delete = [r['id'] for r in orphan_lines]
if ids_to_delete:
unlink('purchase.order.line', ids_to_delete)
result = f"🗑️ Se eliminaron {len(ids_to_delete)} líneas huérfanas: {ids_to_delete}"
else:
result = "No se encontraron líneas huérfanas."
Encuentra el ID numérico a partir del XML ID del módulo:
# 1. Obtener ID del diario de ventas principal
journal_info = get_by_xml_id('account.sales_journal')
# 2. O consultar el XML ID a partir del ID de un partner
partner_xml_id = get_xml_id('res.partner', 1)
result = {
'journal_info': journal_info,
'partner_xml_id': partner_xml_id
}