FoxPro/Visual FoxPro - ayuda archivos

   
Vista:

ayuda archivos

Publicado por fernando (50 intervenciones) el 24/06/2015 14:11:41
Hola amigos, He observado en un sistema enlatado de pedidos de mercadería en un depósito, con sucursales y llegan los archivos de pedido (.dbf), el sistema alerta con un aviso al operador.
¿En visual fox 9 como podría hacer esto?, detectar automáticamente cuando en la carpeta d:\pedidos me llegan archivos. Ejemplo d:\pedidos\20150624_123.dbf, 20150624_124.dbf, etc. , para luego leerlos y procesar los códigos y cantidades para ser enviados.

gracias
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

ayuda archivos

Publicado por Fidel José (558 intervenciones) el 25/06/2015 01:28:42
Una solución puede ser utilizar un control timer
Por ejemplo
Thisform.timer1.interval = 3000 && revisa cada 3 segundos
thisform.timer1.enabled = .T. && activa o desactiva el timer

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
*<Evento Timer del control Timer>
 
 
TRY
	LOCAL lnFiles ,i ,loFso as Object,;
		loEx as Exception,;
		lcInput , lcOutPut
 
	LOCAL ARRAY laFiles(1)
	lcInPut="c:\theodore\entrada\new"       && normalmente sería una propiedad del form
	lcOutPut = "c:\theodore\entrada\old"    && normalmente sería una propiedad del form
 
	lnFiles = ADIR(laFiles,ADDBS(m.lcInput)+"*.dbf","",1)
	IF lnFiles > 0
               *  convendrá detener el timer hasta que finalice el actual proceso de actualización
               This.Enabled = .F.
 
		WAIT WINDOW "Procesando "+TRANSFORM(lnfiles)+" pedidos..." AT 20,20 NOWAIT
		loFso = NEWOBJECT("Scripting.FileSystemObject")
		* Mudar lo que llega a carpeta "Old"
		FOR i=1 TO lnFiles
                        * Si el archivo ya existe en lcOutput, lo borramos para evitar errores en el moveFile
			IF loFso.fileExists(ADDBS(m.lcOutput)+laFiles[m.i,1])
				loFso.Deletefile(ADDBS(m.lcOutput)+laFiles[m.i,1])
			ENDIF
                       * Mueve el archivo arribado a la carpeta \OutPut
			loFso.MOveFile(ADDBS(m.lcInput)+laFiles[m.i,1] , ADDBS(m.lcOutput))
		NEXT
 
                * Procesa los dbf recién arribados, pero leyendo de la carpeta de depósito (lcOutPut)
		FOR i=1 TO lnfiles
			lcFileProc = ADDBS(m.lcOutPut)+laFiles[m.i,1]
			lcAlias = JUSTSTEM(laFiles[m.i,1])
			USE (lcFileProc) IN 0 EXCLUSIVE
			SELECT (lcAlias)
			* BROWSE   && unicamente para pruebas
			* do_Procedure_()        && proceso de actualización
			SELECT (lcAlias)
			USE
		NEXT
		WAIT CLEAR
	ENDIF
CATCH TO loex
	loex.UserValue=PROGRAM()
	ShowError(loEx)
FINALLY
	loFso = null
        This.Enabled = .T.
ENDTRY
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

ayuda archivos

Publicado por fernando (50 intervenciones) el 28/06/2015 16:20:05
Gracias José, esto funciona correctamente, ahora bien, soy novato y te pido el favor de mostrarme *do_Procedure_() && proceso de actualización, como para verificar q medidas tomar para la actualización del stock, sobre todo cuando 2 usuarios acceden al mismo tiempo el mismo registro y campo cantidad del producto

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

ayuda archivos

Publicado por Fidel José (558 intervenciones) el 28/06/2015 18:28:20
Lo que normalmente se hace:
Cuando estás generando una venta o un movimiento de stock:
Descuentas del stock en el momento de cargar el producto a la venta o transferencia.
Si la operación se anula, tienes que devolver los productos al depósito del que salieron.
En cambio, en la devolución de mercaderías, no se ingresan al stock hasta que no se confirma la operación. Del mismo modo que las operaciones de ingreso (sea por remito o factura).
En las transferencias de productos, se retiran del depósito de salida cuando se está haciendo la operación y se ingresan al depósito de destino solamente cuando se confirma. De ese modo, si se anula la transferencia, solamente devuelves los productos de donde los sacaste. Y no creas un falso positivo en la línea de ventas.

Con eso te evitas tener que bloquear a los demás usuarios porque uno esta haciendo una factura.
El mayor riesgo es que el vendedor le diga al segundo cliente que quedó sin stock, cuando el primero había retenido el último producto y luego no se confirmó la venta.
Los puntos de quebradura de stock son un problema de planeamiento de inventarios y no de programación.
Para evitar el quiebre de inventario, existe el punto de pedido (o reposición), considerando el tiempo de espera y el lote económico de pedido. Si esto está mal trabajado en una firma, poco podrá hacer el programador.

El procedimiento depende absolutamente de tu estructura de datos.
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