Hola Karla, gracias otra vez por tomarte el tiempo para investigar.
También probé el search sin condición "docums = Docum.search([])" y ocurre 
el error igualmente.
Es un caso para analizar mas en profundidad, seguiré buscando la solución.
Si alguien tiene algo mas que agregar estaré agradecido.

Saludos

Fernando 


El martes, 5 de diciembre de 2017, 12:53:25 (UTC-5), Karla Stenger escribió:
>
>
>
> El 4 de diciembre de 2017, 13:28, Fernando Sánchez <[email protected] 
> <javascript:>> escribió:
>
>> Hola Karla
>>
>> Gracias por tu respuesta,
>>
>> Probé haciendo lo que indicas, pero sigue igual.
>>
>> Por alguna razón no se esta remplazando _fields con la lista de campos de 
>> la tabla sunat_tipodocid al llamar al método search.
>>
> ​Investigué un poco más, y encontré que el campo _fields se agrega al 
> modelo en la funcion __post_setup__ [1] por lo que si la llamas desde 
> __setup__ es de esperar que no exista.
>
> Entiendo que esto es, o bien una limitación para la funcion __setup__ que 
> no te permite filtrar por el campo 'active' o bien un bug.
>
>
> Podrías por ejemplo eliminar el filtro para ver si así te funciona, quizás 
> considerar si es realmente necesario en este caso.
>
>
> O quizás alguien que lo entienda mejor te pueda dar otro consejo de como 
> manejarlo.
>  Por ejemplo, me pregunto si usar __post_setup__ en tu caso ayudaría.
> ​
>  
>
> Saludos,
> Karla.​
>
> ​[1]​ - http://hg.tryton.org/trytond/file/4.6/trytond/model/model.py#l56
> ​
>
>
> Aquí la definición de tipodocid:
>>
>> class TipoDocId(ModelSQL, ModelView):
>>     'Tipo de documento de identidad sunat'
>>     __name__ = 'sunat.tipodocid'
>>
>>     code = fields.Char(u'Código Tipo Documento Identidad', size=1, 
>> help=u'Tipo Documento Identidad - SUNAT: Tabla 02')
>>     name = fields.Char(u'Documento de Identidad', size=50, help=u'Nombre 
>> del Documento')
>>     active = fields.Boolean(u'Activo',help=u'Estado del registro')
>> Aquí el __init__.py
>>
>> def register():
>>     Pool.register(
>>         Party,
>>         Address,
>>         Template,
>>         Product,
>>         TipoCdp,
>>         TipoMdp,
>>         TipoExisteSUNAT,
>>         Bank,
>>         *TipoDocId,*
>>         AduanaId,
>>         OperaStock,
>>         CatalogoExiste,
>>         Company,
>>         ExportPLEStart,
>>         ExportPLEResult,
>>         PaymentType,
>>         Currency,
>>         Rate,
>>         TraerTCStart,
>>         TraerTCResult,
>>         FiscalYear,
>>         Sale,
>>         Purchase,
>>         *PartyIdentifier, *            
>>         module='liberorbis_peru_loc', type_='model')
>>     Pool.register(
>>         ExportPLE,
>>         TraerTC,
>>         module='liberorbis_peru_loc', type_='wizard')
>>
>> Seguiré dándole vueltas al asunto, si se te ocurre algo mas bienvenidos 
>> los aportes.
>>
>> Gracias otra vez.
>>
>> Fernando 
>>
>> El 04/12/17 a las 10:10, Karla Stenger escribió:
>>
>>
>>
>> El 1 de diciembre de 2017, 10:32, Fernando Sánchez <[email protected] 
>> <javascript:>> escribió:
>>
>>> Gracias Sergi y Raimon por su pronta y clara respuesta.
>>> Ya logre personalizar la selection, pero solo de forma estatica.
>>> Al poblarla dinamicamente con registros de una tabla que contiene los 
>>> valores me lanza un error.
>>> Aqui el codigo:
>>>
>>> class 
>>> ​​
>>> PartyIdentifier(ModelSQL, ModelView):
>>>     'Party Identifier'
>>>     __metaclass__ = PoolMeta
>>>     __name__ = 
>>> ​​
>>> 'party.identifier'
>>>     
>>>     @classmethod
>>>     def __setup__(cls):
>>>         super(PartyIdentifier, cls).__setup__()
>>>         tiposdocid = cls.get_types()
>>>         for tipos in tiposdocid:
>>>             if tipos not in cls.type.selection:
>>>                 cls.type.selection.append(tipos)
>>>     
>>>     @classmethod
>>>     def get_types(cls):
>>>         #return [('0', 'Otros tipos de documentos'),('6', 'RUC'),('1', 
>>> 'DNI'),('4', 'C. EXT.'),('7', 'Pasaporte'),('A',u'Cédula Diplomática de 
>>> Identidad'),]
>>>         pool = Pool()
>>>         Type = pool.get('sunat.tipodocid')
>>>         types = Type.search([('active','=','True')])
>>>         return [(x.code, x.name) for x in types]
>>>
>>> El trace del error:
>>> Traceback (most recent call last):
>>>   File "/home/nando/.virtualenvs/liberorbis46/bin/trytond-admin", line 
>>> 21, in <module>
>>>     admin.run(options)
>>>   File 
>>> "/home/nando/.virtualenvs/liberorbis46/local/lib/python2.7/site-packages/trytond/admin.py",
>>>  
>>> line 54, in run
>>>     installdeps=options.installdeps)
>>>   File 
>>> "/home/nando/.virtualenvs/liberorbis46/local/lib/python2.7/site-packages/trytond/pool.py",
>>>  
>>> line 155, in init
>>>     lang=lang, installdeps=installdeps)
>>>   File 
>>> "/home/nando/.virtualenvs/liberorbis46/local/lib/python2.7/site-packages/trytond/modules/__init__.py",
>>>  
>>> line 462, in load_modules
>>>     _load_modules(update)
>>>   File 
>>> "/home/nando/.virtualenvs/liberorbis46/local/lib/python2.7/site-packages/trytond/modules/__init__.py",
>>>  
>>> line 432, in _load_modules
>>>     load_module_graph(graph, pool, update, lang)
>>>   File 
>>> "/home/nando/.virtualenvs/liberorbis46/local/lib/python2.7/site-packages/trytond/modules/__init__.py",
>>>  
>>> line 229, in load_module_graph
>>>     pool.setup(classes)
>>>   File 
>>> "/home/nando/.virtualenvs/liberorbis46/local/lib/python2.7/site-packages/trytond/pool.py",
>>>  
>>> line 227, in setup
>>>     cls.__setup__()
>>>   File 
>>> "/home/nando/.virtualenvs/liberorbis46/local/lib/python2.7/site-packages/trytond/modules/liberorbis_peru_loc/party.py",
>>>  
>>> line 66, in __setup__
>>>     tiposdocid = cls.get_types()
>>>   File 
>>> "/home/nando/.virtualenvs/liberorbis46/local/lib/python2.7/site-packages/trytond/modules/liberorbis_peru_loc/party.py",
>>>  
>>> line 76, in get_types
>>>     types = Type.search([('active','=','True')])
>>>   File 
>>> "/home/nando/.virtualenvs/liberorbis46/local/lib/python2.7/site-packages/trytond/model/modelsql.py",
>>>  
>>> line 1128, in search
>>>     tables, expression = cls.search_domain(domain)
>>>   File 
>>> "/home/nando/.virtualenvs/liberorbis46/local/lib/python2.7/site-packages/trytond/model/modelsql.py",
>>>  
>>> line 1286, in search_domain
>>>     domain = cls._search_domain_active(domain, active_test=active_test)
>>>   File 
>>> "/home/nando/.virtualenvs/liberorbis46/local/lib/python2.7/site-packages/trytond/model/modelstorage.py",
>>>  
>>> line 407, in _search_domain_active
>>>     if not ('active' in cls._fields
>>> AttributeError: type object 
>>> ​​
>>> 'sunat.tipodocid' has no attribute '_fields'
>>>
>>
>> ​Hola Fernando,
>> no sé, pero si fuera tú, revisaría el orden en el cual se registran las 
>> clases en el Pool en __init__.py y me aseguraría que la clase 
>> ​'sunat.tipodocid' se registre antes que ​PartyIdentifier.
>> ​
>> ​Saludos,
>> Karla.​
>>
>> -- 
>> ------------------------- 
>> Karla  Mª  Stenger  Sábat
>> [email protected] <javascript:>
>>
>>
>>
>
>
> -- 
> ------------------------- 
> Karla  Mª  Stenger  Sábat
> [email protected] <javascript:>
>

Responder a