Создание регламентного отчета

Требования к операционной системе: iOS 5.0 и выше.

Мобильное устройство: iPad.

Описание

В данном примере описывается создание регламентного отчета. После запуска примера выполняются следующие операции:

Исходный код

Для выполнения примера необходимо разместить в теле метода executeExample класса ViewController (см. раздел «Отображение регламентного отчёта») следующий код:

-(void)executeExample {
    if (m_proceduralReportDescriptor->formatVersion() == 1) {
        // Создаём объект отчёта
        SPPLProceduralReport proceduralReport = PPLProceduralReport::proceduralReport(m_proceduralReportDescriptor);
        MAProceduralReportViewController *proceduralReportController = (MAProceduralReportViewController *)[MAProceduralReportViewControllerFactory createReport:m_proceduralReport];
        // Получаем делегат регламентного отчета
        MAProceduralReportViewControllerDelegateImpl * proceduralReportDelegate1 = [proceduralReportController delegate];
        // Создаем новый делегат для регламентного отчета
        MAProceduralReportViewControllerDelegateImpl *proceduralReportDelegate2 = [[MAProceduralReportViewControllerDelegateImpl alloc] initWithProceduralReport:proceduralReport];
        // Выводим в консоль среды разработки результат сравнения полученного и нового делегатов
        if([proceduralReportDelegate1 isEqual:proceduralReportDelegate2] == YES) NSLog(@"Сравнение делегатов: объекты равны");
        else NSLog(@"Сравнение делегатов: объекты не равны");
        NInteger worksheetsCount = 0;
        if(proceduralReportDelegate2.proceduralReport->worksheets()->items() != NULL) {
            worksheetsCount = [proceduralReportDelegate2 proceduralReport]->worksheets()->items()->count();
        }
        NSLog(@"Количество листов в регламентном отчете: %d", worksheetsCount);
        // Задаем новый делегат для регламентного отчета
        [proceduralReportController setDelegate:proceduralReportDelegate2];
        // Отображаем регламентный отчет
        [self showViewControllerInNavigationController: proceduralReportController];
        // Получаем массив представлений в регламентном отчете
        NSArray *dataViewControllers = [proceduralReportController dataViewControllers];
        // Перебираем в цикле представления регламентного отчета
        for(UIViewController *controller in dataViewControllers)
        {
            // Проверяем, является ли текущее представление просмотрщиком листов регламентного отчета
            if([controller isMemberOfClass:[MAProceduralReportDataViewController class]]) {
                // Выводим информацию о представлении просмотрщика листов
                [self printMAProceduralReportDataViewControllerInfo:
                (MAProceduralReportDataViewController *)controller];
            }
        }
    }
    if (m_proceduralReportDescriptor->formatVersion() == 2) {
        // Создаём объект отчёта
        SPPLProceduralReport2 proceduralReport = PPLProceduralReport2::proceduralReport(m_proceduralReportDescriptor);
        MAProceduralReport2ViewController *proceduralReportController = (MAProceduralReport2ViewController *)[MAProceduralReportViewControllerFactory createReport:m_proceduralReport];
        // Получаем делегат регламентного отчета
        MAProceduralReport2ViewControllerDelegateImpl * proceduralReportDelegate1 = [proceduralReportController delegate];
        // Создаем новый делегат для регламентного отчета
        MAProceduralReport2ViewControllerDelegateImpl *proceduralReportDelegate2 = [[MAProceduralReport2ViewControllerDelegateImpl alloc] initWithProceduralReport:proceduralReport];
        // Выводим в консоль среды разработки результат сравнения полученного и нового делегатов
        if([proceduralReportDelegate1 isEqual:proceduralReportDelegate2] == YES) NSLog(@"Сравнение делегатов: объекты равны");
        else NSLog(@"Сравнение делегатов: объекты не равны");
        NInteger worksheetsCount = 0;
        if(proceduralReportDelegate2.proceduralReport->worksheets()->items() != NULL) {
            worksheetsCount = [proceduralReportDelegate2 proceduralReport]->worksheets()->items()->count();
        }
        NSLog(@"Количество листов в регламентном отчете: %d", worksheetsCount);
        // Задаем новый делегат для регламентного отчета
        [proceduralReportController setDelegate:proceduralReportDelegate2];
        // Отображаем регламентный отчет
        [self showViewControllerInNavigationController: proceduralReportController];
        // Получаем массив представлений в регламентном отчете
        NSArray *dataViewControllers = [proceduralReportController dataViewControllers];        // Перебираем в цикле представления регламентного отчета
        for(UIViewController *controller in dataViewControllers) {
            // Проверяем, является ли текущее представление просмотрщиком листов регламентного отчета
            if([controller isMemberOfClass:[MAProceduralReportExtDataViewController class]]) {
                // Выводим информацию о представлении просмотрщика листов
                [self printMAProceduralReportDataViewControllerInfo:
                (MAProceduralReportDataViewController *)controller];
            }
        }
    }
}

-(void)printMAProceduralReportDataViewControllerInfo: (MAProceduralReportDataViewController *) dataViewController {
    // Получаем представление просмотрщика регламентных отчетов
    MAProceduralReportDataViewControllerBase *reportDataViewControllerBase = (MAProceduralReportDataViewControllerBase *)dataViewController;
    // Получаем родительский контроллер отчетов
    MADataReportViewController *dataReportViewController =[reportDataViewControllerBase reportController];
    // Выводим в консоль среды разработки признак отображения заголовка отчета
    NSLog(@"Признак отображения заголовка отчета: %@",[dataReportViewController showTitle]? @"отображается":@"не отображается");
    // Выводим в консоль среды разработки режим просмотрщика регламентных отчетов
    NSString *mode = @"";
    switch([reportDataViewControllerBase mode])
    {
        case kReadMode:mode = @"режим чтения"; break;
        case kNoteMode:mode = @"режим заметок"; break;
        case kSearchMode:mode = @"режим поиска"; break;
        default: mode = @"не определен"; break;
    }
    NSLog(@"Режим просмотрщика регламентных отчетов: %@", mode);
}

 В результате выполнения примера на экране мобильного устройства будет отображен созданный регламентный отчет:

Также  в консоли среды разработки будет выведен результат сравнения полученного и созданного делегатов регламентного отчета, количество листов в регламентном отчете, признак отображения заголовка отчета, полученный из родительского контроллера отчетов, а также значение режима просмотрщика регламентных отчетов:

Сравнение делегатов: объекты не равны

Количество листов в регламентном отчете: 4

Признак отображения заголовка отчета: не отображается

Режим просмотрщика регламентных отчетов: режим чтения

См. также:

Примеры использования компонентов