Публичное пространство
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
Инициация выгрузки
В функциональном меню кассы должна быть доступна функция «Выгрузить на USB».
Формирование данных
Касса готовит к выгрузке неотправленные данные: чеки, Z/X-отчёты и транзакции лояльности.
Данные формируются в файлы, соответствующие топикам Kafka.
Для контроля целостности касса вычисляет хеш-сумму каждого файла.
Запись данных на USB
Подготовленные файлы передаются на USB-накопитель.
Файлы, успешно записанные на USB, помечаются на кассе статусом “отправлено в Kafka” и при появлении связи не выгружаются в Kafka.
Данные передаются в зашифрованном виде с использованием симметричного шифрования.
Во время передачи на экране отображается индикатор с сообщением “Идет сохранение документов”.
Обработка ошибок
При попытке выгрузки касса проверяет наличие USB-накопителя, достаточность свободного места и наличие данных. В случае любой ошибки (отсутствие носителя, недостаточно места, ошибка записи) касса показывает уведомление с указанием конкретной причины.
Логирование
Все операции выгрузки фиксируются в логах с указанием меток времени, периода выгрузки, итогового статуса и описания возникших ошибок.
Загрузка данных с USB на кассу
Загрузка файлов производится в директорию
/home/tc/storage/documents-upload/, которая содержит:failed/- проблемные файлыsent/- отправленные файлыsource/- скопированные, но неотправленные файлы
Касса регулярно проверяет заданную директорию на наличие новых файлов (загруженных с USB или локального компьютера) для отправки в Kafka.
Проверка выполняется только при активной настройке
module_name=ESB_FILE_UPLOADER→property_key=enabledв таблице sales_management_properties (SMP).Если
enabled = true- проверка включена.Если
enabled = false- проверка отключена.
При перезагрузке касса выполняет проверку указанной папки на наличие файлов, подлежащих выгрузке.
Инициация загрузки
В функциональном меню кассы должна быть доступна функция «Загрузить на кассу».
Запись данных с USB на кассу
Касса проверяет хеш-сумму файлов.
При совпадении хеша данные копируются на кассу.
При несовпадении файл помечается как “проблемный” и перемещается в отдельную директорию. Такие файлы в Kafka не выгружаются.
Во время загрузки на экране отображается индикатор “Идет загрузка документов“.
Если были найдены проблемные файлы, по завершении загрузки появляется блокирующее сообщение: «Присутствуют проблемные файлы. Не удалось выгрузить [N] файлов.»
Нажатие кнопки «Отмена» закрывает уведомление.
Ограничение: Для выгрузки проблемных файлов требуется вмешательство сервисного инженера.
Передача невыгруженных файлов с кассы в Kafka
Полученные и сохранённые файлы касса выгружает в Kafka.
Загрузка данных с локального компьютера
Данные могут быть загружены на кассу с локального компьютера. Для этого необходимо скопировать файлы с накопителя на локальный компьютер, а затем в целевую директорию виртуальной кассы.
Касса проверяет целевую директорию на наличие новых, невыгруженных файлов. При их обнаружении касса отправляет эти файлы в Kafka.
Важно!
Для отправки в Kafka файлов необходимо перенести в указанную директорию все загруженные ранее на USB файлы, в том числе и файлы с контрольной суммой и размером файлов.
Файлы, для которых отсутствует контрольная сумма, не будут выгружены в Kafka.
Примеры работы
Для пользователя Старший кассир установлена привилегия Выгрузка данных о продажах.
Выгрузка данных на USB
На кассе авторизуется Старший кассир и подключает USB-накопитель к кассе.
Вызывает функцию меню Выгрузка данных о продажах → пункт Выгрузить на USB.
Касса копирует данные на USB-накопитель и помечает их статусом “отправлено в Kafka”.
В процессе выгрузки на кассе отображается индикатор выполнения (спиннер).
По завершении операции касса отображает сообщение “Документы выгружены“. Кассир извлекает USB-накопитель.
Загрузка данных на кассу с USB
На кассе авторизуется Старший кассир и подключает USB-накопитель к кассе.
Вызывает функцию меню Выгрузка данных о продаже → пункт Загрузить на кассу.
Касса копирует с накопителя невыгруженные ранее файлы.
В процессе копирования на кассе отображается индикатор выполнения (спиннер).
По завершении операции касса отображает сообщение “Документы загружены на кассу“. Кассир извлекает USB-накопитель.
Касса отправляет полученные файлы в Kafka.
Примеры возможных сообщений об ошибках
Попытка выгрузить или загрузить данные при неподключенном USB-накопителе.
Отсутствие данных для выгрузки.
Отсутствие данных для загрузки.
Нехватка свободного места на USB.
Ограничения
При повторной выгрузке данных с одного и того же USB-накопителя в Kafka могут создаваться дублирующиеся сообщения.
Для USB-накопителей используется файловая система FAT32.
В текущей реализации (версия 10.4.21.0) касса выгружает только те файлы, которые ранее не были отправлены в Kafka. Документ помечается статусом «отправлено в Kafka» только после получения подтверждения о успешном приёме от Kafka.
В текущей реализации (версия 10.4.21.0) для обработки и выгрузки файлов, помеченных как «проблемные», требуется вмешательство сервисного инженера.
Текущее поведение: При обнаружении на USB-накопителе битых файлов касса по завершении загрузки отображает уведомление: “Присутствуют проблемные файлы. Не удалось выгрузить [N] файлов.”
Настройка
Настройка привилегии
В разделе Персонал → Роли кассиров для требуемого кассового пользователя задайте привилегию Управление → Выгрузка данных о продажах → кликните Добавить к роли → кликните Сохранить.
Назначение пунктов кассового меню
POS
Перейдите в Кассовый модуль → кликните Шаблоны касс → откройте на редактирование требуемый шаблон клавиатурной кассы.
Перейдите на вкладку ИНТЕРФЕЙС → нажмите РЕДАКТИРОВАТЬ КОНФИГУРАЦИЮ.
Создайте новую группу кнопок → введите название, например, Выгрузка данных о продажах → кликните ПРИМЕНИТЬ.
Перейдите в созданную группу.
Назначьте функцию кассы Выгрузить на USB → кликните ПРИМЕНИТЬ.
Назначьте функцию кассы Загрузить на кассу → кликните ПРИМЕНИТЬ.
Созданные кнопки отобразятся в меню. Нажмите ПРИМЕНИТЬ.
Кликните СОХРАНИТЬ → перезагрузите кассовый модуль.
SetTouch
На кассе SetTouch настройка кнопок не требуется, они появляются автоматически при авторизации пользователя с соответствующей привилегией.
SetSCO v3
В шаблоне кассы самообслуживания перейдите на вкладку ИНТЕРФЕЙС → нажмите НАСТРОЙКА МЕНЮ КОНСУЛЬТАНТА.
Далее назначьте кнопки по инструкции для POS, начиная с п.3.
После перезагрузки в меню консультанта отобразится добавленный блок кнопок.
Настройка в базе данных
Для включения автоматической выгрузки документов в ESB из файлов после загрузки их на кассу выполните скрипт на сервере по базе данных set.
Техническая информация
Монтирование USB
USB-накопитель монтируется автоматически при вызове функций «Выгрузить на USB» или «Загрузить на кассу».
Для проверки текущего статуса используется команда:
cash flash get statusВозможные статусы:
0 - накопитель примонтирован
1 - накопитель подключен, но не примонтирован
2 - накопитель не подключен
Логирование операций
Информация о процессах выгрузки и загрузки сохраняется в файл 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, ООО «Кристалл Сервис Интеграция».
Все права защищены.