Atualizar valor de campo no formulário Mestre através de evento do form Detallhe

Pessoal, como faço para alterar o valor de um campo no formulário Mestre com base em um evento ocorrido no formulário Detalhe?

Exemplo:
cenário = formulário Mestre “cadastro de contatos” + formulário Detalhe “telefones dos contatos”
objetivo = atualizar campo “quantidade de telefones” que está no formulário Mestre
quando = ao adicionar, atualizar ou excluir um registro no formulário Detalhe

Obs: sem dar reload no formulário Mestre

É possível? Como?

acho que essa macro lhe ajudará: sc_master_value();

Obrigado, mas não consegui fazer funcionar em um formulário tipo grid editável (view) nos eventos onBeforeUpdate, onBeforeInsert e onBeforeDelete.

Criei dentro desses eventos o seguinte código:

setMaster_qtdVolume();

E o método setMaster_qtdVolume() possui o seguinte código:

[code]$produto_id = [produto_id];

// atualiza tabela de produtos com a nova quantidade de dimensões e pesos
$sql = "
UPDATE
produtos
SET
qtd_volumes = (
SELECT COUNT(produtos_dimensoes_pesos_id) Qtd FROM produtos_dimensoes_pesos WHERE produtos_id = $produto_id
)
WHERE
produtos_id = $produto_id
;
";
sc_exec_sql($sql);

// mostra a nova quantidade de itens de dimensões e pesos no formulário Mestre
$sql = “SELECT COUNT(produtos_dimensoes_pesos_id) Qtd FROM produtos_dimensoes_pesos WHERE produtos_id = $produto_id;”;
sc_lookup(rs, $sql);
if ({rs} === false) {
$vlr = -1;
} else {
$vlr = {rs}[0][0];
}

// atualiza campo com valor
sc_master_value(‘qtd_volumes’, $vlr);[/code]

O método funciona sim quando eu coloquei no evento onClick de um campo. Testei. Só nestes eventos que não funcionam. Não sei o motivo.

dá um var_dump($vlr) para verificar se ele está retornando algum valor.

$sql = "SELECT COUNT(produtos_dimensoes_pesos_id) Qtd FROM produtos_dimensoes_pesos WHERE produtos_id = $produto_id;";
por esse sql seu aqui está faltando um um as depois do count()... Ex Corrigido:

$sql = “SELECT COUNT(produtos_dimensoes_pesos_id) as Qtd FROM produtos_dimensoes_pesos WHERE produtos_id = $produto_id;”;

Almeida, o “AS” não é necessário na query. Como eu disse anteriormente, o método da maneira como eu escrevi funciona sim mas somente no evento onClick, dentro dos eventos como onBeforeUpdate, onBeforeInsert e onBeforeDelete não funciona.

Se você usar no onBefore certamente o count() vai acontecer antes de atualizar o registro, então o valor ficará igual. Tente usar nos eventos onAfter

Perdão, eu quis dizer nos eventos After, desculpe. As vezes me confundo.

Será que tem jeito de depurar?

Eu fiz vários testes aqui funcionou perfeitamente…

Atualiza usando javascript então, já que a macro não está dando certo para você.

Geralmente o id do campo do scriptcase tem o padrão de id_sc_field_nomedocampo.

Se o seu mestre detalhe for um feito normal pelo scriptcase o código ficará + ou - assim:

echo "<scirpt type='text/javascript'>parent.document.getElementById('id_sc_field_nomedocampo').value = 'valor desejado'></script>";

será basicamente isso…
se quiser passar o valor formatado terá que formata-lo antes de enviar para o navegador…

Realmente não funciona, tentei adicionar o sc_master_value sozinho no onAfterInsert, onAfterUpdate e onAfterDelete e nada mesmo. Vou tentar atualizar o scriptcase pra ver se resolve.

Fiz atualização do scriptcase. Nada.

O jeito é usar javascript mesmo. Valeu a dica.