Espero haberte entendido: lo que puedes hacer es crear un datawindow oculto que te sirva de contenedor para vaciar la información que deseas imprimir y utilizar la función de impresión del datawindow. No necesitas hacer un retrieve de nuevo al DW oculto sino solamente comparte la información: //las dos lineas siguientes lo podría hacer el datawindow que estas visualizando dw_princ.SetTransObject(SQLCA) dw_princ.retrieve() //compartes la información dw_princ.ShareData(dw_imprime) //lo mandas a imprimir dw_imprime.print() Otra versión de lo que te entendí es la siguiente: Si tienes varios DW que invocas, podrías mantener un solo datawindow control que vendría a ser el contenedor y en tiempo de ejecución podrías invocar al DW object que te interese, tan solo tendrías que cambiar la referencia para que lo utilice correctamente y despues imprimir dicho DW. Por ejemplo, tienes varios DW objects: d_emp1, d_emp2, d_emp3, y tienes un DW control llamado dw_contenedor, puedes hacer lo siguiente: //Invocas el primer DW object y lo imprimes dw_contenedor.DataObject = 'd_emp1' dw_contenedor.retrieve() dw_contenedor.print() //Invocas el segundo DW object y lo imprimes dw_contenedor.DataObject = 'd_emp2' dw_contenedor.retrieve() dw_contenedor.print() Si te fijas, tan solo tienes un DW en tu ventana y en tiempo de ejecución estás cambiando la información que deseas ver. Obviamente la secuencia de arriba la puedes determinar de acuerdo a tu logística. Espero que te haya servido. Saludos.