Показать сообщение отдельно
Старый 19.12.2017, 11:38   #2  
SuperStar88 is offline
SuperStar88
Участник
 
79 / 10 (1) +
Регистрация: 11.08.2017
Переписал так, без промежуточного буфера, всё равно долго
X++:
ttsbegin;
    while select forupdate rowQuota
    {
        monthDiff = intvNo(rowQuota.DateTo, rowQuota.DateFrom, IntvScale::Month);
        dayDiff = intvNo(rowQuota.DateTo, rowQuota.DateFrom, IntvScale::Day);

        if(rowQuota.UsagePeriod <= monthDiff && dayDiff > 0)
        {
            do
            {
                rowQuota.DateFrom = dateMthFwd(rowQuota.DateFrom, rowQuota.UsagePeriod);
                rowQuota.DatePotreb = rowQuota.DateFrom;
                rowQuota.insert();

                monthDiff = intvNo(rowQuota.DateTo, rowQuota.DateFrom, IntvScale::Month);
                dayDiff = intvNo(rowQuota.DateTo, rowQuota.DateFrom, IntvScale::Day);
            }
            while(rowQuota.UsagePeriod <= monthDiff && dayDiff > 0);
        }
    }
ttscommit;