Код: 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;
|