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 15-07-2015
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por adripugliesso Ver Mensaje
En el firmado lo unico que hago es usar el shellExecute llamando a un Bat que lo que hace es ejecutar las lineas de Openssl.


Código Delphi [-]
procedure CreaXMLFirmado();
var p1: string;
    r: PAnsiChar;
begin
  memo1.Clear;
  memo1.Lines.Add('c:');
  memo1.Lines.Add('cd /');
  memo1.Lines.Add('cd OpenSSL-Win32');
  memo1.Lines.Add('cd bin');
  memo1.Lines.Add('openssl smime -sign -in ' + ruta + 'ticketsf.xml -out '+ ruta + 'ticketf.xml -inkey ' + ruta + 'cert.key -signer '+ruta +'cert.crt -outform PEM -nodetach ');
  memo1.Lines.SaveToFile(ruta + 'firmar.bat');
  memo1.Clear;

ShellExecute(0, 'open', PAnsiChar(ruta + 'firmar.bat'), 'param1 param2',
  nil,  SW_HIDE);
end;

tenes que tener instalado el Openssl en la ruta donde lo llamas
Muy interesante , muchas gracias.

Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #2  
Antiguo 03-08-2015
adripugliesso adripugliesso is offline
Miembro
NULL
 
Registrado: jul 2015
Posts: 49
Poder: 0
adripugliesso Va por buen camino
Metodo para Solicitar el CAE

Código Delphi [-]
procedure TForm1.Button8Click(Sender: TObject);
var
  port: ServiceSoap;
  respuesta: FECAEResponse;
  Auth: FEAuthRequest;
  Request: FECAERequest;

  CAECabReq : FECAECabRequest;
  CAEDetReq : FECAEDetRequest;
  ACAEDetReq : ArrayOfFECAEDetRequest;
  ADetIva : ArrayOfAlicIva;
  DetIva21 : AlicIva;
  DetIva105 : AlicIva;
  Tributos : Tributo;
  ATributos : ArrayOfTributo;
  CbtesAsoc : CbteAsoc;
  ACbtesAsoc : ArrayOfCbteAsoc;

  x, i : Integer;
  NroComp : Integer;

  iva : boolean;

begin


  screen.Cursor := crHourGlass;


//  edDesde.Text := TimeToStr(now);
  auth      := FeAuthRequest.Create;
  Request   :=  FECAERequest.Create;
  CAEDetReq := FECAEDetRequest.Create;
  CAECabReq := FECAECabRequest.Create;
  DetIva21  := AlicIva.Create;
  DetIva105 := AlicIva.Create;

  SetLength(ACAEDetReq,1);

  Request.FeCabReq        := CAECabReq;
  ACAEDetReq[0]           := CAEDetReq;
  Request.FeDetReq        := ACAEDetReq;

  //si tiene percepciones crea array
//  if STRTOFLOAT(edtPercIIBB.Text) > 0 then
//  begin
//    Tributos := Tributo.Create;
//    SetLength(ATributos,1);
//    ATributos[0]                             := Tributos;
//    Request.FeDetReq[0].Tributos             := ATributos;
//  end;

  //si tiene los 2 ivas dimensiona para 2 sino 1
//  if (STRTOFLOAT(edtIVA105.Text) > 0) and (STRTOFLOAT(edtIVA21.Text) > 0)
//  then
//  begin
//    SetLength(ADetIva,2);
//    ADetIVA[0]              := DetIva21;
//    ADetIVA[1]              := DetIva105;
//    Request.FeDetReq[0].Iva := ADetIva;
//  end
//  else
//  begin
    SetLength(ADetIva,1);
   ADetIVA[0]              := DetIva21;
    Request.FeDetReq[0].Iva := ADetIva;

//  end;


  // si lleva documento vinculado
//  i:= dbTipoCbte.KeyValue;
//  if (i IN [2,3,7,8]) then
//  begin
//    CbtesAsoc := CbteAsoc.Create;
//    SetLength(ACbtesAsoc,1);
//    ACbtesAsoc[0]                             := CbtesAsoc;
//    Request.FeDetReq[0].CbtesAsoc             := ACbtesAsoc;

//  end;


  iva:=false;

  auth.Cuit   := cuit;
  auth.token  := token;
  auth.Sign   := sign;


  //   FeCabReq
  Request.FeCabReq.CantReg  := 1;  //   cantidad de registros
  Request.FeCabReq.CbteTipo := 1;    //   1=fc.A 2=nd.A 3=nc.A    6=fc.B 7=nd.B 8=nc.B
  Request.FeCabReq.PtoVta   := 2;    //   Punto de venta

  //   FecDetReq
  Request.FeDetReq[0].Concepto  := 1;   //   1=productos, 2=servicios, 3=ambos
  Request.FeDetReq[0].DocTipo   := 80; //80 -cuit   86 - cuil   96-dni
  Request.FeDetReq[0].DocNro    := 20000000001; //cuit del cliente

  NroComp := STRTOINT64(edit1.Text);
  
  Request.FeDetReq[0].CbteDesde   := NroComp;
  Request.FeDetReq[0].CbteHasta   := NroComp;
  Request.FeDetReq[0].CbteFch     := formatdatetime('yyyymmdd',now);
  Request.FeDetReq[0].ImpTotal    := 121;
  Request.FeDetReq[0].ImpTotConc  := 0;
  Request.FeDetReq[0].ImpNeto     := 100;
  Request.FeDetReq[0].ImpOpEx     := 0;
  Request.FeDetReq[0].ImpIva      := 21;
  Request.FeDetReq[0].ImpTrib     := 0;  //si tiene percepciones de IIBB o IVA van aca

  if Request.FeDetReq[0].Concepto <> 1 then
  begin
    //------------------------------------------------------------------------
    Request.FeDetReq[0].FchServDesde := FormatDateTime('yyyymmdd',now);         //   solo para concepto 2 o 3
    Request.FeDetReq[0].FchServHasta := FormatDateTime('yyyymmdd',now);          //   solo para concepto 2 o 3
    Request.FeDetReq[0].FchVtoPago   := FormatDateTime('yyyymmdd',now);          //   solo para concepto 2 o 3
    //------------------------------------------------------------------------
  end;

  Request.FeDetReq[0].MonId      := 'PES';
  Request.FeDetReq[0].MonCotiz   := 1;
  //    Request.FeDetReq[0].FchServDesde :=          //   solo para concepto 2 o 3


 // i:= dbTipoCbte.KeyValue;
 // if (i IN [2,3,7,8]) then //es nota de debito o credito lleva doc asociado
 // begin
 //   Request.FeDetReq[0].CbtesAsoc[0].Tipo   := dbTipoCbteVinc.KeyValue;    //  tipo del comprobante asociado (nc/nd)
 //   Request.FeDetReq[0].CbtesAsoc[0].PtoVta := STRTOINT(edtCompVincPto.Text);    //  Punto de venta de la nc
 //   Request.FeDetReq[0].CbtesAsoc[0].Nro    := STRTOINT64(edtCompVincComp.Text);    //  numero de la (nc/nd)
 //end;

  //carga retencion de IIBB si tiene
//  if STRTOFLOAT(edtPercIIBB.Text) > 0 then
//  begin
//      Request.FeDetReq[0].Tributos[0].Id       :=  2;    //2-Imp provincial
//      Request.FeDetReq[0].Tributos[0].Desc     :=  'PERCEPCION DE IIBB BS AS' ;    // Descripcion
//      Request.FeDetReq[0].Tributos[0].BaseImp  :=  STRTOFLOAT(edtSubtotal.Text);    // base imponible
//      Request.FeDetReq[0].Tributos[0].Alic     :=  STRTOFLOAT(edtPercep.Text);    // alicuota
//      Request.FeDetReq[0].Tributos[0].importe  :=  STRTOFLOAT(edtPercIIBB.Text) ;    // imp del tributo
//  end;

  //la factura contiene 2 tipos de iva 10.5 y 21%
//  if (STRTOFLOAT(edtIVA105.Text) > 0) and (STRTOFLOAT(edtIVA21.Text) > 0) then
//  begin
//    Request.FeDetReq[0].Iva[1].id       := 4;     //   alicuota 10.5%
//    Request.FeDetReq[0].Iva[1].BaseImp  := STRTOFLOAT(LNeto105.Caption); //   base imponible
//    Request.FeDetReq[0].Iva[1].importe  := STRTOFLOAT(edtIva105.Text);//   Importe del impuesto
//
//    Request.FeDetReq[0].Iva[0].id       := 5;     //   alicuota 21%
//    Request.FeDetReq[0].Iva[0].BaseImp  := STRTOFLOAT(LNeto21.Caption); //   base imponible
//    Request.FeDetReq[0].Iva[0].importe  := STRTOFLOAT(edtIva21.TExt);//   Importe del impuesto
//    iva := true;
//  end;

  //la factura contiene iva 10.5
//  if (STRTOFLOAT(edtIVA105.Text) > 0) and NOT(iva) then
//  begin
//    Request.FeDetReq[0].Iva[0].id       := 4;     //   alicuota 10.5%
//    Request.FeDetReq[0].Iva[0].BaseImp  := STRTOFLOAT(LNeto105.Caption); //   base imponible
//    Request.FeDetReq[0].Iva[0].importe  := STRTOFLOAT(edtIva105.Text);//   Importe del impuesto
//  end;


  //la factura contiene iva 21
//  if NOT(iva) and (STRTOFLOAT(edtIVA21.Text) > 0) then
//  begin
    Request.FeDetReq[0].Iva[0].id       := 5;     //   alicuota 21%
    Request.FeDetReq[0].Iva[0].BaseImp  := 100; //   base imponible
    Request.FeDetReq[0].Iva[0].importe  := 21;//   Importe del impuesto
//  end;

    //la factura NO LLEVA IVA DISCRIMINADO ES B
//  if (LLetra.Caption = 'B') then
//  begin
//    Request.FeDetReq[0].Iva[0].id       := 3;     //   alicuota 10.5%
//    Request.FeDetReq[0].Iva[0].BaseImp  := STRTOFLOAT(edtSubtotal.Text); //   base imponible
//    Request.FeDetReq[0].Iva[0].importe  := 0;//   Importe del impuesto
//  end;


  //    Request.FeDetReq[0].Opcionales[0].Id    := s(4)    //  id del opcional
  //    Request.FeDetReq[0].Opcionales[0].Valor := s(250); //  valor
  

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

    Respuesta := port.FECAESolicitar(Auth,Request );


    Memo1.Lines.Add('RESULTADO: ' + respuesta.fedetresp[0].Resultado);
    Memo1.Lines.Add('CAE: ' + respuesta.fedetresp[0].CAE);
    Memo1.Lines.Add('FECHA VENC: ' + respuesta.fedetresp[0].CAEFchVto);




    //si retorna cae, registra venta
//    if (respuesta.fedetresp[0].Resultado = 'A') then RegistraVenta;




    //--------------------------
    //   ARRAY DE OBSERVACIONES
    //--------------------------
  for x := 0 to high( Respuesta.feDetResp[0].observaciones ) do

      Showmessage('Observ. Code  : '+inttostr(respuesta.fedetresp[0].observaciones[x].Code) +
      ' - Observ. Msg.  : '+respuesta.fedetresp[0].Observaciones[x].Msg);

  
  for x := 0 to High( respuesta.Errors ) do
    Showmessage('Errores : '+inttostr(Respuesta.Errors[x].Code)+' || '+Respuesta.Errors[x].Msg);
   

  auth.Free;
  respuesta.Free;
  Tributos.Free;
  CbtesAsoc.Free;
  DetIva21.Free;
  DetIva105.Free;
 // edHasta.Text := timetostr(now);

  screen.Cursor := crDefault;
end;
Responder Con Cita
  #3  
Antiguo 03-08-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Muy interesante, y eso que lo hiciste por el camino mas dificil

El compañero Delphius de DelphiAccess (aunque tambien esta en este foro) propuso en algun momento una iniciativa para implementar los WebService. Seria interesante que el punto de partida sea tu trabajo

Saludos
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
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
  #5  
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
  #6  
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.055
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
  #7  
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
  #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 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
  #10  
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
Estimado amigo adripugliesso
Subiste el código al FTP del sitio ?
Donde podemos encontrar más info sobre tu solución?
__________________
Gracias de antemano por vuestra ayuda.
·.:*:.·Yako·.:*:.·

Última edición por hgiacobone fecha: 19-05-2017 a las 20:11:33. Razón: no te digo
Responder Con Cita
  #11  
Antiguo 19-05-2017
adripugliesso adripugliesso is offline
Miembro
NULL
 
Registrado: jul 2015
Posts: 49
Poder: 0
adripugliesso Va por buen camino
Proyecto Ejemplo en Delphi 7

Acá les dejo un proyecto de ejemplo hecho en Delphi 7 de como usar los WebService de AFIP para Facturación Electrónica.

Cualquier duda consulten..

Espero que les sirva.-
Archivos Adjuntos
Tipo de Archivo: zip Proyecto.zip (57,2 KB, 289 visitas)
Responder Con Cita
  #12  
Antiguo 09-01-2019
ingfnmonteros ingfnmonteros is offline
Registrado
 
Registrado: sep 2008
Posts: 1
Poder: 0
ingfnmonteros Va por buen camino
Unhappy

Cita:
Empezado por adripugliesso Ver Mensaje
Acá les dejo un proyecto de ejemplo hecho en Delphi 7 de como usar los WebService de AFIP para Facturación Electrónica.

Cualquier duda consulten..

Espero que les sirva.-
Hola como están soy nuevo en esto, cuando intento correr el ejemplo de adripugliesso - WebService de AFIP para Facturación Electrónica
me sale el siguiente error: no se puede decodificar base64 al momento de generar el sign y token
Estuve leyendo todo el foro y entendiendo el código, pero me parece que me esta faltando algo por hacer, es mi primera ves con openssl y todo esto
Alguien me podria dar una pista para seguir adelante, lo compile con delphi 7
Responder Con Cita
  #13  
Antiguo 09-01-2019
Avatar de Dexter182
Dexter182 Dexter182 is offline
Miembro
 
Registrado: jul 2005
Ubicación: Argentina
Posts: 95
Poder: 19
Dexter182 Va por buen camino
En su momento probé el código y tampoco lo pude hacer andar.
Creo que el problema viene con el tema de los certificados, que antes eran de 1024 bits y ahora tienen que ser de 2048 bits.
Saludos!
Responder Con Cita
  #14  
Antiguo 18-02-2021
balger balger is offline
Miembro
 
Registrado: may 2011
Posts: 30
Poder: 0
balger Va por buen camino
Hola a todos.
¿Alguien pudo hacer el manejo de errores devueltos por LoginCMS?
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 03:31:05.


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