Imagen

DESCARGA SOFTWARE PARA FACTURA ELECTRONICA DE AQUI.
Facturacion, Validacion, Addendas, Librerias de programacion, etc.


CARTA PORTE V3.1

ECODEX TIENE ESTOS NUEVOS DATOS DE CONTACTO :
Comercializacion y Ventas - Evelia Vicke evicke@ecodex.com.mx 33-16-03-03-48
Soporte - Humberto Guerrero soporte@ecodex.com.mx 33-34-90-46-03


.

Codigo Fuente de Mdo Libre en Delphi distinto a version 7

Para los que programamos en Delphi, aqui estan las respuestas
[[ FORO CERRADO DEBIDO A QUE YA LA INFORMACION YA NO ES VIGENTE ]]
omarloi
Mensajes: 22
Registrado: Mar Jul 13, 2010 1:16 pm

Re: Codigo Fuente de Mdo Libre en Delphi distinto a version

Mensaje por omarloi »

El error de los caracteres especiales viene de FacturaE, en la funcion Generar la cadena Original, cuando copia el XMLDOC :

XMLDocCopy.XML := XMLDoc.XML ;
XMLDocCopy.Active := true;

Lo que hice fue generar otra ves el CFD en ves de hacerle un copy, te paso el codigo completo de la funcion para que te des una idea:

Código: Seleccionar todo

procedure TFacturaEForm.GeneraCadenaOriginal;
const pipe = '|';
var n,n1,i : integer;
	CFDCopy : IXMLComprobante; //Se requiere una copia ya que si se lee el original lo llena de "Null"
  s : string;

	procedure AgregaDato(atom : string);
	begin
		if atom <> '' then CadOriginal := CadOriginal + pipe + atom;
	end;
begin
	CadOriginal := pipe;


//**********************************************************
XMLDocCopy.XML.Text := '<?xml version="1.0" encoding="UTF-8" ?><Comprobante xmlns="http://www.sat.gob.mx/cfd/2"></Comprobante>';
XMLDocCopy.Active := True;
CFDCopy := GetComprobante(XMLDocCopy);

// A PARTIR DE AQUI TIENE QUE ADAPTARSE A TOMAR LOS DATOS DE SU BASE DE DATOS O FORMULARIO O DE DONDE
// TENGAN LA FACTURA "NORMAL", LOS RENGLONES QUE TIENEN UNA {opc} SIGNIFICA QUE (SEGUN EL ANEXO 20) SON
// DATOS OPCIONALES.

// El *unico* dato que entra como parametro es FolioFactura....ya que aqui pueden hacer una consulta SQL
// a una factura que ya este grabada en una base de datos y de ahi ir tomando los valores, es decir pueden usar:

// SQL.Add('select * from mitablafactura where foliofactura=' + IntToStr(FolioFactura));
// SQL.Execute

	with CFDCopy do
	begin
		SetAttribute('xmlns:xsi','http://www.w3.org/2001/XMLSchema-instance');
		SetAttribute('xsi:schemaLocation','http://www.sat.gob.mx/cfd/2 http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd');
		Version := '2.0';
{opc}	Serie := OpcC('FacturaE','FolioSerie');
		Folio := IntToStr(1234);
		Fecha := '2010-01-01T12:12:12'; //<<<<<<<<<<<<<<<<<<<<<REQUIERE TRABAJO AQUI
		Sello := ''; //Este dato *no* es opcional, pero se calcula mas adelante...
		NoAprobacion := StrToIntDef(OpcC('FacturaE','FolioNoAprobacion'),0);
		AnoAprobacion := StrToIntDef(OpcC('FacturaE','FolioAnoAprobacion'),0);
		FormaDePago := 'Pago en una sola exhibicion';
		NoCertificado := OpcC('FacturaE','CertNo');
{opc	Certificado := '';}
{opc	CondicionesDePago := '';}
		SubTotal := '68.50'; //<<<<<<<<<<<<<<<<<<<<<REQUIERE TRABAJO AQUI
{opc	Descuento := '';}
{opc	MotivoDescuento := '';}
		Total := '79.46'; //<<<<<<<<<<<<<<<<<<<<<REQUIERE TRABAJO AQUI
{opc	MetodoDePago := '';}
		TipoDeComprobante := 'ingreso';

		with Emisor do
		begin
			Rfc := OpcC('FacturaE','RFC');
			Nombre := OpcC('FacturaE','Nombre');

			with DomicilioFiscal {alias UbicacionFiscal} do
			begin
				Calle := OpcC('FacturaE','Calle');
{opc}			NoExterior := OpcC('FacturaE','NoExterior');
{opc			NoInterior := '';}
{opc}			Colonia := OpcC('FacturaE','Colonia');
{opc}			Localidad := OpcC('FacturaE','Localidad');
{opc			Referencia := '';}
				Municipio := OpcC('FacturaE','Municipio');
				Estado := OpcC('FacturaE','Estado');
				Pais := OpcC('FacturaE','Pais');
				CodigoPostal := OpcC('FacturaE','CodigoPostal');
			end; {with CFDCopy.Emisor.DomicilioFiscal}

			if false then {todo el bloque es opcional, solo se usa si hay sucursales}
{opc}		with ExpedidoEn {alias Ubicacion} do
			begin
{opc}			Calle := '';
{opc}			NoExterior := '';
{opc}			NoInterior := '';
{opc}			Colonia := '';
{opc}			Localidad := '';
{opc}			Referencia := '';
{opc}			Municipio := '';
{opc}			Estado := '';
				Pais := '';
{opc}			CodigoPostal := '';
			end; {with CFDCopy.Emisor.ExpedidoEn}
		end; {with CFDCopy.Emisor}

		with Receptor do
		begin
			Rfc := Paso2Form.RFCCliente.Text;
			Nombre := Paso2Form.NombreCliente.Text;;

			with Domicilio {alias Ubicacion} do
			begin
{opc}			Calle := Paso2Form.CalleCliente.Text;
{opc}			NoExterior := Paso2Form.NoExteriorCliente.Text;
{opc			NoInterior := '';}
{opc}			Colonia := Paso2Form.ColoniaCliente.Text;
{opc}			Localidad := Paso2Form.CiudadCliente.Text;
{opc			Referencia := '';}
{opc}			Municipio := Paso2Form.MunicipioCliente.Text;
{opc}			Estado := Paso2Form.EstadoCliente.Text;
				Pais := Paso2Form.PaisCliente.Text;
{opc}			CodigoPostal := Paso2Form.CodigoPostalCliente.Text;
			end; {with CFDCopy.Receptor.Domicilio}
		end; {with CFDCopy.Receptor}

		with Conceptos do
		//AQUI DEBEN USAR UN FOR, REPEAT, WHILE, ETC SEGUN SU BASE DE DATOS
		{for n := 1 to maxarticulos do
		Repeat .... Until todoslosarticulos
		While not EOF do}
		begin
			with Conceptos.Add do
			begin
				Cantidad := Paso2Form.Cantidad1.Text;
{opc}			Unidad := Paso2Form.Unidad1.Text;
{opc			NoIdentificacion := '';}
				Descripcion := Paso2Form.Descr1.Text;
				ValorUnitario := FloatToStrF(StrToFloatDef(Paso2Form.PU1.Text,0),ffFixed,10,2);
				Importe := FloatToStrF(StrToFloatDef(Paso2Form.PT1.Text,0),ffFixed,10,2);
			end; {with CFDCopy.Concepto}

			with Conceptos.Add do
			begin
				Cantidad := Paso2Form.Cantidad2.Text;
{opc}			Unidad := Paso2Form.Unidad2.Text;
{opc			NoIdentificacion := '';}
				Descripcion := Paso2Form.Descr2.Text;
				ValorUnitario := FloatToStrF(StrToFloatDef(Paso2Form.PU2.Text,0),ffFixed,10,2);
				Importe := FloatToStrF(StrToFloatDef(Paso2Form.PT2.Text,0),ffFixed,10,2);
			end; {with CFDCopy.Concepto}

			with Conceptos.Add do
			begin
				Cantidad := Paso2Form.Cantidad3.Text;
{opc}			Unidad := Paso2Form.Unidad3.Text;
{opc			NoIdentificacion := '';}
				Descripcion := Paso2Form.Descr3.Text;
				ValorUnitario := FloatToStrF(StrToFloatDef(Paso2Form.PU3.Text,0),ffFixed,10,2);
				Importe := FloatToStrF(StrToFloatDef(Paso2Form.PT3.Text,0),ffFixed,10,2);
			end; {with CFDCopy.Concepto}
		end; {with CFDCopy.Conceptos}

		with Impuestos do
		begin
{opc		TotalImpuestosRetenidos := '';}

			//Si hay impuesto retenido se debe usar el siguiente bloque:
{			with Retenciones.Add do
			begin
				Impuesto := 'ISR o IVA';
				Importe := 'calculo de la retencion';
			end;}

{opc}		TotalImpuestosTrasladados := '10.96'; //<<<<<<<<<<<<<<<<<<<<<REQUIERE TRABAJO AQUI

			with Traslados.Add do
			begin
				Impuesto := 'IVA';
				Tasa := '16.00';
				Importe := '10.96'; //<<<<<<<<<<<<<<<<<<<<<REQUIERE TRABAJO AQUI
			end;

			//Si necesitan IEPS usen este bloque ::
{			with Traslados.Add do
			begin
				Impuesto := 'IEPS';
				Tasa := 'tasa del impuesto';
				Importe := 'valor calculado a partir del subtotal';
			end;}
		end ; {CFDCopy.Impuestos}
	end; {with CFDCopy}

//*********************************************************

 // XMLDocCopy.XML := XMLDoc.XML ; //<<<<<<<<<<<<<<ESTO YA NO ES NECESARIO POR QUE SE GENERO
                         //<<<<<<<<<<< OTRA VES LA FACTURA EN EL XMLDocCopy
 	XMLDocCopy.Active := true;
	CFDCopy := GetComprobante(XMLDocCopy);

	with CFDCopy do
	begin.........................
de ahi para abajo todo lo de mas lo deje igual, si te fijas es exactamente el mismo codigo que se uso en la funcion
GeneraXML, solo que en ves de XMLDoc se cambio por XMLDocCopy y el CFD se cambio por CFDCopy, tambien en el
apartado de folio lo defini manual, por que alli no resive parametros ( Folio := InttoStr(1234); ).

Si me di a entender ? Suerte, Saludos !!!
jimmy_aei
Mensajes: 11
Registrado: Dom Sep 26, 2010 10:39 am

Re: Codigo Fuente de Mdo Libre en Delphi distinto a version

Mensaje por jimmy_aei »

Una pregunta, definitivamente es caso perdido en delphi 6?, yo uso esa version y me marca un error de interfaz no soportada, solo en el
momento de empezar a agregar los conceptos y no encuentro cual pueda ser la razon?

debo cambiar de version?

o ya tienen alguna solución para este error?
Avatar de Usuario
Dado
Mensajes: 15980
Registrado: Mar Jul 06, 2010 7:56 pm

Re: Codigo Fuente de Mdo Libre en Delphi distinto a version

Mensaje por Dado »

jimmy_aei escribió:Una pregunta, definitivamente es caso perdido en delphi 6?, yo uso esa version y me marca un error de interfaz no soportada, solo en el
momento de empezar a agregar los conceptos y no encuentro cual pueda ser la razon?

debo cambiar de version?

o ya tienen alguna solución para este error?
Ya hemos intentado mil formas de hacerlo funcionar en Delphi 6, parece que lo que sucede es que no esta completa la implementacion del soporte a XML.

Hay una ultima pero muy complicada solucion.

Usar las funciones "nativas" de XML como Childnodes, Node, el procedimiento Attributes etc.

Esto complica mucho la solucion, aunque es la ultima opcion para hacerlo funcionar en D6

Ahora, sin despreciar a mi querido Delphi, pero la version 6 si ya es muy antigua, es el equivalente a seguir usando Windows 98, te recomendaria de una vez ver la opcion de actualizar a Delphi 2010
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
jimmy_aei
Mensajes: 11
Registrado: Dom Sep 26, 2010 10:39 am

Re: Codigo Fuente de Mdo Libre en Delphi distinto a version

Mensaje por jimmy_aei »

Gracias, pues me estoy tratando de actualizar, con la version 2009, pero se me presenta el mismo problema que comentaban anteriormente al momento de usar el XMLDocCopy y bueno, el generarlo de nuevo soluciona el problema segun parece, pero no habrá una segunda opción?

Bueno acabo de hacer esto:
CFDCopy := GetComprobante(XMLDoc);

en lugar de usar el XMLDocCopy use el original y jalo el codigo, creen que me genere problemas mas adelante?
Avatar de Usuario
Dado
Mensajes: 15980
Registrado: Mar Jul 06, 2010 7:56 pm

Re: Codigo Fuente de Mdo Libre en Delphi distinto a version

Mensaje por Dado »

jimmy_aei escribió:Gracias, pues me estoy tratando de actualizar, con la version 2009, pero se me presenta el mismo problema que comentaban anteriormente al momento de usar el XMLDocCopy y bueno, el generarlo de nuevo soluciona el problema segun parece, pero no habrá una segunda opción?

Bueno acabo de hacer esto:
CFDCopy := GetComprobante(XMLDoc);

en lugar de usar el XMLDocCopy use el original y jalo el codigo, creen que me genere problemas mas adelante?
No debes usar el XMLDoc (el original), checa este mensaje que esta en este mismo hilo pero mas atras.
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
jimmy_aei
Mensajes: 11
Registrado: Dom Sep 26, 2010 10:39 am

Re: Codigo Fuente de Mdo Libre en Delphi distinto a version

Mensaje por jimmy_aei »

Agradezco los comentarios, regrese al codigo que inicialmente tenia, con los cambios de ansi, y resulto que ya jalo, pero la verdad no tengo la menor idea porque ya no me marco el error en la creación del XMLDocCopy.

ahora estoy ya generando algunas pruebas y de 3 solo pasaron 2 y uno me marca error del sello, y en eso estoy.

gracias.
jimmy_aei
Mensajes: 11
Registrado: Dom Sep 26, 2010 10:39 am

Re: Codigo Fuente de Mdo Libre en Delphi distinto a version

Mensaje por jimmy_aei »

sigo teniendo problemas al crear el XMLDocCopy cuando existen acentos y/o ñ. las habia eliminado y por eso no me daba problemas pero ese es el problema actualmente. alguien habra logrado encontrar una solución, estoy trabajando con Delphi 2009.

Les agradezco de antemano el apoyo
jimmy_aei
Mensajes: 11
Registrado: Dom Sep 26, 2010 10:39 am

Re: Codigo Fuente de Mdo Libre en Delphi distinto a version

Mensaje por jimmy_aei »

Tengo una pregunta con el error de los caracteres raros que aparecen al generar el XMLDocCopy y que quiero compartir, porqué en la opción de Cargar un CFD y si cargo un CFD con caracteres raros u acentos de cualquier proveedor o emisor no hay ningun problema? pero al tratar de generarlo si ?

esto es lo que actualmente me tiene dando vueltas.

saludos.
jimmy_aei
Mensajes: 11
Registrado: Dom Sep 26, 2010 10:39 am

Re: Codigo Fuente de Mdo Libre en Delphi distinto a version

Mensaje por jimmy_aei »

Pues bien, como no queria jalar yno queria hacer todo el proceso de volver a hacer en el XMLDocCopy lo que se hac antes en generaXML, pues tome esta
solucion:
var
strcad : TStringList;

XMLDOC.SaveToFile('tmpcfd.txt');
strcad := TStringList.Create;
strCad.LoadFromFile('tmpcfd.txt');
XMLDoccopy.XML.Text := strcad.Text;
XMLDocCopy.Active := true;
CFDCopy := GetComprobante(XMLDocCopy);
DeleteFile('tmpcfd.txt');

y jaló, hasta ahorita me genero bien el XML y lo subi al validar que tienes y al del SAT y todo bien.

Pero no se que opinen de esta solución.
Avatar de Usuario
Dado
Mensajes: 15980
Registrado: Mar Jul 06, 2010 7:56 pm

Re: Codigo Fuente de Mdo Libre en Delphi distinto a version

Mensaje por Dado »

jimmy_aei,

Perdon que te este dejando "hablar solo", no he podido contestar porque tengo un problema, NO TENGO Delphi 2009.

Las rutinas las hice en Delphi 7 y ahi jalan sin problema, ahora, el error no se exactamente que linea o que parte hay que modificar porque no puedo hacer pruebas.

Todos los errores en D2009 y D2010 se deben a la (nueva) forma en que Delphi maneja los string, recuerda que en esas versiones ahora se usa UNICODE y es un dolor de cabeza.

Los UNICODE usan DOS BYTES para cada caracter, en lugar de UNO como tradicionalmente se hace, el problema es que aqui le mandamos CADENAS DE UN SOLO BYTE a las rutinas de OpenSSL y tenemos que asegurarnos de hacer bien la transformacion.

Ademas esta el problema del UTF-8 que sumado con UNICODE se hace un desm....desastre.

Ya habia podido resolver el problema en D2010, varios me confirmaron que ya jalo, pense que 2009 no deberia ser muy distinto pero no es asi.

La UNICA solucion es que me consiga el D2009 y haga una version especial ahi, asi que dame chance para conseguirlo y poder ayudar.

De paso, no sabe alguien de alguna liga en Megaupload o algun otro para descargar el D2009?
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
Cerrado