Показать сообщение отдельно
Старый 20.12.2017, 10:50   #6  
SuperStar88 is offline
SuperStar88
Участник
 
79 / 10 (1) +
Регистрация: 11.08.2017
Есть временная таблица 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;
Миниатюры
Нажмите на изображение для увеличения
Название: 1.png
Просмотров: 409
Размер:	10.0 Кб
ID:	11793