[RESOLVIDO] validação de amostra

prezados tenho a seguinte planilha que desejo montar em um sisteminha
quanto as tabelas 1 para n ja montei no entanto não sei como fazer calculo dentro da propria amostra e mostra no formulario detalhe
alguma dica?

FORM_MESTRE num_unidade = 251321 ub = 1

FORM_DETALHE
A B C
1 ritmo % tempo (seg) tempo ajustado (s)
2 90% 553 =tempo * ritmo / ub (campo form mestre)
3 100% 536 536,00
4 90% 618 556,20
5 100% 525 525,00

calculo = (((1,96*(MÁXIMO(C2:C5)-MÍNIMO(C2:C5)))/(0,053,078(MÉDIA(C2:C5)))^2)

após algumas tentativas montei o sql assim

SELECT power((((max([tempo ajustado]))-(min([tempo ajustado]))) *1.96)/((avg([tempo ajustado]))0.053.078),2) as calc4
FROM [xx_temporario].[dbo].[Table_2]

o problema agora é como fazer isso após a inclusão da amostra e retornar para uma campo no formulário,
alguma dica?

pesquisando em outra sistema que montei fiz algo parecido

criei um campo e na descrição ajuda
colei o codigo
Simular Impacto

no caso tenho que montar um evento ajax on Click, duvida posso colocar o sql que montei dentro do ajar e executar?

Como o SC não aceita colocar cabeçalho nem rodapé nos Detalhes (Filho) do Mestre.

Crie um Campo Novo ‘Virtual’ no Pai do Detalhe com o nome do resultado que você deseja ‘CalculoAmostras’,
se é decimal, quantas casas, etc; marque ele como ‘label’ depois que criar.

Ai no OnLoad do ‘Pai’ coloque a formula desejada para preencher o mesmo.
usando a macro sc_lookup para gerar e pegar o valor para por no campo:
https://www.scriptcase.com.br/docs/pt_br/v9/manual/14-macros/01-visao-geral/#sc_lookup

No Filho Crie em Programação > Metodo > PHP Novo: GerarCalculo

use a macro: sc_master_value para preencher o campo no pai.
https://www.scriptcase.com.br/docs/pt_br/v9/manual/14-macros/01-visao-geral/#sc_master_value

Coloque no Filho no OnAfterInsert e OnAfaterUpdate:
GerarCalculo();

*** Pode-se criar também um campo na tabela do pai, para guardar este valor já calculado, caso for usar em outros locais, etc, ele já estará lá calculado.

valeu Jairton, vou ver e retorno!

Jairton o passo a passo de como fiz:

Campo criado no formulário PAI com nome de CalculoAmostras Decimal
“marque ele como ‘label’ depois que criar” não entendi isso

OnLoad do ‘Pai’
sc_lookup(dataset,“SELECT power((((max(amostra_tempo_ajustado))-(min(amostra_tempo_ajustado))) *1.96)/((avg(amostra_tempo_ajustado))0.053.078),2) from amostra”);
$calcamostra = {dataset[0][0]};

No Filho Crie em Programação > Metodo > PHP Novo: GerarCalculo
Método PHP GerarCalculo
sc_master_valeu(‘CalculoAmostras’,$calcamostra);
onde ‘CalculoAmostras’ = campo virtual do PAI
$calcamostra = resultado do lookup no onLoad do PAI

pode avaliar se é isso mesmo?
obrigado pela ajuda

É isso mesmo,
No GerarCalculo do filho lá tem que pegar o resultado também:
sc_lookup(dataset,“SELECT power((((max(amostra_tempo_ajustado))-(min(amostra_tempo_ajustado))) *1.96)/((avg(amostra_tempo_ajustado))0.053.078),2) from amostra”);
$calcamostra = {dataset[0][0]};
sc_master_valeu(‘CalculoAmostras’,$calcamostra);

Ai depois no Filho em OnAfterInsert e OnAftrUpdate:
GerarCalculo();

“marque ele como ‘label’ depois que criar” não entendi isso
Isso é como é um campo só para ‘calculo’ para bloquear ele ‘tipo’ label para o usuário
não poder digitar nada nele.

cara funcionou bacana, no entanto quando salvo pelo PAI o numero de 9,334761 fica como 90.334.761 …
poderia explicar pq acontece isso?

no entanto sei que o campo é virtual

se quiser atualizar o valor num campo dentro do banco onde eu colocaria o sql de update?

estaria correto colocar assim no OnLoad do PAI além dele no metodo PHP

sc_lookup(dataset,“SELECT power((((max(amostra_tempo_ajustado))-(min(amostra_tempo_ajustado))) *1.96)/((avg(amostra_tempo_ajustado))0.053.078),2) from amostra”);
$calcamostra = {dataset[0][0]};

$up_cal = “UPDATE informacoes_basicas SET calculo_amostra = $calcamostra”;
sc_exec_sql($up_cal);
sc_commit_trans();

rodei do jeito postado foi incluido o dado no banco no entanto no formulário não apareceu

Sim exato esse tem que por no Pai.

Agora no Filho Ficaria assim dentro de GerarCalculo:

sc_lookup(dataset,“SELECT power((((max(amostra_tempo_ajustado))-(min(amostra_tempo_ajustado))) *1.96)/((avg(amostra_tempo_ajustado))0.053.078),2) from amostra”);
$calcamostra = {dataset[0][0]};

$up_cal = “UPDATE informacoes_basicas SET calculo_amostra = $calcamostra”;
sc_exec_sql($up_cal);
sc_commit_trans();

sc_master_value(‘CalculoAmostras’,sc_format_num($calcamostra, ‘.’, ‘,’, 2, ‘S’, ‘1’, ‘’));

valeu Jairton! vou testar e retorno
bom fds!

funcionou perfeitamente, gostei da implementação da segunda macro
uma ultima pergunta posso dentro do Gerar Calculo inserir outros calculos com o mesmo fim?

Sim, normal, agora se você já esta gravando a variável no banco de dados no filho com sc_exec,
pode tirar agora a Rotina do OnLoad do Pai, já que o valor já vai vir quando você lançar os itens no filho.

ok, funcionou bacana
dando continuidade na proposta de validação
alguma ideia de como inserir no registro de cada amostra o calculo
do desvio padrão e média "STDEV(amostra_tempo_ajustado)*2)+ (avg(amostra_tempo_ajustado)) "
mas por registro da amostra ou seja em cada registro do detalhe?

criei um método php com os calculos no entanto ele fez para todas as amostras
pelo que observei ele levou em consideração todos os registros

campo calculado seria uma solução? ou coloco o update no evento onvalidatesucess ?
embaralhou tudo

Cria um campo na tabela do banco de dados nos detalhes ‘DesvioPadrao’ decimal, quantas casas precisa, ai no OnAfterInsert e no AfterUpdate, do
detalhe filho, você atualiza o mesmo com a macro sc_exec(

A Rotina: GerarCalculo deve ser colocada também no OnAfterDelete do filho.

desculpe a demora em responder, obrigado pela dica
em breve retorno

opa! funcionou tudo perfeitamente obrigado
fiquei como uma duvida apenas: funciona perfeitamente em um unico registro
qual seria a logica para varios registros? onde a amostra seria validada em função do registro individual
obrigado pela ajuda!

Funciona em vários ‘registros’ linhas ele pega via sua SQL, todas ‘as amostras’ digitadas no detalhe.

SELECT power((((max([tempo ajustado]))-(min([tempo ajustado]))) *1.96)/((avg([tempo ajustado]))0.053.078),2) as calc4
FROM [xx_temporario].[dbo].[Table_2]