Pull to refresh

Comments 28

Зашёл почитать, думая что обычную «печатную машинку» научили работать в режиме принтера чеков, но нет, они будут по прежнему свалены в углу в связи с новым законом.
Называйте вещи своими именами. Касса это касса возможно со встроенным принтером чеков, а принтер чеков это принтер чеков.
Плюс цена у этой «кассы» очень странная. Быстрый гуглёж показал что есть решения с клавиатурой и экраном вплоть до практически двух кратной разницы в стоимости при такой же скорости печати. А значит производитель щедро накрутил цену. Как с штрих сканерами. На Али они стоят порой в десять раз дешевле при аналогичном качестве работы.

Ну она где-то стоит 11, а где-то 6, на Авито вообще бу можно снятые с учёта за 4 найти Атол, где вы за 2-3 нашли с экраном и кнопками и зачем это надо, если онлайн касса предусматривает номенклатуру, а это уже вся логика в 1с или подобной учётной софтине.

Первая же ссылка при запросе: Онлайн касса купить


Где надо, я озвучил. Атол сильно завышает цену на подобный девайс.
Работая в сфере автоматизации и создавая интеграционные решения — могу сказать, что переплатить за надежность, за адекватные средства интеграции и т.д. стоит, а первая ссылка что Вы нашли, купите и начните пользоваться в обычном режиме, сообщите о результатах!
У меня маленький бизнес не требующий таких решений. Две кассы эвотор 7.2 вроде. Два магазина. Всё что мне нужно они делают. Что не делают, пишу в тех поддержку эвотора товароучётной системы и мне порой в течении дня добавляют/изменяют функционал. Тех. поддержка эвотора работает только с багами, предложения по улучшению/изменению интерфейса кассы/ЛК они скидывают в спам. За год ни одно не прошло из того что кассиров реально каждый день раздражает.
Сейчас к примеру спамят рекламой сигарет(в смысле перехода на новый их учёт). Уже неделю активно долбят по нескольку раз за день, и отключить ни как нельзя. А это сильно мешает продавцам. Сигареты, алкоголь и другая продукция требующая нового учёта у меня никогда не продавалась и не может продаваться, что можно посмотреть по коду ОКВЭД и давать таргетированную рекламу или вовсе её отключить на кассе.
Атол 30ф это фискальный регистратор, а те что вы показали это автономные онлайн кассы. Да они дешевле, но вся суть 54 ФЗ что государство «заставит» всех перейти на товароучетные системы и тогда Вам придется убрать свою автономную ккм и купить фискальный регистратор и 1С
Автономная онлайн касса, это обычная оффлайн касса. Их могут использовать только в районах без интернета.
Все попавшие на скрин? судя по описанию умеют передавать данные ОФД, через wi-fi, сим карту, LAN, синий зуб или USB.
автономные в смысле работают без ПК, вы можете загружать в них номенклатуру, через какой нибудь интерфейс и работать по коду товара или с помощью сканера
Самая дешёвая к примеру умеет судя по инструкции синхронизироваться с 1C и печатать с ПК, но там какие то траблы в новой версии, то ли программно ограничили этот функционал, то ли глюки.
Аппаратно ЭЛВЕС-МФ вроде как там одно и тоже что в Атол 30ф, только добавили клаву и экран и программно зарезали функционал.
Тут немного в другом вопрос — какой аппарат можно интегрировать быстренько с собственной системой управления торговлей, чтобы отправлять чеки, а не какой дешевле можно купить.
Округление дробей при подсчете сумм, нужно округлять до копеек, иначе можно получить 1.000000001 или 0.999999999

Наверное, стОит присмотреться к арифметике с фиксированной точкой. Например, в копейках целыми числами считать.
Собственно, когда-то двоично-десятичные числа именно для этого и придумали.
Обычно я привожу к копейкам все цены (12 рублей 33 копейки = 1233 копеек) и потом их суммирую, только при умножении 1233 на 1.234 (такое количество бывает, когда ламинат кратно упаковкам продается, ну или кратно доскам), то там снова надо до целых округлять. Вчера больше цель была в краткие сроки все основные операции на апи провернуть и примерчик накидать как это работает, а дальше хоть на BASH через консольный curl можно отправлять задачки на печать по аналогии, у кого-то видел на nodejs товароучетные программы.
Планируемая схема примерно такая — есть CRM, которая крутится на сервере в локальной сети, ее открывают из браузеров, с серверной стороны на PHP через curl будут отправляться чеки и печататься на кассе. А сама касса подключена к любому компу на Windows в этой же сети.

Так я немного не понял… Касса на Винде?.. Какая же тут кросплатформенность.
Вот если бы API сервер JSON был бы внутри аппарата(вставить ту же малинку себе внутрь) и тогда мне не надо ставить всякие драйвера… а просто делаю request из любого языка из любой ОС… Это уже уровень.
Или хотя бы кроссплатформенное rest api(и не обязательно полный web сервер поднимать)
Типа запустил(в любой ОС) java -jar atol.jar или node atol.js и всё запустился.
(У нас например так но атол я снял с поддержки… Можно об этом почитать в топике https://habr.com/ru/post/453822/

Касса просто к пользовательскому компу зацеплена пока что, который на винде (а CRM на другом компе, который вообще в другой комнате), но драйвера аналогичные есть на linux x64/x32/arm, хоть где ставишь, по сети шлешь json запросы на порт 16732. Просто пока не хочу плодить устройства и подключить к любому уже существующему компу.

Можно например Orange Pi Zero приклеить к аппарату сбоку и по Ethernet подключить, сделать небольшой транспорт запросов, дополнив его авторизацией и поправив еще контроль очередей и обработку зависших заданий.

У меня точно такие же были пожелания чтобы касса была самостоятельной, даже рассматривал кассы типа Эвотор и похожие другие, но Эвотор вещь в себе, весь обмен через облако идет и аппарат сам себе компьютер, а с любого своего адреса на него долбиться или с него собирать данные со своего сервера без написания нативного приложения под их андроид не получится (так мне в оф. поддержке ответили).
но драйвера аналогичные есть на linux x64/x32/arm,

А Вы с linux ом хорошол работаете?.. Там вот там не всё просто, драйвера эти не везде ставятся..(Как правило это ubuntu какой нибудь последней версии с последним или конкретным ядром).Я использую CentOS и когда я проводил исследования они не поднимались. Проще было чем "трахаться" со стыковкой драйверов и ОС самому писать на низкоуровневом протоколе(те же затраты сил и нервов)… В случае атола внутри она "такая калоша" ,-хуже низкоуровневого протокола для ФР не видел.

Не тестировал, может еще через 2-3 версии всё допилят, но люди вроде удачно запускали на малинках. Предлагаю запилить образ для малинки который из коробки работает как надо, только вот где раздобыть подешевле аппарат для опытов, чтобы он умел печатать без ФН. На Авито большинство касс продают дороже чем новая в магазине, цены то совсем не монитоорят что оно подешевело…
«Вот если бы API сервер JSON был бы внутри аппарата(вставить ту же малинку себе внутрь)»

Полтора года назад после весьма энергичных поисков я нашёл только одного производителя таких касс (для вставки ФН вскрывал корпус, там была какая-то платка какого-то *** Pi).
По моему мнению, атол поздно сделал это решение.
За три года уже написано много серверов для ККМ.
Есть как аппаратно-программные (ардуинки со специальной прошивкой),
так и разной степени удобности / платности под обычный ПК.
Но то, что Вы сейчас описали в статье по удобству установки / интеграции
по моему мнению проигрывает практически всем.
Как насчет скорости побития я подымал такое решение только на Windows машине ККМ была подключена по TCP/IP и скорость работы оставляла желать лучшего…
Скорость не очень, сам демон атоловский, который обрабатывает эти задачки слегка тупит, мог бы в реальном времени ответы присылать на запросы, но он ставит в очередь и даже элементарно глянуть состояние смены нужно отправить задачу, а потом ждать 0.2-0.4 сек результата, с определенной периодичностью стучаться надо GET запросами и проверять состояние задачки, ну у нас может в среднем 2 чека в час будет, чеки вроде вполне шустро печатает, не больше секунды от отправки до старта печати, но я один раз поймал глюк когда задание зависло и всю очередь остановило, наверно когда запускал и останавливал веб-сервис что-то запнулось.
«у Атол с 10й версии есть встроенный веб-сервер в драйвере, который принимает JSON-задания»

Хм, таки есть жизнь на Марсе со сторонним софтом…

Чуть более года полтора назад я перебрал чуть ли не все аппараты, заколебал всех местных поставщиков и только у Старруса была касса с поддержкой JSON (с жутко глючным настроечным софтом, я два ФН запорол, пока они отлаживались на мне).
У какой-то кассы (не помню уже) был жуткий бинарный формат, видимо сделанный в спешке на основе «проводного» протокола.
Другие производители и вовсе не хотели давать протокол («кто ты такой?»).

В отличие от описываемого в статье аппарата касса от Старруса давала ответ сразу, без повторных запросов.

Впереди работа с маркировкой, скучать не придётся.
Но рынок цивилизируется, радует.
у меня не получается. в как проверить есть ли вообще связь ккт с этим сервером? драйвер установился, настройки открываются, а команды не выполняются
Сперва нужно перезапустить сервер после установки, там так написано, ну после того как галочку активировать ставите и сохраняете.

А потом проверить состояние смены, если не может получить, то смотреть выхлоп в результатах curl, а и еще важный момент забыл упомянуть, uuid генерируется через exec('uuidgen -r');
это требует установленной консольной утилиты, если команда uuidgen в консоли не выполняется…
Я тут уже новую версию библиотеки почти сделал пока к рабочему проекту прикручиваю, обработки всех ошибок сделал — когда нет соединения с сервером, когда с сервером общается, но сам ккт выключен и сервер до него достучаться не может и всякое такое

сервер перезапускала, UUid генерируется, в ответ выходит:
Array ( [0] => [1] => 0 [2] => )
и все…
curl выдают bool(false)
жду, наверно, новую версию.

может проблема в том, что " есть CRM, которая крутится на сервере в локальной сети, ее открывают из браузеров" а моя не на локале, а на хостинге?

Это достаточно опасно, как уже ниже написали в комментарии. В статье я указал что у этой штуки отсутствует защита и в той же локалке я этот порт очень жестко зарезал брандмауэром, только с одного локального компа доступно. По-хорошему тут либо по впн каким-то образом или через ssh прокидавать порт или на локальном компе, где всё это крутится сделать транспорт. А еще у этой штуки есть питоновская библиотека, что позволит свой какой-то longpool накатать, который будет ждать событий от CRM и на них реагировать. Моя библиотека, которая тут в учебных целях размещена — возвратит false, если не удалось доступ получить к серверу, если не удалось разместить задание или если на задание не удалось ответ получить. Но по листингу понятно что никакого ответа нет, в том месте, где возвращает массив [json_decode($resp),$code,$resp] — везде пусто…

Я вообще вижу лучшее решение ситуации на будущее — использовать например RabbitMQ и связать Python/Go транспорт с моей системой на PHP, т.к. работа через веб-сервер не только не очень безопасна, но и немного подтупливает с ответом на запросы, некоторые запросы действительно нуждаются в отложенной отработке, например печать чека, но вот элементарно проверить состояние смены, статус аппарата (вдруг бумага закончилась) и всё такое — могло бы сразу ответы выдавать, и то что авторизацию + шифрование по https не придумали это дикий недочет…
не, я так не умею((. а в локальной сети это нужно делать через денвер, например?
Если Ваша CRM Крутится на хостинге то вам порт (16732) Атоловского WEb сервера надо будет покинуть во внешний мир, что есть не очень гуд. Вы из локальной сети проверьте просто набросайте страницу которая отправит пост запрос на 127.0.0.1:16732/requests только желательно не с фискальными операциями а Отчет или печать клише (чтобы проверить связь) что нибудь типа такого
код
new Vue({
	el: '#app',
	data() {
		return {
		  url:'http://127.0.0.1:16732/requests',
		  electronically: false,
		  showModal: false,
		  results: null,
		  tariffs: [
		    {id:0, name:'По городу', cost: 23},
			{id:1, name:'Дачи', cost: 54},
			{id:2, name:'Староконсурская', cost:60}
		  ],
		  valueQr:'Билет липовый',
          sizeQr:200
		}
	  },
	  created() {
		
	  },
	  methods: {
	    geterateUuid : function(){
		 return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,c=>(c^crypto.getRandomValues(new Uint8Array(1))[0]&15 >> c/4).toString(16))
		},
		getStatus: function(uid){
			setTimeout(function(){
                axios.get(`http://127.0.0.1:16732/requests/${uid}`)
					.then(response => {
					  // JSON responses are automatically parsed.
					  console.log(response.data.results[0].errorDescription)
					  alert(response.data.results[0].errorDescription)
					})
					.catch(e => {
					  console.log(e)
					})

			}, 20000); 
		
		},
		Tiket: function(event){
		  const cost = parseInt(event.target.dataset.cost, 10);
		  axios({
			method: 'POST',
			headers: { 'Content-Type': 'application/json' },
			url: this.url,
			data: {
				"uuid": this.geterateUuid(),
				"request": [
				  {
					   "type": "sell",
					   "taxationType": "osn",
					   "electronically": this.electronically,
					   "ignoreNonFiscalPrintErrors": true,
					   "operator": {
						   "name": "Иванов",
						   "vatin": "123654789507",
                           "paymentsAddress": "Автобус",						   
					   },
					   "clientInfo": {
							"emailOrPhone": "+79181111111"
					   },
					   "items": [
						   {
							   "type": "position",
							   "name": "Проезд",
							   "price": cost,
							   "quantity": 1.0,
							   "amount": cost,
							   "paymentMethod": "fullPayment",
							   "paymentObject": "commodity",
							   "tax": {
								   "type": "vat20"
							   }
						   }
					   ],
					   "payments": [
						   {
							   "type": "cash",
							   "sum": cost,
							   "printItems": [
									{
										"type": "text",
										"text": "Оплата за проезд по городу"
									}
								]
						   }
					   ],
					   "total": cost,
					   "postItems": [
							{
								"type": "text",
								"text": "ТУТ МОЖНО РАЗМЕСТИТЬ РЕКЛАМУ",
								"alignment": "center"
							},
							{
								"type": "text",
								"text": "Г.КРАСНОДАР 2019 Г.",
								"alignment": "center"
							},
							{
								"type": "text",
								"text": "СЧАСТЛИВОГО ПУТИ",
								"alignment": "center"
							},
							{
								"type": "barcode",
								"barcode": "978020137962",
								"barcodeType": "EAN13"
							}
					   ]
					}
				]
			}
		})
		.then((response) => {
		  const uuid = JSON.parse(response.config.data).uuid;
		  if(response.status === 201){
		    console.log('вызов запроса статуса');			
            this.getStatus(uuid)
			this.showModal = true
			 
		  }
		})
		.catch(error => {
		  console.log(error);
		}); 
		}
    }
})


Sign up to leave a comment.

Articles