JEYCOSOFT:
En Visual Fox no existe un tal Grip. Lo que existe es el control Grid.
1) Cuando llamas al form2 para buscar un cliente, le tienes que pasar como parámetro el objeto Form
DO FORM ..\FORMS\FORM2 WITH Thisform
En el INit del formulario Form2
LPARAMETERS xoForm
Addproperty(thisform, "oform1" , xoForm)
* Ahora te puedes referir a cualquier objeto (o método o propiedad) del form 1 con Thisform.Oform1.Objeto
2) No debes trasladar datos del control grid, sino del cursor asociado. cuando seleccionas un cliente en el grid del Form2, estás apuntando a un registro del cursor.
En el botón o método de selección tenés que tener algo así:
lcCursor=Thisform.Grid1.RecordSource && cursor o tabla asociada al control grid
select (lcCursor)
lcNombre=alltrim(Nombre) && suponiendo que el cursor tiene un campo nombre
lcId=idCliente && suponiendo que el cursor tiene un campo IdCliente
lcClave=Cuit && suponiendo que el cursor tiene un campo Cuit
with thisform.Oform1
.TxtNombre.Value=lcNombre
.TxtIdCliente.VAlue=lcId
.TxtCuit.Value=lcClave
endiwth
thisform.release
Si el Form2 es un formulario Modal o se Inicializa como modal por parámetro, puede devolver una bandera de estado.
al llamar al form2 (Botón de búsqueda de cliente)
LOCAL lAcepta
DO ..\FORMS\FORM2 WITH thisform,1 TO lAcepta
IF NOT lAcepta
RETURN
ENDIF
Init del form2
LPARAMETERS xoForm,xnWindowtype
Addproperty(Thisform,"Retorna",.F.)
Addproperty(Thisform,"oform1",xoform)
WITH thisform
.windowtype=Evl(xnWindowType,0)
.MinButton=iif(.Windowtype=1, .F. ,.T.) && si el formulario es modal, siendo un secundario no debe miniminzarse
ENDWITH
En el botón o método de selección tenés que tener algo así:
lcCursor=Thisform.Grid1.RecordSource && cursor o tabla asociada al control grid
select (lcCursor)
lcNombre=alltrim(Nombre) && suponiendo que el cursor tiene un campo nombre
lcId=idCliente && suponiendo que el cursor tiene un campo IdCliente
lcClave=Cuit && suponiendo que el cursor tiene un campo Cuit
with thisform.Oform1
.TxtNombre.Value=lcNombre
.TxtIdCliente.VAlue=lcId
.TxtCuit.Value=lcClave
endiwth
Thisform.Retorna=.T.
thisform.release
Unload Event
if This.WindowType=1
RETURN THIS.RETORNA
endif
Si el Form2 no es modal.
Suponiendo que TxtNombre sea un TextBox que tiene el nombre del cliente, podés usar el evento ProgrammaticChange para testear si se puede continuar con la factura. (lContinue=!empty(this.value))