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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.02.2023, 20:00   #1  
DaniilT is offline
DaniilT
Участник
 
68 / 12 (1) ++
Регистрация: 28.04.2020
Невозможно создать запись в Элементы (InventTable). Код номенклатуры: 1T898f9. Запись уже существует.
Подскажите, кто сталкивался с данной ошибкой.

Невозможно создать запись в Элементы (InventTable). Код номенклатуры: 1T898f9.
Запись уже существует.


Данная ошибка явно глюк. В таблице InventTable есть всего один индекс, который запрещает дублирование номера номенклатуры - ItemId. Строки в inventTable со значением "1T898f9" нету.

Немного предыстории. Я делал доработку по созданию номенклатуры и продукта из файла excel. Моя доработка работала - номенклатура и продукт создавались. После тестирования доработки с ролью пользователя обнаружилась ошибка - у пользователя не хватало прав для таблицы EcoResProduct и еще пару таблиц, связанных с продуктом. Дать доступ к роли на эти таблицы не получалось - не давала axapta "Абстрактные таблицы и сопоставления таблиц недопустимы"

Я принял решение перенести выполнение моего класса на сервер. У меня не получилось. После одного запуска на сервере появилась ошибка
"Невозможно создать запись в Элементы (InventTable). Код номенклатуры: 1T898f9. Запись уже существует." Я откатил все обратно до рабочей версии, но все равно ошибка осталась.

Я перенес свою доработку в другую базу - 63 база. Сначала проверил вот этот джоб:
X++:
InventTable  it;

    ttsBegin;
        it.ItemId = '1T898f9';
        it.doInsert();
    ttsCommit;
Джоб работал. Затем я еще раз попробовал переписать класс, что бы он работал на сервере. И после одного неудачного выполнения класса, снова появилась эта ошибка. Джоб выше перестал работать и стал выдавать точно такую же ошибку. Тогда снова откатил свою доработку до рабочего варианта, но ошибка снова осталась.

Последний раз редактировалось DaniilT; 10.02.2023 в 20:13.
Старый 10.02.2023, 20:53   #2  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,654 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
1. Есть еще уникальный индекс по RecId.

Возможно, есть еще какие-то индексы, которые имеют признак уникальности именно в базе данных, но его по каким-то причинам не видно в AOT. Это надо напрямую в SQL смотреть

2. Подобные ошибки могут возникать, если где-то, как-то, была выполнена ХП сервера (или напрямую список команд передали) через объект Connection, где вначале сделали настройку SET NOCOUNT ON, но по завершении ХП не вернули в исходное состояние SET NOCOUNT OFF

Что именно делает эта ХП - не важно. Важен именно факт изменения настройки SET NOCOUNT для текущего соединения. Поэтому именно объект Connection

В этом случае такая ошибка вообще может возникать при любом обращении к базе данных для любой таблицы
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 10.02.2023, 20:55   #3  
Pandasama is offline
Pandasama
Участник
 
449 / 133 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
Цитата:
Джоб выше перестал работать и стал выдавать точно такую же ошибку. Тогда снова откатил свою доработку до рабочего варианта, но ошибка снова осталась.
Попробовать сбросить кэш таблицы.
Посмотреть, что у вас транзакции в данный момент завершены.
Посмотреть, что в SQL у вас - видна такая запись или нет (особенно, грязным чтением)
Старый 13.02.2023, 08:32   #4  
DaniilT is offline
DaniilT
Участник
 
68 / 12 (1) ++
Регистрация: 28.04.2020
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
1. Есть еще уникальный индекс по RecId.

Возможно, есть еще какие-то индексы, которые имеют признак уникальности именно в базе данных, но его по каким-то причинам не видно в AOT. Это надо напрямую в SQL смотреть

2. Подобные ошибки могут возникать, если где-то, как-то, была выполнена ХП сервера (или напрямую список команд передали) через объект Connection, где вначале сделали настройку SET NOCOUNT ON, но по завершении ХП не вернули в исходное состояние SET NOCOUNT OFF

Что именно делает эта ХП - не важно. Важен именно факт изменения настройки SET NOCOUNT для текущего соединения. Поэтому именно объект Connection

В этом случае такая ошибка вообще может возникать при любом обращении к базе данных для любой таблицы
А как попробовать исправить ?
Старый 13.02.2023, 09:45   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от DaniilT Посмотреть сообщение
А как попробовать исправить ?
Пропуск номеров RecId
Старый 13.02.2023, 09:49   #6  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,654 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
По индексам - открыть SQL Server Management Studio и посмотреть индексы таблицы

По вызову ХП - посмотреть код своего класса. Нет ли там использования объектов Connection, Statement. Если есть, то что именно выполняется через Statement.executeQuery() или Statement.executeUpdate().

Можно, конечно, сделать анализ ХП напрямую

1. Через SQL Server Management Studio посмотреть код всех созданных там ХП
2. Записать трассировку в "SQL Server Profiler" и проверить факт вызова в них SET NOCOUNT ON
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 13.02.2023, 10:04   #7  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,158 / 1286 (47) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Если беда именно с хранимками, то вроде тут даже запрос предлагали для поиска таких непарных NO COUNT:
AX2009: Ошибка оптимистической модели обновления
За это сообщение автора поблагодарили: Logger (3).
Старый 13.02.2023, 12:18   #8  
LETTO is offline
LETTO
Участник
 
260 / 63 (3) ++++
Регистрация: 14.07.2022
Цитата:
Сообщение от DaniilT Посмотреть сообщение
Джоб работал. Затем я еще раз попробовал переписать класс, что бы он работал на сервере. И после одного неудачного выполнения класса, снова появилась эта ошибка.
Странно вы как то тестируете. В классе точно ничего не накосячили? Джоб бы лучше этот же пробовали на сервере запускать. Потом простейший вариант своего класса.
Старый 13.02.2023, 14:31   #9  
DaniilT is offline
DaniilT
Участник
 
68 / 12 (1) ++
Регистрация: 28.04.2020
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
Если беда именно с хранимками, то вроде тут даже запрос предлагали для поиска таких непарных NO COUNT:
AX2009: Ошибка оптимистической модели обновления
Если такие хранимые процедуры найдены, то что с ними нужно сделать ?
Не удалять же.
Старый 13.02.2023, 15:22   #10  
axm2017 is offline
axm2017
Участник
 
1,754 / 292 (13) ++++++
Регистрация: 15.05.2017
>In the SP we had the command "Set NoCount On" as the first step which Ax requires. However, we had forgotten to issue a "Set NoCount Off" as the last step in the procedure
Может сделать забытый шаг?
Старый 13.02.2023, 16:34   #11  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,654 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от DaniilT Посмотреть сообщение
Если такие хранимые процедуры найдены, то что с ними нужно сделать ?
Добавить завершающей командой SET NOCOUNT OFF

Если возможен выход где-то в середине ХП, то также добавить SET NOCOUNT OFF перед всеми возможными местами выхода

Возможно, не во всех ХП вообще нужна настройка SET NOCOUNT ON. Может быть, эту настройку где-то можно будет просто удалить

Если возможен вызов ХП из ХП, то надо проследить за корректностью настройки SET NOCOUNT при возврате в родительские ХП. Возможно, в дочерних ХП лучше не делать SET NOCOUNT исходя из предположения, что это сделано в родительской ХП
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Запись уже существует!? propeller DAX: Программирование 16 07.06.2010 09:36
Запись уже существует???? 111andrei DAX: Программирование 7 30.12.2008 17:04
Невозможно выбрать запись в 'LedgerBalancesDim' ('LedgerBalancesDim') Beast-L DAX: Программирование 19 06.08.2007 13:05
Ошибка при импорте демоданных (Axapta 3.0 CIS SP1) KocDm DAX: Администрирование 2 11.08.2005 12:04
при построении перекрёстных ссылок выдаётся сообщение об ошибках mmmax DAX: Программирование 10 21.01.2005 12:42

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

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

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