Clarion и АМС100Ф

Сканеры, кассы, ККТ и т.д.
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Гость

Сообщение Гость »

Описание используемых функций из DLL

Код: Выделить всё

       module('chon100.dll')
          SetSupplierCode(*Cstring),Raw,Pascal,Name('SetSupplierCode'),DLL                           ! код поставщика
          ConnectKKM(Long),Long,Raw,Pascal,Name('ConnectKKM'),DLL                                    ! установить связь
          DisconnectKKM,Raw,Pascal,Name('DisconnectKKM'),DLL                                         ! разорвать связь
          cbSetClearBufMode(Long),RAW,Pascal,Name('cbSetClearBufMode'),DLL                           ! очистить базу покупок
          cbAddSale(*CString,Real,Real,Long),Long,Raw,Pascal,Name('cbAddSale'),DLL                   ! добавить данные чека
          StartWaiting(long),Raw,Pascal,Dll,Name('StartWaiting')                                     !
          StopWaiting,Raw,Pascal,Dll,Name('StopWaiting')                                             !
          WaitingStatus,Long,Raw,Pascal,Dll,Name('WaitingStatus')                                    !
          GetErrorMsg(*cstring),Long,Raw,Pascal,Name('GetErrorMsg'),DLL                              !
          GetErrorCode,Long,Raw,Pascal,Name('GetErrorcode'),Dll                                      ! № ошибки
          Feed(Long),Long,Raw,Pascal,Name('Feed'),Dll                                                ! прогон ленты
          GetSaleNum(*Long),Long,Raw,Pascal,Name('GetSaleNum'),Dll                                   ! возвращает № следующей покупки
          ReadSaleFromKl(Long,*Long,*Long,*Long,*Real),Long,Raw,Pascal,Name('ReadSaleFromKl'),Dll    ! типа Z-отчет
          CheckRegKass,Long,Raw,Pascal,Name('CheckRegKass'),Dll
          GetSaleCountInCBKKM(*Long),Long,Raw,Pascal,Name('GetSaleCountInCBKKM'),Dll
          GetKLNum(*Long),Long,Raw,Pascal,Name('GetKLNum'),Dll                                       ! № КЛ
          GetNI(*Real),Long,Raw,Pascal,Name('GetNI'),Dll                                             ! Сумма НИ
          GetKKMNum(*Long),Long,Raw,Pascal,Name('GetKKMNum'),Dll                                     ! Заводской № ККМ
          ClearIndicator,Long,Raw,Pascal,Name('ClearIndicator'),Dll                                  ! Очистить индикатор ККМ
          cbAddBottomLine(*CString),Long,Raw,Pascal,Name('cbAddBottomLine'),Dll                      ! добавляет одну строку в массив строк окончания
          cbClearBottom,Raw,Pascal,Name('cbClearBottom'),Dll                                         ! удаления всех строк окончания чека
       end
Инициализация ККМ (в начале прог)

Код: Выделить всё

kkm                  CSTRING(20)    !код поставщика получаешь после покупки
  
      setsuppliercode(kkm)
      if connectkkm(lk:kkm_port) <> 1
         x# = geterrorcode()
           message(x#&' - ConnectKKM ошибка инициализации кассы')
      end
Отсоединение от ККМ(в конце прог или для переключ на другую ККМ)

Код: Выделить всё

    disconnectkkm()
Чтение данных для формирование отчета по кассовой ленте

Код: Выделить всё

qZ                   QUEUE,PRE(qZ)
npp                  LONG
otd                  LONG
sum                  REAL
                     END
br                   SHORT
buf                  GROUP,PRE(buf)
npp                  LONG
otd                  LONG
sum                  REAL
cr                   LONG
dsc                  LONG
                     END
npp                  LONG
kl                   LONG
ni                   REAL
if GetSaleNum(npp) <> 1        !количество покупок в ККМ
   x# = geterrorcode()
   stop(x#)
end
 
loop i# = 1 to npp-1    !Чтение покупок в очередь
     clear(buf)
     buf:npp = i#
     if ReadSaleFromKL(buf:npp,buf:otd,buf:cr,buf:dsc,buf:sum) <> 1
        x# = geterrorcode()
        stop(x#)
     else
        clear(qZ)
        qZ = Buf
        add(qZ)
     end
end
 
if GetNI(ni) <> 1    !Необнуляемый итог по кассе
   x# = geterrorcode()
   stop(x#)
end
 
if GetKLNum(kl) <> 1    !номер ленты
   x# = geterrorcode()
   stop(x#)
end

Удачи!
=======================
Алексей И.Латухин
Написал: ClaList(2)
Гость

Сообщение Гость »

Код: Выделить всё

!Вывод кассового чека
!Global-переменные
kkm_num            GROUP,PRE(kkm_num)
num_pok              LONG
z_num                LONG
num_kkm              LONG
                   END
!Local-переменные
cPRICE               REAL    !сумма покупки
cQTY                 REAL     !количество
cOTDEL               LONG  !номер отдела
Allright             LONG
lk:line_bott         CSTRING(19)    !строка окончания чека
!  Заполнение чека
       AllRight = 1
      cPRICE  =
      cQTY    =
       cOTDEL    =
       cbClearBottom   ! для удаления всех строк окончания чека
!  Вывод строки с НДС
        lk:line_bott = 'NВ том числе НДС'&'<0>'; if cbAddBottomLine(lk:line_bott) <> 1; stop('ошибка формирования 1-ой строки окончания'); end
        lk:line_bott = 'N'&right(format(sum_nds,@n_10.2)&'руб',17)&'<0>'; if cbAddBottomLine(lk:line_bott) <> 1; stop('ошибка формирования 2-ой строки окончания'); end
!  ВЫвод стор с НСП !(Устарело
        lk:line_bott = 'NВ том числе НCП'&'<0>'; if cbAddBottomLine(lk:line_bott) <> 1; stop('ошибка формирования 3-ой строки окончания'); end
        lk:line_bott = 'N'&right(format(sum_nsp,@n_10.2)&'руб',17)&'<0>'; if cbAddBottomLine(lk:line_bott) <> 1; stop('ошибка формирования 4-ой строки окончания'); end
!Проверка связи с кассой и получение номера покупки,если он нужен для хранения в базах
              l# = GetSaleNum(kkm_num:num_pok)
              if kkm_num:num_pok = 0
                message('Нет связи с кассовым аппаратом!' !
                       &'!     ПРОВЕРЬТЕ:'  !
                       &'!-включен-ли кассовый аппарат?'  !
                       &'!-находится-ли кассовый аппарат в режиме торговли?' !
                       &'!-подключен-ли кассовый аппарат к компьютеру кабелем?' !
                       &'!! ЗАКРОЙТЕ ПРОГРАММУ И ЗАНОВО ЗАПУСТИТЕ!')
                AllRight = 0
              end
!Вывод чека
              If AllRight
                ll# = GetKlnum(kkm_num:z_num)
                Out_Check_PLR(cPRICE,cQTY,cOTDEL,AllRight)
              end
              clear(cprice); clear(cqty); clear(cOtdel)
              cbClearBottom   ! для удаления всех строк окончания чека
              If AllRight
!Если операция вывода чека прошла успешно отметить по базам оплату и запомнить номер покупки и кассовой ленты
              end              

Out_Check_PRL во вложении

PS: Выдержки взяты из действующих прогр версия ПО ККМ 2.2 и выше
Есть опыт и со старыми ПО ККМ
Прошу простить за стиль
Надеюсь кому-то пригодиться, тем более что экспериментировать с ККМ как правило нет возможности


Удачи!
=======================
Алексей И.Латухин
Написал: ClaList(2)
Ответить