Un placer poder ayudarte. Va así:
1. Columna 1 no modificable: anda a las propiedades de la columna 1, en la pestaña DATA escoge la opción ReadOnly y establecela en .T. si quieres algo mas "bloqueado" anda a la pestaña other y escoge Enabled = .t. y así no podrás si quiera interactuar con los datos.
1.1. Valor actual de la columna 1: ¿A qué te refieres con valor actual? ¿La suma de todos los registros solo de esa columna? ¿O todo el campo de la tabla? Aclarame este punto! :)
2. Para sumar los valores que ingresas y que ves en pantalla... pues ahí debes trabajar directamente sobre la tabla. Eso es un poco complicado al inicio.. porque foxpro no permite que sumes directamente ciertos valores de los campos... debes sumarlos todos o debes usar condiciones. Yo elijo condiciones siempre. Aquí podes proceder de 2 formas:
Podes agregar un campo en tu tabla que sea para enumerar en bloque los registros (renglones) que vas grabando. Por ejemplo... yo tengo en mi tabla facturación, un campo llamado "numerofact" donde guardo el numero de factura. Así, si en una factura vendo (registro) 10 productos... todos los renglones o registros de esa factura (que veo en pantalla) tienen como una especie de código identificador de bloque que me indica cuales productos pertenecen a un numero de factura especifico. Así, puedo ir sumando lo que veo en pantalla. Por ejemplo: registro la factura 100 y los productos:
Renglon1: zapatos - cantidad 10
Renglon2: camisa - cantidad 10
Cada registro, lleva el numero de factura 100... así se que el bloque lleva 2 productos y puedo sumar de la tabla con condición, unicamente esos 2 registros: así:
LOCAL lnCantidad
SELECT facturación
SET FITLER TO numfactura = 100
CALCULATE SUM (cantidad) TO lnCantidad
**--Evaluamos que no sea mayor a 100
IF lnCantidad => 100
MESSAGEBOX("La cantidad excede el limite." 48)
CANCEL
ENDIF
**--Asigamos valor a un text para ver la suma total de cantidades
THISFORM.Text1.Value = lnCantidad
THISFORM.Text1.Refresh
**--Quitamos el filtro de la tabla
SET FILTER TO
Ves! :)
Otra forma seria ir alimentando un cursor aparte, donde vayas cargando paralelamente a tu tabla física, los valores y luego calcular totales sobre ese cursor:
Siguiendo el ejemplo anterior:
En el INIT() de tu form, creamos un cursor
CREATE CURSOR temporal1( cantidad N(12,2))
Luego... a medida que vayas agregando datos al grid (y por consiguiente a tu tabla) vas cargando paralelamente el cursor:
SELECT temporal1
INSERT INTO temporal1(cantidad) VALUES(thisform.grid1.Columnx.Value)
Y luego vamos sumando sobre el campo del cursor:
SELECT temporal1
CALCULATE SUM(cantidad) TO lnCantidad
**--Evaluamos que no sea mayor a 100
IF lnCantidad => 100
MESSAGEBOX("La cantidad excede el limite." 48)
CANCEL
ENDIF
**--Asignamos a un text el total
THISFORM.Text1.Value = lncantidad
THISFORM. Refresh
Ves! :)
Este tema del calculo de totales que se ven en pantalla... es un dolor de cabeza para los programadores... puesto que siempre "los que saben" te mandan a sumar el valor total del campo así
SELECT SUM...
Es necesario un debate a profundidad sobre este tema... con mas detalle! Yo solo te doy una pequeña pista aquí. Si quieres y tienes tiempo, puedes hacerme la consulta en otra pregunta para que lo abordemos a profundidad y quedes mas claro. Y así ayudar a otros también que tengan la misma duda!