FoxPro/Visual FoxPro - Controlar grid

   
Vista:

Controlar grid

Publicado por Fabio (10 intervenciones) el 11/05/2008 15:58:45
hola amigos del foro estoy dando mis primeros pasos en VF despues de programar varios años en foxpro 2.6, estoy realizando un programa de repsosicion de stock de medicamentos en un form donde previamente cargo los datos del encabezado de la factura o remito hasta ahi todo bien el problema es cuando quiero realizar la carga del detalle de la factura en el grid que tiene 5 columnas (Codigo,Descripcion,Precio Unitario,Cantidad,Subtotal) del cual introduciendo el codigo de medicamento lo debe buscar en la tabla de medicamentos y si existe me debe mostrar la descripcion y precio unitario, luego debe saltar a la celda de cantidad para ingrear la misma donde automaticamente realiza el calculo del subtotal. en foxpro hacia el siguiente codigo utilizando una tabla temporal y mostrandola con el browser para validad los datos ingresados y era el siguiente, desde ya si alguien puede orientarme le agradesco de antemano:

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
close data
CLEAR
set help off
set refre to 1,5
SET SAFE OFF
set dele on
 
****set message to "Presione F3: Borrar Linea-F10: Confirmar facturas-ESC: Volver al Menu"
**** Apertura de Tablas e Indices
sele 1
use articulos order codart
clear
 
* Creacion del Cursor facturas (Tabla temporal) para la carga de la facturas
 
Create CURSOR facturas (CODART C(6),descrip c(40),importe n(8,2),cantid n(3),;
subtot n(8,2),ESTADO C(2))
 
* Agrega un Reg. en blanco al cursor para empezar a cargar los datos
appen blank
 
* Se establece la relacion entre el Codigo de Articulo cargado en el cursor
* y la tabla de Articulos
set relation to CODART into ARTICULOS
 
* Definicion de las funcionalidades de las teclas especiales F1 a F12,
* ESC, PGDN y DNARROW
on key label f1 do AYUDINSUMO
on key label f2 keyb ""
on key label f3 do borrali
on key label f4 keyb ""
on key label f5 keyb ""
on key label f6 keyb ""
on key label f7 keyb ""
on key label f8 keyb ""
on key label f9 keyb ""
ON KEY LABEL F10 DO CONFIRMA
ON KEY LABEL F11 keyb ""
ON KEY LABEL F12 keyb ""
ON KEY LABEL ESC DO SALE
ON KEY LABEL PGDN DO PAGABAJO
ON KEY LABEL DNARROW DO BAJALI
DEFINE POPUP AYUINS FROM 10.5,11 TO 25,89 PROMPT FIELD CODINS+SPACE(5)+DESCRIP TITLE "Ayuda de Articulos" SCROLL MESSA "Seleccione un Articulo" IN SCREEN
ON SELECTION POPUP AYUART DEAC POPUP AYUART
ON KEY LABEL F1 DO AYUDART
@ 38,1 SAY "Presione <F1>: Ayuda Articulos - <F3>: Borrar Linea - <F10>: Confirma Factura - <ESC>: Vuelve Menu"
DEFI WIND FABIO AT 0,0 TO 20,99 title "Carga de Articulos de la Factura" COLOR b+/w*
MOVE WIND FABIO CENTER
acti wind fabio
XTOTAL=0
SALI='NO'   && Usada para permanencia en el browse
XULTREG = 1  && Variable que indica el ultimo reg. de la facturas(cursor)
XBORRADO = 'NO'  && Indica si algun registro de facturas fue eliminado
XCONFIRMA='NO'  && En SI indica la confirmacion de la facturas
DO WHILE SALI='NO'
   BROW FIELD CODINS :h='Código' :v=VCODART() :f,DESCRIP :h='Descripción' :w=.f.,;
              IMPORTE :h=' $ ' :v=vimpor() :f,;
              CANTID :h='Kg-Lts' :v=vcantid() :f,;
              SUBTOT :h='Subtotal ' :w=.F.,;
              ESTADO :h='Estado' :w=.F. IN WIND FABIO
 
   IF XBORRADO='SI'
      =CAMBIO()
   ENDIF
   IF XCONFIRMA='SI'
      EXIT
   ENDIF
ENDDO
IF XCONFIRMA='SI'
   DO CARGA
ENDIF
set help on
on key
rele wind fabio
CLEAR
return
 
PROCEDURE AYUART
 IF VARREAD()="CODART"
	ON KEY
    SELE ARTICULOS
    SET ORDER TO DESCRIP
    SELECT * FROM ARTICULOS INTO CURSOR TABLART ORDER BY DESCRIP
    IF _TALLY>0
      ACTI POPUP AYUART
      CODART=LEFT(PROMPT(),6)
      IF EMPTY(CODART)
         repla FACTURAS.CODART="     0"
      ENDIF
      REPLA FACTURAS.CODART WITH CODART
    ELSE
      set escape off
      WAIT WIND "Archivo Vacio" TIMEOUT 2
    ENDIF
 ENDIF
 SELE FACTURAS
 SET ORDER TO CODART
 on key label f1 do AYUDART
 on key label f2 keyb ""
 on key label f3 do borrali
 on key label f4 keyb ""
 on key label f5 keyb ""
 on key label f6 keyb ""
 on key label f7 keyb ""
 on key label f8 keyb ""
 on key label f9 keyb ""
 ON KEY LABEL F10 DO CONFIRMA
 ON KEY LABEL F11 keyb ""
 ON KEY LABEL F12 keyb ""
 ON KEY LABEL ESC DO SALE
 ON KEY LABEL PGDN DO PAGABAJO
 ON KEY LABEL DNARROW DO BAJALI
 SELE FACTURAS
 SET ESCAPE ON
RETURN
 
Procedure borrali
   DELETE
   XBORRADO='SI'
   KEYB '{CTRL+Q}'  && Envia al buffer del teclado las pulsaciones CTRL+Q
return
 
procedure agregali
append blank
XULTREG = RECNO()
return .T.
 
PROCE VCODINS
* Si la funcion EXISTE() devuelve 'NO' es que el codigo ingresado no existe 
* en el cursor.
IF EXISTE()='NO' 
   IF eof('ARTCULOS')  && Si ARTICULO esta en Eof, es porque el codigo ing. no existe
      IF !empty(CODART)
         wait wind 'Codigo no existe '
         RETURN .F.
      ELSE
         IF RECNO()=XULTREG AND INLIST(LAST(),4,19,9,13)
               RETURN .F.
         ENDIF
      ENDIF
   ELSE
         repla descrip with ARTICULOS.descrip, subtot with cantid*importe
         RETUR .T.
   ENDIF
ELSE
   ********  CUANDO YA EXISTE EL ARTICULO CARGADO NO BORRA ***
   WAIT WIND 'Ya Existe'
   RETURN .f.
ENDIF
 
proce Vimpor
PUSH KEY CLEAR  && Desactiva los valores ON KEY LABEL
IF !EOF('ARTICULOS')
   IF EMPTY(IMPORTE)
      set escape off
      WAIT WIND 'Debe especificar Importe'
      POP KEY   && Restaura los valores ON KEY LABEL
      RETURN .F.
   ELSE
 	  IF IMPORTE<=0
 	     WAIT WIND 'No se permiten Valores Negativos'
 	     POP KEY
 	     RETURN .F.
 	  ENDIF
   ENDIF
ELSE
 
ENDIF
set escape on
pop key
 
proce Vcantid
PUSH KEY CLEAR  && Desactiva los valores ON KEY LABEL
IF !EOF('ARTICULOS')
   IF EMPTY(CANTID)
      set escape off
      WAIT WIND 'Debe especificar Cantidad '
      POP KEY   && Restaura los valores ON KEY LABEL
      RETURN .F.
   ELSE
      IF CANTID <=0
      	WAIT WIND 'NO se permiten Valores Negativos'
      	POP KEY
      	RETURN .F.
      ENDIF
         repla subtot with cantid*importe,ESTADO WITH 'OK'
         =SUMAR()
         POP KEY
         RETURN ACCION()
   ENDIF
ELSE
 
ENDIF
set escape on
pop key
 
PROCE EXISTE
* Subrutina que permite verificar si algun codigo de articulo ya se encuentra
* cargado en la facturas
XCOD=CODART
SELE CODART,COUNT(*) AS CANCOD FROM facturas WHERE CODART=XCOD INTO CURSOR PP
IF PP.CANCOD > 1
   WAIT WIND 'Codigo ya cargado, se sugiere modificar Cantidad'
   KEYB '{CTRL+Q}'
   XX='SI'
ELSE
   XX='NO'   
ENDIF
SELE  facturas
RETURN XX
 
PROCE SALE
SALI = 'SI'
XCONFIMRA="NO"
KEYB '{CTRL+Q}'
rele wind fabio
rele wind carga
on key
RETURN
 
PROCE SALE2
SALI = 'SI'
XCONFIMRA="NO"
KEYB '{CTRL+Q}'
rele wind cargafac
on key
RETURN
 
PROCE ACCION
IF RECNO()<XULTREG and estado='OK'
   SKIP
   RETURN .T.
ELSE
   IF RECNO()=XULTREG
      APPEND BLANK
      XULTREG=RECNO()
      KEYB '{DNARROW}'
      RETURN .T.
   ENDIF
ENDIF
RETURN
 
PROCE BAJALI
IF RECNO()=XULTREG-1 AND ESTADO='OK'
   IF UPPE(VARR())='CANTID'
      KEYB '{TAB}'
   ENDIF
   SKIP
   RETURN .T.
ELSE
   IF RECNO()=XULTREG
       RETURN .F.
   ELSE
       =ACCION()
   ENDIF
ENDIF
RETURN
 
PROCE PAGABAJO
IF UPPE(VARR())='CANTID' 
   KEYB '{TAB}'
ENDIF
GO BOTT
RETURN .T.
 
PROCE CAMBIO
SELE * FROM facturas INTO CURSOR AUXI
SELE facturas
ZAP
IF _TALLY > 0
   SELE AUXI
   SCAN
      SCATTER MEMVAR
      INSER INTO facturas FROM MEMVAR
   ENDSCAN
   SELE facturas
else
   SELE facturas
   APPEND BLANK
ENDIF
=SUMAR()
GO BOTT
XULTREG=RECNO()
RETURN
 
PROCE CONFIRMA
XCONFIRMA='SI'
IF XTOTAL>0
   KEYB '{CTRL+Q}'
ELSE
   WAIT WIND "No se cargan facturas sin valor..."
   CONFIRMA='NO'   
ENDIF
RETURN
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:Controlar grid

Publicado por Plinio (7771 intervenciones) el 11/05/2008 19:22:05
1- El grid depende de una tabla, todo lo que debes de hacer es alimentar esa tabla o cursor (preferiblemente).

2- Es mejor tener la captura de los productos a introducir fuera del grid y desde ahi ir alimentandolo, es mas manejable que trabajar dentro del grid.
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