Цитата:
Сообщение от
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.