private function GeraAgrupamento($SomenteCr, $SomenteEx, $SomenteCO) {


	//Gera o filtro referente aos lançamentos que serão agrupados
	$this->MontaFiltroAgrupamento($SomenteCr, $SomenteEx, $SomenteCO);

	$ObjAgrupamento = new CArupamento();

	if ($this->getCodEmpresaDoGrupoEnvioBoleto())
	    $this->setCodEmp($this->getCodEmpresaDoGrupoEnvioBoleto());

	if ($ObjAgrupamento->VerificaListaLancamentos(TRUE, TRUE, $this->getTransacao())) {
	    if (unserialize($_SESSION['ArrayAgrup'])->GravaAgrupamento($this->getArrayInfoCrCodTransCRParcelamento(), $this->getCodEmp(), $this->getValor(), false, $this->getTransacao())) {
		unset($_SESSION['ArrayAgrup']);
		return true;
	    } else {
		$this->setStatusOperacao(true);
		$this->Msg($ObjAgrupamento->getMotivoErro());
		return false;
	    }
	} else {
	    $this->setMsg($ObjAgrupamento->getMotivoErro() . "\n\n Erro ao gerar agrupamento referente ao fechamento " . $this->getCodFechamentoSigmo() . "\nEmp:" . $this->getCodEmp() . " ID:" . $this->getIdFechamento());
	    $this->setStatusOperacao(true);
	    return false;
	}

	$this->setMsg($ObjAgrupamento->getMotivoErro());
    }
    public function VerificaListaLancamentos($GravaObj = true, $where = false, $TransacaoFiltro = false) {
	//Recupera o filtro atual do usuário
	$CFiltro = new CFiltro();
	$String = new CString();


	if (!isset($_SESSION["pesquisa"]) || (isset($_POST["pesquisa"]))) {
	    $_SESSION["pesquisa"] = isset($_POST['pesquisa']) ? $_POST['pesquisa'] : "";
	}

	if (!isset($_SESSION["pesquisa"]) || (isset($_POST["pesquisa"]))) {
	    $_SESSION["pesquisa"] = isset($_POST['pesquisa']) ? $String->convertem(trim($_POST['pesquisa']), 1) : "";
	}

	if (!isset($_SESSION["pesquisa_especifica"]) || (isset($_POST["pesquisa_especifica"]))) {
	    $_SESSION["pesquisa_especifica"] = isset($_POST['pesquisa_especifica']) ? $_POST['pesquisa_especifica'] : "";
	}
	if (!$where) {
	    $Where = "AND (RAZAO_SOCIAL LIKE '%" . $_SESSION["pesquisa"] . "%' "
		    . "OR NOME_FANTASIA LIKE '%" . $_SESSION["pesquisa"] . "%' "
		    . "OR NOME_CONTA LIKE '%" . $_SESSION["pesquisa"] . "%' "
		    . "OR SUBCATEGORIA LIKE '%" . $_SESSION["pesquisa"] . "%' "
		    . "OR GRUPO.GRUPO  LIKE '%" . $_SESSION["pesquisa"] . "%' "
		    . "OR SERVICO.NOME  LIKE '%" . $_SESSION["pesquisa"] . "%' "
		    . "OR NUMERO_NF LIKE '%" . $_SESSION["pesquisa"] . "%') ";


	    if (is_numeric($_SESSION["pesquisa"]))
		$Where = "AND (F_LANCA_CR2_ID = " . $_SESSION["pesquisa"] . " "
			. "OR COD_PARCELAMENTO_PAI = " . $_SESSION["pesquisa"] . " "
			. "OR NUMERO_NF = '" . $_SESSION["pesquisa"] . "' "
			. "OR NUMERO_FATURA_SIGMO = '" . $_SESSION["pesquisa"] . "' "
			. "OR NUM_CHEQUE = " . $_SESSION["pesquisa"] . ") ";



	    //Caso tenha sido realizado pesquisa específica
	    if (!empty($_SESSION["pesquisa_especifica"])) {
		if ($_SESSION["pesquisa_especifica"] != "NUMERO_NF") {
		    if (!is_numeric($_SESSION["pesquisa"]))
			return parent::setMsg("Pesquisa requer valor numérico");
		    else
			$Where = "AND " . $_SESSION["pesquisa_especifica"] . " = " . $_SESSION["pesquisa"];
		} else {
		    if (empty($_SESSION["pesquisa"]))
			return parent::setMsg("Informe o número da nota fiscal a ser pesquisada");
		    else
			$Where = "AND " . $_SESSION["pesquisa_especifica"] . " = '" . $_SESSION["pesquisa"] . "'";
		}
	    }
	}else {
	    $Where = " ";
	}


	//Recupera o filtro do usuário
	$Cfiltro = (new CFiltro())->RecuperaFIltro($_SESSION["id_usuario"], "FILTRO_CR", $TransacaoFiltro);

	$Cfiltro->getSqlFiltro();

	//Verifica se o usuário tem permissão de criar filtros de contas a receber
	if ($Cfiltro->getSqlFiltro() != '') {
	    $listaCr = (new ModellancaCrBd())->getTodos($Where, str_replace('"', "'", $Cfiltro->getSqlFiltro()), false, $TransacaoFiltro);
	} else {
	    $this->setMotivoErro("Usuário não possui filtro associado a essa funcionalidade");
	    return false;
	}

	//Verifica se o filtro selecionado retorna mais de uma linha
	if (count($listaCr) <= 1) {
	    $this->setMotivoErro("Selecione mais de um lançamento para proseguir com o agrupamento");
	    return false;
	}


	//Verifica se algum lançamento encontra-se baixado o faturado
	foreach ($listaCr as $contas){
	    if ($contas->getCod_status() == 2 OR $contas->getCod_status() == 3) {
		$this->setMotivoErro("Todos os lançamentos a serem agrupados devem constar com status ABERTO");
		return false;
	    }
	    //Verifica se o lançamento a ser agrupado já é um agrupamento
	    if ($contas->getCodAgrupamento() > 0) {
		$this->setMotivoErro("Atenção! \n\nNão é possível agrupar lançamentos que já estão agrupados\n\nFiltre somente os lançamentos não agrupados");
		return false;
	    }
	}



	if ($GravaObj)
	//Verifica se todas as empresas pertecem ao mesmo grupo
	    if ($this->VerificaEmpersasAgrupamento($listaCr)) {
		if ($GravaObj) {
		    $ObjAgrupamentoIns = new CArupamento();
		    $ObjAgrupamentoIns->setListaLancamentos($listaCr);
		    if (!isset($_SESSION['ArrayAgrup'])) {
			$_SESSION['ArrayAgrup'] = serialize($ObjAgrupamentoIns);
		    } else {
			$this->setMotivoErro("Outro agrupamento está sendo realizado\n\n Finalize o agrupamento atual, ou cancele-o\n\n (Verifique as outras abas do browser)");
			return false;
		    }
		}
		return true;
	    }
    }
    public function Agrupar() {
	$ObjAgrupamento = new CArupamento();
	if ($ObjAgrupamento->VerificaListaLancamentos()) {
	    echo 1;
	    exit();
	} else {
	    echo $ObjAgrupamento->getMotivoErro();
	    exit();
	}
    }