Добрый день, знатоки. В процессе отладки программы столкнулся со странностью.
X++:
ttsbegin;
i = 1;
while select forupdate inOutData
where inOutData.InOutDate >= firstDate &&
inOutData.InOutDate <= lastDate
{
if (i <= conlen(data))
{
con = conpeek(data, i);
inOutData.EmplId = conpeek(con, 1);
inOutData.InOutDate = conpeek(con, 2);
inOutData.InOutTime = conpeek(con, 3);
inOutData.InOutType = conpeek(con, 4);
inOutData.update();
}
else
inOutData.delete();
i++;
}
while (i <= conlen(data))
{
con = conpeek(data, i);
inOutData.clear();
inOutData.EmplId = conpeek(con, 1);
inOutData.InOutDate = conpeek(con, 2);
inOutData.InOutTime = conpeek(con, 3);
inOutData.InOutType = conpeek(con, 4);
inOutData.insert();
i++;
}
ttscommit;
В данном коде некоторые строки в цикле while select forupdate обновляются... дважды. И, соответственно, часть из них переписывается. Стоит только добавить в запрос строку order by RecId, и алгоритм начинает работать как часы. Контейнер data был одинаков для обоих прогонов. С чем может быть связано такое странное поведение?