10.02.2023, 20:00 | #1 |
Участник
|
Невозможно создать запись в Элементы (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 |
Участник
|
1. Есть еще уникальный индекс по RecId.
Возможно, есть еще какие-то индексы, которые имеют признак уникальности именно в базе данных, но его по каким-то причинам не видно в AOT. Это надо напрямую в SQL смотреть 2. Подобные ошибки могут возникать, если где-то, как-то, была выполнена ХП сервера (или напрямую список команд передали) через объект Connection, где вначале сделали настройку SET NOCOUNT ON, но по завершении ХП не вернули в исходное состояние SET NOCOUNT OFF Что именно делает эта ХП - не важно. Важен именно факт изменения настройки SET NOCOUNT для текущего соединения. Поэтому именно объект Connection В этом случае такая ошибка вообще может возникать при любом обращении к базе данных для любой таблицы
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
10.02.2023, 20:55 | #3 |
Участник
|
Цитата:
Джоб выше перестал работать и стал выдавать точно такую же ошибку. Тогда снова откатил свою доработку до рабочего варианта, но ошибка снова осталась.
Посмотреть, что у вас транзакции в данный момент завершены. Посмотреть, что в SQL у вас - видна такая запись или нет (особенно, грязным чтением) |
|
13.02.2023, 08:32 | #4 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
1. Есть еще уникальный индекс по RecId.
Возможно, есть еще какие-то индексы, которые имеют признак уникальности именно в базе данных, но его по каким-то причинам не видно в AOT. Это надо напрямую в SQL смотреть 2. Подобные ошибки могут возникать, если где-то, как-то, была выполнена ХП сервера (или напрямую список команд передали) через объект Connection, где вначале сделали настройку SET NOCOUNT ON, но по завершении ХП не вернули в исходное состояние SET NOCOUNT OFF Что именно делает эта ХП - не важно. Важен именно факт изменения настройки SET NOCOUNT для текущего соединения. Поэтому именно объект Connection В этом случае такая ошибка вообще может возникать при любом обращении к базе данных для любой таблицы |
|
13.02.2023, 09:45 | #5 |
Участник
|
|
|
13.02.2023, 09:49 | #6 |
Участник
|
По индексам - открыть 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 |
Участник
|
Если беда именно с хранимками, то вроде тут даже запрос предлагали для поиска таких непарных NO COUNT:
AX2009: Ошибка оптимистической модели обновления |
|
|
За это сообщение автора поблагодарили: Logger (3). |
13.02.2023, 12:18 | #8 |
Участник
|
Странно вы как то тестируете. В классе точно ничего не накосячили? Джоб бы лучше этот же пробовали на сервере запускать. Потом простейший вариант своего класса.
|
|
13.02.2023, 14:31 | #9 |
Участник
|
Цитата:
Сообщение от Raven Melancholic
Если беда именно с хранимками, то вроде тут даже запрос предлагали для поиска таких непарных NO COUNT:
AX2009: Ошибка оптимистической модели обновления Не удалять же. |
|
13.02.2023, 15:22 | #10 |
Участник
|
>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 |
Участник
|
Добавить завершающей командой SET NOCOUNT OFF
Если возможен выход где-то в середине ХП, то также добавить SET NOCOUNT OFF перед всеми возможными местами выхода Возможно, не во всех ХП вообще нужна настройка SET NOCOUNT ON. Может быть, эту настройку где-то можно будет просто удалить Если возможен вызов ХП из ХП, то надо проследить за корректностью настройки SET NOCOUNT при возврате в родительские ХП. Возможно, в дочерних ХП лучше не делать SET NOCOUNT исходя из предположения, что это сделано в родительской ХП
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|