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


.

Libreria dll para crear y timbrar facturas electronicas

Para los que programamos en Delphi, aqui estan las respuestas
[[ FORO CERRADO DEBIDO A QUE YA LA INFORMACION YA NO ES VIGENTE ]]
diazantonio7
Mensajes: 52
Registrado: Mié Dic 01, 2010 7:59 pm

Re: Libreria que convierte un texto a Factura Electronica

Mensaje por diazantonio7 »

Si leí, mi duda iba más bien considerando los conceptos, en el sentido de que no es lo mismo una devolución que un descuento por pronto pago, sigo buscando.. Saludos..
Avatar de Usuario
Dado
Mensajes: 15981
Registrado: Mar Jul 06, 2010 7:56 pm

Re: Libreria que convierte un texto a Factura Electronica

Mensaje por Dado »

Listo, ya en el primer post de este hilo esta una nueva version de la libreria.

Se hicieron los siguientes cambios :

- Soporte para insertar el nodo aduana en los conceptos (revisen el archivo ini para ver los nuevos tags)
- Posibilidad de agregar un segundo IVATrasladado para las facturas que manejan dos tasas de iva (0% y 16% por ejemplo) (revisen el ini para ver los nuevos tags)
- Se programo una funcion y un procedimiento nuevo para ayudar en las pruebas de conexion al DLL

function CFDLibVersion : PChar;
Esta funcion no toma ningun parametro y devuelve una cadena con el numero de la version

procedure PruebaSimple;
Este procedimiento es el mas simple que se me pudo ocurrir, no toma ningun parametro ni tampoco devuelve nada, lo que hace es mostrar una ventana como la que se muestra, la intencion es que traten de llamar desde su lenguaje a este procedimiento, si logran que aparezca la ventana entonces pueden empezar a hacer pruebas de llamado con las otras funciones que si requieren parametros.

prueba.jpg
prueba.jpg (33.02 KiB) Visto 11200 veces
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
Avatar de Usuario
Dado
Mensajes: 15981
Registrado: Mar Jul 06, 2010 7:56 pm

Re: Libreria que convierte un texto a Factura Electronica

Mensaje por Dado »

diazantonio7 escribió:Si leí, mi duda iba más bien considerando los conceptos, en el sentido de que no es lo mismo una devolución que un descuento por pronto pago, sigo buscando.. Saludos..
Ah! es que no especificas bien tu duda, hasta ahorita pusiste "conceptos", quiero entender entonces que no sabes que concepto usar?

Algo que siempre les comento a los que desarrollan factura electronica :

La factura electronica se "llena", se usa, se cancela, se administra IGUAL que una factura de papel, es decir, que pones en una nota de credito "en papel"? bueno pues lo mismo debe llevar la electronica.

Espero que ahora si haya entendido tu duda, te incluyo de todos modos un ejemplo de una devolucion en Office Depot, es un comprobante de egreso de ahi puedes ver mas o menos como esta formada.
Adjuntos
Devolucion OfficeDepot .xml
(4.17 KiB) Descargado 410 veces
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
metraje
Mensajes: 12
Registrado: Jue Dic 09, 2010 6:41 pm

Re: Libreria que convierte un texto a Factura Electronica

Mensaje por metraje »

dado escribió:@metraje
- Agregar una funcion que regrese la version de la libreria
- Agregar procedimientos y funciones para probar la interface a otros lenguajes
Resultado de las Pruebas:
a) Llamada a PruebaSimple() - OK presenta la ventana correspondiente sin problemas.
b) Llamada a CFDLibVersion() - Devuelve valor 45896104
de hecho en Powerbuilder no tengo los tipos de dato: Pchar
ni el tipo "TError " devuelto por GeneraCFD()
c) Podrias hacer otras funciones de prueba? Una que se le pase un paremetro numerico y otra se le pase un parametro string y mostrarlos en una ventana si devolver valores.
d) Como la llamada a un Procedimiento no tiene problema, podrias dar la opcion en la funcion de GeneraCFD() que tome el password del .ini y lea el archivo por default generacfd.ini , así solo tendría que crear el archivo .ini desde powerbuilder con el mismo nombre y mandar llamar el procedimiento.

Podrias utilizar tipos de variables mas genericas para cualquier lenguaje, el los paremetros y en valores regresados ?
Especificamente usar mejor solo tipos: string, long, int, double y decimal ?
Esto evitaria problemas de conversion de tipos de datos para diferentes lenguajes.

Sí me podrias decir en lenguaje y version exacta esta desarrollada la libreria ?
compilador, linker, lenguaje, etc. y el metodo que usar para crear la libreria, asi sabría que tan compatible es con powerbuilder.

Saludos
Avatar de Usuario
Dado
Mensajes: 15981
Registrado: Mar Jul 06, 2010 7:56 pm

Re: Libreria que convierte un texto a Factura Electronica

Mensaje por Dado »

metraje escribió: b) Llamada a CFDLibVersion() - Devuelve valor 45896104
de hecho en Powerbuilder no tengo los tipos de dato: Pchar
ni el tipo "TError " devuelto por GeneraCFD()
La funcion CFDLibVersion devuelve una cadena, no un numero.
El tipo de dato PChar es un string terminado con un caracter #0, o dicho de otra forma es un "null terminated string" que es el estandar para (casi) todos los lenguajes. El TError es solo un "alias" para un tipo byte
metraje escribió: c) Podrias hacer otras funciones de prueba? Una que se le pase un paremetro numerico y otra se le pase un parametro string y mostrarlos en una ventana si devolver valores.
Deja termino algunos pendientes por aqui y preparo algo para esas pruebas.
metraje escribió: d) Como la llamada a un Procedimiento no tiene problema, podrias dar la opcion en la funcion de GeneraCFD() que tome el password del .ini y lea el archivo por default generacfd.ini , así solo tendría que crear el archivo .ini desde powerbuilder con el mismo nombre y mandar llamar el procedimiento.
No creo que sea conveniente, hay un problema de seguridad muy arriesgado en escribir la clave de llave privada en el *.ini. Creo que conviene hacer la propuesta que haces, un procedimiento de prueba que reciba una cadena y un numero.
metraje escribió: Podrias utilizar tipos de variables mas genericas para cualquier lenguaje, el los paremetros y en valores regresados ?
Especificamente usar mejor solo tipos: string, long, int, double y decimal ?
Esto evitaria problemas de conversion de tipos de datos para diferentes lenguajes.
Te comentaba, uso solo "alias" para esos tipos genericos, el PChar es un null-terminated string y el TError es un byte
metraje escribió: Sí me podrias decir en lenguaje y version exacta esta desarrollada la libreria ?
compilador, linker, lenguaje, etc. y el metodo que usar para crear la libreria, asi sabría que tan compatible es con powerbuilder.
Saludos
Esta en Delphi version 7 de 32 bits.

Me regrese a ver tus mensajes y ESTAS DEFINIENDO MAL EL GENERACFD.

lo estas definiendo como

Function string GeneraCFD(string IniFileName , string ClaveLlavePrivada ) Library "cfdlib.dll"

pero debes definirlo asi:

Function byte GeneraCFD(string IniFileName , string ClaveLlavePrivada ) Library "cfdlib.dll"

Te insisto, el TError es un byte

Y si se genera bien el CFD entonces GetError y GetError devuelven "" (nada) indicando precisamente que no hay error. Talvez eso sea todo lo que te este haciendo falta !!!
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
metraje
Mensajes: 12
Registrado: Jue Dic 09, 2010 6:41 pm

Re: Libreria que convierte un texto a Factura Electronica

Mensaje por metraje »

Tal parece que el problema esta en el paso de los valores entre PBuilder y la DLL tanto en paremetros como en valor devuelto de una funcion.
Al definir como long GenereCDF() devuelve 66952193 y los valores de GetError() y GetErrorExt() devuelven un string no visible que me supongo
que es por el tipo de Encoding : Cual estas usando en delphi ? ANSI , EncodingUTF8 , EncodingUTF16LE ó EncodingUTF16BE

Podrias copia aqui el codigo de como estan definidas cada funcion en delphi ?
Avatar de Usuario
Dado
Mensajes: 15981
Registrado: Mar Jul 06, 2010 7:56 pm

Re: Libreria que convierte un texto a Factura Electronica

Mensaje por Dado »

metraje escribió:Tal parece que el problema esta en el paso de los valores entre PBuilder y la DLL tanto en paremetros como en valor devuelto de una funcion.
Al definir como long GenereCDF() devuelve 66952193 y los valores de GetError() y GetErrorExt() devuelven un string no visible que me supongo
que es por el tipo de Encoding : Cual estas usando en delphi ? ANSI , EncodingUTF8 , EncodingUTF16LE ó EncodingUTF16BE

Podrias copia aqui el codigo de como estan definidas cada funcion en delphi ?
Las definiciones son como se muestra en el post No. 1

Pero creo que no estamos avanzando, mira, en la tarde estuve estudiando como hacer un OCX en Delphi, te adelanto que no es para nada facil aunque hay un "wizard" que me puede ayudar. Vamos a hacer esto, deja me desvelo intentando convertirlo a OCX y mañana si consigo algo te aviso para que me ayudes a probarlo. Te parece?
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
metraje
Mensajes: 12
Registrado: Jue Dic 09, 2010 6:41 pm

Re: Libreria que convierte un texto a Factura Electronica

Mensaje por metraje »

dado escribió:En la tarde estuve estudiando como hacer un OCX en Delphi, te adelanto que no es para nada facil aunque hay un "wizard" que me puede ayudar. Vamos a hacer esto, deja me desvelo intentando convertirlo a OCX y mañana si consigo algo te aviso para que me ayudes a probarlo. Te parece?
Te agradezco mucho tu apoyo al respecto, solo que antes de que te quemes las pestañas, quisiera agotar todas las posibilidades.

Sobre la pregunta de arriba de como defines tu las funciones en delphi, me refería a como creas las funciones en el codigo fuente
de la libreria cfdlib.dll pues quería saber si estas usando al final de cada función ;export;stdcall;

Tendras una lista completa de los codigos de error que devuelve TError ? no la ubico donde comentas en otro post.

Estaré instalando delphi7 en mi compu para crear una dll con algunas funciones simples y hacer pruebas con
diferentes tipos de variables.

Aprovechando comentarte la posibilidad que le agregues a la libreria un poco de seguridad de copiado,
es decir, al habilitar mi aplicación con un cliente, existen cierto personal de sistemas muy curiosos y
se copiaran la dll de la libreria sin miramientos para usarla ellos mismos, y pues como yo pague
por ella, lo correcto que tambien ellos paguen. Asi que te propongo lo siguiente:

Agregar un parametro mas al archivo .ini
licencia=fbc71ce36cc20790f2eeed2197898e71

El valor de licencia es un MD5 de la clave del comprador de la dll (en este ejemplo el MD5 de "clave")

Agregar el parametro opcional "ClaveDistribuidor" a la funcion de GeneraCFD
function GeneraCFD(IniFileName, ClaveLlavePrivada, ClaveDistribuidor : string) : TError;

De tal forma que cuando no se especifica la ClaveDistribuidor en el llamado a la funcion (o no esta el parámetro "distribuidor" en el ini), se ejecutará
en modo demo (usando el RFC y empresa DEMO), por el contrario, sí se agrega el parámetro de la clavedistribuidor (antes de hacerle MD5)
y dentro de la librería lees el parámetro "licencia" del archivo .ini debe coincidir con el MD5(clavedistribuidor) y entonces se liberará la librería en
modo de producción. ¿ como ves ? Tal vez para algunos lenguajes web no tendria mucho caso pues el codigo fuente esta en el servidor y se vería
la clavedistribuidor, pero ne los lenguajes compilados sería al menos un poco mas complicado que se copiaran la dll.
Avatar de Usuario
Dado
Mensajes: 15981
Registrado: Mar Jul 06, 2010 7:56 pm

Re: Libreria que convierte un texto a Factura Electronica

Mensaje por Dado »

metraje escribió:Te agradezco mucho tu apoyo al respecto, solo que antes de que te quemes las pestañas, quisiera agotar todas las posibilidades.
Pues no' mas no pude con el Activex, es mas complejo de lo que pensaba, necesitaria dedicarle mucho mas tiempo

Acerca de lo que me pides de "como defini en Delphi...." en la descarga hay una carpeta que se llama Ejemplo-Delphi, ahi viene TODO el codigo fuente del ejemplo ejecutable, checa especialmente el archivo CFDLibHeader.pas, por cierto tambien esta el codigo fuente en Visual Basic, en la descarga viene mucha mas informacion que la que esta aqui.

Pero antes.....prepare un DLL de Prueba con todas las combinaciones para que hagas pruebas. Nota importante, este DLL NO TIENE NADA de factura electronica, es otro proyecto totalmente distinto, es solo para probar el envio de datos en su diferentes sabores (string, integer, real, etc).

Incluyo TODO el codigo fuente tanto del DLL como del ejemplo de prueba. Revisalo para ver si te sirve.
Adjuntos
DLL Test.zip
(404.98 KiB) Descargado 440 veces
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
metraje
Mensajes: 12
Registrado: Jue Dic 09, 2010 6:41 pm

Agregar Seguridad a Libreria

Mensaje por metraje »

metraje escribió: Aprovechando comentarte la posibilidad que le agregues a la libreria un poco de seguridad de copiado,
es decir, al habilitar mi aplicación con un cliente, existen cierto personal de sistemas muy curiosos y
se copiaran la dll de la libreria sin miramientos para usarla ellos mismos, y pues como yo pague
por ella, lo correcto que tambien ellos paguen. Asi que te propongo lo siguiente:

Agregar un parametro mas al archivo .ini
licencia=fbc71ce36cc20790f2eeed2197898e71

El valor de licencia es un MD5 de la clave del comprador de la dll (en este ejemplo el MD5 de "clave")

Agregar el parametro opcional "ClaveDistribuidor" a la funcion de GeneraCFD
function GeneraCFD(IniFileName, ClaveLlavePrivada, ClaveDistribuidor : string) : TError;

De tal forma que cuando no se especifica la ClaveDistribuidor en el llamado a la funcion (o no esta el parámetro "distribuidor" en el ini), se ejecutará
en modo demo (usando el RFC y empresa DEMO), por el contrario, sí se agrega el parámetro de la clavedistribuidor (antes de hacerle MD5)
y dentro de la librería lees el parámetro "licencia" del archivo .ini debe coincidir con el MD5(clavedistribuidor) y entonces se liberará la librería en
modo de producción. ¿ como ves ? Tal vez para algunos lenguajes web no tendria mucho caso pues el codigo fuente esta en el servidor y se vería
la clavedistribuidor, pero ne los lenguajes compilados sería al menos un poco mas complicado que se copiaran la dll.
Ya no me comentaste algo al respecto de agregarle esta funcionalidad. ¿?
Cerrado