Цитата:
Сообщение от
S.Kuskov
Может для того чтобы меньше блокировать таблицу ref1. Побыстрее "отпустить". Если операции вставка/удаление/изменение записей в этой таблице происходят часто, а "некие действия" достаточно продолжительны, то вполне возможно - это такая оптимизация.
метод работает глубоко внутри транзакции.
никаких особо длинных операций не выполняется.
вот полный код:
X++:
/// <summary>
/// Tracks channel database assignment.
/// </summary>
public void trackChannelDBAssignment()
{
container channelDB;
int i;
RefRecId channelDBRecId;
RefRecId channelRecId;
RetailCDXDataStoreChannel dataStoreChannel;
while select RefRecId
from ref1
where ref1.NodeID == 0
&& ref1.RefTableID == tableNum(RetailCDXDataStoreChannel)
&& ref1.SYS_CHANGE_OPERATION == 'I'
{
channelDB += ref1.RefRecID;
}
for (i = 1; i <= conLen(channelDB); ++i)
{
channelDBRecId = conPeek(channelDB, i);
select Channel from dataStoreChannel
where dataStoreChannel.RecId == channelDBRecId;
channelRecId = dataStoreChannel.Channel;
select firstOnly RecId from ref1
where ref1.NodeID == 0
&& ref1.RefTableID == tableNum(RetailChannelTable)
&& ref1.SYS_CHANGE_OPERATION == 'I'
&& ref1.RefRecID == channelRecId;
if (!ref1)
{
ref1.initValue();
ref1.NodeID = 0;
ref1.RefTableID = tableNum(RetailChannelTable);
ref1.RefRecID = channelRecId;
ref1.SYS_CHANGE_OPERATION = 'I';
ref1.insert();
}
}
}
чувствую, что туплю. и наверняка причина на поверхности.
но даже предположить не могу ЗАЧЕМ?