Page 1 of 1
NUMERO UNICO
Posted: Tue Jul 22, 2008 7:10 pm
by moises2008
Estimados Amigos. Tengo un Problema con el correlativo de las boletas. Resulta que antes trabajabamos con correlativos independientes, pero ahora es un correlativo unico.
ALGUIEN TIENE UNA FUNCION para poder CAPTURAR DE FORMA UNICA EL NUMERO, es que que cuando alguien seleccione el numero ese numero quede tomado y nadie pueda tomar ese numero?
Agradecido desde ya.
MC
Posted: Tue Jul 22, 2008 7:42 pm
by joseluisysturiz
Te sugiero lo siguiente, ese metodo lo uso para asignar NUMEROS DE FACTURAS DE VENTAS automaticamente, explicole: crea una DBF con variables llamada (ej.) NUMBOLETA tipo N y de longitud la que necesites, esa es la esencia de todo, ahora la trabajas asi: cuando vayas a SALVAR datos de la boleta NUEVA, buscar el ultimos valor de NUMBOLETA y lo incrementas de 1 en 1, NUMBOLETA ++ y le colocas ese valor a la otra base de datos donde guardas las boletas con su numero, asi el sistema asigna automaticamente el NUMEO DE BOLETA, espero te alla entedido y sea lo que necesitas, cualquier duda o algun ejemplo puedes escribirme a mi privado, a la orden, saludos...desde Venezuela.
Gracias
Posted: Tue Jul 22, 2008 7:48 pm
by moises2008
Gracias Amigo vamos a ver que pasa.
Saludos desde Santiago de Chile
Posted: Tue Jul 22, 2008 8:04 pm
by Patricio Avalos Aguirre
Hola
Y que pasa si aborta la operacion?
Lo que yo hago es un timer que le va mostrando la factura actual, pueden estar 3 personas en el modulo de factura pero el primero que graba es el que se queda con el numero y luego actualiza los numero, eso lo hace el timer
espero haberme explicado
buedo dejo la rutina para quien le pueda servir..
Code: Select all
REDEFINE GET aGet[id_numdocu-20,1];
VAR _numdocu ;
ID id_numdocu OF oDlg UPDATE ;
COLOR CLR_BLACK, RGB(255,255,200) ;
PICTURE "9999999999" ;
VALID vDocument( aGet, oLbx, aButton, oSay, lOt, .f. ) ;
WHEN cOpcion <> "I"
DEFINE TIMER oTmr INTERVAL 5000 ACTION iif( lActive, ( lActive := .f., CheckFactura(aGet ), lActive := .t.), NIL )
ACTIVATE TIMER oTmr
Eval( oTmr:bAction )
// ----------------------------------------------------------------------------------------
static function CheckFactura(aGet )
Parame->( dbSkip(0) ) //actualizamos la base de datos que tiene la ultima factura impresa
_numdocu := Parame->Fact+1
aGet[id_numdocu-20,1]:Refresh()
return nil
// -------------------------------------------------------------------------------------------
Posted: Tue Jul 22, 2008 9:22 pm
by joseluisysturiz
Y que pasa si aborta la operacion?
...por eso se asigna el numero de factura cuando SALVE la data de la boleta.... se pueden hacer sus ajustes... a la medida.
Posted: Tue Jul 22, 2008 10:35 pm
by Rochinha
Hola
Mira mi codigo:
Code: Select all
FUNCTION PsqControle( database )
// Inicializa controle com um numero diferente do total de registros
nControle := iif( recco()=0, 1, recco()+(recco()/2) )
// Guarda a área atual do .DBf a ser controlado
OldArea := Select()
If !File("CONTROLE.DBF")
// Cria a estrutura do controlador caso ainda não exista
ESTRU_DBF := { ;
{ "DATABASE" , "C",12, 0 } , ; // Guarda o nome do DBF/ALIAS
{ "CONTADOR" , "N", 7, 0 } } // Armazena o contador
DBCREATE( "CONTROLE", ESTRU_DBF )
EndIf
If Select("CONTROLE") == 0 // Se ainda não estiver aberto, abre...
USE controle NEW
Else
DbSelectar("CONTROLE") // Se ja estiver aberto SELEciona
EndIf
// Verifica a existencia da chave( que pode ser também uma palavra )
LOCATE FOR UPPER(controle->database) = UPPER(database)
if found()
// Encontrando incrementa o contador
nControle := controle->contador + 1
RLOCK() // Usado no caso de rede
controle->contador := nControle
COMMIT
else
// Caso a chave ainda não exista será criada
APPEND BLANK
controle->database := database
controle->contador := nControle
COMMIT
endif
// Volta a área antiga
SELE (OldArea)
// Retorna o numero de controle
RETURN nControle
Usas:
Code: Select all
...
dbSelectArea( "CLIENTES" )
CLIENTES->IDCLIENTE := PsqControle( dbf() )
APPEND BLANK
...
COMMIT
...
Ou:
Code: Select all
...
dbSelectArea( "FACTURA" )
FACTURA->IDFACTURA := PsqControle( dbf() )
APPEND BLANK
...
COMMIT
...
Posted: Wed Jul 23, 2008 1:47 am
by Willi Quintana
Analizamos...
Si estas en Red, con un solo correlativo de facturas,,, mi idea es la siguiente (al menos asi me funciona sin problemas)
1ro, se "arma" los datos de la factura,
2do, luego de darle el click en el boton Imprimir,, un linea antes de que empieze la impresion de la factura, se toma el numero de la tabla correspondiente (con un Flock() )
3ro, Se incrementa en 1 el numero, y se actualiza la tabla y de hace el UnLock(),
4ro, Se imprime la factura con el numero inicialmente tomado.
5to, Si se produce un error enla impresion, simplemente se anula el documento, y se continua con el numero que sigue...
Salu2
Posted: Wed Jul 23, 2008 4:29 am
by FranciscoA
El modelo que expone Willi Quintana es el que recomiendo. Lo he usado
desde siempre y nunca me ha dado problemas.
Posted: Wed Jul 23, 2008 8:36 pm
by joseluisysturiz
Willi Quintana wrote:Analizamos...
Si estas en Red, con un solo correlativo de facturas,,, mi idea es la siguiente (al menos asi me funciona sin problemas)
1ro, se "arma" los datos de la factura,
2do, luego de darle el click en el boton Imprimir,, un linea antes de que empieze la impresion de la factura, se toma el numero de la tabla correspondiente (con un Flock() )
3ro, Se incrementa en 1 el numero, y se actualiza la tabla y de hace el UnLock(),
4ro, Se imprime la factura con el numero inicialmente tomado.
5to, Si se produce un error enla impresion, simplemente se anula el documento, y se continua con el numero que sigue...
Salu2
Willi, uso el mismo metodo que tu con la diferencia que genero siguiente correlativo del NUMERO FACTURA cuando FINALIZO la FACTURA al SALVARLA, ya que no es obligadoque emitas la factura al momento o puedes llegar a tener un problema en la impresion, por eso lo genero antes, y puedo imprimirla cuando quiera....pero creo llevamos la misma logica, esperemos le ayude al colega, este tema ya lo habiamos tocado antes pero no lo consigo, ya que fue hace tiempo, bueno por alguna aca estamos..saludos.