Ok, excelente, ahora con los datos devueltos deseo generar una nueva lista de datos, con la consulta mostrada pues no hay mucho de donde agarrar pero suponiendo que deseara un resumen aparte del detalle obtenido (imaginemos que es un listado de items donde se vende varias veces los mismos items y deseamos tambien tener un resumen del resultado obtenido), esto ya en el lado del cliente con la lista obtenida previamente
y este resultado mostrarlo en una grilla.
Aunque esto es algo sencillo pero como quedaría en windev, adjunto un ejemplo que uso para consultar diversas formas de pagos que puede ocurrir en un documento de venta o compra, obtengo datos de diversas tablas con formatos diversos pero si encuentro la información relacionada con el documento lo acumulo en una tabla local o cursor y voy insertando los productos encontrados para después en una ventana muestro como fue que se cancelo dicho documento.
PARAMETER CCODIGO AS CHARACTER, CNRODOC AS CHARACTER, NTIPDOC AS INTEGER, NSECUENCIA AS NUMBER, NDATASESION AS INTEGER, CKEYITEMLETRA AS CHARACTER, NVMONEDA AS SHORT, NVCAMBIO AS NUMBER, LNOVER AS LOGICAL
IF TYPE("nvmoneda")="L"
NVMONEDA = 1
ENDIF
IF TYPE("nvcambio")="L"
NVCAMBIO = 1
ENDIF
CALIASPAGOS = ALIAS()
*/aqui creo el cursor temporal en el lado del cliente para almacenar la información que se va obteniendo
CREATE CURSOR pagos (DOCUMENTO C (30), NRODOC C (12), MONEDA N (2), MONTO N (10, 2), FECHA D, CAMBIO N (10, 4), descripcion c(100), operacion c(15))
*/aqui va la primera consulta no se visualiza solo es interno
CSCADENASQL = [SELECT lc.secuencia AS secuencia, lc.fechagiro AS fechavencimiento, ]+;
[ lc.moneda AS moneda, lc.monto, letraclientesdoc.nrodoc, lc.relacionados AS docrelac,]+;
[ letraclientesdoc.moneda AS monedad, letraclientesdoc.monto AS total, letraclientesdoc.retencion, ]+;
[ letraclientesdoc.acuenta, letraclientesdoc.fecha AS fecha ]+;
[ FROM letraclientes lc ]+;
[ INNER JOIN letraclientesdoc ON lc.secuencia = letraclientesdoc.secuencia ]+;
[ WHERE letraclientesdoc.tipodocumento=]+STR(NTIPDOC, 4, 0)+;
[ and letraclientesdoc.nrodoc=']+CNRODOC+[']
NRESULTADOS = SQLEXEC(HANDLESQL, CSCADENASQL, "letrac", ACOUNTINFO)
IF USED("letrac")
SELECT LETRAC
SCAN
INSERT INTO pagos (DOCUMENTO, NRODOC, MONEDA, MONTO, FECHA) VALUES ("Canje Letras", PADL(LETRAC.SECUENCIA, 10, "0"), LETRAC.MONEDAd, LETRAC.TOTAL-LETRAC.RETENCION-LETRAC.ACUENTA, LETRAC.FECHAVENCIMIENTO)
ENDSCAN
USE
ELSE
=errordata("buscando canje letras")
ENDIF
*/ aqui va la segunda consulta no se visualiza solo es interno
CSCADENASQL = 'SELECT lc.secuencia AS secuencia, lc.fechagiro AS fechavencimiento, '+' lc.moneda AS moneda, lc.monto, cuotaclientesdoc.nrodoc, lc.relacionados AS docrelac,'+' cuotaclientesdoc.moneda AS monedad, cuotaclientesdoc.monto AS total, cuotaclientesdoc.retencion, '+' cuotaclientesdoc.acuenta, cuotaclientesdoc.fecha AS fecha '+' FROM cuotaclientes lc '+' INNER JOIN cuotaclientesdoc ON lc.secuencia = cuotaclientesdoc.secuencia '+' WHERE cuotaclientesdoc.tipodocumento='+STR(NTIPDOC, 4, 0)+[ and cuotaclientesdoc.nrodoc=']+CNRODOC+[']
NRESULTADOS = SQLEXEC(HANDLESQL, CSCADENASQL, "cuotas", ACOUNTINFO)
IF USED("cuotas")
SELECT cuotas
SCAN
INSERT INTO pagos (DOCUMENTO, NRODOC, MONEDA, MONTO, FECHA) VALUES ("Canje Cuotas", PADL(cuotas.SECUENCIA, 10, "0"), cuotas.MONEDA, cuotas.TOTAL-cuotas.RETENCION-cuotas.ACUENTA, cuotas.FECHAVENCIMIENTO)
ENDSCAN
USE
ELSE
=errordata("buscando canje cuotas")
ENDIF
*/ aqui va la tercera consulta no se visualiza solo es interno
CSCADENASQL = 'SELECT * '+' FROM liquidacionitems '+' WHERE tipodocumento='+STR(NTIPDOC, 4, 0)+[ and nrodoc=']+CNRODOC+[' ]
NRESULTADOS = SQLEXEC(HANDLESQL, CSCADENASQL, "liqi", ACOUNTINFO)
IF USED("liqi")
SELECT LIQI
SCAN
INSERT INTO pagos (DOCUMENTO, NRODOC, MONEDA, MONTO, FECHA) VALUES ("Liq. Ventas", PADL(LIQI.LIQUIDACION, 10, "0"), LIQI.MONEDA, LIQI.MONTO_C, LIQI.FECHA)
ENDSCAN
USE
ELSE
=errordata("buscando liquidaciones")
ENDIF
*/ aqui va la cuarta consulta no se visualiza solo es interno
CSCADENASQL = 'SELECT * '+' FROM canjeventas '+[ WHERE not estado='A' and tipodocumentorigen=]+STR(NTIPDOC, 4, 0)+[ and nrodocorigen=']+CNRODOC+[' and not tipodocumentodestino=9 order by fechaorigen]
NRESULTADOS = SQLEXEC(HANDLESQL, CSCADENASQL, "canjev", ACOUNTINFO)
IF USED("canjev")
SELECT CANJEV
SCAN
INSERT INTO pagos (DOCUMENTO, NRODOC, MONEDA, MONTO, FECHA) VALUES ("Canje Ventas", PADL(CANJEV.SECUENCIA, 10, "0"), CANJEV.MONEDA, CANJEV.TOTAL-CANJEV.ACUENTA, CANJEV.FECHADESTINO)
ENDSCAN
USE
ELSE
=errordata("buscando canje ventas")
ENDIF
*/ aqui va la quinta consulta no se visualiza solo es interno
CSCADENASQL = 'SELECT * '+' FROM canjeventas '+[ WHERE not estado='A' and tipodocumentodestino=]+STR(NTIPDOC, 4, 0)+[ and nrodocdestino=']+CNRODOC+[' and acuenta>0 order by fechaorigen]
NRESULTADOS = SQLEXEC(HANDLESQL, CSCADENASQL, "canjev", ACOUNTINFO)
IF USED("canjev")
SELECT CANJEV
SCAN
INSERT INTO pagos (DOCUMENTO, NRODOC, MONEDA, MONTO, FECHA) VALUES ("Canje Ventas", PADL(CANJEV.SECUENCIA, 10, "0"), CANJEV.MONEDA, CANJEV.ACUENTA, CANJEV.FECHADESTINO)
ENDSCAN
USE
ELSE
=errordata("buscando canje ventas")
ENDIF
*/ aqui va la sexta consulta no se visualiza solo es interno
IF ntipdoc<0
CSCADENASQL = 'SELECT nci.*, notacredito.fecha, notacredito.codigo, notacredito.nrodoc as doccanje, '+;
' notacredito.moneda as monedad, notacredito.total as monto, notacredito.impuesto'+;
' FROM notacreditoitem nci '+' INNER JOIN notacredito ON nci.secuencia = notacredito.secuencia '+;
' WHERE notacredito.clienteproveedor=1 and notacredito.tipodocumento=7 and nci.tipodocumento='+STR(NTIPDOC, 4, 0)+;
[ and (nci.nrodoc=']+CNRODOC+[' or nci.nrodocaplicado=']+CNRODOC+[') order by notacredito.fecha]
ELSE
CSCADENASQL = 'SELECT nci.*, notacredito.fecha, notacredito.codigo, notacredito.nrodoc as doccanje, '+;
' notacredito.moneda as monedad, notacredito.total as monto, ventas.fecha as fechav, notacredito.impuesto'+;
' FROM notacreditoitem nci '+' INNER JOIN notacredito ON nci.secuencia = notacredito.secuencia '+;
' inner join ventas on nci.nrodoc=ventas.nrodoc and nci.tipodocumento=ventas.tipodocumento '+;
' WHERE notacredito.clienteproveedor=1 and notacredito.tipodocumento=7 and nci.tipodocumento='+STR(NTIPDOC, 4, 0)+;
[ and (nci.nrodoc=']+CNRODOC+[' or nci.nrodocaplicado=']+CNRODOC+[') order by notacredito.fecha]
ENDIF
NRESULTADOS = SQLEXEC(HANDLESQL, CSCADENASQL, "notac", ACOUNTINFO)
IF USED("notac")
SELECT NOTAC
SCAN
IF ALLTRIM(nrodoc)=ALLTRIM(cnrodoc)
IF !EMPTY(nrodocaplicado)
INSERT INTO pagos (DOCUMENTO, NRODOC, MONEDA, MONTO, FECHA, descripcion) VALUES ("Nota Crédito", NOTAC.DOCCANJE, NOTAC.MONEDA, 0, NOTAC.FECHA1, "Aplicado "+notac.nrodocaplicado)
ELSE
INSERT INTO pagos (DOCUMENTO, NRODOC, MONEDA, MONTO, FECHA) VALUES ("Nota Crédito", NOTAC.DOCCANJE, NOTAC.MONEDA, NOTAC.VVENTA*IIF(NOTAC.IMPUESTO=1, 1, validaimpuesto(notac.fecha)), NOTAC.FECHA1)
ENDIF
ELSE
IF ALLTRIM(nrodocaplicado)=ALLTRIM(cnrodoc)
INSERT INTO pagos (DOCUMENTO, NRODOC, MONEDA, MONTO, FECHA, descripcion) VALUES ("Nota Crédito", NOTAC.DOCCANJE, NOTAC.MONEDA, NOTAC.VVENTA*IIF(NOTAC.IMPUESTO=1, 1, validaimpuesto(notac.fecha)), NOTAC.FECHA1, "Documento Origen "+notac.nrodoc)
ENDIF
ENDIF
ENDSCAN
USE
ELSE
=errordata("buscando nota credito")
ENDIF
*/ aqui va la septima consulta no se visualiza solo es interno
CSCADENASQL = 'SELECT nci.*, notacredito.fecha, notacredito.codigo, notacredito.nrodoc as doccanje, '+' notacredito.moneda as monedad, notacredito.total as monto, ventas.fecha as fechav'+' FROM notacreditoitem nci '+' INNER JOIN notacredito ON nci.secuencia = notacredito.secuencia '+' inner join ventas on nci.nrodoc=ventas.nrodoc and nci.tipodocumento=ventas.tipodocumento'+' WHERE notacredito.clienteproveedor=3 and notacredito.tipodocumento=20 and nci.tipodocumento='+STR(NTIPDOC, 4, 0)+[ and nci.nrodoc=']+CNRODOC+[' order by notacredito.fecha]
NRESULTADOS = SQLEXEC(HANDLESQL, CSCADENASQL, "reten", ACOUNTINFO)
IF USED("reten")
SELECT RETEN
SCAN
INSERT INTO pagos (DOCUMENTO, NRODOC, MONEDA, MONTO, FECHA) VALUES ("Retenciones", RETEN.DOCCANJE, RETEN.MONEDA, RETEN.VVENTA, RETEN.FECHA)
ENDSCAN
USE
ELSE
=errordata("buscando retenciones")
ENDIF
IF ntipdoc=8
CSCADENASQL = [SELECT nci.*, notacredito.fecha, notacredito.codigo, notacredito.nrodoc as doccanje,]+;
[ notacredito.moneda as monedad, notacredito.total as monto, notadebito.fecha as fechav]+;
[ FROM notacreditoitem nci ]+;
[ INNER JOIN notacredito ON nci.secuencia = notacredito.secuencia ]+;
[ inner join notadebito on nci.nrodoc=notadebito.nrodoc and nci.tipodocumento=notadebito.tipodocumento]+;
[ WHERE notacredito.clienteproveedor=3 and notacredito.tipodocumento=20 and nci.tipodocumento=]+STR(NTIPDOC, 4, 0)+;
[ and nci.nrodoc=']+CNRODOC+[' and notadebito.clienteproveedor=1 order by notacredito.fecha]
NRESULTADOS = SQLEXEC(HANDLESQL, CSCADENASQL, "reten", ACOUNTINFO)
IF USED("reten")
SELECT RETEN
SCAN
INSERT INTO pagos (DOCUMENTO, NRODOC, MONEDA, MONTO, FECHA) VALUES ("Retenciones", RETEN.DOCCANJE, RETEN.MONEDA, RETEN.VVENTA, RETEN.FECHA)
ENDSCAN
USE
ENDIF
ENDIF
STORE '' TO CFILTROKEYCAJA, CFILTROKEYBCO
IF TYPE("ckeyitemletra")="C"
IF .NOT. EMPTY(CKEYITEMLETRA)
CFILTROKEYCAJA = [ and reciboitem.keyitem=']+CKEYITEMLETRA+[']
CFILTROKEYBCO = [ and recibobancoitem.keyitem=']+CKEYITEMLETRA+[']
ENDIF
ENDIF
*/ aqui va la octava consulta no se visualiza solo es interno
CSCADENASQL = [SELECT Reciboitem.*, Recibo.FIRMADO, Recibo.TOTAL AS totalrecibo, ]+;
[ Recibo.FECHA AS fecharecibo, recibo.cambio, recibo.operacion, cajabancos.descripcion ]+;
[ FROM Reciboitem ]+;
[ INNER JOIN Recibo ON Reciboitem.NRORECIBO = Recibo.NRORECIBO AND Reciboitem.TIPOMOV = Recibo.TIPOMOV AND Reciboitem.caja = Recibo.CAJA ]+;
[ INNER JOIN CajaBancos ON CajaBancos.tipo = 1 AND CajaBancos.codigo = Recibo.CAJA ]+;
[ WHERE reciboitem.tipodoc=]+STR(NTIPDOC, 4, 0)+[ and reciboitem.nrodoc=']+CNRODOC+;
[' and (reciboitem.secuencia=]+STR(NSECUENCIA, 10, 0)+[ or reciboitem.secuencia=0) ]+;
[ AND recibo.tipomov=1 and Recibo.FIRMADO <> '']+CFILTROKEYCAJA
NRESULTADOS = SQLEXEC(HANDLESQL, CSCADENASQL, "reciboc", ACOUNTINFO)
IF USED("reciboc")
SELECT RECIBOC
SCAN
INSERT INTO pagos (DOCUMENTO, NRODOC, MONEDA, MONTO, FECHA, CAMBIO, operacion, descripcion) VALUES ("Recibo Caja", PADL(RECIBOC.NRORECIBO, 8, "0"), RECIBOC.MONEDA, RECIBOC.ACUENTA, RECIBOC.FECHARECIBO, RECIBOC.CAMBIO, reciboc.operacion, reciboc.descripcion)
ENDSCAN
USE
ELSE
=errordata("buscando recibos de caja")
ENDIF
*/ aqui va la novena consulta no se visualiza solo es interno
CSCADENASQL = [SELECT Recibobancoitem.*, Recibobanco.FIRMADO, Recibobanco.TOTAL AS totalrecibo, ]+;
[ Recibobanco.FECHA AS fecharecibo, CajaBancos.descripcion AS cuenta, ]+;
[ cb.descripcion AS banco, recibobanco.cambio ]+;
[ FROM Recibobancoitem ]+;
[ INNER JOIN Recibobanco ON Recibobancoitem.NRORECIBO = Recibobanco.secuencia ]+;
[ INNER JOIN CajaBancos ON CajaBancos.tipo = 2 AND CajaBancos.codigo = Recibobanco.CODBCO ]+;
[ AND CajaBancos.subcodigo = Recibobanco.SCODBCO ]+;
[ INNER JOIN CajaBancos cb ON cb.tipo = 2 AND cb.main = 1 AND cb.codigo = Recibobanco.CODBCO ]+;
[ WHERE Recibobancoitem.tipodoc=]+STR(NTIPDOC, 4, 0)+[ and Recibobancoitem.nrodoc=']+CNRODOC+[' ]+;
[ and (recibobancoitem.secuencia=]+STR(NSECUENCIA, 10, 0)+[ or recibobancoitem.secuencia=0) ]+;
[ AND (recibobanco.tipomov=1 or recibobanco.tipomov=4)and Recibobanco.FIRMADO <> '']+CFILTROKEYBCO
NRESULTADOS = SQLEXEC(HANDLESQL, CSCADENASQL, "recibob", ACOUNTINFO)
IF USED("recibob")
SELECT RECIBOB
SCAN
INSERT INTO pagos (DOCUMENTO, NRODOC, MONEDA, MONTO, FECHA, CAMBIO, descripcion) VALUES ("Transacción Bancaria", PADL(RECIBOB.NRORECIBO, 8, "0"), RECIBOB.MONEDA, RECIBOB.ACUENTA, RECIBOB.FECHARECIBO, RECIBOB.CAMBIO, ALLTRIM(recibob.banco)+"\"+recibob.cuenta)
ENDSCAN
USE
ELSE
=errordata("transacciones bancarias")
ENDIF
SELECT PAGOS
NVALORRETORNO = -1
OVARIABLE = CREATEOBJECT("variables")
IF .NOT. LNOVER
OVARIABLE.LIQUIDACION = .T.
OVARIABLE.ccaption = 'Tipo Documento;Nro.Doc;Fecha;;Monto;;Operación;Caja/Banco;'
OVARIABLE.crecordsource = 'pagos.documento;pagos.nrodoc;pagos.fecha;IIF(pagos.moneda<=1,"S/.","US$");pagos.monto;;operacion;descripcion;'
OVARIABLE.cwidth = '110;90;80;30;90;20;90;150;'
OVARIABLE.calias = 'pagos'
OVARIABLE.ctitulo = 'Histórico de Pagos'
OVARIABLE.csubtitulo = 'Listado de Pagos realizados al documento indicado'
OVARIABLE.ESNUEVO = .F.
OVARIABLE.NKEYITEM = NDATASESION
*/ en este do form muestro el contenido del cursor pagos
DO FORM historicoproducto WITH OVARIABLE
ELSE
OVARIABLE.ESNUEVO = .T.
ENDIF
IF OVARIABLE.ESNUEVO
*/otros calculos en el cursor de pagos
SELECT PAGOS
SUM MONTO TO NVALORSOLES FOR MONEDA<=1
SUM MONTO TO NVALORDOLAR FOR MONEDA=2
NVALORRETORNO = IIF(NVMONEDA=1, NVALORSOLES+(NVALORDOLAR*NVCAMBIO), (NVALORSOLES/IIF(NVCAMBIO=0,1,NVCAMBIO))+NVALORDOLAR)
CALCULATE MAX(FECHA) TO DFECHAMAXIMA
ENDIF
IF USED("pagos")
SELECT PAGOS
USE
ENDIF
IF .NOT. EMPTY(CALIASPAGOS)
SELECT (CALIASPAGOS)
ENDIF
RETURN NVALORRETORNO &&se retorna el valor total cancelado del documento para los fines convenientes
ENDFUNC
**