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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.06.2018, 13:41   #8  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от iiipoizone Посмотреть сообщение
В CustTrans добавлены 2 поля.
Почему-то некоторые записи не возможно обновить.
(...)
Причем всегда по одному и тому же recId. База тестовая, на ней никто не работает.
Что можно сделать такое, чтобы обновить всю таблицу?
Причин может быть 2

Причина 1: Это фича (особенность) хранения данных MS SQL.

1. Если в запросе явным образом не указана опция Order By, то, в общем случае, порядок следования записей в выборке будет произвольным

Да, как правило, этот порядок будет совпадать с кластерным индексом. Но именно "как правило". Это именно "совпадение". Не гарантия

2. При внесении изменений в данные таблицы возможно (опять же, не обязательно. Возможно) перестроение индексов вообще и кластерных индексов в частности

Из этого следует, что, в общем случае, если внутри цикла выполняется изменение данных той таблицы, по которой выборка и выполняется, то возможно, что одна и та же запись таблицы внутри цикла while select может быть выбрана несколько раз

Для проверки этого предположения, выведите в infolog значения всех записей, которые попали в выборку и посмотрите, не повторяется ли одно и то же значение RecId несколько раз

На самом деле, такая ситуация является скорее исключением, чем правилом. Т.е. случается достаточно редко. Просто это надо иметь в виду. "Лечится" это двумя способами

1. Регулярное обновление (перестроение) индексов базы данных
2. Включение в цикл While select опции order By. Но! Обязательно по тем полям, которые не будет изменяться внутри цикла. В данном случае можно по RecId


Причина 2: Запись действительно была обновлена

Это зависит от версии Axapta и сделанных изменений. Дело в том, что doUpdate() не гарантирует того, что никакие сопутствующие методы не будут выполнены. Она лишь гарантирует, что не будет выполнен табличный метод Update().

Но изменения в запись могут быть внесены и другими методами. И вот в этом случае изменится значение RecVersion и Axapta посчитает, что запись была изменена другим процессом. В этом случае и требуется перезапрос Reread()

Посмотрите, нет ли у Вас на таблице CustTrans каких-либо связанных событий на методе update.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: iiipoizone (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Условия в запросе sql в аксапте user_ax DAX: Программирование 27 28.02.2013 11:03
CustTrans vs CustSettlement mvsenin DAX: Прочие вопросы 7 26.10.2012 02:14
Проблема с CustTrans Alexanderrrr DAX: Программирование 35 23.11.2009 10:43
Как в форме CustTrans через query отобрать записи у которых AmountCur != 0 ( когда в QueryBuildRange ставишь value(strFmt('!0')); - не работает!) rkorchagin DAX: Программирование 12 02.04.2007 17:58
при построении перекрёстных ссылок выдаётся сообщение об ошибках mmmax DAX: Программирование 10 21.01.2005 12:42
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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