![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Ese código es en T-SQL de Microsoft SQL Server, por lo que no va a funcionar directamente en Firebird, pero es bastante sencillo traducirlo al Transact SQL estandarizado de Firebird.
Si tienes algún problema o duda sobre como tratar alguna sentencia concreta, no dudes en preguntar. Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
|
#2
|
||||
|
||||
|
Hola guillotmarc.
Me había dado cuenta que no era código de Firebird, aunque no sabía que era de SQL Sever. Sin embargo no tengo idea si, una vez traducido, funcionará la lógica en sí del algorítmo. Lamentablemente va a tener que hacer la traducción y prueba para verificarlo, espero que no le sea una tarea estéril... Un saludo.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
|
#3
|
|||
|
|||
|
Cita:
donde dice: -INICIALZA VARIABLES SET NOMBRES = LTRIM(RTRIM(:NOMBRES_AUX)) SET APATERNO = LTRIM(RTRIM(:APATERNO_AUX)) SET AMATERNO = LTRIM(RTRIM(:AMATERNO_AUX)) SET T_NOMTOT =APATERNO+' '+AMATERNO+' '+NOMBRES esto si se puede asi en firebird, le e quitado los @ y hay otra palabra patindex no se a que se refiere.. SET NOMBRE1_LONGITUD = PATINDEX('% %',NOMBRES) |
|
#4
|
||||
|
||||
|
Vaya, pensaba que en Firebird solo concatenaba el operador ||, y que por tanto esa línea había que traducirla como :
T_NOMTOT = APATERNO || ' ' || AMATERNO || ' ' || NOMBRES Pero si dices que te funciona bien, entonces adelante. Cita:
http://msdn.microsoft.com/en-us/library/ms188395.aspx Deberías poder sustituirlo por : NOMBRE1_LONGITUD = position(' ', NOMBRES) La función POSITION se añadió en Firebird 2.1. Por lo tanto necesitas usar Firebird 2.1 o 2.5, para que esta línea funcione correctamente. Si usas una versión anterior de Firebird, entonces debes buscar una UDF que te brinde esta función (o similar), o bien, escribir un bucle recorriendo NOMBRES, para localizar donde está la primera cadena en blanco. Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
|
#5
|
|||
|
|||
|
hola que tal he intentado convertir el codio pero no mas no, me vota muchos errores de sintaxis....
me he topado con esto, de un funcion pero me marca error http://www.delphiaccess.com/forum/utilerias-22/udf-firebirdinterbase-(lazarus)/ error invalid request BLR at offset 79 function GENRFC is not defined module name or entrypoint could not be found |
|
#6
|
|||
|
|||
|
Nomas no veo por donde...
|
|
#7
|
|||
|
|||
|
especificamente estos son los errores que arroja.
Última edición por amerika111 fecha: 12-04-2012 a las 20:12:20. |
|
#8
|
||||
|
||||
|
Bueno, el primer error es que no encuentra la función POSITION.
Como te dije en el mensaje anterior, esta función solo está disponible en Firebird 2.1 o 2.5. Si utlizas Firebird 1.5 o 2.0, tendrías que actualizarte a una versión más moderna, o bien, utilizar una UDF que haga la misma acción (o bien sustituirlo por un bucle para localizar esa posición del primer espacio en blanco). Recuerda también que POSITION no es exactamente igual al PATINDEX de SQL Server, puesto que esta última función trabaja con expresiones regulares, y la función de Firebird no. Por eso la forma correcta de utilizarla es POSISTION(' ', variable) y no POSITION('% %', variable). Lo mejor es corregir los errores uno a uno (puesto que muchas veces algunos errores posteriores son causa del primero). Arregla primero esto, y ya nos contarás.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). Última edición por guillotmarc fecha: 10-08-2011 a las 11:03:45. |
|
#9
|
|||
|
|||
|
Cita:
yo la he probado pero no me funciona no se si tenga que realizar un paso o algo asi para que funcione, este es el dll de la funcion DECLARE EXTERNAL FUNCTION GENRFC CSTRING(30), CSTRING(30), CSTRING(30), DATE RETURNS CSTRING(15) ENTRY_POINT 'GeneraRFC' MODULE_NAME 'Project1.dll'; y la libreria es project1.dll esa la coloque en la carpeta de firebird de udf.. |
|
#10
|
||||
|
||||
|
Hola.
Cita:
Ejplo. Esta sentencia : NOMBRE1_LONGITUD = position(' ', NOMBRES); Equivale a este bucle :
Finalmente, respecto a generar toda la función RFC en Delphi y utilizarla en Firebird mediante una UDF, te dejo un ejemplo de como hacer la DLL en Delphi para que pueda ser utilizada en Firebird. http://www.firebirdfaq.org/faq83/ Traducción automática de Google Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
|
#11
|
|||
|
|||
|
Amerika111:
Ofrezco mi humilde ayuda para codificar dicho procedimiento almacenado, siempre y cuando me hagas llegar el proceso por escrito (lo mas explicito que se pueda, así como también algunos casos típicos para ver que todo funciona correctamente), no quiero estar viendo el código en otros lenguajes y hacer suposiciones que no siempre resultan ciertas, ¿me explico?. Espero tu respuesta. Saludos, Gerardo Suárez Trejo |
|
#12
|
||||
|
||||
|
Cita:
El RFC es un identificador alfanumérico que se asigna en México a cada persona y se basa en los apellidos, nombre y fecha de nacimiento. Para fijar ideas, vamos a tomar esta persona ficticia: Apellido paterno: Del Real Apellido Materno: Anzures Nombre: José Antonio Fecha de nacimiento: 14 de abril de 1972 Su RFC será: Código:
REAA 720414 N9 4 Veamos por partes, como se calcula cada una: Letras Esta parte se forma con:
Ahora bien, deben tomarse en cuenta estas excepciones:
Aquí hay que notar, que estas reglas no son absolutas ni completas (pero son las oficiales). Por ejemplo, no indican qué hacer en caso de que el apellido paterno no contenga vocales internas, como ALBY, BYRD, ORMSBY. En alguna ocasión tuve la oportunidad de analizar los RFC de una base de datos relativamente amplia y observé que la excepción 4 en realidad es así: Primera letra y primera vocal interna del apellido y primera y segunda letra del nombre. En resumen, parece que en los casos de excepción, muchas veces depende del criterio del funcionario en turno que asigne el RFC oficial. Fecha En formato de seis diígitos: aammdd Homonimia
Dígito verificador
Algunas observaciones Como dije antes, el algoritmo en la parte de las letras es confuso. Al implementar hay que decidir qué hacer en los casos especiales (por ejemplo, poner una X en caso de no haber vocal interna del apellido paterno). Por otra parte, todas las letras de los nombres deben considerarse sin acentos de ningún tipo. Este algoritmo es únicamente para personas físicas (seres humanos) y no para personas morales (empresas). Desconozco si hay un documento oficial de Hacienda que describa el algoritmo, pero existe un documento oficial (en el cual yo me basé) en el IFAI (Instituto Federal de Acceso a la Información). Este documento pueden localizarlo entrando al sitio de INFOMEX buscando el folio: 0610100135506, que corresponde a la solicitud que alguien hizo para obtener esta información. Ahí pueden ver el documento de respuesta. Este documento también describe el algoritmo del RFC para personas morales. // Saludos Última edición por roman fecha: 12-08-2011 a las 07:25:23. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| condicionar un procedimiento dentro de otro procedimiento | yossi | Varios | 7 | 17-05-2010 11:47:14 |
| Ayuda, como llamar a un procedimiento desde otro procedimiento? | Ariatna | Varios | 1 | 01-02-2005 05:05:35 |
| error calculo en udf | marrullas | Firebird e Interbase | 0 | 02-11-2004 22:01:58 |
| Calculo con un String | AMC | Varios | 7 | 14-09-2004 21:46:53 |
| Calculo De Totales | PETERKANTROPUS | Tablas planas | 2 | 25-05-2004 04:06:14 |
|