private void guardaPreNomina()
        {
            cnx = new SqlConnection(cdn);
            cmd = new SqlCommand();
            cmd.Connection = cnx;

            nh = new CalculoNomina.Core.NominaHelper();
            nh.Command = cmd;

            CalculoNomina.Core.tmpPagoNomina pn = new CalculoNomina.Core.tmpPagoNomina();
            pn.idempresa = GLOBALES.IDEMPRESA;
            pn.fechainicio = periodoInicio.Date;
            pn.fechafin = periodoFin.Date;
            pn.guardada = true;
            pn.tiponomina = _tipoNomina;
            pn.obracivil = _obracivil;

            try
            {
                cnx.Open();
                nh.guardaPreNomina(pn, _periodo);
                cnx.Close();
            }
            catch (Exception error)
            {
                MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error");
            }

            try
            {
                cnx.Open();
                nh.aplicaBajaObraCivil(pn, _periodo);
                cnx.Close();
            }
            catch (Exception error)
            {
                MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error");
            }

            string formulaDiasAPagar = "[DiasLaborados]-[Faltas]-[DiasIncapacidad]";
            foreach (DataGridViewRow fila in dgvEmpleados.Rows)
            {
                CalculoFormula cf = new CalculoFormula(int.Parse(fila.Cells["idtrabajador"].Value.ToString()), periodoInicio, periodoFin, formulaDiasAPagar);
                int diasAPagar = int.Parse(cf.calcularFormula().ToString());

                pn = new CalculoNomina.Core.tmpPagoNomina();
                pn.idtrabajador = int.Parse(fila.Cells["idtrabajador"].Value.ToString());
                pn.diaslaborados = diasAPagar;
                pn.fechainicio = periodoInicio;
                pn.fechafin = periodoFin;

                try
                {
                    cnx.Open();
                    nh.actualizaDiasFechaPago(pn, _periodo);
                    cnx.Close();
                }
                catch (Exception error)
                {
                    MessageBox.Show("Error: Al actualizar los dias laborados. \r\n \r\n" + error.Message, "Error");
                    return;
                }
            }
            cnx.Dispose();

            MessageBox.Show("ATENCION: La Pre Nómina de Obra Civil se ha guardado, \r\n ésta ya no será modificada. \r\n\r\n Se cerrará la ventana para concluir.", "Información");
            this.Dispose();
        }