Los cursores son igual a una tabla, por lo tanto los debes de tratar igual, que ella, lo que yo hago es leer el cursor y pasar sus datos a las tablas correspondientes ventas detalle de ventas considerando que el cliente ya se guardo.
asi es como lo hago con un sistema muy simple de facturacion que tengo.
*// comienza el registro de la venta
*// debe de haber un cliente valido
LOCAL cli_f as Integer
IF Thisform.txtcliente.Value # 0
*// primero registra la venta y despues el detalle de la venta
LOCAL v_pedido as Integer
LOCAL v_fecha as Date
LOCAL v_total as Double
LOCAL v_activa as Character
LOCAL v_no_fac as String
LOCAL v_iva as Number
LOCAL v_cliente as integer
*// obtiene la nueva venta
SELECT ventas
SET ORDER TO pedido
GO bottom
v_pedido = ventas.pedido + 1
v_cliente = Thisform.txtCliente.Value
v_fecha = Thisform.txtfecha.Value
v_total = Thisform.txttotal.Value
v_activa = 'A'
v_no_fac = ALLTRIM(Thisform.txtnoFactura.Value)
v_iva = Thisform.txtiva.Value
INSERT INTO ventas VALUES ( v_pedido, ;
v_fecha, ;
v_total, ;
v_activa, ;
v_no_fac, ;
v_cliente, ;
v_iva )
*// graba el detalle
*// detalle_venta(descrip c(60), p_unitario b, cantidad i)
LOCAL d_descrip as string
LOCAL d_p_unita as Double
LOCAL d_cant as Integer
*// iva iva_
SELECT detalle_venta
FOR a = 1 TO RECCOUNT()
SELECT detalle_venta
GO a
d_descrip = ALLTRIM(detalle_venta.descrip)
d_p_unita = detalle_venta.p_unitario
d_cant = detalle_venta.cantidad
*// graba los datos en el detalle de venta
INSERT INTO detalleventa values ( v_pedido, ;
d_cant, ;
d_descrip, ;
d_p_unita, ;
iva_ )
*// verifica si la descripcion existe en articulos
SELECT * FROM productos WHERE productos.descrip = d_descrip;
INTO CURSOR mi_articulo_existe
SELECT mi_articulo_existe
IF RECCOUNT() > 0 && existe
UPDATE productos SET p_unitario = d_p_unita;
WHERE productos.descrip = d_descrip
ELSE && es nuevo
*// obtiene el nuevo codigo de producto
LOCAL nva_clave as Integer
SELECT productos
SET ORDER TO clave
GO bottom
nva_clave = productos.clave + 1
INSERT INTO productos values( nva_clave, ;
d_descrip, ;
d_p_unita, ;
v_activa )
ENDIF
ENDFOR
*// limpia el form
Thisform.txtcliente.Value = 0
Thisform.edit1.Value = ""
Thisform.txtnoFactura.Value = ""
DELETE FROM detalle_venta
Thisformset.refresca_form()
Thisformset.form1.Init()
*// operacion terminada