Zero Block
Click "Block Editor" to enter the edit mode. Use layers, shapes and customize adaptability. Everything is in your hands.
Tilda Publishing
create your own block from scratch
Zero Block
Click "Block Editor" to enter the edit mode. Use layers, shapes and customize adaptability. Everything is in your hands.
Tilda Publishing
create your own block from scratch
Помилки пРРО власної розробки: ErrorType offline id in online mode

Як це виклядає в логах


В лозі plugin-pRRO.log побачимо ось такий запис
[2024-10-27 14:19:27,474] INFO [ 3] - Підписуємо файл C:\Users\Chernivtsi 3\AppData\Roaming\iiko\CashServer\PluginConfigs\pRRO\2025-04-30 ФОП ЛОБЗУН Ю.Г. (Ключ-печатка).jks
[2024-10-27 14:19:28,293] INFO [17] - Ключ: CD5471E9A4AA68E919EA457AD150C1D8BE544A01520856A3FE867EFE6016AA88
[2024-10-27 14:19:28,296] INFO [17] - Спроба відправки документа (1): <?xml version="1.0" encoding="windows-1251"?><RQ V="1"><DAT FN="4000389048" TN="&#1030;&#1044; 3647702386" ZN="" V="1" DT="0" DI="43582"><C T="108" /><TS>20241027100308</TS></DAT><MAC ID="fZ3CsX5qy1A">ce593cf94a9e0ef13dd0ccd2782c48093e743ab49aee0b971673579574c387bd</MAC></RQ>, hashSum: 17cf86f2d4dd682ebcdf579fb2232b231b6416c406fd978f696186281e59f4f4
[2024-10-27 14:19:28,438] INFO [ 3] - Request status ErrorType, error: offline id in online mode
[2024-10-27 14:19:28,439] ERROR [ 3] - Проблемний пакет
[2024-10-27 14:19:28,440] ERROR [ 3] - Відповідь сервера: ErrorType offline id in online mode
[2024-10-27 14:19:28,440] ERROR [ 3] - <?xml version="1.0" encoding="windows-1251"?><RQ V="1"><DAT FN="4000389048" TN="&#1030;&#1044; 3647702386" ZN="" V="1" DT="0" DI="43582"><C T="108" /><TS>20241027100308</TS></DAT><MAC ID="fZ3CsX5qy1A">ce593cf94a9e0ef13dd0ccd2782c48093e743ab49aee0b971673579574c387bd</MAC></RQ>
[2024-10-27 14:19:28,440] ERROR [ 3] - MAC пустий
[2024-10-27 14:19:28,440] WARN [ 3] - Відбулась спроба відправки документу з OfflineId у онлайн режимі
[2024-10-27 14:19:28,441] WARN [ 3] - Відповідь сервера: ErrorType offline id in online mode
Це свідчить про те, що десь в іншому місці по цьому ж ФН зафіксовано перехід в оффлайн режим, при тому що наша каса - онлайн. Як правило це буває коли десь ще є каса Чекбокс, яка працює з цим же ФН.

Для того щоб виправити помилку, нам необхідно передати документ про вихід з оффлайн режиму. Він має номер 109. І саме про це я розкажу в цій статті.

Алогритм:
1) Робимо бекап БД пРРО
2) Відкриваємо БД через утилітку Database.NET
3) Виконуємо наступний скрипт
Де:
aaa - Айді документу в черзі
bbb - xml 109 документу
ccc - Хеш сума документу
ddd - Минула хеш сума документу
eee - Оффлайн айді документу
fff - дата і час в офматі YYYY-mm-DD HH:mm:SS.mmm
insert into Queue
(Id, Xml, Document_number, Type, Hash_sum, PreviousHashSum, OfflineId, OrderId, CreatedDate)
values
(aaa,'bbb',0,109,'ccc','ddd','eee',NULL,'fff')
Тепер дам відповідь на питання, де взяти цю інформацію.
Почнемо з aaa. Наша задача - зробити так, щоб цей документ. який ми вставляємо в базу, був в черзі першим. Тож для початку нам треба подивитись в таблицю Queue і глянути, який айді зараз перший. Для цього виконуємо ось такий запит:
select * from Queue
У відповідь ви побачите таблицю з документами в черзі
Тут нас цікавить перший ствопчик, Id. Зазвичай таблиця по ньому і відсортована. Нас цікавить, яке значення в цьому стовпчику - НАЙМЕНЬШЕ
В даному випадку - це значення 43479, значить для скрипта нам треба взяти значення як мінімум на 1 меньше, тобто 43478

По цьому ж запиту, ми можемо взяти інформацію для fff - тобто дату і час документу. В прикладі - це 2024-10-26 14:05:28.101, значить ми маємо вказати для скрипта час, що був би ДО часу документу з прикладу, тобто 2024-10-26 14:00:00.000

Тепер візьмемо дані для поля eee
Для цього виконаємо простий запит
select * from Offline_Ids
Результатом буде ось така табличка на 2000 рядків
З цієї таблички, беремо будь який айді і підставляємо його замість eee в основному скрипті. Після цього, цей айді необхідно вилучити з списку запитом (замість eee підставити айді, який вибрали)
delete from Offline_Ids
where Id='eee'
Майже у цілі. Останні три поля ми візьмемо з уже відправленого документу і трошечки їх змінимо. Для початку нам треба взяти як взірець один з уже відправлених документів 109. Для цього виконаємо скрипт
select * from SendedDocuments
where type='109'
Перед нам з'явиться табличка з усіма відправленими документами з типом 109
Не суть важливо, який документ ми виберемо, але рекомендую брати той, що був останнім за взірець. В нашому випадку - це документ з Id 43477
Для значення ccc - беремо значення з стовпчику Hash_sum і без змін вставляємо в основний скрипт
Для значення ddd - беремо значення з стовпчику PreviousHashSum і без змін вставляємо в основний скрипт
Для значення bbb нас цікавить стовпчик Xml. Нам треба його скопіювати в основний скрипт, і трошечки змінити. Розглянемо детальніше те що там записано
<?xml version="1.0" encoding="windows-1251"?>
<RQ V="1">
<DAT FN="4000389048" TN="&#1030;&#1044; 3647702386" ZN="" DI="43473" V="1" DT="0">
<C T="109" />
<TS>20241026094226</TS>
</DAT>
<MAC ID="EMont5nl_B0">e3e6dd2fa1921bf4642ffa48d4ef96cad9f093bc7bd3a536eac2f44103a72d52</MAC>
</RQ>
Змінити нам треба значення в двух тегах:
1) <TS>20241026094226</TS> - тут ми маємо записати дату і час, яку ми підставляємо в fff, але без симовлів в форматі YYYYmmDDhhMMss, тобто має бути ось так = <TS>20241026140000</TS>
2) <MAC ID="EMont5nl_B0">e3e6dd2fa1921bf4642ffa48d4ef96cad9f093bc7bd3a536eac2f44103a72d52</MAC> - тут нам треба змінити значення ID="EMont5nl_B0". Підставити сюди треба оффлайн код, який ми вибрали для eee, тобто ось так = <MAC ID="eee">e3e6dd2fa1921bf4642ffa48d4ef96cad9f093bc7bd3a536eac2f44103a72d52</MAC>
Після цього вставляємо текст з зміненими даними в bbb і виконуємо оновний скрипт.
Запускаємо фронт і по логу пРРО переконуємось що черга - пуста.
Profit ;)