 // пример скрипта печати в розничном чеке

var
  DATASET :TDataset; // датасет с товарами. Набор полей смотрите в чеке розницы
  Summary :Currency; // сумма по чеку
  PaySummary :Currency; // Внесено денег
  Discount   :double; // процент надбавки/скидки
  DiscountSummary :double; // сумма надбавки/скидки
  ClientName :string; // имя контрагента
  ClientID :integer; // код контрагента
  AddInfo :string; // доп. инфо к контрагенту
  Doc_Reason :string; // код основания в чеке
  Doc_Reason_Name :string; // наименование основания в чеке

  OLE_KKM : variant;

  Res : integer;

const
  ComPort = 'COM1';
  Pass = '30';
  BaudRate = 19200;
  TimeOut = 150;
  StringSize = 50;

procedure FeedDoc(FeedLines : integer);
begin
  OLE_KKM.Password:=Pass;
  OLE_KKM.StringQuantity:=FeedLines;
  OLE_KKM.UseReceiptRibbon:=True;
  OLE_KKM.UseJournalRibbon:=False;
  OLE_KKM.UseSlipDocument:=False;
  OLE_KKM.FeedDocument;

end;

function PrintKKMString(Str : string; Align : TAlignment = taLeftJustify; Wide : boolean = False) : boolean;
var
  s, s1 : string;
  max_size : integer;
begin
  s:=Str;
  if Wide then
    max_size:=StringSize div 2
  else
    max_size:=StringSize;

  s1:=s;
  delete(s1, max_size+1, length(s1));
  delete(s, 1, max_size);
  while length(s1)>0 do
   begin
    case Align of
      taLeftJustify:
          while length(s1)<max_size do
            s1:=s1 + ' ';
      taRightJustify:
          while length(s1)<max_Size do
            s1:=' ' + s1;
      taCenter:
          while length(s1)<max_Size do
            s1:=' ' + s1 + ' ';
    end;
    OLE_KKM.Password:=Pass;
    OLE_KKM.UseReceiptRibbon:=True;
    OLE_KKM.UseJournalRibbon:=False;
    OLE_KKM.StringForPrinting:=s1;
    if Wide then
      OLE_KKM.PrintWideString
    else
      OLE_KKM.PrintString;

    s1:=s;
    delete(s1, max_size+1, length(s1));
    delete(s, 1, max_size);
   end;
  Result:=True;
end;

begin
  begin

     with TMyWait.create('Идет печать чека') do
     try
       if GetConfirm('Печатать чек для покупателя?',
                  '',
                  'Печатать чек',
                  'НЕ печатать чек')<>1
       then
         exit
       else CreateHint('Печать чека');

       {OLE_KKM:=CreateOleObject('Addin.DrvFR');
       OLE_KKM.Password:=Pass;
       OLE_KKM.Timeout:=TimeOut;
       case BaudRate of
         2400   : OLE_KKM.BaudRate:=0;
         4800   : OLE_KKM.BaudRate:=1;
         9600   : OLE_KKM.BaudRate:=2;
         19200  : OLE_KKM.BaudRate:=3;
         38400  : OLE_KKM.BaudRate:=4;
         57600  : OLE_KKM.BaudRate:=5;
         115200 : OLE_KKM.BaudRate:=6;
       end;
       OLE_KKM.Connect;

       PrintKKMString('ООО Ева-Фарм', taCenter);
       PrintKKMString('ИНН 003435100920', taCenter);
       PrintKKMString('г. Волжский, ул. Им. генерала Карбышева 47', taCenter);
       PrintKKMString('Документ произвольного вида', taCenter);
       PrintKKMString(FormatDateTime('dd.mm.yy HH:mm', Now), taCenter);
       PrintKKMString('--------------------------', taCenter);}

       {dataset.disablecontrols;
       try
         dataset.first;
         while not dataset.eof do
         begin

           PrintKKMString(dataset.fieldbyname('name').asstring);
           PrintKKMString(dataset.fieldbyname('kol').asstring + ' x ' +
                  Format('%.2f', [dataset.fieldbyname('cena').asfloat]) + '=' +
                  Format('%.2f', [dataset.fieldbyname('kol').asfloat*dataset.fieldbyname('cena').asfloat])
                  , taRightJustify);

           dataset.next;
         end;

         PrintKKMString('--------------------------', taCenter);
         if Discount<0 then
          begin
            PrintKKMString('Сумма без скидки: '+ Format('%.2f', [Summary-DiscountSummary]), taRightJustify);
            PrintKKMString('Скидка %: '+ Format('%.2f', [-Discount]), taRightJustify);
            PrintKKMString('Сумма скидки: '+ Format('%.2f', [-DiscountSummary]), taRightJustify);
          end;
         if Summary<PaySummary  then
           begin
            PrintKKMString('Внесено : ' + Format('%.2f', [PaySummary]), taRightJustify);
            PrintKKMString('Сдача   : ' + Format('%.2f', [PaySummary-Summary]), taRightJustify);
           end;

         PrintKKMString('Итого: '+ Format('%.2f', [Summary]), taRightJustify, True);

         FeedDoc(1);
         PrintKKMString('-----------------------------', taCenter);
         PrintKKMString('Аптечная сеть "Ева-Фарм" гарантирует', taCenter);
         PrintKKMString('высокое качество лекарств.', taCenter);
         PrintKKMString('-----------------------------', taCenter);

         FeedDoc(7);

         OLE_KKM.PAssword:=Pass;
         OLE_KKM.CutType:=False;
         OLE_KKM.CutCheck;

         OLE_KKM.Beep;


       finally
         dataset.enablecontrols;
       end;  }

     finally
       free
     end;
  end;


end.
