Distribuição dos Registro em Etiquetas ???

Delphi

02/05/2005

Gostaria de saber como distribuir os registros em etiquetas de 5 (cinco) colunas, porem, esta distribuição tem que se dá na horizontal, para que não haja prejuizo ou desperdicio de etiqueta, haja vista, fiz o scritp em sql e devidamente testado porem quando insiro os dados nas etiquetas (Relatorio feito atraves do Quick Report), esta preenchendo por colunas (ou melhor, na vertical ao inves de preencher na horizontal). Por gentiliza como devo proceder com esta dificuldade em inserir os dados na horizontal. Por favor, me ajudem atraves de dicas, sugestoes e exemplos praticos para que eu possa resolver este problema. :?: :?: :?:


Wly

Wly

Curtidas 0

Respostas

Gandalf.nho

Gandalf.nho

02/05/2005

Pelo que sei não dá para fazer isso no QuickReport, já que é o comportamento normal dele. O que vc pode fazer é enviar ´registros em branco´ antes dos registros normais para fazer a impressão das etiquetas começar na linha e coluna desejadas e assim não desperdiçar papel (é assim que faço)


GOSTEI 0
Wly

Wly

02/05/2005

Pelo que sei não dá para fazer isso no QuickReport, já que é o comportamento normal dele. O que vc pode fazer é enviar ´registros em branco´ antes dos registros normais para fazer a impressão das etiquetas começar na linha e coluna desejadas e assim não desperdiçar papel (é assim que faço)


Então por gentilesa mostre este seu exemplo :?: E como devo fazer este tipo de lançamento em branco, não sabendo fazer isso ??? Exemplefique para mim ... Atencipadamente agradeço pela ajuda 8)


GOSTEI 0
Anfm

Anfm

02/05/2005

wly,

A solução que eu criei, não sei se é a mais correta, mas foi a solução q eu encontrei.

Eu crio um relatório no quick report usando qrlabels em vez de qrdblabels criando quantas colunas eu preciso.

Ex: 5 colunas - 5 QRLabels alinhados nas posições corretas de cada um.

Crio uma váriável para dizer qual linha do relatório estou
  private
    CurrentIndex: integer;


No evento BeforePrint

procedure Tqretiqueta.QuickRepBeforePrint(Sender: TCustomQuickRep;
  var PrintReport: Boolean);
begin
CurrentIndex := 0;
tbetiqueta.DatabaseName := diretorio;
tbetiqueta.Open;
tbetiqueta.First;
end;


E no evento OnNeedData

procedure Tqretiqueta.QuickRepNeedData(Sender: TObject;
  var MoreData: Boolean);
var
 preco : string;
begin

  MoreData := (not tbetiqueta.eof);

  if MoreData then
  begin
    qrlnomeloja1.Caption := NomeLoja;
    qrlcodbar11.Caption := ´*´+tbetiqueta.fieldbyname(´Referencia´).AsString+´*´;
    tbetiqueta.Next;

    qrlnomeloja2.Caption := NomeLoja;
    qrlcodbar21.Caption := ´*´+tbetiqueta.fieldbyname(´Referencia´).AsString+´*´;
    tbetiqueta.Next;

    qrlnomeloja3.Caption := NomeLoja;
    qrlcodbar31.Caption := ´*´+tbetiqueta.fieldbyname(´Referencia´).AsString+´*´;
    tbetiqueta.Next;

 end;

  Inc(CurrentIndex);
end;


Espero ter ajudado.


GOSTEI 0
Wly

Wly

02/05/2005

[b:31527640cf] Prezado colega do forum veja minha procedure [/b:31527640cf]
Como é que vc criou as cinco 5 colunas ??? de que forma em simple detail ??? Observe a procedure ...

procedure TFrmSelEtiqSapato.btnPreviewClick(Sender: TObject);
Const SqlTmpEtiqSapato : String =
      //********** Seleção do Pedido para tabela temporaria ********
      ´Select calcado as Referencia, cores.cor, tam33, tam34,     ´+
      ´tam35, tam36, tam37, tam38, tam39                          ´+
      ´from itens_ped_calcado,cores                               ´+
      ´where itens_ped_calcado.cor=cores.cod_cor                  ´+
      ´and itens_ped_calcado.pedcalcado=:prnPedido                ´;
      SqlTmpPrintSapato : String =
      //************ Inserir os Sapatos na tabela temporaria *******
      ´Insert Into Tmp_EtiqSapato (Referencia,Cor,Tamanho) Values ´+
      ´(:prnReferencia,:prnCor,:prnTamanho)                       ´;
      SQL_Sapatos : String =
      ´Select Referencia,Cor,Tamanho From Tmp_EtiqSapato  ´;
var
  I,J,K,L,M,A,B : Integer;
begin
  dm.tblsapato.EmptyTable;
  with dm.qrySelect do
    begin
      Close;
      SQL.Clear;
      SQL.Add(SqlTmpEtiqSapato);
      ParamByName(´prnPedido´).asInteger := StrToInt(edtPedido.text);
      Open;
      First;
      While not Eof do
        begin
          T33:= 0;T34:= 0;T35:= 0;T36:= 0;T37:= 0;T38:= 0;T39:= 0;
          T33 := FieldByName(´Tam33´).AsInteger;
          if T33 > 0 then
            for I:= 1 to T33 do
              begin
                With dm.qryTmpSelect do
                  begin
                    Close;
                    SQL.Clear;
                    SQL.Add(SqlTmpPrintSapato);
                    ParamByName(´prnReferencia´).asString := dm.qrySelect.fieldbyName(´Referencia´).AsString;
                    ParamByName(´prnCor´).asString        := dm.qrySelect.fieldbyName(´Cor´).AsString;
                    ParamByName(´prnTamanho´).asString    := ´33´;
                    ExecSQL;
                  end;
              end;
          T34 := FieldByName(´Tam34´).AsInteger;
          if T34 > 0 then
            for J:= 1 to T34 do
              begin
                With dm.qryTmpSelect do
                  begin
                    Close;
                    SQL.Clear;
                    SQL.Add(SqlTmpPrintSapato);
                    ParamByName(´prnReferencia´).asString := dm.qrySelect.fieldbyName(´Referencia´).AsString;
                    ParamByName(´prnCor´).asString        := dm.qrySelect.fieldbyName(´Cor´).AsString;
                    ParamByName(´prnTamanho´).asString    := ´34´;
                    ExecSQL;
                  end;
              end;
          T35 := FieldByName(´Tam35´).AsInteger;
          if T35 > 0 then
            for K:= 1 to T35 do
              begin
                With dm.qryTmpSelect do
                  begin
                    Close;
                    SQL.Clear;
                    SQL.Add(SqlTmpPrintSapato);
                    ParamByName(´prnReferencia´).asString := dm.qrySelect.fieldbyName(´Referencia´).AsString;
                    ParamByName(´prnCor´).asString        := dm.qrySelect.fieldbyName(´Cor´).AsString;
                    ParamByName(´prnTamanho´).asString    := ´35´;
                    ExecSQL;
                  end;
              end;
          T36 := FieldByName(´Tam36´).AsInteger;
          if T36 > 0 then
            for L:= 1 to T36 do
              begin
                With dm.qryTmpSelect do
                  begin
                    Close;
                    SQL.Clear;
                    SQL.Add(SqlTmpPrintSapato);
                    ParamByName(´prnReferencia´).asString := dm.qrySelect.fieldbyName(´Referencia´).AsString;
                    ParamByName(´prnCor´).asString        := dm.qrySelect.fieldbyName(´Cor´).AsString;
                    ParamByName(´prnTamanho´).asString    := ´36´;
                    ExecSQL;
                  end;
              end;
          T37 := FieldByName(´Tam37´).AsInteger;
          if T37 > 0 then
            for M:= 1 to T37 do
              begin
                With dm.qryTmpSelect do
                  begin
                    Close;
                    SQL.Clear;
                    SQL.Add(SqlTmpPrintSapato);
                    ParamByName(´prnReferencia´).asString := dm.qrySelect.fieldbyName(´Referencia´).AsString;
                    ParamByName(´prnCor´).asString        := dm.qrySelect.fieldbyName(´Cor´).AsString;
                    ParamByName(´prnTamanho´).asString    := ´37´;
                    ExecSQL;
                  end;
              end;
          T38 := FieldByName(´Tam38´).AsInteger;
          if T38 > 0 then
            for B:= 1 to T38 do
              begin
                With dm.qryTmpSelect do
                  begin
                    Close;
                    SQL.Clear;
                    SQL.Add(SqlTmpPrintSapato);
                    ParamByName(´prnReferencia´).asString := dm.qrySelect.fieldbyName(´Referencia´).AsString;
                    ParamByName(´prnCor´).asString        := dm.qrySelect.fieldbyName(´Cor´).AsString;
                    ParamByName(´prnTamanho´).asString    := ´38´;
                    ExecSQL;
                  end;
              end;
          T39 := FieldByName(´Tam39´).AsInteger;
          if T39 > 0 then
            for A:= 1 to T39 do
              begin
                With dm.qryTmpSelect do
                  begin
                    Close;
                    SQL.Clear;
                    SQL.Add(SqlTmpPrintSapato);
                    ParamByName(´prnReferencia´).asString := dm.qrySelect.fieldbyName(´Referencia´).AsString;
                    ParamByName(´prnCor´).asString        := dm.qrySelect.fieldbyName(´Cor´).AsString;
                    ParamByName(´prnTamanho´).asString    := ´39´;
                    ExecSQL;
                  end;
              end;
          Next;
        end;
    end;
    Try
    Application.CreateForm(TFrmEtiqSapato, FrmEtiqSapato);
      with FrmEtiqSapato do
        begin
          qrySapato.Close;
          qrySapato.SQL.Clear;
          qrySapato.SQL.Add(SQL_Sapatos);
          qrySapato.Open;
          Sapato.Preview;
        end;
    Finally
      FrmEtiqSapato.Free;
      dm.tblsapato.EmptyTable;
    end;
end;



GOSTEI 0
Anfm

Anfm

02/05/2005

Fiz um relatório simples, sem ligação a nenhum dataset. Na banda Detail eu coloco os labels, se vc quer fazer 5 colunas, vc deverá colocar 5 labels um ao lado do outro alinhados como vc deseja imprimir, e através do código jogar os valores neles.


GOSTEI 0
Marcio.theis

Marcio.theis

02/05/2005

Quando quero fazer este tipo de impressão de etiquetas, normalmente seleciono o papel customsize e defino o tamanho do quickreport do mesmo tamanho da etiqueta, ou seja, primeiro ele ira preencher os 5 registros na horizontal e depois pegar mais uma página e preencher mais 5, o único problema fica no momento de saltar de uma página para a outra, ai terá que ficar testando até achar a posição certa.
Mas é pelo menos desta forma que eu utilizo e da certo...


GOSTEI 0
Wly

Wly

02/05/2005

[quote:b68e58fa35=´/]/]@t´]Quando quero fazer este tipo de impressão de etiquetas, normalmente seleciono o papel customsize e defino o tamanho do quickreport do mesmo tamanho da etiqueta, ou seja, primeiro ele ira preencher os 5 registros na horizontal e depois pegar mais uma página e preencher mais 5, o único problema fica no momento de saltar de uma página para a outra, ai terá que ficar testando até achar a posição certa.
Mas é pelo menos desta forma que eu utilizo e da certo...[/quote:b68e58fa35]

Cara é o seguinte fiz o que disse porem estou com problemas de salto de pagina. Como evitar este salto de pagina, um vez a estiqueta contem varias linhas, Ok ??? Outra coisa no preview todos os dados estão aparecendo, ou seja, a cada 5 (cinco) registro aparece um nova pagina, OK !!!, no meu teste deu um total de 12 paginas, ficando inviavel, principalmente por a impressora esta dando um salto de pagina muinto grande (melhor dizendo um salto normal, porem no começo da pagina seguinte). A impressora que estou utilizando é uma LX-300+, como fazer para que ele evite este salto ???


GOSTEI 0
Marcio.theis

Marcio.theis

02/05/2005

O que vc terá de fazer é teste e configurações até chegar no ponto certo...
Eu tenho uma etiqueta aqui desta forma que é de duas colunas, ela esta configurada com o Top e Button = 0 e o Left e Right = 3, onde que o papel é Custom Size com o tamanho de 180,00 X 24,00, tendo o detail um tamanho de 22,49.


GOSTEI 0
Wly

Wly

02/05/2005

[quote:3a1aa85752=´/]/]@t´]O que vc terá de fazer é teste e configurações até chegar no ponto certo...
Eu tenho uma etiqueta aqui desta forma que é de duas colunas, ela esta configurada com o Top e Button = 0 e o Left e Right = 3, onde que o papel é Custom Size com o tamanho de 180,00 X 24,00, tendo o detail um tamanho de 22,49.[/quote:3a1aa85752]

Mas me diga como vc fez para evita o salto de pagina, pois eu fiz, a mesma configuração sua, porem continua saltando pagina !!!


GOSTEI 0
Marcio.theis

Marcio.theis

02/05/2005

Nas configurações da impressora você deve de setar o tipo de papel igual a custom e a área não imprimível deve de ser 100, 100, 0, 0.


GOSTEI 0
Thesketh

Thesketh

02/05/2005

Pessoa, eu precisei criar um relatório de etiquetas com o quickreport. A etiqueta era a da pimaco 6180 (3 colunas, 10 linhas). A solução q eu encontrei foi a seguinte:

Montei no quickreporte as configs da etiqueta, assim a banda detail ficou certinha com o tamanho da etiqueta.

Agora quanto essa parte dos espaços eu resolvi assim:

Na minha tela pra selecionar os registros pra imprimir tem um campo pro usuário indicar em qual etiqueta ele quer que comece a impressão. Então eu tenho uma tabela temporária no meu banco de dados especifica pra imprimir as etiquetas, ai quando o usuário clica em gerar etiquetas, eu monto a tabela exatamente como eu quero, inserindo no inicio quantos registros em branco eu precisar e depois os dados necessários para as etiquetas. Funcionou direitinho.

Não sei se é a forma mais correta, uma vez que eu tenho que ficar gravando os dados no banco de dados mesmo que temporariamente.

Qualquer sugestão pra resolver essa questão é bem vinda.

Valeu!!!


GOSTEI 0
POSTAR