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. Oi gente. Preciso calcular as somatórias de valores de produtos vendidos, para gerar um relatório. Mas tenho encontrado problemas... vejam: with dmRel.QueryRelProVen do begin Close; SQL.Clear; SQL.Add('SELECT VENCOD, VENDES, SUM(VENQTD) AS QTDE, '); SQL.Add('SUM(VENTOT) AS TOTAL, SUM(VENCUS) AS CUSTO, '); SQL.Add('SUM((VENTOT-(VENCUS*VENQTD))) AS MARGEM FROM ESTAVEN.dbf'); SQL.Add('WHERE VENDAT BETWEEN :pDataIni AND :pDataFin'); SQL.Add('AND VENCAN IS NULL'); SQL.Add('AND VENFLA IS NOT NULL'); SQL.Add('GROUP BY VENCOD, VENDES'); ParamByName('pDataIni').AsDateTime := StrToDateTime(txtRelProVen_DataIni.Text); ParamByName('pDataFin').AsDateTime := StrToDateTime(txtRelProVen_DataFin.Text); Open; end; Quando eu calculava a somatória do campo VENTOT, o resultado saía perfeito. O total ficava em torno de 37.000 _____________________________ Mas precisei realizar um cálculo na instrução, para subtrair o valor das compras que tiverem desconto, então ficou dessa forma: with dmRel.QueryRelProVen do begin Close; SQL.Clear; SQL.Add('SELECT VENCOD, VENDES, SUM(VENQTD) AS QTDE, '); SQL.Add('SUM(VENTOT-((VENTOT*VENDSC)/100)) AS TOTAL, SUM(VENCUS) AS CUSTO, '); SQL.Add('SUM((VENTOT-(VENCUS*VENQTD))) AS MARGEM FROM ESTAVEN.dbf'); SQL.Add('WHERE VENDAT BETWEEN :pDataIni AND :pDataFin'); SQL.Add('AND VENCAN IS NULL'); SQL.Add('AND VENFLA IS NOT NULL'); SQL.Add('GROUP BY VENCOD, VENDES'); ParamByName('pDataIni').AsDateTime := StrToDateTime(txtRelProVen_DataIni.Text); ParamByName('pDataFin').AsDateTime := StrToDateTime(txtRelProVen_DataFin.Text); Open; end; Mas assim, a query só retorna um resultado. E quando eu fui ver, ela retornou 6,48 ... que é o valor do campo VENTOT do primeiro registro. Como o VENDSC era zero, a conta realizada me pareceu que foi feita normalmente, mas parece que só foi selecionado o primeiro registro. Alguém consegue identificar o que pode estar acontecendo? Muito obrigado.
  2. Vi sim.... mas não consigo aplicar no Rave
  3. Muito obrigado, Jhonas. Consegui, no Rave Reports, agrupar os registros por dia. Utilizei um Band para colocar o campo VENDAT, que armazena os dias e utilizei também um DataBand para colocar os registros das vendas. Propriedades da Band: 1.- ControllerBand (coloquei o DataBand) 2.- GroupDataView (Coloquei o único DataView que utilizo) 3.- GroupKey (coloquei o campo por onde os registros serão agrupados (data)) 4.- BandStyle (marquei Group Header e First) Propriedades do DataBand: 1.- DataView (Coloquei o único que utilizo) 2.- BandStyle (marquei First) Dessa forma, tenho impressa a data e seus respectivos registros na sequencia. ______________________ Mas e os totais??? Como vou fazer??? Pensei que poderia ter um Band com um parâmetro que recebesse o subtotal daquele dia, mas como vou calcular no Delphi esse parâmetro por cada dia???
  4. Estou fazendo um relatório de vendas no Rave Reports e preciso separar os registros por data. Eu geralmente imprimo todos os registros da busca e, quando preciso calcular os totais, imprimo em outra banda, abaixo do DataBand que estão os registros. Mas nesse relatório de vendas, eu precisava imprimir as vendas de um dia e aí calcular o total vendido desse dia. E aí então continuar imprimindo os registros, agora do próximo dia, e logo embaixo o total vendido naquele dia. E assim por diante... Mas não sei se tem como fazer isso no Rave. Alguém já fez? Poderia ajudar? Muito obrigado
  5. Resolvido! O problema é que meu relatório, em Rave Reports, não tinha o alias TOTAL pra colocar lá... Então coloquei um campo TOTAL no rave e agora está tudo certo. Valeu kuroi
  6. Então.. por isso disse que talvez o Group By não desse certo... por que ele pega registros iguais... Retirei o VENQTD do Select, pois ele não será exibido no relatório. Como agora o Group By ficou apenas com o Código e Descrição do produto, o relatório está saindo assim: COD PRODUTO DESCRIÇÃO VALOR TOTAL 0000000000077 Maçã 4,00 7892840812416 Pão 4,00 Como tem dois registros da maçã, um com total 2,50 e outro com 1,50.. o valor total está certo. Mas o pão, que tem dois registros também, um com total 5 e outro com 2,50... deveria ter valor total 7,50 Então o relatório deveria sair assim: COD PRODUTO DESCRIÇÃO VALOR TOTAL 0000000000077 Maçã 4,00 7892840812416 Pão 7,50 Ele tá pegando o valor total dos primeiros itens agrupados e "atribuindo" aos outros também.
  7. Minha consulta está dessa forma, mas ainda não está dando certo. procedure TfrmRelProVen.btnGerarRelClick(Sender: TObject); var codForn, codPro, descPro: string; begin with dmRel.QueryRelProVen do begin Close; SQL.Clear; SQL.Add('SELECT VENCOD, VENDES, VENQTD , SUM(VENTOT) AS TOTAL, SUM(VENCUS) AS CUSTO FROM ESTAVEN.dbf'); SQL.Add('WHERE VENFOR = :pForn AND'); SQL.Add('VENCAN IS NULL'); SQL.Add('GROUP BY VENCOD, VENDES, VENQTD'); ParamByName('pForn').AsString := txtRelProVen_CodForn.Text; Open; if not (IsEmpty) then begin txtVentot.Text := dmRel.QueryRelProVen.FieldByName('TOTAL').Value; txtVencus.Text := dmRel.QueryRelProVen.FieldByName('CUSTO').Value; end; end; dmRel.RvPrjProVen.SetParam('Ventot', txtVentot.Text); dmRel.RvPrjProVen.SetParam('Vencus', txtVencus.Text); dmRel.RvPrjProVen.ExecuteReport('rptProVen'); end; Essa consulta pegaria tres itens: Pão Maçã Água Mas está pegando todos os pães, todas as maçãs e todas as águas da tabela vendas, e seus respectivos valores e quantidades e tudo mais. Tem algo errado aí.
  8. O problema é que eu também preciso selecionar a data, a quantidade e outros campos. E dessa forma eu preciso colocar também esses campos no Group By, mas aí não ficaria do jeito correto. E quando tem mais de um tipo de produto.. pão e leite, por exemplo... como vou calcular o total do pão e o total do leite, separadamente? porque do jeito que está, ele só soma tudo, sem distinção. Não consigo achar um caminho pra fazer isso.
  9. Oi gente. Desculpem, mas não soube me expressar muito bem no título do tópico. Estou fazendo um relatório que lista os produtos vendidos, buscado na tabela de vendas. Mas não é para listar os produtos reptidas vezes. Por exemplo: Pão Francês foi vendido várias vezes em um dia, então terá vários registros em que o campo VENDES é Pão Francês. Eu preciso imprimir tal produto uma vez só, em apenas uma linha... mas preciso também, junto com ele, a somatória do valor total dos pães vendidos. Supondo que na tabela tenha: COD VENDA COD PRODUTO DESCRIÇÃO VALOR TOTAL 00001 00001 Pão Francês 2,00 00002 00001 Pão Francês 3,50 00003 00001 Pão Francês 0,40 Preciso que no relatório fique: COD PRODUTO DESCRIÇÃO VALOR TOTAL 00001 Pão Francês 5,90 Já tentei de tudo... group by, select distinct [mas esse não vai funcionar, pois os campos não tem valores iguais em todos os registros] O que vocês sugerem que eu faça? Muito obrigado
  10. É... dessa última forma é do jeito que eu fiz e não está dando certo... Vou tentar fazer da primeira maneira que você disse
  11. Mas frmCadPro.cboCadPro_Icms é a DBComboBox Não entendi... é pra colocar em outra combo o valor recebido pela minha combo? mas ela não está recebendo o valor da tabela
  12. É.. tipo... na inclusão do produto, tenho a combobox pra escolher a alíquota de icms... tenho as opções 7, 12, 18 e 29... aí escolho uma e esta opção que escolhi fica sendo o valor da propriedade Text da combo, certo?! é este valor que será gravado na tabela.. aí depois vou fazer uma busca deste produto..então desejo que o valor gravado (18, por exemplo) preencha a combobox. Ou seja... é diferente de adicionar itens na combo... o 18 deve ser o valor da propriedade Text.
  13. E ae pessoal.. assim, o DBComboBox não recebe valores da tabela? Digo, a propriedade Text dele? Vou explicar melhor... Fazendo uma busca de produtos em um DBGrid, eu preencho vários Edits e DBEdits com os valores de tal registro. Aí também tenho um DBComboBox. Quando estou no modo inclusão ou alteração, ele possui valores a serem escolhidos.. Mas quando realizo uma busca, o valor deste campo não aparece na combo. if dm.ESTAPRO.FieldByName('PROICM').IsNull = False then begin frmCadPro.cboCadPro_Icms.Text := dm.ESTAPRO.FieldByName('PROICM').Value; end; O código acima não é aceitável... a combo fica em branco. Mas ela deveria trazer o valor que está na tabela... e mostrar esse valor, como se eu tivesse escolhido alguma das opções da combo. Como devo fazer pra combo mostrar o valor buscado na tabela?? Obrigado.
  14. Douglas, testei aqui mas não permite o Query1.Edit. 'Query1: Cannot modify a read-only dataset' Não é permitido editar a Query
  15. Não... Eu deixo dgEditing := True e RequestLive da TQuery := True também, mas se tiver ORDER BY na consulta, não dá pra editar ¬¬
  16. Eu trabalho com o DBGrid, um DataSource e um TQuery. Então isso não é possível, pois nenhum deles possui a propriedade IndexName.
  17. Mas eu preciso que já venha ordenado. Só que o ORDER BY não permite que eu altere os registros no grid. :(
  18. Tenho um DBGrid que precisa ter os registros em ordem alfabética e precisa ser editável. Se eu ligar o DBGrid diretamente na tabela (.dbf), eu consigo editar mas não consigo ordená-lo.. Já tentei trabalhar com índices mas sem sucesso. Se eu alimentar o DBGrid através de uma busca feita com SQL, só é possível editar se não estiver ordenado. O que eu posso fazer? É impossível editar um DBGrid ordenado?
  19. Percebi que o erro está na utilização da função Copy. Onde coloco Copy(sUso,7,8), o correto é Copy(sUso,7,2) Muito obrigado por quebrarem a cabeça junto comigo e desculpa tomar o tempo de vocês. Valeu
  20. Aqui, o sUso está recebendo uma string de uma data descriptografada do banco. aí o vUso tem que receber essa data em formato de data mesmo... não em string... só foi passado pra string pra criptografar... Mas não deu certo mesmo desse jeito... de nenhum jeito deu certo ainda. O curioso é que depois dessa mensagem de erro que aparece, se eu continuar, aparece uma caixa de texto acusando erro e escrito '24/03/2010 tem uma aspa simples somente no início da mensagem.... isso pode significar alguma coisa ou não?
  21. Então.... eu troquei... coloquei TDate ao invés de TDateTime.... mas continuou dando o mesmo erro
  22. Mas, no caso aqui, a string obtida é '24/03/2010' ela não pode ser convertida pra TDateTime? Troquei de TDateTime pra TDate, conforme você disse que seria o correto, mas ainda dá o erro :(
  23. E ae, pessoal.. Eu já li vários tópicos sobre este assunto mas ainda não consegui resolver meu problema.. Estou lidando com um cálculo que envolve strings e datas, para verificação de senha de um programa.. Em alguns lugares tenho datas gravadas no formato dd/mm/yy, e para mudar isso para dd/mm/yyyy, faço a seguinte verificação: if (sUso[9] = '') AND (sUso[10] = '') then begin vUso := StrToDateTime(FormatDateTime('dd/MM/yyyy', StrToDateTime(Copy(sUso,1,6)+'20'+Copy(sUso,7,8)))); end; Lembrando que: * vUso é do tipo DateTime * sUso é do tipo String * sUso[1] é o primeiro dígito de uma data, sUso[2] é o segundo, e assim por diante, até o sUso[10]. Então se o sUso[9] e o sUso[10] estiverem vazios, ou seja, se a data estiver no formato com 2 dígitos no ano, eu acrescento 20 no início do ano, para ficar "dois mil e" o que já tem. Mas continua dando um erro de conversão: Project winsuperm.exe raised exception class EConvertError with message "24/03/2010 A mensagem de erro é exatamente essa.... tanto é que não entendi aquelas aspas ali. alguém consegue me ajudar? Obrigado
  24. Hey amigos, estou trabalhando aqui com o Rave Reports e me surgiu um desafio aqui. Preciso fazer um relatorio normal, que lista tais produtos, então coloco os campos da tabela em um DataBand para serem listados. Mas o último campo no relatorio, não é um campo da tabela. Ele é uma variável com o resultado de um calculo entre dois campos da tabela. E dependendo do resultado desse cálculo, essa variável recebe tal valor ('???', zero, ou o próprio resultado). Mas como posso fazer isso? Já fiz o cálculo e a condição no delphi, jogando os resultados numa label pra jogar depois em um DataMemo, mas se coloco esse DataMemo no DataBand, pra cada registro vai aparecer todos os resultados, mas tem que ser um pra cada.... E se coloco o DataMemo fora do DataBand, ao lado da Region, ele aparece dependendo do numero de páginas do relatorio.. Se fo ruma página, ele aparece uma vez... se o relatorio tiver 3 páginas, ele aparece 3 vezes.. alguém sugere alguma forma de trabalhar com isso?? Obrigado
×
×
  • Criar Novo...