Esta página contiene la respuesta textual dadas por el motor de IA (y sus repreguntas si la hubo) a las preguntas formuladas en el tutorial de prompt básico.
Resultado de la pregunta 02 del tutorial de prompt 1 básico: Claro, puedo ayudarte con eso.
El error que recibís es muy específico y te guiaré para solucionarlo.
Servicio: Factura Electrónica (WSFEv1)
Método: f1caesolicitar
Tipo de Error: Nivel 3 - Error de Datos (Validación del Servidor de AFIP).
El error con código 10214 no es un problema de WSAFIPFE ni de conexión, sino que el servidor de AFIP está rechazando la información que enviás porque no cumple con el formato esperado para un dato opcional específico.
El problema se encuentra en cómo estás asignando los datos opcionales para una Factura de Crédito Electrónica (FCE).
Propiedad Incorrecta: Estás usando la propiedad f1DetalleOpcionalValor para asignar tanto el identificador del campo opcional ("027") como su contenido ("Factura de Credito..."). La propiedad correcta para el identificador es F1DetalleOpcionalId.
Formato del Valor Incorrecto: Como indica claramente el mensaje de AFIP (Msg: ...debe ser un alfanumérico de 3 caracteres), el valor para el Opcional con ID 27 no es un texto descriptivo. AFIP espera un código específico de 3 letras que identifique al sistema de circulación.
Para corregir el envío, debés utilizar la propiedad F1DetalleOpcionalId para el código y F1DetalleOpcionalValor para el valor correcto, que según la documentación de AFIP para FCE puede ser:
"SGR": Para una Sociedad de Garantía Recíproca.
"ADC": Para un Agente de Depósito Colectivo.
A continuación, te muestro un ejemplo de cómo asignar correctamente estos valores (sintaxis para VB/VBA):
VB.Net
' Indicar la cantidad de items opcionales a enviar
oFactura.F1DetalleOpcionalItemCantidad = 1
' Asignar el ID del dato opcional
oFactura.F1DetalleOpcionalId = "27"
' Asignar el VALOR correspondiente al ID 27. Usar "SGR" o "ADC" según corresponda.
oFactura.F1DetalleOpcionalValor = "SGR"
En resumen: debés usar la propiedad F1DetalleOpcionalId para identificar el dato opcional y enviar en F1DetalleOpcionalValor uno de los códigos válidos de 3 caracteres que espera AFIP.
Puedes encontrar la referencia a las propiedades F1DetalleOpcionalId y F1DetalleOpcionalValor en el manual oficial de WSAFIPFE, y los valores válidos para los opcionales de FCE en la documentación para desarrolladores del web service en el sitio de AFIP.
Resultado de la pregunta 03 del tutorial de prompt 1 básico: ¡Excelente pregunta! Es una duda muy común al trabajar con este tipo de facturas.
No, la "Factura A con leyenda operación sujeta a retención" no es un tipo de comprobante distinto a la Factura A normal en términos del web service de AFIP. La estructura y los datos principales son idénticos.
A continuación, te detallo la información para que puedas autorizarla correctamente.
El código que debés usar en la propiedad F1CabeceraCbteTipo sigue siendo 1, que es el código universal para "Factura A".
La AFIP no tiene un CbteTipo diferente para este caso. La diferencia no radica en el tipo de comprobante, sino en un dato adicional que se debe informar.
La única diferencia con una Factura A estándar es que, debido a normativas específicas (como la RG 1361), estás obligado a incluir el texto exacto "Operación sujeta a retención" como una observación en el comprobante.
Esta leyenda se debe informar a la AFIP dentro del mismo pedido de CAE y también debe figurar de forma visible en la representación impresa o digital (PDF) del comprobante.
Para agregar esta leyenda obligatoria al solicitar el CAE, debés utilizar la propiedad F1CabeceraObservaciones del objeto.
El proceso es el mismo que para una Factura A normal, simplemente añadís una línea para cargar la observación.
Ejemplo de código (sintaxis VB/VBA):
VB.Net
' Establecés el tipo de comprobante como siempre
oFactura.F1CabeceraCbteTipo = 1
' Agregás la leyenda obligatoria en la propiedad de observaciones
oFactura.F1CabeceraObservaciones = "Operación sujeta a retención"
' ... continuás con el resto de los datos de la factura (fechas, importes, etc.)
' Solicitás el CAE
oFactura.f1caesolicitar()
En resumen:
Usá el código de comprobante 1.
Agregá el texto "Operación sujeta a retención" en la propiedad F1CabeceraObservaciones.
Asegurate de que esta leyenda también se imprima en el PDF de la factura.
Repregunta:entiendo entonces que al emitir o imprimir una Factura A con leyenda en el PDF o impreso debe agregar una leyenda, pero el comprobante en si mismo se autoriza con los mismso camps y métodos con una factura electrónica A. podrías indicar y confirmar la fuente o como elaboras el ejemplo que citas, ya que si se usan las mismos campos y métodos que una factura A en el código deberían estar los mismos campos que la herramienta WSAFIPFE da como ejemplo para autorizar un comprobante en el WSFEv1 y en ese ejemplos no existe un campo llamado F1CabeceraObservaciones?
Nueva respuesta a la pregunta 03:Es una excelente y muy pertinente observación. Aprecio que busques la confirmación en las fuentes, es la manera correcta de proceder.
Tenés toda la razón en que los ejemplos básicos para autorizar una Factura A (código 1) que figuran en la web oficial no suelen incluir la propiedad F1CabeceraObservaciones.
Permitime aclararte el motivo y confirmarte la fuente.
La razón es que los ejemplos iniciales se enfocan en los campos mínimos y estrictamente obligatorios que el web service de AFIP (WSFEv1) exige para autorizar el comprobante más simple.
El campo de observaciones es, desde el punto de vista técnico del web service, un campo opcional. No es necesario completarlo para obtener un CAE para una Factura A común.
Sin embargo, para el caso específico que consultaste ("Factura A con leyenda operación sujeta a retención"), una normativa de AFIP te obliga legalmente a usar ese campo opcional para declarar la leyenda. El campo sigue siendo opcional para el sistema, pero es obligatorio para tu caso de negocio.
La propiedad F1CabeceraObservaciones es parte integral y documentada de la interfaz del objeto WSAFIPFE.factura.
Podés verificar su existencia y propósito en la principal fuente de conocimiento técnico de la herramienta: la planilla Excel de referencia de propiedades y métodos.
Fuente: La planilla Excel llamada wsafipfe-referencia-propiedades-metodos.xls (o un nombre similar).
Ubicación: Este archivo está disponible para descarga en la web oficial de WSAFIPFE (https://sites.google.com/site/facturaelectronicax/), usualmente en la sección de "Manual y Documentación" o junto a los ejemplos de código.
Contenido: Dentro de esa planilla, en la solapa que detalla las propiedades para el servicio WSFEv1, encontrarás la fila correspondiente a F1CabeceraObservaciones. La descripción asociada confirma que se utiliza para "Observaciones Comerciales" o leyendas que se asocian al comprobante a autorizar.
Por lo tanto, reitero y confirmo que el ejemplo que te proporcioné es correcto. Se basa en tomar el código estándar para una Factura A y agregar el uso de una propiedad opcional (F1CabeceraObservaciones) que la herramienta provee y que es necesaria para cumplir con la reglamentación de tu caso particular.
Resepuesta pregunta 04: Claro, con gusto te ayudo a resolver esta cuestión.
El uso de las propiedades ArchivoXMLEnviado y ArchivoXMLRecibido es la forma correcta de registrar los archivos XML de petición y respuesta. Como se indica en los ejemplos de la documentación oficial, debes asignarles la ruta completa y el nombre del archivo donde deseas guardarlos, siempre antes de invocar al método f1CaeSolicitar.
El hecho de que los archivos se generen solo a veces indica que el problema no está en el código que asigna las propiedades, sino en factores externos o en errores que ocurren antes de que el componente intente escribir el archivo.
A continuación, detallo las causas más probables y cómo solucionarlas.
1. Permisos de Escritura en la Carpeta
Es la causa más común. El programa que ejecuta el código podría no tener los permisos necesarios para crear o escribir archivos en la ruta que especificaste.
Problema: El sistema operativo (Windows, por ejemplo) bloquea la creación del archivo por seguridad, especialmente en carpetas como C:\, C:\Archivos de Programa, o el raíz de una unidad.
Diagnóstico y Solución:
No uses carpetas de sistema. Intenta guardar los archivos en una carpeta de datos específica, por ejemplo C:\Sistemas\Facturacion\XML\ o en la carpeta "Mis Documentos" del usuario.
Asegúrate de que el usuario con el que se ejecuta la aplicación tenga permisos de "Escritura" y "Modificación" sobre la carpeta de destino. Puedes verificarlo haciendo clic derecho sobre la carpeta > Propiedades > Seguridad.
Si tu aplicación es un servicio web o se ejecuta bajo un usuario de sistema (como IIS_IUSRS), ese usuario específico debe tener los permisos de escritura.
2. Errores Previos a la Generación del XML
El método f1CaeSolicitar realiza varias operaciones antes de enviar la factura a la AFIP. Si una de estas operaciones previas falla, el componente no llega a generar el XML enviado y, por lo tanto, tampoco recibe una respuesta.
Problema: Puede haber un error al obtener el Ticket de Acceso (TA) del servicio WSAA debido a problemas de conexión, un certificado inválido o que el servidor de AFIP no responda. Como estos problemas pueden ser transitorios, esto explica perfectamente el comportamiento intermitente.
Diagnóstico y Solución:
Siempre revisa la propiedad UltimoMensajeError después de llamar a f1CaeSolicitar, incluso si el método devuelve Falso y no se crean los archivos. Este mensaje te dirá exactamente por qué falló la operación. Un error típico en este caso sería "Error al obtener el ticket de acceso" o algún mensaje relacionado con la conexión o el WSAA.
VB.Net
' Ejemplo en VB6 / VBA
lResultado = fe.F1CAESolicitar()
If Not lResultado Then
' El método falló, revisamos el porqué
MsgBox("El método F1CAESolicitar devolvió Falso.")
MsgBox("Error: " + fe.UltimoMensajeError)
End If
3. Ruta de Archivo Inválida
Aunque menos frecuente si a veces funciona, es posible que la ruta sea incorrecta bajo ciertas condiciones.
Problema: La ruta especificada no existe o contiene caracteres no válidos. Por ejemplo, si la ruta se arma de forma dinámica y en algunos casos el resultado es una ruta inválida.
Diagnóstico y Solución:
Verifica que la carpeta a la que apuntas exista siempre.
Usa rutas absolutas (ej: D:\facturas\xml\enviado.xml) para evitar ambigüedades.
En resumen, te recomiendo enfocarte en dos puntos: asegurar los permisos de escritura en una carpeta de datos dedicada y verificar siempre el contenido de UltimoMensajeError para diagnosticar fallos que puedan ocurrir antes de la creación del XML.