Посмотрите как работают display-методы на источниках данных в форме Главная книга-Запросы-Оборот по счету-Оборотно-сальдовая ведомость. В частности, методы getBegCreditBalance() и ему подобные на источнике данных LedgerTable.
Там значения для расчетных полей берутся из map'а - таким способом обеспечивается кеширование.
А сам расчет может быть сколь угодно сложным и не зависеть от конкретного DataSource формы. То есть, курсор передавать надо, но в расчете он может участвовать только для фильтрации данных в сложных запросах, например
PHP код:
display InventQtyAvailPhysical availhysical(InventSum _inventSum)
{
InventSum inventSum;
;
if (!myMap.exists(_inventSum.ItemId)
{
select sum(AvailPhysical) from inventSum where inventSum.ItemId = _inventSum.itemId);
myMap.insert(inventSum.ItemId, inventSum.AvailPhysical());
}
return myMap.lookup(_inventSum.ItemId);
}
PS: Это абстрактный пример.