
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
-
- Mensajes: 52
- Registrado: Mié Dic 01, 2010 7:59 pm
Re: Libreria que convierte un texto a Factura Electronica
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..
- Dado
- Mensajes: 15980
- Registrado: Mar Jul 06, 2010 7:56 pm
Re: Libreria que convierte un texto a Factura Electronica
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.
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.
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
- Dado
- Mensajes: 15980
- Registrado: Mar Jul 06, 2010 7:56 pm
Re: Libreria que convierte un texto a Factura Electronica
Ah! es que no especificas bien tu duda, hasta ahorita pusiste "conceptos", quiero entender entonces que no sabes que concepto usar?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..
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 !!
-
- Mensajes: 12
- Registrado: Jue Dic 09, 2010 6:41 pm
Re: Libreria que convierte un texto a Factura Electronica
Resultado de las Pruebas:dado escribió:@metraje
- Agregar una funcion que regrese la version de la libreria
- Agregar procedimientos y funciones para probar la interface a otros lenguajes
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
- Dado
- Mensajes: 15980
- Registrado: Mar Jul 06, 2010 7:56 pm
Re: Libreria que convierte un texto a Factura Electronica
La funcion CFDLibVersion devuelve una cadena, no un numero.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()
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
Deja termino algunos pendientes por aqui y preparo algo para esas pruebas.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.
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ó: 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.
Te comentaba, uso solo "alias" para esos tipos genericos, el PChar es un null-terminated string y el TError es un bytemetraje 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.
Esta en Delphi version 7 de 32 bits.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
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 !!
-
- Mensajes: 12
- Registrado: Jue Dic 09, 2010 6:41 pm
Re: Libreria que convierte un texto a Factura Electronica
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 ?
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 ?
- Dado
- Mensajes: 15980
- Registrado: Mar Jul 06, 2010 7:56 pm
Re: Libreria que convierte un texto a Factura Electronica
Las definiciones son como se muestra en el post No. 1metraje 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 ?
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 !!
-
- Mensajes: 12
- Registrado: Jue Dic 09, 2010 6:41 pm
Re: Libreria que convierte un texto a Factura Electronica
Te agradezco mucho tu apoyo al respecto, solo que antes de que te quemes las pestañas, quisiera agotar todas las posibilidades.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?
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.
- Dado
- Mensajes: 15980
- Registrado: Mar Jul 06, 2010 7:56 pm
Re: Libreria que convierte un texto a Factura Electronica
Pues no' mas no pude con el Activex, es mas complejo de lo que pensaba, necesitaria dedicarle mucho mas tiempometraje escribió:Te agradezco mucho tu apoyo al respecto, solo que antes de que te quemes las pestañas, quisiera agotar todas las posibilidades.
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 !!
-
- Mensajes: 12
- Registrado: Jue Dic 09, 2010 6:41 pm
Agregar Seguridad a Libreria
Ya no me comentaste algo al respecto de agregarle esta funcionalidad. ¿?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.