Autor Tópico: Atualizar valor de campo no formulário Mestre através de evento do form Detallhe  (Lida 3053 vezes)

Guariba

  • Intermediário
  • ***
  • Mensagens: 112
    • Email
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?

Almeida

  • Expert
  • *****
  • Mensagens: 610
    • Email
acho que essa macro lhe ajudará: sc_master_value();

Att.
Eliezer Almeida
eliezeralmeidago@hotmail.com
www.infotecsoft.com.br - Modernidade e Eficiência

Guariba

  • Intermediário
  • ***
  • Mensagens: 112
    • Email
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:
Código: [Selecionar]
setMaster_qtdVolume();
E o método setMaster_qtdVolume() possui o seguinte código:
Código: [Selecionar]
$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);

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.

paulomarcelo

  • Expert
  • *****
  • Mensagens: 665
    • Email
dá um var_dump($vlr) para verificar se ele está retornando algum valor.

Almeida

  • Expert
  • *****
  • Mensagens: 610
    • Email
Citar
$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;";

Att.
Eliezer Almeida
eliezeralmeidago@hotmail.com
www.infotecsoft.com.br - Modernidade e Eficiência

Guariba

  • Intermediário
  • ***
  • Mensagens: 112
    • Email
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.

Almeida

  • Expert
  • *****
  • Mensagens: 610
    • Email
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

Att.
Eliezer Almeida
eliezeralmeidago@hotmail.com
www.infotecsoft.com.br - Modernidade e Eficiência

Guariba

  • Intermediário
  • ***
  • Mensagens: 112
    • Email
Perdão, eu quis dizer nos eventos After, desculpe. As vezes me confundo.

Será que tem jeito de depurar?

Almeida

  • Expert
  • *****
  • Mensagens: 610
    • Email
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:

Código: [Selecionar]
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...

Att.
Eliezer Almeida
eliezeralmeidago@hotmail.com
www.infotecsoft.com.br - Modernidade e Eficiência

Guariba

  • Intermediário
  • ***
  • Mensagens: 112
    • Email
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.

Guariba

  • Intermediário
  • ***
  • Mensagens: 112
    • Email
Re:Atualizar valor de campo no formulário Mestre através de evento do form Detallhe
« Responder #10 Online: Maio 18, 2013, 10:02:44 am »
Fiz atualização do scriptcase. Nada.

O jeito é usar javascript mesmo. Valeu a dica.