Сообщения без ответов | Активные темы Текущее время: Пт мар 29, 2024 12:27 am



Ответить на тему  [ Сообщений: 2 ] 
Пример печати QR-кода на ШТРИХ-М-ПТК через DrvFR версии 4.12 
Автор Сообщение
Новичок

Зарегистрирован: Пт мар 25, 2016 9:20 pm
Сообщения: 3
Сообщение Пример печати QR-кода на ШТРИХ-М-ПТК через DrvFR версии 4.12
Здравствуйте.
Не могли бы вы привести пример печати QR-кода через DrvFR версии 4.12 на Delphi.
Спасибо за понимание.


Ср апр 27, 2016 11:35 am
Профиль
Новичок

Зарегистрирован: Пт мар 25, 2016 9:20 pm
Сообщения: 3
Сообщение Re: Пример печати QR-кода на ШТРИХ-М-ПТК через DrvFR версии
Кому интересно нашёл в инете пример, вроде рабочий
Код:
uses ComObj;
...

procedure PrintQRSlip(Bar, Kep, sMagName, sKPP:WideString);
var Count, i: Integer;
      ECR: OleVariant;
const
  BlockSize = 64;
  PrintWidth = 47;//максимальная ширина строки печати в символах на ШТРИХ-М-ПТК

  function StrToHex(const S: string): string;
  var i: Integer;
  begin
    Result := ''; for i := 1 to Length(S) do Result := Result + IntToHex(Ord(S[i]), 2) + ' ';
  end;

  //Дополняет строку слева пробелами до указанной длины
  function PADL(Src: string; Lg: Integer): string;
  begin
    Result := Src; while Length(Result) < Lg do Result := ' ' + Result;
  end;

  {Дополняет строку пробелами справа до указанной длины.}
  function PADR(Src: string; Lg: Integer): string;
  begin
    Result := Src; while Length(Result) < Lg do Result := Result + ' ';
  end;

  {Дополнение строки пробелами с обоих сторон до указанной длины}
  function PADC(Src: string; Lg: Integer): string;
  begin
    Result := Src;
    while Length(Result) < Lg do
    begin
      Result := Result + ' ';
      if Length(Result) < Lg then Result := ' ' + Result;
    end;
  end;

  //печать текста с переносом строк (ШТРИХ-М-ПТК автоматический перенос не поддерживается)
  function PrntWStr(sStr: string;iPW:Integer):Integer;
  var i,Count:Integer;
  begin
    Result:=0;
    Count := (Length(sStr) + iPW -1) div iPW;
    for i := 0 to Count-1 do
    begin
      ECR.StringForPrinting := COPY(sStr,i*iPW+1,iPW);
      ECR.PrintString;
      ECR.WaitForPrinting;
    end;
    Result:=1;
  end;

begin
  ECR := CreateOleObject('AddIn.DrvFR');
  ECR.Password:=30;
  ECR.GetECRStatus;
  ECR.RegisterNumber:=148; //регистр чека продаж
  ECR.GetOperationReg;

  try
    ECR.UseReceiptRibbon := True;//печать на кассовой ленте
    ECR.UseJournalRibbon := False;
    ECR.UseSlipDocument := False;
    ECR.CarryStrings := True;//перенос строки, на ШТРИХ-М-ПТК не поддерживается
    ECR.DelayedPrint := False;

    ECR.StringForPrinting :=PADC(sMagName,PrintWidth);
    ECR.PrintString;
    ECR.StringForPrinting := PADR('ИНН:'+inttostr(ECR.INN),PrintWidth div 2)+PADL('КПП:'+sKPP,PrintWidth div 2);
    ECR.PrintString;
    ECR.StringForPrinting := PADR('КАССА:'+inttostr(ECR.SerialNumber),PrintWidth div 2)+PADL('СМЕНА:'+inttostr(ECR.SessionNumber+1),PrintWidth div 2);
    ECR.PrintString;
    ECR.StringForPrinting := PADR('ЧЕК:'+inttostr(ECR.ContentsOfOperationRegister),PrintWidth div 2)+PADL(DateToStr(ECR.Date)+' '+ECR.TimeStr,PrintWidth div 2);
    ECR.PrintString;
    ECR.StringQuantity := 1;
    ECR.FeedDocument;
  finally
    ECR.WaitForPrinting;
  end;

  try
    Count := (Length(Bar) + BlockSize -1) div BlockSize;
    for i := 0 to Count-1 do
    begin
      ECR.BlockType := 0;
      ECR.BlockNumber := i;
      ECR.BlockDataHex := StrToHex(Copy(Bar, 1 + BlockSize*i, BlockSize));
      ECR.LoadBlockData;
    end;
  finally
  end;

  ECR.BarcodeType := 3;//тип ШК - QR
  ECR.BarcodeDataLength := length(Bar);
  ECR.BarcodeStartBlockNumber := 0;
  ECR.BarcodeParameter1 := 0;//версия ШК 0-авто
  ECR.BarcodeParameter2 := 0;//маска ШК 0-авто
  ECR.BarcodeParameter3 := 6;//размер точки в ШК 3..8
  ECR.BarcodeParameter4 := 0;
  ECR.BarcodeParameter5 := 2;//уровень коррекции ошибок 0..3
  ECR.BarcodeAlignment := 0;//выравнивание посередине
  ECR.Print2DBarcode;
  ECR.WaitForPrinting;

  ECR.FeedDocument;
  PrntWStr(Bar,PrintWidth);  //печать текста ссылки
  ECR.FeedDocument;
  PrntWStr(Kep,PrintWidth);  //печать текста КЭП
  ECR.StringQuantity := 5;
  ECR.FeedDocument;
  ECR.CutType := True;
  ECR.CutCheck;//отрезаем ленту
  ECR := 0;
end;


Пример использования:
Код:
PrintQRSlip
(
'https://check.egais.ru?id=a9e56cb9-21d6-4404-9f24-668020fadf6a&dt=0910141104&cn=RogaAndKopyta'
'32B7136A7BCEAFEBE4DA92D9510C196CC42DC56260E1E2802B8C24A8C3EA75F3978EA6963F370F3165B89DBF98FD94F2F0C7F4803965B62A6616A12D8159A5D3',
'ООО "Рога и Копыта"', '492401001')
);


Вс май 01, 2016 8:06 pm
Профиль
Показать сообщения за:  Поле сортировки  
Ответить на тему   [ Сообщений: 2 ] 

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by STSoftware for PTF.
Русская поддержка phpBB