Показать сообщение отдельно
Старый 29.07.2014, 12:28   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от 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();
        }
    }
}
чувствую, что туплю. и наверняка причина на поверхности.
но даже предположить не могу ЗАЧЕМ?