powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Драйвер ККТ Атол с аппаратами Штрих
9 сообщений из 9, страница 1 из 1
Драйвер ККТ Атол с аппаратами Штрих
    #40029320
zeon11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть написанные библиотеки для работы с аппаратами Атол через атоловские драйвера ККТ_8*, ККТ_10*. Сейчас попросили соединить программу с фискальным регистратором Штрих-ON-LINE. Писать библиотеку под штрих не хочется, атоловский драйвер под чужие аппараты платный, но вроде не дорогой, интернет выдаёт стоимость восьмого драйвера от 6000р до 2000р. Кто-нибудь работал со Штрихом через атоловский драйвер?
...
Рейтинг: 0 / 0
Драйвер ККТ Атол с аппаратами Штрих
    #40029332
Сергей Фролов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zeon11,

У Штриха драйвер не сложный. Все примеры есть на их форуме поддержки.
...
Рейтинг: 0 / 0
Драйвер ККТ Атол с аппаратами Штрих
    #40029351
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Сергей Фролов
zeon11,

У Штриха драйвер не сложный. Все примеры есть на их форуме поддержки.


после Атол этот Штрих как детская игрушка
...
Рейтинг: 0 / 0
Драйвер ККТ Атол с аппаратами Штрих
    #40029394
zeon11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator
Сергей Фролов
zeon11,

У Штриха драйвер не сложный. Все примеры есть на их форуме поддержки.


после Атол этот Штрих как детская игрушка


У меня есть ещё Pioneer 114ф реализованный ;-)
...
Рейтинг: 0 / 0
Драйвер ККТ Атол с аппаратами Штрих
    #40029448
Softologic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator
Сергей Фролов
zeon11,

У Штриха драйвер не сложный. Все примеры есть на их форуме поддержки.


после Атол этот Штрих как детская игрушка

Это ты про десятый драйвер Атола, что он якобы сложный? Или еще про восьмой?
...
Рейтинг: 0 / 0
Драйвер ККТ Атол с аппаратами Штрих
    #40029986
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zeon11
У меня есть написанные библиотеки для работы с аппаратами Атол через атоловские драйвера ККТ_8*, ККТ_10*. Сейчас попросили соединить программу с фискальным регистратором Штрих-ON-LINE. Писать библиотеку под штрих не хочется, атоловский драйвер под чужие аппараты платный, но вроде не дорогой, интернет выдаёт стоимость восьмого драйвера от 6000р до 2000р. Кто-нибудь работал со Штрихом через атоловский драйвер?


Не имеет смысла работать со Штрихом через 8-ой драйвер Атола, т.к. он уже как два года не обновляется - там даже нет открытия смены в ККТ и чего-то ещё важного.
Немаловероятно что в следующем году и Фронтол может отказаться от его использования

Пишите обертку над их родным драйвером, особенности операций можно подсмотреть в их логе, сделав нужные телодвижения в тесте драйвера и читая доку.
...
Рейтинг: 0 / 0
Драйвер ККТ Атол с аппаратами Штрих
    #40030938
zeon11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cobalt747,
Да, так и поступил. Базовый прототип-черновик уже написал. Вроде работает.
Пожалуй, и выложу. Если есть желание, покритикуйте.

Пояснение: работа с аппаратом ККМ ведётся из библиотеки. Основное приложение формирует информацию о будущем чеке делая все сопутствующие расчеты и записывает
эту информацию в две таблицы: FiskCheck и FiskCheckRec. Далее в библиотеку передается
код чека, и библиотека печатает чек на ККМ. В случае успешной печати библиотека записывает в таблицу FiskCheck информацию о серийном номере ККМ. Среда: TurboDelphi,
БД Firebird.

Тут инициализация и вспомогательные процедуры

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
procedure TDMTillSlipShtr.DataModuleCreate(Sender: TObject);
begin
  try
    ECR := CreateOleObject('AddIn.DrvFR');
  except
    ShowMessage('Не удалось создать объект общего драйвера ККМ Штрих !');
  end;
end;

procedure TDMTillSlipShtr.DataModuleDestroy(Sender: TObject);
begin
    ECR := 0;  // разрушаем объект драйвера
end;

procedure TDMTillSlipShtr.ChangeAdminKKM(AUser: string);
begin
 try
   ECR.Password:=30;    //Совет Близнец1980
   ECR.TableNumber:=2;  //https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1276532&msg=20939695]Delphi + онлайн-кассы
   ECR.RowNumber:=30;
   ECR.FieldNumber:=2;
   ECR.ValueOfFieldString:=AUser; // КАССИР .....  'ÊÀÑÑÈÐ '+ 
   ECR.WriteTable;
except
  on E: Exception do begin
                       showmessage('Ошибка установки кассира:'+E.Message);
                     end;
 end;
end;

procedure TDMTillSlipShtr.Check(AResultCode: Integer);
begin
  if AResultCode <> 0
    then begin
         //  raise Exception.Create(ECR.ResultCodeDescription);  // или
           ShowMessage(ECR.ResultCodeDescription);
           Abort;
         end;
end;




Тут нулевой чек, X, Z отчеты и др.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
function TShtrService.ZeroTillSlip: boolean;  //Нулевой чек
begin
 Result:=False;
 with DMTillSlipShtr do
  try
    Check(ECR.LockPort);  // занимаем порт
    ECR.Password := 30;
    Check(ECR.GetECRStatus);
    if ECR.ECRMode = 8 then Check(ECR.SysAdminCancelCheck); //если есть открытый чек, то аннулируем его
    ECR.CheckType := 0;
    Check(ECR.OpenCheck);

    ECR.Price := 0;
    ECR.Quantity := 1;
    ECR.Department := 1;
    ECR.Tax1 := 0;
    ECR.Tax2 := 0;
    ECR.Tax3 := 0;
    ECR.Tax4 := 0;
    ECR.StringforPrinting := 'Уголь активированный'; //Название товара
    Check(ECR.Sale); // Продажа

    ECR.Summ1:=0;  // Наличными
    Check(ECR.CloseCheck);
    Result:=True;
 finally
  ECR.UnlockPort;
 end;
end;

function TShtrService.X_Report: boolean; // X - отчет
begin
 Result:=False;
 with DMTillSlipShtr do
  try
    Check(ECR.LockPort);  // занимаем порт
    ECR.Password := 30;   // устанавливаем пароль системного администратора ККМ
    Check(ECR.GetECRStatus);
    if ECR.ECRMode = 8 then Check(ECR.SysAdminCancelCheck); //если есть открытый чек, то аннулируем его
    ECR.PrintReportWithoutCleaning;
    Result:=True;
 finally
  ECR.UnlockPort;
 end;
end;

function TShtrService.Z_Report: boolean;   // Z - отчет
begin
 Result:=False;
 case MessageDlg('Закрыть смену и напечатать Z-отчёт?', mtConfirmation, [mbYes, mbCancel], 0) of
  mrYes: with DMTillSlipShtr do
           try
            Check(ECR.LockPort);  // занимаем порт
            ECR.Password := 30;   // устанавливаем пароль системного администратора ККМ
            Check(ECR.GetECRStatus);
            if ECR.ECRMode = 8 then begin
                                     Check(ECR.SysAdminCancelCheck); //если есть открытый чек, то аннулируем его
                                     Check(ECR.GetECRStatus);
                                    end;
            if ((ECR.ECRMode = 2) or (ECR.ECRMode = 3))
              then begin
                    ECR.PrintReportWithCleaning;
                    Result:=True;
                    Q_Z.ExecQuery;  // Обработка в БД по закрытию смены
                   end
              else ShowMessage('Смена не была открыта! Напечатать Z-отчёт нельзя!');
           finally
               ECR.UnlockPort;
           end;
  mrCancel: exit;
  end;
end;

procedure TShtrService.ShowPropertiesShtr;
begin
   DMTillSlipShtr.ECR.ShowProperties;
end;

function TShtrService.GetSerialNumber: PChar;
var s: string;
begin
 s:='';
 with DMTillSlipShtr do
  try
    Check(ECR.LockPort);  // занимаем порт
    ECR.Password := 30;
    Check(ECR.GetECRStatus);
    s:=ECR.SerialNumber;
 finally
    if s='' then s:=' не обнаружен';
    Result:=PChar(s);
    ECR.UnlockPort;
 end;
end;



Тут сырец печати чека прихода-возврата без определения налогов. старался уложится на 1 печатную страницу.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
function TShtrService.PrintTillSlipShtr(DBHandle: TISC_DB_HANDLE; AQuery: TpFIBDataSet; ATag: integer; AListSystemVariables: TStringList): boolean;
begin
 Result:=False;
 with DMTillSlipShtr do
  try
    QFiskCheckRec.Close;
    QFiskCheck.Close;
    DB.Handle:=DBHandle;
    QFiskCheck.ParamByName('X').AsInteger:=ATag;
    QFiskCheck.Open;  //Открываем из БД нужный чек
    if QFiskCheck.RecordCount=0 then raise Exception.Create('Чек в БД отсутствует!');

    Check(ECR.LockPort);  // занимаем порт
    ChangeAdminKKM(QFiskCheckCASHIER.Value); //Подменяем СИСТ.АДМИНИСТРАТОР на пользователя ECR.Password := 30;
    Check(ECR.GetECRStatus);
    if ECR.ECRMode = 8 then Check(ECR.SysAdminCancelCheck); //если есть открытый чек, то аннулируем его
    if QFiskCheckCHECKTYPE.AsInteger=1 then ECR.CheckType := 0;  // Продажа
    if QFiskCheckCHECKTYPE.AsInteger=2 then ECR.CheckType := 2;  // Возврат
    Check(ECR.OpenCheck);

    QFiskCheckRec.Open; // Открываем из БД табличную часть чека
    QFiskCheckRec.First;
    While not QFiskCheckRec.Eof
     do begin
          if QFiskCheckRecTIP.Value=0  // нулевой чек
            then ECR.Price := 0
            else ECR.Price := round(QFiskCheckRecPRICE.Value*100)/100;//Округление до второго знака !!!
          ECR.Quantity := round(QFiskCheckRecCOUNTS.Value*1000)/1000;
          ECR.Department := QFiskCheckRecDEPARTMENT.Value;
          ECR.Tax1 := 0;
          ECR.Tax2 := 0;
          ECR.Tax3 := 0;
          ECR.Tax4 := 0;  //    ECR.TaxTypeNumber :=QFiskCheckRecTAXTYPENUMBER.Value;
          ECR.StringforPrinting := copy(QFiskCheckRecNAME.Value,1,48);//Название товара
          if (QFiskCheckCHECKTYPE.AsInteger=1) then Check(ECR.Sale);       // Продажа
          if (QFiskCheckCHECKTYPE.AsInteger=2) then Check(ECR.ReturnSale); // Возврат
          QFiskCheckRec.Next;
        end;

    if ((QFiskCheckPHONE.Value<>'') or (QFiskCheckMAIL.Value<>'')) then
      begin    // передача почты или сотового номера, приоритет - почта
        if (QFiskCheckMAIL.Value<>'') then ECR.CustomerEmail := QFiskCheckMAIL.Value
                                      else ECR.CustomerEmail := QFiskCheckPHONE.Value;
        ECR.FNSendCustomerEmail;
      end;

    Check(ECR.CheckSubTotal);   //Подсчитали итог чека для наличных в Summ1
    ECR.Summ2:=0;
    ECR.Summ3:=0;
    ECR.Summ4:=0;
    if QFiskCheckTYPECLOSE.AsInteger>0 
      then begin      // если оплата по карте
              ECR.Summ2:=ECR.Summ1;  // на разных аппаратах под банк.карты выделяют разные регистры
              ECR.Summ1:=0;          // Summ2 - Summ4, посмотреть можно в сойствах таблицы 16
           end;
    Check(ECR.CloseCheck);

    QFiskCheck.Edit;   // Фиксируем в БД, что чек ушел в ККМ
    QFiskCheckDEVICEID.Value:=ECR.SerialNumber; //Доступен после успешного ECR.GetECRStatus
    QFiskCheck.Post;
    Result:=True;
 finally
  QFiskCheckRec.Close;
  QFiskCheck.Close;
  ECR.UnlockPort;
 end;
end;

...
Рейтинг: 0 / 0
Драйвер ККТ Атол с аппаратами Штрих
    #40031028
Близнец1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zeon11,

Небольшое дополнение:
Если будите указывать систему налогообложения в свойстве TaxType, то чек необходимо закрывать командой FNCloseCheckEx.
Где-то на форуме вычитал недавно, что команды Sale, ReturnSale не рекомендуют использовать, типа устаревшие. Вместо них использовать FNOperation.
Если будет маркированный товар так и придется делать. При этом команда OpenCheck не нужна и CheckType := 1 а не 0 это приход (продажа), 2 - возврат прихода так и осталось.
При этом я еще указываю PaymentItemSign := 1; //ПризнакПредметаРасчета (товар) и PaymentTypeSign := 4; // Признак способа расчета (Полный расчет)
...
Рейтинг: 0 / 0
Драйвер ККТ Атол с аппаратами Штрих
    #40031046
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zeon11,

Если сделаешь в виде независимой библиотеки, то могу помочь на реальном Штрихе погонять, с кодами маркировки или авансами/предоплатами.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Драйвер ККТ Атол с аппаратами Штрих
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]