Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-02-2017
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 112
Poder: 8
seccion_31 Va por buen camino
keys ...

simplemente añade este evento en tu objeto(S) thttprio, y en V:= coloca el nombre de tu certificado.
descarga y mira el adjunto que coloco y listo.

No tienes si quiera que quitar el código anterior para gestionar el certificado.

Saludos !

y por fa, siento ser pesado si alguien tiene algún ejemplo de facturas recibidas y emitidas de sujeto pasivo que lo postee. (lo que yo llamo la factura recibida, y su autofactura).



Código:
procedure TfEmitidas.emitidasHTTPWebNode1BeforePost(
  const HTTPReqResp: THTTPReqResp; Data: Pointer);
var
     Store : IStore;
     Certs : ICertificates;
     Cert : ICertificate2;
     CertContext : ICertContext;
     PCertContext : PCCERT_CONTEXT;
     V : OleVariant;
 const
     INTERNET_OPTION_CLIENT_CERT_CONTEXT = 84;
 begin

     V:='  ***  EL NOMBRE DE TU CERTIFICADO ***';

     Store := CoStore.Create;
     Store.Open(CAPICOM_CURRENT_USER_STORE, 'MY',CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED );
     Certs:=Store.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME,V,False ); { Buscar certificado por nombre }
     if Certs.Count > 0 then
     begin
         Cert:=IInterface(Certs.Item[1]) as ICertificate2;
         CertContext:=Cert as ICertContext;
         CertContext.Get_CertContext(Integer(PCertContext));
         if InternetSetOption(Data,INTERNET_OPTION_CLIENT_CERT_CONTEXT,PCertContext,Sizeof(CERT_CONTEXT)) = False then
         begin
             ShowMessage( 'Internet SSL certificate. Something went wrong' );
         end;
     end;
 end;
Archivos Adjuntos
Tipo de Archivo: rar capicom.rar (166,7 KB, 226 visitas)
Responder Con Cita
  #2  
Antiguo 17-02-2017
Avatar de keys
keys keys is offline
Miembro
 
Registrado: sep 2003
Ubicación: Bilbao
Posts: 1.034
Poder: 22
keys Va por buen camino
Puedes indicarme los includes para
Store : IStore;
Certs : ICertificates;
Cert : ICertificate2;
CertContext : ICertContext;

Estoy un poco espeso y no los encuentro.
Responder Con Cita
  #3  
Antiguo 17-02-2017
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 112
Poder: 8
seccion_31 Va por buen camino
estan en el CAPICOM_TLB.pas (que he colocado en la descarga del post)

Responder Con Cita
  #4  
Antiguo 17-02-2017
Avatar de keys
keys keys is offline
Miembro
 
Registrado: sep 2003
Ubicación: Bilbao
Posts: 1.034
Poder: 22
keys Va por buen camino
Lo primero gracias. Ya he conseguido enviar mas de 12 facturas a la vez. Sigo sin entender por que 12 si y 13, el certificado es el mismo. Pero bueno funciona que es lo que importa.

En cuanto a la factura recibida de inversión sujeto pasivo no he empezado a generar recibidas, será lo siguiente. Pero la norma dice lo siguiente :

4.4. ¿Cómo se registra una operación con inversión del sujeto pasivo (art. 84.Uno.2º y 4º de la Ley del IVA) siempre que tengan su origen en operaciones distintas a las adquisiciones intracomunitarias de bienes y servicios)?
El destinatario de la operación registrará los datos de la factura recibida consignando en el campo de tipo de operación la clave “S2: Sujeta – No Exenta – Inv. Suj. Pasivo”. Deberá calcular y consignar la cuota soportada correspondiente a dicha factura así como cumplimentar el campo “Cuota Deducible”. No registrará dato alguno en el Libro Registro de Facturas Expedidas.


No se cual es el problema.
Responder Con Cita
  #5  
Antiguo 17-02-2017
Virman Virman is offline
Miembro
 
Registrado: ene 2017
Posts: 67
Poder: 8
Virman Va por buen camino
Yo creo que más que el problema de enviar más de 12 Facturas, está el problema de que las facturas enviadas se procesan al terminar el bloque de envío, por lo que si en el mismo bloque se envía una factura emitida y el pago de esta, va a devolver siempre el error de factura no encontrada.

En la charla lo apuntaron y seguramente para la revisión de este mes de Marzo (que ya dijeron que iban a estar cambiando los webservices cada mes) ya esté solucionado y se puedan enviar todas las facturas de golpe.

Hasta entonces yo estoy haciendo envíos unitarios por cada línea que leo del fichero csv, así me aseguro que la factura enviada se queda grabada en su base de datos.
Responder Con Cita
  #6  
Antiguo 17-02-2017
Avatar de keys
keys keys is offline
Miembro
 
Registrado: sep 2003
Ubicación: Bilbao
Posts: 1.034
Poder: 22
keys Va por buen camino
Cita:
Empezado por Virman Ver Mensaje
Yo creo que más que el problema de enviar más de 12 Facturas, está el problema de que las facturas enviadas se procesan al terminar el bloque de envío, por lo que si en el mismo bloque se envía una factura emitida y el pago de esta, va a devolver siempre el error de factura no encontrada.

En la charla lo apuntaron y seguramente para la revisión de este mes de Marzo (que ya dijeron que iban a estar cambiando los webservices cada mes) ya esté solucionado y se puedan enviar todas las facturas de golpe.

Hasta entonces yo estoy haciendo envíos unitarios por cada línea que leo del fichero csv, así me aseguro que la factura enviada se queda grabada en su base de datos.
El problema de enviar más de 12 facturas no es un problema de las facturas ya que todas eran de alta, ya que en ese caso ni las procesaba, es decir no retornaba el xml de respuesta, ee generaba una excepción. Prueba a enviar 13 facturas de golpe para ver si puedes o no, ya que sino puedes es un error del codigo y hay que solucionarlo con lo que han puesto anteriormente en los ejemplos.

El truco esta en no enviar en un mismo envío facturas que hagan referencia a facturas que esten en el mismo envío. En cuanto a los pagos de una factura no hay problema por que tienen que ir por envíos separados, es decir la factura se envia por el suministro de facturas y el pago por el de pagos. Es decir nunca pueden ir juntas.

Un Saludo.
Responder Con Cita
  #7  
Antiguo 23-02-2017
CMB CMB is offline
Miembro
 
Registrado: ene 2017
Posts: 349
Poder: 8
CMB Va por buen camino
Cómo extraer datos de la respuesta

Creo que hasta ahora nadie ha tratado este tema.

Ya he conseguido enviar facturas emitidas y recibidas sin problema, y también capturo la respuesta del WS. Pero cuando ésta se recibe, en formato XML, cómo debe de hacerse el parsing para extraer el resultado de cada factura, para saber si ha sido aceptada o rechazada, y en este último caso, cuál es la causa de la no admisión, con el fin de comunicarlo al usuario y tomar las medidas que haga falta. Visualmente es muy fácil de determinar leyendo la respuesta, pero ¿cómo automatizar ese proceso?

Alguien que tenga la amabilidad de publicar un poco de código, supongo que con las clases TXMLDocument y/o IXMLDocument, pues el uso de Node y ChildNodes, es bastante liado.

Muchas gracias.

Saludos,
Responder Con Cita
  #8  
Antiguo 21-03-2017
PepCat PepCat is offline
Miembro
 
Registrado: mar 2017
Posts: 96
Poder: 8
PepCat Va por buen camino
Cita:
Empezado por seccion_31 Ver Mensaje
keys ...
Código:
procedure TfEmitidas.emitidasHTTPWebNode1BeforePost(
  const HTTPReqResp: THTTPReqResp; Data: Pointer);
var
     Store : IStore;
     Certs : ICertificates;
     Cert : ICertificate2;
     CertContext : ICertContext;
     PCertContext : PCCERT_CONTEXT;
     V : OleVariant;
 const
     INTERNET_OPTION_CLIENT_CERT_CONTEXT = 84;
 begin

     V:='  ***  EL NOMBRE DE TU CERTIFICADO ***';

     Store := CoStore.Create;
     Store.Open(CAPICOM_CURRENT_USER_STORE, 'MY',CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED );
     Certs:=Store.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME,V,False ); { Buscar certificado por nombre }
     if Certs.Count > 0 then
     begin
         Cert:=IInterface(Certs.Item[1]) as ICertificate2;
         CertContext:=Cert as ICertContext;
         CertContext.Get_CertContext(Integer(PCertContext));
         if InternetSetOption(Data,INTERNET_OPTION_CLIENT_CERT_CONTEXT,PCertContext,Sizeof(CERT_CONTEXT)) = False then
         begin
             ShowMessage( 'Internet SSL certificate. Something went wrong' );
         end;
     end;
 end;

A parte de poder buscar el certificado en el store como en el ejemplo anterior, que funciona perfectamente (muchas gracias por el post!)
también he visto que hay la opción de poder leer el certificado desde un fichero:


Código Delphi [-]

procedure SetCertificate(const FileName, Password: string; var Data: Pointer);
var
  Cert : ICertificate2;
  CertContext : ICertContext;
  PCertContext : PCCERT_CONTEXT;
begin
  try
    Cert := CoCertificate.Create;
  except
    on E: EOleSysError  do
      raise Exception.Create('CAPICOM.DLL is not registered')
  end;

  Cert.Load(FileName, Password, CAPICOM_KEY_STORAGE_EXPORTABLE, CAPICOM_LOCAL_MACHINE_KEY);
  CertContext := Cert as ICertContext;
  CertContext.Get_CertContext(Integer(PCertContext));
  if InternetSetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT, PCertContext, Sizeof(CERT_CONTEXT)) = False then
    raise Exception.Create ( 'Error setting "' + FileName + '" certificate in web service' )
end;

procedure TfEmitidas.emitidasHTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp; Data: Pointer);
begin
  SetCertificate('', '', Data);
end;


P.D. Muchas gracias a todos los que colaboráis en este forum, que me habéis ayudado muchísimo en afrontar este tema.
Responder Con Cita
  #9  
Antiguo 21-03-2017
inyu inyu is offline
Miembro
NULL
 
Registrado: mar 2017
Posts: 48
Poder: 0
inyu Va por buen camino
Buenas tardes. Al fin he logrado establecer comunicación con el WS, pero me da un error muy simple (campo obligatorio NIF no informado).

¿ Se rellena en algún otro sitio el NIF que no me lo esté cogiendo a parte de estos 2 ?

_RegistroLRFacturasEmitidas(i).IDFactura.IDEmisorFactura.NIF = "B17654XXX"
_RegistroLRFacturasEmitidas(i).FacturaExpedida.Contraparte.NIFRepresentante = "A17135XXX"

Gracias.
Responder Con Cita
  #10  
Antiguo 21-03-2017
bartag bartag is offline
Miembro
NULL
 
Registrado: feb 2017
Posts: 11
Poder: 0
bartag Va por buen camino
Cita:
Empezado por inyu Ver Mensaje
Buenas tardes. Al fin he logrado establecer comunicación con el WS, pero me da un error muy simple (campo obligatorio NIF no informado).

¿ Se rellena en algún otro sitio el NIF que no me lo esté cogiendo a parte de estos 2 ?

_RegistroLRFacturasEmitidas(i).IDFactura.IDEmisorFactura.NIF = "B17654XXX"
_RegistroLRFacturasEmitidas(i).FacturaExpedida.Contraparte.NIFRepresentante = "A17135XXX"

Gracias.
Creo que te falta el NIF de la contraparte. Éste se suministra a través del .Contraparte.Item:

_SuministroLRFacturasEmitidas.RegistroLRFacturasEmitidas(0).FacturaExpedida.Contraparte.Item = Trim(TextBoxNIF.Text)

Además está el que ya tienes asignado (IDEmisorFactura.NIF):

_SuministroLRFacturasEmitidas.RegistroLRFacturasEmitidas(0).IDFactura.IDEmisorFactura.NIF = Trim(TextBoxNIFEmisor.Text)
Responder Con Cita
  #11  
Antiguo 22-03-2017
inyu inyu is offline
Miembro
NULL
 
Registrado: mar 2017
Posts: 48
Poder: 0
inyu Va por buen camino
Cita:
Empezado por bartag Ver Mensaje
Creo que te falta el NIF de la contraparte. Éste se suministra a través del .Contraparte.Item:

_SuministroLRFacturasEmitidas.RegistroLRFacturasEmitidas(0).FacturaExpedida.Contraparte.Item = Trim(TextBoxNIF.Text)

Además está el que ya tienes asignado (IDEmisorFactura.NIF):

_SuministroLRFacturasEmitidas.RegistroLRFacturasEmitidas(0).IDFactura.IDEmisorFactura.NIF = Trim(TextBoxNIFEmisor.Text)
Tienes razón, me faltaba el .Item, es algo que me lia, no entiendo porqué a veces existe la propiedad con un nombre inteligible (como .NIFRepresentante) y a veces sólo aparece "item".

Me ocurre por ejemplo con _RegistroLRFacturasEmitidas.FacturaExpedida.TipoDesglose, TipoDesglose según algunos ejemplos deberia proponerme DesgloseTipoOperacion, en cambio sólo me aparece .Item y no se cómo asignarle el resto de propiedades del desglose. Además según la documentación tendria que haber 2 tipos de desgloses (TipoDesglose2 (facturas), TipoDesglose (inmuebles)) pero a mi el Intellisense sólo me propone 1 tipo "FacturaExpedidaTypeTipoDesglose", no veo el TipoDesglose2 por ningún sitio... con lo cuál ahora no puedo validar nada porqué se queja de que me falta el campo obligatorio TipoDesglose.

Última edición por inyu fecha: 22-03-2017 a las 09:24:38. Razón: Añadido más dudas
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
TICKET BAI (TicketBAI); Nuevo sistema de la Agencia Tributaria del Pais Vasco keys Internet 4170 Hace 2 Semanas 17:29:05
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


La franja horaria es GMT +2. Ahora son las 05:56:32.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi