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

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

storm 13.05.2011 05:09

Значит начнемс:
1. Из предыдущего моего поста вам нужно скопировать весь код целиком и вставить все в шаблон вашего отчета, предварительно удалив оттуда то, что там раньше было
2. так как вы используете непройденные контрольные точки, то для них естественно нет времени нахождения(так как машина в них не была ни разу), то вам нужно тогда немного изменить текст, вместо [SumCont(<Dataset1."REAL_CONT">)] вам нужно вставить [IIF(<Dataset1."REAL_CONT"> > '', SumCont(<Dataset1."REAL_CONT">), '0')]
Т.е делаем проверку, что время задано, если нет, то выводим 0

как-то так, если еще что-то будет не понятно - пишите

zsergey 13.05.2011 05:12

Цитата:

Сообщение от Дмитрий 22 (Сообщение 8874)
Storm, я так понимаю проблема у меня вот в этом. Можете подробнее написать эти действия.

Дима, куда подробней? Может тебя сразу научить программировать? Учи азы или позови за пиво друга программиста :)

Дмитрий 22 13.05.2011 05:54

Цитата:

Сообщение от zsergey (Сообщение 8876)
Цитата:

Сообщение от Дмитрий 22 (Сообщение 8874)
Storm, я так понимаю проблема у меня вот в этом. Можете подробнее написать эти действия.

Дима, куда подробней? Может тебя сразу научить программировать? Учи азы или позови за пиво друга программиста :)

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

storm 13.05.2011 05:59

скриншот пожалуйста, как сейчас выглядит и как должно быть, вобщем, что где не так подробно опишите

ФОРУМ ТК 13.05.2011 06:37

Цитата:

Сообщение от Дмитрий 22 (Сообщение 8871)
Тогда смысл вашего форума в чем? Отписываться о том что нам некогда вашими проблемами заниматься? Диллеру тоже некогда - бабки собирают за абонентскую плату, а остальное е....сь как хотите. Думаю не одному мне хотелось бы что нибудь изменить. Собрать хотя бы статистику по "желаниям" потребителей. Думаю найдутся примерные задачи. А удалить проще чем написать.

Матом ругаться мы все мастаки. Так, что давайте по-аккуратней на поворотах!
Что касается абонентки, то тут еще посмотреть надо: где и кто решил съэкономить.
Как-что сразу дилер, деньги берет ничего не делает. А потом выясняется, что клиент в целях экономии от всего отказался. Дык какие претензии в таком случае.
Учить в данном форуме азам программирования мы не будем, не наш профиль (для этого есть http://fast-report.com/ru/forum/ ), мы можем только поправить какие-то специфические вещи.

Дмитрий 22 13.05.2011 07:29

Цитата:

Сообщение от storm (Сообщение 8881)
скриншот пожалуйста, как сейчас выглядит и как должно быть, вобщем, что где не так подробно опишите

Код вставил без проблем. Интересует:
1. Первые два скрина отображают Время нахождения. Что то оно не сходится.
2. Интересует это предложение - "в MasterData2 вызываете первую функцию, в нее параметром передаете время для суммирования
в вашем случае как-то так [SumCont(<Dataset1."REAL_CONT">)], ее можно засунуть в невидимую ячейку или в любую ячейку в MasterData2"
. Может я неправильно как то это сделал? и поэтому так время отображает в отчете?
Думаю для Вас, Storm, не много займет времени отредактировать данный шаблон. Если можно, тож хотелось бы увидеть скрины ну или готовый шаблон такого плана.

storm 13.05.2011 08:43

у вас идет накопление продолжительностей, замените код на следующий, в нем добавлено обнуление переменной

Код:

var
Days: array[1..7] of string;

CurrCont: TDateTime = 0;           
Str: String;             
procedure SumCont(Cont: String);
begin 
if Length(Cont) > 8 then CurrCont := CurrCont + StrToDateTime(Copy(Cont, Length(Cont) - 7, 8)) + StrToFloat(Copy(Cont, 0, Length(Cont) - 9)) 
else CurrCont := CurrCont + StrToDateTime(Copy(Cont, Length(Cont) - 7, 8)); 
end; 


function GetSumCont(): String;
begin 
if CurrCont >= 1 then 
begin                   
Str := DateTimeToStr(CurrCont);     
Str := IntToStr(Trunc(CurrCont)) + 'сут. ' + Copy(Str, Length(Str) - 7, 8);     
//Str := IntToStr(Trunc(CurrCont) * 24 + StrToInt(Copy(Str, Length(Str) - 7, 2))) + Copy(Str, Length(Str) - 5, 6); 
end                 
else 
begin     
Str := DateTimeToStr(CurrCont);                                         
Str := Copy(Str, Length(Str) - 7, 8); 
end;

CurrCont := 0;

result := Str;
end;

begin 
Days[1] := 'Воскресенье'; 
Days[2] := 'Понедельник'; 
Days[3]  := 'Вторник'; 
Days[4] := 'Среда'; 
Days[5] := 'Четверг'; 
Days[6] :=  'Пятница'; 
Days[7] := 'Суббота'; 
end.

насчет второго пункта, вам нужно вставить ячейку с текстом
[IIF(<Dataset1."REAL_CONT"> > '', SumCont(<Dataset1."REAL_CONT">), '')]
не в GroupFooter1, а в MasterData2, для этого вам нужно выбрать MasterData2, и растянуть его немного вниз, потом поместить в него ячейку с текстом, высоту этой ячейки сделать равной нулю, те выделяете ячейку и за нижнюю границу тянете вверх, пока у ячейки высота не станет нулевой, после этого саму мастердату тоже делаете нулевой высоты, таким образом мы получаем спрятанную(невидимую ячейку)

Дмитрий 22 13.05.2011 09:23

:agree:Огромное спасибо, Storm, что все-таки хватило нервов разжевать. Почти все работает, только вот проблемка небольшая - При установки галочки "Включая непройденные" происходит следующие:

VizART 13.05.2011 11:19

Цитата:

Сообщение от Дмитрий 22 (Сообщение 8919)
:agree:Огромное спасибо, Storm, что все-таки хватило нервов разжевать. Почти все работает, только вот проблемка небольшая - При установки галочки "Включая непройденные" происходит следующие:

По моему, там всё нормально - у "непройденных" точек нет времени нахождения ("продолжительность"). :)

storm 13.05.2011 12:30

угу, понял
замените код на следующий и все будет ок

Код:

var                                 
CurrCont: TDateTime = 0;           
Str: String;             
Days: array[1..7] of string;

procedure SumCont(Cont: String);
begin 
if Length(Cont) > 8 then CurrCont := CurrCont + StrToDateTime(Copy(Cont, Length(Cont) - 7, 8)) + StrToFloat(Copy(Cont, 0, Length(Cont) - 9)) 
else CurrCont := CurrCont + StrToDateTime(Copy(Cont, Length(Cont) - 7, 8)); 
end; 


function GetSumCont(): String;
begin 
if CurrCont >= 1 then 
begin                   
Str := DateTimeToStr(CurrCont);     
Str := IntToStr(Trunc(CurrCont)) + 'сут. ' + Copy(Str, Length(Str) - 7, 8);     
//Str := IntToStr(Trunc(CurrCont) * 24 + StrToInt(Copy(Str, Length(Str) - 7, 2))) + Copy(Str, Length(Str) - 5, 6); 
end                 
else 
begin     
Str := DateTimeToStr(CurrCont);                                         
Str := Copy(Str, Length(Str) - 7, 8); 
end;

if CurrCont = 0 then 
begin
  Str := '';
end;

CurrCont := 0;

result := Str;
end;

begin
  Days[1] := 'Воскресенье';
  Days[2] := 'Понедельник';
  Days[3] := 'Вторник';
  Days[4] := 'Среда';
  Days[5] := 'Четверг';
  Days[6] := 'Пятница';
  Days[7] := 'Суббота'; 
end.



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

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