Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como generar un numero entero a partir de una mascarilla dad (https://www.clubdelphi.com/foros/showthread.php?t=46129)

AzidRain 25-07-2007 00:17:20

Como generar un numero entero a partir de una mascarilla dad
 
Estoy haciendo un progama contable. NEcesito un tedit que permita la captura de las cuentas bajo una cierta mascarilla. Eso ya lo resolvi con un componente que tengo y me quedo asi:

Primero defino la mascarilla por default digamos: 000-0000-0000
Es decir, tres niveles de 3, 4 y 4 digitos respectivamente.

El TEdit lo ajusté para que me permita capturar sin necesidad de ponerle los ceros, por ejemplo:

en lugar de 001-0001-0001, basta capturar 1-1-1.

Ahora bien, digamos que se capturo lo del ejemplo anterior, la tabla almacena los numeros de cuenta como numeros enteros de manera que 1-1-1 en realidad se almacena como 100010001 (como la mascarilla pero sin los guiones y obviamente las cuentas de primer nivel no necesitan los ceros).

Almaceno las cuentas como numeros porque al momento de hacer ordenaciones me van a quedar en el orden correcto si lo guardo como cadenas el orden no siempre sera el mismo ademas de que es mas trabajo hacer aritmética con ellos.

Habrá alguna función o componente que haga lo que necesito: pasar 1-1-1 a 100010001?

Tengo ya un algoritmo para hacerlo pero quisiera ahorrarme el trabajo y/o el enfado de tardarme unas horas mas en terminar y justo entonces darme cuenta que ya habia algo y mucho mejor.

droguerman 25-07-2007 00:48:12

alguna vez leí en el libro de Marco Cantu que usar componentes es recomendable siempre y cuando vayas a usarlo por lo menos unas 6 veces, sino solo haces crecer tu programa, así que te recomiendo el algoritmo que tampoco parece muy complicado de hacer.

respecto a almacenarlo el orden varia por el tipo de intercalación al menos así sucede en gestores como SQL Server y FoxPro imagino que en otros del nivel de complejidad sucede lo mismo.

BlueSteel 25-07-2007 01:14:10

Hola AzidRain

no entiendo esto.. si dices que
Cita:

Empezado por AzidRain
en lugar de 001-0001-0001, basta capturar 1-1-1.

por que te almacena esto ??
Cita:

Empezado por AzidRain
Habrá alguna función o componente que haga lo que necesito: pasar 1-1-1 a 100010001?

no tendira que ser pasar 1-1-1 a 001001001...???

Ahora.. se supone que cuando almacenas numeros, estos no te toman los ceros que estan a la izquierda... por lo cual, para almacenar 1-1-1, esto quedaria como 1001001...

te iba a dar una solución para poner ceros a la izquieda, pero despues me acorde que lo quieres trabajar como numeros, por lo cual no te serviría.. ya que tendrias que trabajar todo como texto....

no se si exista algun componente que te lo permita.. o alguna función ... de lo contrario tendrias que meter mano y empezar a realizar tu propio codigo para codificar / decodificar tu sistema de numeración...

tambien puedes revisar este hilo http://www.clubdelphi.com/foros/show...eros+izquierda

o esta busqueda http://www.clubdelphi.com/foros/sear...earchid=759599

AzidRain 25-07-2007 01:47:46

Bueno en parte es correcta la apreciación. Digamos que los primeros ceros de la mascarilla son solo para efectos de mostrar el numero, en realidad como sabemos a la izquierda no se almacenan de manera que:

001-234-123 se guarda como 1234123
013-001-233 se guarda como 13001233

si analizamos vemos que el primer nivel de cuenta (los primeros 3 digitos de la mascarilla) no importa si tienen ceros o no antes, sin embargo del segundo nivel para abajo los ceros si se pueden guardar en un entero.

Me complico mucho porque bastaria ponerle esa mascarilla a un maskedit y solucionado pero pensando en todos los casos supon una contabilidad con 3 niveles y muchos digitos:

0000-00000-00000

Tendrias que escribir 0001-00001-00001 para acceder a la cuenta 1, subcuenta 1, sub-subcuenta1. Y además ponerle el guión.
Lo que propongo a mis usuarios es escribir solamente 1-1-1 y el programa internamente lo convierte en 0001-00001-00001 para mostrarlo correctamente y además lo guarda como un entero que en este caso seria: 10000100001

AzidRain 25-07-2007 01:53:48

Me contesto solo: hice unas pruebas usando mejor un string como identificador de la cuenta y al parecer si se respeta el orden en las tablas...por loq ue mejor me quito de cosas y manejo el id de cada cuenta como una cadena que siempre llevará el mismo formato. Eso ya lo tengo hecho.


La franja horaria es GMT +2. Ahora son las 16:40:34.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi