SetRetail10 ◾️ Передача данных о продажах через USB-накопитель

Публичное пространство

SetRetail10 ◾️ Передача данных о продажах через USB-накопитель

https://crystals.atlassian.net/browse/SRTB-9935

https://crystals.atlassian.net/browse/CR-14524

10.4.21.0

Функциональность реализована для POS, SetTouch, SetSCO v3

Описание

Участились случаи длительного отсутствия связи с магазинами. В такие периоды данные о продажах не синхронизируются, что приводит к:

  • Некорректной складской отчетности.

  • Отсутствию данных для финансового анализа.

  • Риску безвозвратной потери данных при сбое локального хранилища.

В версии 10.4.21.0 реализована функциональность, позволяющая персоналу магазина вручную выгружать данные на внешний USB-накопитель для последующей передачи в офис и импорта в центральную систему.

Ценность

  • Обеспечение бесперебойного сбора и передачи данных о продажах при отсутствии сетевого соединения.

  • Устранение пробелов в отчетности для поддержания актуальности данных по всей сети.

  • Снижение операционных рисков, связанных с простоем точек продаж из-за потери связи.

  • Минимизация зависимости от качества каналов связи в удаленных локациях.

  • Обеспечение резервного канала передачи данных без необходимости в сложной дополнительной инфраструктуре.

Логика работы

Выгрузка данных с кассы на USB

  1. Инициация выгрузки

В функциональном меню кассы должна быть доступна функция «Выгрузить на USB».

  1. Формирование данных

  • Касса готовит к выгрузке неотправленные данные: чеки, Z/X-отчёты и транзакции лояльности.

  • Данные формируются в файлы, соответствующие топикам Kafka.

  • Для контроля целостности касса вычисляет хеш-сумму каждого файла.

  1. Запись данных на USB

  • Подготовленные файлы передаются на USB-накопитель.

  • Файлы, успешно записанные на USB, помечаются на кассе статусом “отправлено в Kafka” и при появлении связи не выгружаются в Kafka.

  • Данные передаются в зашифрованном виде с использованием симметричного шифрования.

  • Во время передачи на экране отображается индикатор с сообщением “Идет сохранение документов”.

  1. Обработка ошибок

При попытке выгрузки касса проверяет наличие USB-накопителя, достаточность свободного места и наличие данных. В случае любой ошибки (отсутствие носителя, недостаточно места, ошибка записи) касса показывает уведомление с указанием конкретной причины.

  1. Логирование

Все операции выгрузки фиксируются в логах с указанием меток времени, периода выгрузки, итогового статуса и описания возникших ошибок.

 

Загрузка данных с USB на кассу

  • Загрузка файлов производится в директорию /home/tc/storage/documents-upload/, которая содержит:

    • failed/ - проблемные файлы

    • sent/ - отправленные файлы

    • source/ - скопированные, но неотправленные файлы

image-20251118-154405.png
  • Касса регулярно проверяет заданную директорию на наличие новых файлов (загруженных с USB или локального компьютера) для отправки в Kafka.

  • Проверка выполняется только при активной настройке module_name=ESB_FILE_UPLOADERproperty_key=enabled в таблице sales_management_properties (SMP).

    • Если enabled = true - проверка включена.

    • Если enabled = false - проверка отключена.

  • При перезагрузке касса выполняет проверку указанной папки на наличие файлов, подлежащих выгрузке.

  1. Инициация загрузки

В функциональном меню кассы должна быть доступна функция «Загрузить на кассу».

  1. Запись данных с USB на кассу

  • Касса проверяет хеш-сумму файлов.

  • При совпадении хеша данные копируются на кассу.

  • При несовпадении файл помечается как “проблемный” и перемещается в отдельную директорию. Такие файлы в Kafka не выгружаются.

  • Во время загрузки на экране отображается индикатор “Идет загрузка документов“.

  • Если были найдены проблемные файлы, по завершении загрузки появляется блокирующее сообщение: «Присутствуют проблемные файлы. Не удалось выгрузить [N] файлов.»

  • Нажатие кнопки «Отмена» закрывает уведомление.

  • Ограничение: Для выгрузки проблемных файлов требуется вмешательство сервисного инженера.

  1. Передача невыгруженных файлов с кассы в Kafka

  • Полученные и сохранённые файлы касса выгружает в Kafka.

Загрузка данных с локального компьютера

Данные могут быть загружены на кассу с локального компьютера. Для этого необходимо скопировать файлы с накопителя на локальный компьютер, а затем в целевую директорию виртуальной кассы.

Касса проверяет целевую директорию на наличие новых, невыгруженных файлов. При их обнаружении касса отправляет эти файлы в Kafka.

Важно!

Для отправки в Kafka файлов необходимо перенести в указанную директорию все загруженные ранее на USB файлы, в том числе и файлы с контрольной суммой и размером файлов.

Файлы, для которых отсутствует контрольная сумма, не будут выгружены в Kafka.

 

Примеры работы

Для пользователя Старший кассир установлена привилегия Выгрузка данных о продажах.

Выгрузка данных на USB

  1. На кассе авторизуется Старший кассир и подключает USB-накопитель к кассе.

  2. Вызывает функцию меню Выгрузка данных о продажах → пункт Выгрузить на USB.

172.29.17.126_17_11_2025-15_10_19.png
  1. Касса копирует данные на USB-накопитель и помечает их статусом “отправлено в Kafka”.

  2. В процессе выгрузки на кассе отображается индикатор выполнения (спиннер).

image-20251118-162330.png
  1. По завершении операции касса отображает сообщение “Документы выгружены“. Кассир извлекает USB-накопитель.

172.29.17.126_18_11_2025-11_59_37.png

 

Загрузка данных на кассу с USB

  1. На кассе авторизуется Старший кассир и подключает USB-накопитель к кассе.

  2. Вызывает функцию меню Выгрузка данных о продаже → пункт Загрузить на кассу.

172.29.17.126_17_11_2025-15_10_28.png
  1. Касса копирует с накопителя невыгруженные ранее файлы.

  2. В процессе копирования на кассе отображается индикатор выполнения (спиннер).

image-20251119-065550.png
  1. По завершении операции касса отображает сообщение “Документы загружены на кассу“. Кассир извлекает USB-накопитель.

172.29.17.126_18_11_2025-12_12_56.png
  1. Касса отправляет полученные файлы в Kafka.

 

Примеры возможных сообщений об ошибках

Попытка выгрузить или загрузить данные при неподключенном USB-накопителе.

172.29.17.126_17_11_2025-15_10_38.png

Отсутствие данных для выгрузки.

172.29.17.126_18_11_2025-11_59_54.png

Отсутствие данных для загрузки.

172.29.17.126_18_11_2025-12_13_22.png

Нехватка свободного места на USB.

image-20251119-101622.png

 

Ограничения

  • При повторной выгрузке данных с одного и того же USB-накопителя в Kafka могут создаваться дублирующиеся сообщения.

  • Для USB-накопителей используется файловая система FAT32.

  • В текущей реализации (версия 10.4.21.0) касса выгружает только те файлы, которые ранее не были отправлены в Kafka. Документ помечается статусом «отправлено в Kafka» только после получения подтверждения о успешном приёме от Kafka.

  • В текущей реализации (версия 10.4.21.0) для обработки и выгрузки файлов, помеченных как «проблемные», требуется вмешательство сервисного инженера.

    • Текущее поведение: При обнаружении на USB-накопителе битых файлов касса по завершении загрузки отображает уведомление: “Присутствуют проблемные файлы. Не удалось выгрузить [N] файлов.”

 

Настройка

Настройка привилегии

В разделе Персонал → Роли кассиров для требуемого кассового пользователя задайте привилегию Управление → Выгрузка данных о продажах → кликните Добавить к роли → кликните Сохранить.

image-20251118-100319.png

Назначение пунктов кассового меню

POS

  1. Перейдите в Кассовый модуль → кликните Шаблоны касс → откройте на редактирование требуемый шаблон клавиатурной кассы.

image-20251118-101445.png
  1. Перейдите на вкладку ИНТЕРФЕЙС → нажмите РЕДАКТИРОВАТЬ КОНФИГУРАЦИЮ.

image-20251118-101723.png
  1. Создайте новую группу кнопок → введите название, например, Выгрузка данных о продажах → кликните ПРИМЕНИТЬ.

image-20251118-102120.png
  1. Перейдите в созданную группу.

image-20251118-104154.png
  1. Назначьте функцию кассы Выгрузить на USB → кликните ПРИМЕНИТЬ.

image-20251118-104720.png
  1. Назначьте функцию кассы Загрузить на кассу → кликните ПРИМЕНИТЬ.

image-20251118-104923.png
  1. Созданные кнопки отобразятся в меню. Нажмите ПРИМЕНИТЬ.

image-20251118-105058.png
  1. Кликните СОХРАНИТЬ → перезагрузите кассовый модуль.

image-20251118-105201.png

 

SetTouch

На кассе SetTouch настройка кнопок не требуется, они появляются автоматически при авторизации пользователя с соответствующей привилегией.

image-20251117-134715.png

 

SetSCO v3

  1. В шаблоне кассы самообслуживания перейдите на вкладку ИНТЕРФЕЙС → нажмите НАСТРОЙКА МЕНЮ КОНСУЛЬТАНТА.

image-20251119-104824.png
  1. Далее назначьте кнопки по инструкции для POS, начиная с п.3.

image-20251119-104646.png
  1. После перезагрузки в меню консультанта отобразится добавленный блок кнопок.

image-20251119-105810.png

Настройка в базе данных

Для включения автоматической выгрузки документов в ESB из файлов после загрузки их на кассу выполните скрипт на сервере по базе данных set.

 

Техническая информация

Монтирование USB

USB-накопитель монтируется автоматически при вызове функций «Выгрузить на USB» или «Загрузить на кассу».

Для проверки текущего статуса используется команда:

cash flash get status

Возможные статусы:

  • 0 - накопитель примонтирован

  • 1 - накопитель подключен, но не примонтирован

  • 2 - накопитель не подключен

putty_BrxwkLWMRJ.png

 

Логирование операций

Информация о процессах выгрузки и загрузки сохраняется в файл document.log.

Пример содержимого лог-файла:

Подключение флэшки: 24.09 15:55:34.459 INFO [USBFlashDriveService] Mounting flash drive to /home/tc/usb | #11 CashEvent:81 kbdEnter:90 kbdEnter 24.09 15:55:34.579 INFO [USBFlashDriveService] Flash drive mount process finished | #11 CashEvent:81 kbdEnter:90 kbdEnter 24.09 15:55:34.670 INFO [DocumentFileServiceImpl] Flash mount status: MOUNTED | #11 CashEvent:81 kbdEnter:90 kbdEnter Успешная выгрузка: 24.09 16:40:29.812 INFO [DocumentFileServiceImpl] Start saving documents to files | #6 CashEvent:74 kbdEnter 24.09 16:40:30.353 INFO [DocumentFileServiceImpl] Saving document 09204.002.00003.000003 to file /home/tc/usb/09204_002_00003_000003.ser | #6 CashEvent:74 kbdEnter 24.09 16:40:30.391 INFO [DocumentFileServiceImpl] Document 09204.002.00003.000003 saved to file | #6 CashEvent:74 kbdEnter 24.09 16:40:30.392 INFO [StatelessCheckServiceImpl] Send document status : 530 > SENT file name : null | #6 CashEvent:74 kbdEnter 24.09 16:40:30.411 INFO [CheckInfoServiceImpl] SetSentToServerStatus : 530 > SENT file name : null | #6 CashEvent:74 kbdEnter Отключение флэшки: 24.09 16:40:30.483 INFO [USBFlashDriveService] Unmounting flash drive | #6 CashEvent:74 kbdEnter 24.09 16:40:30.798 INFO [USBFlashDriveService] Flash drive unmount process finished | #6 CashEvent:74 kbdEnter 24.09 16:40:30.891 INFO [DocumentFileServiceImpl] Flash umount status: NOT_MOUNT | #6 CashEvent:74 kbdEnter Нет документов к выгрузке: 24.09 15:55:34.671 INFO [DocumentFileServiceImpl] Start saving documents to files | #11 CashEvent:81 kbdEnter:90 kbdEnter 24.09 15:55:35.105 INFO [DocumentFileServiceImpl] No documents to save | #11 CashEvent:81 kbdEnter:90 kbdEnter Нет места 25.09 13:45:28.951 TRACE [DocumentFileServiceImpl] Free space on flash drive: 4096 | #11 CashEvent:59 kbdEnter 25.09 13:45:28.951 ERROR [DocumentFileServiceImpl] Not enough free space on usb flash drive! | #11 CashEvent:59 kbdEnter Нет флешки 17.11 15:09:42.436 WARN [DocumentFileServiceImpl] Flash drive not connected | #34 CashEvent:10 kbdEnter

© 1994-2025, ООО «Кристалл Сервис Интеграция».
Все права защищены.

Политика обработки персональных данных