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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.04.2004, 15:19   #1  
nicko is offline
nicko
Участник
 
229 / 11 (1) +
Регистрация: 19.02.2004
Адрес: Саров
? Редактирование записи
Подскажите что не так, вроде делаю все правильно.
В Сериях документов создаю серию для Личности, пример, ЛИЧ.
В модуле Управление персоналом в Параметрах на вкладке Номерные серии выбираю из списка серию документов ЛИЧ, система плюется такой вот ошибкой:

"Невозможно отредактировать запись в 'Ссылки на серии' ('NumberSequenceReference'). Вы пытаетесь оперировать с одной записью, но затрагивается большее количество записей, проверьте индексы, запустите синхронизацию, либо что-то эквивалентное"

Пробовал запускать Синхронизацию и Обновление данных после синхронизации, не помогает.
?????????????
Старый 31.01.2017, 20:53   #2  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Ax3.0... 10 лет
А проверьте-ка какие у вас RecId создаются
Старый 31.01.2017, 23:42   #3  
Alenka is offline
Alenka
Участник
 
58 / 25 (1) +++
Регистрация: 19.04.2006
С RecId у нас отдельная история.
Сейчас у нас отрицательные RecId, причем мы проходим отрицательные значения уже во второй раз. Т.е. мы прошли положительные, отрицательные, опять положительные и снова перешли на отрицательные. У нас организовано "хитрое" получение RecId из незанятых значений. И дублей у нас нет.
Это я к тому, что отрицательные значения не должны были повлиять на внезапное появление этой ошибки. Хотя у меня были сомнения насчет появившихся записей с дублирующимися RecId, которые теоретически могли вызвать подобную ошибку.
За это сообщение автора поблагодарили: mazzy (2).
Старый 01.02.2017, 13:27   #4  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,656 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Alenka Посмотреть сообщение
С RecId у нас отдельная история.
Сейчас у нас отрицательные RecId, причем мы проходим отрицательные значения уже во второй раз. Т.е. мы прошли положительные, отрицательные, опять положительные и снова перешли на отрицательные. У нас организовано "хитрое" получение RecId из незанятых значений. И дублей у нас нет.
Как предположение. Возможно, Ваш генератор RecId либо сформировал несколько одинаковых значений, либо сформировал RecId, который уже есть для существующей записи. Имею в виду, процесс создания новых записей до их сохранения. Т.е. реальных дублей в базе нет. Ошибка именно на этапе сохранения

В идеале, надо бы поймать момент, когда происходит ошибка и посмотреть RecId изменяемых записей, сравнив с RecId уже существующих

---------

Кстати, если при повторной попытке сохранения тех же самых данных (или при нескольких повторных попытках) все-так сохранение выполняется, значит проблема точно в генераторе RecId. Точнее, в тех полях, содержимое которых формируется автоматически. Причем при каждой новой попытке сохранения формируются новые значения. Как правило, это характерно только для RecId, но, может быть, у Вас реализовано еще что-то свое.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...

Последний раз редактировалось Владимир Максимов; 01.02.2017 в 13:32.
Старый 01.02.2017, 14:27   #5  
Alenka is offline
Alenka
Участник
 
58 / 25 (1) +++
Регистрация: 19.04.2006
Я нашла причину. И она оказалась вовсе не в базе данных, а в коде.
Был добавлен вызов SQL запроса, в котором в начале отключался вывод кол-во полученных строк результата (set nocount on), а в конце забыли его включить (set nocount off). После выполнения запроса любой следующий update любой таблицы выдает ошибку "Вы пытаетесь оперировать с одной записью, но затрагивается большее количество записей. Проверьте индексы, запустите синхронизацию базы данных, или что-либо эквивалентное."

Например, выполнение вот такого простейшего job'a приведет к ошибке для следующего update'a любой записи на любой форме.

X++:
static void probaSetNocountOff(Args _args)
{
    UserConnection          connection      = new UserConnection();
    Statement               stmt            = connection.createStatement();
    ResultSet               rSet;
    str                     query_;
    ;
    query_ = "set nocount on"
           + "\n"
           + "select top 1 ItemId "
           + "from InventTable (nolock) "
           + "where dataareaID = '" + curext() + "'"
           + "\n"
//         + "set nocount off"
           ;

    rSet = stmt.executeQuery(query_);

    while (rSet.next())
    {
        info(rset.getString(1));
    }
}
Если добавить set nocount off, то ошибки не будет.

В общем, сами создаем себе проблемы.

Всем спасибо за ответы.
За это сообщение автора поблагодарили: olesh (1), S.Kuskov (5).
Старый 01.02.2017, 07:32   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга


вот здесь пишут что это ещё из-за глюков с DataAreaId может быть. Ошибка при сохраниении записи
Вы используете несколько компаний? Может у вас каким-то образом DataAreaId из какого-нибудь индекса выпала?
Старый 01.02.2017, 10:52   #7  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
И еще одно, если у вас таблица LedgerTable входит в табличную коллекцию,то проверьте что в базе данных для нее есть только те записи, у которых DataAreaId равна коду виртуальной компании. Не должно быть записией с DataAreaId, равными кодам обычных компаний, которые входят в виртуальные.
Например, если виртуальная компания называется vir, а в нее входит обычная компания dat и таблица LedgerTable входит в табличную коллекцию, привязанную к данной виртуальной компании, то
1) Это запрос не должен вернуть ни одной записи
select * from LedgerTable where DataAreaId = 'dat'
2) Это запрос вернет те записи, которые видны в Аксапте:
select * from LedgerTable where DataAreaId = 'vir'

Это надо делать в SQL Management Studio

Последний раз редактировалось Ace of Database; 01.02.2017 в 11:00.
Старый 01.02.2017, 11:00   #8  
Alenka is offline
Alenka
Участник
 
58 / 25 (1) +++
Регистрация: 19.04.2006
Во-первых, спасибо, что вникаете в проблему.
Во-вторых, по пунктам:
1. Нет, я не пробовала выполнить ваш запрос, т.к. утверждение про отсутствие дублей RecId в базе - не голословное утверждение, а проверенное.
2. У нас нет проблем с таблицей LedgerTable. Проблемы возникали как со стандартными таблицами, типа PurchTable или SalesLine, так и с созданными нами таблицами. В табличные коллекции, соответствующие виртуальным компаниям, входят созданные нами таблицы, с которыми проблем пока не возникало. Про dataareaId в таблицах - проверю, результат напишу попозже.
Старый 01.02.2017, 11:04   #9  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
И еще по поводу быстрой проверки виртуальной компании. Проверку можно упростить.
Этот запрос не должен вернуть ни одной записи:
select * from LedgerTable where DataAreaId <> 'vir'
Старый 01.02.2017, 12:05   #10  
Alenka is offline
Alenka
Участник
 
58 / 25 (1) +++
Регистрация: 19.04.2006
В обычных таблицах проблем с dataareaId нет. В паре таблиц из табличной коллекции, соответствующей виртуальной компании, были записи с неправильным dataareaId. Сейчас их удалила. Но эти записи были старые, четырехлетней давности.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
AX4: Кнопка "Сценарий" в паспорте записи Den Ram DAX: Функционал 2 19.04.2007 13:53
ALEG: Доступны записи тренингов по Microsoft Dynamics NAV Blog bot DAX Blogs 0 21.03.2007 15:00
Вытащить записи из InventSum ... Rimantas DAX: Программирование 23 07.11.2006 14:47
Как решить проблему с правами на вновь создаваемые записи таблицы. AY DAX: Прочие вопросы 4 02.10.2003 12:44
Автоматическое увеличение значения поля при создании новой записи. sguryev DAX: Программирование 3 06.02.2003 14:00

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:14.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.