Касса стоит на компьютере у кассира. Чек при этом рождается в другом месте: в интернет-магазине, в своей CRM, иногда в 1С. Если программа держит кассу открытой, кассир не может продать.
Интернет-магазин пробивает чек сам, как только заказ оплачен. Своя CRM на любом языке подключается к кассе АТОЛ тем же заданием. Для 1С это меньшая задача: пробить чек по сети на том компьютере, где стоит касса.
BitKassa Server ставится на этот же компьютер. Он принимает одно задание, печатает чек на кассе АТОЛ и сразу её отпускает. Кассир и другая программа работают с той же кассой.
Коротко: чек печатается на кассе, которая уже стоит в магазине. Отдельная лицензия веб-сервера АТОЛ для этого не нужна. Нужен обычный драйвер этой кассы. Задание из другой кассовой программы сервер узнаёт, но пока не печатает. Скачать установщик · описание продукта.
Содержание: кому нужно · чек у кассира · что уже печатает · как попробовать · страница · PHP · 1С · сколько стоит · чего ещё нет · вопросы.
Кому это нужно
Интернет-магазину, которому нужно пробивать чек автоматически, без кассира у экрана.
Своей CRM на любом языке, если встал вопрос, как подключиться к кассе АТОЛ. Задание одно и то же, язык программы не важен.
Для 1С задача меньше: пробить чек по сети на том компьютере, где стоит касса, и сразу её отпустить.
Если программа уже отправляет кассе готовое задание, меняется только адрес. Товары, суммы и оплата в задании остаются как были.
Окно кассира BitKassa никуда не девается. Справочник, продажа у прилавка и база товаров живут в кассе. Сервер её не заменяет. Он только принимает задание и отдаёт его кассе, которая уже подключена. Как устроена сама касса — в статье как мы вернули BitKassa.
Когда чек должен увидеть кассир
Иногда чек не нужно печатать сразу. Кассир должен увидеть позиции, принять деньги и только потом пробить.
Для этого есть окно кассира. Оно само забирает один готовый чек — продажу или возврат — из папки на компьютере, по сети или с файлового сервера и открывает его на экране. Если чеков несколько, открывается один. Программе, которая чек отправила, касса отвечает: в работе, готов или прерван.
Это другой путь. Сервер печатает сам. Окно кассира показывает чек человеку.
Обычный чек не требует модуля проверки маркировки. Этот модуль нужен только в момент, когда касса проверяет код на товаре. В шапке программы три отдельных индикатора: касса, оператор фискальных данных и проверка маркировки. Последний появляется после настоящей проверки кода.
Касса подключается по USB или через последовательный порт. Для порта можно выбрать модель. Если ничего не выбрать, ставится АТОЛ 30Ф. Нет связи при запуске — программа сразу открывает настройку подключения.
Справочник товаров лежит на этом компьютере. Если штрихкода в нём нет, касса один раз ищет товар в облаке и записывает к себе. Нужна действующая подписка кассы. Так же ищется товар по коду из маркировки. Весь справочник из облака не скачивается.
Сканер работает и без подключённой кассы. Напечатать чек можно только когда касса на связи.
Подробнее — на странице BitKassa и в описании продукта.
Что сервер уже делает
Сервер — отдельная программа в том же установщике. Можно поставить только кассу, только сервер или оба. Когда касса обновляется сама, сервер она не ставит. Его выбирают в установщике.
На Windows ничего отдельно ставить не нужно: сервер уже собран. Сборки две, на 32 и на 64 бита. Ярлык запускает 32-битную. Если в системе стоит только 64-битный драйвер АТОЛ, сервер сам переходит на него. Настройки, база и журнал у обеих общие.
Куда слать задание
По умолчанию сервер отвечает только этому компьютеру: http://127.0.0.1:16750/. Порт специально другой, чем у веб-запросов АТОЛ, чтобы обе программы могли работать рядом. Если клиент веб-запросов АТОЛ уже настроен, поменяйте у него адрес на http://127.0.0.1:16750/requests и оставьте тот же текст задания.
Свой адрес для 1С и сайта — отправка на /api/v1/execute.
Какие чеки печатаются
Задание — обычный текст, который уже понимает драйвер кассы АТОЛ. В документации драйвера его называют ДТО 10.
Уже печатаются продажа, возврат, открытие и закрытие смены, промежуточный отчёт без закрытия смены, внесение и выплата денег. Можно спросить, на связи ли касса и какая сейчас смена. Задание уходит в драйвер, который уже установлен. Отдельная лицензия веб-сервера АТОЛ не нужна.
Ответ приходит в том же запросе: номер фискального документа, фискальный признак, номер смены и сумма.
Ждать ответ или встать в очередь
По умолчанию программа ждёт, пока чек пробьётся, и получает ответ. В базу такой чек не записывается.
Очередь включается на странице сервера. Задания лежат в локальной базе. Если прислать то же задание ещё раз, с тем же номером, второй чек не пробьётся.
Если сервер выключили, пока чек печатался, задание становится ошибкой и само не повторяется: чек мог уже выйти. Если кассу в этот момент заняла другая программа, сервер трижды пробует её открыть и в любом случае отпускает до ответа.
Что настраивается
На странице сервера выбирают: ждать ответ сразу или класть в очередь, какую сборку драйвера использовать, адрес, порт, пароль доступа, USB или последовательный порт и модель кассы. Адрес, порт и выбор сборки начинают работать после перезапуска.
Пока сервер слушает только этот компьютер, пароль не нужен. Если открыть его для других компьютеров в сети, пароль обязателен.
Чеки из других программ
Сервер узнаёт задание, которое уже упаковано в формат другой кассовой службы, и отвечает в том же виде. Печатать такие чеки он пока не умеет. Это KkmServer, «Сервер ККМ» RB-Soft, АТОЛ Онлайн и Ferma, Orange Data, CloudKassir, Komtet, МодульКасса.
Как попробовать
Скачайте установщик. В мастере выберите «HTTP-сервер». Откройте http://127.0.0.1:16750/ и укажите USB или порт той кассы, с которой уже работает кассир. Драйвер кассы АТОЛ должен быть установлен.
Готовая страница, чтобы собрать чек интернет-магазина или своей программы и пробить его: пробить чек. Открывайте её на компьютере, где запущен сервер.
Три примера ниже спрашивают одно и то же: касса на связи или нет. Это не продажа. Текст задания везде один.
POST /api/v1/execute
Content-Type: application/json; charset=utf-8
{"request":[{"type":"getDeviceStatus"}]}
Пример из 1С
Соединение = Новый HTTPСоединение("127.0.0.1", 16750);
Запрос = Новый HTTPЗапрос("/api/v1/execute");
Запрос.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
Запрос.УстановитьТелоИзСтроки("{""request"":[{""type"":""getDeviceStatus""}]}", КодировкаТекста.UTF8);
Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);
Пример: страница в браузере
Сохраните страницу и откройте её на компьютере с кассой. Кнопка спрашивает состояние кассы и показывает ответ. Если страница открыта с другого сайта, браузер может запретить запрос на этот компьютер. 1С и PHP ходят на сервер сами и этого запрета не встречают.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<title>Статус кассы</title>
</head>
<body>
<button type="button" id="status">Состояние кассы</button>
<pre id="out"></pre>
<script>
document.getElementById('status').addEventListener('click', function () {
var out = document.getElementById('out');
out.textContent = 'Ждём ответ…';
fetch('http://127.0.0.1:16750/api/v1/execute', {
method: 'POST',
headers: { 'Content-Type': 'application/json; charset=utf-8' },
body: JSON.stringify({ request: [{ type: 'getDeviceStatus' }] })
}).then(function (response) {
return response.text().then(function (text) {
out.textContent = response.status + '\n' + text;
});
}).catch(function (error) {
out.textContent = String(error);
});
});
</script>
</body>
</html>
Пример на PHP
Скрипт запускайте на том же компьютере: по умолчанию сервер слушает только его.
<?php
$url = 'http://127.0.0.1:16750/api/v1/execute';
$body = '{"request":[{"type":"getDeviceStatus"}]}';
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json; charset=utf-8'],
CURLOPT_POSTFIELDS => $body,
CURLOPT_RETURNTRANSFER => true,
]);
$raw = curl_exec($ch);
$http = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $http, "\n", $raw;
Сколько это стоит
Сейчас сервер бесплатный. Его можно поставить и печатать свои чеки без отдельной оплаты.
Когда откроем доступ всем, он будет по подписке. Подписка та же, что у кассы BitKassa: на заводской номер кассы. Сейчас сервер подписку не проверяет.
Подписка самой кассы живёт отдельно. Она нужна, чтобы печатать чек из окна кассира. Сервер её не спрашивает. Личный кабинет кассы — kassa.bit22.ru.
Чего ещё нет
Ниже то, что сервер пока не делает. На сегодняшней сборке этого обещать нельзя.
Какие бумаги касса ещё не печатает
Продажу покупателю и возврат этой продажи сервер уже печатает. Пока не печатает три другие бумаги. Чек, когда магазин сам покупает товар у человека. Чек коррекции — если продажа уже была, а чек тогда не вышел или вышел с ошибкой. И лист на ленте, который в налоговую не уходит: это не чек. Чеки программ KkmServer и «Сервер ККМ» сервер узнаёт, на кассу пока не отправляет.
На Linux очередь и приём заданий уже есть. Саму кассу драйвер там ещё не открывает.
Облачная касса
АТОЛ Онлайн, Orange Data, CloudKassir, Komtet и МодульКасса уже попадают в ту же очередь своим текстом. Дальше — отправить их оператору, у которого фискальный накопитель, без кассы в магазине. Подпись Orange Data и пароли облачных касс ещё не проверяются.
Что можно собрать на этом же сервере
Касса в браузере: страница отправляет задание, накопитель остаётся на прилавке. Сервер сети магазинов: товары и цены приходят сверху, в точку уходит чек на местный сервер. Сайт, который сейчас ходит в облачную кассу, меняет адрес оператора на наш.
BitKassa Server
Поставить сервер на компьютер с кассой
В установщике выберите «HTTP-сервер». Драйвер кассы АТОЛ уже должен стоять. Свои чеки печатаются без отдельной оплаты, пока сервер идёт вместе с нашими программами для 1С и сайтов.
Скачать установщик Пробить чек Страница BitKassa Описание продукта
BitKassa · описание продукта · касса BitKassa · установка через TechSpot
Частые вопросы
Чем чек в окне кассира отличается от BitKassa Server?
Окно кассира забирает один готовый чек, продажу или возврат, из папки, по сети или с файлового сервера и показывает его человеку. Если чеков несколько, открывается один. В ответ касса пишет: в работе, готов или прерван. Сервер печатает сам: принимает задание, пробивает чек на кассе АТОЛ и сразу её отпускает.
Откуда касса берёт товар, если штрихкода нет в справочнике?
Один раз ищет его в облаке на kassa.bit22.ru и записывает в свой справочник. Нужна действующая подписка кассы. Так же ищется товар по коду из маркировки. Весь справочник из облака не скачивается. Сканер работает без кассы, напечатать чек можно только когда касса на связи.
Что такое BitKassa Server?
Программа на компьютере с кассой АТОЛ. Интернет-магазин и своя CRM на любом языке присылают задание «пробей чек» и в том же ответе получают номер чека и фискальный признак. Для 1С это пробитие по сети на том же компьютере. Сервер печатает и сразу отпускает кассу, чтобы кассир мог работать. Это не окно кассира: кассир чек на экране не видит.
Какой адрес у BitKassa Server по умолчанию?
По умолчанию только этот компьютер: http://127.0.0.1:16750/. Своё задание сайт, своя программа и 1С отправляют на /api/v1/execute. Если уже настроены веб-запросы АТОЛ, у них меняется адрес на http://127.0.0.1:16750/requests, текст задания остаётся. Порт другой, чтобы веб-запросы АТОЛ могли работать рядом.
Нужна ли лицензия Web-сервера АТОЛ?
Нет. Свой чек уходит в драйвер кассы, который уже установлен. Отдельная лицензия веб-сервера АТОЛ для этого не нужна.
Сервер постоянно держит кассу?
Нет. Сервер открывает кассу на время одного задания и сразу отпускает, чтобы кассир и другая программа могли работать с ней. Если касса занята, открытие повторяется три раза. До ответа касса уже отпущена.
Какие задания BitKassa Server уже проводит?
Продажа, возврат, открытие и закрытие смены, X-отчёт, внесение, выплата, состояние кассы и смены. В ответе на проведённый чек приходят номер фискального документа, фискальный признак, смена и сумма.
Проведёт ли сервер чек KkmServer или облачной кассы?
Конверт узнаём и отвечаем в том же виде: KkmServer, RB-Soft Сервер ККМ 4, АТОЛ Онлайн и OFD.ru Ferma, Orange Data, CloudKassir, Komtet, МодульКасса. На ККТ эти чеки пока не проводятся.
BitKassa Server уже по подписке?
Сейчас нет. Сервер можно поставить и печатать свои чеки без отдельной оплаты, пока он идёт вместе с нашими сайтами и программами для 1С. Подписку он не проверяет. Когда откроем доступ всем, он будет по подписке на заводской номер кассы, как у кассы BitKassa.
Что будет, если перезапустить сервер во время печати?
Задание становится ошибкой и само не повторяется: чек мог уже выйти. Если прислать то же задание ещё раз, с тем же номером, второй чек не пробьётся.