Есть временная таблица rowQuota с ДатаС, ДатаПо и Периодом. Если Период меньше, чем кол-во месяцев между датами, то создаём новую строку, где ДатаС = ДатаС+месяц(Период)
Таблица не очень большая, около 100к записей. Да, с индексом в 2 раза быстрее получилось. И решил использовать RecordInsertList
X++:
ttsbegin;
list = new RecordInsertList(rowQuotaTmp.TableId);
while select rowQuota
index hint Idx
{
buf2buf(rowQuota, rowQuotaTmp);
monthDiff = intvNo(rowQuotaTmp.DateTo, rowQuotaTmp.DateFrom, IntvScale::Month);
dayDiff = intvNo(rowQuotaTmp.DateTo, rowQuotaTmp.DateFrom, IntvScale::Day);
while(rowQuotaTmp.UsagePeriod <= monthDiff && dayDiff > 0)
{
rowQuotaTmp.DateFrom = dateMthFwd(rowQuotaTmp.DateFrom, rowQuotaTmp.UsagePeriod);
rowQuotaTmp.DatePotreb = rowQuotaTmp.DateFrom;
//rowQuota.insert();
list.add(rowQuotaTmp);
monthDiff = intvNo(rowQuotaTmp.DateTo, rowQuotaTmp.DateFrom, IntvScale::Month);
dayDiff = intvNo(rowQuotaTmp.DateTo, rowQuotaTmp.DateFrom, IntvScale::Day);
}
}
list.insertDatabase();
ttscommit;