vta73 |
Спасибо, работает. А еще есть варианты? Просто тогда это значение нужно передавать либо через OpenArgs, либо через глобальную переменную, это не совсем удобно, особенно, когда полей несколько. Хочелось бы это делать в той же процедуре, где открывается отчет. |
Дело в том, что заполнение контролов отчета данными происходит НЕ в произвольные моменты, а только в специальные (события OnFormat, OnPrint), т.е. отчет наполняется данными не тогда когда хотите вы, а тогда когда может он.
Поэтому "передавать" данные в отчет - это как бы не совсем подходящая концепция, имхо, более подходящим было бы "получение" отчетом данных. Т.е. отчет сам берет данные - тогда, когда он может и оттуда, откуда он умеет.
Собственно, это как раз то, что отчет делает в отношении данных, получаемых из своего источника (RecordSource). Поэтому наилучший способ "передать" отчету нужные данные - включить эти данные в запрос-источник этого отчета.
Другой способ получения данных (НЕ из источника отчета) - использование выражений, (вычисляющих и) возвращающих требуемое значение в элемент управления. В частности, этим выражением может быть ваша собственная функция или функция MSA, простейший пример - функция DLookup, которая возвращает значение из произвольной таблицы/запроса по критерию.
Ну и способ, о котором вы уже знаете из предыдущего поста - программная запись значений в контролы непосредственно в коде обработки тех самых событий. Все эти способы базируются на одном общем принципе - инициатором получения данных является сам отчет, что гарантирует "своевременность" отображения полученных данных.