Como se hacercan los reyes, yo también voy a hacer la carta.
Es España (y creo que en otros paises sucede algo parecido), en la banca se usa el CCC (Código Cuenta Cliente). Éste es un número de 20 cifras con 4 grupos de cifras:
4 para entidad
4 para oficina
2 para dígitos de control
10 para número de cuenta
y el formato sería: 1234.5678.90.1234567890
Es posible hacer un PICTURE para introducir datos de este tipo?
Se puede complicar aún más. También existe el IBAN que es el CCC precedido de 2 caracteres que identifican el pais.
En fin sólo era un deseo para estas Navidades.
Saludos
Carlos G.
PICTUREs personalizados
-
- Posts: 988
- Joined: Thu Nov 24, 2005 3:01 pm
- Location: Madrid, España
- Manuel Aranda
- Posts: 561
- Joined: Wed Oct 19, 2005 8:20 pm
- Location: España
Hola Carlos,
como dice Carlos Mora el PICTURE "@R 9999-9999-99-9999999999" va perfecto.
Ya puestos, te pego también un par de funciones para validarlo, por si te son de utilidad.
Un saludo,
Manuel
como dice Carlos Mora el PICTURE "@R 9999-9999-99-9999999999" va perfecto.
Ya puestos, te pego también un par de funciones para validarlo, por si te son de utilidad.
Un saludo,
Manuel
Code: Select all
REDEFINE GET oGet[18] VAR cCuenta WHEN nPago=2 VALID ValidaCuenta(cCuenta,nPago) ID 428 OF oFolder:aDialogs[2] PICTURE "@R 9999-9999-99-9999999999" FONT oFont2
*******************************************
FUNCTION VALIDACUENTA(cCuenta,nPago)
*******************************************
Local lValor:=.T.
Local cDigito
//
IF EMPTY(cCuenta) .AND. nPago = 2
MsgSTOP(OemToAnsi("El n£mero de cuenta bancaria debe tener 20 d¡gitos"),OemToAnsi(" Atenci¢n !!!"))
lValor=.F.
ENDIF
//
IF !EMPTY(cCuenta)
//
IF LEN(ALLTRIM(cCuenta)) < 20
MsgSTOP(OemToAnsi("El n£mero de cuenta bancaria debe tener 20 d¡gitos"),OemToAnsi(" Atenci¢n !!!"))
lValor=.F.
ELSE
//
cDigito=DigBanco(SUBSTR(cCuenta,1,8),SUBSTR(cCuenta,11,10))
//
IF cDigito <> SUBSTR(cCuenta,9,2)
MsgSTOP(OemToAnsi("El n£mero de cuenta bancaria es incorrecto"),OemToAnsi(" Atenci¢n !!!"))
lValor=.F.
ENDIF
//
ENDIF
//
ENDIF
//
RETURN lValor
*************************************************************************
FUNCTION Digbanco(cRefer1,cRefer2)
*************************************************************************
LOCAL nDigitos := 10
LOCAL aDigito := ARRAY( nDigitos )
LOCAL aPeso := { 1, 2, 4, 8, 5, 10, 9, 7, 3, 6 }
LOCAL nSuma := 0
LOCAL nCont
LOCAL nModulo
LOCAL nResto
LOCAL cDigito1
LOCAL cDigito2
cRefer1 := STRTRAN(cRefer1,'-')
cRefer1 := STRTRAN(cRefer1,'.')
cRefer1 := STRTRAN(cRefer1,'/')
cRefer1 := STRTRAN(cRefer1,' ')
cRefer1 := RIGHT(cRefer1,nDigitos)
cRefer1 := PADL(cRefer1,nDigitos,'0')
cRefer2 := STRTRAN(cRefer2,'-')
cRefer2 := STRTRAN(cRefer2,'.')
cRefer2 := STRTRAN(cRefer2,'/')
cRefer2 := STRTRAN(cRefer2,' ')
cRefer2 := RIGHT(cRefer2,nDigitos)
cRefer2 := PADL(cRefer2,nDigitos,'0')
FOR nCont := 1 to nDigitos
aDigito[ nCont ] := VAL( SUBSTR( cRefer1, nCont, 1 ) )
nSuma += ( aDigito[ nCont ] * aPeso[ nCont ] )
NEXT
nModulo := 11 - INT( nSuma % 11 )
nResto := IF( nModulo == 10, 1, IF( nModulo == 11, 0, nModulo ) )
cDigito1 := LTRIM(STR(nResto))
nSuma := 0
FOR nCont := 1 to nDigitos
aDigito[ nCont ] := VAL( SUBSTR( cRefer2, nCont, 1 ) )
nSuma += ( aDigito[ nCont ] * aPeso[ nCont ] )
NEXT
nModulo := 11 - INT( nSuma % 11 )
nResto := IF( nModulo == 10, 1, IF( nModulo == 11, 0, nModulo ) )
cDigito2 := LTRIM(STR(nResto))
RETURN(cDigito1+cDigito2)
-
- Posts: 988
- Joined: Thu Nov 24, 2005 3:01 pm
- Location: Madrid, España