PDA

Просмотр полной версии : Обмен данными с кассой



Андрей11
24.06.2016, 12:41
После отключения света посыпалась база данных. Техподдержка восстановила БД через 2 дня, касса продолжала работать все это время. После восстановления БД выяснилось, что нет обмена бэк-офиса с кассой. В логах нашли это: Session not found by sessionId
Из папки UpdateQueue удалил файлы с неверным session id и обмен прошел. Теперь на бэк-офисе есть данные до отключения света и после починки БД. все что было в этом 2х дневном промежутке на бэк-офис не пришло. Данные за эти 2 дня хранятся на кассе, UpdateQueue пустая. Тех поддержка уже 4 дня говорит что в работают над этим.

Вопрос: как перенести данные с кассы на бэк-офис или вручную засунуть их в UpdateQueue, чтобы произошел обмен? Помогите пожалуйста

Spaceman
24.06.2016, 20:07
А зачем было удалять файлы из UpdateQueue? Если вы их удалили безвозвратно, то нужно делать повторную выгрузку продаж с помощью плагина Eventsreloader. Лучше конечно если это сделает тех поддержка, а то можно "накосячить" еще больше. Порядок действий следующий
С фронта забираем:

entities.sdf (%appdata%\iiko\CashServer\EntitiesStorage\Entitie s\)
папки с events.sdf и transactions.sdf - ServerEvents и Transactions (%appdata%\iiko\CashServer\EntitiesStorage\Events\ )
все xml из корня CashServer (%appdata%\iiko\CashServer\)
все xml из EntitiesStorage (%appdata%\iiko\CashServer\EntitiesStorage\)
Алгоритм работы с плагином:

Устанавливаем у себя фронт той же версии.
Собранные файлы раскладываем согласно стандартным путям. Папку из п.2 можно положить в любое удобное место.
В папку Plugins фронта кладем плагин EventsReloader (берем из сборки соответствующей версии). Набор плагинов должен полностью совпадать с плагинами донорской кассы
Запускаем фронт.
Логинимся пин-кодом и идем в плагины - "Повторная выгрузка продаж" (Кассовая смена должна быть открыта, иначе конки Плагины не будет)
Указать путь к базам. Это должен быть путь к папке с двумя папками ServerEvents и Transactions. И уже в этих папках должны лежать .sdf и архивы. По умолчанию это папка из текущего кэшсервера (%appdata%\iiko\CashServer\EntitiesStorage\Events\ )
Указать диапазон выгрузки. По умолчанию берется максимальный интервал - от самой ранней дате в именах архивов до текущей даты.
Нажимаем на кнопку "Загрузить из базы". Если это возможно - в папке есть данные, данные загружаются.
В списке загруженных транзакций выбираем все OrderPaymentEvent ( и , если есть CloseSessionEvent и PayInOutEvent) интересующих дат.
Может такое быть, что в строке присутсвует дата, которая не относится к выбранному периоду. Такую строку нужно пропустить!!!
Нажимаем на кнопку "Выгрузить данные"
В папке UpdateQueue фронта создастся очередь заказов. (5-8 больших файлов - может быть и больше, если диапазон выгрузки большой)
Забираем очередь заказов и подкладываем их на кассу для прогрузки в базу. После запуска фронта очередь должна уйти на сервер.
Проверяем на сервере , что появились недостающие данные.
Если кассовые смены не закроются - закрыть руками в базе, свериться с Z-кой
Документы за проблемный день ( АР, АС) лучше пересоздать из кассовой смены.

boomer
24.06.2016, 20:38
Добрый вечер ! Подскажите пожалуйста, та же ситуация, только файлы проблемные из UpdateQueue не удалены! Как их выгрузить в бек офис ?

Spaceman
25.06.2016, 23:30
Если в логе update-tasks-queue.log наблюдается запись:
[2011-11-28 14:59:29,437] ERROR - Exception raised on updates processing: Resto.Framework.Common.RestoException: Session not found by sessionId 26b7ce66-a5db-4b49-96c4-a33c43cab726
то
1. Найти в логе какие файлы первыми отправляются на сервер
Например
[2011-11-28 14:59:29,296] DEBUG [UpdateTasksQueue] [UpdateTasksQueue:SendUpdatesToServer] - Try send update to RMS..
[2011-11-28 14:59:29,296] DEBUG [UpdateTasksQueue] [UpdateTasksQueue:SendUpdatesToServer] - Merge update 0adf401a-54e1-4736-a94c-c5ab3100c764
[2011-11-28 14:59:29,312] DEBUG [UpdateTasksQueue] [UpdateTasksQueue:SendUpdatesToServer] - Merge update 1fb23aa7-49ae-45ee-8a69-81efea52f11d
[2011-11-28 14:59:29,312] DEBUG [UpdateTasksQueue] [UpdateTasksQueue:SendUpdatesToServer] - Merge update fc22a401-7df9-4909-ab0e-bc8ef4b14629
[2011-11-28 14:59:29,312] DEBUG [UpdateTasksQueue] [UpdateTasksQueue:SendUpdatesToServer] - Merge update dad71386-e49a-41f3-b5b2-15c7a147d593
[2011-11-28 14:59:29,312] DEBUG [UpdateTasksQueue] [UpdateTasksQueue:SendUpdatesToServer] - Merge update 0b678c37-a5ee-4895-8826-9d186a0a8313
[2011-11-28 14:59:29,328] INFO [UpdateTasksQueue] [ServerSession:CreateRequest] - Server method called: importFrontData
[2011-11-28 14:59:29,437] ERROR [UpdateTasksQueue] [UpdateTasksQueue:SendUpdatesToServer] - Exception raised on updates processing: Resto.Framework.Common.RestoException: Session not found by sessionId 26b7ce66-a5db-4b49-96c4-a33c43cab726
2. Копируем из папки Update Queue 5 файлов вида ServerUpdate_GUID из [U]лога.[U]xml.
3. Открываем первый в очереди файл редактором ( удобно использовать Notepad++ http://notepad-plus-plus.org/ ) и просматриваем его в поиске события CloseSessionEvent с таким ID внутри( Запись обновляющая таблицу кассовых смен, или создающая новую при отсутствии имеющейся). При просмотре удобно включать режим XML only - Pretty print with line breaks (Ctrl+Alt+Shift+B) . Для того, чтобы комфортно работать с XML еще нужно скачать плагин XML Tools (http://sourceforge.net/projects/npp-plugins/files/XML%20Tools/Xml%20Tools%202.3.1%20r764%20Unicode%20Beta1/xmltools_2.3.1_r805_unicode_beta2.zip/download)
Плагин нужно импортировать в Notepad++ через Settings -> Import -> Import plugins
В последних версиях Notepad++ не нужно скачивать плагин отдельно от программы, Он закачивается через Плагины-Plugin Manager
Как правило событие есть в первом из 5 файлов. Если в первом файле записи нет, смотрим в следующем по очереди итд. В одном из 5-ти наверняка будет
4. Находим событие

<i>
<id>ab59f344-a4e5-4722-8e43-ff715d83a5c5</id>
<type>CloseSessionEvent</type>
<xml>&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;r eid="ab59f344-a4e5-4722-8e43-ff715d83a5c5"&gt;&lt;sessionNumber&gt;218&lt;/sessionNumber&gt;&lt;cashRegNumber&gt;1&lt;/cashRegNumber&gt;&lt;openDate&gt;2011-10-13T09:41:17.000+06:00&lt;/openDate&gt;&lt;manager&gt;27a2b025-14f2-4ccf-b47a-59c7a0bd9479&lt;/manager&gt;&lt;sessionStartCash&gt;0.0000&lt;/sessionStartCash&gt;&lt;payOrders&gt;7385.0000&lt;/payOrders&gt;&lt;sumWriteoffOrders&gt;0.0000&lt;/sumWriteoffOrders&gt;&lt;salesCash&gt;5746.0000&lt;/salesCash&gt;&lt;salesCredit&gt;1639.0000&lt;/salesCredit&gt;&lt;salesCard&gt;0.0000&lt;/salesCard&gt;&lt;payIn&gt;0.0000&lt;/payIn&gt;&lt;payOut&gt;0.0000&lt;/payOut&gt;&lt;payIncome&gt;0.0000&lt;/payIncome&gt;&lt;cashDiff&gt;0.0000&lt;/cashDiff&gt;&lt;sessionStatus&gt;UNACCEPTED&lt;/sessionStatus&gt;&lt;pointOfSale&gt;0be4e997-1ad7-4281-9867-27ea98f453f8&lt;/pointOfSale&gt;&lt;eventType&gt;SESSION_CLOSE&lt;/eventType&gt;&lt;user&gt;27a2b025-14f2-4ccf-b47a-59c7a0bd9479&lt;/user&gt;&lt;terminal&gt;0a06ecd3-4be7-3395-012e-8964c6a50df1&lt;/terminal&gt;&lt;session&gt;&lt;group&gt;b429358a-6ef4-cfd6-0128-8ac26aae001b&lt;/group&gt;&lt;id&gt;26b7ce66-a5db-4b49-96c4-a33c43cab726&lt;/id&gt;&lt;number&gt;218&lt;/number&gt;&lt;/session&gt;&lt;date&gt;2011-10-13T09:41:17.093+06:00&lt;/date&gt;&lt;revision&gt;0&lt;/revision&gt;&lt;id&gt;ab59f344-a4e5-4722-8e43-ff715d83a5c5&lt;/id&gt;&lt;/r&gt;</xml>
<deleted>false</deleted>
</i>
5. Копируем его полностью ( от <i> до </i>) и вставляем в начало самого первого файла очереди сразу после тега <items> ( в нашем случае 0adf401a-54e1-4736-a94c-c5ab3100c764 )
6. Сохраняем исправленный файл.
7. Останавливаем кассу и заменяем файл в очереди на исправленный
8. Запускаем кассу, очередь прогружается на сервер.

Андрей11
27.06.2016, 14:03
Огромное спасибо, получилось!

ipf
31.07.2016, 09:21
День добрый. Подскажите пожалуйста. Около недели назад перестали уходить данные на сервер с одного из терминалов. Связь с сервером есть, в статусе фронта показывает что связь есть,все работает. Данных о продажах на сервере не видно. Через несколько дней такая -же проблема случилась еще на одном терминале. Первый терминал отдает данные через локалку, второй через интернет. На сервере терминалы видно, тестовые печати проходят.
Поддержка говорит что работает над этим, но у нас уже конец месяца, нужно считать бонусы от продаж работникам... Еще 6 терминалов данные отдают без проблем, все работает на одном сервере.
Хотел попробовать сделать повторную выгрузку , как Вы советовали выше, но не знаю где взять плагин Eventsreloader. Версия Айки 4.3.3 . Подскажите пожалуйста как можно исправить данную проблему, либо прийдется по Z отчету вбивать смены заново

Spaceman
31.07.2016, 15:10
День добрый. Подскажите пожалуйста. Около недели назад перестали уходить данные на сервер с одного из терминалов. Связь с сервером есть, в статусе фронта показывает что связь есть,все работает. Данных о продажах на сервере не видно. Через несколько дней такая -же проблема случилась еще на одном терминале. Первый терминал отдает данные через локалку, второй через интернет. На сервере терминалы видно, тестовые печати проходят.
Поддержка говорит что работает над этим, но у нас уже конец месяца, нужно считать бонусы от продаж работникам... Еще 6 терминалов данные отдают без проблем, все работает на одном сервере.
Хотел попробовать сделать повторную выгрузку , как Вы советовали выше, но не знаю где взять плагин Eventsreloader. Версия Айки 4.3.3 . Подскажите пожалуйста как можно исправить данную проблему, либо прийдется по Z отчету вбивать смены заново

Папка на фронтах updatequeue пуста? Также выложите лог update-tasks-queue.log ​чтобы понять что за проблема

ipf
31.07.2016, 15:35
Папка updatequeue полная, все файлы на месте.
Вот ссылка на лог файл.
http://dropmefiles.com/RBgZm

Spaceman
31.07.2016, 15:47
Папка updatequeue полная, все файлы на месте.
Вот ссылка на лог файл.
http://dropmefiles.com/RBgZm

Ошибка возникает из-за сбоя ФР'а - в один из вызовов он вернул неправильную сумму наличных в кассе.
Поиском во всех файлах ищем в UpdateQueue XML-ки, содержащие указанную сумму после "actual:" 28275845850.000000000
Бэкапим эти файлы. Вместо суммы 28275845850.000000000 пишем 0. Сохраняем файлИсправленный файл подкладываем в UpdateQueue на кассе, заменяя оригинальный. Очередь должна начать подгружаться на сервер.

ipf
31.07.2016, 18:58
Сделал как Вы сказали. У меня в UpdateQueue в XML нет ни одного упоминания actual:
Пробовал поиск по сумме, нашел 5 файлов. Везде заменил на ноль и засунул обратно в кассу. Данные не приехали.
Во фронте в смене у меня висит сумма 28304150.00

Spaceman
31.07.2016, 19:20
Сделал как Вы сказали. У меня в UpdateQueue в XML нет ни одного упоминания actual:
Пробовал поиск по сумме, нашел 5 файлов. Везде заменил на ноль и засунул обратно в кассу. Данные не приехали.
Во фронте в смене у меня висит сумма 28304150.00

Я имел ввиду actual пишется в логах и затем сумма которую надо искать. В xml надо в теге <valueNumber>28275845850.000000000</valueNumber> заменить на <valueNumber>0</valueNumber>. Приложите новый лог после подкладывания файлов. Фронт после этого перезапускали? Где во фронте вы видите сумму 28304150.00?

ipf
31.07.2016, 19:56
Теперь я понял как исправлять такие проблемы. Посмотрел лог, опять увидел ошибку что сумма не совпадает. Теперь уже другая сумма, та что в офисе висит. Заменил ее значение на 0, закинул новые файлы и перезапустил фронт. Данные начали выгружатся. Завтра попробую то же самое на втором терминале. Спасибо Вам огромное.