Ir para conteúdo
Fórum Script Brasil

Gabriel Cabral

Membros
  • Total de itens

    406
  • Registro em

  • Última visita

Tudo que Gabriel Cabral postou

  1. Já vi o que tinha de errado... eu estava colocando o DataMemo em uma banda, sendo que ele tem que ficar fora. Obrigado.
  2. Lembrando que a montagem é feita no label e este label está correto, com cada registro aparecendo uma vez só. O problema deve ser alguma coisa no Rave, no DataMemo, ou outra coisa
  3. Bom dia, amigos. Estou fazendo um relatório de compras aqui mas me deparei com um problema. Para fazer o relatório, eu faço uma busca com uma TQuery e vou montando o layout em um label no Delphi; e depois passo esse label como parâmetro para um DataMemo no Rave. A busca, as somatórias, o layout, tudo está corretíssimo... saindo exatamente do jeito que eu quero. Mas percebi que dependendo do número de registros resultantes da busca, o número de páginas do relatório aumenta. Ou seja.... se tenho 1 registro, ele fica em uma página se tenho 2 registros (mesmo cabendo tudo na primeira página), o relatório passa a ter duas páginas, com o mesmo conteúdo da primeira. se tenho 4 registros (mesmo cabendo tudo na primeira página), o relatório passa a ter quatro páginas, com o mesmo conteúdo da primeira. Obs.: Isso acontece tanto na geração de pdf quanto pro envio pra qualquer impressora. Por que isso acontece? O que eu preciso fazer pra corrigir isso? Obrigado
  4. Nossa.... acho que estou meio confuso... Se eu buscar registros com uma TQuery e altera-los, eu estarei alterando o resultado da query, e não os registros na tabela... Por isso utilizo o Locate depois, mesmo sabendo da performance não muito boa. Não sei se o que eu entedo e faço é certo. Agora me perdi :(
  5. Mas se eu utilizar um Select com parametros [nota,prod], não vou conseguir atualizar os valores dos registros da tabela, pois vou estar manipulando os resultados da query, certo? ou não? Se pudesse me ajudar a utilizar algo que não desse problema na performance.. Obrigado
  6. Consegui fazer aqui de uma forma... Se houver uma maneira de fazer e alguém puder sugerir.. if txtCadCompras_Mode.Text = 'MODO ALTERAÇÃO' then begin if (txtCadCompras_NumNota .Text <> txtCadCompras_AuxNumNota .Text) OR (txtCadCompras_Data .Text <> txtCadCompras_AuxData .Text) OR (txtCadCompras_Frete .Text <> txtCadCompras_AuxFrete .Text) OR (txtCadCompras_IPI .Text <> txtCadCompras_AuxIPI .Text) OR (txtCadCompras_ValorNota.Text <> txtCadCompras_AuxValorNota.Text) OR (txtCadCompras_Acrescimo.Text <> txtCadCompras_AuxAcrescimo.Text) OR (txtCadCompras_Desconto .Text <> txtCadCompras_AuxDesconto .Text) then begin txtCadCompras_AuxValorNota.Text := txtCadCompras_ValorNota.Text; auxNumNota := txtCadCompras_AuxNumNota.Text; With QueryCadCompras Do begin Close; SQL.Clear; SQL.Add('SELECT * FROM ESTACMP.dbf'); SQL.Add('WHERE CMPNOT = :pNot'); ParamByName('pNot').AsString := auxNumNota; Open; QueryCadCompras.First; while QueryCadCompras.Eof = False do begin nota := QueryCadCompras.FieldByName('CMPNOT').Value; prod := QueryCadCompras.FieldByName('CMPPRO').Value; if dm.ESTACMP.Locate('CMPNOT;CMPPRO', VarArrayOf([nota,prod]), []) then begin dm.ESTACMP.Open; dm.ESTACMP.Edit; dm.ESTACMPCMPNOT.Value := txtCadCompras_AuxNumNota.Text; dm.ESTACMPCMPDAT.Value := StrToDateTimeDef(txtCadCompras_Data.Text,0); dm.ESTACMPCMPFRE.Value := StrToFloatDef(txtCadCompras_Frete.Text,0); dm.ESTACMPCMPIPI.Value := StrToFloatDef(txtCadCompras_IPI.Text,0); dm.ESTACMPCMPACR.Value := StrToFloatDef(txtCadCompras_Acrescimo.Text,0); dm.ESTACMPCMPDSC.Value := StrToFloatDef(txtCadCompras_Desconto.Text,0); dm.ESTACMP.Post; end; QueryCadCompras.Next; end; end; end; end; Muito obrigado
  7. Oi gente... parece uma coisa simples, mas eu estou apanhando aqui.. Em uma tabela, faço uma busca para retornar os registros que tem no campo 'CMPNOT' um valor passado por parâmetro. Supondo que foram encontrados 3 registros... A partir daí, preciso percorrer somente esses registros para alterar o valor de alguns outros campos. Preciso fazer isso diretamente na tabela.... Estava tentando com Locate, While, mas nada dava certo... O máximo que consegui foi alterar somente o primeiro desses 3 registros, mas algo estava errado porque deu um loop infinito aqui. Como eu poderia fazer? alguém me sugere algo... OBS.: Preciso fazer com Locate, pra alterar diretamente na tabela. Obrigado
  8. Eu resolvi aqui.... alterei o tamanho pela propriedade Columns... Muito obrigado
  9. Quero aumentar a fonte dos textos que estão no grid, mas o que aumenta são as linhas... o tamanho da letra continua o mesmo... Estava fonte tamanho 7 e fui mudar pra 10 a linha fica enorme com umas letras pequenas dentro... fui testar mudar a cor da fonte, também não está mudando... o que pode estar havendo? Obrigado
  10. Então temos mais um problema aí... não uso o ClientDataSet... uso apenas o grid vinculado a um datasource que está vinculado a uma tabela
  11. Então... não há código nenhum.. o DBGrid já fica editável por padrão... Eu queria que alterasse no banco quando eu desse enter depois de mudar no grid mas ele só altera se eu der seta pra cima ou pra baixo
  12. Tenho um DBGrid que recebe os dados de uma tabela através de um filter. Quando clico ou dou enter em uma coluna, aquele registro torna-se editável. Então eu altero o valor.. Mas se eu der um Enter e depois sair do form, o valor não se altera. Ele só altera se eu der seta pra baixo ou seta pra cima. Mas não posso fazer isso.... preciso que aquele registro alterado fique selecionado após a alteração. Alguém poderia me ajudar? Obrigado.
  13. Muito obrigado pela dica, Recife.. Mas meu grid está sendo alimentado por uma tabela... consegui desta forma... procedure TfrmAbePagamento.GridAbePagamentoCellClick(Column: TColumn); begin if dm.ESTAVD3VENMAR.Value = '' then begin dm.ESTAVD3.Edit; dm.ESTAVD3.Open; dm.ESTAVD3VENMAR.Value := 'X'; dm.ESTAVD3VENABE.Value := 0.00; totPago := totPago + StrToFloat(dm.ESTAVD3VENTOT.AsString); txtAbePagamento_TotPago.Text := 'R$ ' + FormatFloat('#,###,##0.00', totPago); end else if dm.ESTAVD3VENMAR.Value = 'X' then begin dm.ESTAVD3.Edit; dm.ESTAVD3.Open; dm.ESTAVD3VENMAR.Value := ''; dm.ESTAVD3VENABE.Value := dm.ESTAVD3VENTOT.Value; totPago := totPago - StrToFloat(dm.ESTAVD3VENTOT.AsString); txtAbePagamento_TotPago.Text := 'R$ ' + FormatFloat('#,###,##0.00', totPago); end; end; Obrigado
  14. Então gente... Preciso editar um registro no DBGrid... ele já está editável.. Mas gostaria de que, ao invés de dar um duplo click na célula e digitar o que quero, eu desse apenas um click ou apertasse o enter e já gravasse um "X" no campo que eu preciso. Basicamente é isso que preciso... dar apenas um click ou enter ao invés de dar duplo click e digitar. Muito obrigado
  15. Bom dia, amigos... Como faço pra abrir um relatório do Rave em um outro computador??? O que eu devo colocar no ProjectFile do TRvProject, considerando que em cada cliente, o executável do programa esteja em uma pasta com nome diferente??? Obrigado
  16. Então.... eu fiz o select dessa maneira: ('select ( CAST(VENCLI AS INTEGER) ) FROM MINHATABELA.dbf'); (ORDER BY 1); Mas deu o seguinte erro: 'QueryAbeConsulta: Type mismatch for field 'VENCLI', expecting: String actual: Integer ' Então, eu deletei os campos que eu tinha adicionado diretamente na TQuery... aí funcionou.... consegui ordenar por cod do cliente... Só que eu resolvi um problema, mas acabei criando outro. Como deletei os campos da TQuery, não tem como eu definir a propriedade Currency dos campos VENPRE e VENTOT, como eu preciso que apareçam no DBGrid... Tentei então colocar CAST(VENPRE AS CURRENCY) no select, mas não deu certo... Existe alguma forma de deixar esses campos como currency no DBGrid, sem adicioná-los diretamente na TQuery ??? Muito obrigado
  17. Então... A propriedade DataSource do DBGrid está selecionando o datasource que estou usando... A propriedade DataSet do DataSource está selecionando a TQuery que estou usando... E a TQuery tem sua propriedade DatabaseName apontada para o alias Na consulta, eu quero selecionar todas vendas em aberto, ou seja, que a data do pagamento seja nula Informo o período e o codigo do cliente para fazer um filtro... e escolho se quero ordenar por data ou por codigo do cliente... neste caso, é pelo código do cliente.. // Consulta por período e código// if (txtAbeConsulta_DataIni.Text <> '') AND (txtAbeConsulta_DataFin.Text <> '') AND (txtAbeConsulta_CodCli.Text <> '') then begin With QueryAbeConsulta Do begin Close; SQL.Clear; SQL.Add('SELECT VENCLI, VENDAT, VENDES, VENPRE, VENQTD, '); SQL.Add('VENTOT, VENDPG, VENNVD, VENNUM'); SQL.Add('FROM ESTAVD3.dbf'); SQL.Add('WHERE VENCLI = :pCodCli AND'); SQL.Add('VENDAT BETWEEN :pDataIni AND :pDataFin AND'); SQL.Add('VENDPG IS NULL'); SQL.Add('ORDER BY VENCLI'); ParamByName('pDataIni').AsDateTime := StrToDateTime(txtAbeConsulta_DataIni.Text); ParamByName('pDataFin').AsDateTime := StrToDateTime(txtAbeConsulta_DataFin.Text); ParamByName('pCodCli').AsString := txtAbeConsulta_CodCli.Text; Open; end; end; Mas aí dá aquilo de não ordenar corretamente, por causa do tipo do campo VENCLI ser string, apesar de que neste campo só existem números inteiros.. Mas não posso alterar o tipo agora.
  18. Tem um DBGrid ligado a um DataSource, que está ligado a um TQuery Aí faço a busca com a TQuery pra exibir o resultado no DBGrid... Mas como o campo VENCLI é do tipo string, os números não ficam corretamente ordenados como se fossem números.. E eu não posso alterar o tipo do campo.. Precisava converter esse campo pra int antes de dar o ORDER BY Mas não sei como... já tentei várias maneiras, mas nada dá certo.
  19. Eu realmente não posso alterar o tipo do campo. E o que voce me indicou talvez não seja possível de ser feito, pois não utilizo ClientDataSet :(
  20. E se eu não puder alterar o tipo no banco?? como eu poderia fazer essa conversao, considerando que é uma tabela dbf :(
  21. Da segunda forma não deu pra fazer, pois não uso ClientDataSet Da primeira forma, deu erro também: Incompatible types: 'string' and 'Integer'
  22. Gente.. preciso ordenar uma consulta por um campo que é String (ORDER BY VENCLI) só que esse campo, apesar de ser string, só armazena números...e então o 10 vem antes do 2, por exemplo... existe alguma forma de converter o campo VENCLI em integer pra eu poder ordenar a consulta através dele?? Obrigado
  23. Então Jhonas... coloquei esse código aí que gera o relatório, só para mostrar como eu faço, se caso alguém quisesse ver para ajudar... a questão que você me disse eu já faço... eu criei um label no rave para cada variavel que calcula a soma... quanto a isso, tudo certo! A questão é sobre o que eu falei do cartão... vamos supor que eu faça uma busca e o relatorio seja gerado assim: ___Data___ | _________Historico_________ | Valor Entrada | Valor Saída | Tipo de Pgto 06/08/2009 | PGTO CARTAO VISA___________|R$200,00____|__________|CARTÃO 06/08/2009 | PGTO CARTAO MASTERCARD____| ___________|R$40,00___ |CARTÃO 06/08/2009 | PGTO CARTAO MASTERCARD____|R$350,00____|__________|CARTÃO 06/08/2009 | PGTO CARTAO VISA___________| ___________| R$150,00__|CARTÃO Então eu vou precisar de um label pra calcular a soma do registro que possui a substring VISA no campo CAIHIS [historico] e um outro label pra calcular a soma do registro que possui a substring MASTERCARD no campo CAIHIS [historico] Neste caso vou precisar de dois labels... mas e se numa outra busca, só vier registros com VISA ??? Não vou precisar de um label. E se vier registros com VISA, MASTERCARD, HIPERCARD, DINERS??? vou precisar de quatro labels... e consequentemente, de 4 parametros.. Ou seja.. vai depender da busca... então não posso definir os parametros.. Como eu vou fazer???
  24. Bom dia, pessoal... estou com um grande problema no Rave Reports e preciso muito da ajuda de vocês.. Espero que possam ler e tentar me ajudar...Vamos lá.. Eu tenho um relatório que contém as entradas e saídas de valores do caixa de um supermercado.. Uso uma TQuery ligada ao DataSetConnection do Rave para fazer a busca e gerar o relatório. Para fazer as somas necessárias, eu utilizo parâmetros...Então, cada DataText do Rave recebe um parâmetro, em que seu valor é calculado no Delphi.. Até aí tudo bem... Mas agora vem a encrenca... Eu preciso calcular a soma de cada cartão existente no resultado da busca que gerou o relatório.. Exemplo: Na tabela existem vários registro e alguns com o campo CAIHIS com valor "PGTO CARTAO VISA", outros com valor "PGTO CARTAO MASTERCARD" e assim por diante... Se eu faço uma busca, gero um relatorio e nele aparecem registros apenas com "PGTO CARTAO VISA", vou precisar calcular a soma dos valores destes registros. OU SEJA, NÃO POSSO CRIAR UM PARÂMETRO PARA O VALOR DE CADA CARTÃO, POIS NÃO SEI QUE CARTÕES SERÃO CADASTRADOS NO CAMPO CAIHIS DESTA TABELA. NÃO POSSO PRÉ-DETERMINAR QUANTOS DATATEXT TERÁ MEU RELATÓRIO, POIS VAI DEPENDER DO RESULTADO DA CONSULTA. Como vou fazer, então, pra capturar cada diferente cartão, pegar seu valor, fazer a soma e jogar no relatório??? Só sei fazer isso com parâmetros, mas neste caso não estou vendo como. Vou colocar aqui o código que uso para gerar um relatório.. procedure TfrmRelatorio.btnGerarRelClick(Sender: TObject); var somaEntDin, somaEntChe, somaEntPre, somaEntCar, somaEntOut, somaEntAbe, somaEntSan, somaEntSup, somaSaiDin, somaSaiChe, somaSaiPre, somaSaiCar, somaSaiOut, somaSaiAbe, somaSaiSan, somaSaiSup, somaEntTot, somaSaiTot, totalGeral, i: integer; begin dm.RvPrjCaixa.SetParam('DataIni',txtDataIni.Text); dm.RvPrjCaixa.SetParam('DataFin',txtDataFin.Text); dm.RvPrjCaixa.SetParam('HoraIni',txtHoraIni.Text); dm.RvPrjCaixa.SetParam('HoraFin',txtHoraFin.Text); if txtNumCaixa.Text <> '' then begin with dm.QueryRelCaixa do begin Close; SQL.Clear; SQL.Add('SELECT * FROM ESTACAI.dbf'); SQL.Add('WHERE CAIDAT BETWEEN :DataI AND :DataF'); SQL.Add('AND CAIHOR BETWEEN :HoraI AND :HoraF'); SQL.Add('AND CAINCX = :Ncaixa'); SQL.Add('AND CAIFLA = ""'); ParamByName('DataI') .AsDateTime := StrToDateTime(txtDataIni.Text); ParamByName('DataF') .AsDateTime := StrToDateTime(txtDataFin.Text); ParamByName('HoraI') .AsString := txtHoraIni.Text; ParamByName('HoraF') .AsString := txtHoraFin.Text; ParamByName('Ncaixa').AsString := txtNumCaixa.Text; Open; // ########## ========== SOMAS SUBTOTAIS ========== ########## // somaEntDin:=0; somaEntChe:=0; somaEntPre:=0; somaEntCar:=0; somaEntOut:=0; somaEntAbe:=0; somaEntSan:=0; somaEntSup:=0; somaSaiDin:=0; somaSaiChe:=0; somaSaiPre:=0; somaSaiCar:=0; somaSaiOut:=0; somaSaiAbe:=0; somaSaiSan:=0; somaSaiSup:=0; somaEntTot:=0; somaSaiTot:=0; totalGeral:=0; dm.QueryRelCaixa.First; For i:=0 to dm.QueryRelCaixa.recordCount-1 do begin if dm.QueryRelCaixa.FieldByName('CAIDIN').AsString = 'X' then begin somaEntDin := somaEntDin + dm.QueryRelCaixa.FieldByName('CAIENT').AsFloat; somaSaiDin := somaSaiDin + dm.QueryRelCaixa.FieldByName('CAISAI').AsFloat; end; if dm.QueryRelCaixa.FieldByName('CAICHE').AsString = 'X' then begin somaEntChe := somaEntChe + dm.QueryRelCaixa.FieldByName('CAIENT').AsFloat; somaSaiChe := somaSaiChe + dm.QueryRelCaixa.FieldByName('CAISAI').AsFloat; end; if dm.QueryRelCaixa.FieldByName('CAIPRE').AsString = 'X' then begin somaEntPre := somaEntPre + dm.QueryRelCaixa.FieldByName('CAIENT').AsFloat; somaSaiPre := somaSaiPre + dm.QueryRelCaixa.FieldByName('CAISAI').AsFloat; end; if dm.QueryRelCaixa.FieldByName('CAICAR').AsString = 'X' then begin somaEntCar := somaEntCar + dm.QueryRelCaixa.FieldByName('CAIENT').AsFloat; somaSaiCar := somaSaiCar + dm.QueryRelCaixa.FieldByName('CAISAI').AsFloat; end; if dm.QueryRelCaixa.FieldByName('CAIOUT').AsString = 'X' then begin somaEntOut := somaEntOut + dm.QueryRelCaixa.FieldByName('CAIENT').AsFloat; somaSaiOut := somaSaiOut + dm.QueryRelCaixa.FieldByName('CAISAI').AsFloat; end; if dm.QueryRelCaixa.FieldByName('CAIABE').AsString = 'X' then begin somaEntAbe := somaEntAbe + dm.QueryRelCaixa.FieldByName('CAIENT').AsFloat; somaSaiAbe := somaSaiAbe + dm.QueryRelCaixa.FieldByName('CAISAI').AsFloat; end; if dm.QueryRelCaixa.FieldByName('CAISAN').AsString = 'X' then begin somaEntSan := somaEntSan + dm.QueryRelCaixa.FieldByName('CAIENT').AsFloat; somaSaiSan := somaSaiSan + dm.QueryRelCaixa.FieldByName('CAISAI').AsFloat; end; if dm.QueryRelCaixa.FieldByName('CAISUP').AsString = 'X' then begin somaEntSup := somaEntSup + dm.QueryRelCaixa.FieldByName('CAIENT').AsFloat; somaSaiSup := somaSaiSup + dm.QueryRelCaixa.FieldByName('CAISAI').AsFloat; end; dm.QueryRelCaixa.Next; end; somaEntTot := somaEntDin + somaEntChe + somaEntPre + somaEntCar + somaEntOut + somaEntAbe + somaEntSan + somaEntSup; somaSaiTot := somaSaiDin + somaSaiChe + somaSaiPre + somaSaiCar + somaSaiOut + somaSaiAbe + somaSaiSan + somaSaiSup; totalGeral := (somaEntDin + somaEntChe + somaEntPre + somaEntCar + somaEntOut + somaEntAbe + somaEntSan + somaEntSup) - (somaSaiDin + somaSaiChe + somaSaiPre + somaSaiCar + somaSaiOut + somaSaiAbe + somaSaiSan + somaSaiSup); dm.RvPrjCaixa.SetParam('SomaEntDin',FloatToStr(somaEntDin)); dm.RvPrjCaixa.SetParam('SomaEntChe',FloatToStr(somaEntChe)); dm.RvPrjCaixa.SetParam('SomaEntPre',FloatToStr(somaEntPre)); dm.RvPrjCaixa.SetParam('SomaEntCar',FloatToStr(somaEntCar)); dm.RvPrjCaixa.SetParam('SomaEntOut',FloatToStr(somaEntOut)); dm.RvPrjCaixa.SetParam('SomaEntAbe',FloatToStr(somaEntAbe)); dm.RvPrjCaixa.SetParam('SomaEntSan',FloatToStr(somaEntSan)); dm.RvPrjCaixa.SetParam('SomaEntSup',FloatToStr(somaEntSup)); dm.RvPrjCaixa.SetParam('SomaSaiDin',FloatToStr(somaSaiDin)); dm.RvPrjCaixa.SetParam('SomaSaiChe',FloatToStr(somaSaiChe)); dm.RvPrjCaixa.SetParam('SomaSaiPre',FloatToStr(somaSaiPre)); dm.RvPrjCaixa.SetParam('SomaSaiCar',FloatToStr(somaSaiCar)); dm.RvPrjCaixa.SetParam('SomaSaiOut',FloatToStr(somaSaiOut)); dm.RvPrjCaixa.SetParam('SomaSaiAbe',FloatToStr(somaSaiAbe)); dm.RvPrjCaixa.SetParam('SomaSaiSan',FloatToStr(somaSaiSan)); dm.RvPrjCaixa.SetParam('SomaSaiSup',FloatToStr(somaSaiSup)); dm.RvPrjCaixa.SetParam('SomaEntTot',FloatToStr(somaEntTot)); dm.RvPrjCaixa.SetParam('SomaSaiTot',FloatToStr(somaSaiTot)); dm.RvPrjCaixa.SetParam('TotalGeral',FloatToStr(totalGeral)); // ########## ===================================== ########## // end; end; end; Espero muito mesmo que possam me ajudar. Muito obrigado.
×
×
  • Criar Novo...