Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Relatorio composto


DiabloX3

Pergunta

Galera, meu primeiro post, vi q esse é um bom forum de discussao sobre programação delphi

meu caso é o seguinte : tenho q criar um relatorio e estou usando do quickrep porém não tenho mta experiencia com relatorio.

eu habilitei as bands title/colummheader/summary/detail (não sei o q as outras fazem, também não sei como funciona o QRGroup.)

o problem é q tenho q trazer varios dados sobre uma venda

no title esta o titulo - ok

no colum header eu coloquei dados como Nome cliente, data da venda, endereço dele, cod da venda etc com QRLabels e na frente os QRDBText

mais embaixo mas ainda no colum header tem informações da venda como qtdd, cod-descrição do produto, valor etc.

em detail coloquei os QRDBText pra mostrar essas ultimas informações..

no summary deve conter as parcelas, o vencimento delas, subtotal e total geral

O meu probl é o seguinte.. ligar tudo isso heheh.. eu tenho varias IBQuery pra me mostrar essas informações

uma query item pra me trazer as info da venda, uma query imprimir q tem as informações do cliente, uma outra q tem as condições de pgto q vai sair o vencimento e as parcelas

Como eu faço pra ligar tudo isso?

A principio eu fiz de um jeito q mostra os itens da venda APENAS mas com redundancia.. de uma lista de 4 itens, o primeiro é Bolacha Bauducco, o segundo é outro item e assim vai, e na hora de mostrar, os 4 itens sai escrito Bolacha Bauducco com o mesmo valor pra todas..

Como resolvo isso?

Link para o comentário
Compartilhar em outros sites

20 respostass a esta questão

Posts Recomendados

  • 0

atualizando o probl:

estou tentando mexer aki e já descobri parte do problema .. agora estou com probl so na parte do sumario .. lá tem vencimento, valor da prestação.. mesmo quie a compra foi em 3x la so mostra o valor de 1 prestação.. eu queria q fosse mostrado da 1,2 e 3º os valores iguais.. como faço isso? o quickrep ta ligado na query q mostra os itens.

outra coisa, quando o valor é bem quedrado é msotrado todas as casas decimais, por exemplo 123,3256987441 de valor da parcela

como posso definir com 2 algarismos dps da virgula e com o cifrão R$ ?

Link para o comentário
Compartilhar em outros sites

  • 0
tenho q criar um relatorio e estou usando do quickrep porém não tenho mta experiencia com relatorio.

eu habilitei as bands title/colummheader/summary/detail (não sei o q as outras fazem, também não sei como funciona o QRGroup.)

DiabloX3, para começar a entender um pouco, acesse este link (ref. Ramos da Informática) e baixe o arquivo do item 4 (Manual do Quick Report) - estudar é preciso! ;)

Se manjar bem inglês: Quick Reports Tutorial (ref. Aboult.com)

.. agora estou com probl so na parte do sumario .. lá tem vencimento, valor da prestação.. mesmo quie a compra foi em 3x la so mostra o valor de 1 prestação.. eu queria q fosse mostrado da 1,2 e 3º os valores iguais.. como faço isso? o quickrep ta ligado na query q mostra os itens.
isto porque provavelmente, você tem vários registros referentes a prestação e está usando uma banda que, como o nome diz, serve para apresentar um "resumo final" (é processado apenas no fim do relatório). Voce provavelmente precisará fazer uso de uma banda sub-detail para listar estas parcelas.

outra coisa, quando o valor é bem quedrado é msotrado todas as casas decimais, por exemplo 123,3256987441 de valor da parcela

como posso definir com 2 algarismos dps da virgula e com o cifrão R$ ?

Use a propriedade Mask do componente.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado Micheus .. o manual já baixei (está um pouco ruim de entender, tem mtas palavras estranhas, rs)

Sobre o sumary, a idéia seria +/- essa mesmo. No subdetail iria mostrar em cada produto buscado o que eu tiver na subdetail.. Suponhamos q tenha 3 produtos na venda, em cada linha da venda vai mostrar o vencimento da prestação e o numero da parcela. A idéia é colocar isso separado, no fim, mas que mostre todas as parcelas. Exemplificando:

50,00 Bolacha R$65,00

20,00 Suco daFruta R$60,00

15,00 Cx Bombom R$ 100,00

isso acima seria no detail. Se colocar subdetail e eu dividir isso em 3x, em cada linha dessas vai msotrar vencimento e parcela. O certo seria no fim mostrar :

Vencimento

20/10/2008 R$ 75,00

20/11/2008 R$ 75,00

20/12/2008 R$ 75,00

Ah, o mask deu certo. Obrigado

Link para o comentário
Compartilhar em outros sites

  • 0
.. o manual já baixei (está um pouco ruim de entender, tem mtas palavras estranhas, rs)
é eu esqueci de mencionar que a formatação não está muito boa, mas o conteúdo é bem abrangente (acha-se pouquíssima coisa sobre o quick). A idéia é a de que você conheça os componentes que compõe o quick e suas funcionalidades. Não dá para existir uma coisa definitiva, porque as possibilidades são muitas e cada caso é um caso. Se você souber o potencial de cada coisa, com um pouco de imaginação e paciência, você monta um quebra-cabeças que resultará no seu relatório (voce vai perceber isto mais abaixo). ;)

Sobre o sumary, a idéia seria +/- essa mesmo. No subdetail iria mostrar em cada produto buscado o que eu tiver na subdetail.. Suponhamos q tenha 3 produtos na venda, em cada linha da venda vai mostrar o vencimento da prestação e o numero da parcela. A idéia é colocar isso separado, no fim, mas que mostre todas as parcelas. Exemplificando:

50,00 Bolacha R$65,00

20,00 Suco daFruta R$60,00

15,00 Cx Bombom R$ 100,00

isso acima seria no detail. Se colocar subdetail e eu dividir isso em 3x, em cada linha dessas vai msotrar vencimento e parcela. O certo seria no fim mostrar :

Vencimento

20/10/2008 R$ 75,00

20/11/2008 R$ 75,00

20/12/2008 R$ 75,00

bom, você não deu detalhes sobre as tabelas e relacionamentos envolvidos (este é o primeiro ponto a ser avaliado para montar seu quebra-cabeças).

Voce falou inicialmente sobre ser um relatório de vendas, então a grosso modo, há uma tabela para registrá-la e vou considerá-la VENDAS. Cada venda, tem uma lista de itens que fazem parte da mesma (como os que você usou no exemplo) - vou considerá-la ITEM_VENDA e, por fim, parece-me que você tem uma outra lista de itens que se refere às condições de pagamento, onde você tem a data de vencimento e valor para cada data - vou considerá-la PARCELAS_VENDA.

Olhando uma estrutura como esta, a nossa tabela mestre seria VENDAS e as tabelas ITEM_VENDA e PARCELAS_VENDA seriam tabelas filhas (relacionadas a VENDAS por algum campo - COD_VENDA por ex.)

Traduzindo isto em QuickRep, a tabela mestre é o dataset de origem de dados do QuickRep (propriedade DataSet), logo os dados desta tabela serão os apresentados utilizando uma TQRBand do tipo rbDetail (ou seja, uma banda detalhe). As tabelas ITEM_VENDA e PARCELAS_VENDA são tabelas "filha" da tabela mestre, ou seja, se relacionam a esta através de COD_VENDA e contém várias linhas cada uma. Então, a impressão dos itens destas tabelas se faz através de bandas TQRSubDetail (ou se, são bandas sub-detail). Voce usará uma subdetail para cada um destes datasets e atribuirá cada um deles a respectiva banda através da propriedade DataSet da banda subdetail. Para os cabeçalhos das subdetail, você utilizar um TQRGroup e associa ele a sua propriedade HeaderBand

resultado final, seria algo como:

+- Detail ----------------------------------------------------+
| Cliente: Francisco Almeida
| CNPJ: 999999
| Endereço: xccvcvcv cvvxv x
|-------------------------------------------------------------
| Qrd.  Und  Descrição           Valor
+- SubDetail - Itens -----------------------------------------+
| 50,00      Bolacha            R$ 65,00
| 20,00      Suco daFruta       R$ 60,00
| 15,00 Cx   Bombom            R$ 100,00
+- SubDetail - HeaderBand ------------------------------------+
| Vencimento   Valor
+- SubDetail - Parcela ---------------------------------------+
| 20/10/2008   R$ 75,00
| 20/11/2008   R$ 75,00
| 20/12/2008   R$ 75,00
+-------------------------------------------------------------+

Veja que nesta estrutura, você não precisa de uma banda Summary.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

revivendo o tópico depois de uns meses heheh

é que estou fazendo 3 projetos separadamente, e como sou mandado, dou prioridade àquele que me é passado.

bom, só que voltei nesse caso do "relatório composto", a unica diferença é que agora estou usando o fortes report pois necessito da matricial

voltando novamente nesse projeto, eu fiz então como você falou micheus, só que não deu certo por um motivo. Usando apenas bandas detail não consigo mostrar os itens e as parcelas. A solução que achei então foi criar 2 sub detail e dentro deles coloquei um detail pra cada, e liguei os sub detail com os datasources e funcionou. Tem algum problema em deixar assim ou é mais viável de outro jeito?

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
... eu fiz então como você falou micheus, só que não deu certo por um motivo. Usando apenas bandas detail não consigo mostrar os itens e as parcelas.
DiabloX3, não entendo como não consegue. Observe que a estrutura que tentei passar tem justo como objetivo mostras estas informações. Talvez alguma coisa não tenha ficado corretamente configurada ou o lay-out que você usou não é similar ao que postei.

A solução que achei então foi criar 2 sub detail e dentro deles coloquei um detail pra cada, e liguei os sub detail com os datasources e funcionou. Tem algum problema em deixar assim ou é mais viável de outro jeito?.
apesar de eu achar que é uma solução estranha (no geral, você tem apenas uma banda detalhe, e n subdetails - abaixo da detalhe, não o inverso), se está funcionando deixa assim.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

A estrutura era essa mesma que voce desenhou Micheus, e o meu ficou exatamente igual, o que acontecia é que pra cada registro que eu tinha no Detail (vamos supor 3 itens) ele gerava 5 parcelas (por exemplo) no subdetail, não consegui fazer o subdetail aparecer só no fim depois do contador de registros do detail.

No meu caso, os dados do cliente eu não coloquei em Detail e sim em ColummHeader pois senao tambem apareceria n vezes e é pra aparecer um só.

Acredito que possa ter feito alguma ligação errada dos DataSources pra não ter dado certo como voce falou, mas assim está funcionando.

Aproveitando o tópico, o que eu necessito tambem, se puder me ajudar, é definir automático o numero de vias de impressao e quantidade de registros no mesmo formulário. O Jhonas andou passando uns links mas mesmo assim não achei o que queria. Meu formulário continuo é de meia folha e cabe vamos supor 6 itens + o sumario que tem uns totais. O problema que se eu colocar 10 itens ele imprimi os itens na mesma página só que o sumary sai na outra via. Eu queria deixar configurado pra imprimir até 6 registros +/- e se tiver mais que isso ele vai pra proxima pagina e continua lá.

O número de vias seria 2 sem ter que clicar na impressora e colocar manual.

Abraço

Link para o comentário
Compartilhar em outros sites

  • 0
o que acontecia é que pra cada registro que eu tinha no Detail (vamos supor 3 itens) ele gerava 5 parcelas (por exemplo) no subdetail, não consegui fazer o subdetail aparecer só no fim depois do contador de registros do detail.
DiabloX3, parece mesmo que a estrutura dos dados eram um pouco diferente do que pensei, já que seria mesmo a idéia de que para cada detalhe você teria as várias sub-details - mas beleza.

Aproveitando o tópico, o que eu necessito tambem, se puder me ajudar, é definir automático o numero de vias de impressao e quantidade de registros no mesmo formulário. O Jhonas andou passando uns links mas mesmo assim não achei o que queria. Meu formulário continuo é de meia folha e cabe vamos supor 6 itens + o sumario que tem uns totais. O problema que se eu colocar 10 itens ele imprimi os itens na mesma página só que o sumary sai na outra via. Eu queria deixar configurado pra imprimir até 6 registros +/- e se tiver mais que isso ele vai pra proxima pagina e continua lá.

O número de vias seria 2 sem ter que clicar na impressora e colocar manual.

Acho que você pode dar uma olhada neste tópico: Vias no Quickreport, assim.... Ele não está resolvido porque o que o colega quer não é exatamente o que eu estava pensando (as informações não vem de dataset), mas os conceitos que tentamos estabelecer lá podem lhe ajudar (veja também os links que postei lá).

Outro post para ler: Relatório Duplicado, Quick Report

E este especificamente sobre a questão limitação de itens por página: Repetir dados de Detail Band Qreport

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Consegui ter algumas ideias para resolver isso, apesar de ter falado que agora utilizo o fortes report, mas são bem parecidos heheh

a dúvida agora é que quando executo o comando .Print direto sem o Preview(); meu formulário de relatorio não atualiza a venda, ou seja, se eu fizer 3 vendas, ele imprimi as 2 ultimas igual a primeira. Pelo debug ele passa os parametros certos pro código da venda, mas quando executa o .print isso não se concretiza. Com o preview(); da certo, ele mostra na tela a venda que fiz e imprimi essa mesma, mas sem ele não está sendo possivel. O que posso fazer?

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Consegui ter algumas ideias para resolver isso, apesar de ter falado que agora utilizo o fortes report, mas são bem parecidos heheh
Vixe, foi mal. Esqueci completamente que você tinha dito isso no seu post anterior. Essa semana estou com a cabeça nas nuvens. :wacko:

No mais, eu pulo fora aqui, porque Fortes não é minha praia não. Acredito que algum outro colega possa lhe ajudar.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

ehehe

mas como voce resolveria isso no quick?

talvez possa me dar alguma ideia, como falei, os componentes e comandos são semelhantes

A sql da consulta da venda está correta, pois quando coloco o parametro do cod da venda ele tras os dados certinhos, é na hora do print que ele não está "atualizando"

abraços

Editado por DiabloX3
Link para o comentário
Compartilhar em outros sites

  • 0
a dúvida agora é que quando executo o comando .Print direto sem o Preview(); meu formulário de relatorio não atualiza a venda, ou seja, se eu fizer 3 vendas, ele imprimi as 2 ultimas igual a primeira. Pelo debug ele passa os parametros certos pro código da venda, mas quando executa o .print isso não se concretiza. Com o preview(); da certo, ele mostra na tela a venda que fiz e imprimi essa mesma, mas sem ele não está sendo possivel.
Bom, por analogia, isto que você relata estaria associado a forma como você está manipulando o dataset. Pode ser um evento errado ou coisa assim.

Se bem, que não avançar o dataset seria o pouco provável. O "erro" mais comum seria visualizar certinho no preview e ao mandar para a impressora repetir o último registro n vezes - pelo fato de não ter sido reposicionado o dataset antes da impressão definitiva (impressora).

Alguma possibilidade de você postar a parte, seja eventos ou chamadas, onde você está fazendo este controle de itens por página, de cópias, a preparação (os Before...). Talvez vendo o código dê para tentar visualizar algum problema associado ao sintoma citado.

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, não estou mandando repetir a impressao. Tentei fazer alguma coisa no AfterPrint pra que seja zerado a SQLs e deixa-las prontas para impressao novamente, mas não obtive sucesso

Parte do código que envio para a impressora. Está dentro do botao quer finaliza a venda

mensagem:= 'Venda realizada com sucesso!';
   Application.MessageBox(Pchar(mensagem), 'Informação', MB_OK+MB_ICONINFORMATION);

   subTotalPrint := 0;

 frmCaixa.qryImprimirVenda.Close;
 frmCaixa.qryImprimirVenda.SQL.Clear;
 frmCaixa.qryImprimirVenda.SQL.Add('SELECT V.VEN_DESCONTO, V.VEN_ARREDONDA, V.VEN_DATA, V.VEN_COMPRADOR, V.VEN_TOTAL, V.VEN_COD_PEDIDO, V.VEN_ORC, C.CLI_NOME, C.CLI_RG, C.CLI_CIDADE, C.CLI_UF, C.CLI_CODIGO, C.CLI_TELEFONE, C.CLI_ENDERECO,  C.CLI_CNPJ_CPF, U.VE_NOME, E.EST_DESCRICAO, '+' V.VEN_TIPO_VENDA, CP.PAR_DESCRICAO, CP.PAR_NUM FROM VENDAS V,  CLIENTES C, VENDEDOR U, ESTADO_PEDIDO E,  CONDICAO_PAGTO CP WHERE C.CLI_CODIGO = V.CLI_CODIGO AND E.EST_CODIGO = V.EST_CODIGO AND V.VE_CODIGO = U.VE_CODIGO '+' AND CP.PAR_CP_CODIGO = V.PAR_CP_CODIGO  AND VEN_COD_PEDIDO = :P_VEN_COD_PEDIDO');
 frmCaixa.qryImprimirVenda.ParamByName('P_VEN_COD_PEDIDO').AsString := frmCaixa.lblCodVenda.Caption;
 frmCaixa.qryImprimirVenda.Open;

 frmCaixa.qryRelCabecalho.Open;

 frmCaixa.qrItemVenda.Open;
 frmCaixa.qrItemVenda.First;
While Not frmCaixa.qrItemVenda.Eof do
begin

  if frmCaixa.qryImprimirVenda.FieldByName('VEN_TIPO_VENDA').AsString = 'P' then
   subTotalPrint := subTotalPrint + frmCaixa.qrItemVenda.fieldByName('TOTAL').AsFloat
  else
   subTotalPrint := subTotalPrint + frmCaixa.qrItemVenda.fieldByName('VISTA').AsFloat;

 frmCaixa.qrItemVenda.Next;
end;

 frmRelVendas1.lblSubTotal.Caption:= formatfloat('0.00', subTotalPrint);

    if frmCaixa.qryImprimirVenda.FieldByName('VEN_TIPO_VENDA').AsString = 'P' then
    begin
    frmRelVendas1.lblUnitario.DataField := 'ITE_VALOR_UNIT';
    frmRelVendas1.lblTotal.DataField := 'TOTAL'
    end
   else
   begin
    frmRelVendas1.lblUnitario.DataField := 'ITE_VALOR_VISTA';
    frmRelVendas1.lblTotal.DataField := 'VISTA';
   end;

 frmCaixa.qryRelCondPgto.Close;
 frmCaixa.qryRelCondPgto.SQL.Clear;
 frmCaixa.qryRelCondPgto.SQL.Add('SELECT CR_VENCIMENTO, CR_VALOR_PARCELA, CR_NUM_PARCELA FROM CONTAS_RECEBER WHERE VEN_COD_PEDIDO = :P_VEN_COD_PEDIDO');
 frmCaixa.qryRelCondPgto.ParamByName('P_VEN_COD_PEDIDO').AsString := frmCaixa.lblCodVenda.Caption;
 frmCaixa.qryRelCondPgto.Open;

 frmRelVendas1.frRelUm.Print;

Editado por DiabloX3
Link para o comentário
Compartilhar em outros sites

  • 0

Bom, até aqui o que eu ví é a preparação dos dados para o relatório e diz respeito a uma única venda (é o que me parece).

Mas no relatório, você não trata nenhum evento?

A questão aqui é imprimir mais que uma venda (comentário do seu post#11) ou imprimir uma mesma venda em n vias(comentário do seu post#9)? Só para a gente não se perder no raciocínio.

Outra pergunta: o dataset qrItemVenda será utilizado no relatório? Se sim, lembre-se de após o laço que você usa para totalizar os valores, novamente posicionar o dataset no início (frmCaixa.qrItemVenda.First)

Link para o comentário
Compartilhar em outros sites

  • 0

A questão agora era fazer 3 vendas por exemplo e a cada finalização mandar imprimir essa venda feita direto sem passar pelo preview.

Exato, o codigo aí prepara os dados pra impressao que é atualizada nos TRDBText do frRelUm (e alguns captions - eu peguei quase pronto o rel, nomes de campos e tipos de campos eu nem mexi).

Quanto ao qrItemVenda, ele é posicionado no começo toda vez que finaliza a venda. Quando vai realizar a venda no frmCaixa ele já está pronto.

bom Micheus, mexendo aqui e ali, adicionei um simples comando no fim do relatório que resolveu meu problema. No entando estou testando em uma impressora jato de tinta, quando for atualizar na loja, lá é matricial, mas acredito que não vai ter problema nenhum, só voltar a configurar o TRLDraftPrint.

Fiz o seguinte

frmRelVendas1.frRelUm.Prepare;
 frmRelVendas1.frRelUm.Print;
 frmFinalizaVenda.Close;

Adicionei o prepare. Agora ele está imprimindo a venda atual a cada vez que finalizado e não mantendo sempre a primeira. Não sei se foi a solução correta, quiça aparenta fixed :)

Qualquer comentário é bem vindo

p.s: aproveitando.. voce acha interessante usar esse prepare antes de abrir qualquer query? não sei se esse Prepare apenas "prepara" como o nome sugere ou se é importante mesmo utiliza-lo toda vez ...

Abraços

Editado por DiabloX3
Link para o comentário
Compartilhar em outros sites

  • 0
Quanto ao qrItemVenda, ele é posicionado no começo toda vez que finaliza a venda. Quando vai realizar a venda no frmCaixa ele já está pronto.
Perguntei, porque no código que você havia postado, um pouco abaixo do loop estava o print, sem o tal first.

Adicionei o prepare. Agora ele está imprimindo a venda atual a cada vez que finalizado e não mantendo sempre a primeira. Não sei se foi a solução correta, quiça aparenta fixed :)
O que até faz sentido. No caso do quick report, sem usar o preview também deve-se chamar Prepare para que o relatório seja gerado - se bem que o quick não faz impressão direta - ele gera um wmf que é enviado para a impressora.

p.s: aproveitando.. voce acha interessante usar esse prepare antes de abrir qualquer query?
Voce pode saber mais detalhes sobre sua função através do help. No caso deste método para o TQuery, consta:

Description

Call Prepare to have the BDE and a remote database server allocate resources for the query and to perform additional optimizations. Preparing a query consumes some database resources, so it is good practice to call UnPrepare once the query is no longer needed.

If the query will only be executed once, the application does not need to explicitly call Prepare or UnPrepare. Executing an unprepared query generates these calls automatically. However, if the same query is to be executed repeatedly, it is more efficient to prevent these automatic calls by calling Prepare and UnPrepare explicitly.

Note: When you change the text of a query at runtime, the query is automatically closed and unprepared.

Eu não chamo prepare, porque entendo que isto já é feito automaticamente.

No último parágrafo da descrição, logo no início diz: Se a query será executada apenas uma única vez, a aplicação não necessita chamar Prepare ou Unprepare explicitamente.

...continua: "Executando uma query não preparada, gera esta chamada automaticamente."

...e termina: "Entretanto, se a mesma query deve ser executada repetidamente, é mais eficiente evitar estas chamadas automáticas chamando Prepare e Unprepare explicitamente."

Na nota também diz: "Quando você modifica o texto da query, em run-time, a query é automaticamente fechada e "despreparada"."

Eu posso ter entendido errado esta última parte, e se alguém souber me dizer onde eu agradeço porque ela não deveria estar ali sem um motivo. Mas a verdade é que ao abrir uma consulta não preparada, ela é preparada caso não esteja e ao fechar a consulta ela é automaticamente "despreparada". Então, se eu abrir esta consulta de novo, não tem jeito - vai ter que ser preparada - seja na mão ou automaticamente. :blink:

Eu já conferi o código do TQuery em outra oportunidade e realmente ele faz isto, inclusive controla com uma variável interna se a query já está ou não preparada. Acabei de dar uma conferida na TIBQuery e seque com o mesmo procedimento. Então...

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

hehehe ta certo então, só que eu não palpitarei sobre as explicações ai porque não tenho cacife nenhum para isso ahahha

só uma outra questao Micheus, o delphi controla componente de impressao que não é do programa? Bom, na verdade não sei se é ou não, mas explico melhor: quando chamo o rel.print ele abre a tela pra escolher a impressora, nº de páginas, etc. O problema é que se eu clicar em não (não imprimir) ele fecha aquela janela só que não dá o

frmFinalizaVenda.Close;

o que me gera um problema nas generator do IBExpert e dá pau na venda. Ele só aceita se realmente eu mandar imprimir. Tem como fazer uma condição pra clicar nesse não da janela de impressao?

Abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Bom, na verdade não sei se é ou não, mas explico melhor: quando chamo o rel.print ele abre a tela pra escolher a impressora, nº de páginas, etc. O problema é que se eu clicar em não (não imprimir) ele fecha aquela janela só que não dá o
frmFinalizaVenda.Close;
o que me gera um problema nas generator do IBExpert e dá pau na venda.
DiabloX3, aqui parece mesmo a forma como foi implementado o método print do componente. O fato de ele não "voltar" e continuar para a próxima linha (que seria o esperado), sugere que ele possa está usando o comando Abort (não posso afirmar 100%). Se você tiver os fontes do componente, talvez você possa verificar isto. Para tirar a dúvida, você poderia acrescentar esta parte no código e verificar. Se for isto mesmo, você terá como saber que houve o cancelamento da impressão:
...
  frmRelVendas1.frRelUm.Prepare;
  try
    frmRelVendas1.frRelUm.Print;
  except
    ShowMessage('Abortou');
  end;
  frmFinalizaVenda.Close;
supondo que a mensagem apareça, então você confirmou o que penso e então você deve preparar seu código para o caso de a impressão ter ou não sido feita. Caso ela não seja, o seu processo de finalização da venda fica cancelado? Voce tem que verificar isto. Deve haver um motivo para você querer fechar a consulta só após a impressão. Mas se não houver problema, então simplesmente feche a consulta e depois chame o print.
...
  frmFinalizaVenda.Close;
  frmRelVendas1.frRelUm.Prepare;
  frmRelVendas1.frRelUm.Print;

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Micheus, coloquei o try pra testar lá e tirar nossa curiosidade e realmente, se clicar no Cancel aparece a mensagem "Abortou" e para tudo mesmo. Me foi bem útil para caso precise executar diferentes tipos de operação, mas no meu caso o imprimir é gerado para toda e qualquer venda (para controle dos donos, controle de relatório, enfim. Unica coisa que aconteceria quando clicasse no Cancel é não imprimir e limpar tudo o resto deixando pronto para nova venda, que é o que já estou fazendo só que utilizando da sua ultima sugestão (não sei como não pensei nisso antes ahaha) só que agora eu coloco pra imprimir na ultima linha de preogramação. Do jeito que tinha descrito, ele parava na hora que clicava nesse Cancel e não executava o que estava abaixo. Procedimento simples que passa despercebido. Obrigado Micheus.

Por enquanto estou sem problemas com esse relatório :)

Abraços

p.s: você responde MP? Queria perguntar algo não voltado a esse assunto.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...