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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.05.2009, 12:52   #1  
kia is offline
kia
Участник
 
96 / 19 (1) ++
Регистрация: 07.10.2008
Адрес: Харьков
Ошибка в нумерации строк журналов
По непонятным мне причинам периодически идет сбой в нумерации строк журналов.
В моем случае это таблица RHRMOrderTrans поле LineNum.
Номера повторяются в пределах одного журнала. В результате при проведении имеем ошибку: Ключ с именем 0,00 уже существует.
Каковы могут быть причины и как это править?
Старый 21.05.2009, 13:45   #2  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
1. За автонумерацию строк на на форме отвечает свойство "CounterField" на датасорсе формы. В нем указывается, какое поле автонумеровать. За это отвечает внутренний механиз форм. Новое значение вроде генерится в методе initValue на датосорсе.
2. Но часто строки создаются не на форме, а из кода. В этом случае, алгоритм по автонумерованию строк ложится на плечи программиста.

Как отловить? Если это форма, то можно попробовать вывести lineNum в грид и следить за ним в моменты инициализации и сохранения строки. Думаю, дубликат не сложно будет заметить, а главное - в какой момент он появляется - при создании строки - либо при сохранении. А там уже искать грабли в методах (если это не движок виноват)

Если это не форма, или визуально следить не просто, то вставлять в код затычки и отслеживать то же самое с помощью кода. Т.е. нужно определить момент, когда происходит некорректное формирование lineNum.
За это сообщение автора поблагодарили: zemius (1).
Старый 21.05.2009, 14:19   #3  
ViV is offline
ViV
Axapta Retail User
Самостоятельные клиенты AX
Axapta Retail User
 
200 / 79 (3) ++++
Регистрация: 14.09.2005
Возможно ваш случай.
Дублирование LineNum в строках журналов
Старый 21.05.2009, 14:54   #4  
kia is offline
kia
Участник
 
96 / 19 (1) ++
Регистрация: 07.10.2008
Адрес: Харьков
Цитата:
Сообщение от ViV Посмотреть сообщение
Да, случай мой, но нигде я пока не встретил вариант решения этой "извествой" проблемы.
Насколько я понял, значение номера строки формируется в классe JournalTransData.
Но почему и как возникают дубли (и дробные значения) я так и не понял.
Можно попробовать сделать уникальность по Журналу и Номеру строки. Так хоть получим ошибку сразу при вставке, а не потом.
Но хочется исключить в принципе подобный случай.
Старый 21.05.2009, 15:10   #5  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Сообщение от kia Посмотреть сообщение
(и дробные значения)
Это-то как раз стандартное поведение. Если у вас курсор стоит на строке N и вы вставляете новую запись, то она может получить дробный номер, равный среднеарифметическому между строками N-1 и N. Например, строчка между 1 и 2 получит номер 1,50, а следующая вставленная между 1 и 1,50 получит номер 1,25 и т.д.
А вот почему возникают дубли - нужно смотреть конкретный журнал. Возможно, дубли как-то возникают при одновременной работе в одном журнале нескольких человек. Простой способ избежать еще на этапе создания строк - сделать уникальный индекс с кодом журнала и номером строки.
Старый 21.05.2009, 22:16   #6  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от kia Посмотреть сообщение
Да, случай мой, но нигде я пока не встретил вариант решения этой "извествой" проблемы.
Насколько я понял, значение номера строки формируется в классe JournalTransData.
Но почему и как возникают дубли (и дробные значения) я так и не понял.
Можно попробовать сделать уникальность по Журналу и Номеру строки. Так хоть получим ошибку сразу при вставке, а не потом.
Но хочется исключить в принципе подобный случай.
Счас Аксапты под рукой нет, но, насколько я помню, эта "известная" проблема очень легко воспроизводится: отфильтруйте часть строк журнала (с меньшими номерами), а потом добавьте новую запись в конец списка.
Суть в том, что этот движок автонумерации на форме работает не с таблицей, а с датасорсом, и, соответсвенно, при попытках дать новой строке номер он отталкивается от того, что есть в данный момент в этом датасорсе. А если он отфильтрован, то часть строк при этом не учитывается - вот и появляются дубликаты...
Как-то вот так...

Ну и как уже сказали, "исключить в принципе подобный случай" проще всего уникальным индексом...
Есть, конечно, и более сложный и гораздо менее эффективный способ - "докодировать" нужные проверки и/или движок автонумерации.
__________________
Zhirenkov Vitaly
Старый 22.05.2009, 12:12   #7  
kia is offline
kia
Участник
 
96 / 19 (1) ++
Регистрация: 07.10.2008
Адрес: Харьков
Всем спасибо.
Проблему решил перекрыв метод runLoad и в нем читаю строки журнала и перенумеровываю их (для не проведенных журналов).
Этим решил еще одну проблему - обеспечение необходимой последовательности обработки строк журнала, чтобы они обрабатывались не по номерам строк а по дате операции.
За это сообщение автора поблагодарили: Kaermo (1).
Теги
linenum, rhrmordertrans, журнал, нумерация, ax4.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ошибка обновления строк в трехзвенке kgksoft DAX: Программирование 7 10.09.2019 11:16
Ошибка при изменении/создании строк предложений по продажам JeS DAX: Программирование 8 10.07.2009 18:16
Отвязка формы строк платежа от формы журналов платежей Maximin DAX: Программирование 3 27.01.2005 19:33
Ошибка при формировании строк Журнала платежей ATimTim DAX: Функционал 12 05.07.2004 18:01
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:03.