Skip to content

Solución a Errores con AFIP

Ignacio Buioli edited this page Feb 1, 2024 · 7 revisions

Errores con AFIP

There is an error in XML document() --→ Input string was not in a correct format

Un error muy común al validar una factura por primera vez es recibir un mensaje de error con la siguiente estructura:

AFIP Validation Error. Falla SOAP sopa:Client: Server was unable to read request. --→ There is an error in XML document(5, 1494) --→ Input string was not in a correct format.

Posiblemente se deba a que los impuestos no están correctamente configurados con el grupo de impuestos. Para esto nos vamos a dirigir a Facturación / Contabilidad > Configuración > Impuestos y vamos a buscar los impuestos de Ventas (como IVA 21% Ventas o IVA 10.5% Ventas) y a cada uno de esos impuestos los colocaremos en el grupo de impuestos tipo IVA. Esto se realiza desde la pestaña Opciones Avanzadas, seleccionando el campo Grupo de Impuestos (sin editar, para que nos lleve a dicho grupo). Ya en el grupo en cuestión lo editaremos, modificando el campo Tipo de Impuestos (que normalmente se encontrará vacío) para que diga IVA.

AttributeError: 'bytes' object has no attribute 'encode'

Al intentar conectarse a AFIP se recibe el siguiente error:

Could not connect. This is the what we received: AttributeError: 'bytes' object has no attribute 'encode'

Este error se ha registrado en una instalación realizada sobre CentOS 7. Solución: Ingresar al paquete pyafipws instalado en el directorio de python y editar el archivo wsaa.py. Buscar la línea return tra.as_xml().encode('utf-8') y reemplazarla por return tra.as_xml(). Reiniciar el servidor de Odoo.

TypeError: data must be bytes or None, not str

Al intentar conectarse a AFIP se recibe el siguiente error:

Could not connect. This is the what we received: AttributeError: 'bytes' object has no attribute 'encode'

Este es un error de sistemas y está relacionado con el paquete pyafipws y su instalación. La solución requiere conocimientos básicos en Python. Nos vamos a dirigir a la ruta donde se instaló el paquete y editamos el archivo wsaa.py. Debemos buscar cada función write y agregarle un encode('utf-8'). Por ejemplo en lugar de esto: f.write(bio.read()) debe quedar asi: f.write(bio.encode('utf-8').read()) Reiniciamos el servidor de Odoo.

generationTime posee formato o dato inválido

Este error ocurre en instalaciones OnPremise Enterprise cuando el servidor no tiene sincronizado el reloj interno. Ocurre al hacer un test desde ajustes de los certificados. El mesaje suele ser el siguiente:

* wsfe: Conexión fallida. generationTime posee formato o dato inválido (ej: en el futuro o más de 24 horas de antigüedad)

Se resuelve ingresando al servidor y ejecutando el siguiente comando:

sudo timedatectl set-ntp on

Al ejecutar timedatectl tiene que devolver el siguiente mensaje:

Local time: mié 2022-11-16 18:16:29 -03
Universal time: mié 2022-11-16 21:16:29 UTC
RTC time: mié 2022-11-16 21:16:30
Time zone: America/Argentina/Buenos_Aires (-03, -0300)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no

Revisar principalmente que System clock synchronized diga yes, si dice no seguirá mal. Al reiniciar el service de Odoo se debería poder ejecutar el test perfectamente. Recordar tener la Zona horaria bien configurada.

raise AttributeError('No elements found')

Ocurre cuando está caído AFIP. Solo se puede esperar o intentar comunicarse con el servicio de AFIP.

ValueError: Cannot set verify_mode to CERT_NONE when check_hostname is enabled

En algunos request como puede ser el padrón o una instalación sobre un entorno Python moderno, la versión de http2lib verifica que la conexión sea segura mediante SSL. En caso de que no lo sea nos dirá lo siguiente:

No se puede conectar. Esto es lo que recibimos: ValueError: Cannot set verify_mode to CERT_NONE when check_hostname is enabled

Este error ocurre al utilizar la rama py3k de pyafipws en sistemas actuales, se recomienda utilizar la rama main. Sin embargo, si se desea saltear la verificación, deberemos dirigirnos al directorio donde se encuentra instalado http2lib, generalmente:

/usr/local/lib/python3.9/dist-packages/httplib2

Cambiar python3.9 por lo que corresponda. Vamos a editar el archivo init.py, buscaremos la función _build_ssl_context y dentro de ellas una de las primeras líneas:

context.verify_mode = ssl.CERT_NONE if disable_ssl_certificate_validation else ssl.CERT_REQUIRED

Vamos a comentar dicha línea y debajo de la misma agregaremos lo siguiente:

context.check_hostname = False
context.verify_mode = ssl.CERT_NONE

Guardamos el archivo, reiniciamos el service, y ya podremos utilizarlo sin dicho error.

Clone this wiki locally