示例#1
0
 public void RecibirNovedades()
 {
     try
     {
         WS.Sincronizacion ws = new WS.Sincronizacion();
         ws.Url = cedForecastWSRUL;
         WS.Forecast[] lista = ws.RecibirProyeccionAnual(periodo);
         contador = 0;
         contadorTope = lista.Length;
         CedForecastDB.Forecast db = new CedForecastDB.Forecast(sesion);
         db.EliminarProyectadoAnual(periodo);
         for (contador = 0; contador < contadorTope; contador++)
         {
             CedForecastEntidades.Forecast elemento = new CedForecastEntidades.Forecast();
             elemento.IdTipoPlanilla = lista[contador].IdTipoPlanilla;
             elemento.IdCuenta = lista[contador].IdCuenta;
             elemento.IdCliente = lista[contador].Cliente.Id;
             elemento.IdArticulo = lista[contador].Articulo.Id;
             elemento.IdPeriodo = lista[contador].IdPeriodo;
             elemento.Cantidad = lista[contador].Cantidad;
             db.Crear(elemento);
         }
     }
     catch (Exception Ex)
     {
         errores.Add(Ex);
     }
 }
示例#2
0
 public static DataTable Financiero(string IdPeriodo, string TipoReporte, string ListaClientes, CedEntidades.Sesion Sesion, out List<CedForecastEntidades.Advertencia> Advertencias)
 {
     Advertencias = new List<CedForecastEntidades.Advertencia>();
     //Validacion de parámetros
     if (ListaClientes == String.Empty)
     {
         throw new Microsoft.ApplicationBlocks.ExceptionManagement.Validaciones.ValorNoInfo("Cliente(s)");
     }
     //Leer datos Forecast
     CedForecastDB.Forecast db = new CedForecastDB.Forecast(Sesion);
     DataSet ds = db.LeerDatosParaFinanciero(IdPeriodo, TipoReporte, ListaClientes);
     DataTable dtZona;
     switch (TipoReporte)
     {
         case "Zona-Cliente":
             dtZona = ds.Tables[0];
             break;
     }
     DataTable dtClientes = ds.Tables[1];
     DataTable dtDatos = ds.Tables[2];
     //Leer datos Bejerman
     List<CedForecastEntidades.Bejerman.Zona> zonas = new CedForecastDB.Bejerman.Zona(Sesion).LeerLista();
     List<CedForecastEntidades.Bejerman.Clientes> clientes = new CedForecastDB.Bejerman.Clientes(Sesion).LeerLista();
     
     //Crear crosstab
     DataTable dt = new DataTable();
     dt.Columns.Add(ClonarColumna(dtDatos.Columns["Zona"]));     //Zona
     dt.Columns.Add(ClonarColumna(dtDatos.Columns["Cliente"]));
     dt.Columns.Add(ClonarColumna(dtDatos.Columns["TipoDato"]));
     dt.Columns.Add(ClonarColumna(dtDatos.Columns["Descr"]));
     dt.Columns.Add(ClonarColumna(dtDatos.Columns["FecVto"]));
     DateTime fechaInicio = Convert.ToDateTime("01/" + IdPeriodo.Substring(4, 2) + "/" + IdPeriodo.Substring(0, 4));
     DateTime periodoColumna = fechaInicio;
     for (int i = 0; i < 12; i++)
     {
         dt.Columns.Add(ClonarColumna(dtDatos.Columns["Saldo"], " " + periodoColumna.ToString("MM-yyyy"), " " + periodoColumna.ToString("MM-yyyy")));
         periodoColumna = periodoColumna.AddMonths(1);
     }
     dt.Columns.Add(ClonarColumna(dtDatos.Columns["Saldo"], "Total Saldo", "Total Saldo"));
     
     //Llenar crosstab
     string claveAnterior = String.Empty;
     for (int i = 0; i < dtDatos.Rows.Count; i++)
     {
         //string claveActual = Convert.ToString(dtDatos.Rows[i]["Zona"]) + Convert.ToString(dtDatos.Rows[i]["Cliente"]);
         //if (claveAnterior != claveActual)
         //{
             //Zona
             DataRow dr = dt.NewRow();
             CedForecastEntidades.Bejerman.Zona zona = zonas.Find(delegate(CedForecastEntidades.Bejerman.Zona c) { return c.Zon_Cod == Convert.ToString(dtDatos.Rows[i]["Zona"]); });
             if (zona == null)
             {
                 dr["Zona"] = Convert.ToString(dtDatos.Rows[i]["Zona"]) + "-<<<Desconocido>>>";
                 Advertencias.Add(new CedForecastEntidades.Advertencia("CTabAC-01", "Descripción no encontrada para la zona " + Convert.ToString(dtDatos.Rows[i]["Zona"]), CedForecastEntidades.Advertencia.TipoSeveridad.Advertencia));
             }
             else
             {
                 dr["Zona"] = Convert.ToString(dtDatos.Rows[i]["Zona"]) + "-" + zona.Zon_Desc;
             }
             //Cliente
             CedForecastEntidades.Bejerman.Clientes cliente = clientes.Find(delegate(CedForecastEntidades.Bejerman.Clientes c) { return c.Cli_Cod == Convert.ToString(dtDatos.Rows[i]["Cliente"]); });
             if (cliente == null)
             {
                 dr["Cliente"] = Convert.ToString(dtDatos.Rows[i]["Cliente"]) + "-<<<Desconocido>>>";
                 Advertencias.Add(new CedForecastEntidades.Advertencia("CTabAC-02", "Descripción no encontrada para el cliente " + Convert.ToString(dtDatos.Rows[i]["Cliente"]), CedForecastEntidades.Advertencia.TipoSeveridad.Advertencia));
             }
             else
             {
                 dr["Cliente"] = Convert.ToString(dtDatos.Rows[i]["Cliente"]) + "-" + cliente.Cli_RazSoc;
             }
             dr["FecVto"] = Convert.ToString(dtDatos.Rows[i]["FecVto"]);
             dr["TipoDato"] = Convert.ToString(dtDatos.Rows[i]["TipoDato"]);
             dr["Descr"] = Convert.ToString(dtDatos.Rows[i]["Descr"]);
             dt.Rows.Add(dr);
             //claveAnterior = claveActual;
         //}
         decimal valor = Convert.ToDecimal(dtDatos.Rows[i]["Saldo"]);
         string periodo = Convert.ToDateTime(dtDatos.Rows[i]["FecVto"]).ToString("MM-yyyy");
         if (Convert.ToInt32(Convert.ToDateTime(dtDatos.Rows[i]["FecVto"]).ToString("yyyyMM")) < Convert.ToInt32(fechaInicio.ToString("yyyyMM")))
         {
             if (dt.Rows[dt.Rows.Count - 1][" " + fechaInicio.ToString("MM-yyyy")].ToString() == "")
             {
                 dt.Rows[dt.Rows.Count - 1][" " + fechaInicio.ToString("MM-yyyy")] = "0";
             }
             dt.Rows[dt.Rows.Count - 1][" " + fechaInicio.ToString("MM-yyyy")] = Convert.ToDecimal(dt.Rows[dt.Rows.Count - 1][" " + fechaInicio.ToString("MM-yyyy")]) + valor;
         }
         else if (Convert.ToInt32(Convert.ToDateTime(dtDatos.Rows[i]["FecVto"]).ToString("yyyyMM")) > Convert.ToInt32(fechaInicio.AddMonths(11).ToString("yyyyMM")))
         {
             if (dt.Rows[dt.Rows.Count - 1][" " + fechaInicio.AddMonths(11).ToString("MM-yyyy")].ToString() == "")
             {
                 dt.Rows[dt.Rows.Count - 1][" " + fechaInicio.AddMonths(11).ToString("MM-yyyy")] = "0";
             }
             dt.Rows[dt.Rows.Count - 1][" " + fechaInicio.AddMonths(11).ToString("MM-yyyy")] = Convert.ToDecimal(dt.Rows[dt.Rows.Count - 1][" " + fechaInicio.AddMonths(11).ToString("MM-yyyy")]) + valor;
         }
         else
         {
             if (dt.Rows[dt.Rows.Count - 1][" " + periodo].ToString() == "")
             {
                 dt.Rows[dt.Rows.Count - 1][" " + periodo] = "0";
             }
             dt.Rows[dt.Rows.Count - 1][" " + periodo] = Convert.ToDecimal(dt.Rows[dt.Rows.Count - 1][" " + periodo]) + valor;
         }
         if (dt.Rows[dt.Rows.Count - 1]["Total Saldo"].ToString() == "")
         {
             dt.Rows[dt.Rows.Count - 1]["Total Saldo"] = "0";
         }
         dt.Rows[dt.Rows.Count - 1]["Total Saldo"] = Convert.ToDecimal(dt.Rows[dt.Rows.Count - 1]["Total Saldo"]) + valor;
         dt.AcceptChanges();
     }
     return dt;
 }
示例#3
0
        public static DataTable ResumenArgentinaXZonas(string PeriodoDesde, string PeriodoHasta, string TipoReporte, string ListaArticulos, string ListaClientes, string ListaVendedores, bool Valorizado, CedEntidades.Sesion Sesion, out List<CedForecastEntidades.Advertencia> Advertencias)
        {
            Advertencias = new List<CedForecastEntidades.Advertencia>();
            //Validacion de parámetros
            if (ListaArticulos == String.Empty)
            {
                throw new Microsoft.ApplicationBlocks.ExceptionManagement.Validaciones.ValorNoInfo("Articulo(s)");
            }
            if (ListaClientes == String.Empty)
            {
                throw new Microsoft.ApplicationBlocks.ExceptionManagement.Validaciones.ValorNoInfo("Cliente(s)");
            }
            //Leer datos Forecast
            CedForecastDB.Forecast db = new CedForecastDB.Forecast(Sesion);
            DataSet ds = db.LeerDatosParaResumenArgentinaXZonas(PeriodoDesde, PeriodoHasta, TipoReporte, ListaArticulos, ListaClientes, ListaVendedores);
            DataTable dtZona;
            DataTable dtVendedor;
            switch (TipoReporte)
            {
                case "Zona-Familia-Articulo":
                    dtZona = ds.Tables[0];
                    break;
                case "Vendedor-Familia-Articulo":
                    dtVendedor = ds.Tables[0];
                    break;
            }
            DataTable dtFamilia = ds.Tables[1];
            DataTable dtArticulos = ds.Tables[2];
            DataTable dtDatos = ds.Tables[3];
            //Leer datos Bejerman
            List<CedForecastEntidades.Bejerman.Zona> zonas = new CedForecastDB.Bejerman.Zona(Sesion).LeerLista();
            List<CedForecastEntidades.Bejerman.Vendedor> vendedores = new CedForecastDB.Bejerman.Vendedor(Sesion).LeerLista();
            List<CedForecastEntidades.Bejerman.Articulos> articulos = new CedForecastDB.Bejerman.Articulos(Sesion).LeerListaConPrecios();
            List<CedForecastEntidades.ArticuloInfoAdicional> familiaXArticulos = new CedForecastDB.ArticuloInfoAdicional(Sesion).LeerLista();
            //Crear crosstab
            DataTable dt = new DataTable();
            dt.Columns.Add(ClonarColumna(dtDatos.Columns[0])); //Empresa
            dt.Columns.Add(ClonarColumna(dtDatos.Columns[1])); //Zona o Vendedor
            dt.Columns.Add(ClonarColumna(dtDatos.Columns["Familia"]));
            dt.Columns.Add(ClonarColumna(dtDatos.Columns["Articulo"]));
            string idPeriodo = "";
            DateTime periodoDesde = Convert.ToDateTime("01/" + PeriodoDesde.Substring(4, 2) + "/" + PeriodoDesde.Substring(0, 4));
            DateTime periodoHasta = Convert.ToDateTime("01/" + PeriodoHasta.Substring(4, 2) + "/" + PeriodoHasta.Substring(0, 4));
            int meses = periodoHasta.Month - periodoDesde.Month + 1;
            int años = periodoHasta.Year - periodoDesde.Year;
            meses += años * 12;
            idPeriodo = periodoDesde.ToString("yyyyMM");
            for (int i = 1; i <= meses; i++)
            {
                dt.Columns.Add(ClonarColumna(dtDatos.Columns["Cantidad"], "Plan-" + idPeriodo, "Plan-" + idPeriodo));
                dt.Columns.Add(ClonarColumna(dtDatos.Columns["Cantidad"], "Real-" + idPeriodo, "Real-" + idPeriodo));
                idPeriodo = periodoDesde.AddMonths(i).ToString("yyyyMM");
            }
            dt.Columns.Add(ClonarColumna(dtDatos.Columns["Cantidad"], "Total Plan", "Total Plan"));
            dt.Columns.Add(ClonarColumna(dtDatos.Columns["Cantidad"], "Total Real", "Total Real"));
            dt.Columns.Add(ClonarColumna(dtDatos.Columns["Cantidad"], "Desvio Plan", "Desvio Plan"));
            //Llenar crosstab
            string claveAnterior = String.Empty;
            //Buscar Ventas
            CedForecastDB.Bejerman.Ventas dbVentas = new CedForecastDB.Bejerman.Ventas(Sesion);
            List<CedForecastEntidades.Bejerman.Ventas> ventas = dbVentas.LeerParaResumenArgentinaXZonas(TipoReporte, PeriodoDesde, PeriodoHasta, ListaArticulos, ListaClientes, ListaVendedores);
            decimal precio = 0;
            for (int i = 0; i < ventas.Count; i++)
            {
                string familia = "";
                CedForecastEntidades.ArticuloInfoAdicional articuloInfoAdicional = familiaXArticulos.Find(delegate(CedForecastEntidades.ArticuloInfoAdicional c) { return c.IdArticulo == Convert.ToString(ventas[i].Sdvart_CodGen); });
                if (articuloInfoAdicional != null)
                {
                    familia = articuloInfoAdicional.IdFamiliaArticulo;
                }
                DataRow[] drv;
                switch (TipoReporte)
                {
                    case "Zona-Familia-Articulo":
                        drv = dtDatos.Select("Zona = '" + ventas[i].Zona + "' and Articulo = '" + ventas[i].Sdvart_CodGen + "' and Periodo = '" + ventas[i].Periodo + "'");
                        if (drv.Length == 0)
                        {

                            dtDatos.Rows.Add("Empresa", ventas[i].Zona, familia, ventas[i].Sdvart_CodGen, ventas[i].Sdvart_CodGen, ventas[i].Periodo, 0);
                        }
                        break;
                    case "Vendedor-Familia-Articulo":
                        drv = dtDatos.Select("Vendedor = '" + ventas[i].Vendedor + "' and Articulo = '" + ventas[i].Sdvart_CodGen + "' and Periodo = '" + ventas[i].Periodo + "'");
                        if (drv.Length == 0)
                        {
                            dtDatos.Rows.Add("Empresa", ventas[i].Vendedor, familia, ventas[i].Sdvart_CodGen, ventas[i].Sdvart_CodGen, ventas[i].Periodo, 0);
                        }
                        break;
                }
            }
            //Ordenar datos
            switch (TipoReporte)
            {
                case "Zona-Familia-Articulo":
                    dtDatos.DefaultView.Sort = "Zona ASC, Familia ASC, Articulo ASC";
                    break;
                case "Vendedor-Familia-Articulo":
                    dtDatos.DefaultView.Sort = "Vendedor ASC, Familia ASC, Articulo ASC";
                    break;
            }
            
            for (int i = 0; i < dtDatos.DefaultView.Count; i++)
            {
                string claveActual = Convert.ToString(dtDatos.DefaultView[i][1]) + Convert.ToString(dtDatos.DefaultView[i]["Familia"]) + Convert.ToString(dtDatos.DefaultView[i]["Articulo"]);
                if (claveAnterior != claveActual)
                {
                    DataRow dr = dt.NewRow();
                    dr["Empresa"] = "Empresa";
                    CedForecastEntidades.ArticuloInfoAdicional familiaXArticulo = familiaXArticulos.Find(delegate(CedForecastEntidades.ArticuloInfoAdicional c) { return c.IdArticulo == Convert.ToString(dtDatos.DefaultView[i]["Articulo"]); });
                    if (familiaXArticulo == null)
                    {
                        dr["Familia"] = "<<<Desconocida>>>";
                        Advertencias.Add(new CedForecastEntidades.Advertencia("CTabAC-01", "Artículo " + Convert.ToString(dtDatos.DefaultView[i]["Articulo"]) + " sin familia definida", CedForecastEntidades.Advertencia.TipoSeveridad.Advertencia));
                    }
                    else
                    {
                        dr["Familia"] = familiaXArticulo.DescrFamiliaArticulo;
                    }
                    CedForecastEntidades.Bejerman.Articulos articulo = articulos.Find(delegate(CedForecastEntidades.Bejerman.Articulos c) { return c.Art_CodGen == Convert.ToString(dtDatos.DefaultView[i]["Articulo"]); });
                    if (articulo == null)
                    {
                        dr["Articulo"] = Convert.ToString(dtDatos.DefaultView[i]["Articulo"]) + "-<<<Desconocido>>>";
                        Advertencias.Add(new CedForecastEntidades.Advertencia("CTabAC-02", "Descripción no encontrada para el artículo " + Convert.ToString(dtDatos.DefaultView[i]["Articulo"]), CedForecastEntidades.Advertencia.TipoSeveridad.Advertencia));
                        precio = 0;
                    }
                    else
                    {
                        dr["Articulo"] = Convert.ToString(dtDatos.DefaultView[i]["Articulo"]) + "-" + articulo.Art_DescGen;
                        precio = articulo.Lpr_Precio;
                    }
                    if (precio == 0)
                    {
                        Advertencias.Add(new CedForecastEntidades.Advertencia("CTabAC-03", "Precio no encontrado para el artículo " + Convert.ToString(dtDatos.DefaultView[i]["Articulo"]), CedForecastEntidades.Advertencia.TipoSeveridad.Error));
                    }
                    switch (TipoReporte)
                    {
                        case "Zona-Familia-Articulo":
                            CedForecastEntidades.Bejerman.Zona zona = zonas.Find(delegate(CedForecastEntidades.Bejerman.Zona c) { return c.Zon_Cod == Convert.ToString(dtDatos.DefaultView[i]["Zona"]); });
                            if (zona == null)
                            {
                                dr["Zona"] = Convert.ToString(dtDatos.DefaultView[i]["Zona"]) + "-<<<Desconocido>>>";
                                Advertencias.Add(new CedForecastEntidades.Advertencia("CTabAC-04", "Descripción no encontrada para la zona " + Convert.ToString(dtDatos.DefaultView[i]["Zona"]), CedForecastEntidades.Advertencia.TipoSeveridad.Advertencia));
                            }
                            else
                            {
                                dr["Zona"] = Convert.ToString(dtDatos.DefaultView[i]["Zona"]) + "-" + zona.Zon_Desc;
                            }
                            break;
                        case "Vendedor-Familia-Articulo":
                            CedForecastEntidades.Bejerman.Vendedor vendedor = vendedores.Find(delegate(CedForecastEntidades.Bejerman.Vendedor c) { return c.Ven_Cod == Convert.ToString(dtDatos.DefaultView[i]["Vendedor"]); });
                            if (vendedor == null)
                            {
                                dr["Vendedor"] = Convert.ToString(dtDatos.DefaultView[i]["Vendedor"]) + "-<<<Desconocido>>>";
                                Advertencias.Add(new CedForecastEntidades.Advertencia("CTabAC-04", "Descripción no encontrada para el vendedor " + Convert.ToString(dtDatos.DefaultView[i]["Vendedor"]), CedForecastEntidades.Advertencia.TipoSeveridad.Advertencia));
                            }
                            else
                            {
                                dr["Vendedor"] = Convert.ToString(dtDatos.DefaultView[i]["Vendedor"]) + "-" + vendedor.Ven_Desc;
                            }
                            break;
                    }

                    if (!Valorizado)
                    {
                        precio = 1;
                    }
                    else
                    {
                        if (articulo == null)
                        {
                            precio = 0;
                        }
                        else
                        {
                            precio = articulo.Lpr_Precio;
                        }
                    }
                    dr["Total Plan"] = 0;
                    dr["Total Real"] = 0;
                    dt.Rows.Add(dr);
                    claveAnterior = claveActual;
                }
                decimal valor = Convert.ToDecimal(dtDatos.DefaultView[i]["Cantidad"]) * precio;
                dt.Rows[dt.Rows.Count - 1]["Plan-" + dtDatos.DefaultView[i]["Periodo"].ToString()] = valor;
                //Completo ventas
                CedForecastEntidades.Bejerman.Ventas venta = new CedForecastEntidades.Bejerman.Ventas();
                switch (TipoReporte)
                {
                    case "Zona-Familia-Articulo":
                        venta = ventas.Find((delegate(CedForecastEntidades.Bejerman.Ventas e) { return e.Zona == dtDatos.DefaultView[i]["Zona"].ToString() && e.Sdvart_CodGen == dtDatos.DefaultView[i]["Articulo"].ToString() && e.Periodo == dtDatos.DefaultView[i]["Periodo"].ToString(); }));
                        break;
                    case "Vendedor-Familia-Articulo":
                        venta = ventas.Find((delegate(CedForecastEntidades.Bejerman.Ventas e) { return e.Vendedor == dtDatos.DefaultView[i]["Vendedor"].ToString() && e.Sdvart_CodGen == dtDatos.DefaultView[i]["Articulo"].ToString() && e.Periodo == dtDatos.DefaultView[i]["Periodo"].ToString(); }));
                        break;
                }
                
                decimal valorReal = 0;
                if (venta != null)
                {
                    if (Valorizado)
                    {
                        valorReal = venta.Sdv_ImpTot;
                    }
                    else
                    {
                        valorReal = venta.Sdv_CantUM1;
                    }
                    dt.Rows[dt.Rows.Count - 1]["Real-" + dtDatos.DefaultView[i]["Periodo"].ToString()] = valorReal;
                }
                //Sumar a Total
                dt.Rows[dt.Rows.Count - 1]["Total Plan"] = Convert.ToDecimal(dt.Rows[dt.Rows.Count - 1]["Total Plan"]) + valor;
                dt.Rows[dt.Rows.Count - 1]["Total Real"] = Convert.ToDecimal(dt.Rows[dt.Rows.Count - 1]["Total Real"]) + valorReal;
                dt.Rows[dt.Rows.Count - 1]["Desvio Plan"] = 0;
                if (Convert.ToDecimal(dt.Rows[dt.Rows.Count - 1]["Total Plan"]) > 0)
                {
                    dt.Rows[dt.Rows.Count - 1]["Desvio Plan"] = (Convert.ToDecimal(dt.Rows[dt.Rows.Count - 1]["Total Real"]) / Convert.ToDecimal(dt.Rows[dt.Rows.Count - 1]["Total Plan"]) - 1) * 100;
                }
                dt.AcceptChanges();
            }
            return dt;
        }
示例#4
0
        public static DataSet StockXArticulo(string PeriodoDesde, string TipoReporte, string ListaArticulos, bool Valorizado, CedEntidades.Sesion Sesion, out List<CedForecastEntidades.Advertencia> Advertencias)
        {
            List<CedForecastEntidades.Advertencia> advertencias = new List<CedForecastEntidades.Advertencia>();
            //Validacion de parámetros
            if (ListaArticulos == String.Empty)
            {
                throw new Microsoft.ApplicationBlocks.ExceptionManagement.Validaciones.ValorNoInfo("Articulo(s)");
            }
            //(1) Buscar Articulos que están en Bejerman ( que tengan STOCK cargado o Nota de Pedido en Bj ) y esos artículos no estén ingresados en la aplicación CedForecast.
            //Emitir advertencia.
            //(2) Leer lista de artículos CedForecast de ArticuloInfoAdicional, Verificar que todos tengan la Familia ingresada, 
            //de lo contrario emitir advertencia.
            //(3) Leer Stock Real de Tabla de Stock (B) (+) 
            //    Leer Notas de Pedido (NPA = Autorizadas) (B) (-)
            //    Leer Embarques (L) (+)
            //    Leer Forecast (L) (-)

            //Leer datos Forecast
            CedForecastDB.Forecast db = new CedForecastDB.Forecast(Sesion);
            DataSet ds = db.LeerDatosParaStockXArticulo(PeriodoDesde, TipoReporte, ListaArticulos);

            DataTable dtArticulos = ds.Tables[0].Copy();
            DataTable dtFamilias = ds.Tables[1].Copy();
            //Forecast
            DataTable dtForecast = ds.Tables[2].Copy();
            //Embarques
            DataTable dtOrdenesDeCompra = ds.Tables[3].Copy();
            //Stock
            DataTable dtStock = ds.Tables[4];
            //Notas de Pedido Ptes de remitir
            DataTable dtNotasDePedidoPtes = ds.Tables[5].Copy();
            //Notas de Pedido (del mes remitidas disminuye el forecast)
            DataTable dtNotasDePedido = ds.Tables[6].Copy();
            //Baja de Remitos de Notas de Pedido 
            DataTable dtNotasDePedidoBaja = ds.Tables[7].Copy();

            //Crear nuevo dataset
            //Creamos el DataSet con modificaciones de campos para la Grilla.
            ds = new DataSet();
            ds.Tables.Add(dtFamilias);
            ds.Tables[0].TableName = "Nivel1";
            ds.Tables.Add(dtArticulos);
            ds.Tables[1].TableName = "Nivel2";

            //Crear crosstab
            DataTable dt = new DataTable();
            dt.Columns.Add(ClonarColumna(dtForecast.Columns["Orden"]));
            dt.Columns.Add(ClonarColumna(dtForecast.Columns["TipoDato"]));
            dt.Columns.Add(ClonarColumna(dtForecast.Columns["Descr"]));
            dt.Columns.Add(ClonarColumna(dtForecast.Columns["Familia"]));
            dt.Columns.Add(ClonarColumna(dtForecast.Columns["IdArticulo"]));
            dt.Columns.Add(ClonarColumna(dtForecast.Columns["DescrArticulo"]));
            string idPeriodo = "";
            DateTime periodoDesde = Convert.ToDateTime("01/" + PeriodoDesde.Substring(4, 2) + "/" + PeriodoDesde.Substring(0, 4));
            idPeriodo = periodoDesde.ToString("yyyyMM");
            for (int i = 1; i <= 12; i++)
            {
                dt.Columns.Add(ClonarColumna(dtForecast.Columns["Cantidad"], "_" + idPeriodo, "_" + idPeriodo));
                idPeriodo = periodoDesde.AddMonths(i).ToString("yyyyMM");
            }
            //dt.Columns.Add(ClonarColumna(dtForecast.Columns["Cantidad"], "Total", "Total"));

            //--- Para cálculo del Saldo de Arrastre ---
            for (int i = 0; i < dtArticulos.Rows.Count; i++)
            {
                dt.Rows.Add("1", "Stock", "_Saldo", dtArticulos.Rows[i]["Familia"].ToString(), dtArticulos.Rows[i]["IdArticulo"].ToString(), dtArticulos.Rows[i]["DescrArticulo"].ToString(), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
            }
            //------------------------------------------

            //Stock
            for (int i = 0; i < dtStock.Rows.Count; i++)
            {
                DataRow[] drv;
                switch (TipoReporte)
                {
                    case "Familia-Articulo":
                        drv = dtArticulos.Select("IdArticulo = '" + dtStock.Rows[i]["IdArticulo"].ToString() + "'");
                        if (drv.Length > 0)
                        {
                            dt.Rows.Add(dtStock.Rows[i]["Orden"].ToString(), dtStock.Rows[i]["TipoDato"].ToString(), dtStock.Rows[i]["Descr"].ToString(), dtArticulos.Rows[0]["Familia"].ToString(), dtStock.Rows[i]["IdArticulo"].ToString(), dtArticulos.Rows[0]["DescrArticulo"].ToString(), dtStock.Rows[i]["Cantidad"].ToString());
                            //--- Para cálculo del Saldo de Arrastre ---
                            DataRow[] dr = dt.Select("TipoDato = 'Stock' and Descr = '_Saldo' and IdArticulo = '" + dtStock.Rows[i]["IdArticulo"].ToString() + "'");
                            if (dr.Length > 0)
                            {
                                string periodoAux = periodoDesde.AddMonths(1).ToString("yyyyMM");
                                dr[0]["_" + periodoAux] = Convert.ToDecimal(dr[0]["_" + periodoAux].ToString()) + Convert.ToDecimal(dtStock.Rows[i]["Cantidad"].ToString());
                                for (int p = 2; p <= 11; p++)
                                {
                                    periodoAux = periodoDesde.AddMonths(p).ToString("yyyyMM");
                                    dr[0]["_" + periodoAux] = Convert.ToDecimal(dtStock.Rows[i]["Cantidad"].ToString());
                                }
                            }
                            //------------------------------------------
                        }
                        break;
                }
            }

            //Ordenes de Compra
            for (int i = 0; i < dtOrdenesDeCompra.Rows.Count; i++)
            {
                DataRow[] drv;
                switch (TipoReporte)
                {
                    case "Familia-Articulo":
                        drv = dtArticulos.Select("IdArticulo = '" + dtOrdenesDeCompra.Rows[i]["IdArticulo"].ToString() + "'");
                        if (drv.Length > 0)
                        {
                            dt.Rows.Add(dtOrdenesDeCompra.Rows[i]["Orden"].ToString(), dtOrdenesDeCompra.Rows[i]["TipoDato"].ToString(), dtOrdenesDeCompra.Rows[i]["Descr"], drv[0]["Familia"].ToString(), dtOrdenesDeCompra.Rows[i]["IdArticulo"].ToString(), drv[0]["DescrArticulo"].ToString());
                            dt.Rows[dt.Rows.Count - 1]["_" + dtOrdenesDeCompra.Rows[i]["Periodo"].ToString()] = dtOrdenesDeCompra.Rows[i]["Cantidad"].ToString();
                        }
                        break;
                }
            }
            
            //Forecast
            for (int i = 0; i < dtForecast.Rows.Count; i++)
            {
                DataRow[] drv;
                switch (TipoReporte)
                {
                    case "Familia-Articulo":
                        drv = dtArticulos.Select("IdArticulo = '" + dtForecast.Rows[i]["IdArticulo"].ToString() + "'");
                        if (drv.Length > 0)
                        {
                            DataRow[] drAux = dt.Select("TipoDato = '" + dtForecast.Rows[i]["TipoDato"] + "' and IdArticulo = '" + dtForecast.Rows[i]["IdArticulo"].ToString() + "'");
                            if (drAux.Length == 0)
                            {
                                dt.Rows.Add(dtForecast.Rows[i]["Orden"].ToString(), dtForecast.Rows[i]["TipoDato"].ToString(), dtForecast.Rows[i]["Descr"], drv[0]["Familia"].ToString(), dtForecast.Rows[i]["IdArticulo"].ToString(), drv[0]["DescrArticulo"].ToString());
                                dt.Rows[dt.Rows.Count - 1]["_" + dtForecast.Rows[i]["Periodo"].ToString()] = Convert.ToDecimal(dtForecast.Rows[i]["Cantidad"].ToString()) * -1;
                            }
                            else
                            {
                                drAux[0]["_" + dtForecast.Rows[i]["Periodo"].ToString()] = Convert.ToDecimal(dtForecast.Rows[i]["Cantidad"].ToString()) * -1;
                            }
                        }
                        break;
                }
            }

            //Notas de Pedido (Remitos Ptes)
            for (int i = 0; i < dtNotasDePedidoPtes.Rows.Count; i++)
            {
                DataRow[] drv;
                switch (TipoReporte)
                {
                    case "Familia-Articulo":
                        drv = dtArticulos.Select("IdArticulo = '" + dtNotasDePedidoPtes.Rows[i]["IdArticulo"].ToString() + "'");
                        if (drv.Length > 0)
                        {
                            dt.Rows.Add(dtNotasDePedidoPtes.Rows[i]["Orden"].ToString(), dtNotasDePedidoPtes.Rows[i]["TipoDato"].ToString(), dtNotasDePedidoPtes.Rows[i]["Descr"].ToString(), drv[0]["Familia"].ToString(), dtNotasDePedidoPtes.Rows[i]["IdArticulo"].ToString(), drv[0]["DescrArticulo"].ToString());
                            dt.Rows[dt.Rows.Count - 1]["_" + periodoDesde.ToString("yyyyMM")] = Convert.ToDecimal(dtNotasDePedidoPtes.Rows[i]["Cantidad_Pend_RT"]) * -1;

                            //--- Para cálculo del Saldo de Arrastre ---
                            DataRow[] dr = dt.Select("TipoDato = 'Stock' and Descr = '_Saldo' and IdArticulo = '" + dtNotasDePedidoPtes.Rows[i]["IdArticulo"].ToString() + "'");
                            if (dr.Length > 0)
                            {
                                string periodoAux = periodoDesde.AddMonths(1).ToString("yyyyMM");
                                dr[0]["_" + periodoAux] = Convert.ToDecimal(dr[0]["_" + periodoAux].ToString()) + Convert.ToDecimal(dtNotasDePedidoPtes.Rows[i]["Cantidad_Pend_RT"]) * -1;
                            }
                            //------------------------------------------

                            //Verificar si no fue dado de BAJA el articulo de la NP.
                            DataRow[] drAuxNPB = dtNotasDePedidoBaja.Select("IdArticulo = '" + dtNotasDePedidoPtes.Rows[i]["IdArticulo"].ToString() + "' and TipoComprobante = 'REM' and NroComprobante = '" + dtNotasDePedidoPtes.Rows[i]["NroComprobante"].ToString() + "'");
                            if (drAuxNPB.Length != 0)
                            {
                                dt.Rows.Add(drAuxNPB[0]["Orden"].ToString(), drAuxNPB[0]["TipoDato"].ToString(), drAuxNPB[0]["Descr"].ToString(), drv[0]["Familia"].ToString(), drAuxNPB[0]["IdArticulo"].ToString(), drv[0]["DescrArticulo"].ToString());
                                dt.Rows[dt.Rows.Count - 1]["_" + periodoDesde.ToString("yyyyMM")] = Convert.ToDecimal(drAuxNPB[0]["Cantidad_Total"]) * -1;
                                
                                //--- Para cálculo del Saldo de Arrastre ---
                                dr = dt.Select("TipoDato = 'Stock' and Descr = '_Saldo' and IdArticulo = '" + dtNotasDePedidoPtes.Rows[i]["IdArticulo"].ToString() + "'");
                                if (dr.Length > 0)
                                {
                                    string periodoAux = periodoDesde.AddMonths(1).ToString("yyyyMM");
                                    dr[0]["_" + periodoAux] = Convert.ToDecimal(dr[0]["_" + periodoAux].ToString()) + Convert.ToDecimal(drAuxNPB[0]["Cantidad_Total"]) * -1;
                                }
                                //------------------------------------------
                            }
                        }
                        break;
                }
            }

            //Resumen del Forecast (del Mes)
            DataTable dtResumenXArticulo = new DataTable();
            dtResumenXArticulo.Columns.Add(ClonarColumna(dtForecast.Columns["Orden"]));
            dtResumenXArticulo.Columns.Add(ClonarColumna(dtForecast.Columns["TipoDato"]));
            dtResumenXArticulo.Columns.Add(ClonarColumna(dtForecast.Columns["Descr"]));
            dtResumenXArticulo.Columns.Add(ClonarColumna(dtForecast.Columns["IdArticulo"]));
            dtResumenXArticulo.Columns.Add(ClonarColumna(dtForecast.Columns["Cantidad"]));

            DataRow[] dtForecastDelMes = dtForecast.Select("Periodo = '" + periodoDesde.ToString("yyyyMM") + "'");
            for (int i = 0; i < dtForecastDelMes.Length; i++)
            {
                DataRow[] drv;
                switch (TipoReporte)
                {
                    case "Familia-Articulo":
                        drv = dtArticulos.Select("IdArticulo = '" + dtForecastDelMes[i]["IdArticulo"].ToString() + "'");
                        if (drv.Length > 0)
                        {
                            dtResumenXArticulo.Rows.Add(dtForecastDelMes[i]["Orden"].ToString(), dtForecastDelMes[i]["TipoDato"].ToString() + " del mes", dtForecastDelMes[i]["Descr"].ToString() + " del " + periodoDesde.ToString("MM/yyyy"), dtForecastDelMes[i]["IdArticulo"].ToString(), Convert.ToDecimal(dtForecastDelMes[i]["Cantidad"]) * -1);
                        }
                        break;
                }
            }
            for (int i = 0; i < dtNotasDePedido.Rows.Count; i++)
            {
                DataRow[] drv;
                switch (TipoReporte)
                {
                    case "Familia-Articulo":
                        drv = dtArticulos.Select("IdArticulo = '" + dtNotasDePedido.Rows[i]["IdArticulo"].ToString() + "'");
                        if (drv.Length > 0)
                        {
                            dtResumenXArticulo.Rows.Add(dtNotasDePedido.Rows[i]["Orden"].ToString(), dtNotasDePedido.Rows[i]["TipoDato"].ToString(), dtNotasDePedido.Rows[i]["Descr"].ToString(), dtNotasDePedido.Rows[i]["IdArticulo"].ToString(), dtNotasDePedido.Rows[i]["Cantidad_Total"].ToString());
                            //Verivicar si no fue dada de BAJA la NP.
                            DataRow[] drAuxNPB = dtNotasDePedidoBaja.Select("IdArticulo = '" + dtNotasDePedido.Rows[i]["IdArticulo"].ToString() + "' and TipoComprobante = 'REM' and NroComprobante = '" + dtNotasDePedido.Rows[i]["NroComprobante"].ToString() + "'");
                            if (drAuxNPB.Length != 0)
                            {
                                dtResumenXArticulo.Rows.Add(dtNotasDePedidoBaja.Rows[i]["Orden"].ToString(), dtNotasDePedidoBaja.Rows[i]["TipoDato"].ToString(), dtNotasDePedidoBaja.Rows[i]["Descr"].ToString(), dtNotasDePedidoBaja.Rows[i]["IdArticulo"].ToString(), Convert.ToDecimal(dtNotasDePedidoBaja.Rows[i]["Cantidad_Total"]) * -1);
                            }

                            //----- Para el periodo actual del Forecast se le descuentan las NP remitidas y se suman las anulaciones del las NP.
                            //----- para NP sin remitos Ptes.
                            DataRow[] drAuxForecast = dt.Select("TipoDato = 'Forecast' and IdArticulo = '" + dtNotasDePedido.Rows[i]["IdArticulo"].ToString() + "'");
                            if (drAuxForecast.Length != 0)
                            {
                                decimal valorForecast = 0;
                                if (drAuxForecast[0]["_" + periodoDesde.ToString("yyyyMM")] != System.DBNull.Value)
                                {
                                    valorForecast = Convert.ToDecimal(drAuxForecast[0]["_" + periodoDesde.ToString("yyyyMM")]);
                                }
                                decimal valorNP = Convert.ToDecimal(dtNotasDePedido.Rows[i]["Cantidad_Total"].ToString());
                                drAuxForecast[0]["_" + periodoDesde.ToString("yyyyMM")] = valorForecast + valorNP;
                                //Verificar si no fue dado de BAJA el articulo de la NP.
                                DataRow[] drAuxForecastNPB = dtNotasDePedidoBaja.Select("IdArticulo = '" + dtNotasDePedido.Rows[i]["IdArticulo"].ToString() + "' and TipoComprobante = 'REM' and NroComprobante = '" + dtNotasDePedido.Rows[i]["NroComprobante"].ToString() + "'");
                                if (drAuxForecastNPB.Length != 0)
                                {
                                    valorForecast = 0;
                                    if (drAuxForecast[0]["_" + periodoDesde.ToString("yyyyMM")] != System.DBNull.Value)
                                    {
                                        valorForecast = Convert.ToDecimal(drAuxForecast[0]["_" + periodoDesde.ToString("yyyyMM")]);
                                    }
                                    valorNP = Convert.ToDecimal(drAuxForecastNPB[0]["Cantidad_Total"]);
                                    drAuxForecast[0]["_" + periodoDesde.ToString("yyyyMM")] = valorForecast - valorNP;
                                }
                            }
                            //-----
                        }
                        break;
                }
            }
            for (int i = 0; i < dtNotasDePedidoPtes.Rows.Count; i++)
            {
                DataRow[] drv;
                switch (TipoReporte)
                {
                    case "Familia-Articulo":
                        drv = dtArticulos.Select("IdArticulo = '" + dtNotasDePedidoPtes.Rows[i]["IdArticulo"].ToString() + "'");
                        if (drv.Length > 0)
                        {
                            if (Convert.ToDateTime(dtNotasDePedidoPtes.Rows[i]["Fecha_Emision"]).ToString("yyyyMM") == periodoDesde.ToString("yyyyMM"))
                            {
                                dtResumenXArticulo.Rows.Add(dtNotasDePedidoPtes.Rows[i]["Orden"].ToString(), dtNotasDePedidoPtes.Rows[i]["TipoDato"].ToString() + " del mes", dtNotasDePedidoPtes.Rows[i]["Descr"].ToString(), dtNotasDePedidoPtes.Rows[i]["IdArticulo"].ToString(), dtNotasDePedidoPtes.Rows[i]["Cantidad_Pend_RT"].ToString());
                                //Verificar si no fue dada de BAJA la NP.
                                DataRow[] drAuxNPB = dtNotasDePedidoBaja.Select("IdArticulo = '" + dtNotasDePedidoPtes.Rows[i]["IdArticulo"].ToString() + "' and TipoComprobante = 'REM' and NroComprobante = '" + dtNotasDePedidoPtes.Rows[i]["NroComprobante"].ToString() + "'");
                                if (drAuxNPB.Length != 0)
                                {
                                    dtResumenXArticulo.Rows.Add(dtNotasDePedidoBaja.Rows[i]["Orden"].ToString(), dtNotasDePedidoBaja.Rows[i]["TipoDato"].ToString(), dtNotasDePedidoBaja.Rows[i]["Descr"].ToString(), dtNotasDePedidoBaja.Rows[i]["IdArticulo"].ToString(), Convert.ToDecimal(dtNotasDePedidoBaja.Rows[i]["Cantidad_Total"]));
                                }
                                
                                ////----- Para el periodo actual del Forecast se le descuentan las NP Ptes de remito y se suman las anulaciones del las NP.
                                ////----- para NP sin remitos Ptes.
                                //DataRow[] drAuxForecast = dt.Select("TipoDato = 'Forecast' and IdArticulo = '" + dtNotasDePedidoPtes.Rows[i]["IdArticulo"].ToString() + "'");
                                //if (drAuxForecast.Length != 0)
                                //{
                                //    decimal valorForecast = Convert.ToDecimal(drAuxForecast[0]["_" + periodoDesde.ToString("yyyyMM")]);
                                //    decimal valorNP = Convert.ToDecimal(dtNotasDePedido.Rows[i]["Cantidad_Total"].ToString());
                                //    drAuxForecast[0]["_" + periodoDesde.ToString("yyyyMM")] = valorForecast + valorNP;
                                //    //Verificar si no fue dado de BAJA el articulo de la NP.
                                //    DataRow[] drAuxForecastNPB = dtNotasDePedidoBaja.Select("IdArticulo = '" + dtNotasDePedidoPtes.Rows[i]["IdArticulo"].ToString() + "' and TipoComprobante = 'REM' and NroComprobante = '" + dtNotasDePedido.Rows[i]["NroComprobante"].ToString() + "'");
                                //    if (drAuxForecastNPB.Length != 0)
                                //    {
                                //        valorForecast = Convert.ToDecimal(drAuxForecast[0]["_" + periodoDesde.ToString("yyyyMM")]);
                                //        valorNP = Convert.ToDecimal(drAuxForecastNPB[0]["Cantidad_Total"]);
                                //        drAuxForecast[0]["_" + periodoDesde.ToString("yyyyMM")] = valorForecast - valorNP;
                                //    }
                                //}
                                //-----
                            }
                        }
                        break;
                }
            }
            //(A) - Recorrer el Forecast y si hay importes negativos informar cero.
            dtForecastDelMes = dt.Select("TipoDato = 'Forecast'");
            for (int i = 0; i < dtForecastDelMes.Length; i++)
            {
                DataRow[] drv;
                switch (TipoReporte)
                {
                    case "Familia-Articulo":
                        drv = dtArticulos.Select("IdArticulo = '" + dtForecastDelMes[i]["IdArticulo"].ToString() + "'");
                        if (drv.Length > 0)
                        {
                            DataRow[] drAuxForecast = dt.Select("TipoDato = 'Forecast' and IdArticulo = '" + dtForecastDelMes[i]["IdArticulo"].ToString() + "'");
                            if (drAuxForecast.Length > 0)
                            {
                                if (drAuxForecast[0]["_" + periodoDesde.ToString("yyyyMM")].GetType() != typeof(System.DBNull) && Convert.ToDecimal(drAuxForecast[0]["_" + periodoDesde.ToString("yyyyMM")]) > 0)
                                {
                                    drAuxForecast[0]["_" + periodoDesde.ToString("yyyyMM")] = 0;
                                }
                            }
                        }
                        break;
                }
            }

            idPeriodo = periodoDesde.ToString("yyyyMM");
            for (int p = 1; p <= 11; p++)
            {
                DataRow[] drGrilla = dt.Select("TipoDato = 'Forecast'");
                for (int i = 0; i < drGrilla.Length; i++)
                {
                    //--- Para cálculo del Saldo de Arrastre ---
                    DataRow[] dr = dt.Select("TipoDato = 'Stock' and Descr = '_Saldo' and IdArticulo = '" + drGrilla[i]["IdArticulo"].ToString() + "'");
                    if (dr.Length > 0)
                    {
                        string periodoAux = periodoDesde.AddMonths(p).ToString("yyyyMM");
                        decimal cantidad = 0;
                        if (drGrilla[i]["_" + idPeriodo] != System.DBNull.Value)
                        {
                            cantidad = Convert.ToDecimal(drGrilla[i]["_" + idPeriodo]);
                        }
                        if (p == 1)
                        {
                            dr[0]["_" + periodoAux] = Convert.ToDecimal(dr[0]["_" + idPeriodo].ToString()) + Convert.ToDecimal(dr[0]["_" + periodoAux].ToString()) + cantidad;
                        }
                        else
                        {
                            dr[0]["_" + periodoAux] = Convert.ToDecimal(dr[0]["_" + idPeriodo].ToString()) + cantidad;
                        }
                    }
                    //------------------------------------------
                }
                DataRow[] drOrdenesDeCompra = dtOrdenesDeCompra.Select("Periodo = '" + idPeriodo + "'");
                for (int i = 0; i < drOrdenesDeCompra.Length; i++)
                {
                    //--- Para cálculo del Saldo de Arrastre ---
                    DataRow[] dr = dt.Select("TipoDato = 'Stock' and Descr = '_Saldo' and IdArticulo = '" + drOrdenesDeCompra[i]["IdArticulo"].ToString() + "'");
                    if (dr.Length > 0)
                    {
                        string periodoAux = periodoDesde.AddMonths(1).ToString("yyyyMM");
                        decimal cantidad = 0;
                        if (drOrdenesDeCompra[i]["Cantidad"] != System.DBNull.Value)
                        {
                            cantidad = Convert.ToDecimal(drOrdenesDeCompra[i]["Cantidad"]);
                        }
                        dr[0]["_" + periodoAux] = Convert.ToDecimal(dr[0]["_" + periodoAux].ToString()) + cantidad;
                    }
                    //------------------------------------------
                }
                idPeriodo = periodoDesde.AddMonths(p).ToString("yyyyMM");
            }

            ds.Tables.Add(dt);
            ds.Tables[2].TableName = "Nivel3";

            ds.Tables.Add(dtResumenXArticulo);
            ds.Tables[3].TableName = "Nivel4";

            ds.Relations.Add("Nivel1_Nivel2", ds.Tables["Nivel1"].Columns["Familia"], ds.Tables["Nivel2"].Columns["Familia"]);
            ds.Relations.Add("Nivel2_Nivel3", ds.Tables["Nivel2"].Columns["IdArticulo"], ds.Tables["Nivel3"].Columns["IdArticulo"]);
            ds.Relations.Add("Nivel2_Nivel4", ds.Tables["Nivel2"].Columns["IdArticulo"], ds.Tables["Nivel4"].Columns["IdArticulo"]);

            Advertencias = advertencias;
            return ds;
        }
示例#5
0
 private static DataTable LeerDatosForecastParaFinancieroDS(string PeriodoDesde, string PeriodoHasta, string ListaClientes, List<CedForecastEntidades.Advertencia> Advertencias, CedEntidades.Sesion Sesion)
 {
     if (ListaClientes == String.Empty)
     {
         throw new Microsoft.ApplicationBlocks.ExceptionManagement.Validaciones.ValorNoInfo("Cliente(s)");
     }
     //Leer datos Forecast
     CedForecastDB.Forecast db = new CedForecastDB.Forecast(Sesion);
     DataSet ds = db.LeerDatosForecastParaFinancieroDS(PeriodoDesde, PeriodoHasta, ListaClientes);
     DataTable dtDatos = ds.Tables[0];
     //Leer datos Bejerman
     List<CedForecastEntidades.Bejerman.Zona> zonas = new CedForecastDB.Bejerman.Zona(Sesion).LeerLista();
     List<CedForecastEntidades.Bejerman.Clientes> clientes = new CedForecastDB.Bejerman.Clientes(Sesion).LeerLista();
     List<CedForecastEntidades.Bejerman.Articulos> articulos = new CedForecastDB.Bejerman.Articulos(Sesion).LeerListaConPrecios();
     //Crear datos de forecast para FinancieroDS
     DataTable dt = new DataTable();
     dt.Columns.Add(ClonarColumna(dtDatos.Columns["Zona"])); 
     dt.Columns.Add(ClonarColumna(dtDatos.Columns["Cliente"]));
     dt.Columns.Add(ClonarColumna(dtDatos.Columns["Nombre"])); 
     dt.Columns.Add(ClonarColumna(dtDatos.Columns["CondVta"])); 
     dt.Columns.Add(ClonarColumna(dtDatos.Columns["Articulo"]));
     dt.Columns.Add(ClonarColumna(dtDatos.Columns["Periodo"]));
     dt.Columns.Add(ClonarColumna(dtDatos.Columns["Cantidad"], "Valor", "Valor"));
     for (int i = 0; i < dtDatos.Rows.Count; i++)
     {
         decimal precio = 0;
         //Ajustar Periodo en funcion a la condicion de pago.
         //POR AHORA CONDICION DE PAGO FIJA (90 dias = 3 meses).
         DateTime fechaAux = Convert.ToDateTime("01/" + dtDatos.Rows[i]["Periodo"].ToString().Substring(4, 2) + "/" + dtDatos.Rows[i]["Periodo"].ToString().Substring(0, 4));
         string nuevoPeriodo = fechaAux.AddMonths(3).ToString("yyyyMM");
         //
         if (Convert.ToInt32(nuevoPeriodo) <= Convert.ToInt32(PeriodoHasta))
         {
             DataRow dr = dt.NewRow();
             dr["Periodo"] = nuevoPeriodo;
             CedForecastEntidades.Bejerman.Articulos articulo = articulos.Find(delegate(CedForecastEntidades.Bejerman.Articulos c) { return c.Art_CodGen == Convert.ToString(dtDatos.Rows[i]["Articulo"]); });
             if (articulo == null)
             {
                 dr["Articulo"] = Convert.ToString(dtDatos.Rows[i]["Articulo"]) + "-<<<Desconocido>>>";
                 Advertencias.Add(new CedForecastEntidades.Advertencia("CTabAC-Forecast-01", "Descripción no encontrada para el artículo " + Convert.ToString(dtDatos.Rows[i]["Articulo"]), CedForecastEntidades.Advertencia.TipoSeveridad.Advertencia));
                 precio = 0;
             }
             else
             {
                 dr["Articulo"] = Convert.ToString(dtDatos.Rows[i]["Articulo"]) + "-" + articulo.Art_DescGen;
                 precio = articulo.Lpr_Precio;
             }
             if (precio == 0)
             {
                 Advertencias.Add(new CedForecastEntidades.Advertencia("CTabAC-Forecast-02", "Precio no encontrado para el artículo " + Convert.ToString(dtDatos.Rows[i]["Articulo"]), CedForecastEntidades.Advertencia.TipoSeveridad.Error));
             }
             //Zona
             CedForecastEntidades.Bejerman.Zona zona = zonas.Find(delegate(CedForecastEntidades.Bejerman.Zona c) { return c.Zon_Cod == Convert.ToString(dtDatos.Rows[i]["Zona"]); });
             if (zona == null)
             {
                 dr["Zona"] = Convert.ToString(dtDatos.Rows[i]["Zona"]) + "-<<<Desconocido>>>";
                 Advertencias.Add(new CedForecastEntidades.Advertencia("CTabAC-Forecast-03", "Descripción no encontrada para la zona " + Convert.ToString(dtDatos.Rows[i]["Zona"]), CedForecastEntidades.Advertencia.TipoSeveridad.Advertencia));
             }
             else
             {
                 dr["Zona"] = Convert.ToString(dtDatos.Rows[i]["Zona"]); // +"-" + zona.Zon_Desc;
             }
             //Cliente
             CedForecastEntidades.Bejerman.Clientes cliente = clientes.Find(delegate(CedForecastEntidades.Bejerman.Clientes c) { return c.Cli_Cod == Convert.ToString(dtDatos.Rows[i]["Cliente"]); });
             if (cliente == null)
             {
                 dr["Cliente"] = Convert.ToString(dtDatos.Rows[i]["Cliente"]);
                 dr["Nombre"] = "<<<Desconocido>>>";
                 Advertencias.Add(new CedForecastEntidades.Advertencia("CTabAC-Forecast-04", "Descripción no encontrada para el cliente " + Convert.ToString(dtDatos.Rows[i]["Cliente"]) + "-" + dr["Nombre"].ToString(), CedForecastEntidades.Advertencia.TipoSeveridad.Advertencia));
             }
             else
             {
                 dr["Cliente"] = Convert.ToString(dtDatos.Rows[i]["Cliente"]); // + "-" + cliente.Cli_RazSoc;
                 dr["Nombre"] = Convert.ToString(dtDatos.Rows[i]["Nombre"]);
             }
             if (articulo == null)
             {
                 precio = 0;
             }
             else
             {
                 precio = articulo.Lpr_Precio;
             }
             decimal valor = Convert.ToDecimal(dtDatos.Rows[i]["Cantidad"]) * precio;
             dr["Valor"] = valor;
             dt.Rows.Add(dr);
         }
     }
     return dt;
 }
示例#6
0
        public static DataSet FinancieroDs(string IdPeriodo, string TipoReporte, string ListaClientes, CedEntidades.Sesion Sesion, out List<CedForecastEntidades.Advertencia> Advertencias)
        {
            Advertencias = new List<CedForecastEntidades.Advertencia>();
            //Validacion de parámetros
            if (ListaClientes == String.Empty)
            {
                throw new Microsoft.ApplicationBlocks.ExceptionManagement.Validaciones.ValorNoInfo("Cliente(s)");
            }
            //Leer datos Forecast
            CedForecastDB.Forecast db = new CedForecastDB.Forecast(Sesion);
            DataSet ds = db.LeerDatosParaFinancieroDs(IdPeriodo, TipoReporte, ListaClientes);
            DataTable dtZona = new DataTable();
            switch (TipoReporte)
            {
                case "Zona-Cliente":
                    dtZona = ds.Tables[0].Copy();
                    break;
            }
            DataTable dtClientes = ds.Tables[1].Copy();
            DataTable dtDatos = ds.Tables[2].Copy();
            DataTable dtDatosT = ds.Tables[3].Copy();

            //Creamos el DataSet con modificaciones de campos para la Grilla.
            ds = new DataSet();
            ds.Tables.Add(dtZona);
            ds.Tables[0].TableName = "Finan1";
            ds.Tables.Add(dtClientes);
            ds.Tables[1].TableName = "Finan2";
            
            //Leer datos Bejerman
            List<CedForecastEntidades.Bejerman.Zona> zonas = new CedForecastDB.Bejerman.Zona(Sesion).LeerLista();
            List<CedForecastEntidades.Bejerman.Clientes> clientes = new CedForecastDB.Bejerman.Clientes(Sesion).LeerLista();

            DataTable dt = new DataTable();
            dt.Columns.Add(ClonarColumna(dtDatos.Columns["Zona"]));     //Zona
            dt.Columns.Add(ClonarColumna(dtDatos.Columns["Cliente"]));
            dt.Columns.Add(ClonarColumna(dtDatos.Columns["TipoDato"]));
            dt.Columns.Add(ClonarColumna(dtDatos.Columns["Descripcion"]));
            dt.Columns.Add(ClonarColumna(dtDatos.Columns["FecVto"]));
            DateTime fechaInicio = Convert.ToDateTime("01/" + IdPeriodo.Substring(4, 2) + "/" + IdPeriodo.Substring(0, 4));
            DateTime periodoColumna = fechaInicio;
            for (int i = 0; i < 12; i++)
            {
                dt.Columns.Add(ClonarColumna(dtDatos.Columns["Saldo"], " " + periodoColumna.ToString("MM-yyyy"), " " + periodoColumna.ToString("MM-yyyy")));
                periodoColumna = periodoColumna.AddMonths(1);
            }
            dt.Columns.Add(ClonarColumna(dtDatos.Columns["Saldo"], "Total Saldo", "Total Saldo"));

            //Llenar crosstab
            string claveAnterior = String.Empty;
            for (int i = 0; i < dtDatos.Rows.Count; i++)
            {
                //Zona
                DataRow dr = dt.NewRow();
                CedForecastEntidades.Bejerman.Zona zona = zonas.Find(delegate(CedForecastEntidades.Bejerman.Zona c) { return c.Zon_Cod == Convert.ToString(dtDatos.Rows[i]["Zona"]); });
                if (zona == null)
                {
                    dr["Zona"] = Convert.ToString(dtDatos.Rows[i]["Zona"]) + "-<<<Desconocido>>>";
                    Advertencias.Add(new CedForecastEntidades.Advertencia("CTabAC-01", "Descripción no encontrada para la zona " + Convert.ToString(dtDatos.Rows[i]["Zona"]), CedForecastEntidades.Advertencia.TipoSeveridad.Advertencia));
                }
                else
                {
                    dr["Zona"] = Convert.ToString(dtDatos.Rows[i]["Zona"]) + "-" + zona.Zon_Desc;
                }
                //Cliente
                CedForecastEntidades.Bejerman.Clientes cliente = clientes.Find(delegate(CedForecastEntidades.Bejerman.Clientes c) { return c.Cli_Cod == Convert.ToString(dtDatos.Rows[i]["Cliente"]); });
                if (cliente == null)
                {
                    dr["Cliente"] = Convert.ToString(dtDatos.Rows[i]["Cliente"]) + "-<<<Desconocido>>>";
                    Advertencias.Add(new CedForecastEntidades.Advertencia("CTabAC-02", "Descripción no encontrada para el cliente " + Convert.ToString(dtDatos.Rows[i]["Cliente"]), CedForecastEntidades.Advertencia.TipoSeveridad.Advertencia));
                }
                else
                {
                    dr["Cliente"] = Convert.ToString(dtDatos.Rows[i]["Cliente"]); // + "-" + cliente.Cli_RazSoc;
                }
                dr["FecVto"] = Convert.ToString(dtDatos.Rows[i]["FecVto"]);
                dr["TipoDato"] = Convert.ToString(dtDatos.Rows[i]["TipoDato"]);
                dr["Descripcion"] = Convert.ToString(dtDatos.Rows[i]["Descripcion"]);
                dt.Rows.Add(dr);

                decimal valor = Convert.ToDecimal(dtDatos.Rows[i]["Saldo"]);
                string periodo = Convert.ToDateTime(dtDatos.Rows[i]["FecVto"]).ToString("MM-yyyy");
                if (Convert.ToInt32(Convert.ToDateTime(dtDatos.Rows[i]["FecVto"]).ToString("yyyyMM")) < Convert.ToInt32(fechaInicio.ToString("yyyyMM")))
                {
                    if (dt.Rows[dt.Rows.Count - 1][" " + fechaInicio.ToString("MM-yyyy")].ToString() == "")
                    {
                        dt.Rows[dt.Rows.Count - 1][" " + fechaInicio.ToString("MM-yyyy")] = "0";
                    }
                    dt.Rows[dt.Rows.Count - 1][" " + fechaInicio.ToString("MM-yyyy")] = Convert.ToDecimal(dt.Rows[dt.Rows.Count - 1][" " + fechaInicio.ToString("MM-yyyy")]) + valor;
                }
                else if (Convert.ToInt32(Convert.ToDateTime(dtDatos.Rows[i]["FecVto"]).ToString("yyyyMM")) > Convert.ToInt32(fechaInicio.AddMonths(11).ToString("yyyyMM")))
                {
                    if (dt.Rows[dt.Rows.Count - 1][" " + fechaInicio.AddMonths(11).ToString("MM-yyyy")].ToString() == "")
                    {
                        dt.Rows[dt.Rows.Count - 1][" " + fechaInicio.AddMonths(11).ToString("MM-yyyy")] = "0";
                    }
                    dt.Rows[dt.Rows.Count - 1][" " + fechaInicio.AddMonths(11).ToString("MM-yyyy")] = Convert.ToDecimal(dt.Rows[dt.Rows.Count - 1][" " + fechaInicio.AddMonths(11).ToString("MM-yyyy")]) + valor;
                }
                else 
                {
                    if (dt.Rows[dt.Rows.Count - 1][" " + periodo].ToString() == "")
                    {
                        dt.Rows[dt.Rows.Count - 1][" " + periodo] = "0";
                    }
                    dt.Rows[dt.Rows.Count - 1][" " + periodo] = Convert.ToDecimal(dt.Rows[dt.Rows.Count - 1][" " + periodo]) + valor;
                }
                if (dt.Rows[dt.Rows.Count - 1]["Total Saldo"].ToString() == "")
                {
                    dt.Rows[dt.Rows.Count - 1]["Total Saldo"] = "0";
                }
                dt.Rows[dt.Rows.Count - 1]["Total Saldo"] = Convert.ToDecimal(dt.Rows[dt.Rows.Count - 1]["Total Saldo"]) + valor;
                dt.AcceptChanges();
            }
            ds.Tables.Add(dt);
            ds.Tables[2].TableName = "Finan3";

            //Agregar un fila por Zona / Cliente para informar el Forecast
            DateTime fechaHasta = fechaInicio.AddMonths(12).AddDays(-1);
            DataTable dtForecast = LeerDatosForecastParaFinancieroDS(fechaInicio.ToString("yyyyMM"), fechaHasta.ToString("yyyyMM"), ListaClientes, Advertencias, Sesion);
            
            //Buscar Cliente, para agregar los datos del forecast para el TipoDato = 'CtaCte'.
            for (int i = 0; i < dtForecast.Rows.Count; i++)
            {
                DataRow[] drFind = dt.Select("Zona = '" + dtForecast.Rows[i]["Zona"] + "' and Cliente = '" + dtForecast.Rows[i]["Cliente"] + "' and TipoDato = '" + "CtaCte" + "' and Descripcion = '" + "Forecast" + "'");
                if (drFind.Length == 0)
                {
                    DataRow nuevoRegistro = dt.NewRow();   
                    nuevoRegistro["Zona"] = dtForecast.Rows[i]["Zona"];
                    nuevoRegistro["Cliente"] = dtForecast.Rows[i]["Cliente"];
                    nuevoRegistro["TipoDato"] = "CtaCte";
                    nuevoRegistro["Descripcion"] = "Forecast";
                    string periodo = dtForecast.Rows[i]["Periodo"].ToString().Substring(4, 2) + "-" + dtForecast.Rows[i]["Periodo"].ToString().Substring(0, 4);
                    nuevoRegistro[" " + periodo] = dtForecast.Rows[i]["Valor"];
                    dt.Rows.Add(nuevoRegistro);
                    //Buscar si existe la zona
                    DataRow[] drFindFinan1 = ds.Tables[0].Select("Zona = '" + dtForecast.Rows[i]["Zona"] + "'");
                    if (drFindFinan1.Length == 0)
                    {
                        DataRow nuevoRegistroFinan1 = ds.Tables[0].NewRow();
                        nuevoRegistroFinan1["Zona"] = dtForecast.Rows[i]["Zona"].ToString();
                        ds.Tables[0].Rows.Add(nuevoRegistroFinan1);
                    }
                    //Buscar si existe el zona / cliente
                    DataRow[] drFindFinan2 = ds.Tables[1].Select("Zona = '" + dtForecast.Rows[i]["Zona"] + "' and Cliente = '" + dtForecast.Rows[i]["Cliente"] + "'");
                    if (drFindFinan2.Length == 0)
                    {
                        DataRow nuevoRegistroFinan2 = ds.Tables[1].NewRow();
                        nuevoRegistroFinan2["Zona"] = dtForecast.Rows[i]["Zona"].ToString();
                        nuevoRegistroFinan2["Cliente"] = dtForecast.Rows[i]["Cliente"].ToString();
                        nuevoRegistroFinan2["Nombre"] = dtForecast.Rows[i]["Nombre"].ToString();
                        ds.Tables[1].Rows.Add(nuevoRegistroFinan2);
                    }
                }
                else if (drFind.Length == 1)
                {
                    drFind[0]["Zona"] = dtForecast.Rows[i]["Zona"];
                    drFind[0]["Cliente"] = dtForecast.Rows[i]["Cliente"];
                    drFind[0]["TipoDato"] = "CtaCte";
                    drFind[0]["Descripcion"] = "Forecast";
                    string periodo = dtForecast.Rows[i]["Periodo"].ToString().Substring(4, 2) + "-" + dtForecast.Rows[i]["Periodo"].ToString().Substring(0, 4);
                    if (drFind[0][" " + periodo].ToString() != "")
                    {
                        drFind[0][" " + periodo] = Convert.ToDecimal(drFind[0][" " + periodo]) + Convert.ToDecimal(dtForecast.Rows[i]["Valor"]);
                    }
                    else
                    {
                        drFind[0][" " + periodo] = Convert.ToDecimal(dtForecast.Rows[i]["Valor"]);
                    }
                    dt.AcceptChanges();
                }
            }
            DataTable dtCopy = ds.Tables[1].Copy();
            DataRow[] drows = dtCopy.Select("", "CLIENTE ASC");
            ds.Tables[1].Clear();
            for (int i = 0; i < drows.Length; i++)
            {
                DataRow drow = ds.Tables[1].NewRow();
                drow[0] = drows[i][0].ToString();
                drow[1] = drows[i][1].ToString();
                drow[2] = drows[i][2].ToString();
                ds.Tables[1].Rows.Add(drow);
            }

            ds.Tables.Add(dtDatosT);
            ds.Tables[3].TableName = "Finan4";

            ds.Relations.Add("Finan1_Finan2", ds.Tables["Finan1"].Columns["Zona"], ds.Tables["Finan2"].Columns["Zona"]);
            ds.Relations.Add("Finan2_Finan3", ds.Tables["Finan2"].Columns["Cliente"], ds.Tables["Finan3"].Columns["Cliente"]);
            ds.Relations.Add("Finan2_Finan4", ds.Tables["Finan2"].Columns["Cliente"], ds.Tables["Finan4"].Columns["Cliente"]);
            return ds;
        }
示例#7
0
 public static DataTable CrossTabArticulosClientes(string IdPeriodoDesde, string IdPeriodoHasta, string TipoReporte, string ListaArticulos, string ListaClientes, string ListaVendedores, bool Valorizado, CedEntidades.Sesion Sesion, out List<CedForecastEntidades.Advertencia> Advertencias)
 {
     Advertencias = new List<CedForecastEntidades.Advertencia>();
     //Validacion de parámetros
     if (ListaArticulos == String.Empty)
     {
         throw new Microsoft.ApplicationBlocks.ExceptionManagement.Validaciones.ValorNoInfo("Articulo(s)");
     }
     if (ListaClientes == String.Empty)
     {
         throw new Microsoft.ApplicationBlocks.ExceptionManagement.Validaciones.ValorNoInfo("Cliente(s)");
     }
     switch (TipoReporte)
     {
         case "Artículos-Vendedores":
         case "Vendedores-Artículos":
             if (ListaVendedores == String.Empty)
             {
                 throw new Microsoft.ApplicationBlocks.ExceptionManagement.Validaciones.ValorNoInfo("Vendedor(es)");
             }
             break;
     } 
     //Leer datos Forecast
     CedForecastDB.Forecast db = new CedForecastDB.Forecast(Sesion);
     DataSet ds = db.LeerDatosParaCrossTabArticulosClientes(IdPeriodoDesde, IdPeriodoHasta, TipoReporte, ListaArticulos, ListaClientes, ListaVendedores);
     DataTable dtArticulos = ds.Tables[0];
     DataTable dtVendedores = ds.Tables[1];
     DataTable dtClientes = ds.Tables[2];
     DataTable dtDatos = ds.Tables[3];
     //Leer datos Bejerman
     List<CedForecastEntidades.Bejerman.Articulos> articulos = new CedForecastDB.Bejerman.Articulos(Sesion).LeerListaConPrecios(dtArticulos);
     List<CedForecastEntidades.Bejerman.Vendedor> vendedores = new CedForecastDB.Bejerman.Vendedor(Sesion).LeerLista(dtVendedores);
     List<CedForecastEntidades.Bejerman.Clientes> clientes = new CedForecastDB.Bejerman.Clientes(Sesion).LeerLista(dtClientes);
     List<CedForecastEntidades.ArticuloInfoAdicional> familiaXArticulos = new CedForecastDB.ArticuloInfoAdicional(Sesion).LeerLista();
     //Crear crosstab
     DataTable dt = new DataTable();
     bool incluyeVendedor = false;
     switch (TipoReporte)
     {
         case "Artículos-Vendedores":
             dt.Columns.Add(ClonarColumna(dtDatos.Columns["Articulo"], "Familia", "Familia"));
             dt.Columns.Add(ClonarColumna(dtDatos.Columns["Articulo"]));
             dt.Columns.Add(ClonarColumna(dtDatos.Columns["Vendedor"]));
             incluyeVendedor = true;
             break;
         case "Vendedores-Artículos":
             dt.Columns.Add(ClonarColumna(dtDatos.Columns["Vendedor"]));
             dt.Columns.Add(ClonarColumna(dtDatos.Columns["Articulo"], "Familia", "Familia"));
             dt.Columns.Add(ClonarColumna(dtDatos.Columns["Articulo"]));
             incluyeVendedor = true;
             break;
         case "Sólo Artículos":
             dt.Columns.Add(ClonarColumna(dtDatos.Columns["Articulo"], "Familia", "Familia"));
             dt.Columns.Add(ClonarColumna(dtDatos.Columns["Articulo"]));
             break;
     }
     dt.Columns.Add(ClonarColumna(dtDatos.Columns["Cantidad"], "Total", "Total"));
     for (int i = 0; i < dtClientes.Rows.Count; i++)
     {
         string nombreColumna = Convert.ToString(dtClientes.Rows[i]["Cliente"]);
         string tituloColumna = nombreColumna;
         CedForecastEntidades.Bejerman.Clientes cliente = clientes.Find(delegate(CedForecastEntidades.Bejerman.Clientes c) { return c.Cli_Cod == nombreColumna; });
         if (cliente != null)
         {
             tituloColumna += "-" + cliente.Cli_RazSoc;
         }
         dt.Columns.Add(ClonarColumna(dtDatos.Columns["Cantidad"], nombreColumna, " " + tituloColumna));
     }
     //Llenar crosstab
     string claveAnterior = String.Empty;
     decimal precio = -1;
     for (int i = 0; i < dtDatos.Rows.Count; i++)
     {
         string claveActual=Convert.ToString(dtDatos.Rows[i]["Articulo"]);
         if (incluyeVendedor)
         {
             claveActual += Convert.ToString(dtDatos.Rows[i]["Vendedor"]);
         }
         if (claveAnterior != claveActual)
         {
             if (precio == 0)
             {
                 Advertencias.Add(new CedForecastEntidades.Advertencia("CTabAC-03", "Precio no encontrado para el artículo " + Convert.ToString(dt.Rows[dt.Rows.Count - 1]["Articulo"]), CedForecastEntidades.Advertencia.TipoSeveridad.Error));
             }
             DataRow dr = dt.NewRow();
             CedForecastEntidades.ArticuloInfoAdicional articuloConFamilia = familiaXArticulos.Find(delegate(CedForecastEntidades.ArticuloInfoAdicional c) { return c.IdArticulo == Convert.ToString(dtDatos.Rows[i]["Articulo"]); });
             if (articuloConFamilia == null)
             {
                 dr["Familia"] = "<<<Desconocida>>>";
                 Advertencias.Add(new CedForecastEntidades.Advertencia("CTabAC-01", "Artículo " + Convert.ToString(dtDatos.Rows[i]["Articulo"]) + " sin familia definida", CedForecastEntidades.Advertencia.TipoSeveridad.Advertencia));
             }
             else
             {
                 dr["Familia"] = articuloConFamilia.DescrFamiliaArticulo;
             }
             CedForecastEntidades.Bejerman.Articulos articulo = articulos.Find(delegate(CedForecastEntidades.Bejerman.Articulos c) { return c.Art_CodGen==Convert.ToString(dtDatos.Rows[i]["Articulo"]); });
             if (articulo == null)
             {
                 dr["Articulo"] = Convert.ToString(dtDatos.Rows[i]["Articulo"]) + "-<<<Desconocido>>>";
                 Advertencias.Add(new CedForecastEntidades.Advertencia("CTabAC-02", "Descripción no encontrada para el artículo " + Convert.ToString(dtDatos.Rows[i]["Articulo"]), CedForecastEntidades.Advertencia.TipoSeveridad.Advertencia));
                 precio = 0;
             }
             else
             {
                 dr["Articulo"] = Convert.ToString(dtDatos.Rows[i]["Articulo"]) + "-" + articulo.Art_DescGen + " ("+articulo.Artcla_Cod+")";
                 precio = articulo.Lpr_Precio;
             }
             if (!Valorizado)
             {
                 precio = 1;
             }
             else
             {
                 if (articulo == null)
                 {
                     precio = 0;
                 }
                 else
                 {
                     precio = articulo.Lpr_Precio;
                 }
             }
             if (incluyeVendedor) 
             {
                 CedForecastEntidades.Bejerman.Vendedor vendedor = vendedores.Find(delegate(CedForecastEntidades.Bejerman.Vendedor c) { return c.Ven_Cod == Convert.ToString(dtDatos.Rows[i]["Vendedor"]); });
                 if (vendedor == null)
                 {
                     dr["Vendedor"] = Convert.ToString(dtDatos.Rows[i]["Vendedor"]) + "-<<<Desconocido>>>";
                 }
                 else
                 {
                     dr["Vendedor"] = Convert.ToString(dtDatos.Rows[i]["Vendedor"]) + "-" + vendedor.Ven_Desc;
                 }
             }
             dr["Total"] = 0;
             dt.Rows.Add(dr);
             claveAnterior = claveActual;
         }
         decimal valor = Convert.ToDecimal(dtDatos.Rows[i]["Cantidad"]) * precio;
         dt.Rows[dt.Rows.Count - 1][Convert.ToString(dtDatos.Rows[i]["Cliente"])] = valor;
         dt.Rows[dt.Rows.Count - 1]["Total"] = Convert.ToDecimal(dt.Rows[dt.Rows.Count - 1]["Total"]) + valor;
         dt.AcceptChanges();
     }
     return dt;
 }