Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-08-2015
adripugliesso adripugliesso is offline
Miembro
NULL
 
Registrado: jul 2015
Posts: 49
Poder: 0
adripugliesso Va por buen camino
Importate

Les comento algo que es clave y sin esto no funcionan los servicios del Webservice de Afip usando WSDL.

1 - Importamos el servicio de WSDL de Afip a nuestra aplicacion para ello vamos a:

Archivo - Nuevos - Otros - Solapa WebService - WDSL Importer

Luego en direccion de importacion ponemos:

Ambiente de prueba (Testing/Homologación):
WS Autenticación y Autorización: https://wsaahomo.afip.gov.ar/ws/services/LoginCms?WSDL
WS Facturación Electrónica: https://wswhomo.afip.gov.ar/wsfev1/service.asmx?WSDL

Ambiente real (Producción):
WS Autenticación y Autorización: https://wsaa.afip.gov.ar/ws/services/LoginCms?WSDL
WS Facturación Electrónica: https://servicios1.afip.gov.ar/wsfev1/service.asmx?WSDL

Al hacer esto se nos va a agregar a nuestra aplicacion las unit con los metodos directos de los webservice de afip para usar como funciones internas de la aplicacion.

2 - Lo importante y aca viene el secreto es que en las dos unit que se agregan de WSFEv1 hay que ir a la parte de INITIALIZATION y agregar la linea:

Código Delphi [-]
 //se agrega esto
  InvRegistry.RegisterInvokeOptions(TypeInfo(ServiceSoap), ioDocument);
Responder Con Cita
  #2  
Antiguo 04-08-2015
adripugliesso adripugliesso is offline
Miembro
NULL
 
Registrado: jul 2015
Posts: 49
Poder: 0
adripugliesso Va por buen camino
Otros Detalles

Para los que usen webservice importando el WSDL

Forma de llamar a un método, en este caso (FEParamGetTiposDoc):
Código Delphi [-]
procedure TForm1.Button5Click(Sender: TObject);
var
  FEAuth : FEAuthRequest;
  x : Integer;
  s: DocTipoResponse;
  WS: ServiceSoap;
begin
  screen.Cursor := crHourGlass;

  WS := GetServiceSoap(false,'', httprio1);

  FEAuth  := FEAuthRequest.Create;
  try
    FEAuth.Token := token;
    FEAuth.Sign  := sign;
    FEAuth.Cuit  := cuit;

    Memo1.Clear;

    s := WS.FEParamGetTiposDoc(FEAuth);

    if (Length(s.ResultGet) > 0) then
    begin
      for x := 0 to high( s.ResultGet ) do
      Memo1.lines.Add(
        INTTOSTR(s.ResultGet[x].id)+' || '+
        s.ResultGet[x].Desc+' || '+
        s.ResultGet[x].FchDesde+' || '+
        s.ResultGet[x].FchHasta );
     end;

      if (Length(s.Errors) > 0) then
      showmessage(s.Errors[0].Msg);

  finally
    FEAuth.Free;
    s.Free;
  end;
  screen.Cursor := crDefault;
end;
Lo importante en esto es agregar en el componente HTTPRIO:
Código Delphi [-]
procedure TForm1.HTTPRIO1AfterExecute(const MethodName: String;
  SOAPResponse: TStream);
var
  texto : String;
   f: Integer;
   sl: TStringList;
begin
   SoapResponse.Position := 0;
   f:= FileCreate('after.xml');
   sMemo1.lines.add('===========  AFTER EXECUTE  =====================');
   setlength( texto, SOAPResponse.size );
   soapResponse.Read(Texto[1], SOAPResponse.Size);
   smemo1.lines.add( Texto );
   smemo1.lines.add('----------------------------------------------');
   sMemo1.lines.add( MethodName );
   smemo1.lines.add('======== FIN AFTER EXECUTE ======================');

   FileWrite(f, texto[1], Length(texto));
   FileClose(f);

   sl := TStringList.Create;
   try
     sl.Text := Texto;
     sl.SaveToFile('after-sl.xml');
   finally
     sl.Free;
   end;

end;

Última edición por Casimiro Notevi fecha: 04-08-2015 a las 23:15:59.
Responder Con Cita
  #3  
Antiguo 04-08-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
De nuestra guía de estilo:
Cita:
6. No escribir nunca los mensajes en mayúsculas, esto denota falta de respeto a los foristas.
Escribir en mayúsculas equivale a gritar.
Responder Con Cita
  #4  
Antiguo 04-08-2015
adripugliesso adripugliesso is offline
Miembro
NULL
 
Registrado: jul 2015
Posts: 49
Poder: 0
adripugliesso Va por buen camino
disculpas no lo sabia, como lo modifico??
Responder Con Cita
  #5  
Antiguo 04-08-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues es así en todo internet en todo el mundo
Voy a editarlo.
Gracias por tu colaboración
Responder Con Cita
  #6  
Antiguo 19-08-2015
iMia iMia is offline
Miembro
 
Registrado: jul 2010
Posts: 141
Poder: 14
iMia Va por buen camino
Fantástica aportación y explicación Adripugliesso...
Ye falta explicar el porque de un par de cosas...

- El añadir la llamada "InvRegistry.RegisterInvokeOptions(TypeInfo(ServiceSoap), ioDocument);" en la claúsula Inizialization es por que ese WS no soporta SOAP 1.2 con tipos text/xml... con eso se le indica que el contenido es simplemente text. Es debido a un fallo en los servidores de tomcat que no se suelen configurar de forma correcta.

- En el HTTPRIO, añadir el afterexecute, no es realmente necesario, pero se hace para monitorear los mensajes recibidos y poder guardarlo y analizarlos... pero es algo que se puede obviar...
Responder Con Cita
  #7  
Antiguo 22-04-2016
rruffino rruffino is offline
Miembro
 
Registrado: dic 2004
Ubicación: Berrotaran, Cordoba - Argentina
Posts: 215
Poder: 20
rruffino Va por buen camino
Consulta

Hola, buenas noches!
Yo tambien estoy usando directamente los webservices pero se me ha dado un caso, y es cuando el comprobante a validar solo tiene importes EXENTOS, cuando armo el objeto de Detalle, necesito sacarle el apartado IVA para no presentarlo sino da error en la validacion. Alguien sabe como hacerlo?
Responder Con Cita
  #8  
Antiguo 19-05-2017
Avatar de hgiacobone
hgiacobone hgiacobone is offline
Miembro
 
Registrado: may 2003
Ubicación: La Plata, Bs. As., Argentina
Posts: 165
Poder: 22
hgiacobone Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
De nuestra guía de estilo:
Escribir en mayúsculas equivale a gritar.
La cosa es que el tipo se mandó flor de post explicando algo que es muy solicitado por toda la comunidad, y le observan terrible bobada.

Poner en "Mayúsculas" el nombre de una instrucción Pascal, no es ni por asomo, una violación a la guia de estilo. Aparte, la suposición de que las mayusculas representan un grito , al menos a estas alturas, solo se considera una cuestión folclórica y tal vez hoy solo es utilizado por "History Chanel" cuando tratan temas como el inicio de las terminales de texto. Y tal vez ni eso.

Como sugerencia, deberían reveer este tipo de comentarios absurdos.
Cordialmente,
YAKO
Responder Con Cita
  #9  
Antiguo 19-05-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por hgiacobone Ver Mensaje
La cosa es que el tipo se mandó flor de post explicando algo que es muy solicitado por toda la comunidad, y le observan terrible bobada.
Poner en "Mayúsculas" el nombre de una instrucción Pascal, no es ni por asomo, una violación a la guia de estilo. Aparte, la suposición de que las mayusculas representan un grito , al menos a estas alturas, solo se considera una cuestión folclórica y tal vez hoy solo es utilizado por "History Chanel" cuando tratan temas como el inicio de las terminales de texto. Y tal vez ni eso.
Como sugerencia, deberían reveer este tipo de comentarios absurdos.
Cordialmente,
YAKO
Ese mensaje es de hace 2 años, y el mensaje al que se refiere se editó para cumplir las normas.
En fin, bobadas, las que tú has soltado.
Responder Con Cita
  #10  
Antiguo 20-07-2016
fredymam fredymam is offline
Registrado
 
Registrado: oct 2005
Posts: 2
Poder: 0
fredymam Va por buen camino
Hola!! comunidad

Estaba teniendo el mismo problema en Delphi7 y la corrección que publicaron
Código Delphi [-]
 InvRegistry.RegisterInvokeOptions(TypeInfo(ServiceSoap), ioDocument);
resolvió gran parte

Aunque ahora tengo otro problema con CbtesAsoc, Tributos y Otros; y resulta imposible enviarlos vacíos, dando el siguiente error:

--->> Observaciones:
Code: 10062 - Msg.: Si envia CbtesAsoc, CbteAsoc es obligatorio.
Code: 10052 - Msg.: Si envia Opcionales, Opcional es obligatorio.


Código Delphi [-]
var
  Retenciones : ArrayOfTributo;
  Detalle        : FECAEDetRequest;
begin
  SetLength(Retenciones,0);
  Detalle.CbtesAsoc := Retenciones;
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
Factura Electronica - Afip Argentina Joe_Balda Varios 30 30-01-2021 04:10:34
Factura Electrónica AFIP Argentina SergioFrey Noticias 2 19-05-2017 21:02:03
xml+xsl a pdf(Factura Electronica) jgutti Varios 4 21-02-2012 16:08:23
factura electronica cmm07 Varios 4 02-04-2009 17:46:03
factura electronica spia Varios 2 22-02-2009 21:30:06


La franja horaria es GMT +2. Ahora son las 05:12:18.


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