FoxPro/Visual FoxPro - problemas en red

   
Vista:

problemas en red

Publicado por alberto (399 intervenciones) el 05/03/2008 17:58:18
que tal amigos otra vez yo, estuve haciendo pruebas con sus consejos para que no se duplique el nro de factura en una red cdo 2 usuarios cargan una factura pero lo que me hace es grabar los numeros de dos en dos, alguna otra forma de hacelo que me puedan sugerir, la verdad ya me queme la cabeza y no logro mi cometido,
saludos y espero sus comentarios
pd: yo uso tableupdate y tablerevert para grabar y cancelar y cdo voy al ultimo ya me muestra el ultimo + 1.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:problemas en red

Publicado por kong (681 intervenciones) el 05/03/2008 21:42:09
Hola amigo.
Ya que los capos no aparecen hasta este momento, te doy mi opinion, ok?
Seria probable que estes sumando dos veces ultimo+1, revisa tu codigo, a ver si no tienes por ahi, otro ultimo+1. A veces suele pasar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problemas en red

Publicado por Carlos Cuyé (75 intervenciones) el 05/03/2008 22:45:23
Hola! Tal vez los dos terminales estén tomando el mismo registro físico que seguramente tiene el campo que usás para contar las facturas. Te recomiendo una rutina similar a la siguiente :

USE Factura
LOCAL Cancelar
* Espera a que otro terminal desocupe la tabla "Facturas".
* Debes usar FLOCK() en vez de RLOCK() para que otro terminal
* no pueda agregar facturas durante el procedimiento.
Cancelar=.F.
DO WHILE !FLOCK('Facturas') && Sale del DO WHILE cuando logra bloquear la tabla
* Cancela la espera con la tecla ESC
IF INKEY()=27
Cancelar=.T.
EXIT
ENDI
ENDD
IF Cancelar
***********************
* Cancela Impresión Factura
***********************
RETURN
ENDI
APPEND BLANK IN Facturas
REPLACE Numero WITH Numero+1 && Suma 1 al número de factura anterior
* Otros REPLACE
TABLEUPDATE(1)
**********************
* Impresión Factura
**********************
UNLOCK IN Facturas
RETURN
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problemas en red

Publicado por jose camilo (688 intervenciones) el 06/03/2008 04:36:25
interesante sugerencia
vuelvo a insistir en grabar el numero real al momento de grabar la factura no al inicio de formulario

por ejemplo voy desde el inicio

entro al formulario
use factura
go bottom
textnfactura.value = FActura+1
Nota aqui no hago un appen blank ni nada k se parezca solo desplego

cargo cliente
cargo los articulos
cargo los controles y pendejadas

vamos a grabar la factura
use factura
go bottom
textnfactura.value = FActura+1
appen blank
replace factura with textnfactura.value
aqui al momento de grabar la factura hago el appen blank en la tabla
si kiero por proteccion le doy un flock durante este proceso
grabo los demas datos

para seguridad es lo k hago
vuelvo y cargo la factura y entonces la mando a imprimir a puro codigo estilo CLIPPER puedes utilizar tu reporte generado .

limpio formulario y tablas temporales
use factura
go bottom
textnfactura.value = FActura+1
Nota aqui no hago un appen blank ni nada k se parezca solo desplego
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problemas en red

Publicado por alberto (399 intervenciones) el 06/03/2008 17:21:52
gracias amigo lo he probado de nuevo y funciona, eres un capo.,
yo programe muchos años en clipper como tu,
me puedes mandar un ej chico de como imprimes con codigo una factura, yo lo he probado pero me queda el icono de la impresora en la linea de estado, creo que hay que poner un set printer to o algo parecido.
saludos y gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problemas en red

Publicado por jose camilo (688 intervenciones) el 06/03/2008 18:06:15
Este el el procedimiento intacto para una impresora de punto de ventas
y una LX-300 ambas son matricial

espero entienda la logica

cualquier interrogante aqui tamos


Procedure Imprimir
PRIVATE WNFactura,ContL,ContP
STORE 0 TO ContL,ContP,Wlongitud
Store " " to WNFactura,Wcondicion
Wprn = GETPRINTER()
If Empty(Wprn)
MessageBox('Impresion Cancelada, pero la factura fue grabada!!!',16,'JJ-System')
Clear Read
Do Abortar
Return
EndIf
SET PRINTER To Name "&Wprn" FONT 'Courier New',7
SET DEVICE TO PRINTER
If M.Matricial ="S"
??? CHR(18)
EndIf
SET CONSOLE OFF
SELECT VENTA
GO TOP
WNFactura = Referencia
TotalDescuento = Descuento
TotalItbis = Itbis
TotalBruto = Valor
m.facturaNcf = NCF
WgFecha = fecha
WInicial = Inicial
WNombre = Nombre
WVendedor = Iif(Empty(Vendedor),Usuario,Vendedor)
GDireccion = Dir
WTelefono = Tel
WCedula = Ced
WCliente = Cliente
WCondicion = Con
if SQLEXEC(JJTrabajo,"SELECT * FROM Setup WHERE Empresa = ?WGEmpresa And Programa ='VENTA'") > 0
Locate For SubStr(WNFactura,1,At("-",WNFactura)) == SubStr(Secuencia,1,At("-",secuencia))
If !Found()
Go Top
EndIf
GenDeb = Debito
GenLin1 = Lin1
GenLin2 = Lin2
GenLin3 = Lin3
GenLin4 = Lin4
GenTipo = Detalle
M.DetalleNCF = DetalleNcf
Posicion1 = pos1
Posicion2 = pos2
Posicion3 = pos3
Posicion4 = pos4
PosTipo = pos5
PosFecha = Fecha
PosHora = Hora
PosNumero = Numero
GenNota1 = Nota1
GenNota2 = Nota2
SELECT VENTA
ContL = 13
Do Encabezado
SELECT VENDET
Wlongitud = 0
Go Bottom
Wlongitud = Recno()
Go Top
If TipoPrinter = "GRANDE"
Do While !Eof()
m.UdsDetalle = UdsDetalle
If M.Unidad = "S"
@Prow()+1,0 SAY Iif(!Empty(Itbis),"*","E")+SubStr(Articulo,1,15)
@Prow(),16 Say Transform(Iif(!Empty(UdsDetalle),Cantidad*UdsDetalle,Cantidad),"9999999.99")
@Prow(),27 Say Transform(Uds,"9999999.99")
@Prow(),38 SAY SubStr(Detalle,1,39)
Else
@Prow()+1,0 SAY Iif(!Empty(Itbis),"*","E")+SubStr(Articulo,1,25)
@Prow(),26 Say Transform(Iif(!Empty(UdsDetalle),Cantidad*UdsDetalle,Cantidad),"9999999.99")
@Prow(),37 SAY SubStr(Detalle,1,40)
EndIf
@Prow(),78 Say Transform(Venta,"999,999,999.99")
@Prow(),92 Say Transform(Descuento,"999,999,999.99")
@Prow(),107 Say Transform(Itbis,"999,999,999.99")
@Prow(),122 Say Transform(Iif(Empty(Uds),(Iif(!Empty(UdsDetalle),Cantidad*UdsDetalle,Cantidad)*Venta)+(Iif(!Empty(UdsDetalle),Cantidad*UdsDetalle,Cantidad)*Itbis),(Uds*Venta)+(Uds*Itbis))-Iif(Empty(Uds),Iif(!Empty(UdsDetalle),Cantidad*UdsDetalle,Cantidad)*Descuento,Uds*Descuento),"999,999,999.99")
If (!Empty(Chassis) AND M.ImprimirReferenciaEnVta="S") Or !empty(Almacen)
@Prow()+1,60 SAY Iif(M.ImprimirReferenciaEnVta="S","Referencia :"+Alltrim(SubStr(Chassis,1,25))," ")+IIf(m.AlmOblig="N"," ",Almacen)
ContL = ContL + 1
EndIf
ContL = ContL + 1
M.Articulo= Alltrim(Articulo)
M.UdsDetalle=UdsDetalle
If M.VentaPorMayor = "S"
If JJWarticulos = "S"
SqlStr = "SELECT DetMayor,DetMenor FROM articulo Where Articulo = ?M.Articulo"
Else
SqlStr = "SELECT DetMayor,DetMenor FROM articulo Where Empresa = ?Wgempresa AND Articulo = ?M.Articulo"
EndIf
If SQLEXEC(JJArticulos,SqlStr,"ARTICULO") <=0
MessageBox('Error al Conectar a la Base de Datos',16,'JJ-System')
EndIf
@Prow()+1,32 Say SubStr(Iif(!Empty(M.UdsDetalle),DetMenor,DetMayor),1,15)
ContL = ContL + 1
EndIf
=inkey()
If LastKey() = 27
Que = MessageBox('Esta seguro que quieres detener el reporte',4+32,'JJ-System')
If Que = 6
@Prow()+1,1 Say "Reporte interumpido por el Usuario"
keyboard chr(13)
=inkey()
Exit
EndIf
EndIf
If ContL > Iif(Wlongitud>16,27,20) &&&&&&& 8 articulos &&&&&&&
@Prow()+1,00 Say Replicate("-",137)
@Prow()+1,02 Say "CONTINUA EN LA SIGUIENTE PAGINA"
ContL=ContL+2
Wlongitud = Wlongitud - Iif(Wlongitud>16,15,8)
@Prow()+(33-ContL),0
Do Encabezado
ContL = 13
EndIf
SELECT VENDET
Skip
EndDo
Else
Do While !Eof()
If M.ImpDetPtoVta = "S"
If m.SumarItbisImpresion="S"
@Prow()+1,0 SAY SubStr(detalle,1,40)
@Prow()+1,0 SAY Iif(!Empty(Itbis),"*","E")+SubStr(Articulo,1,14)
@Prow(),15 Say Transform(Iif(!Empty(UdsDetalle),Cantidad*UdsDetalle,Cantidad),"99999.99")
@Prow(),24 Say Transform(Venta+Itbis,"9999.99")
@Prow(),32 Say Transform(Iif(Empty(Uds),Iif(!Empty(UdsDetalle),Cantidad*UdsDetalle,Cantidad)*(Venta+Itbis),Uds*(Venta+Itbis)),"99999.99")
Else
@Prow()+1,0 SAY SubStr(detalle,1,40)
@Prow()+1,0 SAY Iif(!Empty(Itbis),"*","E")+SubStr(Articulo,1,14)
@Prow(),15 Say Transform(Iif(!Empty(UdsDetalle),Cantidad*UdsDetalle,Cantidad),"99999.99")
@Prow(),24 Say Transform(Venta,"9999.99")
@Prow(),32 Say Transform(Iif(Empty(Uds),Iif(!Empty(UdsDetalle),Cantidad*UdsDetalle,Cantidad)*Venta,Uds*Venta),"99999.99")
EndIf
Else
If m.SumarItbisImpresion="S"
@Prow()+1,0 SAY Iif(!Empty(Itbis),"*","E")+SubStr(detalle,1,14)
@Prow(),15 Say Transform(Iif(!Empty(UdsDetalle),Cantidad*UdsDetalle,Cantidad),"99999.99")
@Prow(),24 Say Transform(Venta+Itbis,"9999.99")
@Prow(),32 Say Transform(Iif(Empty(Uds),Iif(!Empty(UdsDetalle),Cantidad*UdsDetalle,Cantidad)*(Venta+Itbis),Uds*(Venta+Itbis)),"99999.99")
Else
@Prow()+1,0 SAY Iif(!Empty(Itbis),"*","E")+SubStr(detalle,1,14)
@Prow(),15 Say Transform(Iif(!Empty(UdsDetalle),Cantidad*UdsDetalle,Cantidad),"99999.99")
@Prow(),24 Say Transform(Venta,"9999.99")
@Prow(),32 Say Transform(Iif(Empty(Uds),Iif(!Empty(UdsDetalle),Cantidad*UdsDetalle,Cantidad)*Venta,Uds*Venta),"99999.99")
EndIf
EndIf
M.Articulo= Alltrim(Articulo)
M.UdsDetalle=UdsDetalle
If M.VentaPorMayor = "S"
If JJWarticulos = "S"
SqlStr = "SELECT DetMayor,DetMenor FROM articulo Where Articulo = ?M.Articulo"
Else
SqlStr = "SELECT DetMayor,DetMenor FROM articulo Where Empresa = ?Wgempresa AND Articulo = ?M.Articulo"
EndIf
If SQLEXEC(JJArticulos,SqlStr,"ARTICULO") <=0
MessageBox('Error al Conectar a la Base de Datos',16,'JJ-System')
EndIf
@Prow()+1,19 Say SubStr(Iif(!Empty(UdsDetalle),DetMenor,DetMayor),1,15)
EndIf
SELECT VENDET
Skip
EndDo
EndIf
ContP = ContP + 1
Do Fact_Total
Else
MessageBox('Error al Conectar a la Base de Datos [SETUP]',16,'JJ-System')
EndIf
ContL = 13
SET PRINTER TO
Set Printer Off
SET DEVICE TO SCREEN
SET CONSOLE ON
Clear Read
Do Abortar
Return
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problemas en red

Publicado por ALBERTO (399 intervenciones) el 07/03/2008 01:11:01
muchas gracias amigo es lo que estaba esperando, ese si que es codigo puro clipper ,jejejeje, me trae recuerdos de las horas de programacion que he tenido con mis programas, la verdad aveces extraño a mi querido clipper 5.3.
en la actualidad tengo un sistema funcionando en clipper 5.3 para veterinarias con muy buenos resultados, corren en wind xp sin problemas.
saludos y cualquier duda te estoy molestando
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problemas en red

Publicado por jose camilo (688 intervenciones) el 07/03/2008 18:11:04
hasta k no salie vfp8 estaba programando asi
el 8 en adelante cambie a formulario
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar