Офлайн-касса — продажи без интернета
Что это
Офлайн-касса — автономное рабочее место ERPJS: приложение на кассовом компьютере с собственной локальной базой данных. Касса продаёт даже при полном отсутствии интернета, а при появлении связи автоматически синхронизируется с сервером: получает обновления справочников (товары, контакты) и передаёт чеки. Каждый переданный чек сервер сразу превращает в полноценный проведённый Счёт-фактуру — со списанием склада, проводками и оплатой.
Возможности
- Продажа без связи — чеки оформляются локально, интернет не нужен.
- Автоматическая синхронизация — терминал сам выходит на связь по расписанию (обычно раз в 20–60 секунд); вручную ничего передавать не нужно.
- Без конфликтов номеров — у каждой кассы свои диапазоны номеров документов; сервер и другие кассы их не занимают.
- Без дубликатов — повторная передача чека после обрыва связи не создаёт второй документ.
- Полный учёт на сервере — каждый чек становится проведённым счётом-фактурой с тем же номером: бухгалтерия и касса закрываются автоматически, склад — если счета компании списывают склад (см. шаг 6).
- Контроль — журнал сеансов связи, статус преобразования каждого чека, мгновенная блокировка потерянного терминала.
Предусловия
- Функция включена на сервере. Офлайн-обмен включается параметром окружения сервера
OFFLINE_SYNC_ENABLED=1. Если ваша система размещена у поставщика (SaaS) — запросите включение у поддержки. - Справочники заполнены: Товары, Контакты, Места хранения, Способ оплаты.
- Право доступа для регистрации терминалов. Однократная регистрация каждой кассы выполняется под учётной записью с правом изменения регистра «Офлайн-терминалы».
Шаг 1. Заведите терминал
Откройте Модули → Офлайн → Офлайн-терминалы и создайте запись:
| Поле | Что указать |
|---|---|
| Код терминала | Уникальный код кассы, например SHOP3-KASSA1. Он же будет указан в настройке кассового приложения. |
| Описание | «Касса магазин №3» — для удобства. |
| Статус | 1 (активен). |
| Склад | Склад торговой точки — с него будут списываться проданные товары. Обязательно: без склада чеки кассы не превращаются в счета-фактуры, даже если касса продаёт только услуги. |
Во вкладке «Регистры синхронизации» настройте состав обмена. Типовая конфигурация POS-кассы:
| Регистр | Направление | Смысл |
|---|---|---|
Items |
ToClient | Товары приходят на кассу. |
Contacts |
ToClient | Контакты приходят на кассу. |
OfflineSales |
Full | Чеки уходят на сервер, а обратно приходит результат их обработки: «Статус», «Номер сч.ф», «Ошибка конвертации». Касса получает только свои чеки и записывает результат в тот же чек, который создала; чеки других касс компании к ней не приходят. Направление ToServer тоже работает, но тогда результат обработки виден только на сервере. |
Шаг 2. Выделите диапазоны номеров
Откройте Модули → Офлайн → Офлайн-серии номеров и создайте запись для терминала:
- Код терминала — тот же, что в Шаге 1.
- В матрице «Диапазоны номеров» добавьте строку: Регистр =
OfflineSales, № С / № По — диапазон с запасом (например, 5001–5999), «Последний использованный» = 0.
Правила:
- Диапазоны разных касс не должны пересекаться.
- Когда диапазон заканчивается — добавьте новую строку с новым диапазоном (не расширяйте старую): касса подхватит его автоматически при очередной синхронизации.
- Созданный из чека счёт-фактура наследует номер чека, поэтому диапазон резервируется и в нумерации счетов. Если для счетов-фактур не настроены серии номеров, онлайн-документы эти номера обходят автоматически. Если серии настроены, обхода нет: следите, чтобы их диапазоны не пересекались с диапазонами касс, иначе чек с уже занятым номером не превратится в счёт.
Шаг 3. Заполните настройки синхронизации
Откройте Модули → Офлайн → Настройки офлайн-синхронизации:
| Поле | Что указать |
|---|---|
| Клиент по умолчанию | Код розничного покупателя из Контактов — подставляется в чеки, где покупатель не указан. |
| Условия оплаты по умолчанию | Код условия типа «Наличные» из Условий оплаты — счёт закрывается оплатой сразу при создании. |
Без «Клиента по умолчанию» и «Условий оплаты по умолчанию» чеки без покупателя не смогут преобразоваться в счета-фактуры. Адрес, интервал и таймаут в этой настройке касса сейчас не читает — адрес сервера и интервал обмена задаются в конфигурации кассового приложения (Шаг 4).
Шаг 4. Установите и зарегистрируйте кассовое приложение
Установку выполняет ИТ-специалист или поставщик системы.
- На кассовый компьютер устанавливается офлайн-клиент ERPJS (приложение со встроенной локальной базой).
- В конфигурации приложения указываются: адрес сервера, код терминала из Шага 1 и интервал синхронизации.
- Выполняется однократная регистрация кассы на сервере — под учётной записью с правом на «Офлайн-терминалы» (см. Предусловия). Пароль этой учётной записи на кассе не сохраняется: касса получает собственный долгосрочный ключ доступа, привязанный к коду терминала.
- При первом запуске касса автоматически выкачивает справочники и диапазоны номеров — можно работать.
Шаг 5. Работа кассира
- Кассир входит в приложение на кассе (локальная учётная запись — выдаётся при установке).
- Продажа оформляется в регистре Офлайн-продажи: новая запись, строки с товарами (код, количество, цена), способ оплаты, суммы «Получено наличных» / «Сдача». Номер чека и код терминала касса ставит сама при сохранении: номер — следующий из её диапазона, код — код этого терминала. Поле «Сер. номер» оставляйте пустым: набранный вручную номер касса не примет («Номер чека назначает касса»). Диапазон исчерпан или ещё не получен — сохранение откажет: выделите новый диапазон в «Офлайн-сериях номеров» на сервере и дождитесь синхронизации.
- Больше ничего делать не нужно: чек уйдёт на сервер при ближайшем сеансе связи.
Шаг 6. Что происходит на сервере
- Принятые чеки появляются в Модули → Офлайн → Офлайн-продажи.
- Каждый чек автоматически преобразуется в проведённый счёт-фактуру с тем же номером: бухгалтерские проводки, оплата POS-наличными и списание товара со склада кассы. Склад списывается по тому же правилу, что у любого счёта: только если в Настройке счетов-фактур включено «Списывать склад по сч/ф». Без этой галочки счёт проводится, а проданный товар остаётся на складе. Статус чека становится 1, в поле «Номер сч.ф» — номер созданного счёта.
- Если преобразование не удалось — чек получает Статус 2 и текст причины в поле «Ошибка конвертации». Сам чек не теряется.
Контроль и разбор ошибок
Журнал связи
Модули → Офлайн → Журнал офлайн-синхронизации — кто, когда и что передавал; отклонённые записи; ошибки раундов. Пустые опросы (без данных) не журналируются. Последний сеанс кассы виден также в её карточке терминала («Дата/Время последней синхр.»).
Чеки с ошибкой (Статус = 2)
Отфильтруйте Офлайн-продажи по Статусу = 2 и посмотрите «Ошибку конвертации»:
| Причина | Решение |
|---|---|
| Неизвестный способ оплаты | Заведите код в настройке «Способ оплаты» или исправьте настройку кассы. |
| Не определился покупатель | Заполните «Клиент по умолчанию» (Шаг 3). |
| Нет условий оплаты | Заполните «Условия оплаты по умолчанию» (Шаг 3) или условия оплаты в карточке покупателя. |
| У терминала нет склада | Заполните «Склад» в карточке терминала (Шаг 1). |
| Не хватает товара на складе | Оприходуйте товар на склад кассы. Услуг это не касается. |
Автоматического повторного преобразования нет: после устранения причины администратор открывает чек и в меню окна нажимает «Сконвертировать снова» — сервер повторит обработку, и удачный чек получит Статус 1 с номером счёта (Офлайн-продажи).
Блокировка кассы
Касса потеряна или украдена → в карточке терминала установите Статус = 2 (заблокирован). Доступ к серверу отзывается мгновенно, при первой же попытке связи.
Ограничения текущей версии
- Одна касса принадлежит одной компании (в многокомпанейской системе).
- Поля «Фильтр» и «После синхронизации» в матрице терминала зарезервированы и пока не действуют.
- Автоповтора преобразования чеков со Статусом 2 нет — разбор вручную.
- Кассовое приложение устанавливает и настраивает ИТ-специалист (мастера установки пока нет).