Problema inesperado al Firmar CFDi. No se guardo el XML firmado...

Asked by Salvador Martínez

Buen dia tengan todos.
Feliz Año Nuevo!!

Para comentarles que cuando intente Firmar un CFDi no obtuve respuesta alguna, y al repetir el dar click en el boton de Firmar, todo siguio igual.

Revise el Log, y ahi pude observar que el WebService de SF devuelve el mensaje:
"except_orm: (u'Aviso', u'Codigo de timbrado: 200.-Codigo de validacion 307.-Folio Fiscal: XXX.-Mensaje de timbrado: OK - Autenticaci\xf3n correcta, verifique los resultados por comprobante.-Mensaje de validacion: El CFDI ya ha sido timbrado previamente.El CFDI ya ha sido registrado con el folio fiscal XXX...')"

Y revisando la documentacion en http://solucionfactible.com/sfic/capitulos/timbrado/ws-timbrado-timbrar.jsp
Dice que el Codigo de Validacion 307 quiere decir que el Comprobante ya ha sido timbrado. Pero adema, dice que en este caso la respuesta contiene los datos del timbre original.

Por lo que me preguntaba, si fuera correcto hacer una pequeña modificación al archivo "l10n_mx_facturae_pac_sf/ir_attachment_facturae.py" en la linea 256:

-- ANTES:
elif codigo_timbrado == '200' and codigo_validacion == '200':

--MODIFICADO:
elif codigo_timbrado == '200' and codigo_validacion == '200' or codigo_validacion == '307':

Esto con la intencion unica, de que si se presento un error por X o Y razon en la comunicación con el WebService, pero si se realizo el timbrado, pueda recuperar los datos del timbre.

Ya hice el cambio en mi instalacion, y funciono, pero mejor consultarlo con ustedes.

Reciban un cordial saludo!

Question information

Language:
Spanish Edit question
Status:
Answered
For:
openerp-mexico-localization Edit question
Assignee:
No assignee Edit question
Last query:
Last reply:
Revision history for this message
Moisés López - http://www.vauxoo.com (moylop260) said :
#1

Hola Salvador,
Gracias por tu propuesta.
Si puedes generar una propuesta de merge, nos ahorra mucho tiempo para
poderlo revisar, probar y generar los comentarios correspondientes en dicha
mejora.

Identificando el tema que comentas, esto ocurre generalmente cuando
intentas firmar 2 veces exactamente la misma factura (misma fecha, mismas
cantidades, cliente...), lo cual en OpenERP debería de quedarle una sola
como válida, y la otra no te debería de dejarla pasar como válida.
Si explícitamente quieres que te permita ser válida, solo necesitas cambiar
un valor significativo en la factura (como por ejemplo, la fecha, así sean
los segundos o los minutos), y volver a validar.

Sin embargo, el cambio que entiendo estás proponiendo, hay que analizarlo
más, para evitar que ocurra el tema de que más de un registro de factura en
OpenERP compartan el mismo archivo fiscal del PAC, que IMHO no debería de
ser.

--
Moisés López Calderón
Vauxoo - OpenERP's Gold Partner
mobile: (+521) 477-752-22-30
Tel: (+52) 477-773-33-46
skype: moylop260
web: http://www.vauxoo.com
twitter: @moylop260
            @vauxoo

Revision history for this message
Salvador Martínez (salvador-martinez) said :
#2

Hola Moises,
Gracias por tu respuesta.

Voy a generar la propuesta de merge.

En cuanto al problema, lo que pasó fué que confirmamos un adjunto de CFDi, despues dimos click en Firmar y en un principio se mostro el indicador de que estaba trabajando, pero despues no realizo nada, el adjunto no cambio de Estado.

Despues, cada vez que intentamos dar click nuevamente en el botón de Firmar, el adjunto no mostró cambio alguno, tampoco mostro mensaje de error.

A partir de aqui es cuando entré a ver el Log, y es en este momento que ví el mensaje que comenté al principio.

Cabe mencionar que es sobre la misma Factura (mismo registro de Invoice en OpenERP), no es otra factura diferente.

* Revisando el Log nuevamente, vi que ocurrio un error anterior al que me mandó SF, y fué al momento del primer intento de Firmado:

"
2014-01-09 15:19:36,798 24011 ERROR corpo_2014 openerp.sql_db: bad query: update ir_attachment set "db_datas"='\x5044393462577767646d567963326c76626a30694d5334774969426c626d4e765a476c755a7a3069565652474c546769507a344e436a786a5a6d52704f6b4e766258427962324a68626e526c0a494868746247357a4f6d4e6d5a476b39496d68.....
.....
e6634746796447356c636e4d7565484e6b49694176506a77760a59325a6b615470425a47526c626d5268506a777659325a6b6154704462323177636d3969595735305a54344e43673d3d0a'::bytea,"file_size"=4651,write_uid=1,write_date=(now() at time zone 'UTC') where id IN (47)
Traceback (most recent call last):
  File "/home/openerp/instancias/estable/7.0/server/openerp/sql_db.py", line 226, in execute
    res = self._obj.execute(query, params)
TransactionRollbackError: could not serialize access due to concurrent update
CONTEXT: SQL statement "SELECT 1 FROM ONLY "public"."res_users" x WHERE "id" OPERATOR(pg_catalog.=) $1 FOR SHARE OF x"

2014-01-09 15:19:36,833 24011 ERROR corpo_2014 openerp.sql_db: bad query: SELECT "res_company".id FROM "res_company" WHERE ("res_company"."parent_id" in (1)) ORDER BY "res_company"."name"
Traceback (most recent call last):
  File "/home/openerp/instancias/estable/7.0/server/openerp/sql_db.py", line 226, in execute
    res = self._obj.execute(query, params)
InternalError: current transaction is aborted, commands ignored until end of transaction block

2014-01-09 15:19:36,834 24011 ERROR corpo_2014 openerp.osv.osv: Uncaught exception
Traceback (most recent call last):
  File "/home/openerp/instancias/estable/7.0/server/openerp/osv/osv.py", line 131, in wrapper
    return f(self, dbname, *args, **kwargs)
  File "/home/openerp/instancias/estable/7.0/server/openerp/osv/osv.py", line 197, in execute
    res = self.execute_cr(cr, uid, obj, method, *args, **kw)
  File "/home/openerp/instancias/estable/7.0/server/openerp/osv/osv.py", line 185, in execute_cr
    return getattr(object, method)(cr, uid, *args, **kw)
  File "/home/openerp/instancias/estable/7.0/modules/l10n_mx_ir_attachment_facturae/ir_attachment_facturae.py", line 258, in signal_sign
    self.write(cr, uid, ids, {'msj': error}, context=context)
  File "/home/openerp/instancias/estable/7.0/modules/mail/mail_thread.py", line 280, in write
    initial = self.read(cr, uid, ids, tracked_fields.keys(), context=track_ctx)
  File "/home/openerp/instancias/estable/7.0/server/openerp/osv/orm.py", line 3630, in read
    result = self._read_flat(cr, user, select, fields, context, load)
  File "/home/openerp/instancias/estable/7.0/server/openerp/osv/orm.py", line 3672, in _read_flat
    rule_clause, rule_params, tables = self.pool.get('ir.rule').domain_get(cr, user, self._name, 'read', context=context)
  File "/home/openerp/instancias/estable/7.0/server/openerp/addons/base/ir/ir_rule.py", line 156, in domain_get
    query = self.pool.get(model_name)._where_calc(cr, SUPERUSER_ID, dom, active_test=False)
  File "/home/openerp/instancias/estable/7.0/server/openerp/osv/orm.py", line 4707, in _where_calc
    e = expression.expression(cr, user, domain, self, context)
  File "/home/openerp/instancias/estable/7.0/server/openerp/osv/expression.py", line 642, in __init__
    self.parse(cr, uid, context=context)
  File "/home/openerp/instancias/estable/7.0/server/openerp/osv/expression.py", line 974, in parse
    dom = child_of_domain(left, ids2, relational_model, prefix=field._obj)
  File "/home/openerp/instancias/estable/7.0/server/openerp/osv/expression.py", line 726, in child_of_domain
    return [(left, 'in', recursive_children(ids, left_model, parent or left_model._parent_name))]
  File "/home/openerp/instancias/estable/7.0/server/openerp/osv/expression.py", line 724, in recursive_children
    ids2 = model.search(cr, uid, [(parent_field, 'in', ids)], context=context)
  File "/home/openerp/instancias/estable/7.0/server/openerp/osv/orm.py", line 2376, in search
    return self._search(cr, user, args, offset=offset, limit=limit, order=order, context=context, count=count)
  File "/home/openerp/instancias/estable/7.0/server/openerp/addons/base/res/res_company.py", line 197, in _search
    context=context, count=count, access_rights_uid=access_rights_uid)
  File "/home/openerp/instancias/estable/7.0/server/openerp/osv/orm.py", line 4894, in _search
    cr.execute('SELECT "%s".id FROM ' % self._table + from_clause + where_str + order_by + limit_str + offset_str, where_clause_params)
  File "/home/openerp/instancias/estable/7.0/server/openerp/sql_db.py", line 161, in wrapper
    return f(self, *args, **kwargs)
  File "/home/openerp/instancias/estable/7.0/server/openerp/sql_db.py", line 226, in execute
    res = self._obj.execute(query, params)
InternalError: current transaction is aborted, commands ignored until end of transaction block

2014-01-09 15:19:36,884 24011 ERROR corpo_2014 openerp.netsvc: current transaction is aborted, commands ignored until end of transaction block
Traceback (most recent call last):
  File "/home/openerp/instancias/estable/7.0/server/openerp/netsvc.py", line 292, in dispatch_rpc
    result = ExportService.getService(service_name).dispatch(method, params)
  File "/home/openerp/instancias/estable/7.0/server/openerp/service/web_services.py", line 626, in dispatch
    res = fn(db, uid, *params)
  File "/home/openerp/instancias/estable/7.0/server/openerp/osv/osv.py", line 188, in execute_kw
    return self.execute(db, uid, obj, method, *args, **kw or {})
  File "/home/openerp/instancias/estable/7.0/server/openerp/osv/osv.py", line 131, in wrapper
    return f(self, dbname, *args, **kwargs)
  File "/home/openerp/instancias/estable/7.0/server/openerp/osv/osv.py", line 197, in execute
    res = self.execute_cr(cr, uid, obj, method, *args, **kw)
  File "/home/openerp/instancias/estable/7.0/server/openerp/osv/osv.py", line 185, in execute_cr
    return getattr(object, method)(cr, uid, *args, **kw)
  File "/home/openerp/instancias/estable/7.0/modules/l10n_mx_ir_attachment_facturae/ir_attachment_facturae.py", line 258, in signal_sign
    self.write(cr, uid, ids, {'msj': error}, context=context)
  File "/home/openerp/instancias/estable/7.0/modules/mail/mail_thread.py", line 280, in write
    initial = self.read(cr, uid, ids, tracked_fields.keys(), context=track_ctx)
  File "/home/openerp/instancias/estable/7.0/server/openerp/osv/orm.py", line 3630, in read
    result = self._read_flat(cr, user, select, fields, context, load)
  File "/home/openerp/instancias/estable/7.0/server/openerp/osv/orm.py", line 3672, in _read_flat
    rule_clause, rule_params, tables = self.pool.get('ir.rule').domain_get(cr, user, self._name, 'read', context=context)
  File "/home/openerp/instancias/estable/7.0/server/openerp/addons/base/ir/ir_rule.py", line 156, in domain_get
    query = self.pool.get(model_name)._where_calc(cr, SUPERUSER_ID, dom, active_test=False)
  File "/home/openerp/instancias/estable/7.0/server/openerp/osv/orm.py", line 4707, in _where_calc
    e = expression.expression(cr, user, domain, self, context)
  File "/home/openerp/instancias/estable/7.0/server/openerp/osv/expression.py", line 642, in __init__
    self.parse(cr, uid, context=context)
  File "/home/openerp/instancias/estable/7.0/server/openerp/osv/expression.py", line 974, in parse
    dom = child_of_domain(left, ids2, relational_model, prefix=field._obj)
  File "/home/openerp/instancias/estable/7.0/server/openerp/osv/expression.py", line 726, in child_of_domain
    return [(left, 'in', recursive_children(ids, left_model, parent or left_model._parent_name))]
  File "/home/openerp/instancias/estable/7.0/server/openerp/osv/expression.py", line 724, in recursive_children
    ids2 = model.search(cr, uid, [(parent_field, 'in', ids)], context=context)
  File "/home/openerp/instancias/estable/7.0/server/openerp/osv/orm.py", line 2376, in search
    return self._search(cr, user, args, offset=offset, limit=limit, order=order, context=context, count=count)
  File "/home/openerp/instancias/estable/7.0/server/openerp/addons/base/res/res_company.py", line 197, in _search
    context=context, count=count, access_rights_uid=access_rights_uid)
  File "/home/openerp/instancias/estable/7.0/server/openerp/osv/orm.py", line 4894, in _search
    cr.execute('SELECT "%s".id FROM ' % self._table + from_clause + where_str + order_by + limit_str + offset_str, where_clause_params)
  File "/home/openerp/instancias/estable/7.0/server/openerp/sql_db.py", line 161, in wrapper
    return f(self, *args, **kwargs)
  File "/home/openerp/instancias/estable/7.0/server/openerp/sql_db.py", line 226, in execute
    res = self._obj.execute(query, params)
InternalError: current transaction is aborted, commands ignored until end of transaction block

"

Con esto, me da la impresión de que ocurrio un error (el cuál no se de que se tráte) justo antes de procesar la respuesta de SF. Es decir, si realizó el firmado correctamente, devolvio la respuesta, pero ocurrio el error en ese momento, por lo que no se pudo procesar y registrar la respuesta, ya que la operación fué abortada.

Espero que este comentario ayude para clarificar mas este asunto.

Gracias por el trabajo que hacen a diario para esta comunidad!

Saludos!

Revision history for this message
Moisés López - http://www.vauxoo.com (moylop260) said :
#3

Que revno estas usando?

Revision history for this message
Salvador Martínez (salvador-martinez) said :
#4

Hola Moises,
Perdon, olvide ponerlo.

La revno es la 345.

Saludos!

Can you help with this problem?

Provide an answer of your own, or ask Salvador Martínez for more information if necessary.

To post a message you must log in.