Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

BRUNO AMABILE

[Resolvido] Imprimir em Delphi

Recommended Posts

Olá Pessoal, estou com um problema no código de impressão no sistema de notas fiscais que estou em desenvolvimento.

 

Acontece que a estrutura certa a se imprimir é assim

 

A D G

B E H

C F I

 

Mas ele esta imprimindo assim:

 

A

B

C

__D

__E

__F

____G

____H

____I

(Os underlines acima indicam espaço)

Por favor analisem o código e me informem

 



with XPrint do
  begin
    for I := 1 to 75 do
    begin
      if ConverteStrToLog(ArqNF.ReadString('NOTA','Visivel_'+StrZero(I,02),'F')) then
      begin
        Pos_Campo := I - 1;
        Condensado_C := ConverteStrToLog(ArqNF.ReadString('NOTA','Condensado_'+StrZero(I,02),'F'));
        linha_C      := StrToIntDef(ArqNF.ReadString('NOTA','linha_'+StrZero(I,02),'1'),1);
        coluna_C     := StrToIntDef(ArqNF.ReadString('NOTA','coluna_'+StrZero(I,02),'1'),1);
        if NF_Condensada then
          Condensado_C := False;
        if (Pos_Campo >= 18) and (Pos_Campo <= 25) then
        begin
          TabGlobal.DITNF.First;
   while not TabGlobal.DITNF.Eof do
          begin
            TabGlobal.DPRODUTO.Filtro.Text := 'pro_codigo = '+#39+TabGlobal.DITNF.pro_codigo.Conteudo+#39;
            TabGlobal.DPRODUTO.AtualizaSql;
            TabGlobal.DPRODUTO.First;
      if Pos_Campo = 18 then  // Código
            begin
           if Condensado_c then
                impf(linha_c,coluna_c,TabGlobal.DITNF.pro_codigo.Conteudo,[comp20])
              else
                imp(linha_c,coluna_c,TabGlobal.DITNF.pro_codigo.Conteudo);
            end
            else if Pos_Campo = 19 then // Descricao
            begin
              if Condensado_c then
                impf(linha_c,coluna_c,TabGlobal.DITNF.pro_descricao.Conteudo,[comp20])
              else
                imp(linha_c,coluna_c,TabGlobal.DITNF.pro_descricao.Conteudo);
            end
            else if Pos_Campo = 20 then // Qtde
            begin
              if TabGlobal.DITNF.pro_quantidade.Conteudo > 0 then
                if Condensado_c then
                  impf(linha_c,coluna_c,MascValor(TabGlobal.DITNF.pro_quantidade.Conteudo,'ZZZZ9,99'),[comp20])
                else
                  imp(linha_c,coluna_c,MascValor(TabGlobal.DITNF.pro_quantidade.Conteudo,'ZZZZ9,99'));
            end
            else if Pos_Campo = 21 then // UN
            begin
              if Condensado_c then
                impf(linha_c,coluna_c,TabGlobal.DPRODUTO.uni_codigo.Conteudo,[comp20])
              else
                imp(linha_c,coluna_c,TabGlobal.DPRODUTO.uni_codigo.Conteudo);
            end
            else if Pos_Campo = 22 then // CT
            begin
              if Condensado_c then
              begin
                impf(linha_c,coluna_c-3,Copy(TabGlobal.DPRODUTO.pro_classe_tr.Conteudo,01,01),[comp20]);
                impf(linha_c,coluna_c,Copy(TabGlobal.DPRODUTO.pro_classe_tr.Conteudo,02,04),[comp20]);
              end
              else
              begin
                imp(linha_c,coluna_c-3,Copy(TabGlobal.DPRODUTO.pro_classe_tr.Conteudo,01,01));
                imp(linha_c,coluna_c,Copy(TabGlobal.DPRODUTO.pro_classe_tr.Conteudo,02,04));
              end
            end
            else if Pos_Campo = 23 then // Unitário
            begin
              if TabGlobal.DITNF.pro_venda.Conteudo > 0 then
                if Condensado_c then
                  impf(linha_c,coluna_c,MascValor(TabGlobal.DITNF.pro_venda.Conteudo,'ZZZ.ZZ9,99'),[comp20])
                else
                  imp(linha_c,coluna_c,MascValor(TabGlobal.DITNF.pro_venda.Conteudo,'ZZZ.ZZ9,99'));
            end
            else if Pos_Campo = 24 then // Total
            begin
              if TabGlobal.DITNF.inf_total.Conteudo > 0 then
                if Condensado_c then
                  impf(linha_c,coluna_c,MascValor(TabGlobal.DITNF.inf_total.Conteudo,'ZZZZ.ZZ9,99'),[comp20])
                else
                  imp(linha_c,coluna_c,MascValor(TabGlobal.DITNF.inf_total.Conteudo,'ZZZZ.ZZ9,99'));
            end
            else if Pos_Campo = 25 then // ICMS
            begin
              if TabGlobal.DITNF.pro_icms.Conteudo > 0 then
                if Condensado_c then
                  impf(linha_c,coluna_c,MascValor(TabGlobal.DITNF.pro_icms.Conteudo,'Z9,99'),[comp20])
                else
                  imp(linha_c,coluna_c,MascValor(TabGlobal.DITNF.pro_icms.Conteudo,'Z9,99'));
            end;
            Inc(linha_c);
            TabGlobal.DITNF.Next;
          end;
        end
        else if Pos_Campo = 53 then
        begin
          if RetiraBrancos(TabGlobal.DNOTA_F.ntf_dados_1.Conteudo) <> '' then
          begin
            if Condensado_c then
              impf(linha_c,coluna_c,TabGlobal.DNOTA_F.ntf_dados_1.Conteudo,[comp20])
            else
              imp(linha_c,coluna_c,TabGlobal.DNOTA_F.ntf_dados_1.Conteudo);
            Inc(Linha_c);
          end;
          if RetiraBrancos(TabGlobal.DNOTA_F.ntf_dados_2.Conteudo) <> '' then
          begin
            if Condensado_c then
              impf(linha_c,coluna_c,TabGlobal.DNOTA_F.ntf_dados_2.Conteudo,[comp20])
            else
              imp(linha_c,coluna_c,TabGlobal.DNOTA_F.ntf_dados_2.Conteudo);
            Inc(Linha_c);
          end;
          if RetiraBrancos(TabGlobal.DNOTA_F.ntf_dados_3.Conteudo) <> '' then
          begin
            if Condensado_c then
              impf(linha_c,coluna_c,TabGlobal.DNOTA_F.ntf_dados_3.Conteudo,[comp20])
            else
              imp(linha_c,coluna_c,TabGlobal.DNOTA_F.ntf_dados_3.Conteudo);
            Inc(Linha_c);
          end;
          if RetiraBrancos(TabGlobal.DNOTA_F.ntf_dados_4.Conteudo) <> '' then
          begin
            if Condensado_c then
              impf(linha_c,coluna_c,TabGlobal.DNOTA_F.ntf_dados_4.Conteudo,[comp20])
            else
              imp(linha_c,coluna_c,TabGlobal.DNOTA_F.ntf_dados_4.Conteudo);
            Inc(Linha_c);
          end;
          if RetiraBrancos(TabGlobal.DNOTA_F.ntf_dados_5.Conteudo) <> '' then
          begin
            if Condensado_c then
              impf(linha_c,coluna_c,TabGlobal.DNOTA_F.ntf_dados_5.Conteudo,[comp20])
            else
              imp(linha_c,coluna_c,TabGlobal.DNOTA_F.ntf_dados_5.Conteudo);
            Inc(Linha_c);
          end;
        end
        else
        begin
          if Condensado_c then
            impf(linha_c,coluna_c,DadosNF[Pos_Campo],[comp20])
          else
            imp(linha_c,coluna_c,DadosNF[Pos_Campo]);
        end;
      end;
    end;
  end;
  XPrint.fechar;
  XPrint.Free;
  DadosNF.Free;
  ArqNF.Free;

Compartilhar este post


Link para o post
Compartilhar em outros sites

O imp e o impf são funções que você criou? O que elas fazem? Suspeito que você esteja imprimindo os registros sem preparar antes a linha de impressão... pela descrição que colocou, você lê e já imprime o registro, estou correto? Se sim, o que acontece é o seguinte: uma vez impressa a linha você não tem como simplesmente voltar e imprimir ao lado usando rotinas que enviam os dados diretos para a saída da impressora, pois já terá dado um salto de linha quando for imprimir o próximo registro.... tente montar a linha de saída da forma que deseja (usando vetores ou listas talvez?) e só depois imprima-a.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

O imp e o impf são funções que você criou? O que elas fazem? Suspeito que você esteja imprimindo os registros sem preparar antes a linha de impressão... pela descrição que colocou, você lê e já imprime o registro, estou correto? Se sim, o que acontece é o seguinte: uma vez impressa a linha você não tem como simplesmente voltar e imprimir ao lado usando rotinas que enviam os dados diretos para a saída da impressora, pois já terá dado um salto de linha quando for imprimir o próximo registro.... tente montar a linha de saída da forma que deseja (usando vetores ou listas talvez?) e só depois imprima-a.

 

[]'s

 

 

O imp e o impf são funçoes do xprint. É verdade, ele está lendo e imprimindo. Acontece que em outra parte do código, numa outra impressão, está tudo ok, até porque o layout já esta programado, mas nesse trecho de código o usuário que define o layout, campo por campo.

 

Da um molhada no código que esta tudo ok:

 


if XPrint.setup then
    begin
      qtde_itens := tamanho_vd - 07 - 12;
      Final := False;
      X_Total := 0;
      TabGlobal.DITVENDA.First;
      cl := 10;
      Cabecalho;
      while not TabGlobal.DITVENDA.Eof do
      begin
        inc(cl);
        if cl-10 > Qtde_itens then
        begin
          Final := False;
          Rodape;
          XPrint.Novapagina;
          Cabecalho;
          cl := 11;
        end;
        XPrint.imp(cl,02,TabGlobal.DITVENDA.PRO_CODIGO.Conteudo);
        if Length(Trim(TabGlobal.DITVENDA.PRO_CODIGO.Conteudo)) < 16 then
        XPrint.imp(cl,19,TabGlobal.DPRODUTO.UNI_CODIGO.Conteudo);
        XPrint.imp(cl,23,Copy(TabGlobal.DITVENDA.PRO_DESCRICAO.Conteudo,01,24));
        XPrint.imp(cl,48,MascValor(TabGlobal.DITVENDA.PRO_QUANTIDADE.Conteudo,'ZZZ9,999'));
        //XPrint.imp(cl,57,MascValor(TabGlobal.DITVENDA.PRO_VENDA.Conteudo,'ZZZ.ZZ9,99'));
        XPrint.imp(cl,57,MascValor(TabGlobal.DITVENDA.IEC_UNITARIO.Conteudo,'ZZZ.ZZ9,99'));
        XPrint.imp(cl,68,MascValor(CalculoCorreto(TabGlobal.DITVENDA.pro_quantidade.Conteudo,TabGlobal.DITVENDA.iec_unitario.Conteudo,'*',02),'ZZZZ.ZZ9,99'));
        X_total := CalculoCorreto(X_Total,CalculoCorreto(TabGlobal.DITVENDA.pro_quantidade.Conteudo,TabGlobal.DITVENDA.iec_unitario.Conteudo,'*',02),'+',02);
        TabGlobal.DITVENDA.Next;
      end;
      final := True;
      Rodape;
    end;
    XPrint.fechar;
  end;
  XPrint.Free;
  Close;
end;

e aí?

http://forum.imasters.com.br/public/style_emoticons/default/natal_ohmy.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

O porque deve estar ligado diretamente as funções imp e impf.... no exemplo que postou, o código está estruturado usando apenas o imp, que deve mandar a impressão sem mudar de linha... já no outro caso, você deve estar executando (eu suponho) os impf, dando assim o comando para mudança de linha... já debugou para ver exatamente onde está entrando cada impressão exatamente? Dê uma analisada em qual a diferença entre a imp e a impf... uma deve imprimir sem pulo de linha e a outra com o pulo (eu suponho, não tenho o delphi aqui no trampo).

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

O porque deve estar ligado diretamente as funções imp e impf.... no exemplo que postou, o código está estruturado usando apenas o imp, que deve mandar a impressão sem mudar de linha... já no outro caso, você deve estar executando (eu suponho) os impf, dando assim o comando para mudança de linha... já debugou para ver exatamente onde está entrando cada impressão exatamente? Dê uma analisada em qual a diferença entre a imp e a impf... uma deve imprimir sem pulo de linha e a outra com o pulo (eu suponho, não tenho o delphi aqui no trampo).

 

[]'s

 

Cara.. muito obrigado pela ajuda.. o erro, é que quando a variavel pos_campo ia para o valor 18 ele imprimia o codigo, quando ia para a posição 24 imprimia a descrição. E eu só tinha que imprimir tudo de uma vez.

 

Consegui perceber isso com o depurador. Vlw mesmo http://forum.imasters.com.br/public/style_emoticons/default/natal_wink.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tranquilo, é errando (e debugando) que a gente aprende rssss.... o que importa é que conseguiu achar o problema e resolvê-lo.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.