Отладка расчёта алгоритма

Отладка расчёта алгоритма предназначена для выявления и исправления ошибок, а также позволяет посмотреть промежуточные значения, полученные в ходе расчёта. Просмотр промежуточных значений особенно актуален, если внутри расчёта используются промежуточные кубы без таблиц с данными, то есть по таким кубам нельзя просмотреть полученные значения после окончания расчёта алгоритма.

Для отладки расчёта алгоритма:

  1. Откройте алгоритм расчёта в режиме расчёта:

  1. Нажмите кнопку «Настройки выполнения расчёта» на панели инструментов для отображения боковой панели «Выполнение расчёта»:

Задайте параметры выполнения расчёта:

Для коррекции указанной формулы нажмите кнопку «Остановить», после чего будет остановлен расчёт алгоритма. Отредактируйте формулу вручную и выполните повторный расчёт алгоритма.

Для пропуска ошибки выберите один из вариантов пропуска и нажмите кнопку «Ок». После чего рассчитываемые элементы пропускаются и результатом такого расчёта является пустое значение.

При снятом флажке проверка арифметических операций в формулах не выполняется. Если производится деление на ноль, то рассчитываемые элементы пропускаются и результатом такого расчёта является пустое значение.

Примечание. Проверку арифметических операций можно не выполнять, если формула расчёта задана верно и в результате расчёта допустимо содержание пустых значений.

Примечание. Если после окончания расчёта нужно будет сохранить данные, то выполните команду «Сохранение данных» в раскрывающемся меню кнопки «Продолжить отладку» на панели инструментов.

Примечание. Значение флажка сохраняется только на период отладки расчёта алгоритма.

Примечание. Флажок доступен, если в алгоритме расчёта содержатся блоки расчёта и блоки контроля, для которых заданы формулы расчёта.

Если установлен флажок «Поточечный расчет» для конкретных формул расчёта, то расчёт может выполняться несколькими способами.

Важно. Использование параметра приводит к снижению производительности и продолжительному расчёту алгоритма.

Если в алгоритме расчёта содержатся блоки агрегации, то при использовании поточечного расчёта алгоритма невозможен расчёт агрегации для одной календарной точки. Выберите способ расчёта блоков агрегации с помощью переключателей:

Примечание. Порядок расчёта блоков агрегации в дереве расчёта учитывается только при использовании поточечного расчёта конкретных формул расчёта. При использовании поточечного расчёта алгоритма порядок расчёта блоков агрегации зависит от выбранного способа расчёта.

  1. Для отладки расчёта алгоритма выполните одну из команд в раскрывающемся меню кнопки  «Рассчитать» на панели инструментов:

После запуска расчёта начнётся загрузка данных в алгоритм.

  1. При необходимости настройте циклический расчёт объекта алгоритма с помощью окна «<наименование объекта> - настройки цикла».

Примечание. Настройка циклического расчёта доступна только для тех объектов, которые не содержатся в ветвлении.

Для открытия окна

Задайте параметры:

Примечание. Параметр доступен только для настройки циклического расчёта блока функции.

Для остановки циклического расчёта блока функции с помощью пользовательской функции используйте свойство ITsUserData.Data со значением True. В качестве параметра свойства задайте ключ BREAK_CYCLE. Для получения текущей итерации расчёта используйте свойство ITsUserData.Data с параметром CURRENT_ITERATION. Для получения временного интервала, заданного в параметре «Временной интервал между итерациями (сек.)», используйте свойство ITsUserData.Data с параметром ITERATION_INTERVAL.

Если переключатель переведен в активное состояние и задано количество итераций в параметре «Количество итераций», то при использовании ключа BREAK_CYCLE остановка циклического расчёта будет происходить в зависимости от значения, которое принимает свойство ITsUserData.Data. Остановка циклического расчёта с помощью пользовательской функции является приоритетной.

Пример функции, в которой происходит остановка циклического расчёта на пятой итерации:

Public Function CalcFunction(Paramarray arr : array Of Variant) : Variant;
Var 
    Context: ITsCalculationContext;
    UserData: ITsUserData;
    CurrentIteration: Integer;
Begin
    
// Получим пользовательские данные
    Context := TsCalculation.Current;
    UserData := Context.UserData;
    
// Получим текущую итерацию циклического расчёта
    CurrentIteration := UserData.Data("CURRENT_ITERATION")
    
If CurrentIteration = 5 Then
        
// Если текущая итерация равна 5, то останавливаем циклический расчет на этой итерации
        UserData.Data("BREAK_CYCLE") := True;
    
End If;
Return Null;
End Function CalcFunction;

Примечание. Параметр доступен, если переключатель «Ограничивать количество итераций» переведен в активное состояние.

Примечание. Параметр доступен, если задано более одного количества итераций в параметре «Количество итераций» или переключатель «Ограничивать количество итераций» переведен в неактивное состояние.

После выполнения действий нажмите кнопку «ОК». В дереве расчёта справа от объекта будет отображаться процесс выполнения циклического расчёта объекта в соответствии с заданными параметрами цикла, например:

Для приостановки циклического расчёта объекта нажмите кнопку «Пауза» на панели инструментов. При приостановке циклического расчёта объекта доступно выполнение следующих действий:

Для остановки циклического расчёта объекта нажмите кнопку «Остановить цикл» на панели инструментов.

  1. Перейдите к расчёту следующего блока с помощью кнопки  «Продолжить отладку» или выберите определенный блок в раскрывающееся меню кнопки  «Продолжить отладку». В меню содержатся все блоки, которые ещё не были выполнены.

Рассчитанный блок меняет свой вид в рабочей области, становится зелёным. Например, слева блок до расчёта, справа - после расчёта:

  1. При необходимости остановите расчёт с помощью кнопки  «Остановить».

Во время отладки расчёта все объекты алгоритма расчёта доступны для чтения. Например, можно посмотреть настройки блока расчёта или результаты расчёта в приёмниках данных.

После завершения расчёта будет выведено сообщение с результатом расчёта алгоритма. Если при расчёте возникла ошибка, то будет выведено соответствующее сообщение об ошибке.

Совет. Для ускорения расчёта алгоритма обратитесь к разделу «Как ускорить расчёт алгоритма?».

Сообщение с результатом расчёта алгоритма

После завершения расчёта алгоритма целиком или расчёта отдельных блоков выводится сообщение с результатом расчёта алгоритма:

Копирование результата расчёта в буфер обмена

Просмотр подробного результата расчёта

См. также:

Построение алгоритма расчёта