public static void GeneraOrdenesDeCompraPendientes() { string fhoy = DateTime.Now.ToShortDateString(); SolicitudMaterialesConsulta sol = new SolicitudMaterialesConsulta(); sol.Estatus.id = 6; // 6 = Por generar orden de compra sol.FechaDesde = Convert.ToDateTime(fhoy); sol.FechaHasta = Convert.ToDateTime(fhoy); List <EN.Abastos.SolicitudMateriales> ls = GetSolicitudDeMateriales(sol); if (ls != null && ls.Count > 0) { SDK.Inicializa(); bool Siguiente = false; foreach (EN.Abastos.SolicitudMateriales solicitud in ls) { if (SDK.AbreEmpresa(solicitud.BaseDeDatos)) { List <EN.Abastos.SolicitudMateriales> ls_aux = new List <EN.Abastos.SolicitudMateriales>(); int cidprov = 0; EN.Abastos.SolicitudMateriales saux = null; //Verifica la cantidad de ordenes de compra a generar // por proveedor de acuerdo a los artículos elegidos. foreach (DetalleSolicitudMateriales ds in solicitud.articulos) { if (cidprov != ds.item.CIDPROVEEDOR) { cidprov = ds.item.CIDPROVEEDOR; saux = new EN.Abastos.SolicitudMateriales(); saux = (EN.Abastos.SolicitudMateriales)solicitud.Clone(); saux.articulos = new List <DetalleSolicitudMateriales>(); saux.articulos.Add(ds); ls_aux.Add(saux); } else { saux.articulos.Add(ds); } } //Por cada diferente proveedor en la misma solicitud // se genera una orden de compra en el sistema comercial foreach (EN.Abastos.SolicitudMateriales sol_aux in ls_aux) { Siguiente = false; try { Documento documento = new Documento(); string codProveedor = documento.BuscaProveedorPorId(solicitud.CIDProveedor); //339 int idmoneda = documento.ObtieneIdMoneda(solicitud.Moneda); double importe = solicitud.total; string sconcepto = documento.ObtieneCodigoConcepto(solicitud.ConceptoDocumento); if (sconcepto.Trim().Length > 0) { string folio = documento.ObtieneFolioSiguiente(sconcepto); solicitud.FolioDocumento = folio; solicitud.SerieDocumento = ""; tDocumento docto = new tDocumento(); docto.aCodConcepto = sconcepto; docto.aSerie = ""; docto.aFecha = DateTime.Now.ToString("MM/dd/yyyy"); docto.aFolio = Convert.ToDouble(documento.Folio); docto.aCodigoCteProv = codProveedor; docto.aNumMoneda = idmoneda; docto.aImporte = importe; docto.aDescuentoDoc1 = 0; docto.aDescuentoDoc2 = 0; docto.aSistemaOrigen = 0; docto.aAfecta = 0; docto.aReferencia = ""; bool bCreado = false; try { bCreado = documento.AltaDeDocumento(docto); } catch (Exception ex) { throw ex; } if (bCreado) { //Inserta información adicional bCreado = documento.SetDatoDocumento("CTEXTOEXTRA1", new StringBuilder(solicitud.Usuario)); } if (bCreado) { int c = 1; foreach (DetalleSolicitudMateriales fila in solicitud.articulos) { tMovimiento tm = new tMovimiento(); tm.aConsecutivo = c; tm.aCodProdSer = fila.item.CCODIGOPRODUCTO.ToString(); tm.aCosto = 0; tm.aPrecio = fila.item.preciocompra; tm.aReferencia = ""; tm.aCodClasificacion = ""; tm.aCodAlmacen = "1"; tm.aUnidades = fila.cantidad; bCreado = false; try { Int32 idMov = documento.AltaMovimiento(tm); if (idMov > 0) { documento.SetDatoMovimiento("CIMPUESTO1", new StringBuilder(((fila.item.preciocompra * fila.cantidad) * 0.16).ToString())); documento.SetDatoMovimiento("CPORCENTAJEIMPUESTO1", new StringBuilder("16")); fila.CIDMOVIMIENTO = idMov; fila.FolioDocumento = folio; fila.SerieDocumento = ""; } else { throw new Exception(string.Format("Revise el log {0} en el visor de eventos del sistema", EN.General.Utils.EventLog)); } } catch (Exception ex) { throw ex; } c++; } } } else { throw new Exception("No se econtró el codigo del concepto " + solicitud.ConceptoDocumento); } InsertaSolicitud(solicitud); //Actualiza información de la solicitud en DB Siguiente = true; } catch (Exception ex) { EN.General.EventLog.WriteError(ex.ToString()); Siguiente = false; break; } } if (SDK.EmpresaAbierta) { SDK.CerrarEmpresa(solicitud.BaseDeDatos); } if (!Siguiente) { break; } } else { EN.General.EventLog.WriteError("Error al procesar la solicitud con id: " + solicitud.id); EN.General.EventLog.WriteError("Error al abrir Base de Datos " + solicitud.BaseDeDatos); } ActualizaEstatus("SICAS", solicitud.id, 4); } SDK.TerminaSDK(); } }