Взять кассу

Сканеры, кассы, ККТ и т.д.
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Взять кассу

Сообщение finsoftrz »

Хотя в 18 регистре есть дата и время окончания текущей смены. Наверно, по ним можно вычислить...
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Взять кассу

Сообщение Игорь Столяров »

finsoftrz писал(а): 02 Август 2018, 10:18 У пиритов и штрихов это штатная функция
1. Посмотрите в справке признаки SessionOpened и SessionExceedLimit - это флаги открытия смены и превышения 24 лимита в АТОЛ.

2. Здесь ещё нужно учитывать т.н. новый порядок формирования чеков. В контексте Вашего вопроса, здесь важно, что смена открывается первым фискальным чеком, а значит и контроль открытия смены должен производиться при открытии фискального документа - см. примеры формирования чеков на сайте АТОЛ для ФФД 1.05. Раньше действительно нужно было проверять открытие смены и специально её открывать - подозреваю, что именно это и делается в ПИРИТЕ и в старом порядке работы с Штрих-М (если Вы не юзаете FNOperation()).
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Взять кассу

Сообщение finsoftrz »

Нет, не правильно подозреваете... :-) Это просто дополнительная проверка при запуске программы.
У меня в описании драйвера Атола 8 версии этого свойства нет. Там только признак открытой смены и дата/время завершения смены (что это такое, надо уточнять, под рукой атола нет). Судя по всему, добавили в одном из последних релизов драйвера, после волны вопросов на этот счет.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Взять кассу

Сообщение Игорь Столяров »

finsoftrz писал(а): 02 Август 2018, 12:36У меня в описании драйвера Атола 8 версии этого свойства нет.
Всё может быть, в т.ч. и волна вопросов на столь нужную и актуальную тему ...
А описание драйвера АТОЛ у меня от 31.10.2017 г. - т.е. нельзя назвать его совсем новым.
Здесь очень помогает обычный поиск, попробуйте пожалуйста (см. рисунок)

Ukraine.jpg
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Взять кассу

Сообщение finsoftrz »

Скачал последнюю версию документации, там это появилось. Поиском я пользоваться умею, спасибо... :-)
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Взять кассу

Сообщение finsoftrz »

Игорь, а сверку с ОФД делали? Меня сейчас интересует Такском. Как я понял, у них не свободно.
Для первого ОФД есть работающий пример на php, оставлю здесь, может кому пригодится.

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

<?php 
   //Источник 
   //https://olegon.ru/showthread.php?t=27917 
   print "Подключаюсь... \n";    
   $url = "https://org.1-ofd.ru/api/user/login"; 
   //Логин к ОФД 
   $MyLogin='МойЛогин'; 
   //Пароль к ОФД 
   $MyPass='МойПароль'; 
   //Номер интересующей нас кассы в ОФД 
   $MyKass="МояКасса"; 
   $user=array('login'=>$MyLogin, 'password'=>$MyPass ); 
   $ch = curl_init();      
   //Имя файла, в который мы запишем "сырые данные" из ОФД 
   $file = 'fromofd.txt'; 
   //Имя файла, в который мы запишем данные по сменам 
   $fileres = 'resultat.txt'; 
   $strres = ""; 
   $strvyv = ""; 
   $current = file_get_contents($file); 
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   
   curl_setopt($ch, CURLOPT_URL, $url);   
   curl_setopt($ch, CURLOPT_HEADER, true); 
   curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json;charset=utf-8"));  
   curl_setopt($ch,CURLOPT_POSTFIELDS,json_encode($user)); 
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
   curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);  
   curl_setopt($ch,CURLOPT_CUSTOMREQUEST,'POST'); 
   curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); //Записываем куки в файл 
   curl_setopt($ch, CURLOPT_COOKIEFILE,  'cookie.txt'); 
   $result = curl_exec($ch);   
   print "Подключились \n"; 
   $json=json_decode($result,true); 
   curl_close($ch);  
   print "\n **************************************** \n";    
   $Mohtn = date("m"); 
   $Day = date("d"); 
   $Year = date("y"); 
   //Для сверки - всегда забираем информацию за последний месяц 
   $StartDate = date('U', mktime(0, 0, 0, $Mohtn-1, $Day, $Year)); 
   $StartDate = $StartDate."000"; 

   //Так как данные идут от более свежих к более старым - то до сегодняшнего дня с указанной даты 
   $newurl="https://org.1-ofd.ru/api/kkms/".$MyKass."/transactions?fromDate=".$StartDate; 

   print "Получаем чеки... \n";                                       
   $ch1 = curl_init($newurl); 
   curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true); 
   curl_setopt($ch1, CURLOPT_COOKIEFILE, 'cookie.txt'); 
   curl_setopt($ch1, CURLOPT_SSL_VERIFYPEER, false); 
   curl_setopt($ch1, CURLOPT_SSL_VERIFYHOST, false);     
   $result = curl_exec($ch1);   
   print "Чеки получены\n"; 

   //Для интереса - $result ("сырые данные") запишем в файл 
   file_put_contents($file, $result); 

   $obj=json_decode($result,true); 
   curl_close($ch1);  
   $KolvoClose=0; 
   $KolvoOpen=0; 
   $KolvoProd=0; 
   $KolvoProdNal=0; 
   $KolvoProdKarta=0; 
   $KolvoVz=0; 
   $KolvoVzNal=0; 
   $KolvoVzKarta=0; 
   $TotalPr=0; 
   $TotalPrNal=0; 
   $TotalPrBNal=0; 
   $SummaPr=0; 
   $SummaPrZ=0; 
   $SummaPrNal=0; 
   $SummaPrNalZ=0; 
   $SummaPrKarta=0; 
   $SummaPrKartaZ=0; 
   $SummaVz=0; 
   $SummaVzNal=0; 
   $SummaVzKarta=0; 
   $shiftNumber=0; 

   $nalvyv=0; 
   print "Проверка чеков...\n"; 
   foreach($obj as $item)  
   { 
        $currentline = $item; 
        if ($item["transactionType"]=="CLOSE_SHIFT") 
        { 
            if ($shiftNumber>0) 
            { 
               $strvyv = "Смена = ".$shiftNumber."\n"; 
               $strres .=$strvyv; 
               //На экран - только последню смену 
               if ($nalvyv<1) 
                  {print $strvyv;} 
               //Если есть - выведем сводную информацию 
               if ($SummaPrZ<>0 or $SummaPrNalZ<>0 or $SummaPrKartaZ<>0) 
               { 
                   $strvyv = " Продажи (сумма за смену)       = " . $SummaPrZ . "\n"; 
                   $strres .=$strvyv; 
                   if ($nalvyv<1) 
                      {print $strvyv;} 
                   $strvyv = "    Наличными (сумма за смену)  = " . $SummaPrNalZ . "\n"; 
                   $strres .=$strvyv; 
                   if ($nalvyv<1) 
                      {print $strvyv;} 
                   $strvyv = "    Картой (сумма за смену)     = " . $SummaPrKartaZ . "\n"; 
                   $strres .=$strvyv; 
                   if ($nalvyv<1) 
                      {print $strvyv;} 
               } 
               if ($KolvoProd>0 or $KolvoVz>0)  
               { 
                   $TotalPr = $SummaPr-$SummaVz; 
                   $TotalNal = $SummaPrNal-$SummaVzNal; 
                   $TotalBNal = $SummaPrKarta-$SummaVzKarta; 

                   //В случае несовпадение итогов - выведем информацию 
                   if ($SummaPrZ<>0 or $SummaPrNalZ<>0 or $SummaPrKartaZ<>0) 
                   { 
                      if ((bccomp($TotalPr, $SummaPrZ, 2)<>0 or bccomp($TotalNal, $SummaPrNalZ, 2)<>0 or bccomp($TotalBNal, $SummaPrKartaZ, 2)<>0)) 
                      { 
                         $strvyv = " Продажи (сверка за смену)       = " . $TotalPr . "\n"; 
                         $strres .=$strvyv; 
                         if ($nalvyv<1) 
                            {print $strvyv;} 
                         $strvyv = "    Наличными (сверка за смену)  = " . $TotalNal . "\n"; 
                         $strres .=$strvyv; 
                         if ($nalvyv<1) 
                            {print $strvyv;} 
                         $strvyv = "    Картой (сверка за смену)     = " . $TotalBNal . "\n"; 
                         $strres .=$strvyv; 
                         if ($nalvyv<1) 
                            {print $strvyv;} 
                      } 
                   } 
                   //Выведем детальную информацию 
                   $strvyv = " Продажи (чеков)  = " . $KolvoProd . "\n"; 
                   $strres .=$strvyv; 
                   if ($nalvyv<1) 
                      {print $strvyv;} 
                   $strvyv = " Продажи (сумма)  = " . $SummaPr . "\n"; 
                   $strres .=$strvyv; 
                   if ($nalvyv<1) 
                      {print $strvyv;} 
                   $strvyv = "    Наличными     = " . $SummaPrNal . "\n"; 
                   $strres .=$strvyv; 
                   if ($nalvyv<1) 
                      {print $strvyv;} 
                   $strvyv = "    Картой        = " . $SummaPrKarta . "\n"; 
                   $strres .=$strvyv; 
                   if ($nalvyv<1) 
                      {print $strvyv;} 
                   $strvyv = " Возвраты (чеков) = " . $KolvoVz . "\n"; 
                   $strres .=$strvyv; 
                   if ($nalvyv<1) 
                      {print $strvyv;} 
                   $strvyv = " Возвраты (сумма) = " . $SummaVz . "\n"; 
                   $strres .=$strvyv; 
                   if ($nalvyv<1) 
                      {print $strvyv;} 
                   $strvyv = "    Наличными     = " . $SummaVzNal . "\n"; 
                   $strres .=$strvyv; 
                   if ($nalvyv<1) 
                      {print $strvyv;} 
                   $strvyv = "    Картой        = " . $SummaVzKarta . "\n"; 
                   $strres .=$strvyv; 
                   if ($nalvyv<1) 
                      {print $strvyv;} 
               } 
               $SummaPrZ=0; 
               $SummaPrNalZ=0; 
               $SummaPrKartaZ=0; 

               $TotalPr=0; 
               $TotalPrNal=0; 
               $TotalPrBNal=0; 

               $KolvoProd=0; 
               $SummaPr=0; 
               $SummaPrNal=0; 
               $SummaPrKarta=0; 
               $KolvoVz=0; 
               $SummaVz=0; 
               $SummaVzNal=0; 
               $SummaVzKarta=0; 
                
               //Более старые - не выводим 
               $nalvyv=1; 
            } 
            $shiftNumber = $item["shiftNumber"]; 
            $KolvoClose = $KolvoClose+1; 
            $SummaPrZ = $SummaPrZ + $item["sum"]; 
            $SummaPrNalZ = $SummaPrNalZ + $item["payments"][0]["sum"];             
            $SummaPrKartaZ = $SummaPrKartaZ + $item["payments"][1]["sum"];             
        } 
        elseif ($item["transactionType"]=="OPEN_SHIFT") 
            {$KolvoOpen = $KolvoOpen+1;} 
        elseif ($item["transactionType"]=="TICKET") 
        {  
            if ($shiftNumber<1) 
               {$shiftNumber = $item["shiftNumber"];} 
            if ($item["operationType"]==2) 
            { 
                $KolvoProd = $KolvoProd + 1; 
                $SummaPr = $SummaPr + $item["sum"]; 
                $SummaPrNal = $SummaPrNal + $item["payments"][0]["sum"];             
                $SummaPrKarta = $SummaPrKarta + $item["payments"][1]["sum"];             
            } 
            else  
            { 
                //В общем плане "operationType" может быть равно не только 2 и 3, но у нас - только эти (2 - продажи, 3 - возвраты) 
                $KolvoVz=$KolvoVz+1; 
                $SummaVz = $SummaVz + $item["sum"]; 
                $SummaVzNal = $SummaVzNal + $item["payments"][0]["sum"];             
                $SummaVzKarta = $SummaVzKarta + $item["payments"][1]["sum"];                         
            }               
        }; 
   } 
   if ($shiftNumber>0) 
   { 
      $strvyv = "Смена=".$shiftNumber."\n"; 
      $strres .=$strvyv; 
      if ($nalvyv < 1) 
         {print $strvyv;} 

      $strvyv = " Продажи (сумма за смену)       = " . $SummaPrZ . "\n"; 
      $strres .=$strvyv; 
      if ($nalvyv < 1) 
         {print $strvyv;} 
      $strvyv = "    Наличными (сумма за смену)  = " . $SummaPrNalZ . "\n"; 
      $strres .=$strvyv; 
      if ($nalvyv < 1) 
         {print $strvyv;} 
      $strvyv = "    Картой (сумма за смену)     = " . $SummaPrKartaZ . "\n"; 
      $strres .=$strvyv; 
      if ($nalvyv < 1) 
         {print $strvyv;} 
      if ($KolvoProd>0 or $KolvoVz>0)  
      { 
         $TotalPr = $SummaPr-$SummaVz; 
         $TotalNal = $SummaPrNal-$SummaVzNal; 
         $TotalBNal = $SummaPrKarta-$SummaVzKarta; 
         if ($SummaPrZ<>0 or $SummaPrNalZ<>0 or $SummaPrKartaZ<>0) 
         { 
            if ((bccomp($TotalPr, $SummaPrZ, 2)<>0 or bccomp($TotalNal, $SummaPrNalZ, 2)<>0 or bccomp($TotalBNal, $SummaPrKartaZ, 2)<>0)) 
            { 
               $strvyv = " Продажи (сверка за смену)       = " . $SummaPrZ . "\n"; 
               $strres .=$strvyv; 
               if ($nalvyv < 1) 
                  {print $strvyv;} 
               $strvyv = "    Наличными (сверка за смену)  = " . $SummaPrNalZ . "\n"; 
               $strres .=$strvyv; 
               if ($nalvyv < 1) 
                  {print $strvyv;} 
               $strvyv = "    Картой (сверка за смену)     = " . $SummaPrKartaZ . "\n"; 
               $strres .=$strvyv; 
               if ($nalvyv < 1) 
                  {print $strvyv;} 
            } 
         } 
         $strvyv = " Продажи (чеков)  = " . $KolvoProd . "\n"; 
         $strres .=$strvyv; 
         if ($nalvyv < 1) 
            {print $strvyv;} 
         $strvyv = " Продажи (сумма)  = " . $SummaPr . "\n"; 
         $strres .=$strvyv; 
         if ($nalvyv < 1) 
            {print $strvyv;} 
         $strvyv = "    Наличными     = " . $SummaPrNal . "\n"; 
         $strres .=$strvyv; 
         if ($nalvyv < 1) 
            {print $strvyv;} 
         $strvyv = "    Картой        = " . $SummaPrKarta . "\n"; 
         $strres .=$strvyv; 
         if ($nalvyv < 1) 
            {print $strvyv;} 
         $strvyv = " Возвраты (чеков) = " . $KolvoVz . "\n"; 
         $strres .=$strvyv; 
         if ($nalvyv < 1) 
            {print $strvyv;} 
         $strvyv = " Возвраты (сумма) = " . $SummaVz . "\n"; 
         $strres .=$strvyv; 
         if ($nalvyv < 1) 
            {print $strvyv;} 
         $strvyv = "    Наличными     = " . $SummaVzNal . "\n"; 
         $strres .=$strvyv; 
         if ($nalvyv < 1) 
            {print $strvyv;} 
         $strvyv = "    Картой        = " . $SummaVzKarta . "\n"; 
         $strres .=$strvyv; 
         if ($nalvyv < 1) 
            {print $strvyv;} 
      } 
   } 
   print "Конец проверки чеков\n"; 
   file_put_contents($fileres, $strres); 
?>
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Взять кассу

Сообщение Игорь Столяров »

finsoftrz писал(а): 02 Август 2018, 19:02Игорь, а сверку с ОФД делали?
Неа. Тут видимо будет тот же дурдом, что в своё время был в системах клиент-банк.
Т.е. каждый будет делать отсебятину и с пеной у рта доказывать, что это и есть пик интеллекта.
Потом, наверно, придут к какой-то общей спецификации REST интерфейса, если конечно раньше вся эта кормушка не прикроется. ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Взять кассу

Сообщение finsoftrz »

Еще интересная тема - удаленный мониторинг касс. Здесь очень к месту ip-драйвер. Есть 2 варианта. Либо запускать сервис ip-сервера на каждой кассе и коннектится с сервера по мере необходимости получить информацию, либо коннектится с кассы к серверу с определенной периодичностью. Я пока больше склоняюсь ко второму варианту, чтобы не ставить дополнительное ПО на кассы.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Взять кассу

Сообщение finsoftrz »

А может, первый вариант, не надо лишних сеансов связи делать. :-)
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Взять кассу

Сообщение Игорь Столяров »

finsoftrz писал(а): 04 Август 2018, 7:54Либо запускать сервис ip-сервера на каждой кассе и коннектится с сервера по мере необходимости получить информацию
Ну это же не мониторинг кассы (ФР) как таковой ... Вы же не подключатесь удалённо к самому ФР и не считываете из него данные.
Скорее - получение информации из БД кассовой программы, и здесь действительно возможна куча беcполезных вариантов.
Почему ? Да потому, что можно просто войти в личный кабинет оФД и получить всю информацию об операциях каждого ФР в режиме реального времени. Вы же сами недавно говорили о получении данных с сайта ОФД ... ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Взять кассу

Сообщение finsoftrz »

При запуске кассовая программа производит проверку оборудования, в том числе считывает из фискальников различную информацию (количество не отправленных в офд документов, дату/время первого не отправленного документа, срок действия фн и тп.). Эта информация может сохраняться в базе данных и считываться системой мониторинга.
С личным кабинетом ОФД не все так просто. Во первых, когда касс и магазинов много (несколько десятков), то работать в личном кабинете негуманно. Можно наладить считывание информации из ОФД через их api. Но это тоже не дает всей нужной информации. Например, не все чеки могут быть отправлены в ОФД. Мониторить надо не только выручку. Например, различные сбойные ситуации (они пишутся кассовой программой в лог), размер базы данных, размер лога. Случаи отката платежных транзакций (чеки из базы никогда не удаляются, в случае отката у них остаются соответствующие признаки).
То есть, в учетной системе уже есть список касс. Добавляем ip-адрес, а затем в специальном диалоге жмем получение нужной информации и опрашиваем сразу все кассы во всех магазинах (или выборочно). Тут же можно и стукнуться в ОФД. Аналогичную систему мониторинга хорошо прикрутить и к рабочим местам товароведов. Обычно УТМ Егаис на их компьютерах установлен, там же его лог лежит, по которому можно контролировать прохождение алкогольных транзакций.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Взять кассу

Сообщение Игорь Столяров »

Безусловно, в таком большом хозяйстве, чем больше собирается информации - тем лучше.
И система протоколирования выполненных кассовых операций (а именно о ней идёт речь, а не о "мониторинге касс") - очень полезна.

Но дьявол, как обычно кроется в деталях. Чем больше мы собираем различных цифр по одному действию, тем выше вероятность их расхождения. Т.е. здесь нужно чётко понимать, что показывают те или иные цифры. Я уже видел фискальные чеки (и сумма прошла по Z-отчёту), которых "почему-то" нет в ОФД. Понятно, что вся эта система поборов с бизнеса за его счёт только отстраивается, и далее будет работать лучше, но всё равно будут какие-то расхождения на большой выборке данных …

Идеальной видится схема с двумя цифрами:
1. Первичный документ (фискальный чек)
2. Запрос в ОФД (а ещё лучше в ФНС) и получение списка зафиксированных операций.

Всё остальное, включая Z/X-отчёт, данные об операциях в ФН, различные журналы кассовой программы - просто промежуточные или рудиментные данные из старых схем учёта фискальных операций. Если бы эта система c он-лайн кассами была доведена до ума (а возможно когда-то так и будет), то всё это вообще некому не нужно, т.к. только вызывает путаницу … ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Взять кассу

Сообщение finsoftrz »

Кому-то сникерсы по ночам снятся, кому-то девочки на гиперэкстензиях... :-)

Пробовал получить чек на сервисе проверки чеков ФНС. В принципе, ничего сложного нет, там обычный http запрос с get параметрами, в качестве которых передаются номер ФП с чека и сумма. Но возвращается в ответ целая html-страничка, а не несколько байтиков. В принципе, можно, конечно, залить файлик со списком чеков (фд+сумма) на ftp и php-скриптом продергать их. Тогда не надо делать api разных ФД. Пробовать надо, насколько стабильно будет работать, а то таких умных много, положат сайт ФНС, если они не защищаются...

На самом деле ввести систему контролинга с использованием ip-драйвера не сложно, технология давно отработана. Ну, в течении дня не спеша базовый вариант собрать, а потом постепенно расширять набор функций диагностики. Скорее всего, админа придется привлекать, чтобы порт на роутерах пробрасывал, так как в магазинах выход в интернет может быть через роутеры.

Вопрос реальный. Пока один магазин наблюдаю, они немного чеков бьют. На следующей недели планируется запуск рабочего места в другом магазине. Там уже алкоголь, мультифирменность, весы, почти по полной программе. Тоже на пирите. Ждем фискальники штриха и атола, должны на недельку привезти для плотного тестирования. А потом процесс установок может стать массовым. И как-то стремно, если нет централизованного контроля. Хочется нажать на кнопку и увидеть, что происходит на всех подключенных кассах...
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Взять кассу

Сообщение finsoftrz »

Игорь Столяров писал(а): 04 Август 2018, 9:29 Идеальной видится схема с двумя цифрами:
1. Первичный документ (фискальный чек)
2. Запрос в ОФД (а ещё лучше в ФНС) и получение списка зафиксированных операций.

Всё остальное, включая Z/X-отчёт, данные об операциях в ФН, различные журналы кассовой программы - просто промежуточные или рудиментные данные из старых схем учёта фискальных операций. Если бы эта система c он-лайн кассами была доведена до ума (а возможно когда-то так и будет), то всё это вообще некому не нужно, т.к. только вызывает путаницу … ;)
Я думаю, это нереально. Там много всего тянется за продажами через кассу. Обмен с учетной системой, к примеру, никак не отменишь. Скорость обслуживания покупателей можно обеспечить, только если связь суперстабильная и быстрая. Если Егаис отменят. Кстати, в следующем году планируется ввод маркировки табачных изделий. Там будет через ОФД, дополнительный штрих-код сканироваться на кассах и передаваться. Не отдельно, как в Егаис, и это вполне разумно выглядит.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Взять кассу

Сообщение Игорь Столяров »

Понятно, что система сбора фискальных данных многоуровневая, задействованы ФН, ОФД и т.д.
Важно, что должно быть ОДНО конечное место сбора информации с доступным сервисом.

Упрощённо говоря, что бы и продаван в полуподвальной алкашке и владелец бизнеса на яхте,
могли нажать одну и ту же кнопку и получить одинаковые операции и итог по фискальному обороту … ;)
Фискальный чек и БД в ФНС - это результат. Всё, что между ними - это процесс, рабочие данные ...
За теми кто отстал - не возвращаться. (С) Кодекс
Ответить