AM
Meu Navegador Paralisa quando Efetua Cálculos nesse Script.
Já fiz vários aplicativos com cálculos: Notas de Entrega, Recibo de Salário, Termo de Rescisão de Contrato Etc.
Fiquei uns 6 meses sem programar, uma contabilidade me pediu para eu desenvolver um simples Recibo de Férias, andei atualizando o Java, não sei se o problema é este, ainda não testei em outro computador. Mas os cálculos funcionam normalmente em outros aplicativos, menos no que eu estou tentando fazer agora. O Problema é somente no Formulário de Cadastro. Impressão e consulta eu já sei.
Vou Postar o Script do Model e depois o Form.
- Veja a Foro em anexo, eu abro meu Form, eu consigo digitar no campo nome, passo para o campo salario e digito, do campo salario para o próximo, quando eu teclo Tab, o Navegador para de responder. Qual é o Problema Gente? Aff! eu já tenho um mês nesse inferno tentando e tentando.
MODEL: Ferias.class.php
====================
Fiquei uns 6 meses sem programar, uma contabilidade me pediu para eu desenvolver um simples Recibo de Férias, andei atualizando o Java, não sei se o problema é este, ainda não testei em outro computador. Mas os cálculos funcionam normalmente em outros aplicativos, menos no que eu estou tentando fazer agora. O Problema é somente no Formulário de Cadastro. Impressão e consulta eu já sei.
Vou Postar o Script do Model e depois o Form.
- Veja a Foro em anexo, eu abro meu Form, eu consigo digitar no campo nome, passo para o campo salario e digito, do campo salario para o próximo, quando eu teclo Tab, o Navegador para de responder. Qual é o Problema Gente? Aff! eu já tenho um mês nesse inferno tentando e tentando.
MODEL: Ferias.class.php
====================
- <?php
- class Ferias extends TRecord
- {
- const TABLENAME = 'Ferias';
- const PRIMARYKEY= 'id';
- const IDPOLICY = 'max';
- const CACHECONTROL = 'TAPCache';
- public function __construct($id = NULL)
- {
- parent::__construct($id);
- parent::addAttribute('nome');
- parent::addAttribute('salario');
- parent::addAttribute('pcontass');
- parent::addAttribute('vcontass');
- parent::addAttribute('pferias');
- parent::addAttribute('hextrau');
- parent::addAttribute('hextraf');
- parent::addAttribute('vextra');
- parent::addAttribute('textra');
- }
- }
- ===============================
- FORMULÁRIO DE CADASTRO: Ferias.class.php
- <?php
- class FeriasForm extends TPage
- {
- private $form;
- public function __construct()
- {
- parent::__construct();
- // Cria o Form e configura
- $this->form = new TQuickForm('form_ferias');
- $this->form->setFormTitle('Tela de Cadastro');
- $this->form->class = 'tform';
- $this->form->style = 'width: 930px';
- // Definição dos campos do form
- $id = new TEntry('id');
- $nome = new TEntry('nome');
- $salario = new TEntry('salario');
- $pcontass = new TEntry('pcontass');
- $vcontass = new TEntry('vcontass');
- $pferias = new TEntry('pferias');
- $hextrau = new TEntry('hextrau');
- $hextraf = new TEntry('hextraf');
- $vextra = new TEntry('vextra');
- $textra = new TEntry('textra');
- // Formatação para Valores Monetário
- $salario->setNumericMask(2, ',', '.');
- $pcontass->setNumericMask(2, ',', '.');
- $vcontass->setNumericMask(2, ',', '.');
- $pferias->setNumericMask(2, ',', '.');
- $vextra->setNumericMask(2, ',', '.');
- $textra->setNumericMask(2, '.', ',');
- // Atualiza os Valores Monetário e INT
- $salario->setExitAction(new TAction(array($this, 'onUpdateTotal')));
- $pcontass->setExitAction(new TAction(array($this, 'onUpdateTotal')));
- $vcontass->setExitAction(new TAction(array($this, 'onUpdateTotal')));
- $pferias->setExitAction(new TAction(array($this, 'onUpdateTotal')));
- $vextra->setExitAction(new TAction(array($this, 'onUpdateTotal')));
- $textra->setExitAction(new TAction(array($this, 'onUpdateTotal')));
- $hextrau->setExitAction(new TAction(array($this, 'onUpdateTotal')));
- $hextraf->setExitAction(new TAction(array($this, 'onUpdateTotal')));
- // Campos Não Editáveis
- $id->setEditable(FALSE);
- $vcontass->setEditable(FALSE);
- $vextra->setEditable(FALSE);
- $textra->setEditable(FALSE);
- // Tamanho dos Campos no formulário
- $id->setSize(50);
- $nome->setSize(525);
- $salario->setSize(85);
- $pcontass->setSize(85);
- $vcontass->setSize(85);
- $pferias->setSize(85);
- $hextrau->setSize(85);
- $hextraf->setSize(85);
- $vextra->setSize(85);
- $textra->setSize(85);
- // Número de Caracteres permitidos dentro dos campos
- $id->setMaxLength(7);
- $nome->setMaxLength(45);
- // Alinhamento de dados numericos (int, e real)
- $id->style="background-color: #ccccff; text-align: right";
- $salario->style="text-align: right"; // No Banco de Dados está como REAL assim como os demais abaixo.
- $pcontass->style="text-align: right";
- $vcontass->style="text-align: right";
- $pferias->style="text-align: right";
- $vextra->style="text-align: right";
- $textra->style="text-align: right";
- $hextrau->style="text-align: right"; // No Banco de Dados está INT
- $hextraf->style="text-align: right"; // No Banco de Dados está INT
- // ========================================================================================
- // Adiciona uma linha cinza com duas coluna e um título
- $row = $this->form->addRow();
- $row->class = 'tformsection';
- $row->addCell( new TLabel('(( F É R I A S ))'))->colspan = 2;
- // Adiciona uma linha em branco no form
- $row = $this->form->addRow();
- $row->addCell( new TLabel(''));
- $this->form->addQuickFields(new TLabel('ID:'), array($id,
- $label_nome = new TLabel('Nome:'), $nome));
- // Adiciona uma linha em branco no form
- $row = $this->form->addRow();
- $row->addCell( new TLabel(''));
- $this->form->addQuickFields(new TLabel('Salário:'), array($salario,
- $label_pcontass = new TLabel('Percent. da Cont. Assist.:'), $pcontass,
- $label_vcontass = new TLabel('Valor da Cont. Assist.:'), $vcontass,
- $label_pferias = new TLabel('Percentual de Férias:'), $pferias));
- $this->form->addQuickFields(new TLabel('Horas Extras:'), array($hextrau,
- $label_hextraf = new TLabel('Horas Extras em Domingos e Feriados:'), $hextraf,
- $label_vextra = new TLabel('Valor uma Hora Extra:'), $vextra,
- $label_textra = new TLabel('Total Horas Extras:'), $textra));
- // Adiciona uma linha em branco no form
- $row = $this->form->addRow();
- $row->addCell( new TLabel(''));
- // ========================================================================================
- // Botões
- $save = new TAction( array($this, 'onSave'));
- $this->form->addQuickAction('Salvar', $save, 'ico_save.png');
- $novo = new TAction( array($this, 'onNovo'));
- $this->form->addQuickAction('Novo', $novo, 'ico_new.png');
- $ajuda = new TAction( array('Ajuda', 'onShow'));
- $this->form->addQuickAction('Ajuda', $ajuda, 'ico_question.png');
- parent::add($this->form);
- }
- function onShow() {
- }
- function show()
- {
- parent::show();
- }
- public function onNovo()
- {
- try
- {
- TTransaction::open('dbferias');
- $object = $this->form->getData('Ferias');
- $object->store();
- TTransaction::close();
- }
- catch (Exception $e)
- {
- new TMessage('error', $e->getMessage());
- TTransaction::rollback();
- }
- }
- public function onSave()
- {
- try
- {
- TTransaction::open('dbferias');
- $object = $this->form->getData('Ferias'); // Obtem os dados do formulário.
- $object->store(); // Grava os Dados
- $this->form->setData($object);
- TTransaction::close();
- }
- catch (Exception $e)
- {
- new TMessage('error', '<b>Error</b> ' . $e->getMessage());
- TTransaction::rollback();
- }
- }
- public static function onExitProduct($param)
- {
- $id = $param['id'];
- try
- {
- TTransaction::open('dbferias');
- $product = new Product($product_id);
- $obj = new StdClass;
- $obj->salario = 0;
- $obj->pcontass = 0;
- $obj->vcontass = 0;
- $obj->pferias = 0;
- $obj->hextrau = 0;
- $obj->hextraf = 0;
- $obj->vextra = 0;
- $obj->textra = 0;
- $obj->salario = number_format($product->salario, 2, '.', ',');
- $obj->pcontass = number_format($product->pcontass, 2, '.', ',');
- $obj->vcontass = number_format($product->vcontass, 2, '.', ',');
- $obj->pferias = number_format($product->pferias, 2, '.', ',');
- $obj->vextra = number_format($product->vextra, 2, '.', ',');
- $obj->textra = number_format($product->textra, 2, '.', ',');
- // Formatação para campos INT
- $obj->hextrau = ($product->hextrau);
- $obj->hextraf = ($product->hextraf);
- TTransaction::close();
- TForm::sendData('form_ferias', $obj);
- }
- catch (Exception $e)
- {
- // Não faz nada
- }
- }
- static function onUpdateTotal($param)
- {
- $salario = str_replace(',','.', str_replace('.','', $param['salario']));
- $pcontass = str_replace(',','.', str_replace('.','', $param['pcontass']));
- $vcontass = str_replace(',','.', str_replace('.','', $param['vcontass']));
- $pferias = str_replace(',','.', str_replace('.','', $param['pferias']));
- $vextra = str_replace(',','.', str_replace('.','', $param['vextra']));
- $textra = str_replace(',','.', str_replace('.','', $param['textra']));
- // Cálculos
- $vcontass = (($salario * $pcontass) / 100);
- $vextra = ($salario / 220);
- $textra = ((($hextrau * $vextra) + (($hextrau * $vextra) / 100)) + (($hextraf * $vextra) + (($hextraf * $vextra)/100)));
- $obj = new StdClass;
- // Formatação somente para valores que contêm cálculos
- $obj->vcontass = number_format($vcontass, 2, ',', '.');
- $obj->vextra = number_format($vextra, 2, ',', '.');
- $obj->textra = number_format($textra, 2, ',', '.');
- TForm::sendData('form_ferias', $obj);
- }
- }
- ?>
Eu descobrir que o problema está no cálculo lá em baixo. Lá no final eu coloquei assim e funcionou.
Eu apenas dei espaço em branco nesta linha: + (($hextraf * $vextra) / 100)));
Acho que mexi em algo mais , mas não me lembro.
static function onUpdateTotal($param)
{
$salario = str_replace(',','.', str_replace('.','', $param['salario']));
$pcontass = str_replace(',','.', str_replace('.','', $param['pcontass']));
$vcontass = str_replace(',','.', str_replace('.','', $param['vcontass']));
$pferias = str_replace(',','.', str_replace('.','', $param['pferias']));
$vextra = str_replace(',','.', str_replace('.','', $param['vextra']));
$textra = str_replace(',','.', str_replace('.','', $param['textra']));
// As duas Linhas abaixo INT também deve ser atualizada.
$hextrau = str_replace(',','.', str_replace('.','', $param['hextrau']));
$hextraf = str_replace(',','.', str_replace('.','', $param['hextraf']));
// Cálculos
$vcontass = (($salario * $pcontass) / 100);
$vextra = ($salario / 220);
$textra = ((($hextrau * $vextra) + (($hextrau * $vextra) / 100)) + (($hextraf * $vextra) + (($hextraf * $vextra) / 100)));
$obj = new StdClass;
// Formatação somente para valores que contêm cálculos
$obj->vcontass = number_format($vcontass, 2, ',', '.');
$obj->vextra = number_format($vextra, 2, ',', '.');
$obj->textra = number_format($textra, 2, ',', '.');
TForm::sendData('form_ferias', $obj);
}
}
?>
EU CONTINUO COM O MESMO PROBLEMA. AGORA SÓ ESTÁ FUNCIONANDO COM APENAS 3 CÁLCULOS,
LIBERANDO ESTES TRÊS CÁLCULOS ABAIXO, FUNCIONA TRANQUILO.
$vcontass = (($salario * $pcontass) / 100);
$vextra = ($salario / 220);
$textra = ((($hextrau * $vextra) + (($hextrau * $vextra) / 100)) + (($hextraf * $vextra) + (($hextraf * $vextra) / 100)));
MAS QUANDO EU ATIVO OS CÁLCULOS ABAIXO, NÃO FUNCIONA, OU SEJA, O NAVEGADOR TRAVA.
$vtrienio = (($fferias * $ptrienio) / 100);
$acampo2 = ($salario / 3);
$dcampo5 = (($liquido1 * $pferias) / 100);
$tadicional = ($acampo1 + $acampo2 + $acampo3 + $acampo4 + $acampo7 + $acampo8 + $acampo9 + $acampo10);
$tdesconto = ($dcampo3 + $dcampo4 + $dcampo5 + $dcampo6 + $dcampo7 + $dcampo8 + $dcampo9 + $dcampo10);
$liquido1 = (($acampo1 + $acampo2 + $acampo3 + $acampo4 + $acampo7 + $acampo8 + $acampo9 + $acampo10)-($dcampo3 + $dcampo4 + $dcampo5 + $dcampo6 + $dcampo7 + $dcampo8 + $dcampo9 + $dcampo10));
EU VOU POSTAR A TELA DE CADASTRO DO APLICATIVO EM ANEXO.
VOU POSTAR AQUI O MODEL E O FORM
MODEL
======
Alex, a função sendData possui um quarto parâmetro($fireEvents = true) que serve para informar se os campos preenchidos por ela devem executar os eventos de saída(onChange, onExit). Como você definiu umExitAction em vários campos que chamam a mesma função, pode estar havendo um deadlock. Faça o teste alterando esse parâmetro para false.
Qual a ideia por trás de atualizar o java? Fiquei curioso.