Array
(
)

Cancelar Nota

Brunoagbr
   - 15 fev 2006

Pessoal, estou desenvolvendo um sistema de notas fiscais, ja está quase pronto. Sou novo no delphi e estou tendo um probleminha... na verdade é uma duvida.

Bom, preciso colocar uma opção de cancelar notas... escolho o numero da nota e cancelo ela, o problema é o seguinte, quero que apareça no grid a nota cancelada na mesma posição que ele estava, e tem que aparecer no report tb. Não sei nem por onde começar... alguem pode me ajudar...

Agradeço desde ja.

Obrigado


Emrinfo
   - 15 fev 2006

Coloque um campo na tabela de nota fiscal com a indicacao cancelada (Sim ou Nao).


Brunoagbr
   - 16 fev 2006

e como eu faço para exibir isso no grid?


Caduengenheiro
   - 16 fev 2006

ola.. nao sei que tipo de dataset vc tá usando, mas toda vez que voce der um post na tabela (cancelando a nota, passa o campo cancelar para true), da um refresh na grid.. poderia até colocar 2 tipos de cores na grid.. uma para notas ativas e outra para notas canceladas...

nao sei se é exatamente isso que voce quer, mas se for, me dá um parecer que eu te passo o código


Martins
   - 16 fev 2006


Citação:
ola.. nao sei que tipo de dataset vc tá usando, mas toda vez que voce der um post na tabela (cancelando a nota, passa o campo cancelar para true), da um refresh na grid.. poderia até colocar 2 tipos de cores na grid.. uma para notas ativas e outra para notas canceladas...

nao sei se é exatamente isso que voce quer, mas se for, me dá um parecer que eu te passo o código


Boa!!!

vc pode incluir um campo booleano (Falso/Verdadeiro) na sua tabela q serveria de referencia, quando verdadeito Nota Cancelada e no grid vc verificaria e mudaria a cor apenas dos registros onde o valor for verdadeiro.

#Código


procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);
begin
if Table1.FieldByName(´Cancelada´).Value = True then
DBGrid1.Canvas.Brush.Color := clGreen
else
DBGrid1.Canvas.Brush.Color := clBlue;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawDataCell(Rect, Field, State);
end;


Se desejar mudar somente a cor da fonte.

#Código

procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);
begin

If Table1.FieldByName(´Cancelada´).Value = True then

Dbgrid1.Canvas.Font.Color:= clRed;

Dbgrid1.DefaultDrawDataCell(Rect, dbgrid1.columns[datacol].field, State);

end;


Boa sorte!!!


Brunoagbr
   - 16 fev 2006

Coloquei o código, consegui compilar normalmente, mais não acontece nada... oq esse evento faz (ondrawdatacell) quando ele acontece exatamente.

meu código ficou assim

procedure TfrmVisualizar.Grid_NotasDrawDataCell(Sender: TObject;
const Rect: TRect; Field: TField; State: TGridDrawState);
begin
if tbNotas.fieldbyname (´cancelada´).value = true then
grid_notas.canvas.brush.color := clGreen
else
grid_notas.canvas.Brush.color := clBlue;
grid_notas.canvas.fillrect(rect);
grid_notas.defaultdrawdatacell(rect,field,state);
end;

end.


Caduengenheiro
   - 16 fev 2006

2 coisas:

1 - vc criou o campo ´cancelada´ na tabela?
2 - toda vez que atualizar a grid, vc precisa remontá-la... esse evento ondrawcell é ativado toda vez que a grid está sendo montada... crie uma rotina que destrua a grid e crie ela de novo


Brunoagbr
   - 16 fev 2006


Citação:
2 coisas:

1 - vc criou o campo ´cancelada´ na tabela?
2 - toda vez que atualizar a grid, vc precisa remontá-la... esse evento ondrawcell é ativado toda vez que a grid está sendo montada... crie uma rotina que destrua a grid e crie ela de novo


sim criei um campo boolean com nome de ´Cancelada´ na tabela

como eu faço pra desmontar o grid e montar denovo, qual código devo usar?

Obrigado


Caduengenheiro
   - 16 fev 2006

a grosso modo eh assim


evento de mudar cor:

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var field:TField;
begin
if Simpledataset1.fieldbyname (´ativo´).value = ´S´ then
dbgrid1.canvas.brush.color := clGreen
else
dbgrid1.canvas.Brush.color := clBlue;
dbgrid1.canvas.fillrect(rect);
dbgrid1.defaultdrawdatacell(rect,column.Field,state);
end;



após o cara mudar o status do pedido (cancelado ou nao), adicione

dbgrid1.Columns.Clear;
dbgrid1.Columns.BeginUpdate;


Brunoagbr
   - 16 fev 2006

ok, agora eu consegui fazer... mais ainda tenho uma dúvida...

agora as notas canceladas estão destacadas, mais quando eu mando imprimir o report do grid a nota sai como se aidna existisse, preciso que na impressão saia como nota cancelada, mais não pode ser destacada com cor, pois a impressora é a laser...


Obrigado


Brunoagbr
   - 17 fev 2006

me ajudem!!!!!!!!!!!!!!!PLSssssss


Emerson
   - 17 fev 2006

coloque um qrlabel no report com a palavra ´CANCELADA´ e habilite-o se o campo indicar nota cancelada; desabilite-o se a nota não estiver cancelada.
qrlabel_cancelada.enabled := dataset.campo.asboolean;
faça isso no BeforePrint da banda em que for colocado esse label.
(como você não informou que relatório usa, suponho que seja o QR)

outra coisa, para que funcione o esquema de cores da grade, ao invés de:
dbgrid1.Columns.Clear;
dbgrid1.Columns.BeginUpdate;

altere a propriedade DefaultDrawing para False. (dessa forma as linhas acima não serão mais necessárias)


Brunoagbr
   - 17 fev 2006


Citação:
coloque um qrlabel no report com a palavra ´CANCELADA´ e habilite-o se o campo indicar nota cancelada; desabilite-o se a nota não estiver cancelada.
qrlabel_cancelada.enabled := dataset.campo.asboolean;
faça isso no BeforePrint da banda em que for colocado esse label.
(como você não informou que relatório usa, suponho que seja o QR)

outra coisa, para que funcione o esquema de cores da grade, ao invés de:
dbgrid1.Columns.Clear;
dbgrid1.Columns.BeginUpdate;

altere a propriedade DefaultDrawing para False. (dessa forma as linhas acima não serão mais necessárias)


eu uso o Rave Reports