Example #1
0
        public string funEnviarExtBancarioSAP()
        {
            try
            {
                string mError = "";
                int    iError = 0;

                csAccesoDatos.proIniciarSesionSAP();
                SAPbobsCOM.BankPages varOBNK = csConexionSap.objConexionSap.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oBankPages);
                //Recuperamos informacion de los detalles del movimiento
                List <clsGbaExtBancarioDet> objDetalle = new List <clsGbaExtBancarioDet>();
                clsGbaExtBancarioDet.proListar(CabCodigo, out objDetalle);
                //Recorremos las lineas de detalle del extracto bancario
                foreach (clsGbaExtBancarioDet objFilaDetalle in objDetalle)
                {
                    if (funVerificarExtBancarioSAP(DocNombre, CabNumero, objFilaDetalle.DetSecuencia).Equals(0))
                    {
                        varOBNK.AccountCode  = CueCodigo;
                        varOBNK.DueDate      = objFilaDetalle.DetFecha;
                        varOBNK.Reference    = objFilaDetalle.DetReferencia;
                        varOBNK.Memo         = objFilaDetalle.DetComentario;
                        varOBNK.ExternalCode = DocNombre + " - " + CabNumero.ToString() + " - " + objFilaDetalle.DetSecuencia.ToString();
                        varOBNK.DebitAmount  = double.Parse(objFilaDetalle.DetDebe.ToString());
                        varOBNK.CreditAmount = double.Parse(objFilaDetalle.DetHaber.ToString());

                        iError = varOBNK.Add();
                        if (!iError.Equals(0))
                        {
                            csConexionSap.objConexionSap.GetLastError(out iError, out mError);
                            return(mError);
                        }
                    }
                }
                csAccesoDatos.funIniciarSesion("conDBUmbrella");
                csAccesoDatos.GDatos.funEjecutarSql(string.Format("Update GBA_CABEXTBANCARIO Set EstCodigo = 'Sap'  Where CabCodigo = {0}", CabCodigo));
                csAccesoDatos.proFinalizarSesion();
                return(mError);
            }
            catch (Exception) { throw; }
            finally { csAccesoDatos.proFinalizarSesionSAP(); }
        }
Example #2
0
        public string funEnviarSalMercanciaSAP()
        {
            try {
                string mError = "";
                int    iError = 0;
                int    i      = 0;
                //Realizamos la conexion a SAP
                csAccesoDatos.proIniciarSesionSAP();
                //Verificamos si el documento ya se encuentra en SAP
                DataTable dtInventarioSAP = funVerificarSalInventarioSAP(DocNombre, CabNumero);
                if (dtInventarioSAP.Rows.Count > 0)
                {
                    //Recuperamos en las variables los valores de SAP
                    CabDocEntrySAP = int.Parse(dtInventarioSAP.Rows[0]["DocEntry"].ToString());
                    CabNumeroSAP   = int.Parse(dtInventarioSAP.Rows[0]["DocNum"].ToString());
                    //Actualizamos en el movimiento los datos de SAP
                    proActMovInventarioSalida(CabDocEntrySAP, CabNumeroSAP, CabCodigo);
                    return(mError);
                }
                else
                {
                    //Instanciamos la variable con el objeto de SAP Salida de mercancias
                    SAPbobsCOM.Documents varOIGE = csConexionSap.objConexionSap.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oInventoryGenExit);

                    varOIGE.Series           = clsSegDocumento.funRecNumSerieSAPSalida(DocCodigo);                          //Serie
                    varOIGE.DocDate          = (DateTime)CabFecha;                                                          //Fecha de contabilización
                    varOIGE.TaxDate          = (DateTime)CabFecha;                                                          //Fecha de documento
                    varOIGE.Comments         = CabComentario;                                                               //Comentarios
                    varOIGE.JournalMemo      = DocNombre + "-" + CabNumero + " " + CabComenDiario;                          //Comentario asiento contable
                    varOIGE.PaymentGroupCode = -2;                                                                          //Lista de precios (Ultimo precio determinado)
                    //Valores del codigo y nombre del movimiento
                    varOIGE.UserFields.Fields.Item("U_Ita_codmovimiento").Value = IdMotivo.ToString();                      //Codigo movimiento
                    varOIGE.UserFields.Fields.Item("U_Ita_movimiento").Value    = Motivo;                                   //Movimientos
                    //Valores de la auditoria del sistema umbrella
                    varOIGE.UserFields.Fields.Item("U_Ita_sysusuario").Value   = clsVariablesGlobales.varCodUsuario;        //Usuario del sistema umbrella
                    varOIGE.UserFields.Fields.Item("U_Ita_sysfecha").Value     = DateTime.Now.ToString("dd/MM/yyyy HH:mm"); //Fecha del sistema umbrella
                    varOIGE.UserFields.Fields.Item("U_Ita_sysip").Value        = clsVariablesGlobales.varIpMaquina;         //Ip del sistema umbrella
                    varOIGE.UserFields.Fields.Item("U_Ita_sysdocumento").Value = DocNombre;                                 //Documento del sistema umbrella
                    varOIGE.UserFields.Fields.Item("U_Ita_sysnumero").Value    = CabNumero.ToString();                      //Numero del sistema umbrella
                    //Recuperamos informacion de los detalles del movimiento
                    List <clsInvMovimientoDet> objDetalle = new List <clsInvMovimientoDet>();
                    clsInvMovimientoDet.proListar(CabCodigo, out objDetalle);
                    //Recorremos los detalles del movimiento
                    foreach (clsInvMovimientoDet objFilaDetalle in objDetalle)
                    {
                        //En caso de que la variable i se ha mayor a cero se debe agregar una nueva linea
                        if (!i.Equals(0))
                        {
                            varOIGE.Lines.Add();
                        }
                        varOIGE.Lines.SetCurrentLine(i);
                        varOIGE.Lines.WarehouseCode   = BodCodigo;                //Almacen
                        varOIGE.Lines.ItemCode        = objFilaDetalle.IteCodigo; //Código
                        varOIGE.Lines.ItemDescription = objFilaDetalle.IteNombre; //Descripción
                        //Informacion de la chapeta en caso de que sea requerido la chapeta/lote
                        if (objFilaDetalle.DetIdDestino != null)
                        {
                            if (objFilaDetalle.DetTipDestino.Equals("A"))
                            {
                                varOIGE.Lines.UserFields.Fields.Item("U_Ita_arete").Value = objFilaDetalle.DetIdDestino;                                          //Arete
                            }
                            else if (objFilaDetalle.DetTipDestino.Equals("L"))
                            {
                                varOIGE.Lines.UserFields.Fields.Item("U_Ita_lote").Value = objFilaDetalle.DetIdDestino;                                               //Lote
                            }
                        }
                        //Informacion de los valores del detalle
                        varOIGE.Lines.Quantity    = double.Parse(objFilaDetalle.DetCantidad.ToString()); //Cantidad
                        varOIGE.Lines.AccountCode = CtaContable;                                         //Compensación de stocks reducir cuenta
                        //Verificamos si tiene centro de costo
                        if (!CcoCodigo.Equals(""))
                        {
                            varOIGE.Lines.CostingCode = CcoCodigo.Substring(0, 2);                      //Centro de responsabilidad
                        }
                        if (!CcoCodigo.Equals(""))
                        {
                            varOIGE.Lines.CostingCode2 = CcoCodigo.Substring(0, 3);                       //Centro de actividad
                        }
                        if (!CcoCodigo.Equals(""))
                        {
                            varOIGE.Lines.CostingCode3 = CcoCodigo;                       //Centro de costo
                        }
                        //Verificamos si tiene proyecto
                        if (!PryCodigo.Equals(""))
                        {
                            varOIGE.Lines.ProjectCode = PryCodigo; //Proyecto
                        }
                        int j = 0;                                 //Variable utilizada para los lotes
                        //Verificamos si el item requiere lote
                        if (objFilaDetalle.IteTieLote.ToUpper().Equals("Y"))
                        {
                            //Recuperamos la informacion de los lotes segun el item y la bodega
                            DataTable dtLote      = clsInvItem.funRecLote(objFilaDetalle.IteCodigo, BodCodigo);
                            double    varSaldo    = dtLote.Rows.Count.Equals(0) ? 0 : double.Parse(dtLote.Compute("Sum(StkDisponible)", "").ToString());
                            double    varCantidad = double.Parse(objFilaDetalle.DetCantidad.ToString());
                            //Verificamos si el saldo del item no cae en negativo con respecto a lo que se necesita
                            if (varCantidad > varSaldo)
                            {
                                throw new Exception(string.Format("El Item {0} - {1} tiene un saldo de {2} y lo requerido es {3}", objFilaDetalle.IteCodigo, objFilaDetalle.IteNombre, varSaldo, varCantidad));
                            }
                            //Recorremos los lotes disponibles hasta cumplir con la candidad deseada
                            foreach (DataRow drLote in dtLote.Rows)
                            {
                                string varLotCodigo     = drLote["LotCodigo"].ToString();                   //Recuperamos el codigo del lote
                                double varStkDisponible = double.Parse(drLote["StkDisponible"].ToString()); //Recuperamos la cantidad disponible de ese lote
                                //Agragamos una nueva linea de Lote
                                if (j > 0)
                                {
                                    varOIGE.Lines.BatchNumbers.Add();
                                }
                                varOIGE.Lines.BatchNumbers.SetCurrentLine(j);          //Nos posicionamos en la linea del lote recien creada
                                varOIGE.Lines.BatchNumbers.BatchNumber = varLotCodigo; //Codigo del lote que vamos a utilizar
                                //Validamos si la cantidad que dispone el lote seleccionado es suficiente para la cantidad requerida
                                if (varCantidad <= varStkDisponible)
                                {
                                    varOIGE.Lines.BatchNumbers.Quantity = varCantidad;
                                    break;
                                }
                                else
                                {
                                    varOIGE.Lines.BatchNumbers.Quantity = varStkDisponible;
                                    varCantidad -= varStkDisponible;
                                    j++; //Secuencial utilizado para las lineas del lote
                                }
                            }
                        }
                        i++; //Secuencial utilizado para las lineas del detalle
                    }
                    iError = varOIGE.Add();
                    if (!iError.Equals(0))
                    {
                        csConexionSap.objConexionSap.GetLastError(out iError, out mError);
                        return(mError);
                    }
                    else
                    {
                        int varDocEntrySAPSalida = 0;
                        int.TryParse(csConexionSap.objConexionSap.GetNewObjectKey().ToString(), out varDocEntrySAPSalida);
                        varOIGE.GetByKey(varDocEntrySAPSalida);
                        int varDocNumSAPSalida = varOIGE.DocNum;
                        //Actualizamos los costos de los movimientoes de inventario
                        proActCstAcumulado(varDocEntrySAPSalida, CabCodigo);
                        //Actualizamos en el movimiento los datos de SAP
                        proActMovInventarioSalida(varDocEntrySAPSalida, varDocNumSAPSalida, CabCodigo);
                        return(mError);
                    }
                }
            }
            catch (Exception e) { throw new Exception(e.Message); }
            finally { csAccesoDatos.proFinalizarSesionSAP(); }
        }
Example #3
0
        /// <summary>
        /// Funcion utilizada para mandar a SAP la información del diario contable
        /// </summary>
        /// <returns></returns>
        public string funEnviarDiarioSAP()
        {
            try {
                string mError = "";
                int    iError = 0;
                //Realizamos la conexion a SAP
                csAccesoDatos.proIniciarSesionSAP();
                //Verificamos si el documento ya se encuentra en SAP
                DataTable dtDiarioSAP = funVerificarDiarioSAP(DocNombre, CabNumero);
                //Si el documento se encuentra en SAP actualizamos la información de este en la informacion del animal
                if (dtDiarioSAP.Rows.Count > 0)
                {
                    //Recuperamos en las variables los valores de SAP
                    CabDocEntrySAPDiario = int.Parse(dtDiarioSAP.Rows[0]["TransId"].ToString());
                    CabNumeroSAPDiario   = int.Parse(dtDiarioSAP.Rows[0]["Number"].ToString());
                    //Actualizamos en el movimiento los datos de SAP
                    proActDiario(CabDocEntrySAPDiario, CabNumeroSAPDiario, CabCodigo);
                    //Actualizamos  las lineas del detalle de actualizacion de costos
                    clsGraCstAcumulado.proActualizarCstAcumulado(AnmCodigo, CabFecha, "Bla", "GRA_DETLABORATORIO", "LABORATORIO", CabCodigo);
                    //Actualizamos  las lineas del detalle de actualizacion de costos standares
                    clsGraCstStdAcumulado.proActualizarCstStdAcumulado(AnmCodigo, CabFecha, "Bla", CabCodigo);
                    return(mError);
                }
                else
                {
                    //Variable utilizadas para las cuentas contables parametrizadas
                    string varCodCtaContableWip        = clsGenOpciones.CargarValor("G.Lab.Diario.CtaWip");        //Recuperamos el codigo de la cuenta contable para el costo inicial
                    string varCodCtaContableCstInicial = clsGenOpciones.CargarValor("G.Lab.Diario.CtaCstInicial"); //Recuperamos el codigo de la cuenta contable WIP
                    //Instanciamos en la variable varOJDT el objeto de SAP de diarios contables
                    SAPbobsCOM.JournalEntries varOJDT = csConexionSap.objConexionSap.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oJournalEntries);

                    //Cargamos informacion de la cabecera del diario contable
                    varOJDT.Series        = clsSegDocumento.funRecNumSerieSAPDiario(DocCodigo);
                    varOJDT.ReferenceDate = CabFecha;
                    varOJDT.DueDate       = CabFecha;
                    varOJDT.TaxDate       = CabFecha;
                    varOJDT.Memo          = string.Format("Diario de laboratorio: {0}-{1} {2}", DocNombre, CabNumero, CabComenDiario);
                    varOJDT.Reference3    = DocNombre + "-" + CabNumero;
                    varOJDT.UserFields.Fields.Item("U_Ita_sysusuario").Value   = clsVariablesGlobales.varCodUsuario;
                    varOJDT.UserFields.Fields.Item("U_Ita_sysfecha").Value     = DateTime.Now.ToString("dd/MM/yyyy HH:mm");
                    varOJDT.UserFields.Fields.Item("U_Ita_sysip").Value        = clsVariablesGlobales.varIpMaquina;
                    varOJDT.UserFields.Fields.Item("U_Ita_sysdocumento").Value = DocNombre;
                    varOJDT.UserFields.Fields.Item("U_Ita_sysnumero").Value    = CabNumero.ToString();

                    //Cargamos informacion de los detalles del diario contable
                    decimal varCstTotal = 0;
                    int     i           = 0;
                    //Recuperamos la informacion del costo inicial
                    varOJDT.Lines.SetCurrentLine(i);
                    varOJDT.Lines.AccountCode    = varCodCtaContableCstInicial;
                    varOJDT.Lines.Debit          = 0;
                    varOJDT.Lines.Credit         = double.Parse(CabCstInicial.ToString());
                    varOJDT.Lines.LineMemo       = string.Format("Diario de laboratorio: {0}-{1} {2}", DocNombre, CabNumero, CabComenDiario);
                    varOJDT.Lines.Reference1     = "DEPRECIACION";
                    varOJDT.Lines.Reference2     = "";
                    varOJDT.Lines.ReferenceDate2 = CabFecha;
                    varOJDT.Lines.TaxDate        = CabFecha;
                    varOJDT.Lines.DueDate        = CabFecha;
                    varCstTotal += CabCstInicial;
                    i++;
                    //Recuperamos la informacion del costo acumulado
                    foreach (DataRow drFilaDetalle in clsGraCstAcumulado.funRecTableCstAcumulado(AnmCodigo, CabFecha, "Bla").Rows)
                    {
                        varOJDT.Lines.Add();
                        varOJDT.Lines.SetCurrentLine(i);
                        varOJDT.Lines.AccountCode    = drFilaDetalle["CsaCtaCodigo"].ToString();
                        varOJDT.Lines.Debit          = 0;
                        varOJDT.Lines.Credit         = double.Parse(drFilaDetalle["CsaValor"].ToString());
                        varOJDT.Lines.LineMemo       = string.Format("Diario de laboratorio: {0}-{1} {2}", DocNombre, CabNumero, CabComenDiario);
                        varOJDT.Lines.Reference1     = drFilaDetalle["CsaTipoSalida"].ToString();
                        varOJDT.Lines.Reference2     = "";
                        varOJDT.Lines.ReferenceDate2 = CabFecha;
                        varOJDT.Lines.TaxDate        = CabFecha;
                        varOJDT.Lines.DueDate        = CabFecha;
                        varCstTotal += decimal.Parse(drFilaDetalle["CsaValor"].ToString());
                        i++;
                    }
                    //Recuperamos la informacion del costo standar acumulado
                    foreach (DataRow drFilaDetalle in clsGraCstStdAcumulado.funRecTableCstStdAcumulado(AnmCodigo, CabFecha, "Bla").Rows)
                    {
                        varOJDT.Lines.Add();
                        varOJDT.Lines.SetCurrentLine(i);
                        varOJDT.Lines.AccountCode    = drFilaDetalle["CdaCtaContableSalida"].ToString();
                        varOJDT.Lines.Debit          = 0;
                        varOJDT.Lines.Credit         = double.Parse(drFilaDetalle["CdaValor"].ToString());
                        varOJDT.Lines.LineMemo       = string.Format("Diario de laboratorio: {0}-{1} {2}", DocNombre, CabNumero, CabComenDiario);
                        varOJDT.Lines.Reference1     = drFilaDetalle["CdaDetComentario"].ToString();
                        varOJDT.Lines.Reference2     = "";
                        varOJDT.Lines.ReferenceDate2 = CabFecha;
                        varOJDT.Lines.TaxDate        = CabFecha;
                        varOJDT.Lines.DueDate        = CabFecha;
                        varCstTotal += decimal.Parse(drFilaDetalle["CdaValor"].ToString());
                        i++;
                    }
                    //Informacion del haber
                    varOJDT.Lines.Add();
                    varOJDT.Lines.SetCurrentLine(i);
                    varOJDT.Lines.AccountCode    = varCodCtaContableWip;
                    varOJDT.Lines.Debit          = double.Parse(varCstTotal.ToString());
                    varOJDT.Lines.Credit         = 0;
                    varOJDT.Lines.LineMemo       = string.Format("Diario de laboratorio: {0}-{1} {2}", DocNombre, CabNumero, CabComenDiario);
                    varOJDT.Lines.Reference1     = "";
                    varOJDT.Lines.Reference2     = "";
                    varOJDT.Lines.ReferenceDate2 = CabFecha;
                    varOJDT.Lines.TaxDate        = CabFecha;
                    varOJDT.Lines.DueDate        = CabFecha;

                    iError = varOJDT.Add();
                    if (!iError.Equals(0))
                    {
                        csConexionSap.objConexionSap.GetLastError(out iError, out mError);
                        return(mError);
                    }
                    else
                    {
                        int varDocEntrySAPDiario = 0;
                        int.TryParse(csConexionSap.objConexionSap.GetNewObjectKey().ToString(), out varDocEntrySAPDiario);
                        varOJDT.GetByKey(varDocEntrySAPDiario);
                        int varDocNumSAPDiario = varOJDT.Number;

                        //Actualizamos la linea del detalle con la informacion de SAP de la salida de mercancias en la tabla de detalle de actualizacion de costos de formulacion
                        proActDiario(varDocEntrySAPDiario, varDocNumSAPDiario, CabCodigo);
                        //Actualizamos  las lineas del detalle de actualizacion de costos
                        clsGraCstAcumulado.proActualizarCstAcumulado(AnmCodigo, CabFecha, "Bla", "GRA_DETLABORATORIO", "LABORATORIO", CabCodigo);
                        //Actualizamos  las lineas del detalle de actualizacion de costos standares
                        clsGraCstStdAcumulado.proActualizarCstStdAcumulado(AnmCodigo, CabFecha, "Bla", CabCodigo);
                        return(mError);
                    }
                }
            }
            catch (Exception e) { throw new Exception(e.Message); }
            finally { csAccesoDatos.proFinalizarSesionSAP(); }
        }
Example #4
0
        /// <summary>
        /// Funcion utilizada para mandar a SAP la información de la entrada de mercancia
        /// </summary>
        /// <returns></returns>
        public string funEnviarEntMercanciaSAP()
        {
            try
            {
                string mError = "";
                int    iError = 0;
                //Realizamos la conexion a SAP
                csAccesoDatos.proIniciarSesionSAP();
                //Verificamos si el documento ya se encuentra en SAP
                DataTable dtInventarioSAP = funVerificarEntInventarioSAP(DocNombre, CabNumero);
                //Si el documento se encuentra en SAP actualizamos la información de este en la informacion del animal
                if (dtInventarioSAP.Rows.Count > 0)
                {
                    //Recuperamos en las variables los valores de SAP
                    CabDocEntrySAPEntrada = int.Parse(dtInventarioSAP.Rows[0]["DocEntry"].ToString());
                    CabNumeroSAPEntrada   = int.Parse(dtInventarioSAP.Rows[0]["DocNum"].ToString());
                    //Actualizamos en el movimiento los datos de SAP
                    proActMovInventarioSalida(CabDocEntrySAPSalida, CabNumeroSAPSalida, CabCodigo);
                    return(mError);
                }
                else
                {
                    //Instanciamos la variable con el objeto de SAP Entrada de mercancias
                    SAPbobsCOM.Documents varOIGN = csConexionSap.objConexionSap.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oInventoryGenEntry);
                    //Recuperamos la informacion de la tabla de parametrizaciones para la activación del animal
                    int     varSerie           = clsSegDocumento.funRecNumSerieSAPEntrada(DocCodigo);                      //Serie
                    int     varCodMovimiento   = int.Parse(clsGenOpciones.CargarValor("G.Lab.Entrada.CodMov").ToString()); //Codigo movimiento
                    string  varNomMovimiento   = clsGenOpciones.CargarValor("G.Lab.Entrada.NomMov");                       //Movimientos
                    string  varComenDiario     = string.Format("Entrada laboratorio: {0}-{1}", DocNombre, CabNumero);      //Comentario, Comentario Diario
                    string  varCtaContable     = clsFinPlaCuenta.GetAcctCodeDeMovimiento(IteCodigo, varCodMovimiento);     //Cuenta contable
                    string  varIteTieLote      = clsInvItem.funRecTieLote(IteCodigo);                                      //Es gestionado por lote
                    decimal varCstAcumulado    = clsGraCstAcumulado.funRecValorCstAcumulado(AnmCodigo, "Bla");             //Costo acumulado
                    decimal varCstStdAcumulado = clsGraCstStdAcumulado.funRecValorCstStdAcumulado(AnmCodigo, "Bla");       //Costo standar acumulado
                    decimal varCstSalida       = funRecTotSalMercanciaSAP(CabDocEntrySAPSalida);
                    decimal varCstFormacion    = CabCstInicial + varCstAcumulado + varCstStdAcumulado + varCstSalida;
                    decimal varCosto           = decimal.Round(varCstFormacion / CabDosis, 4);
                    //Validamos si hay cuenta contable para el movimiento utilizado
                    if (string.IsNullOrEmpty(varCtaContable))
                    {
                        return("No se pudo obtener la cuenta contable para el movimiento de entrada");
                    }
                    //Datos de cabecera de la salida de mercancia SAP
                    varOIGN.Series           = varSerie;                                                                    //Serie
                    varOIGN.DocDate          = (DateTime)CabFecha;                                                          //Fecha de contabilización
                    varOIGN.TaxDate          = (DateTime)CabFecha;                                                          //Fecha de documento
                    varOIGN.Comments         = CabComentario;                                                               //Comentarios
                    varOIGN.JournalMemo      = varComenDiario;                                                              //Comentario asiento contable
                    varOIGN.PaymentGroupCode = -2;                                                                          //Lista de precios (Ultimo precio determinado)
                    //Valores del codigo y nombre del movimiento
                    varOIGN.UserFields.Fields.Item("U_Ita_codmovimiento").Value = varCodMovimiento;                         //Codigo movimiento
                    varOIGN.UserFields.Fields.Item("U_Ita_movimiento").Value    = varNomMovimiento;                         //Movimientos
                    //Valores de la auditoria del sistema umbrella
                    varOIGN.UserFields.Fields.Item("U_Ita_sysusuario").Value   = clsVariablesGlobales.varCodUsuario;        //Usuario del sistema umbrella
                    varOIGN.UserFields.Fields.Item("U_Ita_sysfecha").Value     = DateTime.Now.ToString("dd/MM/yyyy HH:mm"); //Fecha del sistema umbrella
                    varOIGN.UserFields.Fields.Item("U_Ita_sysip").Value        = clsVariablesGlobales.varIpMaquina;         //Ip del sistema umbrella
                    varOIGN.UserFields.Fields.Item("U_Ita_sysdocumento").Value = DocNombre;                                 //Codigo del documento
                    varOIGN.UserFields.Fields.Item("U_Ita_sysnumero").Value    = CabNumero.ToString();                      //Niumero del documento
                    //Datos de detalle de la salida de mercancia SAP
                    varOIGN.Lines.SetCurrentLine(0);
                    varOIGN.Lines.WarehouseCode   = BodCodigo;                                  //Almacen
                    varOIGN.Lines.ItemCode        = IteCodigo;                                  //Código
                    varOIGN.Lines.ItemDescription = IteNombre;                                  //Descripción
                    varOIGN.Lines.UserFields.Fields.Item("U_Ita_arete").Value = AnmAlternativo; //Arete
                    varOIGN.Lines.Quantity    = double.Parse(CabDosis.ToString());              //Cantidad
                    varOIGN.Lines.UnitPrice   = double.Parse(varCstFormacion.ToString());       //Costo
                    varOIGN.Lines.AccountCode = varCtaContable;                                 //Compensación de stocks reducir cuenta
                    //Verificamos si el item requiere lote
                    if (varIteTieLote.ToUpper().Equals("Y"))
                    {
                        varOIGN.Lines.BatchNumbers.SetCurrentLine(0);                                     //Nos posicionamos en la linea del lote recien creada
                        varOIGN.Lines.BatchNumbers.BatchNumber       = CabLote;                           //Lote
                        varOIGN.Lines.BatchNumbers.Quantity          = double.Parse(CabDosis.ToString()); //Cantidad lote
                        varOIGN.Lines.BatchNumbers.AddmisionDate     = (DateTime)CabFecha;                //Fecha de admisión
                        varOIGN.Lines.BatchNumbers.ManufacturingDate = (DateTime)CabFecha;                //Fecha de fabricación
                    }
                    iError = varOIGN.Add();
                    if (!iError.Equals(0))
                    {
                        csConexionSap.objConexionSap.GetLastError(out iError, out mError);
                        return(mError);
                    }
                    else
                    {
                        int varDocEntrySAPEntrada = 0;
                        int.TryParse(csConexionSap.objConexionSap.GetNewObjectKey().ToString(), out varDocEntrySAPEntrada);
                        varOIGN.GetByKey(varDocEntrySAPEntrada);
                        int varDocNumSAPEntrada = varOIGN.DocNum;

                        //Actualizamos en el movimiento los datos de SAP
                        proActMovInventarioEntrada(varDocEntrySAPEntrada, varDocNumSAPEntrada, CabCodigo);
                        //Actualizamos la depreciacion en el animal
                        clsGraAnimal.proActInfDepAcumulada(CabCstInicial, AnmCodigo);
                        return(mError);
                    }
                }
            }
            catch (Exception e) { throw new Exception(e.Message); }
            finally { csAccesoDatos.proFinalizarSesionSAP(); }
        }
        public string funEnviarDocPreliminarSAP()
        {
            try
            {
                string mError = "";
                int    iError = 0;
                int    i      = 0;

                csAccesoDatos.proIniciarSesionSAP();
                DataTable objDtVerificarSAP = funVerificarDocPreliminarSAP(DocNombre, CabNumero);
                if (objDtVerificarSAP.Rows.Count > 0)
                {
                    //Actualizacion en el formulario de movimientos de inventario
                    int DocEntrySAPDiario = int.Parse(objDtVerificarSAP.Rows[0]["TransId"].ToString());
                    int NumeroSAPDiario   = int.Parse(objDtVerificarSAP.Rows[0]["BatchNum"].ToString());
                    csAccesoDatos.funIniciarSesion("conDBUmbrella");
                    csAccesoDatos.GDatos.funEjecutarSql(string.Format("Update FIN_CABDOCPRELIMINAR Set CabSap = {0}, EstCodigo = 'Sap'  Where DocCodigo = {1} and CabNumero = {2}", DocEntrySAPDiario, DocCodigo, CabNumero));
                    csAccesoDatos.proFinalizarSesion();
                    return(mError);
                }
                else
                {
                    SAPbobsCOM.JournalVouchers varOBTF = csConexionSap.objConexionSap.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oJournalVouchers);

                    varOBTF.JournalEntries.ReferenceDate = (DateTime)CabFecha;
                    varOBTF.JournalEntries.DueDate       = (DateTime)CabFecha;
                    varOBTF.JournalEntries.TaxDate       = (DateTime)CabFecha;
                    varOBTF.JournalEntries.Memo          = CabComentario;
                    varOBTF.JournalEntries.Reference     = CabReferencia1;
                    varOBTF.JournalEntries.Reference2    = CabReferencia2;
                    varOBTF.JournalEntries.Reference3    = DocNombre + " - " + CabNumero.ToString();
                    varOBTF.JournalEntries.UserFields.Fields.Item("U_Ita_sysusuario").Value   = clsVariablesGlobales.varCodUsuario;
                    varOBTF.JournalEntries.UserFields.Fields.Item("U_Ita_sysfecha").Value     = DateTime.Now.ToString("dd/MM/yyyy HH:mm");
                    varOBTF.JournalEntries.UserFields.Fields.Item("U_Ita_sysip").Value        = clsVariablesGlobales.varIpMaquina;
                    varOBTF.JournalEntries.UserFields.Fields.Item("U_Ita_sysdocumento").Value = DocNombre;
                    varOBTF.JournalEntries.UserFields.Fields.Item("U_Ita_sysnumero").Value    = CabNumero.ToString();
                    //Recuperamos informacion de los detalles del movimiento
                    List <clsFinDocPreliminarDet> objDetalle = new List <clsFinDocPreliminarDet>();
                    clsFinDocPreliminarDet.proListar(CabCodigo, out objDetalle);

                    foreach (clsFinDocPreliminarDet objFilaDetalle in objDetalle)
                    {
                        if (!i.Equals(0))
                        {
                            varOBTF.JournalEntries.Lines.Add();
                        }
                        varOBTF.JournalEntries.Lines.SetCurrentLine(i);
                        i++;
                        varOBTF.JournalEntries.Lines.AccountCode    = objFilaDetalle.CueCodigo;
                        varOBTF.JournalEntries.Lines.Debit          = double.Parse(objFilaDetalle.DetDebe.ToString());
                        varOBTF.JournalEntries.Lines.Credit         = double.Parse(objFilaDetalle.DetHaber.ToString());
                        varOBTF.JournalEntries.Lines.LineMemo       = objFilaDetalle.DetComentario;
                        varOBTF.JournalEntries.Lines.Reference1     = objFilaDetalle.DetReferencia1;
                        varOBTF.JournalEntries.Lines.Reference2     = objFilaDetalle.DetReferencia2;
                        varOBTF.JournalEntries.Lines.ReferenceDate2 = CabFecha;
                        varOBTF.JournalEntries.Lines.CostingCode    = objFilaDetalle.CcoCodigo.Equals("") ? "" : objFilaDetalle.CcoCodigo.ToString().Substring(0, 2);
                        varOBTF.JournalEntries.Lines.CostingCode2   = objFilaDetalle.CcoCodigo.ToString().Equals("") ? "" : objFilaDetalle.CcoCodigo.ToString().Substring(0, 3);
                        varOBTF.JournalEntries.Lines.CostingCode3   = objFilaDetalle.CcoCodigo.ToString().Equals("") ? "" : objFilaDetalle.CcoCodigo.ToString().Substring(0, 4);
                        varOBTF.JournalEntries.Lines.TaxDate        = CabFecha;
                        varOBTF.JournalEntries.Lines.DueDate        = CabFecha;
                    }
                    iError = varOBTF.Add();
                    if (!iError.Equals(0))
                    {
                        csConexionSap.objConexionSap.GetLastError(out iError, out mError);
                        return(mError);
                    }
                    else
                    {
                        int varCabEntrySap = 0;
                        int.TryParse(csConexionSap.objConexionSap.GetNewObjectKey().ToString(), out varCabEntrySap);

                        csAccesoDatos.funIniciarSesion("conDBUmbrella");
                        csAccesoDatos.GDatos.funEjecutarSql(string.Format("Update FIN_CABDOCPRELIMINAR Set CabSap = {0}, EstCodigo = 'Sap'  Where DocCodigo = {1} and CabNumero = {2}", varCabEntrySap, DocCodigo, CabNumero));
                        csAccesoDatos.proFinalizarSesion();
                    }
                    return(mError);
                }
            }
            catch (Exception) { throw; }
            finally { csAccesoDatos.proFinalizarSesionSAP(); }
        }
        //Funcion utilizada para enviar el documentos al sistema SAP
        public string funEnviarDocPreliminarSAP()
        {
            try
            {
                string mError = "";
                int    iError = 0;
                int    i      = 0;

                csAccesoDatos.proIniciarSesionSAP();
                DataTable objDtVerificarSAP = funVerificarEntMercanciaSAP(DocNombre, CabNumero);
                if (objDtVerificarSAP.Rows.Count > 0)
                {
                    //Actualizacion en el formulario de movimientos de inventario
                    int DocEntrySAPEntrada = int.Parse(objDtVerificarSAP.Rows[0]["DocEntry"].ToString());
                    int NumeroSAPEntrada   = int.Parse(objDtVerificarSAP.Rows[0]["DocNum"].ToString());
                    csAccesoDatos.funIniciarSesion("conDBUmbrella");
                    csAccesoDatos.GDatos.funEjecutarSql(string.Format("Update COM_CABENTRADA Set CabEntrySap = {0}, CabNumSap = {1}, EstCodigo = 'Sap' Where DocCodigo = {2} and CabNumero = {3}", DocEntrySAPEntrada, NumeroSAPEntrada, DocCodigo, CabNumero));
                    csAccesoDatos.proFinalizarSesion();
                    return(mError);
                }
                else
                {
                    //Recuperamos la informacion del resumen de entrada de mercancias
                    List <clsComEntMercanciasRes> objResumen = new List <clsComEntMercanciasRes>();
                    clsComEntMercanciasRes.proListar(CabCodigo, out objResumen);
                    DataTable dtDetLote = clsComEntMercanciasCab.funRecDetLote(CabCodigo);

                    SAPbobsCOM.Documents varOPDN = csConexionSap.objConexionSap.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oPurchaseDeliveryNotes);

                    varOPDN.Series     = clsSegDocumento.funRecNumSerieSAPEntrada(DocCodigo);                               //Serie
                    varOPDN.CardCode   = PrvCodigo;                                                                         //Codigo del proveedor
                    varOPDN.CardName   = PrvNombre;                                                                         //Nombre
                    varOPDN.DocDate    = (DateTime)CabFecha;                                                                //Fecha contabilizacion
                    varOPDN.DocDueDate = (DateTime)CabFecha;                                                                //Fecha vencimiento
                    varOPDN.TaxDate    = (DateTime)CabFecha;                                                                //Fecha documento
                    varOPDN.Comments   = CabComentario;                                                                     //Comentario
                    varOPDN.UserFields.Fields.Item("U_Ita_sysusuario").Value   = clsVariablesGlobales.varCodUsuario;        //Usuario
                    varOPDN.UserFields.Fields.Item("U_Ita_sysfecha").Value     = DateTime.Now.ToString("dd/MM/yyyy HH:mm"); //Fecha de auditoria
                    varOPDN.UserFields.Fields.Item("U_Ita_sysip").Value        = clsVariablesGlobales.varIpMaquina;         //Ip de la maquina
                    varOPDN.UserFields.Fields.Item("U_Ita_sysdocumento").Value = DocNombre;                                 //Serie del documento umbrella
                    varOPDN.UserFields.Fields.Item("U_Ita_sysnumero").Value    = CabNumero.ToString();                      //Numero del documento umbrella
                    varOPDN.DocType = SAPbobsCOM.BoDocumentTypes.dDocument_Items;
                    //Detalle de la entrada de mercancia
                    foreach (clsComEntMercanciasRes objFilaResumen in objResumen)
                    {
                        if (!i.Equals(0))
                        {
                            varOPDN.Lines.Add();
                        }
                        varOPDN.Lines.SetCurrentLine(i);
                        i++;
                        varOPDN.Lines.WarehouseCode   = BodCodigo;
                        varOPDN.Lines.ItemCode        = objFilaResumen.IteCodigo;
                        varOPDN.Lines.ItemDescription = objFilaResumen.IteNombre;
                        varOPDN.Lines.Quantity        = double.Parse(objFilaResumen.DetCantidad.ToString());
                        varOPDN.Lines.Price           = double.Parse(objFilaResumen.DetCosto.ToString());
                        varOPDN.Lines.UserFields.Fields.Item("U_ita_ped_pza").Value = objFilaResumen.DetUnidad;
                        int j = 0;

                        foreach (DataRow drLote in dtDetLote.Select(string.Format("IteCodigo = '{0}' And DetLote <> ''", objFilaResumen.IteCodigo)))
                        {
                            if (!j.Equals(0))
                            {
                                varOPDN.Lines.BatchNumbers.Add();
                            }
                            varOPDN.Lines.BatchNumbers.BatchNumber = drLote["DetLote"].ToString();
                            varOPDN.Lines.BatchNumbers.Quantity    = double.Parse(drLote["DetCantidad"].ToString());
                            j++;
                        }
                    }
                    iError = varOPDN.Add();
                    if (!iError.Equals(0))
                    {
                        csConexionSap.objConexionSap.GetLastError(out iError, out mError);
                        return(mError);
                    }
                    else
                    {
                        int varCabEntrySap = 0;
                        int.TryParse(csConexionSap.objConexionSap.GetNewObjectKey().ToString(), out varCabEntrySap);
                        varOPDN.GetByKey(varCabEntrySap);
                        int varCabNumSap = varOPDN.DocNum;

                        csAccesoDatos.funIniciarSesion("conDBUmbrella");
                        csAccesoDatos.GDatos.funEjecutarSql(string.Format("Update COM_CABENTRADA Set  CabEntrySap = {0}, CabNumSap = {1}, EstCodigo = 'Sap' Where DocCodigo = {2} and CabNumero = {3}", varCabEntrySap, varCabNumSap, DocCodigo, CabNumero));
                        csAccesoDatos.proFinalizarSesion();
                    }
                    return(mError);
                }
            }
            catch (Exception) { throw; }
            finally { csAccesoDatos.proFinalizarSesionSAP(); }
        }