PICTUREs personalizados

PICTUREs personalizados

Postby FiveWiDi » Mon Nov 19, 2007 5:52 pm

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.
FiveWiDi
 
Posts: 1139
Joined: Mon Oct 10, 2005 2:38 pm

Postby Carlos Mora » Mon Nov 19, 2007 6:32 pm

Hola Carlos,

No te sirve el picture '@R 9999-9999-99-9999999999' ?
Digamos que estaría bien si conaras que tienes editar, que quieres obtener, el formato en que esta la variable, etc.

Saludos
Carlos Mora
 
Posts: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Postby Manuel Aranda » Mon Nov 19, 2007 8:32 pm

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

Code: Select all  Expand view
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)
User avatar
Manuel Aranda
 
Posts: 604
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Postby Carlos Mora » Mon Nov 19, 2007 9:28 pm

Ya mismo hago un cut & paste y guardo en la libreria de recortes. No lo necesito YA, pero seguro que en breve me va a hacer falta.

¡Gracias por la perla!

Carlos Mora
Carlos Mora
 
Posts: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Postby FiveWiDi » Mon Nov 19, 2007 11:04 pm

Gracias a ambos,

de momento haré lo mismo que dice Carlos.

Lo guardo y a ver cuando lo implanto.

Gracias de nuevo.
Carlos G.
FiveWiDi
 
Posts: 1139
Joined: Mon Oct 10, 2005 2:38 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: gmart1, Google [Bot] and 61 guests