Saludos
He comenzado a trabajar con esto de los CFD para el sistema Aspel SAE 3.0 ya genere el archivo cfdv2.pas con XML Data Binding y ya redacte la carga de los datos pero al probarlo en esta instruccion
Código Delphi
[-]CFD := GetComprobante( XMLDoc );
me vota este error "Interface not supported" nunca habia usado XMLDocument a si que no tengo ni idea de donde revisar.
Código Delphi
[-]
procedure TfpRUEBAS.CargarDatosCFD( TipoDocu, SaeFolio: string; DatosDb: T_ConfigDbSae;
DatosEmisor: T_ConfigCFDEmisor );
var
_FacD, _FacP, _Clie, _Inve: TTable;
_DFacD: TDataSource;
procedure _ConfigDb;
begin
_FacD := TTable.Create( nil );
_FacP := TTable.Create( nil );
_Clie := TTable.Create( nil );
_Inve := TTable.Create( nil );
_DFacD := TDataSource.Create( nil );
DatosDb.TrasfiereDatos( tiFact0x, _FacD );
DatosDb.TrasfiereDatos( tiFa0tyx, _FacP );
DatosDb.TrasfiereDatos( tiClie0x, _Clie );
DatosDb.TrasfiereDatos( tiInve0x, _Inve );
_DFacD.DataSet := _FacD;
_FacD.IndexName := 'FACT01';
_FacP.IndexName := 'iTip_Doc';
_Clie.IndexName := 'CCLIE';
_Inve.IndexName := 'Clv_Art';
_FacP.MasterSource := _DFacD;
_FacP.MasterFields := 'TIP_DOC;CVE_DOC';
_FacD.Open;
_FacP.Open;
_Clie.Open;
_Inve.Open;
if not _FacD.FindKey( [ TipoDocu, SaeFolio ] ) then begin
MessageDlg( 'No se encontro el documento', mtWarning, [ mbOk ], 0 );
XMLDoc.Active := False;
Abort;
end;
if not _Clie.FindKey( [ _FacD.FieldByName( 'Cve_ClPv' ).Value ] ) then begin
MessageDlg( 'No se encontro el Cliente', mtWarning, [ mbOk ], 0 );
XMLDoc.Active := False;
Abort;
end;
end;
begin
XMLDoc.XML.Text := '<? xml version="1.0" encoding="UTF-8" ?> <Comprobante xmlns="---sat.gob.mx/cfd"> </Comprobante >';
XMLDoc.Active := True;
CFD := GetComprobante( XMLDoc ); CFD.SetAttribute( 'xmlns:xsi', '---w3.org/2001/XMLSchema-instance' );
CFD.SetAttribute( 'xsi:schemaLocation', '---sat.gob.mx/cfd ---sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd' );
_ConfigDb;
with CFD do begin
Version := '2.0';
Serie := 'A';
Folio := '1';
Fecha := DateTimeToStr( Now );
FormaDePago := 'Pago en una sola exhibición';
CondicionesDePago := IntToStr( _Clie.FieldValues[ 'Dias_Cred' ] ) + ' Dias';
SubTotal := FloatToStrF( _FacD.FieldValues[ 'Can_tot' ], ffNumber, 14, 2 );
Descuento := FloatToStrF( _FacD.FieldValues[ 'Des_tot' ], ffNumber, 14, 2 );
Total := FloatToStrF(
( _FacD.FieldValues[ 'Can_tot' ] - _FacD.FieldValues[ 'Des_Tot' ] ) +
_FacD.FieldValues[ 'Imp_Tot4' ], ffNumber, 14, 2 );
if TipoDocu = 'F' then
TipoDeComprobante := 'ingreso' else if TipoDocu = 'D' then
TipoDeComprobante := 'egreso';
with Emisor do begin
Rfc := DatosEmisor.Rfc; Nombre := DatosEmisor.Nombre;
with DomicilioFiscal do begin
Calle := DatosEmisor.DomFisCalle;
NoExterior := DatosEmisor.DomFisNoExterior;
NoInterior := DatosEmisor.DomFisNoInterior;
Colonia := DatosEmisor.DomFisColonia;
Localidad := DatosEmisor.DomFisLocalidad;
Referencia := DatosEmisor.DomFisReferencia;
Municipio := DatosEmisor.DomFisMunicipio;
Estado := DatosEmisor.DomFisEstado;
Pais := DatosEmisor.DomFisPais;
CodigoPostal := DatosEmisor.DomFisCodigoPostal;
end;
with ExpedidoEn do begin
Calle := DatosEmisor.ExpEnCalle;
NoExterior := DatosEmisor.ExpEnNoExterior;
NoInterior := DatosEmisor.ExpEnNoInterior;
Colonia := DatosEmisor.ExpEnColonia;
Localidad := DatosEmisor.ExpEnLocalidad;
Referencia := DatosEmisor.ExpEnReferencia;
Municipio := DatosEmisor.ExpEnMunicipio;
Estado := DatosEmisor.ExpEnEstado;
Pais := DatosEmisor.ExpEnPais;
CodigoPostal := DatosEmisor.ExpEnCodigoPostal;
end;
end; with Receptor do begin
Rfc := _Clie.FieldValues[ 'Rfc' ];
Nombre := _Clie.FieldValues[ 'Nombre' ];
with Domicilio do begin
Calle := _Clie.FieldValues[ 'Dir' ];
Colonia := _Clie.FieldValues[ 'Colonia' ];
Municipio := _Clie.FieldValues[ 'Pob' ];
Pais := _Clie.FieldValues[ 'Campostru2' ];
CodigoPostal := _Clie.FieldValues[ 'Codigo' ];
end;
end; while not _FacP.Eof do begin
with cfd.conceptos.add do begin
Cantidad := FloatToStr( _FacP.FieldValues[ 'Cant' ] );
Unidad := _FacP.FieldValues[ 'UNI_VENTA' ];
if _Inve.FindKey( [ _FacP.FieldValues[ 'Cve_Art' ] ] ) then
Descripcion := _Inve.FieldValues[ 'Descr' ]
else
Descripcion := _FacP.FieldValues[ 'Cve_Art' ];
ValorUnitario := FloatToStrF( _FacP.FieldValues[ 'Prec' ], ffNumber, 14, 2 );
Importe := FloatToStrF( _FacP.FieldValues[ 'Prec' ] * _FacP.FieldValues[ 'Cant' ],
ffNumber, 14, 2 );
end;
_FacP.Next;
end;
with Impuestos do begin
TotalImpuestosTrasladados := _FacD.FieldValues[ 'Tot_Imp4' ];
with Traslados.Add do begin
Impuesto := 'IVA';
Tasa := '16';
Importe := FloatToStrF( _FacD.FieldValues[ 'Tot_Imp4' ],
ffNumber, 14, 2 );
end; end; end; end;