Totalização utilizando os eventos

Boa Tarde Sr.(s),
Tenho uma tabela com o seguinte select:

Select CPI.CodProd as CodProdMP, CPI.Descricao as Desc_ProdutoMP,
(case when sum(BatRI.PesoSolicitado) is null then 0 else sum(BatRI.PesoSolicitado) end) as PesoSolicitado,
(case when sum(BatRI.PesoDosado) is null then 0 else sum(BatRI.PesoDosado) end) as PesoDosado,
(case when sum(BatRI.PesoDosado-BatRI.PesoSolicitado) is null then 0 else sum(BatRI.PesoDosado-BatRI.PesoSolicitado) end) as ErroKG,
(case when (100-((sum(BatRI.PesoSolicitado)*100)/sum(BatRI.PesoDosado))) is null then 0 else (100-((sum(BatRI.PesoSolicitado)*100)/sum(BatRI.PesoDosado))) end) as Percentual
From Opr_Producao_Reg OPR
Left Join Opr_Producao_Reg_Bat BatR on (OPR.NumeroProducao=BatR.NumeroProducao)
Left Join Opr_Producao_Reg_Bat_Item BatRI on (BatR.NumeroProducao=BatRI.NumeroProducao and BatR.NumeroBatelada=BatRI.NumeroBatelada)
Inner Join Cad_Formula CF on (OPR.CodFormula=CF.CodFormula)
Left Join Cad_Linha CL on (OPR.CodLinha=CL.CodLinha)
Left Join Cad_Produto CP on (CF.CodProd=CP.CodProd)
Left Join Cad_Produto CPI on (BatRI.CodProd=CPI.CodProd) 
Left Join Cad_Produto_Grupo CPG on (CP.CodGrupoProd=CPG.CodGrupoProd)
Left Join Cad_Balanca CB on (BatRI.CodBalanca=CB.CodBalanca)
Left Join Cad_Silo CS on (BatRI.CodSilo=CS.CodSilo)
Left Join Sys_UCTabUsers on (Sys_UCTabUsers.UCIdUser=BatR.Usuario)
Where 1=1 and BatRI.PesoDosado>0 and CPI.CodProd<>0
Group By CF.CodFormula, CP.CodProd, CP.Descricao, CPI.CodProd, CPI.Descricao
Order By CF.CodFormula, CP.CodProd, CP.Descricao, CPI.CodProd, CPI.Descricao

Nesta tabela, preciso da totalização de alguns campos, porém, o scriptcase não permite fazer a totalização. Um erro é exibido no qual diz: “Não é possível executar uma função agregada em uma expressão contendo um agregado ou uma subconsulta.”
Criar uma view para este select poderia ser uma solução, no entanto, nesta tabela utilizo os eventos para fazer os filtros (utilizo o filtro pelos eventos para não haver a necessidade de listar os campos destes filtros no select principal). E para que este filtro por eventos funcione utilizando uma view no select do sciptcase, é necessário listar no select da view os campos que serão “chamados” nos eventos do filtro. Mas se estes campos de filtro forem colocados no select da view, o agrupamento ficará errado.

Como posso contornar esta situação?

Grato desde já,

Davi

Fácil crie uma VIEW detalhada, depois use o SQL desta view como se fosse uma tabela em uma consulta nova do SC, ai vai dar o resultado final desejado, você colocando os filtros, etc. na consulta do SC.

Se eu criar uma view com este sql a totalização funcionará, porém, os filtros não funcionarão mais. Porque quando utiliza-se os eventos para os filtros numa consulta em que o select é feito em cima de uma view, é necessário listar os campos do filtro no select dessa view. E se esses campos de filtro forem listados no select da view, o agrupamento do select fica errado… :confused:
Há alguma forma de utilizar os eventos para realizar uma totalização dos campos?

         campo a      campob      campo c
         1                 2                 3
         2                 3                 1
         3                 1                 2

total 6 6 6 <—

Jailton, criei uma view para aquele select, coloquei o seguinte no sql do scriptcase:

Select VW.CodFormula, VW.CodProd, VW.Desc_ProdutoPA,
VW.PesoSolicitado,
VW.PesoDosado,
VW.ErroKG,
VW.Percentual
From VW_OPR_Producao_Formulas_Resumido VW
Order By VW.CodFormula, VW.CodProd, VW.Desc_ProdutoPA

No evento onScriptIni:

$w_temp = "";
if (!empty([cond_datainicial])){
	$w_temp .= " where [cond_datainicial]";
}
	sc_select_where(add) = $w_temp;

No evento onValidate:

sc_reset_global ([cond_datainicial]);

if (!empty({datainicial}) and ({datainicial} != "0000-00-00 00:00:00")){
	if (empty({datainicial_hor}) and empty({datainicial_min}) and empty({datainicial_seg})){
		switch ({datainicial_cond}){
			case "bw":{
				if (empty({datainicial_input_2_hor}) and empty({datainicial_input_2_min}) and empty({datainicial_input_2_seg})){
					[cond_datainicial] = " convert(varchar(10), VW.DataInicioDosagem, 121) between convert(varchar(10), '{datainicial}', 121) and convert(varchar(10), '{datainicial_2}', 121)";
				} else{
					[cond_datainicial] = " convert(varchar(10), VW.DataInicioDosagem, 121) between convert(varchar(10), '{datainicial}', 121) and convert(varchar(19), '{datainicial_2}', 121)";
				}
				break;
			}
		}
	}
	else {
		switch ({datainicial_cond}){
			case "bw":{
				if (empty({datainicial_input_2_hor}) and empty({datainicial_input_2_min}) and empty({datainicial_input_2_seg})){
					[cond_datainicial] = " convert(varchar(19), VW.DataInicioDosagem, 121) between convert(varchar(19), '{datainicial}', 121) and convert(varchar(10), '{datainicial_2}', 121)";
				} else {
					[cond_datainicial] = " convert(varchar(19), VW.DataInicioDosagem, 121) between convert(varchar(19), '{datainicial}', 121) and convert(varchar(19), '{datainicial_2}', 121)";
				}
				break;
			}
		}
	}
}

Eis o erro do SC:

Atenção Erro ao acessar o banco de dados Invalid column name 'DataInicioDosagem'. select count(*) from VW_OPR_Producao_Formulas_Resumido VW where convert(varchar(19), VW.DataInicioDosagem, 121) between convert(varchar(19), '2015-06-12 00:00:00', 121) and convert(varchar(19), '2015-06-12 23:59:59', 121)

Se o campo DataInicioDosagem (filtro) estivesse listado na view o scriptcase não apresentaria este erro, porém, o agrupamento da tabela ficaria incorreto…