Autor Tópico: SOMAR CAMPOS NO FORMULARIO AO CARREGAR A APLICAÇÃO!  (Lida 5666 vezes)

edsonrodsilva

  • Novato
  • *
  • Mensagens: 47
    • ALPHANET INFORMATICA
SOMAR CAMPOS NO FORMULARIO AO CARREGAR A APLICAÇÃO!
« Online: Outubro 16, 2010, 04:51:11 pm »
Estou tentando somar campos em um formulario no momento em que a aplicação é carregada, mas a soma somente acontece no efento onRefresh!

Ja testei dos estes eventos...         
onApplicationInit     
onNavigate     
onScriptInit     
onLoad     
onRefresh

Vejam meu codigo!

//Calculando o salario total...

{total_salario} = '0';
$varSalarioA = '0';
$varSalarioFamilia = '0';
$varArredMes = '0';
$varOutrosPag = '0';

$varSalarioA={salarioa};
//trocando virgula por ponto e tirando o ponto
$varSalarioA=str_replace('.','',$varSalarioA);
$varSalarioA=str_replace(',','.',$varSalarioA);

$varSalarioFamilia={salariofamilia};
//trocando virgula por ponto e tirando o ponto
$varSalarioFamilia=str_replace('.','',$varSalarioFamilia);
$varSalarioFamilia=str_replace(',','.',$varSalarioFamilia);

$varArredMes={arredmes};
//trocando virgula por ponto e tirando o ponto
$varArredMes=str_replace('.','',$varArredMes);
$varArredMes=str_replace(',','.',$varArredMes);

$varOutrosPag={outrospag};
//trocando virgula por ponto e tirando o ponto
$varOutrosPag=str_replace('.','',$varOutrosPag);
$varOutrosPag=str_replace(',','.',$varOutrosPag);


{total_salario} = $varSalarioA + $varSalarioFamilia + $varArredMes + $varOutrosPag;


Alguém pode me dar uma força!!

Abraço!
« Última modificação: Outubro 16, 2010, 04:52:54 pm por edsonrodsilva »

Cleyton Euler

  • Expert
  • *****
  • Mensagens: 1149
    • Associação de Usuários Scriptcase
    • Email
Re: SOMAR CAMPOS NO FORMULARIO AO CARREGAR A APLICAÇÃO!
« Responder #1 Online: Outubro 16, 2010, 06:45:12 pm »
Se você usar o código no onLoad, supõe-se que os campos que vc atribui as variáveis de valor já tenham valor. Está usando um lookup para buscar os valores? É o usuário quem fornece os valores? Está usando formulário ou controle? Explica melhor seu cenário.

Utilize tipos de campos moeda ou decimal que o SC faz a validação.
Associação de Usuários Scriptcase
http://www.auscriptcase.com.br

Consultoria Scriptcase Versão 5
http://www.infinitusweb.com.br

edsonrodsilva

  • Novato
  • *
  • Mensagens: 47
    • ALPHANET INFORMATICA
Re: SOMAR CAMPOS NO FORMULARIO AO CARREGAR A APLICAÇÃO!
« Responder #2 Online: Outubro 17, 2010, 09:30:45 am »
Veja Bem!

Minha aplicação é de formulário!

O campo total_salario é um campo novo da aplicação.

Exemplo do que preciso...

abaixo os campos do meu formulario

salarioa
salariofamilia
arredmes
outrospag

Preciso somar e colocar o valor em um campo novo!

Criei um campo total_salario para colocar a soma de todos os campos...

//Este codigo é para tirar a virgula senão a soma fica errada!
$varSalarioA={salarioa};
//trocando virgula por ponto e tirando o ponto
$varSalarioA=str_replace('.','',$varSalarioA);
$varSalarioA=str_replace(',','.',$varSalarioA);


Valeu!

Diogo Toscano

  • Administrator
  • Expert
  • *****
  • Mensagens: 590
    • :: ScriptCase ::
    • Email
Re: SOMAR CAMPOS NO FORMULARIO AO CARREGAR A APLICAÇÃO!
« Responder #3 Online: Outubro 18, 2010, 08:59:26 am »
voce ta fazendo isso para dados ja existentes ou para dados novos?

Dados novos, onRecord ainda nao tem os valores nos campos, o campo novo fica vazio.
So vai ser preenchido no onBeforeInsert ou onBeforeUpdate ...

Não há necessidade de retirar a virgula ... virgula é apenas para exibição da interface(html) ... se esta com virgula apos o submit ... ou o separador do seu banco esta errado ... ou realmente voce configurou para usar virgula (estranho :-P) ...

Se o usuario vai digitando e em tempo de voo voce quer mostrar o total ... vc tem que fazer com evento ajax no onchage em cada campo ou no onchange via javscript mesmo ... ai sim, voce precisaria remover a virgula para fazer as operações.

Eduardo Alves

  • Avançado
  • ****
  • Mensagens: 262
    • SLords Informatica
    • Email
Re: SOMAR CAMPOS NO FORMULARIO AO CARREGAR A APLICAÇÃO!
« Responder #4 Online: Fevereiro 15, 2011, 10:10:09 am »
Estou com um problema parecido, Creio que seja simples mais não estou conseguindo concluir. Estou tentando alterar um campo e que esse o valor deste campo faça o calculo quando eu altero e passe o valor deste calculo para o BD.

Por exemplo, eu estou alterando o campo {hora_final_atendimento}, de uma OS que ja está gravada. Ao alterar esse campo, coloquei nos eventos ONBEFOREUPDATE e ONAFTERUPDATE, o seguinte lookup:

sc_lookup(HORAF, "SELECT SUBTIME(adm_os.hora_final_atendimento,adm_clientes.hora_final_atendimento_m) AS total_horas FROM adm_os INNER JOIN adm_clientes ON (adm_os.id_cliente = adm_clientes.ClienteId) WHERE adm_os.id = '{id}' AND adm_os.id_unidade = '2' AND adm_os.tipo_contrato_m = 'F' AND adm_clientes.qtde_contrato_m <> '(NULL)' ");

if (sc_changed({hora_final_atendimento})) { {hora_adic_atendimento} = ($HORAF[0][0]);

Mais o que acontece e que ele so faz o calculo se eu apertar o botão ATUALIZAR 2 vezes, ou seja, ele faz no UPDATE primeiro com o valor anteriormente gravado, DEPOIS ele pega o valor que gravou e refaz o calculo correto.

Onde eu deveria colocar esse evento (ja tentei tb o OnValidade e OnScriptInit) e tb não deu certo.

Se alguem tiver uma luz, eu agradeço !!!
Eduardo Alves
Gestor de TI e Segurança de Dados
Tel: (11) 8400-0224 (TIM) – Nextel: Id: 5 * 4522
email: analista@slords.com.br skype: analista.slords
www.slords.com.br

Cleyton Euler

  • Expert
  • *****
  • Mensagens: 1149
    • Associação de Usuários Scriptcase
    • Email
Re: SOMAR CAMPOS NO FORMULARIO AO CARREGAR A APLICAÇÃO!
« Responder #5 Online: Fevereiro 15, 2011, 10:24:49 am »
Tem erro ai na sua construção:

if (sc_changed({hora_final_atendimento})) { {hora_adic_atendimento} = {$HORAF[0][0]};

Vc usou parentesis.

Pela lógica, ele tem que atualizar o valor do campo antes de mandar para o BD, então deve usar o evento onBeforeUpdate. E eu não usaria a macro sc_changed.

Associação de Usuários Scriptcase
http://www.auscriptcase.com.br

Consultoria Scriptcase Versão 5
http://www.infinitusweb.com.br

Eduardo Alves

  • Avançado
  • ****
  • Mensagens: 262
    • SLords Informatica
    • Email
Re: SOMAR CAMPOS NO FORMULARIO AO CARREGAR A APLICAÇÃO!
« Responder #6 Online: Fevereiro 15, 2011, 10:52:53 am »
Bom dia Cleyton...tudo joia ???

Então cara, até tentei usar conforme voce me passou, mesmo assim, ele so esta calculando (com o valor correto) quando eu clico 2 vezes para atualizar (na primeira vez ele pega o valor anterior para calculo).

Coloquei assim no OnBeforeUpdate:

sc_lookup(HORAF, "SELECT SUBTIME(adm_os.hora_final_atendimento,adm_clientes.hora_final_atendimento_m) AS total_horas
FROM adm_os INNER JOIN adm_clientes ON (adm_os.id_cliente = adm_clientes.ClienteId) WHERE adm_os.id = '{id}' AND adm_os.id_unidade = '2' AND adm_os.tipo_contrato_m = 'F' AND adm_clientes.qtde_contrato_m <> '(NULL)' ");

{hora_adic_atendimento} = {HORAF[0][0]};

O que poderia ser isso ???

Tem erro ai na sua construção:

if (sc_changed({hora_final_atendimento})) { {hora_adic_atendimento} = {$HORAF[0][0]};

Vc usou parentesis.

Pela lógica, ele tem que atualizar o valor do campo antes de mandar para o BD, então deve usar o evento onBeforeUpdate. E eu não usaria a macro sc_changed.


Eduardo Alves
Gestor de TI e Segurança de Dados
Tel: (11) 8400-0224 (TIM) – Nextel: Id: 5 * 4522
email: analista@slords.com.br skype: analista.slords
www.slords.com.br

Cleyton Euler

  • Expert
  • *****
  • Mensagens: 1149
    • Associação de Usuários Scriptcase
    • Email
Re: SOMAR CAMPOS NO FORMULARIO AO CARREGAR A APLICAÇÃO!
« Responder #7 Online: Fevereiro 15, 2011, 10:57:09 am »
O lookup acho que vc tem que fazer no onLoad.

Ele faz somente no segundo clique, porque somente no segundo ele enxerga o novo valor.

PS.: Faz o lookup no onLoad e a atribuição do novo valor no onBeforeUpdate.
Associação de Usuários Scriptcase
http://www.auscriptcase.com.br

Consultoria Scriptcase Versão 5
http://www.infinitusweb.com.br

Eduardo Alves

  • Avançado
  • ****
  • Mensagens: 262
    • SLords Informatica
    • Email
Re: SOMAR CAMPOS NO FORMULARIO AO CARREGAR A APLICAÇÃO!
« Responder #8 Online: Fevereiro 15, 2011, 11:13:07 am »
tentei fazer isso...

Coloquei no onload:

sc_lookup(HORAF, "SELECT SUBTIME(adm_os.hora_final_atendimento,adm_clientes.hora_final_atendimento_m) AS total_horas
FROM adm_os INNER JOIN adm_clientes ON (adm_os.id_cliente = adm_clientes.ClienteId) WHERE adm_os.id = '{id}' AND adm_os.id_unidade = '2' AND adm_os.tipo_contrato_m = 'F' AND adm_clientes.qtde_contrato_m <> '(NULL)' ");

Coloquei no OnBeforeUpdate:

{hora_adic_atendimento} = {HORAF[0][0]};


Agora ele nem faz a atualização na 2 clicada: com o modo debug ligado ele aparece uma linha de erro:

ERRO   
 
Undefined index: line
Script: C:\Arquivos de programas\NetMake\v5\wwwroot\scriptcase\prod\third\adodb\adodb-lib.inc.php (1123)
Undefined index: file
Undefined property: cad_os_ser_novo_apl::$horaf
Script: C:\Arquivos de programas\NetMake\v5\wwwroot\scriptcase\app\ERP_CENTRAXI\cad_os_ser_novo\cad_os_ser_novo_apl.php (11132)


O lookup acho que vc tem que fazer no onLoad.

Ele faz somente no segundo clique, porque somente no segundo ele enxerga o novo valor.

PS.: Faz o lookup no onLoad e a atribuição do novo valor no onBeforeUpdate.
Eduardo Alves
Gestor de TI e Segurança de Dados
Tel: (11) 8400-0224 (TIM) – Nextel: Id: 5 * 4522
email: analista@slords.com.br skype: analista.slords
www.slords.com.br

Cleyton Euler

  • Expert
  • *****
  • Mensagens: 1149
    • Associação de Usuários Scriptcase
    • Email
Re: SOMAR CAMPOS NO FORMULARIO AO CARREGAR A APLICAÇÃO!
« Responder #9 Online: Fevereiro 15, 2011, 11:46:48 am »
No evento onBeforeUpdate ele não entende {HORAF[0][0]}

Vc tem que jogar numa variável global no evento onLoad
Associação de Usuários Scriptcase
http://www.auscriptcase.com.br

Consultoria Scriptcase Versão 5
http://www.infinitusweb.com.br

Eduardo Alves

  • Avançado
  • ****
  • Mensagens: 262
    • SLords Informatica
    • Email
Re: SOMAR CAMPOS NO FORMULARIO AO CARREGAR A APLICAÇÃO!
« Responder #10 Online: Fevereiro 15, 2011, 12:02:45 pm »
Tentei fazer isso, mais ainda so está gravando na segunda clicada do ATUALIZAR.

Ficou assim agora:

ONLOAD:

sc_lookup(HORAF, "SELECT SUBTIME(adm_os.hora_final_atendimento,adm_clientes.hora_final_atendimento_m) AS total_horas
FROM adm_os INNER JOIN adm_clientes ON (adm_os.id_cliente = adm_clientes.ClienteId) WHERE adm_os.id = '{id}' AND adm_os.id_unidade = '2' AND adm_os.tipo_contrato_m = 'F' AND adm_clientes.qtde_contrato_m <> '(NULL)' ");


$TOTAL_HORAS = {HORAF[0][0]};
 sc_set_global($TOTAL_HORAS);


ONBEFOREUPDATE:

{hora_adic_atendimento} = [TOTAL_HORAS] ;

Bixo, não sei mais o que faço...:(

No evento onBeforeUpdate ele não entende {HORAF[0][0]}

Vc tem que jogar numa variável global no evento onLoad
Eduardo Alves
Gestor de TI e Segurança de Dados
Tel: (11) 8400-0224 (TIM) – Nextel: Id: 5 * 4522
email: analista@slords.com.br skype: analista.slords
www.slords.com.br

Cleyton Euler

  • Expert
  • *****
  • Mensagens: 1149
    • Associação de Usuários Scriptcase
    • Email
Re: SOMAR CAMPOS NO FORMULARIO AO CARREGAR A APLICAÇÃO!
« Responder #11 Online: Fevereiro 15, 2011, 12:08:12 pm »
Se quiser podemos fazer pelo compartilhamento de tela do Skype.

Meu user: cleyton_euler
Associação de Usuários Scriptcase
http://www.auscriptcase.com.br

Consultoria Scriptcase Versão 5
http://www.infinitusweb.com.br

Eduardo Alves

  • Avançado
  • ****
  • Mensagens: 262
    • SLords Informatica
    • Email
Re: SOMAR CAMPOS NO FORMULARIO AO CARREGAR A APLICAÇÃO!
« Responder #12 Online: Fevereiro 15, 2011, 12:12:41 pm »
blz fera..te add ... valeu...


Se quiser podemos fazer pelo compartilhamento de tela do Skype.

Meu user: cleyton_euler
Eduardo Alves
Gestor de TI e Segurança de Dados
Tel: (11) 8400-0224 (TIM) – Nextel: Id: 5 * 4522
email: analista@slords.com.br skype: analista.slords
www.slords.com.br

Eduardo Alves

  • Avançado
  • ****
  • Mensagens: 262
    • SLords Informatica
    • Email
Re: SOMAR CAMPOS NO FORMULARIO AO CARREGAR A APLICAÇÃO!
« Responder #13 Online: Fevereiro 15, 2011, 04:35:01 pm »
Com a atenção 100% do Cleyton, conseguimos resolver o impasse e misterio :)

Chegamos a uma conclusão que passou no teste, não usar variavel global e sim, fazer um update na tabela após a inclusão de um valor novo no campo.

sc_lookup(HORAF, "SELECT SUBTIME(os.hora_final_atendimento,adm_clientes.hora_final_atendimento_m) AS total_horas
FROM os INNER JOIN adm_clientes ON (os.id_cliente = adm_clientes.ClienteId) WHERE os.id = '{id}' AND os.id_unidade = '2' AND os.tipo_contrato_m = 'F' AND adm_clientes.qtde_contrato_m <> '(NULL)' ");

$TOTAL_HORAS = {HORAF[0][0]};

sc_exec_sql("Update adm_os set hora_adic_atendimento ='$TOTAL_HORAS' where id = '{id}' ");

Deu certinho, 100% dos CREDITOS AO CLEYTON pela ajuda e "batidas de cabeça"... RESOLVIDO !!! valeu brother...
Eduardo Alves
Gestor de TI e Segurança de Dados
Tel: (11) 8400-0224 (TIM) – Nextel: Id: 5 * 4522
email: analista@slords.com.br skype: analista.slords
www.slords.com.br

Eduardo Alves

  • Avançado
  • ****
  • Mensagens: 262
    • SLords Informatica
    • Email
Re: SOMAR CAMPOS NO FORMULARIO AO CARREGAR A APLICAÇÃO!
« Responder #14 Online: Fevereiro 16, 2011, 12:23:28 pm »
somente mais uma coisa pra fechar...me deparei com um problema, ao tentar gravar alguns id's no formulario, obtenho um erro:   
 
Undefined offset: 0


sc_lookup(HORAF, "SELECT SUBTIME(adm_os.hora_final_atendimento,adm_clientes.hora_final_atendimento_m) AS total_horas
FROM adm_os INNER JOIN adm_clientes ON (adm_os.id_cliente = adm_clientes.ClienteId) WHERE adm_os.id = '{id}' AND (adm_os.id_unidade = '2') AND (adm_os.tipo_contrato_m = 'F') AND (adm_clientes.qtde_contrato_m > '0') ");

$TOTAL_HORAS = {HORAF[0][0]};

if ($TOTAL_HORAS < "00:00:00")
sc_exec_sql("Update adm_os set hora_adic_atendimento ='$TOTAL_HORAS' where id = '{id}' ");
}
else
{
sc_exec_sql("Update adm_os set hora_adic_atendimento = '00:00:00' where id = '{id}' ");
}

Creio, pela logica que algumas procuras do lookup voltam VAZIAS (que é normal se não baterem com a clausula WHERE).
Essas que voltam vazias estão dando esse Undefined offset: 0

Como faço para explicar ao BD que se voltarem vazias, gravar no BD o valor 00:00:00 tb ???

Um grande abraço a todos e aguardo uma luz assim que possivel !!!
Eduardo Alves
Gestor de TI e Segurança de Dados
Tel: (11) 8400-0224 (TIM) – Nextel: Id: 5 * 4522
email: analista@slords.com.br skype: analista.slords
www.slords.com.br