internal TraspasoResult TraspasoExistencias(TraspasoParameters TParameters)
        {
            TraspasoResult result           = new TraspasoResult();
            List <string>  series           = new List <string>();
            const string   codigoConcepto   = "34";
            const string   serie            = "";
            double         existance        = 0;
            double         folio            = 0;
            int            documentoId      = 0;
            int            movimientoId     = 0;
            int            consecutivo      = 1;
            string         currentWarehouse = string.Empty;
            string         currentProduct   = string.Empty;

            try
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();
                Login(TParameters.Source);
                List <Product> ProductsWithExistance = TParameters.Products.Where(x => x.ExistanceControl != 4).ToList();
                List <Product> ProductsWithSeries    = TParameters.Products.Where(x => x.ExistanceControl == 4).ToList();
                foreach (Warehouse w in TParameters.Warehouses)
                {
                    foreach (Product p in ProductsWithExistance)
                    {
                        p.GetExistence(w);
                    }
                }
                LogOut();
                sw.Stop();
                result.TimeToRead = sw.Elapsed;

                sw.Restart();
                Login(TParameters.DestinationDb);
                foreach (Warehouse w in TParameters.Warehouses)
                {
                    _Error           = Documentos.fSiguienteFolio(codigoConcepto, "", ref folio);
                    currentWarehouse = w.Name;
                    if (_Error == 0)
                    {
                        tDocumento documento = new tDocumento()
                        {
                            aCodConcepto = codigoConcepto,
                            aFolio       = folio,
                            aSerie       = serie,
                            aFecha       = DateTime.Today.ToString("MM/dd/yyyy")
                        };
                        _Error = Documentos.fAltaDocumento(ref documentoId, ref documento);

                        foreach (Product p in ProductsWithExistance)
                        {
                            currentProduct = p.Name;
                            if (_Error == 0)
                            {
                                existance = p.GetExistence(w);
                                if (existance > 0)
                                {
                                    tMovimiento movto = new tMovimiento();
                                    movto.aCodAlmacen  = w.Code;
                                    movto.aCodProdSer  = p.Code;
                                    movto.aConsecutivo = consecutivo;
                                    movto.aUnidades    = existance;
                                    _Error             = Movimientos.fAltaMovimiento(documentoId, ref movimientoId, ref movto);
                                }
                                consecutivo++;
                            }
                            if (_Error != 0)
                            {
                                result.Errors.Add(string.Format("Almacen: {0}, Producto: {1}, Detalles: {2}", currentWarehouse, currentProduct, GetCurrentError()));
                            }
                        }
                    }
                }

                consecutivo = 0;
                foreach (Warehouse w in TParameters.Warehouses)
                {
                    _Error           = Documentos.fSiguienteFolio(codigoConcepto, "", ref folio);
                    currentWarehouse = w.Name;
                    if (_Error == 0)
                    {
                        tDocumento documento = new tDocumento()
                        {
                            aCodConcepto = codigoConcepto,
                            aFolio       = folio,
                            aSerie       = serie,
                            aFecha       = DateTime.Today.ToString("MM/dd/yyyy")
                        };
                        _Error = Documentos.fAltaDocumento(ref documentoId, ref documento);

                        foreach (Product p in ProductsWithSeries)
                        {
                            if (_Error == 0)
                            {
                                currentProduct = p.Name;
                                series         = p.GetSeries(w, TParameters.Source).Select(x => x.SeriesNumber).ToList();
                                if (series.Count > 0)
                                {
                                    tMovimiento movto = new tMovimiento();
                                    movto.aCodAlmacen  = w.Code;
                                    movto.aCodProdSer  = p.Code;
                                    movto.aConsecutivo = consecutivo;
                                    _Error             = Movimientos.fAltaMovimiento(documentoId, ref movimientoId, ref movto);

                                    foreach (string s in series)
                                    {
                                        if (_Error == 0)
                                        {
                                            tSeriesCapas movtoSerie = new tSeriesCapas()
                                            {
                                                aSeries = s
                                            };
                                            _Error = Movimientos.fAltaMovimientoSeriesCapas(movimientoId, ref movtoSerie);
                                            if (_Error != 0)
                                            {
                                                result.Errors.Add(string.Format("Almacen: {0}, Producto: {1}, Serie: {2}, Detalles: {3}", currentWarehouse, currentProduct, s, GetCurrentError()));
                                            }
                                        }
                                    }
                                    consecutivo++;
                                }
                            }
                        }
                    }
                }
                if (result.Errors.Count <= 0)
                {
                    result.Errors.Add("No hubo errores durante este traspaso");
                }
                sw.Stop();
                result.TimeToImport = sw.Elapsed;
                LogOut();
                return(result);
            }
            catch (AccessViolationException ave)
            {
                throw new TraspasoExistenciasException("Ocurrio un error al realizar el traspaso de información, revise los permisos en las carpetas de CONTPAQ I Comercial", ave);
            }
        }