Автор Тема: Отчеты и плагины  (Прочитано 38652 раз)

0 Пользователей и 1 Гость просматривают эту тему.

bigdragon

  • Дилеры
  • Пользователь
  • *
  • Сообщений: 53
  • Карма: +0/-0
Отчеты и плагины
« : 14 Март 2012, 18:24:55 »
Добрый день !

Интересует возможность во время генерации отчета обращаться к конкретному плагину для получения от него информации с последующим
отображением этой информации в отчете.

Заранее благодарен за помощь.

_Alex_

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2706
  • Карма: +3/-0
  • Алексей
Re: Отчеты и плагины
« Ответ #1 : 15 Март 2012, 10:44:33 »
Добрый день !

Интересует возможность во время генерации отчета обращаться к конкретному плагину для получения от него информации с последующим
отображением этой информации в отчете.

Заранее благодарен за помощь.

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

bigdragon

  • Дилеры
  • Пользователь
  • *
  • Сообщений: 53
  • Карма: +0/-0
Re: Отчеты и плагины
« Ответ #2 : 15 Март 2012, 13:58:25 »
Могу сделать запрос у плагина переменных для отчета (а так же для отображения в точках и списке рейсов), после чего запрос расчета этих переменных, как сейчас сделано для датчиков.
Пойдет?

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

_Alex_

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2706
  • Карма: +3/-0
  • Алексей
Re: Отчеты и плагины
« Ответ #3 : 22 Март 2012, 11:54:49 »
Могу сделать запрос у плагина переменных для отчета (а так же для отображения в точках и списке рейсов), после чего запрос расчета этих переменных, как сейчас сделано для датчиков.
Пойдет?

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

Практически доделал. Сегодня-завтра выложу на фтп (в раздел бета).

Knight

  • Ветеран
  • *****
  • Сообщений: 835
  • Карма: +1/-0
  • Андрей
    • Locarus Ukraine
Re: Отчеты и плагины
« Ответ #4 : 30 Март 2012, 18:51:41 »
Могу сделать запрос у плагина переменных для отчета (а так же для отображения в точках и списке рейсов), после чего запрос расчета этих переменных, как сейчас сделано для датчиков.
Пойдет?

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

Практически доделал. Сегодня-завтра выложу на фтп (в раздел бета).
Можно какую-то краткую вводную по переменным, что и где смотреть?
Все новое в МИР! Сделаем его лучше!!!

_Alex_

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2706
  • Карма: +3/-0
  • Алексей
Re: Отчеты и плагины
« Ответ #5 : 02 Апрель 2012, 10:26:11 »
Могу сделать запрос у плагина переменных для отчета (а так же для отображения в точках и списке рейсов), после чего запрос расчета этих переменных, как сейчас сделано для датчиков.
Пойдет?

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

Практически доделал. Сегодня-завтра выложу на фтп (в раздел бета).
Можно какую-то краткую вводную по переменным, что и где смотреть?

Похоже забыл выложил файл с поправленным заголовком. Выложил на ФТП в раздел бета.

Добавил новый раздел PluginReportFunction и 2 функции:

struct _TPluginReportFunction{
      // int AddReportVar(char *Caption, char * Description);
      // 2.44 Добавить переменную в список общих переменных отчета (т.е. переменных присутсвующих во всех отчетах)
      // Caption      - Название переменной
      // Description   - Описание переменной
      // Возвращаемое значение - Идентификатор переменной (см OnCalcReportVar).
   const LPAddReportVar AddReportVar;
      // double OnCalcReportVar(int ReportVarID, int IndexFrom, int IndexTo, char* &ValueS);
      // 2.44 Рассчитать переменную
      // ReportVarID   - идентификатор переменной, полученный при создании (см AddReportVar).
      // IndexFrom   - индекс начала записей для расчета (включительно)
      // IndexTo      - индекс окончания записей для расчета (включительно)
      // ValueS      - Текстовое значение переменной. Использовать только если нельзя получить цифровое значение!
      //              Память под переменную выделять функцией LIGetMemory.
      // Возвращаемое значение - Цифровое значение переменной. Если нельзя получить цифровое значение переменной,
      //                     необходимо использовать поле ValueS. При этом Цифровое значение игнорируется.
      // Примечание: если ValueS != NULL, используется ValueS, иначе используется Цифровое значение (т.е. значение, возвращаемой функцией).
   LPCalcReportVar OnCalcReportVar;


Дальше, думаю, все понятно.

bigdragon

  • Дилеры
  • Пользователь
  • *
  • Сообщений: 53
  • Карма: +0/-0
Re: Отчеты и плагины
« Ответ #6 : 09 Апрель 2012, 18:33:56 »
А можно примерчик типа "Hello, world!" ?

_Alex_

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2706
  • Карма: +3/-0
  • Алексей
Re: Отчеты и плагины
« Ответ #7 : 10 Апрель 2012, 10:02:34 »
А можно примерчик типа "Hello, world!" ?

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

LPCalcReportVar  OldOnCalcReportVar;
int MyReportVar1, MyReportVar2;
double MyCalcReportVar(int ReportVarID, int IndexFrom, int IndexTo, char* &ValueS);

void PluginInitEventHandler()
{
//*CraiD: При совпадение имён, предыдущая переменная перезаписывается новой.
MyReportVar1 = EventHandler->PluginReportFunction->AddReportVar("PluginVar","Это переменная из плагина");
MyReportVar2 = EventHandler->PluginReportFunction->AddReportVar("PluginVar2","Это тоже переменная из плагина");
OldOnCalcReportVar =  EventHandler->PluginReportFunction->OnCalcReportVar;
EventHandler->PluginReportFunction->OnCalcReportVar = MyCalcReportVar;
}

double MyCalcReportVar(int ReportVarID, int IndexFrom, int IndexTo, char* &ValueS)
{
if (ReportVarID == MyReportVar1){
    return IndexFrom;
} else if (ReportVarID == MyReportVar2){
    ValueS =  EventHandler->UtilFunction->GetMemory(100);
    strcpy(ValueS,"!!!!!!!!");
    return 0;
} else if (OldOnCalcReportVar) return OldOnCalcReportVar(ReportVarID, IndexFrom, IndexTo,ValueS);
return 0;
}
« Последнее редактирование: 10 Апрель 2012, 10:13:47 от CraiD »

mobilesfinks

  • Дилеры
  • Ветеран
  • *
  • Сообщений: 745
  • Карма: +4/-0
Re: Отчеты и плагины
« Ответ #8 : 10 Апрель 2012, 19:45:16 »
ужасный код. питон рулит.
 :biggrin:

CraiD

  • Старожил
  • ****
  • Сообщений: 431
  • Карма: +0/-0
Re: Отчеты и плагины
« Ответ #9 : 11 Апрель 2012, 09:16:00 »
ужасный код. питон рулит.
 :biggrin:
+1  :drinks:

_Alex_

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2706
  • Карма: +3/-0
  • Алексей
Re: Отчеты и плагины
« Ответ #10 : 11 Апрель 2012, 14:29:10 »
ужасный код. питон рулит.
 :biggrin:

Не знаю насчет всяких там удавов, по-моему все достаточно прозрачно и наивно  :friends:.

CraiD

  • Старожил
  • ****
  • Сообщений: 431
  • Карма: +0/-0
Re: Отчеты и плагины
« Ответ #11 : 11 Апрель 2012, 15:29:52 »
Не знаю насчет всяких там удавов, по-моему все достаточно прозрачно и наивно  :friends:.
Да начнётся холивар!
Из недавнего парсер данных из строки вида "|unix-datetime;lat;lon;dir;speed|unix-datetime;lat;lon;dir;speed|...|" на питоне встроенными средствами:
def data_parser(data):
    strings = str(data).strip('|').split('|')
    data = []
    for string in strings:
        string = string.split(';')
        data.append({
            'speed': int(string[4]),
            'dir':   int(r[3]),
            'time':  datetime.fromtimestamp(int(r[0])).strftime("%d %b %Y %H:%M:%S"),
            'coord': {'lat': float(r[1]), 'lon': float(r[2])}
        })
    return data
Даже представлять неохота, сколько займет тот же код на C++ или Delphi.

PS Да, я знаю, что у языков разное назначение, но эстетический вид кода это не отменяет.
« Последнее редактирование: 11 Апрель 2012, 15:33:25 от CraiD »

oleg_km

  • Пользователь
  • **
  • Сообщений: 78
  • Карма: +0/-0
    • Агент-Продукт
Re: Отчеты и плагины
« Ответ #12 : 11 Апрель 2012, 17:54:01 »
Цитировать
Даже представлять неохота, сколько займет тот же код на C++ или Delphi.

Столько же, сколько этот код на C++ занимает в исходниках питона.

SAN

  • Дилеры
  • Ветеран
  • *
  • Сообщений: 2932
  • Карма: +23/-2
Re: Отчеты и плагины
« Ответ #13 : 12 Апрель 2012, 00:38:52 »
"Папа, а сф кэм ты щищаз ражговаривал?" (с)

_Alex_

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2706
  • Карма: +3/-0
  • Алексей
Re: Отчеты и плагины
« Ответ #14 : 12 Апрель 2012, 09:51:33 »
Цитировать
Даже представлять неохота, сколько займет тот же код на C++ или Delphi.

Столько же, сколько этот код на C++ занимает в исходниках питона.

для С++, так же как и для Дельфи уже столько всего понаписано, что при правильном подходе и небольшом количества гугля код будет ничуть не больше.