by mic_vc » Mon Jul 09, 2007 4:21 pm
Estas dos funciones me han quitado ese problema en mis aplicaciones en red:
GetNewFolio() -> lo usas para mostrarle al usuario que folio se va a imprimir, si abres al mismo tiempo un dialogo en pantalla con los datos de la factura en 3 máquinas diferentes va aparecerá el mismo número
nFolio:=GetNewFolio(cRed+"\folios.dbf", "FOLIO")
REDEFINE SAY oSay PROMPT nFolio ID 101 OF oDlg
PutNewFolio() -> Lo usas cuando el usuario manda a imprimir, esta función va a escoger el folio que este disponible
nFolio:=PutNewFolio(cRed+"\folios.dbf", "FOLIO")
oSay:settext(nFolio)
De modo que si las llamadas no son en gran cantidad, en una sola base de datos puedes guardar varios folios
[FOLIOS.DBF]
BOLETA, N, 10, 0
NOTA, N, 10, 0
PRENDA, N, 10, 0
VEHICULO, N, 10, 0
FACTURA, N, 10, 0
/************************************************************************************/
/* Devuelve el próximo número de folio
/************************************************************************************/
function GetNewFolio(cDbf, cField)
Local nFolio:= 0, cAlias:=alias()
if file(cDbf)
dbusearea(.t.,, cDbf, "FOL", .t.)
If NetErr(); msgalert("Error al intentar abrir: "+CRLF+cDbf, "Abortando!"); return(nil); endif
FOL->( nFolio:= &(cField) + 1, dbclosearea() )
if( !empty(cAlias), dbselectarea(cAlias), )
else
msgstop("No se encontró la base de datos:"+CRLF+cDbf, "Abortando!")
endif
return(nFolio)
/************************************************************************************/
/* Aumenta el número de folio y lo devuelve
/************************************************************************************/
function PutNewFolio(cDbf, cField, nFolio)
Local lOk:=.t., cAlias:=alias()
if file(cDbf)
dbusearea(.t.,, cDbf, "FOL", .t.)
If NetErr(); msgalert("Error al intentar abrir: "+CRLF+cDbf, "Abortando!"); return(nil); endif
FOL->( if( lastrec() = 0, dbappend(), ) )
do
FOL->( if( flock(),;
( if( nFolio = NIL, nFolio := &(cField) + 1, ),;
dbfield(cField, nFolio), lOk:=.t. ),;
( lOk:=.f. ) ) )
until lOk
FOL->( dbcommit(), dbunlock(), dbclosearea() )
if( !empty(cAlias), dbselectarea(cAlias), )
else
msgstop("No se encontró la base de datos:"+CRLF+cDbf, "Abortando!")
endif
return(nFolio)
Saludos
Michel Carvajal
El poder del hombre es ilimitado cuando ha vencido la pereza, cuando confía en el feliz resultado de lo que quiere con todas sus fuerzas, cuando sabe que es capaz de conseguirlo, cuando reconoce que al tropezar siempre adelanta dos pasos.