public void refrescaPartes() throws SQLException, DataStoreException {
    // setea y recupera los partes en estado generados
    _dsPartes.reset();
    _dsPartes.retrieve("partes_mo.estado = \"0003.0001\"");

    // si no recuperó ningún parte en estado generado, inserta al menos un registro
    _dsPartes.waitForRetrieve();
    if (_dsPartes.getRowCount() == 0) {
      int row = _dsPartes.insertRow();
      java.sql.Date hoy = new java.sql.Date(System.currentTimeMillis() - (1000 * 60 * 60 * 24));
      _dsPartes.setPartesMoFecha(row, hoy);
      _fechaTE3.setFocus(row, true);
    }
  }
  @Override
  public boolean submitPerformed(SubmitEvent e) throws Exception {

    if (e.getComponent() == _grabarParteBUT3) {
      try {
        _dsPartes.update();
      } catch (DataStoreException ex) {
        displayErrorMessage(ex.getMessage());
        return false;
      }
    }

    if (e.getComponent() == _nuevoParteCopiarBUT1 || e.getComponent() == _nuevoBUT91) {

      int rowActual = _dsPartes.getRow();
      // si existe row anterior, le copia los valores
      if (rowActual != -1) {
        // valido el parte que estoy copiando
        try {
          _dsPartes.completaUnParte(rowActual);
        } catch (DataStoreException ex) {
          // muestro mensaje pero sigo sin problemas
          displayErrorMessage(ex.getMessage());
          _fechaTE3.setFocus(rowActual, true);
          return false;
        }
        int row = _dsPartes.insertRow(0);

        _dsPartes.setPartesMoFecha(row, _dsPartes.getPartesMoFecha(rowActual + 1));
        _dsPartes.setPartesMoHoraDesde(row, _dsPartes.getPartesMoHoraDesde(rowActual + 1));
        _dsPartes.setPartesMoHoraHasta(row, _dsPartes.getPartesMoHoraHasta(rowActual + 1));
        _dsPartes.setPartesMoNroLegajo(row, _dsPartes.getPartesMoNroLegajo(rowActual + 1));
        _dsPartes.setPartesMoProyecto(row, _dsPartes.getPartesMoProyecto(rowActual + 1));
        _dsPartes.setPartesMoProyectoNombre(
            row, _dsPartes.getPartesMoProyectoNombre(rowActual + 1));
        _dsPartes.setPartesMoSectorId(row, _dsPartes.getPartesMoSectorId(rowActual + 1));
        _dsPartes.setPartesMoSupervisor(row, _dsPartes.getPartesMoSupervisor(rowActual + 1));

        // hace foco en el registro
        int nroPagerow = _datatable1.getPage(row);
        int nroPageActual = _datatable1.getPage(_dsPartes.getRow());
        if (nroPagerow != nroPageActual) _datatable1.setPage(_datatable1.getPage(row));
        _fechaTE3.setFocus(row, true);
      } else {
        displayErrorMessage("Debe seleccionar un parte primero antes de copiarlo");
        return false;
      }
    }

    if (e.getComponent() == _nuevoParteNuevoBUT2 || e.getComponent() == _nuevoBUT92) {

      int rowActual = _dsPartes.getRow();
      int row = _dsPartes.insertRow(0);
      // si existe row anterior, s�lo copia valores b�sicos
      if (row > 1) {
        // valido el parte que estoy copiando
        _dsPartes.setPartesMoFecha(row, _dsPartes.getPartesMoFecha(rowActual + 1));
        _dsPartes.setPartesMoProyectoId(row, _dsPartes.getPartesMoProyectoId(rowActual + 1));
      }

      // hace foco en el registro
      int nroPagerow = _datatable1.getPage(row);
      int nroPageActual = _datatable1.getPage(_dsPartes.getRow());
      if (nroPagerow != nroPageActual) _datatable1.setPage(_datatable1.getPage(row));
      _fechaTE3.setFocus(row, true);
    }

    if (e.getComponent() == _eliminaParteBUT4) {
      // elimina todos los partes seleccionados
      for (int i = 0; i < _dsPartes.getRowCount(); i++) {
        if (_dsPartes.getInt(i, SELECCION_PARTE_FLAG) == 1) {
          // Rol marcado para selecci�n
          _dsPartes.deleteRow(i);
        }
      }

      _dsPartes.update();
      refrescaPartes();
    }

    if (e.getComponent() == _refrescarBUT5) {
      refrescaPartes();
    }

    return super.submitPerformed(e);
  }