FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Segun como lo interpretes. Detras del Si hay un punto. Es decir yo entiendo que hay que ponerla siempre, y en el caso de las empresas con prorrata hay que poner la cuota deducible en funcion del porcentaje provisional.
Última edición por keys fecha: 30-05-2017 a las 12:05:32. |
#2
|
|||
|
|||
Cita:
Codigo[4102].El XML no cumple el esquema. Falta informar campo obligatorio.: CuotaDeducible |
#3
|
|||
|
|||
Problema al enviar más de 20 facturas a la vez
Buenas tardes,
Estoy con un problema que no consigo encontrar la solución, a ver si alguien pudiese echarme una mano. Cuando envío más de 20 facturas emitidas (me pasa lo mismo con las recibidas) recibo el siguiente error: Se requiere un certificado para completar la autenticación de cliente - URL:https://www7.aeat.es/wlpl/SSII-FACT/...iiFactFEV1SOAP - SOAPAction:"" Si esas mismas facturas las envío en dos veces, me las envía sin problema. Para realizar el envío, genero el xml con delphi 7 y realizo el envío mediante una dll que he creado con Delphi XE7. El código mediante el cual hago el envío es el siguiente: Código:
type TComunicacionSW = class(TObject) private FArchivoEnvio: String; FArchivoRespuesta: String; FHTTPRIO: THTTPRIO; procedure HTTPRIOBeforeExecute(const MethodName: string; SOAPRequest: TStream); procedure HTTPRIOAfterExecute(const MethodName: string; SOAPResponse: TStream); public Constructor Create; Destructor Destroy; end; procedure TComunicacionSW.HTTPRIOBeforeExecute(const MethodName: string; SOAPRequest: TStream); var v_fileStream: TFileStream; begin SOAPRequest.Size := 0; v_fileStream := TFileStream.Create(FArchivoEnvio, fmOpenRead); SOAPRequest.Position := 0; SOAPRequest.CopyFrom(v_fileStream, v_fileStream.Size); v_fileStream.Free; SOAPRequest.Position := 0; end; procedure TComunicacionSW.HTTPRIOAfterExecute(const MethodName: string; SOAPResponse: TStream); var v_fileStream: TFileStream; begin if FileExists(FArchivoRespuesta) then DeleteFile(FArchivoRespuesta); v_fileStream := TFileStream.Create(FArchivoRespuesta, fmCreate); SOAPResponse.Position := 0; v_fileStream.CopyFrom(SOAPResponse, SOAPResponse.size); v_fileStream.Free; SOAPResponse.Position := 0; end; function ObtenerNumeroSerieCertificado(p_nombreCertificado: String): string; var hStore: HCERTSTORE; PrevContext, CurContext: PCERT_CONTEXT; cbSize: DWORD; v_nombre: String; begin Result := ''; hStore := CertOpenSystemStore(0, PChar('MY')); if hStore <> nil then begin PrevContext := nil; CurContext := CertEnumCertificatesInStore(hStore, PrevContext); while CurContext <> nil do begin v_nombre := ''; cbSize := CertGetNameString(CurContext, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, nil, nil, 0); if cbSize > 0 then begin SetLength(v_nombre, cbSize-1); CertGetNameString(CurContext, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, nil, PChar(v_nombre), cbSize); if SameText(p_nombreCertificado, v_nombre) then begin result := GetCertSerialNumber(@CurContext^.pCertInfo^.SerialNumber); break; end; end; PrevContext := CurContext; CurContext := CertEnumCertificatesInStore(hStore, PrevContext); end; end; end; function EnviarFacturasEmitidas(p_nombreCertificado, p_archivoEnvio, p_archivoRespuesta: ShortString): PChar;stdcall;export; var v_suministroLRFacturasEmitidas: SuministroFactEmitidas.SuministroLRFacturasEmitidas; v_respuestaLRFacturasEmitidas: SuministroFactEmitidas.RespuestaLRFacturasEmitidas; v_siiSOAP: SuministroFactEmitidas.siiSOAP; v_serialNum: String; v_error: string; v_comunicacionSW: TComunicacionSW; begin v_error := ''; v_serialNum := ObtenerNumeroSerieCertificado(p_nombreCertificado); v_comunicacionSW := TComunicacionSW.Create; v_suministroLRFacturasEmitidas := SuministroFactEmitidas.SuministroLRFacturasEmitidas.Create; v_respuestaLRFacturasEmitidas := SuministroFactEmitidas.RespuestaLRFacturasEmitidas.Create; try try v_comunicacionSW.FArchivoEnvio := p_archivoEnvio; v_comunicacionSW.FArchivoRespuesta := p_archivoRespuesta; v_comunicacionSW.FHTTPRIO.HTTPWebNode.ClientCertificate.SerialNum := v_serialNum; //Se realiza la llamada sin datos y en el evento HTTPRIOBeforeExecute se establece el xml con los datos generados anteriormente v_siiSOAP := SuministroFactEmitidas.GetsiiSOAP(true,'',v_comunicacionSW.FHTTPRIO); v_respuestaLRFacturasEmitidas := v_siiSOAP.SuministroLRFacturasEmitidas(v_suministroLRFacturasEmitidas); except on e:Exception do v_error := 'Error DLL: Error en la comunicación con el servicio web.' + e.Message; end; finally v_suministroLRFacturasEmitidas.Free; v_respuestaLRFacturasEmitidas.Free; end; result := StringToPChar(v_error); end; El archivo SuministroFactEmitidas lo he generado automáticamente con WSDL Importer de delphi y le he modificado lo siguiente (defURL realmente no lo utilizo): const defWSDL = 'https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroFactEmitidas.wsdl'; defURL = 'https://www7.aeat.es/wlpl/SSII-FACT/wlpl/SSII-FACT/ws/fe/SiiFactFEV1SOAP'; defSvc = 'siiService'; defPrt = 'SuministroFactEmitidasPruebas'; ¿Se le ocurre a alguien que es lo que estoy haciendo mal? Un saludo |
#4
|
|||
|
|||
Por cierto si envío el archivo xml mediante la web https://www7.aeat.es/static_files/co...teWSAEAT2.html se envía correctamente.
|
#5
|
||||
|
||||
Cita:
Te pongo el codigo pero revisa los post anteriores. En el evento OnbeforePost del objeto HttpTrio tienes que poner lo siguiente
|
#6
|
|||
|
|||
Muchas gracias keys, probaré con las capicom a ver que tal. Aunque me resulta curioso que si funcione el certificado cuando envío 15 facturas y no funcione cuando envío 25.
|
#7
|
||||
|
||||
Eso nos pasaba a todos, creo recordar que el problema era a partir de 13 facturas.
|
#8
|
||||
|
||||
Cita:
Yo ando en PHP y logro mandar bloques de 100 sin problema alguno |
#9
|
|||
|
|||
Cita:
|
#10
|
|||
|
|||
buff! tengo un lío tremendo... si he conseguido generar el suministro de facturas emitidas, siguiendo lo que he visto en el hilo,
¿como puedo ver el contenido del xml ANTES de llamar a GetsiiSOAP(true,'',HTTPRIO1).SuministroLRFacturasEmitidas(ASumLRFacturasEmitidas); ? seguro que es muy sencillo |
#11
|
||||
|
||||
Cita:
Saludos
__________________
Be water my friend. |
#12
|
|||
|
|||
Cita:
procedure TForm1.HTTPRIO1BeforeExecute(const MethodName: string; SOAPRequest: TStream); var ss:TFileStream; begin SOAPRequest.Size:=0; ss:=TFileStream.Create('C:\1.xml', fmOpenRead); SOAPRequest.Position := 0; SOAPRequest.CopyFrom( ss, ss.Size); ss.Free; SOAPRequest.Position := 0; end; No lo he probado aún, pero tiene sentido. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
TICKET BAI (TicketBAI); Nuevo sistema de la Agencia Tributaria del Pais Vasco | keys | Internet | 4175 | Hace 4 Días 16:17:35 |
AEAT envio de datos vía Webservice problemas con WSDL | CelsoO | Internet | 11 | 09-10-2019 20:03:41 |
webService Soap de la Administración Digital Española notific@ | apicito | Internet | 3 | 31-01-2017 11:25:28 |
Error en Webservice funcion envio de sms | webmasterplc | Delphi para la web | 5 | 25-07-2013 20:10:29 |
Problemas con envío de XML a un WebService | davidvamo | Internet | 1 | 13-02-2007 15:49:20 |
|