Библиотека для работы с ККМ АТОЛ

Планы, идеология, архитектура и т.п.

Модератор: Модераторы

Re: Библиотека для работы с ККМ АТОЛ

Сообщение alexs » 09.02.2016 15:48:28

Большая переработка - полностью переписал работу внутри библиотеки.
Теперь работает в винде с FPC 3.1.1
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Библиотека для работы с ККМ АТОЛ

Сообщение Stanislav » 21.04.2016 21:01:59

Добрый день!
Подскажите, как начать пользоваться программным интерфейсом?
С паскалем не знаком, в основном специализируюсь на вебе.

Программный интерфейс библиотеки стараюсь делать максимально похожим на английский вариант com-объекта от АТОЛ.

А ссылочку не подкинете, чтобы понимать о чем речь?
В целом есть желание прикрутить к вашей разработке веб интерфейс, как это сделано здесь: https://github.com/Merored/IceCash
Как думаете, это возможно?

Заранее спасибо!
Stanislav
незнакомец
 
Сообщения: 1
Зарегистрирован: 21.04.2016 20:57:44

Re: Библиотека для работы с ККМ АТОЛ

Сообщение alexs » 22.04.2016 11:34:49

Данная библиотека предоставляет API для доступа к ККМ из программ, написанных на паскале.

Вам надо будет написать сверху некую обёртку, которая будет обрабатывать вызовы RPC и транслировать их на фискальник.
В принципе это не сложно. Все инструменты для этого есть в комплекте библиотек FPC/Lazarus/LCCR
Это уж как вы сами захотите. Начиная от элементарной CGI и до полноценного веб-сервера...
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Библиотека для работы с ККМ АТОЛ

Сообщение sherr » 25.04.2016 08:10:35

ssadragon писал(а): У нас просто еще для штрихов так-же примерно написан драйвер, вот он и привел их к более менее одинаковому виду

А драйвером под Штрих не поделитесь ? Очень нужно !
sherr
незнакомец
 
Сообщения: 3
Зарегистрирован: 23.12.2015 08:12:53
Откуда: Ставрополь

Re: Библиотека для работы с ККМ АТОЛ

Сообщение AnacRon » 31.05.2016 18:39:30

Компонента отличная. Работает стабильно и логично.

Вот только возник вопрос по поддержке языков. Если я не ошибаюсь железки с поддержкой протокола Атол работают с кодировкой таблицей 866. Русский и английский языки печатаются без огреха. Однако латышский, узбекский, казахский и прочие языки имеют не однозначные трактовки таблицы 866 и чаще всего используют символы с кодом в диапазоне $B0..$ff. Функция UTF8ToConsole под windows этот диапазон символов переводит по своему искажая текст для печати.
С штриховским протоколом проще, так как там кодовая таблица 1251 и прекрасно работает на MS Winndows, Linux и Mac OS X.

Тут же второй день бьюс и не могу добиться печати интересующих символов.
Аватара пользователя
AnacRon
новенький
 
Сообщения: 47
Зарегистрирован: 16.12.2009 11:09:09
Откуда: Караганда

Re: Библиотека для работы с ККМ АТОЛ

Сообщение alexs » 01.06.2016 17:19:10

А есть таблица символов от ККМ? в принципе можно написать свою функцию перекодировки.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Библиотека для работы с ККМ АТОЛ

Сообщение AnacRon » 01.06.2016 19:38:19

Таблица есть, но пока не в электронном виде. Под Linux и Mac OS вроде сделал перекодировку, а вот под Windows пока траблы. Позже выложу таблицу.
Аватара пользователя
AnacRon
новенький
 
Сообщения: 47
Зарегистрирован: 16.12.2009 11:09:09
Откуда: Караганда

Re: Библиотека для работы с ККМ АТОЛ

Сообщение AnacRon » 09.06.2016 14:10:18

Слева оригинальная cp866 справа таблица распечатанная фискальным регистратором.
Вложения
2016-06-09_16-03-35.png
Аватара пользователя
AnacRon
новенький
 
Сообщения: 47
Зарегистрирован: 16.12.2009 11:09:09
Откуда: Караганда

Re: Библиотека для работы с ККМ АТОЛ

Сообщение alexs » 09.06.2016 14:54:14

А можно сопоставить коды этих же символов из UTF8?
Там всё сведётся к циклу по символольно
Что-то типа такого:
Код: Выделить всё
function StrToKKM(const S:string):string;
var
  S1: String;
  i, L: Integer;
  P: PChar;
begin
  Result:='';
  i:=1;
  while i<Length(S) do
  begin
    P:=@S[i];
    L:=UTF8CharacterLength(P);
    S1:=Copy(S, i, L);
    i:=i+l;
    if S1='А' then
      Result:=Result + #65
    else
    if S1='B' then
      Result:=Result + #65
    else
      Result:=Result + UTF8ToConsole(S1);
  end;
end;

Где в условиях if S1='А' then
Result:=Result + #65

надо подставить уже непосредственно "проблемные" символы и их код.
Сам не могу проверить - не владею языком :-) Да и ККМ с такой прошивкой у меня нет... Если функция будет готова - то не откажусь в исходники включить.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Библиотека для работы с ККМ АТОЛ

Сообщение AnacRon » 13.06.2016 16:53:19

На скорую руку накидал функцию с положительным результатом, но требующую рефакторинга.
Код: Выделить всё
function UTF8ToKazOEM(const S:string):string;
var
  FSymbol, FSrcString: String;
  i, L: Integer;
  P: PChar;
  FDst: PChar;
begin
  FSrcString := UTF8ToWinCP(s);
  Result:='';
  i:=1;
  while i<=Length(FSrcString) do
  begin
    P:=@FSrcString[i];
    L:=UTF8CharacterLength(P);
    FSymbol:=Copy(FSrcString, i, L);
    i:=i+l;
    if FSymbol=#188 then // ә
      Result:=Result + #177
    else
    if FSymbol=#179 then // і
      Result:=Result + #105
    else
    if FSymbol= #190 then // ң
      Result:=Result + #241
    else
    if FSymbol= #186 then // ғ
      Result:=Result + #220
    else
    if FSymbol= #191 then // ү
      Result:=Result + #248
    else
    if FSymbol= #162 then // ұ
      Result:=Result + #246
    else
    if FSymbol= #157 then // қ
      Result:=Result + #223
    else
    if FSymbol= #180 then // ө
      Result:=Result + #244
    else
    if FSymbol= #158 then // һ
      Result:=Result + #254
    else
    if FSymbol= #163 then // Ә
      Result:=Result + #176
    else
    if FSymbol= #178 then // І
      Result:=Result + #73
    else
    if FSymbol= #189 then // Ң
      Result:=Result + #240
    else
    if FSymbol= #170 then // Ғ
      Result:=Result + #219
    else
    if FSymbol= #175 then // Ү
      Result:=Result + #247
    else
    if FSymbol= #161 then // Ұ
      Result:=Result + #245
    else
    if FSymbol= #141 then // Қ
      Result:=Result + #222
    else
    if FSymbol= #165 then // Ө
      Result:=Result + #243
    else
    if FSymbol= #142 then // Һ
      Result:=Result + #253
    else
    begin
      FDst := AllocMem((Length(FSymbol) + 1) * SizeOf(Char));
      if CharToOEM(PChar(FSymbol), FDst) then
        Result := Result + StrPas(FDst);
      FreeMem(FDst);
    end;
  end;
  SetCodePage(RawByteString(Result), CP_OEMCP, False);
end;

P.S.: Lazarus (svn), fpc (svn); Mac OS, Gentoo x32, MS Windows x64
Аватара пользователя
AnacRon
новенький
 
Сообщения: 47
Зарегистрирован: 16.12.2009 11:09:09
Откуда: Караганда

Re: Библиотека для работы с ККМ АТОЛ

Сообщение alexs » 13.06.2016 19:04:31

А какая это кодовая страница?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Библиотека для работы с ККМ АТОЛ

Сообщение AnacRon » 13.06.2016 19:22:34

Кодовая страница в оборудовании стандартная CP866 (по протоколу АТОЛа).
Все текстовые строки передаются в ККТ в кодовой странице 866 MS DOS. Исключение составляют символы "No" (имеет код 24h), "€" (имеет код F2h), "$" (имеет код FСh).
ККТ принимает текстовые строки в кодовой странице 866 MS-DOS, но хранит и возвращает их в собственной внутренней кодировке.

Прошивка с поддержкой казахского языка (Қазақ тілі). Других пока нет на руках.
posting.php?mode=reply&f=10&t=8818#pr98356 Пример расположения символов
Аватара пользователя
AnacRon
новенький
 
Сообщения: 47
Зарегистрирован: 16.12.2009 11:09:09
Откуда: Караганда

Re: Библиотека для работы с ККМ АТОЛ

Сообщение alexs » 14.06.2016 12:02:17

Ну казахский язык имеет свою кодовую страницу? Это не 866 по идее. Или производители тут не заморачивались?
Суть вопроса в том, как идентифицировать смену кодировки в компоненте? Как константы назвать?
Я думал что то типа atol866, atolXXXX...
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Библиотека для работы с ККМ АТОЛ

Сообщение AnacRon » 14.06.2016 15:55:23

alexs писал(а):Ну казахский язык имеет свою кодовую страницу? Это не 866 по идее.

Так как время кодировки прошло и стандартов не вырабатывали то кодировку оставили как есть 866, а каждый производитель драйвера или железки изголяется как хочет. Лучше дело обстоит с 1251, где есть стандарт cp1251k.
alexs писал(а):Я думал что то типа atol866, atolXXXX...

По мне так лучше использовать CP866KZ и по аналогии с другими языками. Как уже сделано для украинского, чувашского и латышского CP866U, CP866.chuv, CP866LV.
Аватара пользователя
AnacRon
новенький
 
Сообщения: 47
Зарегистрирован: 16.12.2009 11:09:09
Откуда: Караганда

Re: Библиотека для работы с ККМ АТОЛ

Сообщение alexs » 15.06.2016 11:20:32

CharToOEM(PChar(FSymbol), FDst)
Не в винде нужен аналог. Что предложишь?

Добавлено спустя 4 минуты 27 секунд:
да кстати, а функцию то тестировал? А то чтото там у меня непонятки по тексту. Вроде как UTF8ToWinCP используешь для перевода из UTF8, а потом UTF8CharacterLength применяешь.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Пред.След.

Вернуться в Разработки на нашем сайте

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 17

Рейтинг@Mail.ru