Cita:
Empezado por inyu
¿Alguien tiene un ejemplo del desglose de una factura recibida? Pensé que no me costaria nada adaptar el de una factura emitida pero tengo problemas creando el desglose de la factura e IVAs, gracias.
PD: Me refiero al código en C, .net, delphi o lo que sea, el XML ya lo tengo claro.
|
Hola.
No tengo ningún ejemplo de facturas recibidas pero te paso mi parte del código que las envía, imagino que te servirá de ejemplo aunque todavía no está cerrado con todos los tipos de facturas y eso.
Código Delphi
[-]
try
ASuministroLRFacturasRecibidas := SuministroLRFacturasRecibidas.Create;
ASuministroLRFacturasRecibidas.Cabecera := CabeceraSii.Create;
ASuministroLRFacturasRecibidas.Cabecera.IDVersionSii:=VersionSiiType(0); ASuministroLRFacturasRecibidas.Cabecera.titular := PersonaFisicaJuridicaESType.Create;
ASuministroLRFacturasRecibidas.Cabecera.Titular.NombreRazon:=Bd.BuscaValor('DATOSEMPRESA','NOMBRE',' ',''); ASuministroLRFacturasRecibidas.Cabecera.Titular.NIF:=Bd.BuscaValor('DATOSEMPRESA','MNIF','',''); if FormSii.RadioButton1.Checked then begin
ASuministroLRFacturasRecibidas.Cabecera.TipoComunicacion:=ClaveTipoComunicacionType(0);
end else if FormSii.RadioButton2.Checked then begin
ASuministroLRFacturasRecibidas.Cabecera.TipoComunicacion:=ClaveTipoComunicacionType(1);
end;
SetLength(ARegistroLRFacturasRecibidas, M);
for N := 0 to M do begin
FormSII.PBProceso.Position := FormSII.PBProceso.Position+1;
If Grid.ValorCeldaPorCampoYFila('ENVIAR',N+1)='X' then begin
FormSII.Label5.Caption := 'Factura: '+Grid.ValorCeldaPorCampoYFila('FACTURA',N+1);
Application.ProcessMessages;
Tabla.FindKey([Grid.ValorCeldaPorCampoYFila('CODIGO',N+1)]);
TablaCuentas.FindKey([Tabla.FieldByName('CUENTA').AsString]);
ARegistroLRFacturasRecibidas[N]:=LRfacturasRecibidasType.Create;
ARegistroLRFacturasRecibidas[N].IDFactura:=IDFacturaRecibidaType.create;
ARegistroLRFacturasRecibidas[N].FacturaRecibida:=FacturaRecibidaType.create; ARegistroLRFacturasRecibidas[N].PeriodoImpositivo:=PeriodoImpositivo.Create;
ARegistroLRFacturasRecibidas[N].PeriodoImpositivo.Ejercicio:=Bd.BuscaValor('DATOSEMPRESA','MEJERCICIO','',''); P:=StrToInt(FormatDateTime('MM',StrToDate(Grid.ValorCeldaPorCampoYFila('FECHA',N+1))));
ARegistroLRFacturasRecibidas[N].PeriodoImpositivo.periodo :=TipoPeriodoType(P-1); ARegistroLRFacturasRecibidas[N].IDFactura.IDEmisorFactura:= IDEmisorFactura4.Create;
ARegistroLRFacturasRecibidas[N].IDFactura.IDEmisorFactura.NIF := Tabla.FieldByName('CIF').AsString; if FormSII.CheckBox1.Checked then
ARegistroLRFacturasRecibidas[N].IDFactura.NumSerieFacturaEmisor:=Grid.ValorCeldaPorCampoYFila('FACTURA',N+1)+'/'+FormatDateTime('YYYYMMDDHHMMSS'+IntToStr(N),now)
else
ARegistroLRFacturasRecibidas[N].IDFactura.NumSerieFacturaEmisor:=Grid.ValorCeldaPorCampoYFila('FACTURA',N+1);
ARegistroLRFacturasRecibidas[N].IDFactura.FechaExpedicionFacturaEmisor:=Grid.ValorCeldaPorCampoYFila('FECHA',N+1); if Tabla.FieldByName('TOTAL').AsCurrency<0 then begin
ARegistroLRFacturasRecibidas[N].FacturaRecibida.tipofactura:=ClaveTipoFacturaType(2); ARegistroLRFacturasRecibidas[N].FacturaRecibida.TipoRectificativa := ClaveTipoRectificativaType(1);
end else begin
ARegistroLRFacturasRecibidas[N].FacturaRecibida.tipofactura:=ClaveTipoFacturaType(0); end;
ARegistroLRFacturasRecibidas[N].FacturaRecibida.FechaRegContable := Tabla.FieldByName('FECHAE').AsString;
cAux:=Tabla.FieldByName('BASE1').AsCurrency+Tabla.FieldByName('BASE2').AsCurrency+Tabla.FieldByName( 'BASE3').AsCurrency;
sAux:=CurrToStr(cAux);
AregistroLRFacturasRecibidas[N].FacturaRecibida.CuotaDeducible := StrTran(sAux,',','.');
if Tabla.FieldByName('TIPOSII').AsString<>'' then begin
ARegistroLRFacturasRecibidas[N].FacturaRecibida.ClaveRegimenEspecialOTrascendencia:=IdOperacionesTrascendenciaTributariaType(Tabla. FieldByName('TIPOSII').AsInteger-1); end else begin
ARegistroLRFacturasRecibidas[N].FacturaRecibida.ClaveRegimenEspecialOTrascendencia:=IdOperacionesTrascendenciaTributariaType(0); end;
ARegistroLRFacturasRecibidas[N].FacturaRecibida.ImporteTotal:=StrTran(Tabla.FieldByName('TOTAL').AsString,',','.'); ARegistroLRFacturasRecibidas[N].FacturaRecibida.descripcionOperacion:='Su Factura';
ARegistroLRFacturasRecibidas[N].FacturaRecibida.Contraparte:=PersonaFisicaJuridicaType.Create; ARegistroLRFacturasRecibidas[N].FacturaRecibida.Contraparte.NombreRazon:=Tabla.FieldByName('NOMBRE').AsString;
try
iAux:=Tabla.FieldByName('TIPOSII').AsInteger;
except
iAux:=1;
end;
if (Tabla.FieldByName('TIPO').AsString='9') or (Tabla.FieldByName('TIPO').AsString='7') or (Tabla.FieldByName('TIPO').AsString='A') then begin
If Tabla.FieldByName('TIPO').AsString='7' then begin ARegistroLRFacturasRecibidas[N].FacturaRecibida.Contraparte.NIF:=Tabla.FieldByName('CIF').AsString; end;
end else begin
ARegistroLRFacturasRecibidas[N].FacturaRecibida.Contraparte.NIFRepresentante:='';
ARegistroLRFacturasRecibidas[N].FacturaRecibida.Contraparte.NIF:=Tabla.FieldByName('CIF').AsString; end;
if (Tabla.FieldByName('IVA1').AsCurrency<>0) and (Tabla.FieldByName('IVA2').AsCurrency<>0) and (Tabla.FieldByName('IVA3').AsCurrency<>0) then begin
nIvas:=3;
end else if (Tabla.FieldByName('IVA1').AsCurrency<>0) and (Tabla.FieldByName('IVA2').AsCurrency<>0) then begin
nIvas:=2;
end else if (Tabla.FieldByName('IVA1').AsCurrency<>0) then begin
nIvas:=1;
end else begin
nIvas:=0;
end;
if nIvas>0 then begin
setLength(IVAS,nIvas); Z:=0;
for zz := 0 to nIvas-1 do begin
if Tabla.FieldByName('IVA'+IntToStr(ZZ+1)).AsCurrency<>0 then begin
IVAS[zz]:=DetalleIVARecibidaType.create; IVAS[zz].BaseImponible:=StrTran(Tabla.FieldByName('BASE'+IntToStr(ZZ+1)).AsString,',','.'); IVAS[zz].TipoImpositivo:=StrTran(Tabla.FieldByName('TIVA'+IntToStr(ZZ+1)).AsString,',','.'); IVAS[zz].CuotaSoportada:=StrTran(Tabla.FieldByName('IVA'+IntToStr(ZZ+1)).AsString,',','.'); end;
end;
end;
if nIvas>0 then begin
ARegistroLRFacturasRecibidas[N].FacturaRecibida.desgloseFactura:=DesgloseFacturaRecibidasType.create;
ARegistroLRFacturasRecibidas[N].FacturaRecibida.desglosefactura.desgloseIVA:=IVAS;
end else begin
if (Tabla.FieldByName('TIPO').AsString='7') then begin
setLength(IVAS,1); IVAS[0]:=DetalleIVARecibidaType.create; IVAS[0].BaseImponible:='0';
IVAS[0].TipoImpositivo:='0';
IVAS[0].CuotaSoportada:='0';
ARegistroLRFacturasRecibidas[N].FacturaRecibida.DesgloseFactura :=DesgloseFacturaRecibidasType.create;
ARegistroLRFacturasRecibidas[N].FacturaRecibida.DesgloseFactura.DesgloseIVA := IVAS;
end else if (Tabla.FieldByName('TIPO').AsString='9') then begin
end else if (Tabla.FieldByName('TIPO').AsString='7') or (Tabla.FieldByName('TIPO').AsString='A') then begin
end else begin
end;
end;
end;
end;
ASuministroLRFacturasRecibidas.RegistroLRFacturasRecibidas:=ARegistroLRFacturasRecibidas;
try
FormSII.Label5.Caption := 'Enviando paquete de datos....';
Application.ProcessMessages;
result := GetsiiSOAP(true,'',HTTPRIO1).SuministroLRFacturasRecibidas(ASuministroLRFacturasRecibidas);
for i := low(result.RespuestaLinea) to High(result.RespuestaLinea) do begin
with result.RespuestaLinea[i] do begin
sAux:='Ok. Factura: '+IDFactura.NumSerieFacturaEmisor +' '+DateTimeToStr(now);
if EstadoRegistro <> EstadoRegistroType(0) then begin
sAux:='Error no.: ' + InttoStr(CodigoErrorRegistro);
sAux:=sAux+' '+DescripcionErrorRegistro;
end;
end;
Grid.ValorCeldaPorCampoYFila('RESULTADO',i+1, sAux);
Tabla.FindKey([Grid.ValorCeldaPorCampoYFila('CODIGO',i+1)]);
Bd.RegistroEdita(Tabla);
if result.RespuestaLinea[i].EstadoRegistro=EstadoRegistroType(0) then begin
Grid.ValorCeldaPorCampoYFila('RESULTII',i+1, '0');
Tabla.FieldByName('RESULTII').AsString:='0';
end else if result.RespuestaLinea[i].EstadoRegistro=EstadoRegistroType(2) then begin
Grid.ValorCeldaPorCampoYFila('RESULTII',i+1, '1');
if Tabla.FieldByName('RESULTII').AsString<>'2' then
Tabla.FieldByName('RESULTII').AsString:='1';
end else if result.RespuestaLinea[i].EstadoRegistro=EstadoRegistroType(1) then begin
Grid.ValorCeldaPorCampoYFila('RESULTII',i+1, '2');
Tabla.FieldByName('RESULTII').AsString:='2';
end;
Tabla.FieldByName('CSVII').AsString:=Result.csv;
Tabla.FieldByName('RESULTADO').AsString:=sAux;
Bd.RegistroGraba(Tabla);
end;
except
On E:Exception do
MessageDlg(E.Message, mtError, [mbOK], 0);
end;
finally
ASuministroLRFacturasRecibidas.Free;
result.Free;
end;
Saludos