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(); } }
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(); } }
/// <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(); } }
/// <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(); } }