none
arma una lista para un reporte RRS feed

  • Pregunta

  • buenas tardes

    programadores estoy realizando una  aplicacion de punto de venta tengo un problema como puedo armar una vista ,lista para optener ejemplo todos productos que son CIGARROS = IdSubfamilia = 241 para hacer el cierre de caja

    separar los cierre

    cierre uno  de cigarros

    cierre dos  de productos normales sin cigarros 

     tabla productos

    SELECT [IdProducto]
          ,[CodigoBarras]
          ,[NombreProducto]
          ,[Precio]
          ,[IdMedida]
          ,[Stock]
          ,[IsActivo]
          ,[IdSubFamilia]
          ,[Mercaderia]
          ,[CalcularStock]
          ,[IsGranel]
      FROM [dbo].[PRODUCTOS]
    GO
    


    esta es la vista que me hace el cierre normal pero incluye todo ahora debo separlar los productos la vista se llama Vi_Caja

    funciona pero debo separlos ahora

    ELECT [IdCaja]
          ,[Fecha]
          ,[Importe]
          ,[IdTipoMovimiento]
          ,[IdConcepto]
          ,[IdTipoDocumento]
          ,[IdCajero]
          ,[IdMediodePago]
          ,[NumDocumento]
          ,[IdTurno]
          ,[IdTPV]
          ,[Entregado]
          ,[Vuelto]
          ,[FechaReg]
      FROM [dbo].[CAJA]
    

    tablas que arma la vista MP = Tabla Medios de Pago , C = CAJA, CC = conceptosCajas , TT= TipoDocumento ,u = Usuario

    SELECT        C.IdCaja, C.Fecha, C.Importe, C.IdTipoMovimiento, C.IdConcepto, CC.Descripcion, C.IdTipoDocumento, TD.Nombre, C.IdCajero, U.NombreUsuario, C.IdMediodePago, 
                             MP.NombreMediodePago, C.NumDocumento, C.IdTurno, C.IdTPV, dbo.PRODUCTOS.IdSubFamilia
    FROM            dbo.CAJA AS C INNER JOIN
                             dbo.ConceptosCaja AS CC ON C.IdConcepto = CC.IdConcepto INNER JOIN
                             dbo.TIPO_DOCUMENTO AS TD ON C.IdTipoDocumento = TD.IdTipoDocumento INNER JOIN
                             dbo.Usuarios AS U ON C.IdCajero = U.IdUsuario INNER JOIN
                             dbo.MediosdePago AS MP ON C.IdMediodePago = MP.IdMediodePago 

    public List<Vi_Caja>GetCierres(DateTime FechaCierre,int IdTurno,int IdTPV)
            {
                DAL.IRepository repository = new Modelo.Repository();
                try
                {
                    var cierres = repository.FindEntitySet<Vi_Caja>(x => x.Fecha.Year == FechaCierre.Year && x.Fecha.Month==FechaCierre.Month && x.Fecha.Day==FechaCierre.Day && x.IdTurno==IdTurno && x.IdTPV==IdTPV).ToList();
                    return cierres;
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
            }

    a qui traigo los datos para el cierre de caja crystal report

    private void BtnAceptar_Click(object sender, EventArgs e)
            {
                try
                {
                    oRepo.Load(Application.StartupPath + @"\Reportes\RptCierreCaja.rpt");
                    oDatos.DataSource = objCaja.GetCierres(Convert.ToDateTime(DtpFechaCierre.Value),idTurno,idTPV);
                    if(oDatos.Count==0)
                    {
                        MessageBox.Show("No existen datos en estas fechas", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        return;
                    }
                    oRepo.SetDataSource(oDatos);
                    crystalReportViewer1.ReportSource = oRepo;
                    BtnImprimir.Enabled = true;
                    
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

    martes, 29 de enero de 2019 15:14

Todas las respuestas

  • No estoy seguro de entender el problema, parece que queres filtrar por el campo IdSubFamilia, si es así solo habría que agregar ese parámetro a la función GetCierres. Suponiendo que en la clase Vi_Caja haya una propiedad que se llame IdSubFamilia que se mapea con el campo del mismo nombre en la BD, sería algo asi:

    public List<Vi_Caja>GetCierres(DateTime FechaCierre,int IdTurno,int IdTPV, int idSubFam)
            {
                DAL.IRepository repository = new Modelo.Repository();
                try
                {
                    var cierres = repository.FindEntitySet<Vi_Caja>(x => x.Fecha.Year == FechaCierre.Year && x.Fecha.Month==FechaCierre.Month && x.Fecha.Day==FechaCierre.Day && x.IdTurno==IdTurno && x.IdTPV==IdTPV && x.IdSubFamilia==idSubFam).ToList();
                    return cierres;
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
            }

    y luego le pasas también ese parámetro, para el caso del cigarro sería:

    private void BtnAceptar_Click(object sender, EventArgs e)
    {
        int idsubfamilia = 241;
          ...
        oDatos.DataSource = objCaja.GetCierres(DtpFechaCierre.Value, idTurno, idTPV, idsubfamilia);
         ...
    }
    La conversión de fecha no hace falta porque DtpFechaCierre.Value ya devuelve un objeto DateTime.




    miércoles, 30 de enero de 2019 0:21
  • muchas por tomarte el tiempo de el leer pero el problema ese que no esta el campo idsubfamilia en la vista no se como agregarlo a la vista filtra como dices tu gracias Antiwork

    miércoles, 30 de enero de 2019 16:43
  • ¿Porqué no compartes la definición completa de Vi_Caja? Si te fijás en la consulta sql está el campo dbo.Productos.IdSubfamilia, es medio raro que se lo incluya en la consulta si después no se mapéa con ninguna propiedad.
    jueves, 31 de enero de 2019 0:00
  • gracias por responder te explico todo el proceso como lo hago para que captes la idea antiwork

    primer paso formulario de venta 

    tablas que las componen venta y venta_detalles (en venta_detalles agreague el campo idsubfmalia ) al presionar f10 me grabas los datos en la tabla ventas y venta_detalles luego se va a un formulario que se llama caja

    USE [SISVENTASFACULTAD]
    GO
    
    SELECT [IdDetalle]
          ,[IdVenta]
          ,[IdProducto]
          ,[CodigoBarras]
          ,[NombreProducto]
          ,[Precio]
          ,[Cantidad]
          ,[PorcentajeIVA]
          ,[FechaReg]
          ,[IdSubFamilia]
      FROM [dbo].[Venta_Detalles]
    GO



    tabla caja 

    USE [SISVENTASFACULTAD]
    GO

    SELECT [IdCaja]
          ,[Fecha]
          ,[Importe]
          ,[IdTipoMovimiento]
          ,[IdConcepto]
          ,[IdTipoDocumento]
          ,[IdCajero]
          ,[IdMediodePago]
          ,[NumDocumento]
          ,[IdTurno]
          ,[IdTPV]
          ,[Entregado]
          ,[Vuelto]
          ,[FechaReg]
      FROM [dbo].[CAJA]
    GO

    en esta tabla caja graba los datos de la caja tipo de documento idcajero ,

    pero como puedo armar una vista que permita filtar por idsusfamailia tendria que agregar el idsufamilia a la tabla caja ?

    tablas que arma la vista VI_CAJA  MP = Tabla Medios de Pago , C = CAJA, CC = conceptosCajas , TT= TipoDocumento ,u = Usuario

    SELECT        C.IdCaja, C.Fecha, C.Importe, C.IdTipoMovimiento, C.IdConcepto, CC.Descripcion, C.IdTipoDocumento, TD.Nombre, C.IdCajero, U.NombreUsuario, C.IdMediodePago, 
                             MP.NombreMediodePago, C.NumDocumento, C.IdTurno, C.IdTPV, dbo.PRODUCTOS.IdSubFamilia
    FROM            dbo.CAJA AS C INNER JOIN
                             dbo.ConceptosCaja AS CC ON C.IdConcepto = CC.IdConcepto INNER JOIN
                             dbo.TIPO_DOCUMENTO AS TD ON C.IdTipoDocumento = TD.IdTipoDocumento INNER JOIN
                             dbo.Usuarios AS U ON C.IdCajero = U.IdUsuario INNER JOIN
                             dbo.MediosdePago AS MP ON C.IdMediodePago = MP.IdMediodePago 

    • Editado djnilo jueves, 31 de enero de 2019 14:49
    jueves, 31 de enero de 2019 14:38
  • Es necesario ver la clase Vi_Caja (que vos llamás vista), No la consulta SQL (SELECT C.IdCaja, ...), esa consulta sirve para obtener los datos de la base de datos luego, por cada registro obtenido se crea un objeto de la clase Vi_Caja y, tipicamente, cada columna se mapea con una propiedad. 

    Además, fijate que el datasource del reporte lo cargas por medio de la función GetCierre, que devuelve una lista de objetos de la clase Vi_Caja (List<Vi_Caja>).

    La definición del la clase podría empezar con algo así:

    public class Vi_Caja
    {
         //aqui va: constructores, propiedades, funciones, etc
    }

    Si con esto no comprendés  que la clave de tu problema está en esa clase, me declaro absolutamente incapaz para persuadir. jajjaj. Saludos


    • Editado AntiWork sábado, 2 de febrero de 2019 1:48
    sábado, 2 de febrero de 2019 1:42
  • gracias por responder AntiWork

    esta clase

    /------------------------------------------------------------------------------
    // <auto-generated>
    //     Este código se generó a partir de una plantilla.
    //
    //     Los cambios manuales en este archivo pueden causar un comportamiento inesperado de la aplicación.
    //     Los cambios manuales en este archivo se sobrescribirán si se regenera el código.
    // </auto-generated>
    //------------------------------------------------------------------------------
    
    namespace Entities
    {
        using System;
        using System.Collections.Generic;
        
        public partial class Vi_Caja
        {
            public int IdCaja { get; set; }
            public System.DateTime Fecha { get; set; }
            public decimal Importe { get; set; }
            public int IdTipoMovimiento { get; set; }
            public int IdConcepto { get; set; }
            public string Descripcion { get; set; }
            public int IdTipoDocumento { get; set; }
            public string Nombre { get; set; }
            public int IdCajero { get; set; }
            public string NombreUsuario { get; set; }
            public int IdMediodePago { get; set; }
            public string NombreMediodePago { get; set; }
            public int NumDocumento { get; set; }
            public int IdTurno { get; set; }
            public int IdTPV { get; set; }
        }
    }
    
    como vez no esta idSubFamilia hay

    domingo, 3 de febrero de 2019 19:42
  • Ahora veo el problema: la aplicación que te generó esa clase no le agregó esa propiedad porque no hay ninguna relación entre la tabla Caja y la tabla Venta_Detalles ni con la tabla Productos. 

    La consulta que mostrás :

    SELECT        C.IdCaja, C.Fecha, C.Importe, C.IdTipoMovimiento, C.IdConcepto, CC.Descripcion, C.IdTipoDocumento, TD.Nombre, C.IdCajero, U.NombreUsuario, C.IdMediodePago, 
                             MP.NombreMediodePago, C.NumDocumento, C.IdTurno, C.IdTPV, dbo.PRODUCTOS.IdSubFamilia
    FROM            dbo.CAJA AS C INNER JOIN
                             dbo.ConceptosCaja AS CC ON C.IdConcepto = CC.IdConcepto INNER JOIN
                             dbo.TIPO_DOCUMENTO AS TD ON C.IdTipoDocumento = TD.IdTipoDocumento INNER JOIN
                             dbo.Usuarios AS U ON C.IdCajero = U.IdUsuario INNER JOIN
                             dbo.MediosdePago AS MP ON C.IdMediodePago = MP.IdMediodePago 

    debería darte error al ejecutarla porque en la parte del "FROM" no aparece la tabla Productos, por lo tanto no podes seleccionar ningún campo de esa tabla. Para poder agregarla deberías hacer un INNER JOIN entre las tablas "Caja" y "Productos" o bien entre "Caja" y "Venta_Detalles", pero para eso debe haber un campo que las relacione, por ejemplo que en la tabla "Caja" este el Campo IdProducto o "IdDetalle"

    Es decir, la solución está en el diseño de la base de datos.


    • Editado AntiWork domingo, 3 de febrero de 2019 22:49
    domingo, 3 de febrero de 2019 22:46