Salvar o Mestre quando salva uma linha do Detalhe

Oi Pessoal,

Estou com um form mestre/detalhe (editable grid view) e gostaria de salvar o mestre quando eu salvo a linha do detalhe.

Estou usando o sc_master_value() para atualizar vários campos do mestre e preciso salvar “automaticamente”, não quero ficar na mão do usuário ter que clicar no botão do mestre para salvar.

Ja tentei o sc_redir, mas ele refresca a janela sem salvar e os valores voltam para zero.
Tentei o sc_commit_trans (""); Também não funcionou…

Alguma sugestão!

Obrigado!!!

Em Javascript executar a instrução parente.nm_atualiza(‘alterar’).

Grande Haroldo, como sempre: valeu!

Posso fazer assim no PHP? Com aspas ou sem? Qual a sintaxe correta?

sc_ajax_javascript(parente.nm_atualiza(‘alterar’));
ou
sc_ajax_javascript(‘parente.nm_atualiza’,Array(‘alterar’));

==> esse é o jeito que uso na própria janela: sc_ajax_javascript(‘nm_atualiza’,Array(‘alterar’));

Obrigado de novo!

Dependendo de onde for utilizar sim pode ser.

Vou usar dentro do Detalhe para salvar o Mestre.

Qual é o correto?

sc_ajax_javascript(parente.nm_atualiza(‘alterar’));
ou
sc_ajax_javascript(‘parente.nm_atualiza’,Array(‘alterar’));

A segunda opção é mais correta.

Beleza!!! Valeu! Vou usar…

Oi Haroldo,

Não funcionou :frowning: Eu tentei no onAfterInsert, onAfterDelete e onAfterUpdate… e nada.

Aonde posso achar alguma documentação sobre esse comando?

Alguma sugestão?

Eu utilizo criando um metodo PHP, atualiza_mestre(), e chamando nos eventos desejados (onAfterInsert, onAfterDelete ou onAfterUpdate…)

Exemplo do metodo PHP:
$_qtd = 0;
$_total = 0;

sc_lookup(result,“SELECT
SUM(quantidade),
SUM(quantidade*preco),
FROM movimento_estoque_itens
WHERE movimentoestoque_id = {movimentoestoque_id}”);

if(!empty({result[0][0]})) {

$_qtd = {result[0][0]};
$_total = {result[0][1]};

}

// GRAVA ATUALIZAÇÃO NO MESTRE
sc_exec_sql(“UPDATE movimento_estoque SET
quantidade = “.$_qtd.”,
valor = “.$_total.”
WHERE idmovimentoestoque = {movimentoestoque_id}”);

// ATUALIZA TELA DO MESTRE
sc_format_num($_total, ‘.’, ‘,’, 2, ‘S’, 1, ‘R$’);
sc_master_value(‘quantidade’,$_qtd);
sc_master_value(‘valor’,$_total);

@LUPA, acho que não é isso que ele deseja.
Ele quer ao salvar o detalhe salve o mestre (campos alterados no formulário mestre).

@jairoz, realmente essa macro sc_ajax_javascript não vai rolar nesses eventos.
Você deve criar um botão em linha no detalhe (se for grid view editável) acionar o salvamento do detalhe e depois o salvamento do mestre através de uma função javascript…

Documentação sobre comando? No WebHelp da ferramenta.

Oi Luiz Paulo,

Interessante sua solução, concerteza funciona. Eu estava pensando em trabalhar diretamente no banco de dados, caso não funcione o sc_ajax_javascript(‘parente.nm_atualiza’,Array(‘alterar’));

Meu medo é ter valores no Mestre diferentes do banco de dados, no caso do usuário alterar o mestre e depois salvar manualmente.

Mas vou usar a sua solução se não tiver outra alternativa.

Obrigado!

Tem razão Haroldo, no meu caso é uma ordem de compra onde ao inserir um detalhe, o valor, peso, etc. Ao salver o detalhe esses dados são somados e copiados para o mestre. Se o usuário fechar a janela e não salvar o Mestre, vai ficar tudo errado. Não confio nos usuários :slight_smile:

Mas se usar a solução do @LUPA os dados estarão salvo no banco de dados.

Haroldo, esse botão seria em substituição do “Salvar” no grid view editável? Tem como remover o botão do sistema? Editar, Salvar e Excluir.

@InfinitusWeb, é exatamente o que faz esse metódo utilizando a macro sc_exec_sql, na parte // GRAVA ATUALIZAÇÃO NO MESTRE. O metódo PHP é no detalhe e @jairoz terá que montar um UPDATE com os mesmos campos que esté usando sc_master_value.

Se forem apenas campos no mestre que são dependentes do registros filhos (detalhe), a sugestão do @LUPA vai bem, mas se vc deseja salvar campos que não dependem do detalhe, tipo uma observação no mestre, esse não será salvo a não ser que envie o comando para salvamento direto do detalhe.

É isso mesmo @InfinitusWeb!

Vou tentar primeiro a sua solução, se ficar complicado, vou para a do @LUPA.

Obrigado pela ajuda!