Организация потока данных для отчета по ресурсам |
Поток данных PrjMngFR01Stream для отчета PrjMngRep05 создается в интерфейсе PrjMngFR (см. "PrjMngFR. Поток данных для отчета по запланированным ресурсам. "). Поток содержит данные, относящиеся к отчету в целом (название организации и ФИО лица, утверждающего отчет), а также данные по проектам, по исполнителям и по материалам.
Данные по исполнителям и по материалам относятся к компоненту "Ядро приложения". Для доступа к ним потребуются враперы к таблицам PrjExecutors и PrjMaterials. Данные враперы добавлены в список разрабатываемых интерфейсов межкомпонентного взаимодействия.
Этапы проектов организованы в иерархическую структуру. Обход иерархии требует ручной навигации, средствами логической таблицы не описывается. Поэтому для проектов используется элемент потока dataset. Наиболее естественный способ обработки иерархии - рекурсивный вызов процедуры обработки вершины (узла /листа) иерархии. В обработчике события нет рекурсивного вызова, пришлось его смоделировать. Фактически стек вызовов процедуры был заменен стеком данных о вершине иерархии. Для хранения позиции в БД использованы методы PushPos и PopPos, для сохранения других данных (NRec вышестоящего этапа) использован контейнер cSuperStack.
Для принятия решения, продолжать вывод данных в отчет или нет (вызов метода ContinueDataset), необходимо проверить наличие следующей вершины иерархии. Чтобы избежать повторного обращения к базе данных для восстановления текущих данных эти данные сохраняются в переменных. По окончании обработки события cmOnProcess данные из переменных попадают в поток.
Подробнее см. обработку события cmOnProcess в обрабтчике handleEvent dataset ProjectsDS.
Данные по исполнителям и материалам организованы в соответствии с реляционной моделью. Поэтому для них использован элемент потока table. Для данного элемента поток организуется автоматически в соответствии с подцепками в логической таблице.
Имена полей в потоке задавать не обязательно, но сгенерированные автоматически имена неудобны в использовании - они слишком длинные и плохо видны в диалогах системы
.