GARANTIR DESCONTO

Fórum Layout Nota Fiscal #343710

26/07/2007

0

Pessoal;

Preciso desenvolver um relatorio que emita uma nota fiscal por uam impressora matricial, o caso é que o usuario que informará as dimensoes dos dados impressos, ele informara ao sistema que o Campo X terá 4,5cm de altura e 2,0 cm de posição quanto a margem da esquerda para direita, o caso é como poderei enviar para impressora esses dados e imprimir os campos de acordo com a configuração do usuario??


Cd.wagner.sena

Cd.wagner.sena

Responder

Posts

26/07/2007

Vitor Alcantara

Eu gosto utilizar em meu programas o gerador de relatórios FortesReport pois ele tem um filtro que imprime em uma velocidade quase que parecida com a impressão direta, fazendo assim ficar muito mais fácil eu desenhar o form na tela e configurar o posicionamento dos campos em RunTime do que enviar direto para porta da impressora.
Uma coisa que geralmente atrapalha o posicionamento dos campos é que eles são passados em Pixels e não em Centímetros/Milímetros , para contornar isso eu utilizo uma pequena função que converte Milímetros para Pixels.
Aqui está a função:

Function MMToInc(Valor:Double):Integer;
var
  n : real;
  DC : integer;
begin
  dc := GetWindowDC(GetDesktopWindow);
  dc :=  GetDeviceCaps(dc,LOGPIXELSX);
  n := (Valor /10)*Dc /2.54;
  Result:= trunc(n);
end;


Dai é só você criar no banco ou em um arquivo os valores onde cada campo deverá se encontrar na posição Top e Left em milímetros em relação a RlBand que ele se encontra (Cabeçalho(btHeader) , Detalhe(btDetail) e Rodapé(btFooter)), ai é só posicionar os campos de acordo com os valores gravados no OnCreate do Form que irá conter o relatório.

Ex:
procedure TRelatNF.FormCreate(Sender: TObject);
begin
  NSelo := FormCriaRelNF.SpNFNumSelo.AsInteger;
  NForm := FormCriaRElNF.SpNFNumForm.AsInteger;
  With FormCriaRelNf do
  Begin  
  {Cabeçalho}
    CABECALHO.Height  := MMToInc(SpNFCab_Altura.Value);//Altura do cabesalho;
    {Rodapé}
    RODAPE.Height := MMToInc(SpNFRod_Altura.Value);//Altura do rodapé;
    {Margens do detalhe}
    Margem_Detalhe_Superior.Height := MMToInc(SpNFDet_Margem_Sup.Value);//Margem superior do detalhe
    Margem_Detalhe_Inferior.Height := MMToInc(SpNFDet_Margem_Inf.Value);//Margem inferior do detalhe

    {Campos do cabeçalho}
    DbCab_XSai.Top := MMToInc(SpNFCab_X_Saida_Top.Value);//Posição y do x da saída
    DbCab_XSai.Left := MMToInc(SpNFCab_X_Saida_Esq.Value);//Posição x do x da saída

    DbCab_XEnt.Top := MMToInc(SpNFCab_X_Entrada_Top.Value);//Posição y do x da entrada
    DbCab_XEnt.Left := MMToInc(SpNFCab_X_Entrada_Esq.Value);//Posição x do x da entrada

    DbNumNota.Top := MMToInc(SpNFCab_Num_Nota_Top.Value);//Posição y do nº da nota
    DbNumNota.Left := MMToInc(SpNFCab_Num_Nota_Esq.Value);//Posição x do nº da nota


    {1º linha do cabeçalho}
    DbCab_L1_NatOper.Top := MMToInc(SpNFCab_Linha1_Top.Value);
    DbCab_L1_CFOP.Top := MMToInc(SpNFCab_Linha1_Top.Value);
    DbCab_L1_NatOper.Left := MMToInc(SpNFCab_Nat_Oper_Esq.Value);
    DbCab_L1_CFOP.Left := MMToInc(SpNFCab_CFOP_Esq.Value);

    {2º linha do cabeçalho}
    DbCab_L2_Nome.Top := MMToInc(SpNFCab_Linha2_Top.Value);
    DbCab_L2_CNPJ.Top := MMToInc(SpNFCab_Linha2_Top.Value);
    DbCab_L2_Data.Top := MMToInc(SpNFCab_Linha2_Top.Value);
    DbCab_L2_Nome.Left := MMToInc(SpNFCab_RazaoSoc_Esq.Value);
    DbCab_L2_CNPJ.Left  := MMToInc(SpNFCab_CNPJ_Esq.Value);
    DbCab_L2_Data.Left  := MMToInc(SpNFCab_DataEmis_Esq.Value);
   ........
 



Responder

Gostei + 0

26/07/2007

Virus69

Eu sempre uso a rotina do RDPrint


procedure TFrmNotaFiscal.NOTAClick(Sender: TObject);
var
subtotal, total : currency;
linha : integer;
natureza : String[40];
begin
DM.IBClientes.close;
DM.IBClientes.SelectSQL.Clear;
DM.IBClientes.SelectSQL.add(´SELECT * FROM CLIENTES´);
DM.IBClientes.SelectSQL.ADD(´WHERE CODIGO = ´ + QuotedStr(dm.IBNotaCODCLI.Text) + ´´);
DM.IBClientes.Open;

total := 0;
// Parametros para o NOTA FISCAL...
rdprint1.TamanhoQteLinhas := 66; //66 Linhas (deve ser 1 quando for CUPOM)
rdprint1.TamanhoQteColunas := 96; // Largura da Bobina aprox. 7 cm (7 / 2.54 * 20)
rdprint1.FonteTamanhoPadrao := s20cpp; // Fonte Comprimido em 20 cpp
rdprint1.OpcoesPreview.Preview := FALSE;
RDprint1.PortaComunicacao := FRMPrincipal.EdImpressao.Text;
RDprint1.Abrir;

Inc (linha);
inc (linha);

// imprime novo cabecalho da nota...
RDprint1.imp (01,103,´X´);
RDprint1.impf(01,145,dm.IBNotaCODIGO.text,[expandido,negrito]);
RDprint1.imp (02,40,dm.IBUsuarioENDERECO.text);
RDprint1.imp (03,40,dm.IBUsuarioBAIRRO.text + ´ - ´ + dm.IBUsuarioCIDADE.text + ´ - ´ + dm.IBUsuarioUF.text);

natureza := dm.IBNotaNATUREZA.text;
RDprint1.imp (05,01,natureza);
RDprint1.imp (05,55,dm.IBNotaCFOP.text);
RDprint1.imp (05,110,dm.IBUsuarioINSCRG.text);
// Destinatario / Remetente

RDprint1.imp(08,02,dm.IBNotaNOME.value);
RDprint1.imp(08,110,dm.IBClientesCPFCNPJ.value);
RDprint1.imp(08,148,dm.IBNotaDTEMISSAO.text);
RDprint1.imp(09,02,dm.IBClientesENDERECO.value);
RDprint1.imp(09,83,dm.IBClientesBAIRRO.value);
RDprint1.imp(09,120,dm.IBClientesCEP.value);
RDprint1.imp(09,148,dm.IBNotaDTSAIDA.text);
RDprint1.imp(11,02,dm.IBClientesCIDADE.Value);
RDprint1.imp(11,65,dm.IBClientesFONE.Value);
RDprint1.imp(11,98,dm.IBClientesUF.value);
RDprint1.imp(11,110,dm.IBClientesRGINSC.value);
RDprint1.imp(13,02,dm.IBNotaOBS1.TEXT);

// Itens da Nota Fiscal...
linha := 18; // Linha inicial dos produtos...
dm.IBDetNota.first;
while not dm.IBDetNota.eof do
begin
RDprint1.imp(linha,02,dm.IBDetNotaCODPRODUTO.asstring);
RDprint1.imp(linha,15,dm.IBDetNotaDESCRICAO.value);
RDprint1.imp(linha,79,dm.IBDetNotaLOTE.value);
RDprint1.imp(linha,95,dm.IBDetNotaST.value);
RDprint1.imp(linha,99,DM.IBDetNotaMEDIDA.value);
RDprint1.impval(linha,107,´#0´,DM.IBDetNotaQUANT.value,[]);
RDprint1.impval(linha,123,´,0.00´, DM.IBDetNotaVALORUNITARIO.value,[]);
subtotal := DM.IBDetNotaQUANT.value * DM.IBDetNotaVALORUNITARIO.value;
total := total + subtotal;
RDprint1.impval(linha,145,´#,0.00´, subtotal, []);
RDprint1.imp(linha,156,dm.IBDetNotaICMS.text);
inc(linha);
DM.IBDetNota.next;
end;

RDprint1.impval(43,135,´,0.00´, DM.IBNotaTOTALNOTA.value,[]);
RDprint1.impval(43,02,´,0.00´, DM.IBNotaBASECALCULO.value,[]);
RDprint1.impval(43,30,´,0.00´, DM.IBNotaVALORICMS.value,[]);
RDprint1.impval(45,135,´,0.00´, DM.IBNotaTOTALNOTA.value,[]);
RDprint1.imp(47,96,´1´);
RDprint1.imp(47,105,dm.IBNotaPLACA.TEXT);
RDprint1.imp(57,110,dm.IBNotaDTEMISSAO.TEXT);
RDprint1.imp(58,110,´AA´ + ´ ´ + dm.IBNotaSELO.TEXT);
RDprint1.imp(53,02,´DSP CLIENTE ... ´ + dm.IBClientesDSP.TEXT);
RDprint1.imp(54,02,´DSP LCR ... 24330050009/99 ´);
RDprint1.imp(55,02,dm.IBNotaOBS3.TEXT);
RDprint1.impf(62,143,dm.IBNotaCODIGO.text,[expandido,negrito]);

RDprint1.fechar;
CLOSE;
end;


Responder

Gostei + 0

26/07/2007

Cd.wagner.sena

valeu pessoal as dicas de vcs foram de suma importancia...


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar