calcular valor total (RESOLVIDO)

(gleiceazevedo) #1

olá, tenho um formulario Pedido com unico registro e um formulario ItemPedido com grid editavel. Fiz um mestre-detalhe com eles, no fomulario ItemPedido calculei o valor total dessa maneira:
{valor}= ({itemvalor} * {qtde}); com o método php

gostaria de saber como faço para calcular o valor total do pedido.
Desde já agredeço!
Att,
Gleice

(leandroauler) #2

Gleice,

De uma olhada nesse exemplo e vê se te ajuda:

http://scriptcase.com.br/site/samples/tutoriais/form/form38.php

Leandro

(Haroldo) #3

Não se se seu problema é gravar na tabela mestre ou exibir no formulário mestre.
se for para gravar na tabela mestre, eu gosto de usar gatilhos diretamente no banco de dados:
http://www.netmake.com.br/forum/index.php?topic=3968.msg15432;topicseen#msg15432

ou no evento onafterinsert do formulário detalhe fazer um update em pedidos baseado em um sum em todos os itens.

Para exibir o valor no formulário tem a macro sc_master_value :

sc_master_value(‘Objeto’, Valor)
Esta macro tem o poder de atualizar qualquer objeto de uma aplicação Mestre, em uma aplicação Detalhe.

Parâmetro
Descrição
Objeto Nome do objeto a ser atualizado na aplicação Mestre. Ao informar o nome de um campo, não é necessário utilizar as {}.
Valor Valor que o objeto especificado receberá. O valor pode ser um campo ou variável.

Ex. 1:
sc_lookup(result,“SELECT SUM(Total) FROM adm_pedido_itens WHERE PedidoID = ‘{PedidoID}’”);
[valor] = {result}[0][0];
sc_master_value(‘ValorPedido’, [valor]);

Escopo da Macro

Formulario Formulario Controle
onAfterDelete
onAfterDeleteAll
onAfterInsert
onAfterInsertAll
onAfterUpdate
onAfterUpdateAll
onApplicationInit
onBeforeDelete
onBeforeInsert
onBeforeUpdate
onLoadAll
onNavigate
onRecord
onRefresh
onScriptInit
onValidate
onValidateFailure onLoadAll
onRefresh
onScriptInit

(gleiceazevedo) #4

estou tentando utilizar essa macro sc_master_value, conseguir mostrar um valor do formulario detalhe no formulario mestre. o meu problema é que não estou conseguindo somar todos os itens daquele pedido, ele está apresentando o valor só do primeiro item.

(Haroldo) #5

faça um sc_lookup com um select sum(quantidade*valoritem) from itens where pedidoid=id_do_pedido

(Carlos Simão) #6

use a função SUM(campo) na consulta sql

Ex. 1:
sc_lookup(result,“SELECT SUM(Total) FROM adm_pedido_itens WHERE PedidoID = ‘{PedidoID}’”);
[valor] = {result}[0][0];
sc_master_value(‘ValorPedido’, [valor]);

(gleiceazevedo) #7

utilizei exatamente esse codigo, mas como saber se está somando? não consigo apresentar esse valor em nenhum campo.
o que estou fazendo de errado?

sc_lookup(result,“SELECT SUM(itemvalor) FROM itempedido WHERE cod_produto = ‘{cod_produto}’”);
[valor] = {result}[0][0];
sc_master_value(‘teste’, [valor]);

(Arquimedes) #8

tenta assim

//-------------------------------
sc_lookup(dataset,“SELECT SUM(itemvalor) FROM itempedido WHERE cod_produto = ‘{cod_produto}’”);
$total = {dataset}[0][0];
sc_master_value(‘teste’, $total);
sc_exec_sql(‘UPDATE itempedido SET teste = $total WHERE cod_produto= {cod_produto}’);
//------------------------------

Atenciosamente Arquimedes
www.scriptcasebrasil.com.br

(gleiceazevedo) #9

Obrigada pela ajuda de todos!!!

Consegui resolver com o método php:
sc_lookup(ds,“SELECT SUM(valortotal) FROM itempedido WHERE cod_pedido = {cod_pedido}”);
if (empty({ds}[0][0])) {
$vlc1 = 0.0;
} else {
$vlc1 = {ds}[0][0];
}
sc_exec_sql(‘UPDATE pedido SET valorpedido = $vlc1 WHERE cod_pedido = {cod_pedido}’);
sc_master_value(‘valorpedido’ , $vlc1);

(Arquimedes) #10

De nada estamos aqui para ajudar

Atenciosamente Arquimedes