Отладка расчёта алгоритма предназначена для выявления и исправления ошибок, а также позволяет посмотреть промежуточные значения, полученные в ходе расчёта. Просмотр промежуточных значений особенно актуален, если внутри расчёта используются промежуточные кубы без таблиц с данными, то есть по таким кубам нельзя просмотреть полученные значения после окончания расчёта алгоритма.
Для отладки расчёта алгоритма:
Откройте алгоритм расчёта в режиме расчёта:
Нажмите кнопку «Настройки выполнения расчёта» на панели инструментов для отображения боковой панели «Выполнение расчёта»:
Задайте параметры выполнения расчёта:
Проверять арифметические операции. Установите флажок для проверки арифметических операций, используемых в формулах, при расчёте алгоритма. Если при расчёте алгоритма в формуле производится деление на ноль, то будет выдано соответствующее сообщение с указанием формулы расчёта и блока.
Для коррекции указанной формулы нажмите кнопку «Остановить», после чего будет остановлен расчёт алгоритма. Отредактируйте формулу вручную и выполните повторный расчёт алгоритма.
Для пропуска ошибки выберите один из вариантов пропуска и нажмите кнопку «Ок». После чего рассчитываемые элементы пропускаются и результатом такого расчёта является пустое значение.
При снятом флажке проверка арифметических операций в формулах не выполняется. Если производится деление на ноль, то рассчитываемые элементы пропускаются и результатом такого расчёта является пустое значение.
Примечание. Проверку арифметических операций можно не выполнять, если формула расчёта задана верно и в результате расчёта допустимо содержание пустых значений.
Не сохранять результат в БД. Установите флажок для расчёта алгоритма без сохранения результатов;
Примечание. Если после окончания расчёта нужно будет сохранить данные, то выполните команду «Сохранение данных» в раскрывающемся меню кнопки «Продолжить отладку» на панели инструментов.
Многопоточный расчёт. Установите флажок для ускорения расчёта блоков расчёта и блоков контроля, если установлен флажок «Многопоточный расчет» в мастере редактирования блока расчёта или блока контроля.
Примечание. Значение флажка сохраняется только на период отладки расчёта алгоритма.
Поточечный расчет. Установите флажок для изменения способа расчёта формул во всех блоках расчёта и блоках контроля, которые содержатся в алгоритме. При поточечном расчёте алгоритма выполняется последовательный расчёт формул в каждой точке данных: сначала формулы рассчитываются по первой точке данных, затем по второй точке и так далее. Такой расчёт можно использовать, если данные по текущей календарной точке зависят от данных, рассчитанных по предыдущей календарной точке. При снятом флажке используется векторный расчёт, то есть формулы рассчитываются по всем точкам данных.
Примечание. Флажок доступен, если в алгоритме расчёта содержатся блоки расчёта и блоки контроля, для которых заданы формулы расчёта.
Если установлен флажок «Поточечный расчет» для конкретных формул расчёта, то расчёт может выполняться несколькими способами.
Важно. Использование параметра приводит к снижению производительности и продолжительному расчёту алгоритма.
Если в алгоритме расчёта содержатся блоки агрегации, то при использовании поточечного расчёта алгоритма невозможен расчёт агрегации для одной календарной точки. Выберите способ расчёта блоков агрегации с помощью переключателей:
Не рассчитывать агрегацию. Блоки агрегации не будут рассчитаны;
Рассчитать до поточечного расчёта. Блоки агрегации будут рассчитаны до поточечного расчёта блоков расчёта и блоков контроля;
Рассчитать после поточечного расчёта. По умолчанию. Блоки агрегации будут рассчитаны после поточечного расчёта блоков расчёта и блоков контроля.
Примечание. Порядок расчёта блоков агрегации в дереве расчёта учитывается только при использовании поточечного расчёта конкретных формул расчёта. При использовании поточечного расчёта алгоритма порядок расчёта блоков агрегации зависит от выбранного способа расчёта.
Для отладки расчёта алгоритма выполните одну из команд в раскрывающемся меню кнопки «Рассчитать» на панели инструментов:
Запустить в режиме отладки. Выполняется отладка всего алгоритма расчёта;
Запустить выделенное в режиме отладки. Выполняется отладка отдельных блоков алгоритма расчёта. Перед выполнением команды выделите блоки на рабочей области или в дереве расчёта с помощью клавиши SHIFT или CTRL.
После запуска расчёта начнётся загрузка данных в алгоритм.
При необходимости настройте циклический расчёт объекта алгоритма с помощью окна «<наименование объекта> - настройки цикла».
Примечание. Настройка циклического расчёта доступна только для тех объектов, которые не содержатся в ветвлении.
Задайте параметры:
Ограничивать количество итераций. При необходимости переведите переключатель в неактивное состояние для остановки циклического расчёта блока функции с помощью пользовательской функции или вручную. По умолчанию переключатель переведен в активное состояние, циклический расчёт будет выполняться по заданному количеству итераций.
Примечание. Параметр доступен только для настройки циклического расчёта блока функции.
Для остановки циклического расчёта блока функции с помощью пользовательской функции используйте свойство 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;
Количество итераций. Укажите количество итераций циклического расчёта объекта;
Примечание. Параметр доступен, если переключатель «Ограничивать количество итераций» переведен в активное состояние.
Временной интервал между итерациями (сек.). Укажите временной интервал между выполнениями циклического расчёта объекта в секундах.
Примечание. Параметр доступен, если задано более одного количества итераций в параметре «Количество итераций» или переключатель «Ограничивать количество итераций» переведен в неактивное состояние.
После выполнения действий нажмите кнопку «ОК». В дереве расчёта справа от объекта будет отображаться процесс выполнения циклического расчёта объекта в соответствии с заданными параметрами цикла, например:
Для приостановки циклического расчёта объекта нажмите кнопку «Пауза» на панели инструментов. При приостановке циклического расчёта объекта доступно выполнение следующих действий:
просмотр формул расчёта, заданных для блоков расчёта и блоков контроля;
открытие объектов репозитория, расположенных на рабочей области;
просмотр рассчитанных данных.
Для остановки циклического расчёта объекта нажмите кнопку «Остановить цикл» на панели инструментов.
Перейдите к расчёту следующего блока с помощью кнопки «Продолжить отладку» или выберите определенный блок в раскрывающееся меню кнопки «Продолжить отладку». В меню содержатся все блоки, которые ещё не были выполнены.
Рассчитанный блок меняет свой вид в рабочей области, становится зелёным. Например, слева блок до расчёта, справа - после расчёта:
При необходимости остановите расчёт с помощью кнопки «Остановить».
Во время отладки расчёта все объекты алгоритма расчёта доступны для чтения. Например, можно посмотреть настройки блока расчёта или результаты расчёта в приёмниках данных.
После завершения расчёта будет выведено сообщение с результатом расчёта алгоритма. Если при расчёте возникла ошибка, то будет выведено соответствующее сообщение об ошибке.
Совет. Для ускорения расчёта алгоритма обратитесь к разделу «Как ускорить расчёт алгоритма?».
После завершения расчёта алгоритма целиком или расчёта отдельных блоков выводится сообщение с результатом расчёта алгоритма:
См. также: