Ver Mensaje Individual
  #6 (permalink)  
Antiguo 27/08/2003, 13:58
OXIGENO
 
Fecha de Ingreso: febrero-2002
Mensajes: 442
Antigüedad: 23 años, 2 meses
Puntos: 2
Hola... aqui va el codigo que arme para Imprimir algo asi como lo mas parecido a un reporte......

En resumen lo que hago es.... desde una pagina listo una tabla resultante de yna consulta de SQL. A esa tabla, el usuario la puede ordenar como quiera...... Cuendo el usuario presiona en el boton <Imprimir>; llamo una pagina que imprime, pasandole los datos de la consulta mediante URL Dinamica(querystring); como por ejemplo el orden de la tabla(para imprimir en el mismo orden)

#### PRIMERO LA PAGINA QUE IMPRIME #### (supongamos que se llama PRINT.asp)



Código:
<!--#include file="../../Templates/include/head.asp" -->
<% 'Abajo pongo el head.asp
'##############################################################
'## Consulta 2 - Nomina de Afiliados. Filtrado por Localidad y
'## por el Estado del Afiliado (="S")
'## Utilidad: 1) Mostrar nomina de Afiliados por Localidad
'##############################################################
server.ScriptTimeout = 1800

Dim mostrar       		'cantidad de registros a mostrar por página
Dim cant_paginas      	'cantidad de páginas que recibimos
Dim pagina_actual     	'La página que mostramos
Dim registro_mostrado   'Contador utilizado para mostrar las páginas
Dim I        			'Variable Loop

mostrar = 30 			'Pueden modificar este número para cambiar la cantidad de registros por página

'En que pagina estoy...
'If Request.Querystring("page") = "" Then
'	pagina_actual = 1
'Else
'	pagina_actual = CInt(Request.Querystring("page"))
'End If
	
Dim strSQL, objRS, paso
paso = 1
'Traigo orden en que ordeno el usuario en la pagina anterior
order = Request.Querystring("order")

'Si no tiene orden, por default 1
If Len(order) = 0 Then order = 1

If paso = 1 Then
				
	Set objRS = Server.CreateObject("ADODB.Recordset")
	strSQL = "SELECT a.numero, a.nombre, a.documento, a.cuil, a.domicilio, a.telefono, a.codigo, d.localidad"
	strSQL = strSQL & " FROM afili a INNER JOIN dat_post d ON a.codigo = d.codigo"
	strSQL = strSQL & " WHERE a.codigo='" & Session("cp") & "' and a.numero <> -1 and a.numero <> -2 and a.estado= 'S'"
	strSQL = strSQL & " ORDER BY " & order
	objRS.PageSize = mostrar
	objRS.CacheSize = mostrar
	objRS.Open strSQL, OpenConnection, 3, 1
	If Not objRS.EOF Then loc = objRS("localidad")
	
End If
%>
<html>
<head>
<title>Nómina de Afiliados de <%=request.querystring("loc")%></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript">
<!--

function MM_callJS(jsStr) { //v2.0
  return eval(jsStr)
}
//-->
</script>
</head>
<body bgcolor="#FFFFFF" text="#000000" onLoad="MM_callJS('javascript:print()');MM_callJS('javascript:history.back(-1)')">
<div align="left"> 
  <p align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"> 
    <% 
if paso=1 then
	'contamos las páginas que se formaron con la variable mostrar.
	cant_paginas = objRS.PageCount
	' Si el pedido de página cae afuera del rango,
	' lo modificamos para que caiga adentro
	If pagina_actual > cant_paginas Then pagina_actual = cant_paginas
	If pagina_actual < 1 Then pagina_actual = 1

	' Si la cantidad de páginas da 0 es que no hay registros... por eso este IF
	If cant_paginas = 0 Then
		Response.Write "No hay Registros..."
	Else
		' Nos movemos a la página elegida
		objRS.AbsolutePage = pagina_actual
		' Mostramos el dato de que página estamos... %>
    </font></p>
</div>
<% do while pagina_actual <= cant_paginas And Not objRS.EOF
  	  registro_mostrado = 0 %>
<br>
<table width="96%" border="0" cellspacing="0" cellpadding="0">
  <tr> 
    <td valign="middle" align="center"> <p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">&nbsp;</font> 
        <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><img src="../../images/inside_r8_c10.gif" width="323" height="67" align="top"></font></p>
      <p><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><strong>N&oacute;mina 
        de Afiliados de <%=request.querystring("loc")%></strong></font></p></td>
  </tr>
</table>
<br>
<table border=1 width="624" cellpadding="0" cellspacing="0" align="center">
  <tr> 
    <th width="51"><font face="Verdana, Arial, Helvetica, sans-serif" size="1">Numero</font></th>
    <th width="190"><font face="Verdana, Arial, Helvetica, sans-serif" size="1">Nombre</font></th>
    <th width="79"><font face="Verdana, Arial, Helvetica, sans-serif" size="1">Documento</font></th>
    <th width="100"><font face="Verdana, Arial, Helvetica, sans-serif" size="1">Cuil</font></th>
    <th width="192"><font face="Verdana, Arial, Helvetica, sans-serif" size="1">Domicilio</font></th>
  </tr>
  <% registro_mostrado = 0
      Do While registro_mostrado < mostrar And Not objRS.EOF %>
  <tr> 
    <td width="51" height="9"> <div align="right"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">
        <% =objRS("numero") %>
        &nbsp;</font></div></td>
    <td width="190" height="9"> <div align="left"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">&nbsp;
        <% Trim2 objRS("nombre"), 24,24 %>
        </font></div></td>
    <td width="79" height="9"> <div align="right"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">
        <% =objRS("documento") %>
        &nbsp;</font></div></td>
    <td width="100" height="9"> <div align="right"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">
        <% WriteCuil(objRS("cuil")) %>
        &nbsp;</font></div></td>
    <td width="192" height="9"> <div align="left"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">&nbsp;
        <% trim2 objRS("domicilio"), 24, 24 %>
        </font></div></td>
  </tr>
  <% ' Sumamos 1 a los mostrados
			registro_mostrado = registro_mostrado + 1
		    objRS.movenext
			response.flush 
		    loop %>
</table>
<table width="624" height="25" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr> 
    <td width="73%"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">N&oacute;mina 
      de Afiliados de <%=request.querystring("loc")%> ordenado por <b> 
      <% 
if order=1 then
	response.write "Numero" 
elseif order=2 then
	response.write "Nombre" 
elseif order=3 then
	response.write "Documento" 
elseif order=4 then
	response.write "Cuil" 
elseif order=5 then
	response.write "Domicilio" 
end if %>
      </b></font></td>
    <td width="27%"> <div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Página<b> 
        <%= pagina_actual %></b> de<b> <%= cant_paginas %></b></font></div></td>
  </tr>
</table>
<%	'##########  Estos espacios crean el salto de pagina.
	'##########  pero dependen de la marca de la impresora.
	'##########  En mi caso es una impresora Epson 400.
	response.write("<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>")
	'##########  (habia hecho el salto de pagina con javascript pero no hubo caso....!!  No andaba!!... Si ustedes encuentran la solucion a este problema con JS haganmelo saber.. jijiji)
	pagina_actual = pagina_actual + 1
Response.Flush()
	loop %>
<br>
</body>
</html>
#### Head.asp ####

Código:
<% Response.Buffer = True %>

<%
'##############################################################
'## Funciones Publicas 
'## Utilidad: 1) Manejo de Conexion
'##############################################################

'Conexion publica 
Dim objConn
 
'Devuelve una conexion abierta con DSN
Function OpenConnection()
	Set objConn = Server.CreateObject("ADODB.Connection")
	objConn.Open "DSN=sistemB;UID=SA;PWD="
	Set OpenConnection = objConn
End Function

'Cierra la conexion, SI esta ABIERTA.
Sub CloseConnection()
	If Not objConn Is Nothing Then
		objConn.Close
		Set objConn = Nothing
	End If
End Sub

'Da formato al CUIL y lo escribe...
Sub WriteCuil(cuil)
	If IsValid(cuil) Then
		p1 = Left(CStr(cuil),2)
		p2 = Right(CStr(cuil),9)
		p3 = Left(p2,8)
		p4 = Right(p2,1)
		Response.Write p1 : Response.Write "-" : Response.Write p3 : Response.Write "/" : Response.Write p4
	Else
		Response.Write(" ")
	End If
End Sub

Sub Trim2(str, i, r)
	If Len(Trim(str)) >= i Then
		Response.Write Left(str, r) & "..."
	Else
		Response.Write(str)
	End If
End Sub

'Chequea si el CUIT pasado es VALIDO 
Function IsValid(cuit)
	If Not IsNull(cuit) And Len(cuit) > 1 Then
		IsValid = True
	Else
		IsValid = False
	End If
End Function
%>

Estudienlo!!! ... espero que sirva !
Cualquier cosa pregunten.!
__________________
tech-nico.com