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

Checklistbox E Quickreport


Carlos Rocha

Pergunta

Pus uma CheckListBox num Form com QuickReport e nada que faço para uma autenticação da cerot.

É o seguinte.

Tenho um campo que retorna 'A Vista' ou 'A Prazo' como opções de pagamento,

Eu quero autenticar o seguinte:

Se o campo tiver valor de 'A Prazo', a CheckListBox aparece no QuickReport.

Caso cotrario a CheckListBox não aparece.

Estou usando o código abaixo mas num está fucionando:

procedure TRPedidos.QRDBText5Print(sender: TObject; var Value: String);
begin
//     IF QryPedidosCondicaoPgto.Value = 'A Prazo' then
     IF QryPedidosCondicaoPgto.AsString = 'A Prazo' then
         begin
              CLBpgto.Visible := True;
              CPedidos.InicializaListaPgto;
         end
     else
         begin
            CLBpgto.Visible := False;
         end;
end;

Obs: o campo que recebe o QryPedidosCondicaoPgto.AsString é QRDBTextCondicaoPgto

Como fazer isso?

Eu descobri.

Parece que a CheckListBox não funciona no QuickReport.

Então terei que verificar quais opções estão selecioadas e colocalas como strig num componente de texto.

Mas como?

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Carlos Rocha, se entendir direito você estar tentando dizer no Relatório a forma de pagamento se é 'A Vista' ou 'A Prazo',

tenta colocar um qrlabel e após excultar a query você faz assim:

QryPedidos.close;
QryPedidos....
QryPedidos.open;

qrlabel1.caption := QryPedidos.fieldbyname('CondicaoPgto').value;

Vê se é isso?

Link para o comentário
Compartilhar em outros sites

  • 0

O Michels:

Preciso te amolar só mais um pouquinho. É o seguinte:

Lembra de que a CheckListBox agora grava no banco valores como '0 2 3 6', e não mais '15 dias 30 dias'??????

Pois é.

Preciso agora de uma função que leia em separado cada uma das opçoes e jogue no QuickReports para um campo de texto dessa forma:

Se o valor do banco vier '0 2 3 6' a função converta para 'Voce escolheu: 15 dias, 45 dias, 60 dias, 120 dias.'

15 dias

30 dias

45 dias

60 dias

75 dias

90 dias

120 dias

Só falta isso pra minha aplicação ficar pronta.

Muito Obrigado.

Um abraço.

Carlos Rocha

Link para o comentário
Compartilhar em outros sites

  • 0
Pus uma CheckListBox num Form com QuickReport e nada que faço para uma autenticação da certo.

...

Eu descobri.

Parece que a CheckListBox não funciona no QuickReport.

Carlos Rocha, que bom que descobriu sozinho.

Mas apenas para ficar claro a qualquer um que acompanhe este tópico: ao relatório QuickReport só podem ser adicionados componentes provenientes de sua paleta. Qualquer outra coisa, não estará ligada ao quick, mas sim ao form que o "hospeda".

Carlos Rocha, se entendir direito você estar tentando dizer no Relatório a forma de pagamento se é 'A Vista' ou 'A Prazo',

tenta colocar um qrlabel e após excultar a query você faz assim:

QryPedidos.close;
QryPedidos....
QryPedidos.open;

qrlabel1.caption := QryPedidos.fieldbyname('CondicaoPgto').value;
Vê se é isso?
Pirambu!, a idéia será por aí mesmo. No caso específico deste campo o Carlos Rocha poderia utilizar direto um TQRDBText ligado ao campo QryPedidosCondicaoPgto. Mas no que se refere aos prazos anteriormente marcados nas caixas, daí teria que utilizar o procedimento que você citou. A exemplo do que sugeri no tutorial que postei em resposta ao outro postdele, poderia ser utilizado um procedimento para inicializar o texto a ser passado ao QRLabel que você sugeriu:
function ConvertPrazos(OpcStr :string) :string;
const
  Delimitador = ',';
  Prazos :array[0..6] of string =
          (' 15 dias,', ' 30 dias,', ' 45 dias,',
           ' 60 dias,', ' 75 dias,', ' 90 dias,',
           '120 dias,');
var
  Idx :Integer;
begin
  Result := '';
  while OpcStr <> '' do
  begin
    Idx := Pos(Delimitador, OpcStr);
   // não encontrar o delimitador, significa que o
   // resto da string contém o último valor
    if Idx = 0 then
     // neste caso, marcamos posição como posterior ao último caracter
      Idx := Length(OpcStr) +1;
   // Concatena prazo
    Result := Result +Prazos[StrToInt(Copy(OpcStr, 1, Idx -1))];
   // elimina o item já processado da lista - em OpsStr
    Delete(OpcStr, 1, Idx);
  end;
  SetLength(Result, Length(Result) -1);;
end;

...
procedure TQRForm.QRBandBeforePrint(.....);
begin
 // habilita impressão dos prazos apenas se esta foi a opção cadastrada
  QRLabelPrazo.Enabled := QryPedidosCondicaoPgto.AsString = 'A Prazo';
 // monta o texto apenas se vai imprir esta opção
  if QRLabelPrazo.Enabled then
    QRLabelPrazo.Caption := ConvertPrazos(QryPedidosPrazoPgto.AsString); // suponde este o nome do campo
end;

Isso levando em conta que foram gravados dos índices marcados no CheckListBox, porque se foram armazenados os textos ,não há necessidade disto - é direto o campo no TQRDBText.

O Michels:

Preciso te amolar só mais um pouquinho. É o seguinte:

Lembra de que a CheckListBox agora grava no banco valores como '0 2 3 6', e não mais '15 dias 30 dias'??????

...

Carlos Rocha, esta parte da "conversa" o pessoal aqui não conhece - não misture as coisas! <_<

Quem lhe deu uma resposta neste post foi o Pirambu! não eu. ;)

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Essa não funcionou pois o que tem gravado no banco são os índices e não as opções de meses.

Function ConvertPrazos(OpcStr :string) :string;
const
  Delimitador = ' ';
  Prazos :array[0..6] of string = (' 15 dias,', ' 30 dias,', ' 45 dias,', ' 60 dias,', ' 75 dias,', ' 90 dias,', '120 dias,');
var
  Idx :Integer;
begin
  Result := '';
  while OpcStr <> '' do
  begin
    Idx := Pos(Delimitador, OpcStr);
   // não encontrar o delimitador, significa que o
   // resto da string contém o último valor
    if Idx = 0 then
     // neste caso, marcamos posição como posterior ao último caracter
      Idx := Length(OpcStr) +1;
   // Concatena prazo
    Result := Result +Prazos[StrToInt(Copy(OpcStr, 1, Idx -1))];
   // elimina o item já processado da lista - em OpsStr
    Delete(OpcStr, 1, Idx);
  end;
  SetLength(Result, Length(Result) -1);;
end;

procedure TRPedidos.PageHeaderBand1BeforePrint(Sender: TQRCustomBand;  var PrintBand: Boolean);
begin
// habilita impressão dos prazos apenas se esta foi a opção cadastrada
  QRLabel18.Enabled := QryPedidosCondicaoPgto.AsString = 'A Prazo';
// monta o texto apenas se vai imprir esta opção
  if QRLabel18.Enabled then
    QRLabel18.Caption := ConvertPrazos(QryPedidosListaPgto.AsString); // suponde este o nome do campo
end;

Deu certo.

Obrigado.

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,1k
    • Posts
      651,9k
×
×
  • Criar Novo...