Discussion:
[tryton-es] Agregar datos en Campo One2Many en un on_change
Tatiana Quizhpe
2017-02-06 15:24:42 UTC
Permalink
Saludos

Buen día, hay alguna otra forma de agregar datos en un Campo One2Many,
actualmente
lo hago de la siguiente manera [1], el método está dentro de un on_change
ya que necesito
que de acuerdo a como cambia el campo (product ) que es tipo Char, se vaya
actualizando
el Campo (lines) One2Many.
Funciona bien cuando son pocos registros aprox. 50 pero al pasar esta
cantidad demora
en agregar las líneas, dependiendo del número de registros, necesito que el
proceso se
realice en menos tiempo. Trabajo con la versión 3.4.

[1]
@fields.depends('product', 'lines')
def on_change_product(self):
res = {}
res['lines'] = {}
if self.lines:
res['lines']['remove'] = [x['id'] for x in self.lines]

if not self.product:
return res

name = self.product+'%'
products = Product.search([('name', 'ilike', name)])
for p in products:

product_line = {
'product': p.id,
'precio_venta':p.list_price,
}
res['lines'].setdefault('add', []).append((0, product_line))

Desde ya gracias.
Sergi Almacellas Abellana
2017-02-06 15:48:32 UTC
Permalink
Post by Tatiana Quizhpe
Saludos
Buen día, hay alguna otra forma de agregar datos en un Campo One2Many,
actualmente
lo hago de la siguiente manera [1], el método está dentro de un
on_change ya que necesito
que de acuerdo a como cambia el campo (product ) que es tipo Char, se
vaya actualizando
el Campo (lines) One2Many.
El código lo veo correcto.
Post by Tatiana Quizhpe
Funciona bien cuando son pocos registros aprox. 50 pero al pasar esta
cantidad demora
en agregar las líneas, dependiendo del número de registros, necesito que
el proceso se
realice en menos tiempo.
¿Cuanto tiempo es demora mucho? ¿Sabes que es lo que demora? Es decir:
¿tarda en cargar los datos en el cliente o tarda en procesarlo en el
servidor?

Trabajo con la versión 3.4.
¿Has probado con una versión mas nueva?
Post by Tatiana Quizhpe
[1]
@fields.depends('product', 'lines')
res = {}
res['lines'] = {}
res['lines']['remove'] = [x['id'] for x in self.lines]
return res
name = self.product+'%'
products = Product.search([('name', 'ilike', name)])
product_line = {
'product': p.id,
'precio_venta':p.list_price,
}
res['lines'].setdefault('add', []).append((0, product_line))
Desde ya gracias.
--
Sergi Almacellas Abellana
www.koolpi.com
Twitter: @pokoli_srk
Tatiana Quizhpe
2017-02-06 17:08:47 UTC
Permalink
El lunes, 6 de febrero de 2017, 10:48:34 (UTC-5), Sergi Almacellas Abellana
Post by Tatiana Quizhpe
Saludos
Buen día, hay alguna otra forma de agregar datos en un Campo One2Many,
actualmente
lo hago de la siguiente manera [1], el método está dentro de un
on_change ya que necesito
que de acuerdo a como cambia el campo (product ) que es tipo Char, se
vaya actualizando
el Campo (lines) One2Many.
El código lo veo correcto.
Post by Tatiana Quizhpe
Funciona bien cuando son pocos registros aprox. 50 pero al pasar esta
cantidad demora
en agregar las líneas, dependiendo del número de registros, necesito que
el proceso se
realice en menos tiempo.
¿tarda en cargar los datos en el cliente o tarda en procesarlo en el
servidor?
Tengo mas o menos 6000 productos, al hacer la búsqueda de acuerdo al valor
ingresado en el campo
(product) tipo Char y presentar el resultado en el campo (lines) tipo
One2Many de unos 200 registros
demora hasta 50 segundos aprox.
Hice un print al final del método [1] y en la linea de comando se presenta
el resultado en unos 6 segundos
aprox. pero en el cliente se agregan las líneas despues de 40 seg. aprox.
No se si me equivoco pero pienso
que demora al cargar los datos en el cliente

[1]
print "Res", res
return res

Trabajo con la versión 3.4.
¿Has probado con una versión mas nueva?
No he utilizado otra version, haré una prueba para verificar
Post by Tatiana Quizhpe
[1]
@fields.depends('product', 'lines')
res = {}
res['lines'] = {}
res['lines']['remove'] = [x['id'] for x in self.lines]
return res
name = self.product+'%'
products = Product.search([('name', 'ilike', name)])
product_line = {
'product': p.id,
'precio_venta':p.list_price,
}
res['lines'].setdefault('add', []).append((0,
product_line))
Post by Tatiana Quizhpe
Desde ya gracias.
--
Sergi Almacellas Abellana
www.koolpi.com
Gracias por la respuesta
Sergi Almacellas Abellana
2017-02-08 12:57:15 UTC
Permalink
Tengo mas o menos 6000 productos, al hacer la búsqueda de acuerdo al
valor ingresado en el campo
(product) tipo Char y presentar el resultado en el campo (lines) tipo
One2Many de unos 200 registros
demora hasta 50 segundos aprox.
Hice un print al final del método [1] y en la linea de comando se
presenta el resultado en unos 6 segundos
aprox. pero en el cliente se agregan las líneas despues de 40 seg.
aprox. No se si me equivoco pero pienso
que demora al cargar los datos en el cliente
Segun tus palabras tus suposiciones son ciertas.

De todos modos, estaria bien que montaras algun mini modulo para que los
de demas podamos reproducir el error. Sinó es complicado de ayudar, y
mas en estas incidencias de rendimiento.
--
Sergi Almacellas Abellana
www.koolpi.com
Twitter: @pokoli_srk
Tatiana Quizhpe
2017-02-08 17:15:51 UTC
Permalink
Saludos, gracias

El miércoles, 8 de febrero de 2017, 7:57:19 (UTC-5), Sergi Almacellas
Post by Sergi Almacellas Abellana
De todos modos, estaria bien que montaras algun mini modulo para que los
de demas podamos reproducir el error. Sinó es complicado de ayudar, y
mas en estas incidencias de rendimiento.
Adjunto el link [1] se encuentra especificamente la parte en la que
estoy teniendo el inconveniente.

[1]
https://www.dropbox.com/s/9d5e2050bn5pb3s/sale_stock_product_mini.tar.gz?dl=0
Post by Sergi Almacellas Abellana
--
Sergi Almacellas Abellana
www.koolpi.com
De antemano gracias
Sergi Almacellas Abellana
2017-02-09 08:26:52 UTC
Permalink
Post by Tatiana Quizhpe
Saludos, gracias
El miércoles, 8 de febrero de 2017, 7:57:19 (UTC-5), Sergi Almacellas
De todos modos, estaria bien que montaras algun mini modulo para que los
de demas podamos reproducir el error. Sinó es complicado de ayudar, y
mas en estas incidencias de rendimiento.
Adjunto el link [1] se encuentra especificamente la parte en la que
estoy teniendo el inconveniente.
Viendo el código del módulo no me queda exactamente claro lo que quieres
hacer, però quizas se podría solucionar haciendo un Modelo que mediante
un table_query [2], te calcularà la información que tu quieres y luego
solo habria que mostrar la información con un One2Many, con lo que
conseguirias delegar el cálculo a la base de datos y que te muestre solo
la información filtrada, cosa que seria (en teoria) más rapido.

De todos modos, si en el código tienes el id del prdocuto, no hace falta
que luego hagas una búsqueda por code y name, sinó que ya puedes
trabajar directamente con el id.

Espero que te sea de ayuda.

Un saludo,

[2]
http://doc.tryton.org/4.2/trytond/doc/ref/models/models.html?highlight=table_query#trytond.model.ModelSQL.table_query
--
Sergi Almacellas Abellana
www.koolpi.com
Twitter: @pokoli_srk
Tatiana Quizhpe
2017-02-10 23:24:22 UTC
Permalink
El jueves, 9 de febrero de 2017, 3:26:55 (UTC-5), Sergi Almacellas Abellana
Viendo el código del módulo no me queda exactamente claro lo que quieres
hacer, però quizas se podría solucionar haciendo un Modelo que mediante
un table_query [2], te calcularà la información que tu quieres y luego
solo habria que mostrar la información con un One2Many, con lo que
conseguirias delegar el cálculo a la base de datos y que te muestre solo
la información filtrada, cosa que seria (en teoria) más rapido.
He revisado y no cubre lo que necesito. Gracias
De todos modos, si en el código tienes el id del prdocuto, no hace falta
que luego hagas una búsqueda por code y name, sinó que ya puedes
trabajar directamente con el id.
La búsqueda se hace de acuerdo al Valor que ingresa el Usuario
en el cual puede buscar por código del Producto o nombre
de la Plantilla.
Espero que te sea de ayuda.
Un saludo,
[2]
http://doc.tryton.org/4.2/trytond/doc/ref/models/models.html?highlight=table_query#trytond.model.ModelSQL.table_query
He trabajado con la version 4.0 y lo mismo demora al presentar los datos
en el cliente.
Buscando información encontre el módulo [3] que se relaciona más o
o menos con lo que necesito, (claro que es en otro modelo) en el
módulo [3] al hacer un Comprobante de Pago (voucher), cuando se
cambia el Tercero se actualizan las lineas Pendientes de Pago, hice
pruebas en la version 3.4 y 4.0 igual demora en presentar los registros,
(esto cuando los registros pasan de 60). Espero su respuesta, gracias
por la ayuda.

Saludos

[3]
https://github.com/tryton-ar/account_voucher_ar/blob/master/account_voucher_ar.py
Sergi Almacellas Abellana
2017-02-13 09:09:44 UTC
Permalink
Buscando información encontre el módulo [3] que se relaciona más o
o menos con lo que necesito, (claro que es en otro modelo) en el
módulo [3] al hacer un Comprobante de Pago (voucher), cuando se
cambia el Tercero se actualizan las lineas Pendientes de Pago, hice
pruebas en la version 3.4 y 4.0 igual demora en presentar los registros,
(esto cuando los registros pasan de 60). Espero su respuesta, gracias
por la ayuda.
Entonces ya habria que mirar porqué tarda en cargar estos registros y si
se puede hacer algun parche para solucionar-lo. I en caso de encontrar
alguna mejora subirla como parche del cliente.

Un saludo,
--
Sergi Almacellas Abellana
www.koolpi.com
Twitter: @pokoli_srk
Tatiana Quizhpe
2017-02-13 21:19:02 UTC
Permalink
El lunes, 13 de febrero de 2017, 4:09:46 (UTC-5), Sergi Almacellas Abellana
Post by Tatiana Quizhpe
Buscando información encontre el módulo [3] que se relaciona más o
o menos con lo que necesito, (claro que es en otro modelo) en el
módulo [3] al hacer un Comprobante de Pago (voucher), cuando se
cambia el Tercero se actualizan las lineas Pendientes de Pago, hice
pruebas en la version 3.4 y 4.0 igual demora en presentar los registros,
(esto cuando los registros pasan de 60). Espero su respuesta, gracias
por la ayuda.
Entonces ya habria que mirar porqué tarda en cargar estos registros y si
se puede hacer algun parche para solucionar-lo. I en caso de encontrar
alguna mejora subirla como parche del cliente.
Gracias por la ayuda, cualquier cosa la haré saber.
Saludos
Tatiana Quizhpe
2017-03-06 14:15:09 UTC
Permalink
Post by Tatiana Quizhpe
El lunes, 13 de febrero de 2017, 4:09:46 (UTC-5), Sergi Almacellas
Post by Tatiana Quizhpe
Post by Tatiana Quizhpe
Buscando información encontre el módulo [3] que se relaciona más o
o menos con lo que necesito, (claro que es en otro modelo) en el
módulo [3] al hacer un Comprobante de Pago (voucher), cuando se
cambia el Tercero se actualizan las lineas Pendientes de Pago, hice
pruebas en la version 3.4 y 4.0 igual demora en presentar los
registros,
Post by Tatiana Quizhpe
(esto cuando los registros pasan de 60). Espero su respuesta, gracias
por la ayuda.
Entonces ya habria que mirar porqué tarda en cargar estos registros y si
se puede hacer algun parche para solucionar-lo. I en caso de encontrar
alguna mejora subirla como parche del cliente.
Hola, buen día.
Retomando el tema, en que parte del cliente habría que revisar para ver si
se encuentra alguna mejora.

Gracias de antemano

Saludos
Sergi Almacellas Abellana
2017-03-07 08:46:46 UTC
Permalink
Post by Tatiana Quizhpe
El lunes, 13 de febrero de 2017, 4:09:46 (UTC-5), Sergi Almacellas
Buscando información encontre el módulo [3] que se relaciona
más o
o menos con lo que necesito, (claro que es en otro modelo) en el
módulo [3] al hacer un Comprobante de Pago (voucher), cuando se
cambia el Tercero se actualizan las lineas Pendientes de Pago,
hice
pruebas en la version 3.4 y 4.0 igual demora en presentar los
registros,
(esto cuando los registros pasan de 60). Espero su respuesta,
gracias
por la ayuda.
Entonces ya habria que mirar porqué tarda en cargar estos registros y si
se puede hacer algun parche para solucionar-lo. I en caso de encontrar
alguna mejora subirla como parche del cliente.
Hola, buen día.
Retomando el tema, en que parte del cliente habría que revisar para ver si
se encuentra alguna mejora.
En el código fuente del cliente :)

Por ejemplo puedes empezar investigando por:

http://hg.tryton.org/tryton/file/tip/tryton/gui/window/view_form/model/record.py#l483

Y luego ver realmente en que funcion demora mucho tiempo y si esta se
puede optimizar.

Un saludo,
--
Sergi Almacellas Abellana
www.koolpi.com
Twitter: @pokoli_srk
Tatiana Quizhpe
2017-03-07 14:58:15 UTC
Permalink
El martes, 7 de marzo de 2017, 3:46:48 (UTC-5), Sergi Almacellas Abellana
El lunes, 13 de febrero de 2017, 16:19:02 (UTC-5), Tatiana Quizhpe
El lunes, 13 de febrero de 2017, 4:09:46 (UTC-5), Sergi Almacellas
Post by Tatiana Quizhpe
Buscando información encontre el módulo [3] que se relaciona
más o
Post by Tatiana Quizhpe
o menos con lo que necesito, (claro que es en otro modelo) en
el
Post by Tatiana Quizhpe
módulo [3] al hacer un Comprobante de Pago (voucher), cuando
se
Post by Tatiana Quizhpe
cambia el Tercero se actualizan las lineas Pendientes de Pago,
hice
Post by Tatiana Quizhpe
pruebas en la version 3.4 y 4.0 igual demora en presentar los
registros,
Post by Tatiana Quizhpe
(esto cuando los registros pasan de 60). Espero su respuesta,
gracias
Post by Tatiana Quizhpe
por la ayuda.
Entonces ya habria que mirar porqué tarda en cargar estos
registros y si
se puede hacer algun parche para solucionar-lo. I en caso de encontrar
alguna mejora subirla como parche del cliente.
Hola, buen día.
Retomando el tema, en que parte del cliente habría que revisar para ver
si
se encuentra alguna mejora.
En el código fuente del cliente :)
:D
http://hg.tryton.org/tryton/file/tip/tryton/gui/window/view_form/model/record.py#l483
Y luego ver realmente en que funcion demora mucho tiempo y si esta se
puede optimizar.
Gracias por la respuesta, efectivamente estoy revisando lo que indica
gracias

Saludos
Josias Pérez
2017-09-19 21:29:01 UTC
Permalink
No me funciona el código, alguna actualización? Gracias.
Post by Tatiana Quizhpe
Saludos
Buen día, hay alguna otra forma de agregar datos en un Campo One2Many,
actualmente
lo hago de la siguiente manera [1], el método está dentro de un on_change
ya que necesito
que de acuerdo a como cambia el campo (product ) que es tipo Char, se vaya
actualizando
el Campo (lines) One2Many.
Funciona bien cuando son pocos registros aprox. 50 pero al pasar esta
cantidad demora
en agregar las líneas, dependiendo del número de registros, necesito que
el proceso se
realice en menos tiempo. Trabajo con la versión 3.4.
[1]
@fields.depends('product', 'lines')
res = {}
res['lines'] = {}
res['lines']['remove'] = [x['id'] for x in self.lines]
return res
name = self.product+'%'
products = Product.search([('name', 'ilike', name)])
product_line = {
'product': p.id,
'precio_venta':p.list_price,
}
res['lines'].setdefault('add', []).append((0,
product_line))
Desde ya gracias.
Sergi Almacellas Abellana
2017-09-20 07:24:08 UTC
Permalink
No me funciona el código, alguna actualización? Gracias.
En que version de tryton trabajas?

Que intentas hacer?

Si nos das mas información quizás te podamos ayudar con mas detalle.

Un saludo,
--
Sergi Almacellas Abellana
www.koolpi.com
Twitter: @pokoli_srk
Josias Pérez
2017-09-22 23:32:21 UTC
Permalink
def on_change_product(self):
res = {}
res['lines'] = {}
if self.lines:
Tengo problemas en esta línea
res['lines']['remove'] = [x['id'] for x in self.lines]

if not self.product:
return res

name = self.product+'%'
products = Product.search([('name', 'ilike', name)])
for p in products:

product_line = {
'product': p.id,
'precio_venta':p.list_price,
}
Y en esta también
res['lines'].setdefault('add', []).append((0, product_line))

Quiero que al efectuar un on_change en un campo me actualice un campo
one2many, estoy en la versión 4.4

Desde ya muchas gracias

El miércoles, 20 de septiembre de 2017, 1:24:11 (UTC-6), Sergi Almacellas
Post by Sergi Almacellas Abellana
Post by Josias Pérez
No me funciona el código, alguna actualización? Gracias.
En que version de tryton trabajas?
Que intentas hacer?
Si nos das mas información quizás te podamos ayudar con mas detalle.
Un saludo,
--
Sergi Almacellas Abellana
www.koolpi.com
Sergi Almacellas Abellana
2017-09-22 23:42:57 UTC
Permalink
Post by Tatiana Quizhpe
res = {}
res['lines'] = {}
Tengo problemas en esta línea
res['lines']['remove'] = [x['id'] for x in self.lines]
return res
name = self.product+'%'
products = Product.search([('name', 'ilike', name)])
product_line = {
'product': p.id,
'precio_venta':p.list_price,
}
Y en esta también
res['lines'].setdefault('add', []).append((0, product_line))
Quiero que al efectuar un on_change en un campo me actualice un campo
one2many, estoy en la versión 4.4
En la version 4.4 los on_change ya no tienen que devolver un diccionario sino que tienes que modificar directamente la instancia con ActiveRecord. Seria algo como:

self.lines = []

for p in products:
line = Line()
line.product = product
....
self.lines.append(line)

I ya lo tendrias. Asegurate de que el metodo no devuelva nada, sino que simplemente modifique la instancia.
Post by Tatiana Quizhpe
Desde ya muchas gracias
Espero que te servia de ayuda.

Saludos,
Post by Tatiana Quizhpe
El miércoles, 20 de septiembre de 2017, 1:24:11 (UTC-6), Sergi
Almacellas
Post by Sergi Almacellas Abellana
No me funciona el código, alguna actualización? Gracias.
En que version de tryton trabajas?
Que intentas hacer?
Si nos das mas información quizás te podamos ayudar con mas detalle.
Un saludo,
--
Sergi Almacellas Abellana
www.koolpi.com
--
Enviado desde mi dispositivo Android con K-9 Mail. Por favor, disculpa mi brevedad.
Josias Pérez
2017-09-25 19:16:14 UTC
Permalink
Funciono muy bien para agregar los datos. Tengo duda remover las líneas
generadas si el elemento que genera el on_change cambia o se deja en
blanco. Creo que solo reconoce las líneas si ya está guardado el archivo.

El viernes, 22 de septiembre de 2017, 17:43:00 (UTC-6), Sergi Almacellas
Post by Sergi Almacellas Abellana
Post by Tatiana Quizhpe
res = {}
res['lines'] = {}
Tengo problemas en esta línea
res['lines']['remove'] = [x['id'] for x in self.lines]
return res
name = self.product+'%'
products = Product.search([('name', 'ilike', name)])
product_line = {
'product': p.id,
'precio_venta':p.list_price,
}
Y en esta también
res['lines'].setdefault('add', []).append((0, product_line))
Quiero que al efectuar un on_change en un campo me actualice un campo
one2many, estoy en la versión 4.4
En la version 4.4 los on_change ya no tienen que devolver un diccionario
sino que tienes que modificar directamente la instancia con ActiveRecord.
self.lines = []
line = Line()
line.product = product
....
self.lines.append(line)
I ya lo tendrias. Asegurate de que el metodo no devuelva nada, sino que
simplemente modifique la instancia.
Post by Tatiana Quizhpe
Desde ya muchas gracias
Espero que te servia de ayuda.
Saludos,
Post by Tatiana Quizhpe
El miércoles, 20 de septiembre de 2017, 1:24:11 (UTC-6), Sergi Almacellas
Post by Sergi Almacellas Abellana
Post by Josias Pérez
No me funciona el código, alguna actualización? Gracias.
En que version de tryton trabajas?
Que intentas hacer?
Si nos das mas información quizás te podamos ayudar con mas detalle.
Un saludo,
--
Sergi Almacellas Abellana
www.koolpi.com
--
Enviado desde mi dispositivo Android con K-9 Mail. Por favor, disculpa mi brevedad.
Sergi Almacellas Abellana
2017-09-26 07:16:30 UTC
Permalink
Funciono muy bien para agregar los datos. Tengo duda remover las líneas
generadas si el elemento que genera el on_change cambia o se deja en
blanco. Creo que solo reconoce las líneas si ya está guardado el archivo.
Si devuelves una lista vacia para el campo el cliente eliminarà las
listas ya existentes.

Un saludo,
--
Sergi Almacellas Abellana
www.koolpi.com
Twitter: @pokoli_srk
Continúe leyendo en narkive:
Resultados de búsqueda para '[tryton-es] Agregar datos en Campo One2Many en un on_change' (Preguntas y respuestas)
31
respuestas
¿Cómo se cura el herpes labial?
iniciado 2007-05-02 06:02:06 UTC
salud
Loading...