/// <summary>
        /// Actualiza los valor de inventarios de productos y almacen productos por una operación de ingreso
        /// </summary>
        public Boolean fu_ing_art(c_cnx000 _cnx000)
        {     // StockTrans = Stock en tránsito
              // StockTrans = 0    Cuando es ingreso normal
              // StockTrans <> 0   Cuando es ingreso por compras (Recepcion)
              // StockTrans < cant Solo cuando se recibe mas de lo pedido en O/C
              // ItemDetalle = Registro de detalle con producto y cantidad
              // Ajuste = Variable de ajuste por diferencia de costos, se retorna el valor de ajuste
            decimal dbl_Stock;    // Stock
            decimal dbl_CostoBs;  // Costo total Bs
            decimal dbl_CostoUsd; // Costo total USD
            string  sSQL;
            bool    lSerie = false;
            bool    lLote  = false;

            try
            {
                if (_cnx000 == null)
                {
                    o_cnx000.fu_abr_cnx();
                }
                else
                {
                    o_cnx000 = _cnx000;
                }

                c_inv002 o_inv002 = new c_inv002(); //Producto
                c_inv011 o_inv011 = new c_inv011(); //Almacen
                c_inv101 o_inv101 = new c_inv101(); //Producto x Almacen


                // Si no existe el producto en el almacén se crea uno nuevo
                if (!o_inv101.fu_sel_pro_alm(o_cnx000, va_emp_cod, va_cod_suc, va_cod_alm, va_cod_pro))
                {
                    DataTable dt_pro = o_inv002._05(va_cod_pro);
                    if (!(dt_pro.Rows.Count > 0))
                    {
                        Exception ex = new Exception("El Producto " + va_cod_pro + " NO esta registrado");
                        throw ex;
                    }
                    else
                    {
                        DataRow row = dt_pro.Rows[0];
                        if (row["va_ban_lot"].ToString() == "1") //Verificamos si Controla Lote
                        {
                            lLote = true;
                        }
                        if (row["va_ban_ser"].ToString() == "1") //Verificamos si Controla Serie
                        {
                            lSerie = true;
                        }
                    }
                    if (!(o_inv011._05(va_cod_alm).Rows.Count > 0))
                    {
                        Exception ex = new Exception("El Almacen " + va_cod_pro + " NO esta registrado");
                        throw ex;
                    }

                    sSQL = String.Format("INSERT INTO inv101(va_emp_cod,va_cod_suc,va_cod_alm,va_cod_pro) VALUES({0},{1},{2},'{3}')", va_emp_cod, va_cod_suc, va_cod_alm, va_cod_pro);
                    o_cnx000.fu_exe_sql_no(sSQL);

                    o_inv101.va_cos_ubs = 0;
                    o_inv101.va_cos_uus = 0;
                    o_inv101.va_sal_can = 0;
                }

                //Verificamos si el producto Controla Lote
                if (lLote)
                {
                    c_inv102 o_inv102 = new c_inv102();
                    o_inv102.va_nro_lote = va_nro_lote;
                    o_inv102.va_emp_cod  = va_emp_cod;
                    o_inv102.va_cod_suc  = va_cod_suc;
                    o_inv102.va_cod_pro  = va_cod_pro;
                    o_inv102.va_cod_alm  = va_cod_alm;
                    if (!o_inv102.fu_ing_lot_art(_cnx000))
                    {
                        Exception ex = new Exception("No se pudo Registrar el Ingreso Por Lote del Producto: " + va_cod_pro);
                        throw ex;
                    }
                }

                if (lSerie)
                {
                }
                dbl_CostoBs  = o_inv101.va_cos_ubs;
                dbl_CostoUsd = o_inv101.va_cos_uus;
                dbl_Stock    = o_inv101.va_sal_can;


                //Calculo del Costo Promedio
                va_sal_can += dbl_Stock;
                va_cos_ubs  = Math.Round((va_cos_ubs + dbl_CostoBs) / va_sal_can, 6);
                va_cos_uus  = Math.Round((va_cos_uus + dbl_CostoUsd) / va_sal_can, 6);

                StringBuilder vv_str_sql = new StringBuilder();
                vv_str_sql.AppendLine(" update inv101 ");
                vv_str_sql.AppendFormat(" set va_sal_can ={0}, ", va_sal_can);
                vv_str_sql.AppendFormat("  va_cos_ubs ={0}, ", va_cos_ubs);
                vv_str_sql.AppendFormat("  va_cos_uus ={0}, ", va_cos_uus);
                vv_str_sql.AppendFormat("  va_ult_cbs ={0}, ", va_ult_cbs);
                vv_str_sql.AppendFormat("  va_ult_cus ={0} ", va_ult_cus);

                vv_str_sql.AppendFormat(" WHERE va_cod_alm={0}", va_cod_alm);
                vv_str_sql.AppendFormat(" and va_cod_pro='{0}'", va_cod_pro);
                vv_str_sql.AppendFormat(" and va_emp_cod={0}", va_emp_cod);
                vv_str_sql.AppendFormat(" and va_cod_suc={0}", va_cod_suc);

                return(o_cnx000.fu_exe_sql_no(vv_str_sql.ToString()));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public bool fu_reg_mov(c_cnx000 _cnx000, TipoTransaccions tipo)
        {
            try
            {
                if (tipo == TipoTransaccions.Ingreso)
                {
                    StringBuilder vv_str_sql = new StringBuilder();
                    vv_str_sql.AppendLine(" Insert into inv100( ");
                    vv_str_sql.AppendLine("va_emp_cod,va_cod_suc,va_gst_cod,va_fec_pro,va_tip_tra,va_cod_doc,va_tra_org,");
                    vv_str_sql.AppendLine("va_fec_tra,va_ref_doc,va_mon_tra,va_tra_glo,va_cod_pro,va_can_pro,va_cos_uni,");
                    vv_str_sql.AppendLine("va_imp_tot,va_alm_mov,va_lot_cod,va_fec_ven,va_tra_fac,va_tra_ret,va_tas_cam,va_nro_tal)");
                    vv_str_sql.AppendFormat(" values({0}, ", va_emp_cod);
                    vv_str_sql.AppendFormat(" {0}, ", va_cod_suc);
                    vv_str_sql.AppendFormat(" {0}, ", va_gst_cod);
                    vv_str_sql.AppendFormat(" '{0}', ", va_fec_pro.ToShortDateString());
                    vv_str_sql.AppendFormat(" '{0}', ", "1");
                    vv_str_sql.AppendFormat(" '{0}', ", va_mod_org);
                    vv_str_sql.AppendFormat(" {0}, ", va_tra_org);
                    vv_str_sql.AppendFormat(" '{0}', ", va_fec_tra.ToShortDateString());
                    vv_str_sql.AppendFormat(" {0}, ", va_ref_doc);
                    vv_str_sql.AppendFormat(" '{0}', ", va_mon_tra);
                    vv_str_sql.AppendFormat(" '{0}', ", va_tra_glo);
                    vv_str_sql.AppendFormat(" '{0}', ", va_cod_pro);
                    vv_str_sql.AppendFormat(" {0}, ", va_can_pro);
                    vv_str_sql.AppendFormat(" {0}, ", va_cos_uni);
                    vv_str_sql.AppendFormat(" {0}, ", va_imp_tot);
                    vv_str_sql.AppendFormat(" {0}, ", va_alm_mov);
                    vv_str_sql.AppendFormat(" '{0}', ", va_lot_cod);
                    vv_str_sql.AppendFormat(" '{0}', ", va_fec_ven.ToShortDateString());
                    vv_str_sql.AppendFormat(" '{0}', ", va_tra_fac);
                    vv_str_sql.AppendFormat(" '{0}', ", va_tra_ret);
                    vv_str_sql.AppendFormat(" {0}, ", va_tas_cam);
                    vv_str_sql.AppendFormat(" {0}) ", va_nro_tal);
                    if (!_cnx000.fu_exe_sql_no(vv_str_sql.ToString()))
                    {
                        Exception ex = new Exception("No se pudo Registrar el Movimiento del Producto: " + va_cod_pro);
                        throw ex;
                    }
                    else
                    {
                        c_inv101 o_inv101 = new c_inv101();
                        o_inv101.va_cod_alm = va_alm_mov;
                        o_inv101.va_cod_pro = va_cod_pro;
                        o_inv101.va_cod_suc = va_cod_suc;
                        o_inv101.va_cos_ubs = va_cos_uni;
                        o_inv101.va_sal_can = va_can_pro;

                        c_adm013  objTipo = new c_adm013();
                        DataTable dtTipo  = objTipo._05(va_fec_tra.ToShortDateString());
                        if (dtTipo.Rows.Count == 0)
                        {
                            o_inv101.va_cos_uus = Math.Round(va_cos_uni / va_tas_cam, 2);
                        }
                        else
                        {
                            o_inv101.va_cos_uus = Math.Round(va_cos_uni / Convert.ToDecimal(((DataRow)dtTipo.Rows[0])["va_val_bus"]), 2);
                        }


                        o_inv101.va_emp_cod  = va_emp_cod;
                        o_inv101.va_fec_ven  = va_fec_ven;
                        o_inv101.va_nro_lote = va_lot_cod;
                        o_inv101.va_ult_cbs  = va_cos_uni;
                        o_inv101.va_ult_cus  = o_inv101.va_cos_uus;
                        o_inv101.va_est_ado  = "H";

                        if (!o_inv101.fu_ing_art(_cnx000))
                        {
                            Exception ex = new Exception("No se pudo Registrar el Movimiento del Producto: " + va_cod_pro);
                            throw ex;
                        }
                    }
                }
                return(true);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }