none
problema con Crystal Report RRS feed

  • Pregunta

  • Hola estoy haciendo un reporte en crystal report, invoco a un procedimiento almacenado  que contien el siguiente :

    ALTER PROCEDURE [dbo].[SPA_LibroCompras_Reporte]  
    @codemp int,@fechDesde  date, @fechHasta date , @año int 
    as 
    SELECT Numero, c.FecEmi, c.FecVen,td.OrdSun,c.Serie,c.DocNro,p.Ruc,p.NomPer,  
    --1 = dolares  
    (case when c.TipMon='$' then (c.afecto/tc.Venta) else c.afecto  end )as AFECTO,  
    (case when c.TipMon='$' then (igv/tc.Venta) else Igv  end )as IGV,  
    (case when c.TipMon='$' then (inafec/tc.Venta) else inafec  end )as INAFECTO,  
    (case when c.TipMon='$' then (isc/tc.Venta) else isc end )as ISC,  
    (case when c.TipMon='$' then (Total/tc.Venta) else total end )as Total   
    FROM CCOMPRASENC c inner join ATasaCambiaria tc on c.FecEmi=tc.Fecha INNER JOIN ATipoDocumentos td on td.CodTipDoc=c.CodTipDoc  INNER JOIN APersonas P ON p.CodPer=c.CodPer  
    where  AñoPro=@año and c.CodEmp=@codemp and (c.FecEmi between @fechDesde and @fechHasta)  
    ORDER BY FecEmi,p.NomPer,td.OrdSun,Serie,DocNro  
     
     

    y desde visual basic 208 lo llamo asi :

     Dim rP As New CrystalReport1  
          CrpvLibros.RefreshReport()  
          rP.SetParameterValue("@codemp", vEmpresa) 'empresa  

          rP.SetParameterValue("@año", vAñoProceso) ' año de proceso  

          rP.SetParameterValue("@fechDesde", txtFechaIni.Text) 'masketbox  
          rP.SetParameterValue("@fechHasta", txtFechaFin.Text) ' masketbox  
          CrpvLibros.ReportSource = rP  
          CrpvLibros.Show() 

    pero el problema que esta haciendome rabiar jejeje..es el siguiente error:


    File Open Rowset.
    Details:ADO Error Code: 0x
    Source: Microsoft Sql Server Native 10.0
    Description: Incorrect Syntax near the word 'convert'
    SQL STATE :42000
    Native error


    Lo que he podido provar es que sin las fechas funciona muy bien..pero no se como darle solución..de antemano.. Gracias

    desarrollador .NET
    jueves, 12 de marzo de 2009 17:25

Respuestas

  • A mi parecer, sólo es problema de conversión de fechas.

    Los Int32, Int16 son los tipos del CLR (los puedes usar en C# y VB). Integer, en el lenguaje VB.Net), es un alias al tipo Int32 (CLR types). int, en el lenguaje C#, es un alias al tipo Int32 (CLR Types). Es indistinto usar uno de otro. Pero ves que uso de Int32, lo usas en C# y en VB.Net. No hay más diferencia que eso.

    Saludos,
    Sergio Tarrillo - http://sergiot2.com/blog/
    Si la respuesta ha sido de utilidad marca la como respuesta correcta.
    • Marcado como respuesta becavas sábado, 14 de marzo de 2009 2:53
    sábado, 14 de marzo de 2009 2:52

Todas las respuestas

  • Con SQL Profiler has visto que query llega a la base de datos?

    Yo creo que es un problema de conversión de fechas nada más. Hagamos un ejercicio para descartar esto, remueve el filtro de fecha (no lo envies), y verifica si sale el mismo error o funciona bien.

    Saludos,
    Sergio Tarrillo - http://sergiot2.com/blog/
    Si la respuesta ha sido de utilidad marca la como respuesta correcta.
    viernes, 13 de marzo de 2009 3:26
  • como dije sin las fechas  funciona bien...como deberia trabajr las fechas entonces????...gracias
    desarrollador .NET
    viernes, 13 de marzo de 2009 17:18
  •  Facil es un problema de idioma (ahi donde falla la conversión). Por eso es importante, que uses SQL Profiler, para ver que query llega a la base de datos. Usa el queryProfiler, y copia en este hilo el query que llega a la base de datos.

    Otra cosa qeu debes hacer, es antes de pasar el parametro fecha conviertelo a un tipo de dato DateTime:

     
       Dim dtmIni = DateTime.Parse(txtFechaIni.Text);  
       Dim dtmFin = DateTime.Parse(txtFechaFin.Text);  
     
        Dim rP As New CrystalReport1     
          CrpvLibros.RefreshReport()     
          rP.SetParameterValue("@codemp", vEmpresa) 'empresa     
          ' no usar ñ en los nombres de variabvles  
          rP.SetParameterValue("@año", vAniooProceso) ' año de proceso    
       
          rP.SetParameterValue("@fechDesde", dtmIni ) 'masketbox     
          rP.SetParameterValue("@fechHasta", dtmFin) ' masketbox     
          CrpvLibros.ReportSource = rP     
          CrpvLibros.Show()   


    Saludos,
    Sergio Tarrillo - http://sergiot2.com/blog/
    Si la respuesta ha sido de utilidad marca la como respuesta correcta.
    viernes, 13 de marzo de 2009 22:01
  •  hola, estube probando con este proceimiento almacenado:

        ALTER PROCEDURE [dbo].[SPA_LibroCompras_Reporte]  
        @codemp int,@fechDesde  date , @fechHasta date , @año int 
        as 
    set dateformat 'dmy' 
        SELECT Numero, convert(date,c.FecEmi,103)as FecEmi, convert(date,c.FecVen,103)as FecVen,td.OrdSun,c.Serie,c.DocNro,p.Ruc,p.NomPer,  
        --1 = dolares  
        (case when c.TipMon='$' then (c.afecto/tc.Venta) else c.afecto  end )as AFECTO,  
        (case when c.TipMon='$' then (igv/tc.Venta) else Igv  end )as IGV,  
        (case when c.TipMon='$' then (inafec/tc.Venta) else inafec  end )as INAFECTO,  
        (case when c.TipMon='$' then (isc/tc.Venta) else isc end )as ISC,  
        (case when c.TipMon='$' then (Total/tc.Venta) else total end )as Total   
        FROM CCOMPRASENC c inner join ATasaCambiaria tc on c.FecEmi=tc.Fecha INNER JOIN ATipoDocumentos td on td.CodTipDoc=c.CodTipDoc  INNER JOIN APersonas P ON p.CodPer=c.CodPer  
        where  AñoPro=@año and c.CodEmp=@codemp and (convert(date,c.FecEmi,103) between convert(date,@fechDesde ,103)and convert(date,@fechHasta ,103))  
        ORDER BY FecEmi,p.NomPer,td.OrdSun,Serie,DocNro  
     

    El sql server profiler me arroja esto:

    exec "ORIONX_SYX_08"."dbo"."SPA_LibroCompras_Reporte";1 1, CONVERT(DATETIME, '2009-01-01 00:00:00', 120), CONVERT(DATETIME, '2009-03-01 00:00:00', 120), 2009 

    y porque convertir a datetime y no solo date???
    desarrollador .NET
    sábado, 14 de marzo de 2009 2:03
  • Ya no es necesario que le hagas Convert dentro de tu StoreProcedure, por que el dato ya llega como fecha.

    Date (VB), es una referencia al tipo DateTime (CLR type). Es como el Integer, es referncia del Int32. Puedes usar cualquier de los dos.

    Pero se recomiendo usar los CLR Types, para que cuando uses C#, sea indistinto para ti y transparente. Pero es otro tema.

    Saludos,
    Sergio Tarrillo - http://sergiot2.com/blog/
    Si la respuesta ha sido de utilidad marca la como respuesta correcta.
    sábado, 14 de marzo de 2009 2:12
  • Entiendo..
    pero igual no me funciona
    he cambiado de reporteador..ahora uso el reportviewer y alli me va de maravilla..pero quisiera sacarme esa espina del crystal..pero otro lado me intereso lo que dijistes del datetime, justamente hiba a lanzar una pregunta sobre la diferencias que puede existir entre:

    int64=>long
    int32=>integer
    int16=> short
    .
    .
    .
    .
    .
    etc


    desarrollador .NET
    sábado, 14 de marzo de 2009 2:19
  • A mi parecer, sólo es problema de conversión de fechas.

    Los Int32, Int16 son los tipos del CLR (los puedes usar en C# y VB). Integer, en el lenguaje VB.Net), es un alias al tipo Int32 (CLR types). int, en el lenguaje C#, es un alias al tipo Int32 (CLR Types). Es indistinto usar uno de otro. Pero ves que uso de Int32, lo usas en C# y en VB.Net. No hay más diferencia que eso.

    Saludos,
    Sergio Tarrillo - http://sergiot2.com/blog/
    Si la respuesta ha sido de utilidad marca la como respuesta correcta.
    • Marcado como respuesta becavas sábado, 14 de marzo de 2009 2:53
    sábado, 14 de marzo de 2009 2:52
  • gracias
    desarrollador .NET
    sábado, 14 de marzo de 2009 2:54