Показать сообщение отдельно
Старый 20.02.2013, 03:52    | »»» |  #5
altskeb
Начинающий
 
Аватар для altskeb
 
Бородино Красноярский СУЭК
Регистрация: 19.02.2013
Сообщений: 4
altskeb is on a distinguished road
По умолчанию

Запрос написать не проблема, вся сложность состоит в доступе к данным. Модуль отчетов требует чтобы в него сразу добавили шаблон, а в шаблоне два десятка наборов данных (dataset1, dataset2 ...) и к какому мне обращаться из них. В своих программах на Delphi я часто использую компонент FastReport, но при формировании набора данных я четко знаю где лежит БД, какие у нее поля и что я передаю в этот компонент(или если запрос в самом компоненте то обращаюсь напрямую к БД). Здесь же, исходя из уже существующих шаблонов, набор данных создает сам модуль отчетов и тут начинаются проблемы - приведу текст одного из существующих отчетов:
Код:
 
procedure FastReportOnStartReport(Sender: TfrxComponent);
begin
  BDEQuery2.Sql.Clear();
  BDEQuery2.Sql.Add('SELECT t1.S_LATITUDE as LAT,' +   //широта                                            
  ' t1.S_LONGITUDE as LON,'+      // долгота                       
  ' t1.S_NAME as SNAME, ' +       //   Контрольная точка                                                   
  't1.S_REAL_TIME as S_TIME,'+    //   начало заправки                                               
  ' t1.E_REAL_TIME as E_TIME,'+   //    конец заправки                                     
  ' t1.REAL_CONT as CONT,'+       //   продолжительность заправки                                                         
  ' t1.T3_E_LEVEL as E_LEVEL,'+   //  конечный уровень топлива                                                                      
  ' t1.T3_S_LEVEL as S_LEVEL, ' + //   начальный уровень топлива                                                        
  ' t2.NUMBER as Number1,'+       // название машины
  ' t1.SERNUM as SERNUM,' +                
  ' t2.id as id1 FROM ''temp0.dbf'' t1 LEFT JOIN ''Соответствие.dbf'' t2 on t1.DRIVER_ID = t2.id order by S_TIME');  // берет название машины по ID в файле "соответствие"                                                                                               
  BDEQuery2.Open();                        
end;
Мне не понятно как формируется и "живет" таблица ''temp0.dbf'' . Открываю - она чистая, значит во время выполнения программы что-то туда пишется , как - не понятно.
Еще один пример из отчетов (заправки и сливы баков)
Код:
 
[(IIF(<Dataset1."S_NAME"> <>'', <Dataset1."S_NAME">, 'N/A'))]
Этот код записан в разделе "Masterdata"
Шаблон заполнен данными и работает, но в нем не видно как и откуда мы получили Dataset1.
Мне бы хотелось знать порядок обработки данных в модуле отчетов.
И еще меня смущает комментарий в описании модуля
Код:
1.     Кол-во таблиц в шаблоне должно совпадать с кол-вом отчетов добавленных в состав отчета.
2.     В отчет должны быть добавлены столько датасетов с номерами по порядку (Меню «Отчет -> Данные»), сколько таблиц в шаблоне и каждой таблице должен быть назначен свой датасет (сво-во таблицы «Dataset»), с номером равным порядковому номеру таблицы.

Почему должно совпадать. а если мне нужно создать вспомогательную выборку (как я делаю в своих программах если в БД не предусмотрены хранимые процедуры). Так значит пользоваться массивами, записями что ведет к ненужному раздуванию кода
altskeb вне форума   Ответить с цитированием