//Procedimiento almacenado utilizado para insertar y modificar las actualizaciones de costo de productos public int funMantenimiento(clsCosActCstProductos csRegistro, int varOperacion) { try { csAccesoDatos.funIniciarSesion("conDBUmbrella"); int varCodigo = (int)csAccesoDatos.GDatos.funTraerValorEscalar("proGra_ActCstProductosMantenimiento", csRegistro.CabCodigo, csRegistro.DocCodigo, csRegistro.CabNumero, csRegistro.CabFecha, csRegistro.BodCodigo, csRegistro.CabDescripcion, csRegistro.CabComentario, csRegistro.CabComenDiario, csRegistro.EstCodigo, varOperacion, clsVariablesGlobales.varCodUsuario, csRegistro.DetActCstFormulacion, csRegistro.DetActCstMaterial); csAccesoDatos.proFinalizarSesion(); return(varCodigo); } catch (Exception) { throw; } }
//Funcion utilizada para asignar los valores recuperados de la consulta a las propiedades de las clases private static clsCosActCstProductos funRegistro(DataRow drRegistro, clsCosActCstProductos objRegistro) { objRegistro.CabCodigo = drRegistro["CabCodigo"] == System.DBNull.Value ? 0 : int.Parse(drRegistro["CabCodigo"].ToString()); objRegistro.DocCodigo = drRegistro["DocCodigo"] == System.DBNull.Value ? 0 : int.Parse(drRegistro["DocCodigo"].ToString()); objRegistro.DocNombre = drRegistro["DocNombre"] == System.DBNull.Value ? "" : drRegistro["DocNombre"].ToString(); objRegistro.CabNumero = drRegistro["CabNumero"] == System.DBNull.Value ? 0 : int.Parse(drRegistro["CabNumero"].ToString()); objRegistro.CabFecha = (DateTime)drRegistro["CabFecha"]; objRegistro.BodCodigo = drRegistro["BodCodigo"] == System.DBNull.Value ? "" : drRegistro["BodCodigo"].ToString(); objRegistro.BodNombre = drRegistro["BodNombre"] == System.DBNull.Value ? "" : drRegistro["BodNombre"].ToString(); objRegistro.CabDescripcion = drRegistro["CabDescripcion"] == System.DBNull.Value ? "" : drRegistro["CabDescripcion"].ToString(); objRegistro.CabComentario = drRegistro["CabComentario"] == System.DBNull.Value ? "" : drRegistro["CabComentario"].ToString(); objRegistro.CabComenDiario = drRegistro["CabComenDiario"] == System.DBNull.Value ? "" : drRegistro["CabComenDiario"].ToString(); objRegistro.EstCodigo = drRegistro["EstCodigo"] == System.DBNull.Value ? "" : drRegistro["EstCodigo"].ToString(); objRegistro.UsuCrea = drRegistro["UsuCrea"] == null ? "" : drRegistro["UsuCrea"].ToString(); objRegistro.UsuFechaCrea = drRegistro["UsuFechaCrea"] == DBNull.Value ? DateTime.Now : (DateTime)drRegistro["UsuFechaCrea"]; objRegistro.UsuCrea = drRegistro["UsuModifica"] == null ? "" : drRegistro["UsuModifica"].ToString(); objRegistro.UsuFechaModifica = drRegistro["UsuFechaModifica"] == DBNull.Value ? DateTime.Now : (DateTime)drRegistro["UsuFechaModifica"]; return(objRegistro); }
//Funcion utilizada para enviar el documentos al sistema SAP public static string funEnviarDocumentoSAP(clsCosActCstProductos objRegistro, int varCabNumero) { try { string mError = ""; csAccesoDatos.proIniciarSesionSAP(); //Declaramos la variables para obtener la informacion que vamos a utilizar int varCabCodigo = objRegistro.CabCodigo; //Codigo key del documento int varDocCodigo = objRegistro.DocCodigo; //Codigo del documento string varDocNombre = objRegistro.DocNombre; //Descripcion del documento string varCabComentario = objRegistro.CabComentario; //Comentario para el documento string varCabComenDiario = objRegistro.CabComenDiario; //Comentario para el diario contable string varBodCodigo = objRegistro.BodCodigo; //Bodega donde se va ingresar el inventario DateTime varCabFecha = objRegistro.CabFecha; //Fecha del documento //Recorremos el datatable de los items a producir foreach (DataRow drItemProducir in objRegistro.DetActCstFormulacion.Rows) { int varDetSecuencia = int.Parse(drItemProducir["DetSecuencia"].ToString()); //Linea de detalle del documento //Recuperamos la informacion con respecto a la salida de mercancia enviada a SAP DataTable dtSalMercanciaSAP = funVerificarSalMercanciaSAP(varDocNombre, varCabNumero, varDetSecuencia); //Verificamos si existe una salida en el sistema SAP del documento enviado if (dtSalMercanciaSAP.Rows.Count.Equals(0)) { mError = funEnviarSalidaSAP(mError, varCabCodigo, varCabNumero, varDocCodigo, varDetSecuencia, varDocNombre, varCabFecha, varCabComentario, varCabComenDiario, objRegistro.DetActCstMaterial, drItemProducir); } else { //Verificamos si ya esta actualizado el campo de SAP salida if (int.Parse(drItemProducir["DetNumeroSAPSalida"].ToString()).Equals(0)) { //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 int varDocEntrySAPSalida = int.Parse(dtSalMercanciaSAP.Rows[0]["DocEntry"].ToString()); int varDocNumSAPSalida = int.Parse(dtSalMercanciaSAP.Rows[0]["DocNum"].ToString()); proActSAPDetActCstFormulacion(varDocEntrySAPSalida, varDocNumSAPSalida, varCabCodigo, varDetSecuencia, 1, 0); drItemProducir["DetNumeroSAPSalida"] = varDocNumSAPSalida; drItemProducir.AcceptChanges(); mError = ""; } } //Verificamos que en el proceso de salida de mercancia no haya habido ningun error if (mError.Equals("")) { //Recuperamos la informacion con respecto a la entrada de mercancia enviada a SAP DataTable dtEntMercanciaSAP = funVerificarEntMercanciaSAP(varDocNombre, varCabNumero, varDetSecuencia); //Verificamos si existe una entrada en el sistema SAP del documento enviado if (dtEntMercanciaSAP.Rows.Count.Equals(0)) { mError = funEnviarEntradaSAP(mError, varCabCodigo, varCabNumero, varDocCodigo, varDetSecuencia, varDocNombre, varCabFecha, varCabComentario, varCabComenDiario, varBodCodigo, drItemProducir); } else { if (int.Parse(drItemProducir["DetNumeroSAPEntrada"].ToString()).Equals(0)) { //Actualizamos la linea del detalle con la informacion de SAP de la entrada de mercancias en la tabla de detalle de actualizacion de costos de formulacion int varDocEntrySAPEntrada = int.Parse(dtEntMercanciaSAP.Rows[0]["DocEntry"].ToString()); int varDocNumSAPEntrada = int.Parse(dtEntMercanciaSAP.Rows[0]["DocNum"].ToString()); proActSAPDetActCstFormulacion(varDocEntrySAPEntrada, varDocNumSAPEntrada, varCabCodigo, varDetSecuencia, 2, 0); drItemProducir["DetNumeroSAPEntrada"] = varDocNumSAPEntrada; drItemProducir.AcceptChanges(); mError = ""; } } } //Verificamos que en el proceso de entrada de mercancia no haya habido ningun error if (mError.Equals("")) { //Recuperamos informacion con respecto a los totales para encontrar diferencias tanto en entrada como salida de mercancias double varValorSalida = funRecTotSalMercanciaSAP(varDocNombre, varCabNumero, varDetSecuencia); double varValorEntrada = funRecTotEntMercanciaSAP(varDocNombre, varCabNumero, varDetSecuencia); double varValor = Math.Round(Math.Abs(varValorEntrada - varValorSalida), 2); //Verificamos si existe diferencias entre los valores totales de entrada y salida de mercancia if (varValorSalida != varValorEntrada) { //Recuperamos la informacion con respecto a la entrada de mercancia enviada a SAP DataTable dtDiarioSAP = funVerificarDiarioSAP(varDocNombre, varCabNumero, varDetSecuencia); //Verificamos si existe un diario en el sistema SAP del documento enviado if (dtDiarioSAP.Rows.Count.Equals(0)) { if (varValorSalida < varValorEntrada) { mError = funEnviarDiarioSAP(mError, varCabCodigo, varCabNumero, varDocCodigo, varDetSecuencia, varDocNombre, varCabFecha, varCabComenDiario, "Debe", varValor, drItemProducir); } else { mError = funEnviarDiarioSAP(mError, varCabCodigo, varCabNumero, varDocCodigo, varDetSecuencia, varDocNombre, varCabFecha, varCabComenDiario, "Haber", varValor, drItemProducir); } } else { if (int.Parse(drItemProducir["DetNumeroSAPDiario"].ToString()).Equals(0)) { //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 int varDocEntrySAPDiario = int.Parse(dtDiarioSAP.Rows[0]["TransId"].ToString()); int varDocNumSAPDiario = int.Parse(dtDiarioSAP.Rows[0]["Number"].ToString()); proActSAPDetActCstFormulacion(varDocEntrySAPDiario, varDocNumSAPDiario, varCabCodigo, varDetSecuencia, 3, 0); drItemProducir["DetNumeroSAPDiario"] = varDocNumSAPDiario; drItemProducir.AcceptChanges(); mError = ""; } } } else { //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 proActSAPDetActCstFormulacion(-1, -1, varCabCodigo, varDetSecuencia, 3, 0); drItemProducir["DetNumeroSAPDiario"] = -1; drItemProducir.AcceptChanges(); mError = ""; } } } //Validamos si todos los items a producir fueron enviados a SAP para cerrar la orden if (clsCosActCstProductos.funVerificarDetItemProducirSAP(varCabCodigo).Equals(0)) { //Actualizamos el estado de la orden a SAP csAccesoDatos.funIniciarSesion("conDBUmbrella"); csAccesoDatos.GDatos.funEjecutarSql(string.Format("Update GRA_CABACTCSTPRODUCTOS Set EstCodigo = 'Sap' Where CabCodigo = {0}", varCabCodigo)); csAccesoDatos.GDatos.funEjecutarSql(string.Format("Update GRA_DETACTCSTFORMULACION Set EstCodigo = 'Sap' Where CabCodigo = {0}", varCabCodigo)); csAccesoDatos.GDatos.funEjecutarSql(string.Format("Update GRA_DETACTCSTMATERIAL Set EstCodigo = 'Sap' Where CabCodigo = {0}", varCabCodigo)); csAccesoDatos.proFinalizarSesion(); } return(""); } catch (Exception e) { throw new Exception(e.Message); } finally { csAccesoDatos.proFinalizarSesionSAP(); } }