ОФИЦИАЛЬНЫЙ ФОРУМ ГРУППЫ КОМПАНИЙ «ТЕХНОКОМ»

ОФИЦИАЛЬНЫЙ ФОРУМ ГРУППЫ КОМПАНИЙ «ТЕХНОКОМ» (https://forum.tk-chel.ru/index.php)
-   Система «АвтоГРАФ»: Программное обеспечение (https://forum.tk-chel.ru/forumdisplay.php?f=4)
-   -   Доработка: Стандартный отчёт (https://forum.tk-chel.ru/showthread.php?t=1025)

SK 16.01.2012 16:01

Цитата:

Сообщение от csistra (Сообщение 22479)
и снова ЗДРАСТЕ!
Наконец-то дошли руки написать здесь что нить новенькое такое-эдакое.
Пока вся страна успешно употребляла горячительное и пыталась совершить мягкую посадку в салат оливье, я тоже этим занимался, но теперь пришла пора немного потрудится на благо вселенной и все такое.
Собсно суть вопросов....
в очередной раз открыл инструкцию под названием "Руководство по работе с программой AGReports". увидел там ФИГУ и обрадовался.
Захотелось мне в отчет добавить два столбца: "Расход 1 дв." и "Расход 1 ост.". Что это такое думаю всем понятно. Т.к. в мануале нет я решил что это будет выглядеть так:
[Dataset1."Trip_Motor1FuelMoveHours"] и [Dataset1."Trip_Motor1FuelParkHours"]
но это я так думал. Оказалось ФИГУШКИ! Подскажите КАК это написать то????
А! и еще!
есть у меня в отчете:
[IIF(<Dataset1."DISTANCE"> > 0, 100*<Dataset1."M1_FUEL"> / <Dataset1."DISTANCE">, 'N/A')]
хочу чтобы у меня выделялась ячейчка в красный цвет если значение больше 50.
для этого перехожу в "Выделение" гляжу туда.... и все! завис... а КАК написать то условие ????
поможыте!!!! люди добрые и не очень!

csistra, не паникуйте. Всё хорошо.
Читайте сответствующий файл: Описание полей DBF для списков.doc
Он должен быть соответствующей свежести.



На всякий случай перезакачайте: http://www.tk-chel.ru/download/AutoGRAPH_OLE.zip

Но вообще - вроде как обновляется через инсталлятор...

SK 16.01.2012 16:15

Цитата:

Сообщение от Александр 52 регион (Сообщение 22460)
А мне нужно сделать "работу водителя" у нас она считается от начала пуска стартера, до последнего выключения двигателя - это по Вашему разница между I1_S_TIME и I1_E_TIME, т.е. в колонке надо вписать цифру равную I1_E_TIME минус I1_S_TIME :dontknow:

Можете написать такую формулу? :)

I1_CONT


Александр 52 регион 16.01.2012 17:18

SK спасибо, но вероятно я неправильно объяснил задачу.
Мне надо не работу двигателя, а весь промежуток времени прошедший от пуска двигателя до последней его остановки


SK 16.01.2012 18:27

Это несколько сложнее. Но...

Во вкладку "Код" между глобальным объявлением переменных и глобальной процедурой вставить функцию определения длины временного интервала по его началу и концу TimeMinus(Начало, Конец):
Нажмите для просмотра содержимого...

Код:

function TimeMinus(TimeBegin: String; TimeEnd: String): String;
var     
TEnd: TDateTime = 0;
TBegin: TDateTime = 0;
TRes: TDateTime = 0;
TResStr: String;
begin
    TBegin := StrToDateTime(TimeBegin);
    TEnd  := StrToDateTime(TimeEnd);
 
TRes := TEnd - TBegin;                   
 
if TRes >= 1 then
  begin
      TResStr := DateTimeToStr(TRes);
      TResStr := IntToStr(Trunc(TRes)) + ' сут. ' + Copy(TResStr, Length(TResStr) - 7, 8);
  end
else
  begin
      TResStr := DateTimeToStr(TRes);
      TResStr := Copy(TResStr, Length(TResStr) - 7, 8);
  end;
result := TResStr;
end;

Должно получиться что-то типа:



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

В Вашем случае:
Код:

[TimeMinus(<Dataset1."I1_S_TIME">,<Dataset1."I1_E_TIME">)]
всё...

SK 16.01.2012 18:32

Отпишитесь, получилось или нет.

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

Еще можно в начале функции встроить защиту от перепутывания начала и конца временного отрезка.

Александр 52 регион 17.01.2012 09:27

SK, что-то не так.
Можно еще что нибудь придумать?


SK 17.01.2012 09:29

Цитата:

Сообщение от Александр 52 регион (Сообщение 22623)
SK, что-то не так.
Можно еще что нибудь придумать?


А какие переменные подставили ?

Скопируйте мне функцию из ячейки отчета.

Александр 52 регион 17.01.2012 09:39

Простите, я не понимаю, надо еще переменные вносить? Куда?

Я ввел в ячейку предложенную функцию: [TimeMinus(<Dataset1."I1_S_TIME">,<Dataset1."I1_E_T IME">)]

SK 17.01.2012 09:51

Александр 52 регион, зайдите, пожалуйста, в редактор отчета, сохраните его в отдельный файл "Сохранить как" и вышлите на support@tk-chel.ru для Самцова Константина.

SK 17.01.2012 10:48

Александр 52 регион, понятно что происходит.
У вас одна из переменных I1_S_TIME или I1_E_TIME отсутствует - содержит пустое значение. Или обе сразу. Соответственно, возникает ошибка конвертации типа.

Можно модифицировать немного код функции, чтоб в случае ошибки, он выдавал в отчет N/A.
Проверьте, пожалуйста. И отпишитесь здесь.

Код:

function TimeMinus(TimeBegin: String; TimeEnd: String): String;
var     
  TEnd: TDateTime = 0;
  TBegin: TDateTime = 0;
  TRes: TDateTime = 0;
  TResStr: String;
begin
      try
              TBegin := StrToDateTime(TimeBegin);
              TEnd  := StrToDateTime(TimeEnd);
          TRes := TEnd - TBegin;
          if TRes >= 1 then
              begin
                TResStr := DateTimeToStr(TRes);
                TResStr := IntToStr(Trunc(TRes)) + ' сут. ' + Copy(TResStr, Length(TResStr) - 7, 8);
              end
          else
              begin
                TResStr := DateTimeToStr(TRes);
                TResStr := Copy(TResStr, Length(TResStr) - 7, 8);
              end;
          result := TResStr;
        except
          result := 'N/A';
        end;         
end;

Для индикации и проверки, сделайте еще одну ячейку с содержимым, выводящем эти переменные переменные (если хотите):
[Dataset1."I1_S_TIME"]
[Dataset1."I1_E_TIME"]


Текущее время: 17:12. Часовой пояс GMT.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot