En afip.gob.ar/fe/ click en herramientas de asistencia
RG 2485 Diseño de registro XML V 1.1
RG 2485 Manual V1.1
Te bajás esos 2 arhivos.
Te mando el procedure completo. Fijate que Kin tenés que crearla pero Kout se crea sola. A los array de entrada tenés que asignarle espacio a los de salida se asigna solo
Código Delphi
[-]
Function TFormFac.SolicitarCAE : Boolean;
Var
I : Integer;
Kin : FECAERequest;
CAECabReq : FECAECabRequest;
ACAEDetReq : ArrayOfFECAEDetRequest;
CAEDetReq : FECAEDetRequest;
ADetIva : ArrayOfAlicIva;
DetIva : AlicIva;
KOut : FECAEResponse;
CAECabResp : FECAECabResponse;
ACAEDetResp : ArrayOfFECAEDetResponse;
CAEDetResp : FECAEDetResponse;
AObserv : ArrayOfObs;
AError : ArrayOfErr;
Begin
SetLength(ACAEDetReq,1);
SetLength(ADetIva,1);
Kin := FECAERequest.Create;
CAECabReq := FECAECabRequest.Create;
CAEDetReq := FECAEDetRequest.Create;
DetIva := AlicIva.Create;
CAECabReq.CantReg := 1;
CAECabReq.CbteTipo := TipDoc;
CAECabReq.PtoVta := PuntodeVenta;
CAEDetReq.Concepto := 1;
CAEDetReq.DocTipo := 80;
CAEDetReq.DocNro := DmMain.CliCuit.AsLargeInt;
CAEDetReq.CbteDesde := numfac;
CAEDetReq.CbteHasta := numfac;
CAEDetReq.CbteFch := FormatDateTime('YYYYMMDD',EdFecha.Date);
CAEDetReq.ImpTotConc := 0;
CAEDetReq.ImpOpEx := 0;
CAEDetReq.ImpTrib := 0;
If LookMoneda.KeyValue = 1 then
Begin
CAEDetReq.ImpTotal := StrToFloat(Format('%12.2f',[TotalFinal]));
CAEDetReq.ImpNeto := StrToFloat(Format('%12.2f',[TotalNeto]));
CAEDetReq.ImpIVA := StrToFloat(Format('%12.2f',[IvaTotal]));
End
Else
Begin
CAEDetReq.ImpTotal := StrToFloat(Format('%12.2f',[TotalFinal * ValDolar]));
CAEDetReq.ImpNeto := StrToFloat(Format('%12.2f',[TotalNeto * ValDolar]));
CAEDetReq.ImpIVA := StrToFloat(Format('%12.2f',[IvaTotal * ValDolar]));
End;
CAEDetReq.MonId := 'PES';
CAEDetReq.MonCotiz := 1;
DetIva.Id := 5;
DetIva.BaseImp := CAEDetReq.ImpNeto;
DetIva.Importe := CAEDetReq.ImpIVA;
ADetIva[0] := DetIva;
CAEDetReq.Iva := ADetIva;
DmMain.TWsaa.Close;
ACAEDetReq[0] := CAEDetReq;
Kin.FeCabReq := CAECabReq;
Kin.FeDetReq := ACAEDetReq;
Kout := (HWSFE as ServiceSoap).FECAESolicitar(KinType,Kin);
CAECabResp := KOut.FeCabResp;
ACAEDetResp := KOut.FeDetResp;
CAEDetResp := ACAEDetResp[0];
AError := KOut.Errors;
For i := 0 to Length(AError) - 1 do
ShowMessage ('Error' + IntToStr(AError[i].Code) +') ' + AError[i].Msg);
AObserv := CAEDetResp.Observaciones;
For i := 0 to Length(AObserv) - 1 do
Alert ('Obs: ' + AObserv[i].Msg);
If CAECabResp.Resultado = 'R' then Result := False
Else
Begin
LCAE := CAEDetResp.CAE;
LvtoCae := VtoCaeToDate(CAEDetResp.CAEFchVto);
Result := True;
End;
Kin.Free;
KOut.Free;
End;