lunes, 28 de noviembre de 2011

Problemas con Crystal Reports v8 (CR8) en Windows 7 de 64 bits (Win 7 x64)

 

Problemática

Se han suscitado en algunos proyectos en los que he estado involucrado diversos problemas relacionados a este tipo de instalación.

Como antecedentes y en específico, la aplicación es una Windows Application, esta desarrollada en VB NET (VS 2008) usando CR 8 con reportes que en su mayoría usan el controlador nativo de SQL server y su fuente de información en procedimientos almacenados (Stored procedures) desarrollador den T-SQL sobre la plataforma de base de datos SQL Server 2008.

La aplicación se ha instalado sobre diversos sistemas operativos(De 32 y 64 bits), que van desde Windows XP (Service pack 1), hasta Win 7.

La mayor cantidad de problemas han brotado sobre Windows vista y Windows 7 de 64 bits. El listado de problemas es tan extenso como variado y no será incluido explícitamente en esta publicación, pero por nombras las mas sobresalientes:

  • Errores indeterminados en cuya descripción se nombre la palabra HRESULT.
  • Errores nativos de Crystal Reports:
    • 20599
    • 20534
    • 20537
  • Errores de pre visualización:
    • Se despliega el reporte en blanco
    • Se intenta desplegar el reporte pero se queda inhibido (Pasmado)
    • Se pre visualiza momentáneamente el reporte cerrándose fracciones de segundo después Efecto Blink (Parpadeo)

 

Recomendaciones

 

A continuación se listan las recomendaciones que me han llevado a solucionar la mayoría (Prácticamente la totalidad) de los errores reportados o detectados en este escenario:

  • Quitar el prefijo “PROC(“ en la propiedad del Database/ Set Location de los reportes
  • Que el controlador utilizado en algún sub reporte no coincida con el del reporte que lo contiene. Por ejemplo: el controlador del reporte es OLEDB y el controlador del sub – reporte es SQL.
  • Que el procedimiento almacenado de la base de datos no cuenta con las siguientes prácticas
    • Lectura sucia masiva al inicio del procedimiento (SET TRANSACTION ISOLATION LEVEL READUNCOMMITTED)
    • Conteo de filas apagado en procedimientos que arrojan mas de un resultado (SET NOCOUNT ON)
    • Manejo explícito en tablas temporales de:
      • Nulos
      • Idioma (COLLATION)
      • Tipo de dato
    • Creación de tablas temporales explícitas [No crearlas al vuelo por medio de una consulta (INSERT - SELECT ó SELECT – INTO)]
    • Manejo constante de la cantidad de atributos de salida, esto quiere decir que no cambie ni la cantidad, tipo o nombre de los atributos o campos de salida resultados del procedimiento.
  • Falta de controladores o librerías para lo cual se debe de correr el paquete redistribuible para 32 bits. CRRedist2008_x86.msi. Se que el instalador es para un sistema operativo de 32 bits, no es un error, y no se debe de instalar el redistribuible para 64 bits aunque parezca en primera instancia lo mas adecuado o correcto, repito "NO” se debe de instalar CRRedist2008_x64, la versión que hace que los reportes funcionen óptimamente es el redistribuible de 32 bits que se menciona al inicio de este punto y de el cual se agrega vínculo de descarga, independientemente si el SO es de x64, lo correcto es el redistribuible de x32.
  • Bajar el UAC (User acceso control) de Windows 7 al mínimo
  • Que el idioma (collate) del servidor y la base de datos sea el mismo (SQL_Latin1_General_CP1_CI_AS)
  • Ejecutar siempre como administrador la aplicación realizando los siguientes pasos:
    • Entrar al menú inicio
    • Seleccionar el acceso directo a la aplicación
    • Dar clic derecho/ Propiedades
    • Elegir en la pestaña de “Compatibilidad”
    • Dar clic en el botón “Cambiar la configuración para todos los usuarios”
    • En el agrupador “Modo de compatibilidad”, seleccionar “Ejecutar este programa en modo de compatibilidad” y seleccionar de la lista desplegable “Windows XP Service Pack 3”
    • En el agrupador “Nivel de privilegio”, seleccionar “Ejecutar este programa como administrador” y dar clic en “Aceptar”
    • Presionar nuevamente el comando “Aceptar” en el cuadro de dialogo de las propiedades
    • Algunos problemas de pre visualización de reportes se solucionan Instalando CR8 completo en el cliente
  • Espero les sea de utilidad.

    jueves, 24 de noviembre de 2011

    ¿Como se si el valor de un campo existe en todas las tablas que contengan dicho campo, si no se en cuantas tablas existe el campo? (Base de datos SQL 2008)

     

    Problemática

    Creo que la propia pregunta nos dice la problemática, pero voy a poner un ejemplo para clarificar las cosas de manera mas puntual.

    Tenemos un ERP con un catálogo de artículos, en la base de datos se cuenta la tabla que sustenta el catálogo mas un sin fin de tablas de apoyo que albergan bitácoras, Kardex, ventas, facturas, etc., etc. dentro de dichas tablas existen relacionados artículos.

    La relacione entre el catálogo de artículos y estas tablas esta establecida por la clava única de cara articulo que se almacena en el campo CveArt.

    Nos solicitan encontrar dentro de la base de datos todos los lugares en los que el artículo con clave 777 se encuentra, y como no conocemos la totalidad de las tablas que contemplan este campo, y mucho menos si el artículo con clave 777 se encuentra allí.

     

    Solución

    Existen varias opciones para realizar esta búsqueda, algunas mas complejas que otras, yo les voy a proporcionar mi solución, la cual ya evaluarán ustedes si es compleja o no.

    Primero descarguen de la siguiente liga un Stored procedure de mi autoría:

    Stored procedure para buscar valores de campos en todas las tablas de una BD

    A continuación anexo el ejemplo de ejecución para el caso de nuestro ejemplo:

     

    EXEC PIRM_SelValCamTabla 'CveArt', 777

    El resultado sería algo similar a lo siguiente

    Contador Tabla Registros
    1 Kardex 23747
    2 Ventas 2110
    3 CatalogoArt 1
    4 Rembolsos 0
    5 Cancelaciones 1
    6 Bitacora 24171
    7 Devoluciones 1
    8 Recibos 0

     

    En donde la primera columna (Contador) es un simple identificador interno de la tabla de paso utilizada para desplegar la información. La segunda es el nombre de la tabla y la tercer es la cantidad de registros encontrados en esa tabla que contienen el valor 777 para el campo CveArt

    Espero les sea de utilidad.

    Problema de páginas en blanco con IE9

     

    Problemática

    Después de instalar IE9 y tratar de navegar, las páginas se cargaban correctamente ya que al pasar el ratón por encima se visualizaba la ayuda contextual de todos los elementos y me permitía inclusive darles CLICK, mas sin embargo la página se quedaba en blanco.

    Solución

     

    ·Cierra todas las sesiones del Internet Explorer.

    · Entra al menú inicio

    · Teclea Opciones de internet

    · Presiona Enter

    · CLICK en la pestaña Opciones Avanzadas

    · Revisa que este seleccionada la opción Usar procesamiento por software en lugar de procesamiento por GPU, la cual esta dentro de la rama Gráficos acelerados

    · CLICK OK

    · Abre el Internet Explorer

    Este TIP se obtuvo de la siguiente liga:

    http://answers.microsoft.com/en-us/ie/forum/ie9-windows_7/ie9-beta-gives-blank-screen/e0167934-da23-4f1f-ac34-c0b5d0891aa9

    Solo fue traducido para su comodidad por un servidor y le agradezco mucho el consejo a

    Steven de Microsoft Answers Support Engineer

    jueves, 17 de noviembre de 2011

    Error: The server could not load DCOM. (Microsoft SQL Server, Error: 7404)


    Problemática
    Al iniciar mi servidor de SQL server 2008 R2 me marcó el siguiente error:
    The server could not load DCOM. (Microsoft SQL Server, Error: 7404)
    ME deja entrar en aparente normalidad pero a la hora de querer restaurar una base de datos el error vuelve suceder y aunque me despliega el cuadro de dialogo correspondiente a la restauración, y me permite ir a buscar el archivo BAK para proceder con la misma, no me despliega el archivo en el listado por lo cual no puedo seleccionara para terminar con el proceso.

    Solución
    Se encendió el servicio del SQL Browser desde: Inicio/ Panel de control/ Herramientas administrativas/ Servicios/ SQL Server Browser. Además de configurarlo para que iniciara de manera automática
    image
    Espero les sea de utilidad.