Ir para conteúdo
Fórum Script Brasil

SCIENTIST

Membros
  • Total de itens

    67
  • Registro em

  • Última visita

Sobre SCIENTIST

SCIENTIST's Achievements

0

Reputação

  1. Estou utilizando um relacionamento Master-Detail de Vendas (Master) com Serviços e Pagamentos (tabelas Details), utilizo o TClientDataSet configurado para o commandType = ctQuery, tenho aproximadamente 20K de Vendas, sendo que cada Venda tem vários produtos e pagamentos. Trabalho da seguinte forma: Eu tenho Querys prontas parametrizadas e apenas utilizo elas quando necessário, ex: clientDataSet.close; clientDataSet.commandText := FIND_BY_COD_VENDA; clientDataSet.Params.paramByName('cod_venda').AsInteger := 134; clientDataSet.open; Ocorre que como estou trabalhando com Master-Detail, além de carregar os dados da VEnda, ele carrega os dados dos Serviços e Pagamentos, deixando a consulta um pouco mais lenta do que eu esperava. Gostaria de saber se tem como dizer de alguma forma: "Não carregue os details, apenas quando eu for editar um registro eu carrego os details".
  2. Jhonas, descobri que calcular manualmente nos botões não irá funcionar, pois preciso mostrar a lista de valores em um dbgrid.
  3. Bom, dar refresh na tabela resolve porém não acho que seja a solução, pois iremos trabalhar com uma grande quantidade de dados e isso iria deixar o sistema lento. Não tem como usar o internalCAlc pois não posso calcular o valor da percentagem se eu não tenha o total geral, a única solução possível que me restaé calcular os campos em cada atualização do registro manualmente. Porém onde eu iria armazenar esses valores? Em um campo calculado? Ou crio um campo internalcalc? Ps: só para responder sua pergunta, eu prefiro trabalhar com o tempo de resposta, pois o cliente não deseja lentidão no sistema.lento
  4. Vamos la, supondo que eu queria calcular o total geral. então toda vez que eu clicar no botão ok eu deveria somar o total de produtos com o total de serviços. E toda vez que eu calcular o total geral eu devo calcular o valor da percentagem, não seria um processo trabalho e dsspendioso ou e a maneira certa de se trabalhar nesse caso?
  5. não vai dar muito certo. Dentro da tela de projetos eu tenho outras telas, como a de adicao de servicos, se eu adiciono um novo servico não tem como fazer estes procedimentos. Adicionar ou deletar servicos e produtos devem consequentemente alterar o total geral e isso não da pra ser feito no onexit.
  6. Bom, uso firebird 2.1 Na verdade eu ainda não entendi muito bem como fazer isso. O que eu entendi até agora foi que eu devo calcular o TOTAL_GERAL via SQL e não no InternalCalc, assim devo fazer com o VALOR_PERCENT, já pegar o mesmo calculado pelo SQL e não internalCalc. Porém não entendi onde aplicar o RefreshRecord. Imagine, o usuário abre a tela de PROJETOS, lá em baixo tem TOTAL GERAL DO PROJETO, então ele adiciona um Serviço e nada acontece com o TOTAL GERAL que deveria mudar. Onde aplico o RefreshRecord para que este TOTAL GERAL que foi calculado pelo SQL mude conforme as alterações. Se puderes, eu tenho TeamViewer em minha máquina, vocÊ poderia acessar rapidamente só para entender melhor a situação. Posso enviar via Mensagem o ID e SENHA de acesso, claro só se você puder.
  7. Bom, deixa eu ver se entendi. Tenho um determinado registro, se eu não o editar, posso usar o RefreshRecord ? QUal a utilidade disso ? Lembrando que eu preciso que ao adicionar um novo serviço ou produto o valor do TOTAL_GERAL (pego do SQL) seja atualizado automaticamente. Tem mais uma coisa, o registro (no código acima) só será atualizado se eu mudar de registro (mudar a linha).
  8. Bom dia, tenho a seguinte situação: Uma Tabela PRODUTOS, onde nesta tabela tenho um campo VALOR e outra PERCENT. Dessa forma fazemos o seguinte SQL: "SELECT P.*, (P.VALOR*(P.PERCENT/100)) AS NOVO_VALOR FROM PRODUTO". Até aqui tudo bem, porém no ClientDataSet todos esses campos ficam em memória e só são atualizados novamente após um REFRESH, o que demanda tempo e deixa o sistema lento. Então imagine se o usuário altera o valor do produto ou do percent o valor NOVO_VALOR que foi calculado no SQL não irá mudar até que seja dado um REFRESH. Então, como fazer isso sem dar um REFRESH em toda a tabela ?
  9. Jhonas, eu sei que posso calcular o TOTAL_GERAL e o VALOR_PERCENT pelo SQL, porém há um grande problema nisso. Se em tempo de execução, o usuário adicionar um SERVIÇO por exemplo, o TOTAL_GERAL não mudará, a não ser que eu de um REFRESH no CLIENTDATASET. Olha, fiz uma modelagem rapida do meu problema (MER) de uma olhada por gentileza. http://s14.postimage.org/6ifpphef5/imagem_modelagem.png
  10. desculpe mas não entendi, poderia me dar um exemplo baseado no caso real que coloquei no post, com as tabelas : PROJETO, SERVICOS, PRODUTOS E COMISSAO ?
  11. Olá Jhonas, eu já havia lido este artigo na Devmidia porém em nada me auxiliou para resolver meu problema. Como disse no POST, o meu problema maior está em: "Como calcular um valor na tabela DETAIL com base em um campo na tabela MASTER que ainda nem foi calculado ?"
  12. Bom dia, Tenho uma Tabela PROJETO (Master), SERVICOS (Detail), PRODUTOS (Detail), COMISSOES (Detail). Nas Tabelas SERVICOS e PRODUTOS tenho em ambas 1 campo chamado TOTAL (aggregate). Na Tabela PROJETO tenho um InternalCalc chamado TOTAL_GERAL que soma TOTAL DE SERVICOS + TOTAL DE PRODUTOS. Na Tabela COMISSOES tenho um campo InternalCalc VALOR_PERCENT que pega o TOTAL_GERAL da Tabela PROJETO e retira 10% deste. Aqui ocorre o problema: Identifiquei que os Campos Calculados do Detail são executados primeiro do que do Master, dessa forma eu não tenho como pegar o TOTAL_GERAL se ele ainda nem foi calculado. Como resolver isso ?
  13. BOm, tenho um StringGrid no delphi onde o usuário preenche com Nome do Serviço, data, valor e quantidade do serviço. Isso não será salvo no banco, é apenas para mostrar no relatório, ele pode colocar 2 ou 20 serviços, como passo isso para o Crystal ?
  14. Resolvido ! O problema estava no meu banco !
×
×
  • Criar Novo...