예제 #1
0
        public void Configurar()
        {
            dtOrdenCompra = new DataTable();
            dtOrdenCompra.Columns.Add("NumRequerimiento", typeof(string));
            dtOrdenCompra.Columns.Add("ProductoID", typeof(string));
            dtOrdenCompra.Columns.Add("Descripcion", typeof(string));
            dtOrdenCompra.Columns.Add("UM", typeof(string));
            dtOrdenCompra.Columns.Add("NomMarca", typeof(string));
            dtOrdenCompra.Columns.Add("CantidadSolicitada", typeof(decimal));
            dtOrdenCompra.Columns.Add("Costo", typeof(decimal)).DefaultValue   = 0;
            dtOrdenCompra.Columns.Add("PorcIGV", typeof(decimal)).DefaultValue = 0;
            dtOrdenCompra.Columns.Add("Total", typeof(decimal)).DefaultValue   = 0;
            dtOrdenCompra.Columns["Costo"].ReadOnly   = false;
            dtOrdenCompra.Columns["PorcIGV"].ReadOnly = false;
            dtOrdenCompra.Columns["Total"].ReadOnly   = false;

            this.C1tdbCompra.SetDataBinding(dtOrdenCompra, "", true);
            this.C1tdbCompra.ColumnFooters = true;

            //traer sedes de la empresa
            DataTable dtUnidadNegocio = new CL_Almacen().ObtenerAlmacen(AppSettings.EmpresaID);
            DataTable dtSede          = new BaseFunctions().SelectDistinct(dtUnidadNegocio, "SedeID", "NomSede");

            //agregar al combo sedes
            CboSedes.HoldFields();
            CboSedes.DataSource    = dtSede;
            CboSedes.DisplayMember = "NomSede";
            CboSedes.ValueMember   = "SedeID";
        }
예제 #2
0
        private void c1cboCia_SelectedValueChanged(object sender, EventArgs e)
        {
            DataTable DtAlmacenUsuario = new DataTable();

            if (c1cboCia.SelectedValue != null && CboSede.SelectedValue != null)
            {
                //todos los almacenes
                DtAlmacenUsuario = new CL_Almacen().ObtenerAlmacen2(c1cboCia.SelectedValue.ToString(), CboSede.SelectedValue.ToString());
            }
            CboAlmacen.HoldFields();
            CboAlmacen.DataSource    = DtAlmacenUsuario;
            CboAlmacen.DisplayMember = "Descripcion";
            CboAlmacen.ValueMember   = "AlmacenID";
        }
예제 #3
0
        private void CboSede_SelectedValueChanged(object sender, EventArgs e)
        {
            if (CboSede.SelectedIndex != -1)
            {
                DataTable DtAlmacenUsuario = new DataTable();
                DtAlmacenUsuario = new CL_Almacen().ObtenerAlmacen2(EmpresaID, CboSede.SelectedValue.ToString());
                CboAlmacen.HoldFields();
                CboAlmacen.DataSource    = DtAlmacenUsuario;
                CboAlmacen.DisplayMember = "Descripcion";
                CboAlmacen.ValueMember   = "AlmacenID";

                CboAlmacen.Text = "";
                CboProducto_SelectedValueChanged(null, null);//actualizar el almacen

                DtKardex.Rows.Clear();
            }
        }
예제 #4
0
 private void BtnActualizar_Click(object sender, EventArgs e)
 {
     try
     {
         Int32      FilasAfectadas = 0;
         CL_Almacen ObjCL_Almacen  = new CL_Almacen();
         FilasAfectadas = ObjCL_Almacen.UpdateStockAlmacen(CboAlmacen.SelectedValue.ToString(), CboProducto.SelectedValue.ToString(), Convert.ToDecimal(TxtCantidad.Text), Convert.ToDecimal(TxtStockDisponible.Text), Convert.ToDecimal(TxtStockMinimo.Text), Convert.ToDecimal(TxtStockMaximo.Text), AppSettings.UserID);
         if (FilasAfectadas == 1)
         {
             MessageBox.Show("se grabo correctamente", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
         }
         if (FilasAfectadas == 0)//no actualizo nada
         {
             MessageBox.Show("No se actulizo ningun Producto", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Hand);
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
 }
예제 #5
0
        private void CargarUnidadNegocio(string EmpresaID)
        {
            try
            {
                DataTable dtUnidadNegocio = new CL_Almacen().ObtenerAlmacen(EmpresaID);
                DataTable dtSede          = new BaseFunctions().SelectDistinct(dtUnidadNegocio, "SedeID", "NomSede");

                foreach (DataRow drow in dtSede.Rows)
                {
                    TreeNode _node = new TreeNode();
                    _node.Text               = drow["NomSede"].ToString();
                    _node.Tag                = drow["SedeID"].ToString();
                    _node.ImageIndex         = 0;
                    _node.StateImageIndex    = 0;
                    _node.SelectedImageIndex = 0;

                    this.tvwAlmacen.Nodes.Add(_node);

                    foreach (DataRow dRow in dtUnidadNegocio.Rows)
                    {
                        if (dRow["SedeID"].ToString() == drow["SedeID"].ToString())
                        {
                            TreeNode _nodesf = new TreeNode();
                            _nodesf.Text               = dRow["Descripcion"].ToString();
                            _nodesf.Tag                = dRow["AlmacenID"].ToString();
                            _nodesf.ImageIndex         = 1;
                            _nodesf.SelectedImageIndex = 1;
                            _nodesf.StateImageIndex    = 1;
                            _node.Nodes.Add(_nodesf);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\nMetodo : List()", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
예제 #6
0
        private void FrmIngresarOperacion_Load(object sender, EventArgs e)
        {
            //Crear tabla apra el kardex
            DtKardex = new DataTable("Kardex");
            DtKardex.Columns.Add("AlmacenID", typeof(string));
            DtKardex.Columns.Add("ProductoID", typeof(string));
            DtKardex.Columns.Add("Producto", typeof(string));
            DtKardex.Columns.Add("Cantidad", typeof(decimal));
            DtKardex.Columns.Add("CostoUnitario", typeof(decimal));
            DtKardex.Columns.Add("Almacen", typeof(string));
            TdgProductos.SetDataBinding(DtKardex, "", true);

            //obtener todas las sedes
            DataTable Dtsedes = new CL_Empresas().GetSedes();

            CboSede.HoldFields();
            CboSede.DataSource    = Dtsedes;
            CboSede.DisplayMember = "NomSede";
            CboSede.ValueMember   = "SedeID";
            CboSede.SelectedIndex = 0;

            //obtener lista de productos
            DtProductos = new CL_Producto().GetProductos();
            CboProducto.HoldFields();
            CboProducto.DataSource    = DtProductos;
            CboProducto.DisplayMember = "Alias";
            CboProducto.ValueMember   = "ProductoID";
            if (ProductoID != null && ProductoID != "")
            {
                //seleccionar producto
                CboProducto.SelectedValue = ProductoID;
            }

            //traer los almacenes
            DataTable DtAlmacenUsuario = new DataTable();

            DtAlmacenUsuario = new CL_Almacen().ObtenerAlmacen2(EmpresaID, CboSede.SelectedValue.ToString());
            CboAlmacen.HoldFields();
            CboAlmacen.DataSource    = DtAlmacenUsuario;
            CboAlmacen.DisplayMember = "Descripcion";
            CboAlmacen.ValueMember   = "AlmacenID";

            //Obtener Movimiento
            //CL_Kardex ObjCL_Kardex = new CL_Kardex();
            //DTMovimiento = new DataTable();
            //DTMovimiento = ObjCL_Kardex.GetMovimiento();
            CboMovimiento.HoldFields();
            CboMovimiento.DataSource    = DTMovimiento;
            CboMovimiento.DisplayMember = "NomMovimiento";
            CboMovimiento.ValueMember   = "MovimientoID";

            //obtener tipo documento
            //DtTipoDocumento = new DataTable();
            //DtTipoDocumento = ObjCL_Kardex.GetTipoDocumento();
            CboTipoDocumento.HoldFields();
            CboTipoDocumento.DataSource    = DtTipoDocumento;
            CboTipoDocumento.DisplayMember = "Descripcion";
            CboTipoDocumento.ValueMember   = "TipoContabilidad";

            //obtener operacion
            //DTOperacion = new DataTable();
            //DTOperacion = ObjCL_Kardex.GetOperacionKardex();
            CboOperacion.HoldFields();
            CboOperacion.DataSource    = DTOperacion;
            CboOperacion.DisplayMember = "Descripcion";
            CboOperacion.ValueMember   = "OperacionID";
        }
예제 #7
0
 private void BtnGrabarStock_Click(object sender, EventArgs e)
 {
     try
     {
         if (RbInsertarStock.Checked == true)
         {
             ErrProvider.Clear();
             if (c1cboCia.SelectedIndex != -1 & CboSede.SelectedIndex != -1 & CboProducto.SelectedIndex != -1 & TxtCantidad.Text != "" & TxtStockDisponible.Text != "" & TxtStockMaximo.Text != "" & TxtStockMinimo.Text != "" &
                 TxtCantidad.Text != "." & TxtStockDisponible.Text != "." & TxtStockMaximo.Text != "." & TxtStockMinimo.Text != ".")
             {
                 CL_Almacen ObjCL_Almacen = new CL_Almacen();
                 ObjCL_Almacen.InsertStockAlmacen(CboAlmacen.SelectedValue.ToString(), CboProducto.SelectedValue.ToString(), Convert.ToDecimal(TxtCantidad.Text), Convert.ToDecimal(TxtStockDisponible.Text), Convert.ToDecimal(TxtStockMinimo.Text), Convert.ToDecimal(TxtStockMaximo.Text), AppSettings.UserID);
                 MessageBox.Show("se grabo correctamente", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
             }
             else
             {
                 if (c1cboCia.SelectedIndex == -1)
                 {
                     ErrProvider.SetError(c1cboCia, "Debe seleccionar una empresa");
                 }
                 if (CboSede.SelectedIndex == -1)
                 {
                     ErrProvider.SetError(CboSede, "Debe seleccionar una sede");
                 }
                 if (CboProducto.SelectedIndex == -1)
                 {
                     ErrProvider.SetError(CboProducto, "Debe seleccionar un producto");
                 }
                 if (TxtCantidad.Text == "" | TxtCantidad.Text == ".")
                 {
                     ErrProvider.SetError(TxtCantidad, "Debe ingresar una cantidad valida");
                 }
                 if (TxtStockDisponible.Text == "" | TxtStockDisponible.Text == ".")
                 {
                     ErrProvider.SetError(TxtStockDisponible, "Debe ingresar una cantidad valida");
                 }
                 if (TxtStockMaximo.Text == "" | TxtStockMaximo.Text == ".")
                 {
                     ErrProvider.SetError(TxtStockMaximo, "Debe ingresar una cantidad valida");
                 }
                 if (TxtStockMinimo.Text == "" | TxtStockMinimo.Text == ".")
                 {
                     ErrProvider.SetError(TxtStockMinimo, "Debe ingresar una cantidad valida");
                 }
             }
         }
         else if (RbInsertarPrecio.Checked == true)
         {
             ErrProvider.Clear();
             if (c1cboCia.SelectedIndex != -1 & CboSede.SelectedIndex != -1 & CboProducto.SelectedIndex != -1 & TxtPrecio.Text != "" & TxtPrecio.Text != ".")
             {
                 CL_Producto ObjCL_Producto = new CL_Producto();
                 ObjCL_Producto.InsertPrecioNuevo(CboAlmacen.SelectedValue.ToString(), CboProducto.SelectedValue.ToString(), AppSettings.UserID, Convert.ToDecimal(TxtPrecio.Text), AppSettings.SedeID);
                 MessageBox.Show("se grabo correctamente el precio", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
             }
             else
             {
                 if (c1cboCia.SelectedIndex == -1)
                 {
                     ErrProvider.SetError(c1cboCia, "Debe seleccionar una empresa");
                 }
                 if (CboSede.SelectedIndex == -1)
                 {
                     ErrProvider.SetError(CboSede, "Debe seleccionar una sede");
                 }
                 if (CboProducto.SelectedIndex == -1)
                 {
                     ErrProvider.SetError(CboProducto, "Debe seleccionar un producto");
                 }
                 if (TxtPrecio.Text == "" | TxtPrecio.Text == ".")
                 {
                     ErrProvider.SetError(TxtPrecio, "Debe ingresar una cantidad valida");
                 }
             }
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
 }
예제 #8
0
        private void BtnAnular_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("¿Seguro que desea anular la guia de remisión Nro: " + TxtNumGuiaRemision.Text + ".?", "Guia de remisión", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                //****************************** anular guia *****************************************

                #region Crear Tablas
                //tabla para actualizar el nuevo stock (agregar productos recepcionados)
                DataTable DtActuStockLocal = new DataTable();
                DtActuStockLocal.TableName = "StockAlmacen";
                DtActuStockLocal.Columns.Add("NumRequerimiento", typeof(string));
                DtActuStockLocal.Columns.Add("AlmacenID", typeof(string));
                DtActuStockLocal.Columns.Add("ProductoID", typeof(string));
                DtActuStockLocal.Columns.Add("StockAdicion", typeof(decimal));
                #endregion

                //actualizar datos del requerimiento
                CL_Requerimientos ObjCL_Requerimientos = new CL_Requerimientos();
                CL_GuiaRemision   ObjCL_GuiaRemision   = new CL_GuiaRemision();

                foreach (DataRow Row2 in DtDetalle.Rows)
                {
                    #region Actualizar Estado Requerimientos
                    string  NumRequerimiento;
                    decimal CantidadTransito;
                    string  ProductoID;


                    NumRequerimiento = Row2["NumRequerimiento"].ToString();
                    ProductoID       = Row2["ProductoID"].ToString();
                    CantidadTransito = Convert.ToDecimal(Row2["CantidadEnviada"]);

                    bool Valor;

                    Valor = ObjCL_Requerimientos.UpdateDetalleRequerimientoAnulado(NumRequerimiento, CantidadTransito, ProductoID, AppSettings.UserID, AppSettings.SedeID);

                    if (Valor == false)
                    {
                        MessageBox.Show("ocurrio un error al intentar actualizar el requerimiento: \r\nNumRequerimiento: " + NumRequerimiento + "ProductoID: " + ProductoID + "\r\nCantidadTransito: " + CantidadTransito, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }

                    Valor = ObjCL_GuiaRemision.UpdateGuiaRemisionEstado(TxtGuia.Text, 10, "A", AppSettings.UserID, AppSettings.SedeID);
                    #endregion

                    #region llenar tabla para actualizar el stock local
                    DataRow DrR = DtActuStockLocal.NewRow();
                    DrR["NumRequerimiento"] = Row2["NumRequerimiento"];
                    DrR["AlmacenID"]        = AppSettings.EmpresaID + AppSettings.SedeID + "000";
                    DrR["ProductoID"]       = Row2["ProductoID"];
                    DrR["StockAdicion"]     = Row2["CantidadEnviada"];
                    DtActuStockLocal.Rows.Add(DrR);
                    #endregion
                }

                #region agrupar para actualizar el stock local
                //Agrupar los productos apra almacenarlos
                DataTable DtProducto        = new DataTable();
                DataTable DtActuStockLocal2 = new DataTable();
                DtActuStockLocal2.TableName = "StockAlmacen";
                DtActuStockLocal2.Columns.Add("NumRequerimiento", typeof(string));
                DtActuStockLocal2.Columns.Add("AlmacenID", typeof(string));
                DtActuStockLocal2.Columns.Add("ProductoID", typeof(string));
                DtActuStockLocal2.Columns.Add("StockAdicion", typeof(decimal));
                DtProducto = new BaseFunctions().SelectDistinct(DtActuStockLocal, "ProductoID", "AlmacenID");
                foreach (DataRow RowP in DtProducto.Rows)
                {
                    DataView Dv = new DataView(DtActuStockLocal);
                    Dv.RowFilter = "ProductoID = '" + RowP["ProductoID"] + "' and AlmacenID = '" + RowP["AlmacenID"] + "'";
                    decimal Suma             = 0;
                    string  NumRequerimiento = "";
                    foreach (DataRowView Drv in Dv) //sumar las cantidades por producto
                    {
                        Suma            += Convert.ToDecimal(Drv["StockAdicion"]);
                        NumRequerimiento = Drv["NumRequerimiento"].ToString();
                    }
                    DataRow DrR = DtActuStockLocal2.NewRow();
                    DrR["NumRequerimiento"] = NumRequerimiento;
                    DrR["AlmacenID"]        = RowP["AlmacenID"];
                    DrR["ProductoID"]       = RowP["ProductoID"];
                    DrR["StockAdicion"]     = Suma;
                    DtActuStockLocal2.Rows.Add(DrR);
                }

                #endregion
                #region Actualizar el stock
                CL_Almacen ObjCL_Almacen = new CL_Almacen();

                foreach (DataRow R in DtActuStockLocal2.Rows)
                {
                    ObjCL_Almacen.UpdateStockAdidion(R["AlmacenID"].ToString(), R["ProductoID"].ToString(), Convert.ToDecimal(R["StockAdicion"]), R["NumRequerimiento"].ToString(), "R");
                }
                #endregion
            }

            MessageBox.Show("Se termino de anular la guía", "Guia remitente", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
예제 #9
0
        private void CrearHojaDespacho()
        {
            //obtener el distinct de las facturas para crear guias de remitente y de transportista
            DtFacturas = new DataTable();
            DtFacturas = new BaseFunctions().SelectDistinct(DetallesRequerimientos, "Factura");

            //calcular el total del peso enviado
            for (int i = 0; i < this.TdgDetalleHojaDespacho.Splits[0].Rows.Count; i++)
            {
                if (this.TdgDetalleHojaDespacho.Columns[2].CellValue(i) != DBNull.Value)
                {
                    PesoTotal += Convert.ToInt32(this.TdgDetalleHojaDespacho.Columns[10].CellValue(i));
                }
            }

            #region crear tablas
            //Insertar Hoja de despacho
            E_HojaDespacho ObjHojaDespacho = new E_HojaDespacho();
            ObjHojaDespacho.EmpresaID         = AppSettings.EmpresaID;
            ObjHojaDespacho.EmpresaTransporte = EmpresaTransporte;
            ObjHojaDespacho.NombreChofer      = NomTransportista;
            ObjHojaDespacho.placa             = TxtPlaca.Text;
            ObjHojaDespacho.Carrosa           = TxtCarrosa.Text;
            ObjHojaDespacho.FechaLlegada      = Convert.ToDateTime(DeFechaLlegada.Value);
            ObjHojaDespacho.FechaSalida       = Convert.ToDateTime(DeFechaSalida.Value);
            ObjHojaDespacho.NumJabas          = 0;
            ObjHojaDespacho.PesoTotal         = PesoTotal;
            ObjHojaDespacho.PesoNeto          = 0;
            ObjHojaDespacho.TotalAnimales     = 0;
            ObjHojaDespacho.TaraTotal         = 0;
            ObjHojaDespacho.UsuarioID         = AppSettings.UserID;

            NumHojaDespacho = new CL_HojaDespacho().InsertHojaDespacho(ObjHojaDespacho, AppSettings.SedeID);

            //Tabla para insertar el detalle de la hoja de despacho
            DetalleHojaDespacho           = new DataTable();
            DetalleHojaDespacho.TableName = "DetalleHojaDespacho";
            DetalleHojaDespacho.Columns.Add("ProductoID", typeof(string));
            DetalleHojaDespacho.Columns.Add("NumHojaDespacho", typeof(string));
            DetalleHojaDespacho.Columns.Add("NumGuiaRemision", typeof(string));
            DetalleHojaDespacho.Columns.Add("NumRequerimiento", typeof(string));
            DetalleHojaDespacho.Columns.Add("NroFactura", typeof(string));
            DetalleHojaDespacho.Columns.Add("TotalPeso", typeof(decimal));
            DetalleHojaDespacho.Columns.Add("Motivo", typeof(string));
            DetalleHojaDespacho.Columns.Add("NumGuiaTransportista", typeof(string));
            DetalleHojaDespacho.Columns.Add("Bultos", typeof(string));
            DetalleHojaDespacho.Columns.Add("IDProveedor", typeof(int));

            //Tabla para Mostrar Hoja de despacho
            DetalleHojaDespacho2           = new DataTable();
            DetalleHojaDespacho2.TableName = "DetalleHojaDespacho2";
            DetalleHojaDespacho2.Columns.Add("Proveedor", typeof(string));
            DetalleHojaDespacho2.Columns.Add("NroFactura", typeof(string));
            DetalleHojaDespacho2.Columns.Add("NumGuiaRemision", typeof(string));
            DetalleHojaDespacho2.Columns.Add("NumGuiaTransportista", typeof(string));
            DetalleHojaDespacho2.Columns.Add("Producto", typeof(string));
            DetalleHojaDespacho2.Columns.Add("TotalPeso", typeof(decimal));
            DetalleHojaDespacho2.Columns.Add("Bultos", typeof(string));
            #endregion

            foreach (DataRow Row in DtFacturas.Rows)
            {
                NroFactura = Row["Factura"].ToString();

                //filtrar tabla para obtener los datos relacionados a la factura y asi crear las guias de remision
                DataView DvDetallesRequerimientos = new DataView(DetallesRequerimientos);
                DvDetallesRequerimientos.RowFilter = "Factura = '" + NroFactura + "'";
                DataTable DtRequerimientos;
                DtRequerimientos = DvDetallesRequerimientos.ToTable();
                DtRequerimientos.DefaultView.Sort = "Producto";


                try
                {
                    #region crear tablas
                    //detalles de guia de remision
                    DetalleGuiaRemision           = new DataTable();
                    DetalleGuiaRemision.TableName = "DetalleGuiaRemision";
                    DetalleGuiaRemision.Columns.Add("NumGuiaRemision", typeof(string));
                    DetalleGuiaRemision.Columns.Add("ProductoID", typeof(string));
                    DetalleGuiaRemision.Columns.Add("NumRequerimiento", typeof(string));
                    DetalleGuiaRemision.Columns.Add("PesoNeto", typeof(decimal));
                    DetalleGuiaRemision.Columns.Add("PesoTara", typeof(decimal));
                    DetalleGuiaRemision.Columns.Add("CantidadEnviada", typeof(decimal));
                    DetalleGuiaRemision.Columns.Add("CantidadRecibida", typeof(decimal));
                    DetalleGuiaRemision.Columns.Add("EstadoID", typeof(int));

                    //detalles de guia de transporte
                    DetalleGuiaTransporte           = new DataTable();
                    DetalleGuiaTransporte.TableName = "DetalleGuiaTransportista";
                    DetalleGuiaTransporte.Columns.Add("NumGuiaTransportista", typeof(string));
                    DetalleGuiaTransporte.Columns.Add("ProductoID", typeof(string));
                    DetalleGuiaTransporte.Columns.Add("NumRequerimiento", typeof(string));
                    DetalleGuiaTransporte.Columns.Add("PesoNeto", typeof(decimal));
                    DetalleGuiaTransporte.Columns.Add("PesoTara", typeof(decimal));
                    DetalleGuiaTransporte.Columns.Add("CantidadEnviada", typeof(decimal));

                    //tabla para actualizar el estado del requerimiento
                    DataTable DtActuEstadoReq = new DataTable();
                    DtActuEstadoReq.TableName = "DetalleRequerimiento";
                    DtActuEstadoReq.Columns.Add("NumRequerimiento", typeof(string));
                    DtActuEstadoReq.Columns.Add("CantidadTransito", typeof(decimal));
                    DtActuEstadoReq.Columns.Add("ProductoID", typeof(string));
                    DtActuEstadoReq.Columns.Add("EstadoID", typeof(int));
                    #endregion

                    NumGuiaRemision = CrearGuiaRemitente();

                    //se crea guia de transportista si solo si el camion no pertenece a la empresa de destino
                    if ((AppSettings.EmpresaID != CamionEmpresaID) && CamionEmpresaID != "EX")
                    {
                        NumGuiaTransportista = CrearGuiaTransporte();
                    }
                    else
                    {
                        NumGuiaTransportista = ""; //no necesita guia de transporte
                    }
                    int Cantidad = 0;              //contador que indicara si la cantidad de productos no sean mayor de 12 (lo que puede contener la guia)
                    foreach (DataRow Row2 in DtRequerimientos.Rows)
                    {
                        Cantidad++;

                        if (Cantidad > 12)
                        {
                            Cantidad = 1;
                            //se crea guia de transportista si solo si el camion no pertenece a la empresa de destino
                            if ((AppSettings.EmpresaID != CamionEmpresaID) && CamionEmpresaID != "EX")
                            {
                                NumGuiaTransportista = CrearGuiaTransporte();
                            }
                            else
                            {
                                NumGuiaTransportista = ""; //no necesita guia de transporte
                            }
                            NumGuiaRemision = CrearGuiaRemitente();
                        }

                        if (Row2["Anular"] == DBNull.Value || Row2["Anular"].ToString() == "False")
                        {
                            //analizar el stock y si se logro la actualizacion crear las guias
                            bool Actualizo = false;                          //'9-' indica que es guia remitente
                            //es para kardex
                            if (Row2["TipoRequerimiento"].ToString() == "C") //en compras baja el stock local y el disponible
                            {
                                Actualizo = new CL_Almacen().UpdateStockSustraccion(Row2["AlmacenID"].ToString(), Convert.ToString(Row2["SProductoID"]), Convert.ToDecimal(Row2["CantidadDespachada"]), "D", AppSettings.EmpresaID + CboSedeDestino.SelectedValue.ToString() + Row2["AlmacenID"].ToString().Substring(7), 2, "09", NumGuiaRemision.Substring(2, 3), Convert.ToInt32(NumGuiaRemision.Substring(6)), "11", AppSettings.UserID);
                            }
                            else if (Row2["TipoRequerimiento"].ToString() == "T")//en transferencia solo baja el stock local
                            {
                                Actualizo = new CL_Almacen().UpdateStockSustraccion(Row2["AlmacenID"].ToString(), Convert.ToString(Row2["SProductoID"]), Convert.ToDecimal(Row2["CantidadDespachada"]), "S", AppSettings.EmpresaID + CboSedeDestino.SelectedValue.ToString() + Row2["AlmacenID"].ToString().Substring(7), 2, "09", NumGuiaRemision.Substring(2, 3), Convert.ToInt32(NumGuiaRemision.Substring(6)), "11", AppSettings.UserID);
                            }

                            if (Actualizo == true)
                            {
                                //para detalle guia remision
                                DataRow RowGR = DetalleGuiaRemision.NewRow();
                                RowGR["NumGuiaRemision"]  = NumGuiaRemision;
                                RowGR["ProductoID"]       = Row2["SProductoID"];
                                RowGR["NumRequerimiento"] = Row2["NumRequerimiento"];
                                RowGR["PesoNeto"]         = Row2["PesoTotal"];
                                RowGR["PesoTara"]         = 0;
                                RowGR["CantidadEnviada"]  = Row2["CantidadDespachada"];
                                RowGR["CantidadRecibida"] = DBNull.Value;
                                RowGR["EstadoID"]         = 2;
                                DetalleGuiaRemision.Rows.Add(RowGR);

                                //para detalle guia transporte
                                if (NumGuiaTransportista != "")
                                {
                                    DataRow RowGT = DetalleGuiaTransporte.NewRow();
                                    RowGT["NumGuiaTransportista"] = NumGuiaTransportista;
                                    RowGT["ProductoID"]           = Row2["SProductoID"];
                                    RowGT["NumRequerimiento"]     = Row2["NumRequerimiento"];
                                    RowGT["PesoNeto"]             = Row2["PesoTotal"];
                                    RowGT["PesoTara"]             = 0;
                                    RowGT["CantidadEnviada"]      = Row2["CantidadDespachada"];
                                    DetalleGuiaTransporte.Rows.Add(RowGT);
                                }
                                //para estado requerimiento
                                DataRow RowD2 = DtActuEstadoReq.NewRow();
                                RowD2["ProductoID"]       = Row2["ProductoID"];
                                RowD2["NumRequerimiento"] = Row2["NumRequerimiento"];

                                //identificar el estado actual del requerimiento
                                if (AppSettings.SedeID == "001PU")
                                {
                                    if (Convert.ToDecimal(Row2["CantidadRecibida"]) + Convert.ToDecimal(Row2["CantidadDespachada"]) == Convert.ToDecimal(Row2["CantidadSolicitada"]))
                                    {
                                        //transito DESTINO total
                                        RowD2["EstadoID"] = 9;
                                    }
                                    else if (Convert.ToDecimal(Row2["CantidadRecibida"]) + Convert.ToDecimal(Row2["CantidadDespachada"]) < Convert.ToDecimal(Row2["CantidadSolicitada"]))
                                    {
                                        //transito DESTINO parcial
                                        RowD2["EstadoID"] = 8;
                                    }

                                    /*siempre va a estar en transito porque la
                                     * transferencia es entre almacenes y no pasa por industria*/
                                    if (RBTransferencia.Checked == true)
                                    {
                                        RowD2["CantidadTransito"] = Row2["CantidadDespachada"];
                                    }

                                    /*en este caso sera "0" porque las compras vienen de lima*/
                                    if (RbCompras.Checked == true)
                                    {
                                        RowD2["CantidadTransito"] = 0;
                                    }
                                }
                                else
                                {
                                    if (Convert.ToDecimal(Row2["CantidadRecibida"]) + Convert.ToDecimal(Row2["CantidadTransito"]) + Convert.ToDecimal(Row2["CantidadDespachada"]) == Convert.ToDecimal(Row2["CantidadSolicitada"]))
                                    {
                                        //transito total
                                        RowD2["EstadoID"] = 2;
                                    }
                                    else if (Convert.ToDecimal(Row2["CantidadRecibida"]) + Convert.ToDecimal(Row2["CantidadTransito"]) + Convert.ToDecimal(Row2["CantidadDespachada"]) < Convert.ToDecimal(Row2["CantidadSolicitada"]))
                                    {
                                        //transito parcial
                                        RowD2["EstadoID"] = 6;
                                    }
                                    RowD2["CantidadTransito"] = Row2["CantidadDespachada"];
                                }
                                DtActuEstadoReq.Rows.Add(RowD2);

                                //para detalle hoja despacho
                                DataRow RowHD = DetalleHojaDespacho.NewRow();
                                RowHD["ProductoID"]           = Row2["SProductoID"];
                                RowHD["NumHojaDespacho"]      = NumHojaDespacho;
                                RowHD["NumGuiaRemision"]      = NumGuiaRemision;
                                RowHD["NumRequerimiento"]     = Row2["NumRequerimiento"];
                                RowHD["NroFactura"]           = Row2["Factura"];
                                RowHD["TotalPeso"]            = Row2["PesoTotal"];
                                RowHD["Motivo"]               = Row2["Motivo"];
                                RowHD["NumGuiaTransportista"] = NumGuiaTransportista;
                                RowHD["Bultos"]               = Row2["Bultos"];
                                RowHD["IDProveedor"]          = Row2["IDProveedor"];
                                DetalleHojaDespacho.Rows.Add(RowHD);

                                //para detalle hoja despacho para presentar
                                DataRow RowHD2 = DetalleHojaDespacho2.NewRow();
                                RowHD2["Proveedor"]            = Row2["Proveedor"];
                                RowHD2["NroFactura"]           = Row2["Factura"];
                                RowHD2["NumGuiaRemision"]      = NumGuiaRemision;
                                RowHD2["NumGuiaTransportista"] = NumGuiaTransportista;
                                RowHD2["Producto"]             = Row2["Producto"];
                                RowHD2["TotalPeso"]            = Row2["PesoTotal"];
                                RowHD2["Bultos"] = Row2["Bultos"];
                                DetalleHojaDespacho2.Rows.Add(RowHD2);
                            }
                            else
                            {
                                MessageBox.Show("No existe Stock suficiente en el almacen " + Row2["AlmacenID"].ToString() + " del producto \r\n" + Row2["Producto"].ToString() + ".", "Stock Almacen", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                            }
                        }
                    }
                    #region Actualizar con Xml
                    //insertar detalles guia remision
                    if (DetalleGuiaRemision.Rows.Count > 0)
                    {
                        string xml = new BaseFunctions().GetXML(DetalleGuiaRemision).Replace("NewDataSet", "DocumentElement");
                        bool   Valor;
                        Valor = new CL_GuiaRemision().InsertXMLDetalleGuiaRemision(xml);
                        if (Valor == false)
                        {
                            MessageBox.Show("Ocurrio un error al intentar guardar el detalle de la Guía de Remisión", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }

                    //insertar detalle guia de transporte
                    if (DetalleGuiaTransporte.Rows.Count > 0)
                    {
                        string xml = new BaseFunctions().GetXML(DetalleGuiaTransporte).Replace("NewDataSet", "DocumentElement");
                        bool   Valor;
                        Valor = new CL_GuiaTransportista().InsertXMLDetalleGuiaTransporte(xml);
                        if (Valor == false)
                        {
                            MessageBox.Show("Ocurrio un error al intentar guardar el detalle de la Guía de Transporte", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }

                    //actualizar estado de los requerimientos
                    if (DtActuEstadoReq.Rows.Count > 0)
                    {
                        string xml = new BaseFunctions().GetXML(DtActuEstadoReq).Replace("NewDataSet", "DocumentElement");
                        bool   Valor;
                        Valor = new CL_Requerimientos().UpdateXMLDetalleRequerimientoEstado(xml, "E", AppSettings.UserID, AppSettings.SedeID);
                        if (Valor == false)
                        {
                            MessageBox.Show("Ocurrio un error al intentar actualizar el estado de los requerimientos", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }

                    MessageBox.Show("Se guardo correctamente los datos", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    #endregion
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }//fin del foreach de las facturas

            //insertar los detalles de hoja de despacho

            if (DetalleHojaDespacho.Rows.Count > 0)
            {
                string xml = new BaseFunctions().GetXML(DetalleHojaDespacho).Replace("NewDataSet", "DocumentElement");
                bool   Valor;
                Valor = new CL_HojaDespacho().InsertXMLDetalleHojaDespacho(xml);
                if (Valor == false)
                {
                    MessageBox.Show("Ocurrio un error al intentar insertar los detalles de la hoja de despacho", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    TdgDetalleHoja.Visible = true;
                    TdgDetalleHoja.SetDataBinding(DetalleHojaDespacho2, "", true);
                }
            }
        }
예제 #10
0
        public string DespachoInterno(DataTable DtProductosDespacho, int UsuarioID, string Empresa, string NomEmpresa, string Sede)
        {
            string    NumHojaDespacho;
            string    NumGuiaRemision;
            string    NumGuiaTransportista;
            DataTable DetalleHojaDespacho = new DataTable();

            #region crear tablas
            //Insertar Hoja de despacho
            E_HojaDespacho ObjHojaDespacho = new E_HojaDespacho();
            ObjHojaDespacho.EmpresaID         = Empresa;
            ObjHojaDespacho.EmpresaTransporte = NomEmpresa;
            ObjHojaDespacho.NombreChofer      = "Sin chofer";
            ObjHojaDespacho.placa             = "Sin Placa";
            ObjHojaDespacho.Carrosa           = null;
            ObjHojaDespacho.FechaLlegada      = DateTime.Now;
            ObjHojaDespacho.FechaSalida       = DateTime.Now;
            ObjHojaDespacho.NumJabas          = 0;
            ObjHojaDespacho.PesoTotal         = 0;
            ObjHojaDespacho.PesoNeto          = 0;
            ObjHojaDespacho.TotalAnimales     = 0;
            ObjHojaDespacho.TaraTotal         = 0;
            ObjHojaDespacho.UsuarioID         = UsuarioID;

            NumHojaDespacho = new CL_HojaDespacho().InsertHojaDespacho(ObjHojaDespacho, Sede);

            //Tabla para insertar el detalle de la hoja de despacho
            DetalleHojaDespacho           = new DataTable();
            DetalleHojaDespacho.TableName = "DetalleHojaDespacho";
            DetalleHojaDespacho.Columns.Add("ProductoID", typeof(string));
            DetalleHojaDespacho.Columns.Add("NumHojaDespacho", typeof(string));
            DetalleHojaDespacho.Columns.Add("NumGuiaRemision", typeof(string));
            DetalleHojaDespacho.Columns.Add("NumRequerimiento", typeof(string));
            DetalleHojaDespacho.Columns.Add("NroFactura", typeof(string));
            DetalleHojaDespacho.Columns.Add("TotalPeso", typeof(decimal));
            DetalleHojaDespacho.Columns.Add("Motivo", typeof(string));
            DetalleHojaDespacho.Columns.Add("NumGuiaTransportista", typeof(string));
            DetalleHojaDespacho.Columns.Add("Bultos", typeof(string));
            DetalleHojaDespacho.Columns.Add("IDProveedor", typeof(int));

            #endregion


            try
            {
                #region crear tablas
                //tabla para actualizar el estado del requerimiento
                DataTable DtActuEstadoReq = new DataTable();
                DtActuEstadoReq.TableName = "DetalleRequerimiento";
                DtActuEstadoReq.Columns.Add("NumRequerimiento", typeof(string));
                DtActuEstadoReq.Columns.Add("ProductoID", typeof(string));
                DtActuEstadoReq.Columns.Add("CantidadRecibida", typeof(decimal));
                DtActuEstadoReq.Columns.Add("EstadoID", typeof(int));

                //tabla para actualizar el nuevo stock (agregar productos recepcionados)
                DataTable DtActuStockLocal = new DataTable();
                DtActuStockLocal.TableName = "StockAlmacen";
                DtActuStockLocal.Columns.Add("AlmacenID", typeof(string));
                DtActuStockLocal.Columns.Add("ProductoID", typeof(string));
                DtActuStockLocal.Columns.Add("Adicion", typeof(decimal));
                #endregion

                NumGuiaRemision = Empresa + "PRO-0000001";

                NumGuiaTransportista = "";

                foreach (DataRow Row2 in DtProductosDespacho.Rows)
                {
                    if (Convert.ToBoolean(Row2["Agregar"]) == true)
                    {
                        //analizar el stock y si se logro la actualizacion crear las guias
                        bool Actualizo = false;
                        //mueve kardex
                        //50 es para "GUIA SALIDA PRODUCCION"
                        Actualizo = new CL_Almacen().UpdateStockSustraccion(Row2["AlmacenOrigen"].ToString(), Convert.ToString(Row2["ProductoID"]), Convert.ToDecimal(Row2["CantidadSolicitada"]), "S", Empresa + Sede + "PRO", 2, "50", "PRO", null, "10", UsuarioID);
                        if (Actualizo == true)
                        {
                            //para estado requerimiento
                            DataRow RowD2 = DtActuEstadoReq.NewRow();
                            RowD2["NumRequerimiento"] = Row2["NumRequerimiento"];
                            RowD2["ProductoID"]       = Row2["ProductoID"];
                            RowD2["CantidadRecibida"] = Row2["CantidadSolicitada"];
                            RowD2["EstadoID"]         = 5; //Recepcion completa
                            DtActuEstadoReq.Rows.Add(RowD2);

                            //para detalle hoja despacho
                            DataRow RowHD = DetalleHojaDespacho.NewRow();
                            RowHD["ProductoID"]           = Row2["ProductoID"];
                            RowHD["NumHojaDespacho"]      = NumHojaDespacho;
                            RowHD["NumGuiaRemision"]      = NumGuiaRemision;
                            RowHD["NumRequerimiento"]     = Row2["NumRequerimiento"];
                            RowHD["NroFactura"]           = "";
                            RowHD["TotalPeso"]            = DBNull.Value;
                            RowHD["Motivo"]               = Row2["Observacion"];
                            RowHD["NumGuiaTransportista"] = NumGuiaTransportista;
                            RowHD["Bultos"]               = Row2["CantidadSolicitada"].ToString() + " " + Row2["UnidadMedidaID"].ToString();
                            RowHD["IDProveedor"]          = DBNull.Value;
                            DetalleHojaDespacho.Rows.Add(RowHD);

                            #region actualiza el stock local
                            DataRow DrR = DtActuStockLocal.NewRow();
                            DrR["AlmacenID"]  = Row2["AlmacenDestino"];
                            DrR["ProductoID"] = Row2["ProductoID"];
                            DrR["Adicion"]    = Row2["CantidadSolicitada"];
                            DtActuStockLocal.Rows.Add(DrR);
                            #endregion
                        }
                        else
                        {
                            throw new Exception("No existe Stock suficiente en el almacen " + Row2["AlmacenOrigen"].ToString() + " del producto \r\n" + Row2["NomProducto"].ToString() + ".");
                        }
                    }
                }//fin foreach

                #region agrupar para actualizar el stock local
                //Agrupar los productos apra almacenarlos
                DataTable DtProducto        = new DataTable();
                DataTable DtActuStockLocal2 = new DataTable();
                DtActuStockLocal2.TableName = "StockAlmacen";
                DtActuStockLocal2.Columns.Add("AlmacenID", typeof(string));
                DtActuStockLocal2.Columns.Add("AlmacenOrigen", typeof(string));
                DtActuStockLocal2.Columns.Add("ProductoID", typeof(string));
                DtActuStockLocal2.Columns.Add("Adicion", typeof(decimal));
                DtActuStockLocal2.Columns.Add("NroDocumento", typeof(string));
                DtProducto = new BaseFunctions().SelectDistinct(DtActuStockLocal, "ProductoID", "AlmacenID");
                foreach (DataRow RowP in DtProducto.Rows)
                {
                    DataView Dv = new DataView(DtActuStockLocal);
                    Dv.RowFilter = "ProductoID = '" + RowP["ProductoID"] + "' and AlmacenID = '" + RowP["AlmacenID"] + "'";
                    decimal Suma = 0;
                    foreach (DataRowView Drv in Dv) //sumar las cantidades por producto
                    {
                        Suma += Convert.ToDecimal(Drv["Adicion"]);
                    }
                    DataRow DrR = DtActuStockLocal2.NewRow();
                    DrR["AlmacenID"]     = RowP["AlmacenID"];
                    DrR["AlmacenOrigen"] = Empresa + Sede + RowP["AlmacenID"].ToString().Substring(7);
                    DrR["ProductoID"]    = RowP["ProductoID"];
                    DrR["Adicion"]       = Suma;
                    DrR["NroDocumento"]  = NumHojaDespacho;
                    DtActuStockLocal2.Rows.Add(DrR);
                }

                #endregion

                #region Actualizar con Xml

                //actualizar estado de los requerimientos
                if (DtActuEstadoReq.Rows.Count > 0 & DtActuStockLocal2.Rows.Count > 0 & DetalleHojaDespacho.Rows.Count > 0)
                {
                    bool   Valor;
                    string xml = new BaseFunctions().GetXML(DtActuEstadoReq).Replace("NewDataSet", "DocumentElement");
                    Valor = new CL_Requerimientos().UpdateXMLDetalleRequerimientoEstado(xml, "I", UsuarioID, Sede);//interno
                    string xml1 = new BaseFunctions().GetXML(DtActuStockLocal2).Replace("NewDataSet", "DocumentElement");
                    Valor = new CL_Almacen().UpdateXMLStockAlmacen(xml1, 4, UsuarioID);
                    string xml2 = new BaseFunctions().GetXML(DetalleHojaDespacho).Replace("NewDataSet", "DocumentElement");
                    Valor = new CL_HojaDespacho().InsertXMLDetalleHojaDespacho(xml2);
                }
                #endregion

                return(NumHojaDespacho);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
예제 #11
0
        public void AgregarProductosterminados(DataTable DtProductosBatch, DataTable DtTemp, string EmpresaID, string SedeId, int UserID, int MateriaPrimaHistoricoID)
        {
            //agrega a productos terminados lo ya producido
            try
            {
                //tabla para actualizar el nuevo stock (agregar productos recepcionados)
                DataTable DtActuStockLocal = new DataTable();
                DtActuStockLocal.TableName = "StockAlmacen";
                DtActuStockLocal.Columns.Add("AlmacenID", typeof(string));
                DtActuStockLocal.Columns.Add("AlmacenOrigen", typeof(string));
                DtActuStockLocal.Columns.Add("ProductoID", typeof(string));
                DtActuStockLocal.Columns.Add("Adicion", typeof(decimal));

                //tabla para actualizar el nuevo stock (agregar productos recepcionados)
                DataTable DtDisminuirStock = new DataTable();
                DtDisminuirStock.Columns.Add("AlmacenID", typeof(string));
                DtDisminuirStock.Columns.Add("ProductoID", typeof(string));
                DtDisminuirStock.Columns.Add("Cantidad", typeof(decimal));

                //tabla para cambiar el estado de lo producido
                DataTable DtEstadoProducido = new DataTable();
                DtEstadoProducido.TableName = "MateriasPrimasFormuladosEstado";
                DtEstadoProducido.Columns.Add("MateriaPrimaHistoricoID", typeof(Int32));
                DtEstadoProducido.Columns.Add("ProductoID", typeof(string));

                #region actualiza el stock local

                string Envase       = "01";   //envase sacos
                string Presentacion = "0139"; //presentacion 50 Kg
                foreach (DataRow Row in DtProductosBatch.Rows)
                {
                    if (Convert.ToBoolean(Row["Producir"]) == true)
                    {
                        DataRow DrR = DtActuStockLocal.NewRow();
                        DrR["AlmacenID"]     = EmpresaID + SedeId + "PTE";
                        DrR["AlmacenOrigen"] = EmpresaID + SedeId + "PRO";
                        DrR["ProductoID"]    = Row["ProductoID"].ToString().Substring(0, 5) + Envase + Presentacion + Row["ProductoID"].ToString().Substring(11);
                        DrR["Adicion"]       = Convert.ToDecimal(Row["Batch"]) * 30;// es por 20 porque un batch equivale a 20 sacos de 50 kg

                        #region Aca se agrega los ya terminados para cambiarles de estado
                        DataRow DrE = DtEstadoProducido.NewRow();
                        DrE["MateriaPrimaHistoricoID"] = MateriaPrimaHistoricoID;
                        DrE["ProductoID"] = Row["ProductoID"];
                        DtEstadoProducido.Rows.Add(DrE);
                        #endregion

                        #region Disminuir el insumo de almacen Produccion


                        //filtrar por el producto terminado y disminuirlo de "Produccion"
                        DataView DvDisProduccion = new DataView(DtTemp);
                        DvDisProduccion.RowFilter = "ProductoID = '" + Row["ProductoID"] + "'";

                        //recurrer vista filtrada y disminuir del almacen local
                        foreach (DataRowView Drv in DvDisProduccion)
                        {
                            DataRow DrDi = DtDisminuirStock.NewRow();
                            DrDi["AlmacenID"]  = EmpresaID + SedeId + "PRO";
                            DrDi["ProductoID"] = Convert.ToString(Drv["ProductoIDMateria"]);
                            DrDi["Cantidad"]   = Convert.ToDecimal(Drv["Cantidad"]) * Convert.ToDecimal(Row["Batch"]);
                            DtDisminuirStock.Rows.Add(DrDi);
                        }
                        #endregion

                        DtActuStockLocal.Rows.Add(DrR);
                    }
                }
                #endregion

                #region agrupar para actualizar el stock local
                //Agrupar los productos apra almacenarlos
                DataTable DtProducto        = new DataTable();
                DataTable DtActuStockLocal2 = new DataTable();
                DtActuStockLocal2.TableName = "StockAlmacen";
                DtActuStockLocal2.Columns.Add("AlmacenID", typeof(string));
                DtActuStockLocal2.Columns.Add("AlmacenOrigen", typeof(string));
                DtActuStockLocal2.Columns.Add("ProductoID", typeof(string));
                DtActuStockLocal2.Columns.Add("Adicion", typeof(decimal));
                DtActuStockLocal2.Columns.Add("NroDocumento", typeof(string));
                DtProducto = new BaseFunctions().SelectDistinct(DtActuStockLocal, "ProductoID", "AlmacenID");
                foreach (DataRow RowP in DtProducto.Rows)
                {
                    DataView Dv = new DataView(DtActuStockLocal);
                    Dv.RowFilter = "ProductoID = '" + RowP["ProductoID"] + "' and AlmacenID = '" + RowP["AlmacenID"] + "'";
                    decimal Suma = 0;
                    foreach (DataRowView Drv in Dv) //sumar las cantidades por producto
                    {
                        Suma += Convert.ToDecimal(Drv["Adicion"]);
                    }
                    DataRow DrR = DtActuStockLocal2.NewRow();
                    DrR["AlmacenID"]     = RowP["AlmacenID"];
                    DrR["AlmacenOrigen"] = Dv[0]["AlmacenOrigen"];
                    DrR["ProductoID"]    = RowP["ProductoID"];
                    DrR["Adicion"]       = Suma;
                    DrR["NroDocumento"]  = null;
                    DtActuStockLocal2.Rows.Add(DrR);
                }

                #endregion

                #region agrupar para disminuir el stock de "Produccion"
                //Agrupar los productos apra almacenarlos
                DataTable DtProductoDis        = new DataTable();
                DataTable DtActuStockLocal2Dis = new DataTable();
                DtActuStockLocal2Dis.Columns.Add("AlmacenID", typeof(string));
                DtActuStockLocal2Dis.Columns.Add("ProductoID", typeof(string));
                DtActuStockLocal2Dis.Columns.Add("Cantidad", typeof(decimal));

                DtProductoDis = new BaseFunctions().SelectDistinct(DtDisminuirStock, "ProductoID");
                foreach (DataRow RowP in DtProductoDis.Rows)
                {
                    DataView Dv = new DataView(DtDisminuirStock);
                    Dv.RowFilter = "ProductoID = '" + RowP["ProductoID"] + "'";
                    decimal Suma = 0;
                    foreach (DataRowView Drv in Dv) //sumar las cantidades por producto
                    {
                        Suma += Convert.ToDecimal(Drv["Cantidad"]);
                    }
                    DataRow DrR = DtActuStockLocal2Dis.NewRow();
                    DrR["AlmacenID"]  = Dv[0]["AlmacenID"];
                    DrR["ProductoID"] = Dv[0]["ProductoID"];
                    DrR["Cantidad"]   = Suma;
                    DtActuStockLocal2Dis.Rows.Add(DrR);
                }

                #endregion


                #region actualizar con XML
                if (DtActuStockLocal2.Rows.Count > 0)
                {
                    bool   Valor;
                    string xml1 = new BaseFunctions().GetXML(DtActuStockLocal2).Replace("NewDataSet", "DocumentElement");
                    Valor = new CL_Almacen().UpdateXMLStockAlmacen(xml1, 4, UserID);
                    string xml2 = new BaseFunctions().GetXML(DtEstadoProducido).Replace("NewDataSet", "DocumentElement");
                    new CL_Produccion().UpdateXMLMateriasPrimasFormuladosEstado(xml2, UserID);
                }
                #endregion

                #region bucle para bajar el stock de produccion
                foreach (DataRow Dr in DtActuStockLocal2Dis.Rows)
                {
                    bool Actualizo = false;
                    Actualizo = new CL_Almacen().UpdateStockSustraccion(Dr["AlmacenID"].ToString(), Dr["ProductoID"].ToString(), Convert.ToDecimal(Dr["Cantidad"]), "D", null, 5, null, null, null, null, UserID);
                }
                #endregion
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }