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

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

TOOP 16.12.2012 04:53

Внешний отчет
 
Подскажите как можно сделать в данном отсчете так, чтобы выводились строчки только с отрицательным объемом топлива.

SK 16.12.2012 10:11

Использовать обработчик OnBeforePrint и не выводить строки, которые не соответствуют Вашему условию.

Нажмите для просмотра содержимого...



TOOP 17.12.2012 06:31

Вложений: 1
При двойном по пустому полю onbeforeprint выскакивает ошибка. Скриншот во вложении.

SK 17.12.2012 07:21

Цитата:

Сообщение от TOOP (Сообщение 45615)
При двойном по пустому полю onbeforeprint выскакивает ошибка. Скриншот во вложении.

Проверьте вкладку "Код", там должно быть следующее (если никто не лазил):
Код:

var
  Days: array[1..7] of string;
                   
procedure FastReportOnStartReport(Sender: TfrxComponent);
begin
  BDEQuery2.Sql.Clear();
    BDEQuery2.Sql.Add('SELECT t1.S_LATITUDE as LAT, t1.S_LONGITUDE as LON, t1.S_ADDRESS as ADDR, ' +     
    't1.S_REAL_TIME as S_TIME, t1.E_REAL_TIME as E_TIME, t1.REAL_CONT as CONT, t1.T1_E_LEVEL as E_LEVEL, t1.T1_S_LEVEL as S_LEVEL, ' +                 
    ' t2.NUMBER as Number1, t2.id as id1 FROM ''temp0.dbf'' t1 LEFT JOIN ''Соответствие.dbf'' t2 on t1.DRIVER_ID = t2.id order by S_TIME');
  BDEQuery2.Open();                       
end;
 
begin
  Days[1] := 'Воскресенье';
  Days[2] := 'Понедельник';
  Days[3] := 'Вторник';
  Days[4] := 'Среда';
  Days[5] := 'Четверг';
  Days[6] := 'Пятница';
  Days[7] := 'Суббота'; 
end.

После двойного клика, вкладка "Код" должна выглядеть так:
Код:

var
  Days: array[1..7] of string;
                   
procedure FastReportOnStartReport(Sender: TfrxComponent);
begin
  BDEQuery2.Sql.Clear();
    BDEQuery2.Sql.Add('SELECT t1.S_LATITUDE as LAT, t1.S_LONGITUDE as LON, t1.S_ADDRESS as ADDR, ' +     
    't1.S_REAL_TIME as S_TIME, t1.E_REAL_TIME as E_TIME, t1.REAL_CONT as CONT, t1.T1_E_LEVEL as E_LEVEL, t1.T1_S_LEVEL as S_LEVEL, ' +                 
    ' t2.NUMBER as Number1, t2.id as id1 FROM ''temp0.dbf'' t1 LEFT JOIN ''Соответствие.dbf'' t2 on t1.DRIVER_ID = t2.id order by S_TIME');
  BDEQuery2.Open();                       
end;
 
procedure MasterData3OnBeforePrint(Sender: TfrxComponent);
begin

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


TOOP 17.12.2012 11:54

Все правильно была ошибка в коде исправил, заработало. Но конечный результат так и не достигнут.
procedure MasterData3OnBeforePrint(Sender: TfrxComponent);
begin
if Copy(<Memo22>) >0 then
MasterData3.Visible := True else
MasterData3.Visible := False;
end;
Посмотрите пожалуйста тут наверно явно где-то я ошибся.

SK 17.12.2012 12:17

TOOP, функция Copy (string, x, y) - возвращает y символов строки string начиная с символа номер x
Она не подходит для Вашей задачи.

Скорее это:
Код:


procedure MasterData3OnBeforePrint(Sender: TfrxComponent);
begin
  if StrToFloat(Memo22.Text) > 0 then
    begin
      MasterData3.Visible := True;
    end;
  else
    begin
      MasterData3.Visible := False;
    end;
end;

Если значение в ячейке целое число, можно использовать StrToInt(Memo22.Text)

Отпишитесь по результату.

TOOP 19.12.2012 04:38

Так и не работает, что то с типом чисел. Числа там дробные с 1 знаком после запятой целое часть не превышает 4 символов.
Выводилась ошибка убрал после первого END точку с запятой.

стала выводится вот эта

SK 19.12.2012 06:55

Не видим, что выводится.

TOOP 19.12.2012 07:41

Вложений: 2
Ошибки по порядку

SK 19.12.2012 10:00

TOOP, отчет какой ?

SK 19.12.2012 10:03



что содержится в указанной строке ?

Приведите здесь весь код со вкладки "Код".

TOOP 24.12.2012 11:57

Отчет по автозаправщикам.
var
Days: array[1..7] of string;

procedure FastReportOnStartReport(Sender: TfrxComponent);
begin
BDEQuery2.Sql.Clear();
BDEQuery2.Sql.Add('SELECT t1.S_LATITUDE as LAT, t1.S_LONGITUDE as LON, t1.S_ADDRESS as ADDR, ' +
't1.S_REAL_TIME as S_TIME, t1.E_REAL_TIME as E_TIME, t1.REAL_CONT as CONT, t1.T1_E_LEVEL as E_LEVEL, t1.T1_S_LEVEL as S_LEVEL, ' +
' t2.NUMBER as Number1, t2.id as id1 FROM ''temp0.dbf'' t1 LEFT JOIN ''Соответствие.dbf'' t2 on t1.DRIVER_ID = t2.id order by S_TIME');
BDEQuery2.Open();
end;




procedure MasterData3OnBeforePrint(Sender: TfrxComponent);
begin
if StrToFloat (Memo22.Text) > 0 then
begin
MasterData3.Visible := True;
end
else
begin
MasterData3.Visible := False;
end;
end;

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

SK 24.12.2012 14:54

Код:

procedure MasterData3OnBeforePrint(Sender: TfrxComponent);
begin
  if StrToFloat(Memo22.Text) > 0 then
  begin             
      MasterData3.Visible := True
  end                 
  else
  begin             
      MasterData3.Visible := False
  end;                   
end;


TOOP 25.12.2012 03:38

Вложений: 1
Вот что сейчас выводит. Если выбрать транспортное средство у которого нету отрицательных значений то выводит пустой отчет без ошибки.

SK 25.12.2012 07:55

TOOP, пришлите мне данные (бинарники) и карлист.

SK 25.12.2012 08:15

TOOP, пожалуй правильнее будет заменить
if StrToFloat(Memo22.Text) > 0 then
на
if (Round(10 * (<BDEQuery2."E_LEVEL"> - <BDEQuery2."S_LEVEL">)) / 10) > 0 then

Проверьте пожалуйста и отпишитесь по результату !

TOOP 25.12.2012 12:02

Цитата:

Сообщение от SK (Сообщение 46405)
TOOP, пожалуй правильнее будет заменить
if StrToFloat(Memo22.Text) > 0 then
на
if (Round(10 * (<BDEQuery2."E_LEVEL"> - <BDEQuery2."S_LEVEL">)) / 10) > 0 then

Поменял. Сразу все заработало. Спасибо.

SK 25.12.2012 12:08

Не за что.


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

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