PDA

Просмотр полной версии : Внешний отчет


TOOP
16.12.2012, 04:53
Подскажите как можно сделать в данном отсчете так, чтобы выводились строчки только с отрицательным объемом топлива.

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

http://gyazo.com/7cbe44fd7d32470951c9980326527f72.png
http://gyazo.com/b832809d2ae2c345255d30f5cd40033a.png

TOOP
17.12.2012, 06:31
При двойном по пустому полю onbeforeprint выскакивает ошибка. Скриншот во вложении.

SK
17.12.2012, 07:21
При двойном по пустому полю 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 символов.
Выводилась ошибка http://forum.tk-chel.ru/attachment.php?attachmentid=2668&stc=1&d=1355887868 убрал после первого END точку с запятой.

стала выводится вот эта
http://forum.tk-chel.ru/attachment.php?attachmentid=2669&stc=1&d=1355888054

SK
19.12.2012, 06:55
Не видим, что выводится.

TOOP
19.12.2012, 07:41
Ошибки по порядку

SK
19.12.2012, 10:00
TOOP, отчет какой ?

SK
19.12.2012, 10:03
http://gyazo.com/cc910eaa60a5f724c72ac62a221b540c.png

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

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

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
Вот что сейчас выводит. Если выбрать транспортное средство у которого нету отрицательных значений то выводит пустой отчет без ошибки.

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
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
Не за что.