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

Etiqueta De Preço Com Rave Report


tiberiusart

Pergunta

Tenho um programinha de cadastro de produtos, onde imprimo lista de produtos e de fornecedores.

Na lista de produto o campo valor sai R$ 1,00 normal, mas quando vou imprimir a etiqueta de preço

ele sai 1. Some o R$ e os zeros da dieita. como resolver isto.

SEGUE O CODIGO DA IMPRESSÃO DE ETIQUETA:

unit unEtiqueta;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, RpDefine, RpBase, RpSystem, StdCtrls, rpDevice, DB, ADODB,

Grids, DBGrids, jpeg, ExtCtrls, ShellApi;

type

TFrmEtiquetas = class(TForm)

RvSystem1: TRvSystem;

Button1: TButton;

ADOConnection1: TADOConnection;

ADOQuery1: TADOQuery;

Label1: TLabel;

Edit1: TEdit;

Label2: TLabel;

Edit2: TEdit;

Label3: TLabel;

Edit3: TEdit;

Label4: TLabel;

Edit4: TEdit;

Label5: TLabel;

Edit5: TEdit;

Label6: TLabel;

Edit6: TEdit;

Image1: TImage;

Label7: TLabel;

procedure Button1Click(Sender: TObject);

procedure RvSystem1Print(Sender: TObject);

procedure Label7Click(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

private

{ Private declarations }

public

{ Public declarations }

end;

var

FrmEtiquetas: TFrmEtiquetas;

implementation

{$R *.dfm}

procedure TFrmEtiquetas.Button1Click(Sender: TObject);

begin

RVSystem1.SystemPrinter.MarginBottom := 1;

RVSystem1.SystemPrinter.MarginLeft := 1;

RVSystem1.SystemPrinter.MarginTop := 1;

RVSystem1.SystemPrinter.MarginBottom := 1;

RVSystem1.SystemPrinter.Units := unCM;

RVSystem1.SystemPrinter.UnitsFactor := 2.54;

rpDev.Copies := 1;

RVSystem1.SystemPrinter.Copies := rpDev.Copies;

rpDev.Orientation := poPortrait;

RVSystem1.SystemPrinter.Orientation := rpDev.Orientation;

RVSystem1.SystemPreview.FormState := wsMaximized;

RVSystem1.SystemSetups := RVSystem1.SystemSetups - [ssAllowSetup];

rpDev.SelectPaper('A4',false);

RVSystem1.SystemPreview.RulerType := rtBothCm;

RVSystem1.Execute;

end;

procedure TFrmEtiquetas.RvSystem1Print(Sender: TObject);

Var Factor : Double;

CurLabel : Integer;

CurCol : Double;

CurRow : Double;

MarginTop : Double;

MarginLeft : Double;

LabelRow : Integer;

LabelRows : Integer;

LabelCols : Integer;

LabelWidth : Double;

LabelHeight : Double;

begin

//---------------------------------------------------------------------------

// Configurações externas do formulario de Etiquetas

//---------------------------------------------------------------------------

MarginLeft := StrToFloat(Edit1.Text);// Margem esquerda para impressao da primeira etiqueta

MarginTop := StrToFloat(Edit2.Text);// Margem superior para impressao da primeira etiqueta

LabelWidth := StrToFloat(Edit3.Text);// Largura da Etiqueta

LabelHeight := StrToFloat(Edit4.Text);// Altura da Etiqueta

LabelRows := StrToInt(Edit5.Text); // Numero de linhas de etiquetas

LabelCols := StrToInt(Edit6.Text); // Numero de colunas de etiquetas

//---------------------------------------------------------------------------

CurLabel := 0; // Retorna o numero da etiqueta que está sendo impressa

LabelRow := 0; // Retorna o numero atual da linha de etiquetas em impressao

ADOQuery1.Close;

ADOQuery1.SQL.Text := 'SELECT * FROM PRODUTOS';

ADOQuery1.Open;

RVSystem1.BaseReport.SetFont('Arial',8);

While not ADOQuery1.Eof do Begin

Factor := (CurLabel Mod LabelCols); // um pequeno artificio matematico pra calcular

CurCol := (Factor*LabelWidth)+MarginLeft; // a posicao de cada etiqueta dinamicamente.

CurRow := (LabelRow * LabelHeight) + MarginTop;

RVSystem1.BaseReport.GotoXY(CurCol,CurRow); // Imprime na posicao calculada acima

RVSystem1.BaseReport.Bold := True;

RVSystem1.BaseReport.PrintLeft( ADOQuery1.FieldByName('PRODUTO').AsString,CurCol); RVSystem1.BaseReport.NewLine;

RVSystem1.BaseReport.Bold := False;

******************************************************

RVSystem1.BaseReport.PrintLeft( ADOQuery1.FieldByName *('VALOR').AsString,CurCol);RVSystem1.BaseReport.NewLine; *

******************************************************

LINHA QUE ESTA DANDO O ERRO É ESTA MARCADA

RVSystem1.BaseReport.PrintLeft( ADOQuery1.FieldByName('FORNECEDOR').AsString,CurCol); RVSystem1.BaseReport.NewLine;

Inc(CurLabel);

//TROCA DE LINHA DE ETIQUETA

// Se preencheu uma linha de etiquetas, reposiciona na margem e calcula a posicao da proxima etiqueta

If Factor=LabelCols-1 Then Inc(LabelRow);

// TROCA DE PAGINA

// Se preencheu uma pagina de etiquetas, reinicializa a impressao

If LabelRow>=LabelRows Then Begin

LabelRow := 0;

RVSystem1.BaseReport.NewPage;

End;

ADOQuery1.Next;

End;

end;

procedure TFrmEtiquetas.Label7Click(Sender: TObject);

begin

ShellExecute(0,'open','http://www.aden.com.br','',nil,sw_shownormal);

end;

procedure TFrmEtiquetas.FormClose(Sender: TObject;

var Action: TCloseAction);

begin

Action := caFree;

end;

end.

Link para o comentário
Compartilhar em outros sites

18 respostass a esta questão

Posts Recomendados

  • 0

não sei te responder certo, não uso rave e não mexo com bd rsrs mas vo tenta ajudar

o tipo deste campo é oque, monetário?!

de qualquer forma, falando besteira ou não ai vai só pra você testar...

essa máscara vai transformar números inteiros em monetários ou seja,

1 fica 1,00 e por ai vai...

RVSystem1.BaseReport.PrintLeft('R$ ' + Formatfloat('###,###,##0.00', ADOQuery1.FieldByName('VALOR').AsFloat),CurCol);

espero ter ajudado

abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

Oi amigo, valeu a intenção mas não deu. Da este erro:

Error] unEtiqueta.pas(110): There is no overloaded version of 'FormatFloat' that can

be called with these arguments

E para piorar não sei ingles, mas não vou desanimar, quando tiver a resposta certa

posto aqui!

Até mais...

Link para o comentário
Compartilhar em outros sites

  • 0

hmmm

eu não me recordo o porque deste erro

tenta isso só pra testar

var

bla: Real;

ai você armazena o valor do campo na variavel bla

bla := ADOQuery1.FieldByName('VALOR').AsFloat;

ai você tenta

RVSystem1.BaseReport.PrintLeft('R$ ' + Formatfloat('###,###,##0.00', bla), CurCol);

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

Muito obrigado Churc, com esta dica funcionou perfeito.

Voce não só me ajudou como ajudou muitos outros, visto

que o post teve uma grande visitação.

Espero que os que de uma forma ou de outra tiram algum proveito da dica

pelo menos saibam agradecer a valioza colaboração.

Da minha parte fico muito grato, que Deus lhe abençoe!

Tiberio

Link para o comentário
Compartilhar em outros sites

  • 0
Guest - Tiberiusart -

Oi amigo Churc, não abusando da sua bondade volto aqui denovo.

Nesta mesma rotina eu preciso que ela imprima mais de 1 etiqueta por produto,

se tenho um produto com 5 unidades ela só imprime uma etiqueta, preciso

que ela imprima a mesma quandidade que foi cadastrada no BD.

Posso contar com a sua ajuda?

Link para o comentário
Compartilhar em outros sites

  • 0

ouu então, como eu falei num post acima, eu não manjo

mexer com rave, alias nunca mexi auhehua não mexo

com bd também, mas pela lógica seria algo assim

RvSystem1Print aqui é onde imprime as etiquetas certo

e você da um ADOQuery1.Next; pra ir pra próxima

então o que você tem a fazer é, armazenar em uma variável

a quantidade de unidades desse produto, e fazer um loop

antes de dar o ADOQuery1.Next;

exemplo

var

iCount, iUnidades: Integer;

begin

......

...

...

iUnidades := ADOQuery1.FieldByName('XXX').AsInteger;

onde XXX é o nome do campo que armazena a quantidade

for iCount := 1 to iUnidades do

begin

....aqui vai todo o codigo de impressão da etiqueta

sendo assim, sera impresso a quantidade de etiquetas do produto atual

end; //End loop

e só aqui você da um next

ADOQuery1.Next;

end;

o ADOQuery1.Next; tem que estar fora do Loop

entendeu mais ou menos rsrs?

só não sei se vai dar certo, mas pela lógica...

abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Ola Churc, vai ai o codigo:

unit unEtiqueta;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, RpDefine, RpBase, RpSystem, StdCtrls, rpDevice, DB, ADODB,

Grids, DBGrids, jpeg, ExtCtrls, ShellApi, DBClient;

type

TFrmEtiquetas = class(TForm)

RvSystem1: TRvSystem;

Button1: TButton;

ADOConnection1: TADOConnection;

ADOQuery1: TADOQuery;

Label1: TLabel;

Edit1: TEdit;

Label2: TLabel;

Edit2: TEdit;

Label3: TLabel;

Edit3: TEdit;

Label4: TLabel;

Edit4: TEdit;

Label5: TLabel;

Edit5: TEdit;

Label6: TLabel;

Edit6: TEdit;

Image1: TImage;

Label7: TLabel;

procedure Button1Click(Sender: TObject);

procedure RvSystem1Print(Sender: TObject);

procedure Label7Click(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

private

{ Private declarations }

public

{ Public declarations }

end;

var

FrmEtiquetas: TFrmEtiquetas;

implementation

{$R *.dfm}

procedure TFrmEtiquetas.Button1Click(Sender: TObject);

begin

RVSystem1.SystemPrinter.MarginBottom := 1;

RVSystem1.SystemPrinter.MarginLeft := 1;

RVSystem1.SystemPrinter.MarginTop := 1;

RVSystem1.SystemPrinter.MarginBottom := 1;

RVSystem1.SystemPrinter.Units := unCM;

RVSystem1.SystemPrinter.UnitsFactor := 2.54;

rpDev.Copies := 1;

RVSystem1.SystemPrinter.Copies := rpDev.Copies;

rpDev.Orientation := poPortrait;

RVSystem1.SystemPrinter.Orientation := rpDev.Orientation;

RVSystem1.SystemPreview.FormState := wsMaximized;

RVSystem1.SystemSetups := RVSystem1.SystemSetups - [ssAllowSetup];

rpDev.SelectPaper('A4',false);

RVSystem1.SystemPreview.RulerType := rtBothCm;

RVSystem1.Execute;

end;

procedure TFrmEtiquetas.RvSystem1Print(Sender: TObject);

Var

Factor : Double;

CurLabel : Integer;

CurCol : Double;

CurRow : Double;

MarginTop : Double;

MarginLeft : Double;

LabelRow : Integer;

LabelRows : Integer;

LabelCols : Integer;

LabelWidth : Double;

LabelHeight : Double;

V : Real;

iCount,iUnidades : Integer;

begin

//---------------------------------------------------------------------------

// Configurações externas do formulario de Etiquetas

//---------------------------------------------------------------------------

MarginLeft := StrToFloat(Edit1.Text);// Margem esquerda para impressao da primeira etiqueta

MarginTop := StrToFloat(Edit2.Text);// Margem superior para impressao da primeira etiqueta

LabelWidth := StrToFloat(Edit3.Text);// Largura da Etiqueta

LabelHeight := StrToFloat(Edit4.Text);// Altura da Etiqueta

LabelRows := StrToInt(Edit5.Text); // Numero de linhas de etiquetas

LabelCols := StrToInt(Edit6.Text); // Numero de colunas de etiquetas

//---------------------------------------------------------------------------

CurLabel := 0; // Retorna o numero da etiqueta que está sendo impressa

LabelRow := 0; // Retorna o numero atual da linha de etiquetas em impressao

ADOQuery1.Close;

ADOQuery1.SQL.Text := 'SELECT * FROM PRODUTOS';

ADOQuery1.Open;

iUnidades := ADOQuery1.FieldbyName('Qde').AsInteger;

RVSystem1.BaseReport.SetFont('Arial',8);

V:= ADOQuery1.FieldByName('VALOR').AsFloat;

While not ADOQuery1.Eof do begin

Factor := (CurLabel Mod LabelCols); // um pequeno artificio matematico pra calcular

CurCol := (Factor*LabelWidth)+MarginLeft; // a posicao de cada etiqueta dinamicamente.

CurRow := (LabelRow * LabelHeight) + MarginTop;

RVSystem1.BaseReport.GotoXY(CurCol,CurRow); // Imprime na posicao calculada acima

RVSystem1.BaseReport.Bold := False;

RVSystem1.BaseReport.PrintLeft( ADOQuery1.FieldByName('PRODUTO').AsString,CurCol); RVSystem1.BaseReport.NewLine;

RVSystem1.BaseReport.Bold := True;

RVSystem1.BaseReport.PrintLeft('R$ ' + Formatfloat('###,###,##0.00', V), CurCol);;RVSystem1.BaseReport.NewLine;

RVSystem1.BaseReport.Bold := False;

RVSystem1.BaseReport.PrintLeft( ADOQuery1.FieldByName('FORNECEDOR').AsString,CurCol); RVSystem1.BaseReport.NewLine;

RVSystem1.BaseReport.PrintLeft( 'NUMERO: '+Format('%0.5d',[Curlabel]),CurCol); RVSystem1.BaseReport.NewLine;

Inc(CurLabel);

//TROCA DE LINHA DE ETIQUETA

// Se preencheu uma linha de etiquetas, reposiciona na margem e calcula a posicao da proxima etiqueta

If Factor=LabelCols-1 Then Inc(LabelRow);

// TROCA DE PAGINA

// Se preencheu uma pagina de etiquetas, reinicializa a impressao

If LabelRow>=LabelRows Then Begin

LabelRow := 0;

RVSystem1.BaseReport.NewPage;

end;

end;

ADOQuery1.Next;

end;

procedure TFrmEtiquetas.Label7Click(Sender: TObject);

begin

ShellExecute(0,'open','http://www.qualquercoisa.com.br','',nil,sw_shownormal);

end;

procedure TFrmEtiquetas.FormClose(Sender: TObject;

var Action: TCloseAction);

begin

Action := caFree;

end;

end.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

opa

tente isso,

procedure TFrmEtiquetas.RvSystem1Print(Sender: TObject);

Var

Factor : Double;

CurLabel : Integer;

CurCol : Double;

CurRow : Double;

MarginTop : Double;

MarginLeft : Double;

LabelRow : Integer;

LabelRows : Integer;

LabelCols : Integer;

LabelWidth : Double;

LabelHeight : Double;

V : Real;

iCount,iUnidades : Integer;

begin

//---------------------------------------------------------------------------

// Configurações externas do formulario de Etiquetas

//---------------------------------------------------------------------------

MarginLeft := StrToFloat(Edit1.Text);// Margem esquerda para impressao da primeira etiqueta

MarginTop := StrToFloat(Edit2.Text);// Margem superior para impressao da primeira etiqueta

LabelWidth := StrToFloat(Edit3.Text);// Largura da Etiqueta

LabelHeight := StrToFloat(Edit4.Text);// Altura da Etiqueta

LabelRows := StrToInt(Edit5.Text); // Numero de linhas de etiquetas

LabelCols := StrToInt(Edit6.Text); // Numero de colunas de etiquetas

//---------------------------------------------------------------------------

CurLabel := 0; // Retorna o numero da etiqueta que está sendo impressa

LabelRow := 0; // Retorna o numero atual da linha de etiquetas em impressao

ADOQuery1.Close;

ADOQuery1.SQL.Text := 'SELECT * FROM PRODUTOS';

ADOQuery1.Open;

RVSystem1.BaseReport.SetFont('Arial',8);

While not ADOQuery1.Eof do

begin

iUnidades := ADOQuery1.FieldbyName('Qde').AsInteger;

V:= ADOQuery1.FieldByName('VALOR').AsFloat;

for iCount := 1 to iUnidades do

begin

Factor := (CurLabel Mod LabelCols); // um pequeno artificio matematico pra calcular

CurCol := (Factor*LabelWidth)+MarginLeft; // a posicao de cada etiqueta dinamicamente.

CurRow := (LabelRow * LabelHeight) + MarginTop;

RVSystem1.BaseReport.GotoXY(CurCol,CurRow); // Imprime na posicao calculada acima

RVSystem1.BaseReport.Bold := False;

RVSystem1.BaseReport.PrintLeft( ADOQuery1.FieldByName('PRODUTO').AsString,CurCol); RVSystem1.BaseReport.NewLine;

RVSystem1.BaseReport.Bold := True;

RVSystem1.BaseReport.PrintLeft('R$ ' + Formatfloat('###,###,##0.00', V), CurCol);;RVSystem1.BaseReport.NewLine;

RVSystem1.BaseReport.Bold := False;

RVSystem1.BaseReport.PrintLeft( ADOQuery1.FieldByName('FORNECEDOR').AsString,CurCol); RVSystem1.BaseReport.NewLine;

RVSystem1.BaseReport.PrintLeft( 'NUMERO: '+Format('%0.5d',[Curlabel]),CurCol); RVSystem1.BaseReport.NewLine;

Inc(CurLabel);

//TROCA DE LINHA DE ETIQUETA

// Se preencheu uma linha de etiquetas, reposiciona na margem e calcula a posicao da proxima etiqueta

If Factor=LabelCols-1 Then Inc(LabelRow);

// TROCA DE PAGINA

// Se preencheu uma pagina de etiquetas, reinicializa a impressao

If LabelRow>=LabelRows Then

Begin

LabelRow := 0;

RVSystem1.BaseReport.NewPage;

end;

end;

ADOQuery1.Next;

end;

end;

ixe nem tem como eu testar no delphi, qlq coisa posta ai

abraços

Link para o comentário
Compartilhar em outros sites

  • 0

talvez seja porque há várias unidades por produtos,

exemplo

você tem 300 produtos cadastrados, vamos supor que cada

um tenha 5 unidades, 5 unidades X 300 = 1500

neste exemplo serião 1500 etiquetas a serem geradas, o rave mostra algum progresso?

Talvez o que você acha que fica gerando páginas infinitas

é porque tem vários produtos e varias unidades sendo

assim um processo demorado

O código não acredito que esteja errado, apesar de não dar

pra mim testar mas se alguém viu algum erro posta ai...

abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Talvez o que você acha que fica gerando páginas infinitas

é porque tem vários produtos e varias unidades sendo

assim um processo demorado

Eu pensei a mesma coisa.
se alguém viu algum erro posta ai...
Desde que o colega tiberiusart tenha substituido o código que você passou (a linha: ADOQuery1.Next; estava fora do loop), não parece mesmo que haja outro motivo para permanecer em loop "infinito".
Link para o comentário
Compartilhar em outros sites

  • 0

Não deu!!! vou tentar explicar melhor:

Tenho a tabela produtos, Codprod,Produto,Qde,Preço....., o que eu quero é imprimir etiquetas com diversas quantidades diferentes Ex.

PRODUTO QDE PREÇO

A 3 0,00

B 1 0,00

C 1 0,0

D 10 0,0

Assim até completar a quantidade de etiquetas que cabem ne pagina, completando ela passa para a outra pagina.

Continuo tentando e espero que mais menbros postem comentarios, vito que pela visitação do tópico tem mais pessoas com o mesmo problema, por enquanto é só até mais amigo Churc, Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Ola Churc, por motivos de serviço fiquei fora por algum tempo e deixei de manter contato.

Quanto a quetão acima, resolvi de outra forma. Estou usando um programa externo para gerar as etiquetas,

apenas faço a leitura das mesmas e melhor ainda já vem com codigo de barra.

Grato pela sua atenção e de todos que deram seus comentarios.

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,3k
    • Posts
      652,5k
×
×
  • Criar Novo...