AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.11.2006, 18:22   #1  
_A_ is offline
_A_
Участник
 
37 / 10 (1) +
Регистрация: 16.07.2004
Адрес: Минск
обновление поля, входящего в уник. ключ
Может это уже всплывало тут.
Импортом из экселя загоняется таблица RContractTable, далее запускается нижеследующий код, с целью инициализации RContractAccount из нужной номерной серии. Проблема в том что цикл уходит в нирвану и в наборе уже появляются обновленные записи с новым RContractAccount и так до бесконечности. Обновление через еще одну табл. переменную не проходит. Я понимаю что может проблема решится путем написания кода инициализации при импорте, но все хотелось бы пгонять в чем тут дело, может здесь что-то очевидное. Заранее спасибо
X++:
static void updateContractCode(Args _args)
{
     RContractTypes      rContractTypes;
     NumberSeq           numberSeq;
     RContractTable      rContractTable;
     ;
     ttsbegin;
     while select forupdate rContractTable
     {
            rContractTypes = RContractTypes::find(rContractTable.RContractPartnerType,
                                                              rContractTable.RContractCode);
     if (rContractTypes.NumberSequenceCode)
      {
               numberSeq    = NumberSeq::newGetNumFromCode(rContractTypes.NumberSequenceCode,true);
            rContractTable.RContractAccount = numberSeq.num();
            rContractTable.update();

          }
     }
     ttscommit;
}

Последний раз редактировалось _A_; 14.11.2006 в 18:31.
Старый 14.11.2006, 19:06   #2  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
происходит то же, что и всегда - MSSQL, динамический курсор, доступ по некластерному индексу

см. while select зацикливается на одной записи

в качестве одного из вариантов решений - добавляйте
..
where RContractAccount != ""

либо создайте кластерный индекс
либо инициализируйте код сразу при импорте
и т.д.
__________________
-ТСЯ или -ТЬСЯ ?
За это сообщение автора поблагодарили: _A_ (1), Logger (1).
Старый 15.11.2006, 08:43   #3  
_A_ is offline
_A_
Участник
 
37 / 10 (1) +
Регистрация: 16.07.2004
Адрес: Минск
Все понятно, спасибо!
З.Ы.
Цитата:
Сообщение от Vadik Посмотреть сообщение
либо создайте кластерный индекс
Кстати говоря он там был и есть
Старый 15.11.2006, 08:56   #4  
KiselevSA is offline
KiselevSA
Злыдни
Аватар для KiselevSA
Злыдни
Лучший по профессии 2015
 
958 / 333 (13) ++++++
Регистрация: 25.01.2002
Адрес: Москва
Если уникальный ключ основан на номерной серии, то оптимальным способом "закачки" или обновления данных в таблице будет следующий:
- отключите запрет уникальности по полю с индексом на основе номерной серии
- закачайте данные
- обновите поле с помощью Job на основе номерной серии
- включите запрет дублирования, синхронизируйте таблицу
Старый 15.11.2006, 09:18   #5  
_A_ is offline
_A_
Участник
 
37 / 10 (1) +
Регистрация: 16.07.2004
Адрес: Минск
Всё это делалось - результат аналогичный.

Вобщем на мой взгляд проще при импорте инициализировать, ну а чтобы совсем не париться и забыть, предварительно сосчитать количество записей в таблице, а потом используя счетчик в конце концов сделать break

Последний раз редактировалось _A_; 15.11.2006 в 09:24.
Старый 15.11.2006, 09:32   #6  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от _A_ Посмотреть сообщение
Кстати говоря он там был и есть
Таки да, есть, проглядел. Значит, не используется. Стало быть, либо навязать его хинтом (некрасиво), либо доп. условие (RContractAccount != '')
Или импорт через группу определений с типом "произвольный" (инициализацию полей можно делать перед сохранением записи)
Счетчики и break - imho от лукавого: где гарантии, что одни записи не обработаются вдважды-трижды, а другие - ни разу?
__________________
-ТСЯ или -ТЬСЯ ?
Старый 15.11.2006, 09:37   #7  
_A_ is offline
_A_
Участник
 
37 / 10 (1) +
Регистрация: 16.07.2004
Адрес: Минск
Цитата:
Сообщение от Vadik Посмотреть сообщение
либо доп. условие (RContractAccount != '')
пробовал, результат тот же

Цитата:
Сообщение от Vadik Посмотреть сообщение
Или импорт через группу определений с типом "произвольный" (инициализацию полей можно делать перед сохранением записи)
и я о том же
Цитата:
Сообщение от Vadik Посмотреть сообщение
Счетчики и break - imho от лукавого: где гарантии, что одни записи не обработаются вдважды-трижды, а другие - ни разу?
согласен, от лукавого Но в конце концов и это обойти можно, сортировку например включить по дате-времени обновления, если таковые поля имеются

Последний раз редактировалось _A_; 15.11.2006 в 09:44.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
обновление поля в заданной таблице Eldar9x DAX: Программирование 7 13.03.2009 15:32
Обновление поля с определённым типом во всех таблицах. Corel DAX: Программирование 1 20.12.2008 13:37
Denis Fedotenko: Новые поля в складских проводках Blog bot DAX: База знаний и проекты 10 24.05.2007 11:57
Как перекрыть lookup для поля входящего в группу полей ATimTim DAX: Программирование 2 05.10.2005 11:26
Basics: обновление отдельного поля в гриде Dymm DAX: Программирование 19 10.08.2005 15:37

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:47.