NUMERO UNICO

NUMERO UNICO

Postby moises2008 » Tue Jul 22, 2008 7:10 pm

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
moises2008
 
Posts: 4
Joined: Mon Jul 07, 2008 8:37 pm

Postby joseluisysturiz » Tue Jul 22, 2008 7:42 pm

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.
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Gracias

Postby moises2008 » Tue Jul 22, 2008 7:48 pm

Gracias Amigo vamos a ver que pasa.

Saludos desde Santiago de Chile
moises2008
 
Posts: 4
Joined: Mon Jul 07, 2008 8:37 pm

Postby Patricio Avalos Aguirre » Tue Jul 22, 2008 8:04 pm

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  Expand view
   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
// -------------------------------------------------------------------------------------------
Saludos
Patricio

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
User avatar
Patricio Avalos Aguirre
 
Posts: 1059
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile

Postby joseluisysturiz » Tue Jul 22, 2008 9:22 pm

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.
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Postby Rochinha » Tue Jul 22, 2008 10:35 pm

Hola

Mira mi codigo:
Code: Select all  Expand view
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  Expand view
...
dbSelectArea( "CLIENTES" )
CLIENTES->IDCLIENTE := PsqControle( dbf() )
APPEND BLANK
...
COMMIT
...


Ou:

Code: Select all  Expand view
...
dbSelectArea( "FACTURA" )
FACTURA->IDFACTURA := PsqControle( dbf() )
APPEND BLANK
...
COMMIT
...
Rochinha
 
Posts: 309
Joined: Sun Jan 08, 2006 10:09 pm
Location: Brasil - Sao Paulo

Postby Willi Quintana » Wed Jul 23, 2008 1:47 am

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
User avatar
Willi Quintana
 
Posts: 1002
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Postby FranciscoA » Wed Jul 23, 2008 4:29 am

El modelo que expone Willi Quintana es el que recomiendo. Lo he usado
desde siempre y nunca me ha dado problemas.
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Postby joseluisysturiz » Wed Jul 23, 2008 8:36 pm

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.
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 89 guests