Fórum Impressão em 40 colunas 10 vezes sendo o ultimo cortezia, tem como ? #393888

18/01/2011

0

Olá a todos e obrigado a qualquer ajuda,

Meu cenário é assim, tenho um sistema onde imprimo um ticket com a descrição, valor, taxa e etc, porem, terei uma taxa que terá que imprimir 10 tickets e o último como cortezia, exemplo, pacote de fisioterapia é R$ 250,00, terei que imprimir 10 de R$ 25,00 e mais 1 com valor R$ 0,00 ou CORTEZIA, já quebrei a cabeça tentando fazer isso, meu código de impressão é esse:

procedure TForm_Recebimentos.EmiteCupom;
var
  SaltaLinha  : string;
  i          : integer;
  Nro_Tickets : integer;

begin
    //Impressão de cupom em Impressora de 40 Colunas
   
    //Le o arquivo INI
    ArqIni := TIniFile.Create(ExtractFilePath(Paramstr(0))+FileName);
    PortaRecibo := ArqIni.ReadString('WCaixa', 'PortaRecibo', '');

    //Le Nmero de Linhas a Saltar
    SaltaLinha := ArqIni.ReadString('WCaixa', 'NumeroLinhasASaltar', '');

    //Pega Porta Com1, LPT1 conforme Conexao.ini
    AssignFile(Impressora, PortaRecibo);
    //AssignFile(Impressora, 'LPT1:');

    //Abre a Porta da Impressora
    Rewrite(Impressora);

    Write(Impressora);


    Writeln(Impressora, Format('%40s',['x']));
    Writeln(Impressora);//salta linha
    Writeln(Impressora);//salta linha
    Writeln(Impressora);//salta linha
  // Writeln(Impressora, #27#15 + 'CMSP..:');

    //Imprime a string Diretoria Financeira alinhado a esquerda dentro de 40 caracteres
      Write(Impressora, Format('%38s',[' **** Circulo Militar de Sao Paulo ****']));
      Writeln(Impressora);//salta linha

    // Writeln(Impressora, Chr(27)+ Chr('W') + Chr('1') + '* TESOURARIA *'); // Ativa expandido
    // Writeln(Impressora,'CNPJ: 61.916.763/0001-71');
    // Writeln(Impressora, Chr(27) + Chr('W') + Chr('0')); // Desativa expandido

      Write(Impressora, Format('%26s',['          * TESOURARIA *']));
      Writeln(Impressora);//salta linha
      Write(Impressora, Format('%30s',['      CNPJ: 61.916.763/0001-71']));

      Writeln(Impressora);//salta linha
      Write(Impressora, Format('%-40s',['----------------------------------------']));
      Writeln(Impressora);//salta linha
      Write(Impressora, Format('%28s',['--* RECIBO N. ' + IntToStr(DM.SP_NOVO_ID_RECE.ParamByName('ID').AsInteger) + ' *--']));
      Writeln(Impressora);//salta linha
      Writeln(Impressora);//salta linha
      Write(Impressora, Format('%-40s',['GRUPO    : ' + ComboGrupos.Text ]));
      Writeln(Impressora);//salta linha
      Write(Impressora, Format('%-40s',['DATA/HORA : ' + DateToStr(Date) + ' - ' + TimeToStr(Time)]));
      Writeln(Impressora);//salta linha
      Write(Impressora, Format('%-40s',['OPERADOR  : ' + Form_Usuario.Edit1.Text + ' - N. ' + IntToStr(DM.CDS_AcessoID.Value) ]));
      Writeln(Impressora);//salta linha
      Write(Impressora, Format('%-40s',['FORMA    : ' + ComboFormaPagto.Text ]));
      Writeln(Impressora);//salta linha
      Write(Impressora, Format('%-40s',['TAXA      : ' + JvDBLookupList1.DisplayValue + ' - Cod. ' + JvDBLookupList1.KeyValue]));
      Writeln(Impressora);//salta linha
      Write(Impressora, Format('%-40s',['VALOR R$  : ' + FormatFloat('###,##0.00', JvCalcEditValor.Value)]));
      Writeln(Impressora);//salta linha
      Write(Impressora, Format('%-40s',['----------------------------------------']));
      Writeln(Impressora);//salta linha
      Write(Impressora, Format('%-40s',['REF.:    : ' + Edit_Referencia.Text ]));
      Writeln(Impressora);//salta linha
      Write(Impressora, Format('%-40s',['OBS.:    : ' + Edt_Obs.Text ]));

      //Rotina para Saltar Linha
      For i := 1 to StrToInt(SaltaLinha) do
        begin
          Writeln(Impressora);//salta linha
        end;


  //Fecha Saida para Impressão
  System.Close(Impressora);



end;

Muito obrigado
Paulo Freire

Paulo Freire

Responder

Posts

18/01/2011

Leonardo Xavier

Cetto pelo que pude perceber você ja fez a rotina para imprimir os tickets, certo? bom para o de cortezia é bem facil seguindo sua linha de raciocínio. Tente assim:
      //Rotina para Saltar Linha

      For i := 1 to StrToInt(SaltaLinha) do

         begin

            if i=strtoint(saltalinha) then begin
              //colocar aqui seu cupom de cortesia
              end else begin
               Writeln(Impressora);//salta linha

           end;   
       end;


Responder

Gostei + 0

18/01/2011

Emerson Nascimento

faça uma pequena modificação na sua rotina de impressão de cupom, de modo a informar o valor, o número de parcelas e se há parcelas 'cortesia'.

você pode fazer algo assim:

procedure TForm_Recebimentos.EmiteCupom(ValorTotal: float; Parcelas: integer; cortesia: boolean);
var
  SaltaLinha  : string;
  i, nparc    : integer;
  Nro_Tickets : integer;
  ValorParcela, ValorUltima: double;
begin
  ValorParcela := ValorTotal / Parcelas;
  ValorUltima := ValorTotal - (ValorParcela * (Parcelas - 1));

  //Impressão de cupom em Impressora de 40 Colunas
   
  //Le o arquivo INI
  ArqIni := TIniFile.Create(ExtractFilePath(Paramstr(0))+FileName);
  PortaRecibo := ArqIni.ReadString('WCaixa', 'PortaRecibo', '');

  //Le Nmero de Linhas a Saltar
  SaltaLinha := ArqIni.ReadString('WCaixa', 'NumeroLinhasASaltar', '');

  //Pega Porta Com1, LPT1 conforme Conexao.ini
  AssignFile(Impressora, PortaRecibo);

  //Abre a Porta da Impressora
  Rewrite(Impressora);

  for nparc := 1 to Parcelas do
  begin
    // se for a última parcela
    if nparc = parcelas
    begin
      if Cortesia // e se a ultima for cortesia
        ValorParcela := 0
      else
        ValorParcela := ValorUltima;
    end;

    Write(Impressora);
    Writeln(Impressora, Format('%40s',['x']));
    Writeln(Impressora);//salta linha
    Writeln(Impressora);//salta linha
    Writeln(Impressora);//salta linha

    //Imprime a string Diretoria Financeira alinhado a esquerda dentro de 40 caracteres
    Write(Impressora, Format('%38s',[' **** Circulo Militar de Sao Paulo ****']));
    Writeln(Impressora);//salta linha

    Write(Impressora, Format('%26s',['          * TESOURARIA *']));
    Writeln(Impressora);//salta linha
    Write(Impressora, Format('%30s',['      CNPJ: 61.916.763/0001-71']));

    Writeln(Impressora);//salta linha
    Write(Impressora, Format('%-40s',['----------------------------------------']));
    Writeln(Impressora);//salta linha
    Write(Impressora, Format('%28s',['--* RECIBO N. ' + IntToStr(DM.SP_NOVO_ID_RECE.ParamByName('ID').AsInteger) + ' *--']));
    Writeln(Impressora);//salta linha
    Writeln(Impressora);//salta linha
    Write(Impressora, Format('%-40s',['GRUPO    : ' + ComboGrupos.Text ]));
    Writeln(Impressora);//salta linha
    Write(Impressora, Format('%-40s',['DATA/HORA : ' + DateToStr(Date) + ' - ' + TimeToStr(Time)]));
    Writeln(Impressora);//salta linha
    Write(Impressora, Format('%-40s',['OPERADOR  : ' + Form_Usuario.Edit1.Text + ' - N. ' + IntToStr(DM.CDS_AcessoID.Value) ]));
    Writeln(Impressora);//salta linha
    Write(Impressora, Format('%-40s',['FORMA    : ' + ComboFormaPagto.Text ]));
    Writeln(Impressora);//salta linha
    Write(Impressora, Format('%-40s',['TAXA      : ' + JvDBLookupList1.DisplayValue + ' - Cod. ' + JvDBLookupList1.KeyValue]));
    Writeln(Impressora);//salta linha

    if ValorParcela = 0
      Write(Impressora, Format('%-40s',['VALOR R$  :   CORTESIA']));
    else
      Write(Impressora, Format('%-40s',['VALOR R$  : ' + FormatFloat('###,##0.00', ValorParcela)]));

    Writeln(Impressora);//salta linha
    Write(Impressora, Format('%-40s',['----------------------------------------']));
    Writeln(Impressora);//salta linha
    Write(Impressora, Format('%-40s',['REF.:    : ' + Edit_Referencia.Text ]));
    Writeln(Impressora);//salta linha
    Write(Impressora, Format('%-40s',['OBS.:    : ' + Edt_Obs.Text ]));

    //Rotina para Saltar Linha
    for i := 1 to StrToInt(SaltaLinha) do
      Writeln(Impressora);//salta linha

  end;

  //Fecha Saida para Impressão
  System.Close(Impressora);

end;

para imprimir apenas 1 "parcela":
EmiteCupom(250, 1, False);


para imprimir 5 "parcelas":
EmiteCupom(250, 5, False);


para imprimir 10 "parcelas", com o último cortesia:
EmiteCupom(250, 10, True);



veja se é disso que você precisa.
 
Responder

Gostei + 0

19/01/2011

Paulo Freire

Perfeito Emerson, porem acima de 4 parcelas a impressora trava, começa a bagundar os csarecteres a partir da 3 parcela e trava na 4 parcela, vc sabe porque, Obrigado.

Responder

Gostei + 0

19/01/2011

Emerson Nascimento

talvez você precise "abrir" e "fechar" a impressora a cada cupom impresso.

tente isso:

procedure TForm_Recebimentos.EmiteCupom(ValorTotal: float; Parcelas: integer; cortesia: boolean);
var
  SaltaLinha  : string;
  i, nparc    : integer;
  Nro_Tickets : integer;
  ValorParcela, ValorUltima: double;
begin
  ValorParcela := ValorTotal / Parcelas;
  ValorUltima := ValorTotal - (ValorParcela * (Parcelas - 1));

  //Impressão de cupom em Impressora de 40 Colunas
   
  //Le o arquivo INI
  ArqIni := TIniFile.Create(ExtractFilePath(Paramstr(0))+FileName);
  PortaRecibo := ArqIni.ReadString('WCaixa', 'PortaRecibo', '');

  //Le Nmero de Linhas a Saltar
  SaltaLinha := ArqIni.ReadString('WCaixa', 'NumeroLinhasASaltar', '');

  for nparc := 1 to Parcelas do
  begin
    // se for a última parcela
    if nparc = parcelas
    begin
      if Cortesia // e se a ultima for cortesia
        ValorParcela := 0
      else
        ValorParcela := ValorUltima;
    end;

    //Pega Porta Com1, LPT1 conforme Conexao.ini
    AssignFile(Impressora, PortaRecibo);

    //Abre a Porta da Impressora
    Rewrite(Impressora);

    Write(Impressora);
    Writeln(Impressora, Format('%40s',['x']));
    Writeln(Impressora);//salta linha
    Writeln(Impressora);//salta linha
    Writeln(Impressora);//salta linha

    //Imprime a string Diretoria Financeira alinhado a esquerda dentro de 40 caracteres
    Write(Impressora, Format('%38s',[' **** Circulo Militar de Sao Paulo ****']));
    Writeln(Impressora);//salta linha

    Write(Impressora, Format('%26s',['          * TESOURARIA *']));
    Writeln(Impressora);//salta linha
    Write(Impressora, Format('%30s',['      CNPJ: 61.916.763/0001-71']));

    Writeln(Impressora);//salta linha
    Write(Impressora, Format('%-40s',['----------------------------------------']));
    Writeln(Impressora);//salta linha
    Write(Impressora, Format('%28s',['--* RECIBO N. ' + IntToStr(DM.SP_NOVO_ID_RECE.ParamByName('ID').AsInteger) + ' *--']));
    Writeln(Impressora);//salta linha
    Writeln(Impressora);//salta linha
    Write(Impressora, Format('%-40s',['GRUPO    : ' + ComboGrupos.Text ]));
    Writeln(Impressora);//salta linha
    Write(Impressora, Format('%-40s',['DATA/HORA : ' + DateToStr(Date) + ' - ' + TimeToStr(Time)]));
    Writeln(Impressora);//salta linha
    Write(Impressora, Format('%-40s',['OPERADOR  : ' + Form_Usuario.Edit1.Text + ' - N. ' + IntToStr(DM.CDS_AcessoID.Value) ]));
    Writeln(Impressora);//salta linha
    Write(Impressora, Format('%-40s',['FORMA    : ' + ComboFormaPagto.Text ]));
    Writeln(Impressora);//salta linha
    Write(Impressora, Format('%-40s',['TAXA      : ' + JvDBLookupList1.DisplayValue + ' - Cod. ' + JvDBLookupList1.KeyValue]));
    Writeln(Impressora);//salta linha

    if ValorParcela = 0
      Write(Impressora, Format('%-40s',['VALOR R$  :   CORTESIA']));
    else
      Write(Impressora, Format('%-40s',['VALOR R$  : ' + FormatFloat('###,##0.00', ValorParcela)]));

    Writeln(Impressora);//salta linha
    Write(Impressora, Format('%-40s',['----------------------------------------']));
    Writeln(Impressora);//salta linha
    Write(Impressora, Format('%-40s',['REF.:    : ' + Edit_Referencia.Text ]));
    Writeln(Impressora);//salta linha
    Write(Impressora, Format('%-40s',['OBS.:    : ' + Edt_Obs.Text ]));

    //Rotina para Saltar Linha
    for i := 1 to StrToInt(SaltaLinha) do
      Writeln(Impressora);//salta linha

    //Fecha Saida para Impressão
    System.Close(Impressora);

  end;

end;
Responder

Gostei + 0

21/01/2011

Paulo Freire

Valeu a todos e a Emerson, deu certinho, muito obrigado
Responder

Gostei + 0

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

Aceitar