none
Cannot call methods on int :( RRS feed

  • Pregunta

  • Buenas estoy tratando de hacer un procedimiento almacenado que me sume la cantidad de ventas qeu pasan por obra social, me tiene que sumar el total y contar la cantidad de ventas separadas por Obra social y dentro de la obra social por plan.

    yo tengo asi el procedimiento.

    cREATE PROCEDURE [dbo].[usp_Modelo_FEstadisticas_VtaObraSocial]
    
    			(@desde date,
    			@hasta date,
    			@ID int)
    
    AS
    BEGIN
       SELECT  
       tblObraSocial.Nombre as 'Obra Social',
       tblPlan.Nombre as 'Plan',
       count(tblVenta.Fecha) AS Ventas,
       sum(tblVenta.Importe) as 'Total Ventas'   
    	   
        FROM 
    	   tblObraSocial
    	   inner join tblPlan on tblPlan.ObraSocialID = tblObraSocial.id
    	   INNER JOIN tblVenta on tblVenta.PlanId = tblPlan.Id.VentaID
    	 where
    	 tblVenta.Fecha >= @desde AND tblVenta.Fecha < DATEADD(DAY, 1, @hasta)
    	 and tblObraSocial.Id = @ID
    	   GROUP BY
        tblObraSocial.Nombre
    
    END
    

     y me tira este error

    "Msg 258, Level 15, State 1, Procedure usp_Modelo_FEstadisticas_VtaObraSocial, Line 22 [Batch Start Line 7]
    Cannot call methods on int."

    alguna ayudita?

    muchas gracias

    lunes, 12 de junio de 2017 14:10

Respuestas

  • Cuanto menos noto dos errores:

    - Estas equivocando la manera de calificar un objeto:

    INNER JOIN tblVenta ON tblVenta.PlanId = tblPlan.Id.VentaID

    - Si quieres mostrar la columna 'Nombre' en la lista de selección debe participar en el criterio de agrupación:

    GROUP BY tblObraSocial.Nombre, tblPlan.Nombre;


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Propuesto como respuesta Joyce_ACModerator lunes, 12 de junio de 2017 17:54
    • Marcado como respuesta Ickaruz martes, 13 de junio de 2017 14:34
    lunes, 12 de junio de 2017 14:35
  • Hola Ickaruz:

    Creo que el error, se da justamente por la linea que te recomienda cambiar Williams.

    E igualmente valida el tema del DateAdd. yo diria que podría ser un script como:

    cREATE PROCEDURE [dbo].[usp_Modelo_FEstadisticas_VtaObraSocial]
    (@desde date,
    @hasta date,
    @ID int)
    
    AS
    BEGIN
    
     SET @hasta = DATEADD(dd, 1, @hasta);
    
     SELECT  
       tblObraSocial.Nombre as 'Obra Social', //por aparecer acá necesita ir en el Group by.
       tblPlan.Nombre as 'Plan', //por aparecer acá necesita ir en el Group by.
       COUNT(tblVenta.Fecha) AS Ventas,
       SUM(tblVenta.Importe) as 'Total Ventas'	   
     FROM 
       tblObraSocial 
        INNER JOIN tblPlan 
          ON tblPlan.ObraSocialID = tblObraSocial.id
        INNER JOIN tblVenta 
          ON tblVenta.PlanId = tblPlan.VentaID
     WHERE
      tblVenta.Fecha >= @desde AND tblVenta.Fecha < @hasta
      AND tblObraSocial.Id = @ID
     GROUP BY
        tblObraSocial.Nombre, tblPlan.Nombre
    
    END
    Saludos cordiales,


    Camilo Villa

    • Propuesto como respuesta Joyce_ACModerator lunes, 12 de junio de 2017 17:54
    • Marcado como respuesta Ickaruz martes, 13 de junio de 2017 14:34
    lunes, 12 de junio de 2017 16:18

Todas las respuestas

  • Cuanto menos noto dos errores:

    - Estas equivocando la manera de calificar un objeto:

    INNER JOIN tblVenta ON tblVenta.PlanId = tblPlan.Id.VentaID

    - Si quieres mostrar la columna 'Nombre' en la lista de selección debe participar en el criterio de agrupación:

    GROUP BY tblObraSocial.Nombre, tblPlan.Nombre;


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Propuesto como respuesta Joyce_ACModerator lunes, 12 de junio de 2017 17:54
    • Marcado como respuesta Ickaruz martes, 13 de junio de 2017 14:34
    lunes, 12 de junio de 2017 14:35
  • Hola Ickaruz:

    Creo que el error, se da justamente por la linea que te recomienda cambiar Williams.

    E igualmente valida el tema del DateAdd. yo diria que podría ser un script como:

    cREATE PROCEDURE [dbo].[usp_Modelo_FEstadisticas_VtaObraSocial]
    (@desde date,
    @hasta date,
    @ID int)
    
    AS
    BEGIN
    
     SET @hasta = DATEADD(dd, 1, @hasta);
    
     SELECT  
       tblObraSocial.Nombre as 'Obra Social', //por aparecer acá necesita ir en el Group by.
       tblPlan.Nombre as 'Plan', //por aparecer acá necesita ir en el Group by.
       COUNT(tblVenta.Fecha) AS Ventas,
       SUM(tblVenta.Importe) as 'Total Ventas'	   
     FROM 
       tblObraSocial 
        INNER JOIN tblPlan 
          ON tblPlan.ObraSocialID = tblObraSocial.id
        INNER JOIN tblVenta 
          ON tblVenta.PlanId = tblPlan.VentaID
     WHERE
      tblVenta.Fecha >= @desde AND tblVenta.Fecha < @hasta
      AND tblObraSocial.Id = @ID
     GROUP BY
        tblObraSocial.Nombre, tblPlan.Nombre
    
    END
    Saludos cordiales,


    Camilo Villa

    • Propuesto como respuesta Joyce_ACModerator lunes, 12 de junio de 2017 17:54
    • Marcado como respuesta Ickaruz martes, 13 de junio de 2017 14:34
    lunes, 12 de junio de 2017 16:18
  • Hola:

    Otra cosa a tener en cuenta, es si tu base de datos está "Case Sensitive" y "Ascii Sensitive"... porque puede ser que se confunde con la funcion DAY, que retorna un entero, con el parámetro "datepart" de la función "DATEADD".

    Saludos cordiales.


    Camilo Villa

    lunes, 12 de junio de 2017 16:37
  • Muchas gracias por responder, esta noche cuando llegue a casa me pongo a trabajar en esto con sus recomendaciones!

    Me he equivocado en lo que me marcas Willams, no me habia dado cuenta de que lo habia declarado asi ! je

    lunes, 12 de junio de 2017 20:04