Eusebio
Lo que tienes que hacer es mejorar tu diseño de flujo, más allá de cómo armes el formulario. Normalmente hablamos de ABM (altas, bajas, modificaciones) que es lo que determina de alguna forma el movimiento de datos. Sobre eso se arma la interfaz, que es nada más la forma de mostrar y permitir acciones al usuario.
En mi manera de ver, estás mezclando dos (o más) problemas que deben tratarse en forma independiente:
1) Definir el modo de generar los abonos (devengamiento de cuotas de socios)
2) Definir el modo de registrar la cobranza de los abonos (pago de las cuotas (abonos) de socios)
3) Definir si los abonos se pueden modificar o eliminar y con qué condiciones
4) Definir la forma de mostrar la situación de un socio
5) Definir la forma de mostrar la situación de abonos emitidos / abonos cobrados (o abonos impagos)
6) Definir los historiales, estadísticas y otros informes que resulten necesarios
Si quieres hacer todo junto, vas a estar en problemas. El planteo que haces inicialmente, se corresponde solamente con el punto 4).
La generación de los abonos es un proceso que se corre, generalmente, una vez al mes. Pero puede tratarse de un caso donde haya que emitir abonos de otra forma. De todos modos, obliga a un procedimiento especial.
La cobranza de los abonos, debe tratarse como lo que es: un proceso circunstancial. Puede ocurrir o no. Cuando ocurre, te conviene tener un formulario aparte, donde tratas el tema del pago: fecha, cobrador, caja, asignación contable, cancelación del abono, etc. Con esto modificas las tablas necesarias y regeneras la consulta para tu formulario principal, de modo que te quede actualizado. Fijate que si: el grid de la izquierda (socios) tiene su código de busqueda lanzado desde AfterRowColChange y además es AllowCellSelection=.T. (default), solo necesitas enviar el foco (thisform.grdSocios.SetFocus) cuando grabas cualquier modificación. Si el formulario de cobranza es modal, lo puedes colocar exactamente después de la convocatoria a ese form. Si el form de cobranza es modeless, puedes pasar como parámetro la referencia de objeto del formulario y en el botón de grabar del form secundario, usas esa referencia (previamente convertida en propiedad del form en el init del secundario) para hacer dirigir el foco al control grid o lanzar directamente el nuevo SELECT si lo tienes en un método del formulario.
1) A los grids que muestras, por favor, configúralos como DeleteMark=.F. Esa columnita negra a la izquierda es horrible y además no debes permitir que cualquer juguetón te quiera borrar los registros.
2) Salvo en alguna circunstancia especial, utilizo los controles grids con Set("Readonly",.T.,"Column") para no permitir ninguna modificación directa en la cuadrícula. Para Agregar, Modificiar, es mejor crear un formulario que haga la tarea con todas las validaciones necesarias y la obvia posibilidad de cancelar el procedimiento. Para Borrar, es mejor tener siempre una consulta, después que el proceso de borrado se haya autorizado (condición de clave, nivel de usuario, fecha, bloqueos de procesos, etc.)
3) Separa los procesos. Separa los procesos. Separa los procesos. Dividir para reinar!
Fijate que hay rutinas que pueden ser empleadas por dos, tres, todos los formularios y procedimientos. Para ello puedes utilizar un prg o una clase custom, como más te guste, pero la idea es escribir estas rutinas correctamente solo una vez y que todos los elementos recurran a ella.
Te recomiendo la atenta lectura de estos artículos de Fernando D. Bozzo (uno de los mejores programadores de Visual Fox que conozco)
http://fdbozzo.blogspot.com.es/2014/01/crear-un-proyecto-foxpro-por-donde.html
[url]fdbozzo.blogspot.com.es/2014/09/vfp-guia-de-buenas-practicas-de.html[/url]
http://fdbozzo.blogspot.com.es/2014/01/desmitificando-el-control-de-errores.html
http://fdbozzo.blogspot.com.ar/2014/10/vfp-la-interfaz-las-reglas-de-negocio-y.html
También te dejo la dirección del blog de comunidadvfp, que es donde Luis María Guayán está subiendo los artículos más importantes que se publicaron en PortalFox (ya fuera de funcionamiento).
http://comunidadvfp.blogspot.com/
También te adjunto un excelente artículo de Daniel Díaz sobre Programacion Orientada a Objetos.