Взять кассу

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

Взять кассу

Сообщение finsoftrz » 02 Август 2018, 12:00

Хотя в 18 регистре есть дата и время окончания текущей смены. Наверно, по ним можно вычислить...
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3711
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Взять кассу

Сообщение Игорь Столяров » 02 Август 2018, 12:16

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

2. Здесь ещё нужно учитывать т.н. новый порядок формирования чеков. В контексте Вашего вопроса, здесь важно, что смена открывается первым фискальным чеком, а значит и контроль открытия смены должен производиться при открытии фискального документа - см. примеры формирования чеков на сайте АТОЛ для ФФД 1.05. Раньше действительно нужно было проверять открытие смены и специально её открывать - подозреваю, что именно это и делается в ПИРИТЕ и в старом порядке работы с Штрих-М (если Вы не юзаете FNOperation()).
«V» значит Вендетта !

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 877
Зарегистрирован: 06 Ноябрь 2014, 12:48

Взять кассу

Сообщение finsoftrz » 02 Август 2018, 12:36

Нет, не правильно подозреваете... :-) Это просто дополнительная проверка при запуске программы.
У меня в описании драйвера Атола 8 версии этого свойства нет. Там только признак открытой смены и дата/время завершения смены (что это такое, надо уточнять, под рукой атола нет). Судя по всему, добавили в одном из последних релизов драйвера, после волны вопросов на этот счет.
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3711
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Взять кассу

Сообщение Игорь Столяров » 02 Август 2018, 12:52

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

Ukraine.jpg
«V» значит Вендетта !

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 877
Зарегистрирован: 06 Ноябрь 2014, 12:48

Взять кассу

Сообщение finsoftrz » 02 Август 2018, 13:12

Скачал последнюю версию документации, там это появилось. Поиском я пользоваться умею, спасибо... :-)
Рязань решает.

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 877
Зарегистрирован: 06 Ноябрь 2014, 12:48

Взять кассу

Сообщение finsoftrz » 02 Август 2018, 19:02

Игорь, а сверку с ОФД делали? Меня сейчас интересует Такском. Как я понял, у них не свободно.
Для первого ОФД есть работающий пример на 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); 
?>
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3711
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Взять кассу

Сообщение Игорь Столяров » 02 Август 2018, 19:27

finsoftrz писал(а):
02 Август 2018, 19:02
Игорь, а сверку с ОФД делали?
Неа. Тут видимо будет тот же дурдом, что в своё время был в системах клиент-банк.
Т.е. каждый будет делать отсебятину и с пеной у рта доказывать, что это и есть пик интеллекта.
Потом, наверно, придут к какой-то общей спецификации REST интерфейса, если конечно раньше вся эта кормушка не прикроется. ;)
«V» значит Вендетта !

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 877
Зарегистрирован: 06 Ноябрь 2014, 12:48

Взять кассу

Сообщение finsoftrz » 04 Август 2018, 7:54

Еще интересная тема - удаленный мониторинг касс. Здесь очень к месту ip-драйвер. Есть 2 варианта. Либо запускать сервис ip-сервера на каждой кассе и коннектится с сервера по мере необходимости получить информацию, либо коннектится с кассы к серверу с определенной периодичностью. Я пока больше склоняюсь ко второму варианту, чтобы не ставить дополнительное ПО на кассы.
Рязань решает.

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 877
Зарегистрирован: 06 Ноябрь 2014, 12:48

Взять кассу

Сообщение finsoftrz » 04 Август 2018, 8:19

А может, первый вариант, не надо лишних сеансов связи делать. :-)
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3711
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Взять кассу

Сообщение Игорь Столяров » 04 Август 2018, 8:26

finsoftrz писал(а):
04 Август 2018, 7:54
Либо запускать сервис ip-сервера на каждой кассе и коннектится с сервера по мере необходимости получить информацию
Ну это же не мониторинг кассы (ФР) как таковой ... Вы же не подключатесь удалённо к самому ФР и не считываете из него данные.
Скорее - получение информации из БД кассовой программы, и здесь действительно возможна куча беcполезных вариантов.
Почему ? Да потому, что можно просто войти в личный кабинет оФД и получить всю информацию об операциях каждого ФР в режиме реального времени. Вы же сами недавно говорили о получении данных с сайта ОФД ... ;)
«V» значит Вендетта !

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 877
Зарегистрирован: 06 Ноябрь 2014, 12:48

Взять кассу

Сообщение finsoftrz » 04 Август 2018, 9:03

При запуске кассовая программа производит проверку оборудования, в том числе считывает из фискальников различную информацию (количество не отправленных в офд документов, дату/время первого не отправленного документа, срок действия фн и тп.). Эта информация может сохраняться в базе данных и считываться системой мониторинга.
С личным кабинетом ОФД не все так просто. Во первых, когда касс и магазинов много (несколько десятков), то работать в личном кабинете негуманно. Можно наладить считывание информации из ОФД через их api. Но это тоже не дает всей нужной информации. Например, не все чеки могут быть отправлены в ОФД. Мониторить надо не только выручку. Например, различные сбойные ситуации (они пишутся кассовой программой в лог), размер базы данных, размер лога. Случаи отката платежных транзакций (чеки из базы никогда не удаляются, в случае отката у них остаются соответствующие признаки).
То есть, в учетной системе уже есть список касс. Добавляем ip-адрес, а затем в специальном диалоге жмем получение нужной информации и опрашиваем сразу все кассы во всех магазинах (или выборочно). Тут же можно и стукнуться в ОФД. Аналогичную систему мониторинга хорошо прикрутить и к рабочим местам товароведов. Обычно УТМ Егаис на их компьютерах установлен, там же его лог лежит, по которому можно контролировать прохождение алкогольных транзакций.
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3711
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Взять кассу

Сообщение Игорь Столяров » 04 Август 2018, 9:29

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

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

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

Всё остальное, включая Z/X-отчёт, данные об операциях в ФН, различные журналы кассовой программы - просто промежуточные или рудиментные данные из старых схем учёта фискальных операций. Если бы эта система c он-лайн кассами была доведена до ума (а возможно когда-то так и будет), то всё это вообще некому не нужно, т.к. только вызывает путаницу … ;)
«V» значит Вендетта !

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 877
Зарегистрирован: 06 Ноябрь 2014, 12:48

Взять кассу

Сообщение finsoftrz » 04 Август 2018, 11:10

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

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

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

Вопрос реальный. Пока один магазин наблюдаю, они немного чеков бьют. На следующей недели планируется запуск рабочего места в другом магазине. Там уже алкоголь, мультифирменность, весы, почти по полной программе. Тоже на пирите. Ждем фискальники штриха и атола, должны на недельку привезти для плотного тестирования. А потом процесс установок может стать массовым. И как-то стремно, если нет централизованного контроля. Хочется нажать на кнопку и увидеть, что происходит на всех подключенных кассах...
Рязань решает.

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 877
Зарегистрирован: 06 Ноябрь 2014, 12:48

Взять кассу

Сообщение finsoftrz » 04 Август 2018, 11:19

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

Всё остальное, включая Z/X-отчёт, данные об операциях в ФН, различные журналы кассовой программы - просто промежуточные или рудиментные данные из старых схем учёта фискальных операций. Если бы эта система c он-лайн кассами была доведена до ума (а возможно когда-то так и будет), то всё это вообще некому не нужно, т.к. только вызывает путаницу … ;)
Я думаю, это нереально. Там много всего тянется за продажами через кассу. Обмен с учетной системой, к примеру, никак не отменишь. Скорость обслуживания покупателей можно обеспечить, только если связь суперстабильная и быстрая. Если Егаис отменят. Кстати, в следующем году планируется ввод маркировки табачных изделий. Там будет через ОФД, дополнительный штрих-код сканироваться на кассах и передаваться. Не отдельно, как в Егаис, и это вполне разумно выглядит.
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3711
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Взять кассу

Сообщение Игорь Столяров » 04 Август 2018, 14:13

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

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

Ответить