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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.10.2022, 13:36   #1  
DaniilT is offline
DaniilT
Участник
 
68 / 12 (1) ++
Регистрация: 28.04.2020
Невозможно создать запись в Проводки журнала спецификаций (ProdJournalBOM). Дата: 05.09.2022. Запись уже существует.
Добрый день. Подскажите в чем может быть проблема. В методе ProdJournalBOM.insertJournalCreate() на строке 58 есть давняя доработка. В ней для сброса статуса идет добавление/изменяешь таблицы ProdJournalBOM.
Ошибка возникает при операции "Начато" из-за того что идет добавление строки с Recid, который уже существует. Скрины внизу.
Сама таблица:

Код:

Инфолог:


В цикле по ProdJournalBOM.InventTransId == dax-10373942 есть две записи (Видно на скрине). Первую он изменяет, а вторую добавляет.
Изменение и добавление происходит по логической переменной doSplit. Логика реализована так, что вторая и последующие строки будут изменятся.

Последний раз редактировалось DaniilT; 03.10.2022 в 13:58.
Старый 03.10.2022, 14:16   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,435 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
RecId у вас в сообщении выводится тот, который был в курсоре до вставки. Это не значит что система будет пытаться вставить его. Новый RecId не генерируется заранее он будет вычислен непосредственно в момент вставки.
Это я к тому что возможно у вас нарушается уникальность какого-то другого индекса. Если есть возможность, то попробуйте временно выключить уникальность на всех индексах в таблице ProdJournalBOM и проверить что будет.
Старый 04.10.2022, 08:43   #3  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
В стандартном приложении много уникальных индексов включают в себя LineNum.

Судя по коду, изменяется перед вставкой только именно LineNum. Так что (если, конечно в модификации приложения нет других уникальных индексов по сравнению со стандартом), то большая вероятность, что вот это LineNum = -LineNum как раз и приводит к нарушению уникальности.

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

Тут уже нужен больше не анализ кода, а анализ данных. На мой взгляд, стоит отфильтровать данные именно по номеру журнала и посмотреть что там до выполнения с номерами строк.
Старый 04.10.2022, 08:53   #4  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Хотя, опять же на мой взгляд, способ назначения номера строки несколько необычный.
Старый 06.10.2022, 11:58   #5  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Я бы обратил внимание на переменную doSplit. Мы здесь видим её изменение на true пока только в одном месте, однако, если бы она менялась только там, то уже на втором витке цикла было бы добавление. Я бы также изменил порядок if на противоположный для более естественной проверки, убрав отрицание.
И самое главное, найдите максимальное значение LineNum поиском по JournalId и прибавьте к нему 1.
Ну и еще я бы выделил весь этот кастомный кусок в отдельный метод. Как минимум это облегчает понимание.
__________________
// no comments
Старый 06.10.2022, 12:09   #6  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от dech Посмотреть сообщение
И самое главное, найдите максимальное значение LineNum поиском по JournalId и прибавьте к нему 1.
Можно даже просто обнулить LineNum, тогда при insert'е будет вызван lastLineNum(), который все сделает сам.
__________________
// no comments
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Запись уже существует!? 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
Сторнирование журнала спецификаций rkrivov DAX: Программирование 1 18.02.2005 13:43

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

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

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