Просмотр полной версии : Внешний отчет
Подскажите как можно сделать в данном отсчете так, чтобы выводились строчки только с отрицательным объемом топлива.
Использовать обработчик OnBeforePrint и не выводить строки, которые не соответствуют Вашему условию.
http://gyazo.com/7cbe44fd7d32470951c9980326527f72.png
http://gyazo.com/b832809d2ae2c345255d30f5cd40033a.png
При двойном по пустому полю onbeforeprint выскакивает ошибка. Скриншот во вложении.
При двойном по пустому полю 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.
Все правильно была ошибка в коде исправил, заработало. Но конечный результат так и не достигнут.
procedure MasterData3OnBeforePrint(Sender: TfrxComponent);
begin
if Copy(<Memo22>) >0 then
MasterData3.Visible := True else
MasterData3.Visible := False;
end;
Посмотрите пожалуйста тут наверно явно где-то я ошибся.
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)
Отпишитесь по результату.
Так и не работает, что то с типом чисел. Числа там дробные с 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
http://gyazo.com/cc910eaa60a5f724c72ac62a221b540c.png
что содержится в указанной строке ?
Приведите здесь весь код со вкладки "Код".
Отчет по автозаправщикам.
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.
procedure MasterData3OnBeforePrint(Sender: TfrxComponent);
begin
if StrToFloat(Memo22.Text) > 0 then
begin
MasterData3.Visible := True
end
else
begin
MasterData3.Visible := False
end;
end;
Вот что сейчас выводит. Если выбрать транспортное средство у которого нету отрицательных значений то выводит пустой отчет без ошибки.
TOOP, пришлите мне данные (бинарники) и карлист.
TOOP, пожалуй правильнее будет заменить
if StrToFloat(Memo22.Text) > 0 then
на
if (Round(10 * (<BDEQuery2."E_LEVEL"> - <BDEQuery2."S_LEVEL">)) / 10) > 0 then
Проверьте пожалуйста и отпишитесь по результату !
TOOP, пожалуй правильнее будет заменить
if StrToFloat(Memo22.Text) > 0 then
на
if (Round(10 * (<BDEQuery2."E_LEVEL"> - <BDEQuery2."S_LEVEL">)) / 10) > 0 then
Поменял. Сразу все заработало. Спасибо.
vBulletin® v3.8.5, Copyright ©2000-2024, Jelsoft Enterprises Ltd. Перевод: zCarot