Страница 2 из 9

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

СообщениеДобавлено: 24.05.2013 11:12:49
ssadragon
Интересно! Интересно!
4 ревизия :(
Развитие имеет библиотека или ... нет?
Документация тут - http://w7site.ru/fpc/kkm
:(
Не работает ссылочка!

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

СообщениеДобавлено: 24.05.2013 23:49:45
alexs
Библиотека используется. Пока занимаюсь другими вещами - тот функционал, который есть - работает.
Хотя планируются работы по дальнейшей чистке багов. Возможно будет доработка функционала.
Ссылка работает. Были проблемы со связью...

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

СообщениеДобавлено: 25.05.2013 07:44:34
ssadragon
А у меня чет не очень работает.
При выборе режима, он не применялся и соответственно необходимые компоненты не становились доступными. вот так.
Тестируемым аппаратом был Принтер документов Fprint-22

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

СообщениеДобавлено: 25.05.2013 10:30:54
alexs
Может он в блоке был?
Что штатная атоловская утилита? Похожее поведение у аппарата в тот момент, когда он ожидает Z-Отчёта...

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

СообщениеДобавлено: 25.05.2013 11:54:57
ssadragon
alexs писал(а):Может он в блоке был?

Да как бы не должен, я до этого Атоловским драйвером печатал на нем.

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

СообщениеДобавлено: 27.05.2013 12:26:36
Attid
кстати alexs, а как он ведет себя если приложение убить ? порт освободиться ?
а то у меня на синасере блокируется до перегрузки, и ничем к этому порту не подключится =(
это на лине если что.

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

СообщениеДобавлено: 27.05.2013 21:54:53
alexs
Во первых - порт каждый раз открывается и закрывается во время операций.
Во вторых - в зависимости от операционки.
В винде не будет блокировки.
В линухе при неудачном стечении обстоятельств может остаться lock-file. Его надо вручную убивать. Это уже особенность синапсиса.
Но из-за того что каждый раз порт открывается/закрывается вероятность маленькая.

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

СообщениеДобавлено: 27.05.2013 23:02:12
Attid
про во первых .
ну я чисто логически у себя выбрал одно открытие. чек идет за чеком, как в макдональце ну и каждый раз открывать закрывать это лишние 2 операции.
а на чек и того больше. или продать 2 позиции и закрыть чек + напечатать что-то сверху итого 4 операции или с открытием их уже 16.

причем может я что-то не так делаю, но у меня при открытии закрытии и большом потоке я мог получать ошибку "порт занят" несколько раз в день. что не очень приятно.
а про лок файл я не подумал, надо глянуть где он есть и как он его проверяет, я свое ПО тоже проверяю чтоб была запущена одна инстанция с лок файлом, но проблем не разу не было за последние несколько лет.

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

СообщениеДобавлено: 29.05.2013 00:12:31
alexs
Я просто побоялся, что не всегда получится коректно поддерживать статус оборудования при постоянно открытом порте. А когда передёргиваю - то статус надёжнее получаю.

Лок файл - это особенность синапсиса. Это надо в этих компонентах ковырять.

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

СообщениеДобавлено: 03.06.2013 09:11:18
Attid
:beer: интересно есть такой смайлик ?

и правда посмотрел в коде создается просто файл, причем без блокировки, в него хоть и пишется пид, но не проверяется, в общем беспонтовая проверка, надо или проверять работает ли указанный pid как в том ThisIsAnOnlyInstance или вообще не трогать.

но зато есть ключик LinuxLock который позволяет эту проверку отключить. спасибо что натолкнул на мысль посмотреть код :D . надо к тебе в гости приехать, чаем напоить , тем бача это сейчас 200 км

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

СообщениеДобавлено: 03.06.2013 19:40:53
alexs
Если твои координаты верны - то по прямой - 88 км :-)
А как сам ККМ - заработал?

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

СообщениеДобавлено: 01.07.2013 14:57:24
ssadragon
alexs писал(а):Похожее поведение у аппарата в тот момент, когда он ожидает Z-Отчёта...

Да при снятии Z-отчета устанавливается режим 3, и после этого GetStatus некорректный.
Мучились мы долго, пока не сделали размаскировку полученного ответа, т.к. для снятия отчета необходимо войти в режим "Отчета с гашением", а отправляется на него 03, то мы маскируем это как "10 03", то и ответ от него приходит в том же вида "10 03". Вот из-за этого у нас режим получался - 0 а подрежим - 1, а когда сделали размаскировку ответа то все встало на свои места (режим - 3 подрежим - 0) и все заработало.
P.S. кстати без размаскировки можно и другие ответы не правильно парсить, например текущий день будет 10 или 03, либо минута 10 или 03, либо секунда 10 или 03.

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

СообщениеДобавлено: 02.07.2013 15:54:44
alexs
Можно поподробнее?

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

СообщениеДобавлено: 02.07.2013 18:24:17
ssadragon
alexs писал(а):Можно поподробнее?

Пример (примерный) ответа на GetStatus он там вначале посылает текущую уст. дату и время, дк вот если в этом ответе например время будет 13:10:23, то касса пришлет в таком виде 13 10 10 23 (это уже смещение на один), а если еще в дата будет - 10-03-13 то касса пришлет такое 10 10 10 03 13 и это еще смещение на два. Вот потом и получается что мы не правильно считаем данные в свои переменные(например ту же дату уже неправильно считаем если не сделаем размаскировку)

Там в описании драйвера сказано что нужно делать маскировку отправляемых данных на ККМ, но ни чего не сказано про размаскировку получаемых ответов.
Так вот, загвоздка как раз в этом и была, что необходимо выполнять как бы маскировку только в обратную сторону.
В вашей компоненте маскировку отправляемых данных выполняет функция
function TAtollKKM.MakeCommand(AData: string): string;
Я эту так сказать размаскировку выполнил вот так:
Код: Выделить всё
Function DeMask(AData: Ansistring): Ansistring;
Var
  i:        Integer;
  B:        Byte;
  DLE_Flag: Boolean;
Begin
  Result   := '';
  DLE_Flag := False;
  For i := 1 To length(AData) Do
  Begin
    If DLE_FLag Then
      DLE_Flag := False
    Else
    If AData[i] = sDLE Then
    Begin
      If i < length(AData) Then
        If AData[i + 1] In [sDLE, sETX] Then
        Begin
          Result   := Result + AData[i + 1];
          DLE_Flag := True;
        End;
    End
    Else
      Result := Result + AData[i];
  End;
End;

И после этого все заработало как часы :D

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

СообщениеДобавлено: 11.11.2013 10:48:16
*Rik*
Ссылка не работает, тоже хочется посмотреть библиотеку...