1

Конкурентная работа с шаблоном отчёта

Topic: Конкурентная работа с шаблоном отчёта

Как мне пояснили в теме, где за сутки никто из виалона не ответил (https://forum.gurtam.com/viewtopic.php?id=17454), чтобы построить отчёт по геозонам, мне нужно сначала их указать в шаблоне. И действительно, при интерактивном добавлении таблицы "Геозоны"  в отчёт кнопка "Ок" недоступна, пока не укажешь конкретные геозоны. Похоже, это всё, что может предоставить апи виалона.

Теперь задача: нужно по каждому путевому листу получить события входа в / выхода из геозон путевого листа.

Поскольку список геозон каждый раз разный и этих списков по нескольку сотен на дню, то сохранить один шаблон отчёта с нужными геозонами невозможно. Получается, нужно программно каждый раз устанавливать список геозон, которые нас интересуют, в шаблоне, а затем сохранять и выполнять этот шаблон.
Последовательность действий:
1) Получаем шаблон отчёта.
2) Получаем из учётной системы айдишники нужных нам геозон.
3) Устанавливаем в шаблон отчёта айдишники. Записываем шаблон.
4) Выполняем шаблон отчёта.

Казалось бы, всё хорошо, сколько лет уже с этим работают, но тут опять возникаю я со своими десятками пользователей виалона, которые работают одновременно и обрисовываю следующую проблему:

Два пользователя в разных предприятиях нажимают кнопку "получить данные виалон" в путевых листах.
1) Пользователь ИМИ задал в шаблоне отчёта геозоны ИМИ.
2) Сотыми долями секунды позже пользователь АФЧ задал в шаблоне отчёта геозоны АФЧ.
3) Пользователь ИМИ выполнил отчёт и получил данные... АФЧ.

Поскольку мы имеем одну общую сущность - шаблон отчёта - и мы каждый раз чтобы выполнить должны его а) адаптировать под свой список геозон и б) записать в виалон, то возникает проблема конкурентной работы пользователей с этой сущностью.
Как у вас решается подобная проблема? Можно ли как-то не сохранять шаблон, а только получить его, установить свой список геозон и как-то передать на выполнение? Чтобы без записи к вам обратно.

2

Конкурентная работа с шаблоном отчёта

Re: Конкурентная работа с шаблоном отчёта

Есть же другой путь, в шаблоне отчёта указать группу геозон, а уже в группу добавлять/убирать геозоны как бог на душу положит. Имя группы обычно меняется сильно реже.

3

Конкурентная работа с шаблоном отчёта

(edited by Лео 18/11/2020 12:58:39)

Re: Конкурентная работа с шаблоном отчёта

Получаем ту же проблему, но с другой сущностью. Один сидит формирует группу под себя, второй её в это время очищает и начинает формировать под себя. Программно, конечно.

4

Конкурентная работа с шаблоном отчёта

Re: Конкурентная работа с шаблоном отчёта

Добрый день!

Есть другой шаблон отчета, возможно вам подойдет больше этот вариант.
Шаблон отчета для геозон/групп геозон - см https://docs.wialon.com/ru/hosting/user … v/geofence

Отчет будет выполнятся по геозонам, по их посещением, и в результате отчета будут объекты, которые посетили данные геозоны.
На интерфейсе можно создать отчет для например группы геозон, выбрать нужные объекты в настройках таблицы.

Выполнять отчет можно через api svc=report/exec_report, где в "reportObjectId" - id ресурса геозон, "reportObjectSecId": - id группы геозоны

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

Diana Cheley
Wialon Hosting Expert
Gurtam
5

Конкурентная работа с шаблоном отчёта

(edited by Лео 18/11/2020 14:16:30)

Re: Конкурентная работа с шаблоном отчёта

Но вы же предлагаете то же самое. Только мне теперь этот список ТСок надо формировать для другого метода.
Ваш вариант всё равно предусматривает наличие в базе виалона подготовленной сущности (группы).

Тут методологическая проблема в том, что информацию, которая по сути является параметрами конкретного отчёта (список геозон), запихнули в шаблон вместо того, чтобы передавать в параметрах при выполнении отчёта (как айдишник ТСки, например).

Создавать под каждого пользователя свою группу - не вариант. Во-первых, мы понимаем, что это кривой костыль. Во-вторых, их десятки и они не статичны, приходят и уходят. Это ещё писать механизм синхронизации сущностей Пользователь и группа СПП. Писать рег.задание, чтобы при увольнении группа удалялась...

6

Конкурентная работа с шаблоном отчёта

Re: Конкурентная работа с шаблоном отчёта

Лео
Можно выполнить отчёт, не создавая шаблон. Просто передайте JSON шаблона в параметре reportTemplate запроса execute_report

7

Конкурентная работа с шаблоном отчёта

Re: Конкурентная работа с шаблоном отчёта

А что, так можно было??? 8-)
Это похоже на решение. А как бы мне получить этот жсон шаблона, подскажите, пожалуйста?

8

Конкурентная работа с шаблоном отчёта

Re: Конкурентная работа с шаблоном отчёта

Я так понял, вы уже умеете в API. Тогда почему не по команде пользователя ИМИ взять заготовку шаблона отчёта, засунуть в неё нужные id геозон или группы геозон, сохранить шаблон отчёта с уникальным врЕменным именем, выполнить его, получить результат и удалить временный шаблон отчёта. По команде АФЧ будет свой уникальный временный шаблон. Конфликт гонок исчерпан.
Заготовка может быть как неким шаблоном отчёта, который никогда не используется для генерации отчёта напрямую, так и скриптом вызовов API для создания шаблона отчёта.
Или API так не позволяет?

9

Конкурентная работа с шаблоном отчёта

(edited by Лео 18/11/2020 14:40:57)

Re: Конкурентная работа с шаблоном отчёта

Хотя нет, даже динамическое создание шаблона не убережёт меня от необходимости модификации и записи группы в виалон...
Я пока возьму паузу на НИОКР.
Сейчас нужно определить, можно ли передать список геозон в шаблоне отчёте, без отсылки к какой-либо группе геозон.

10

Конкурентная работа с шаблоном отчёта

Re: Конкурентная работа с шаблоном отчёта

Лео wrote:

А что, так можно было??? 8-)
Это похоже на решение. А как бы мне получить этот жсон шаблона, подскажите, пожалуйста?

Шаблон отсюда report/get_report_data

Обычно мы делаем так
- настраиваем отчёт в wialon
- забираем json шаблона с помощью report/get_report_data
- сохраняем json шаблона в коде своего приложения, шаблон отчёта в wialon удаляем (чтобы не мозолил глаза)
- при необходимости выполнения отчёта передаём сохранённый json, при необходимости меняем

11

Конкурентная работа с шаблоном отчёта

(edited by Лео 19/11/2020 18:47:28)

Re: Конкурентная работа с шаблоном отчёта

Собственно, как обычно в ответ лаконичное {"error":4}.
Хотя сделал как вы писали выше: текст из report/get_report_data подсунул в report/exec_report.
Можете дать пример запроса? Я единственное, что понял, id должен быть нулём, если передаём текст шаблона.
Текст шаблона ниже.

[{"id":0,"n":"","ct":"avl_unit","p":"{\"bind\":{\"avl_unit\":[0]},\"descr\":\"\"}","tbl":[{"n":"unit_zones_visit","l":"Геозоны","c":"[\"zone_name\",\"time_begin\",\"time_end\"]","cl":"[\"Геозона\",\"Время входа\",\"Время выхода\"]","cp":"[{},{},{}]","s":"","sl":"","filter_order":["duration","mileage","base_eh_sensor","engine_hours","speed","trips","stops","parkings","sensors","sensor_name","custom_sensor_name","driver","trailer","fillings","thefts"],"p":"{\"geozones\":\"gz17140224_90:1596531663,\"}","sch":{"f1":0,"f2":0,"t1":0,"t2":0,"m":0,"y":0,"w":0,"fl":0},"f":0}]}]

А, и ещё где бы мне узнать, что это за данные?

gz17140224_90:1596531663

Я заметил, что первая часть - это ид группы и объекта, а вот после двоеточия что?

Спустя 2,5 часа издевательства виалона надо мной: {"error":7}
Это раздражает, конечно, очень сильно. Бизнес не хочет ждать, когда мой вопрос на форуме наконец будет замечен. У меня задача - сделать это сегодня за пару часов. А я эту пару часов тупо жду ответа из-за того, что в документации нет примеров и внятного описания.

Я так понимаю, проблема может быть в экранировании символов. Полученный по get_report_data результат уже содержал экранированные символы (это так и задумано или мой косяк?). Поможет корректный пример. Поиском я уже перечитал кучу тем, но не нашёл примера, кроме как на питоне.

12

Конкурентная работа с шаблоном отчёта

(edited by RedRock 20/11/2020 11:48:19)

Re: Конкурентная работа с шаблоном отчёта

Лео , а вам logistics не подойдет?

Вам останется только отчет по выполненным заявкам сделать.

FFA0-0BBB-8911-15BB

https://www.reg.ru
13

Конкурентная работа с шаблоном отчёта

Re: Конкурентная работа с шаблоном отчёта

Если это другой продукт, то нет. У нас плотная интеграция с WH.

14

Конкурентная работа с шаблоном отчёта

Re: Конкурентная работа с шаблоном отчёта

Спустя 2,5 часа издевательства виалона надо мной: {"error":7}

error":7 - нет доступа, пытаетесь запросить данные по объекту/ресурсу, к которому нет доступа (возможно нет доступа именно на выполнение отчёта)

gz17140224_90:1596531663

1596531663 - время создания геозоны в UNIX. Т.к id геозоны - неуникальное свойство (если удалить геозону и создать снова, id будет одним и тем же), для идентификации используется дополнительный параметр - время создания. Таким образом связка zone.id + zone.ct (creation time) однозначно определяет геозону.

15

Конкурентная работа с шаблоном отчёта

(edited by Лео 20/11/2020 19:35:22)

Re: Конкурентная работа с шаблоном отчёта

А можно пример строки запроса с шаблоном внутри? Я там спрашивал выше. Я так понимаю, ответа ждать теперь только в ПН...
Мне непонятно что экранируется, а что нет.

Я скорректировал запрос, теперь передаю и время создания. Ответ: {"error":4}
Ребят, хватит издеваться! Дайте внятное описание формата или хотя бы полный текст примера отправляемого запроса, я сам разберусь. Это так сложно?

16

Конкурентная работа с шаблоном отчёта

Re: Конкурентная работа с шаблоном отчёта

Лео wrote:

Ребят, хватит издеваться!

Приношу извинения, если показалось, что кто-то издевается. Мы всегда стараемся помочь нуждающимся, на сколько это возможно

Лео wrote:

Мне непонятно что экранируется, а что нет.

Экранируются двойные кавычки в строках, которые содержат JSON в виде строки. В частности параметр p. В документации эти параметры значатся с типом <text>.

Лео wrote:

текст примера отправляемого запроса, я сам разберусь

Пример GET запроса для простоты (напомню, что документация настаивает на использовании POST для всех запросов). sid удалён, id-шники с тестовой учётки.

https://hst-api.wialon.com/wialon/ajax.html?svc=report/exec_report&params={"reportResourceId":1199572,"reportTemplateId":0,"reportTemplate":{"id":0,"n":"","ct":"avl_unit","p":"{\"descr\":\"\"}","tbl":[{"n":"unit_zones_visit","l":"Геозоны","c":"[\"zone_name\",\"time_begin\",\"time_end\"]","cl":"[\"Геозона\",\"Время входа\",\"Время выхода\"]","cp":"[{},{},{}]","s":"","sl":"","filter_order":["duration","mileage","base_eh_sensor","engine_hours","speed","trips","stops","parkings","sensors","sensor_name","custom_sensor_name","driver","trailer","fillings","thefts"],"p":"{\"geozones\":\"gz1199572_69:1564502643\"}","sch":{"f1":0,"f2":0,"t1":0,"t2":0,"m":0,"y":0,"w":0,"fl":0},"f":0}]},"reportObjectId":15672409,"reportObjectSecId":0,"interval":{"flags":16777216,"from":1606078800,"to":1606165199}}&sid=

Я приветствую желание разобраться во всех нюансах, но на практике самый действенный способ - скопировать рабочий запрос из вкладки Network с рабочего wialon и модифицировать под свои нужды. Ничего нового тут нет, ровно то, что я описывал в предыдущем ответе

17

Конкурентная работа с шаблоном отчёта

Re: Конкурентная работа с шаблоном отчёта

Итак, памятка для многих пользователей 1С, наличие которых виалон упорно игнорирует.
1) Создаём в интерфейсе нужного формата отчёт.
2) Выполняем по нему get_report_data. Ответ получается как массив элементов, нам нужен первый элемент - это и есть текст отчёта. Пример:

{"id":"0","n":"","ct":"avl_unit","p":"{\"bind\":{\"avl_unit\":[0]},\"descr\":\"\"}","tbl":[{"n":"unit_zones_visit","l":"Геозоны","c":"[\"zone_name\",\"time_begin\",\"time_end\"]","cl":"[\"Геозона\",\"Время входа\",\"Время выхода\"]","cp":"[{},{},{}]","s":"","sl":"","filter_order":["duration","mileage","base_eh_sensor","engine_hours","speed","trips","stops","parkings","sensors","sensor_name","custom_sensor_name","driver","trailer","fillings","thefts"],"p":"{\"geozones\":\"%1\"}","sch":{"f1":"0","f2":"0","t1":"0","t2":"0","m":"0","y":"0","w":"0","fl":"0"},"f":"0"}]}

Обратите внимание на %1 - это заменяемый кусок для СтрШаблон().
3) Сохраняем текст отчёта в текстовый макет.
4) Когда нужно построить отчёт по списку геозон, формируем строку геозон, заканчивающуюся всегда запятой. Пример:

gz1199572_69:1564502643,

5) Достаём шаблон отчёта из макета, заменяем %1 на строку геозон. Полученная строка является значением реквизита reportTemplate у exec_report. При этом свойство reportTemplateId = 0.

Экранирование символов не трогайте. Использовал следующие параметры записи:

Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет,, Истина, ЭкранированиеСимволовJSON.Нет, Ложь, Ложь, Ложь, Ложь, Ложь);

Что-то может остаться неосвещённым, т.к. у меня есть нюанс: я сделал XDTO-пакет для работы с виалоном. В нём объектная модель всех методов апи, что мы используем. Поэтому мне проще получить объектную модель для метода или распарсить строку из текстового макета в объект XDTO.