|  21.05.2009, 12:52 | #1 | 
| Участник | Ошибка в нумерации строк журналов 
			
			По непонятным мне причинам периодически идет сбой в нумерации строк журналов. В моем случае это таблица RHRMOrderTrans поле LineNum. Номера повторяются в пределах одного журнала. В результате при проведении имеем ошибку: Ключ с именем 0,00 уже существует. Каковы могут быть причины и как это править? | 
|  | 
|  21.05.2009, 13:45 | #2 | 
| Боец | 
			
			1. За автонумерацию строк на на форме  отвечает свойство "CounterField" на датасорсе формы. В нем указывается, какое поле автонумеровать. За это отвечает внутренний механиз форм. Новое значение вроде генерится в методе initValue на датосорсе. 2. Но часто строки создаются не на форме, а из кода. В этом случае, алгоритм по автонумерованию строк ложится на плечи программиста. Как отловить? Если это форма, то можно попробовать вывести lineNum в грид и следить за ним в моменты инициализации и сохранения строки. Думаю, дубликат не сложно будет заметить, а главное - в какой момент он появляется - при создании строки - либо при сохранении. А там уже искать грабли в методах (если это не движок виноват) Если это не форма, или визуально следить не просто, то вставлять в код затычки и отслеживать то же самое с помощью кода. Т.е. нужно определить момент, когда происходит некорректное формирование lineNum. | 
|  | |
| За это сообщение автора поблагодарили: zemius (1). | |
|  21.05.2009, 14:19 | #3 | 
| Axapta Retail User | 
			
			Возможно ваш случай.  Дублирование LineNum в строках журналов | 
|  | 
|  21.05.2009, 14:54 | #4 | 
| Участник | Цитата: 
		
			Сообщение от ViV
			   Возможно ваш случай.  Дублирование LineNum в строках журналов Насколько я понял, значение номера строки формируется в классe JournalTransData. Но почему и как возникают дубли (и дробные значения) я так и не понял. Можно попробовать сделать уникальность по Журналу и Номеру строки. Так хоть получим ошибку сразу при вставке, а не потом. Но хочется исключить в принципе подобный случай. | 
|  | 
|  21.05.2009, 15:10 | #5 | 
| Участник | 
			
			Это-то как раз стандартное поведение. Если у вас курсор стоит на строке N и вы вставляете новую запись, то она может получить дробный номер, равный среднеарифметическому между строками N-1 и N. Например, строчка между 1 и 2 получит номер 1,50, а следующая вставленная между 1 и 1,50 получит номер 1,25 и т.д.  А вот почему возникают дубли - нужно смотреть конкретный журнал. Возможно, дубли как-то возникают при одновременной работе в одном журнале нескольких человек. Простой способ избежать еще на этапе создания строк - сделать уникальный индекс с кодом журнала и номером строки. | 
|  | 
|  21.05.2009, 22:16 | #6 | 
| MCITP |   Цитата: 
		
			Сообщение от kia
			   Да, случай мой, но нигде я пока не встретил вариант решения этой "извествой" проблемы. Насколько я понял, значение номера строки формируется в классe JournalTransData. Но почему и как возникают дубли (и дробные значения) я так и не понял. Можно попробовать сделать уникальность по Журналу и Номеру строки. Так хоть получим ошибку сразу при вставке, а не потом. Но хочется исключить в принципе подобный случай. Суть в том, что этот движок автонумерации на форме работает не с таблицей, а с датасорсом, и, соответсвенно, при попытках дать новой строке номер он отталкивается от того, что есть в данный момент в этом датасорсе. А если он отфильтрован, то часть строк при этом не учитывается - вот и появляются дубликаты... Как-то вот так... Ну и как уже сказали, "исключить в принципе подобный случай" проще всего уникальным индексом... Есть, конечно, и более сложный и гораздо менее эффективный способ - "докодировать" нужные проверки и/или движок автонумерации.   
				__________________ Zhirenkov Vitaly | 
|  | 
|  22.05.2009, 12:12 | #7 | 
| Участник | 
			
			Всем спасибо.  Проблему решил перекрыв метод runLoad и в нем читаю строки журнала и перенумеровываю их (для не проведенных журналов). Этим решил еще одну проблему - обеспечение необходимой последовательности обработки строк журнала, чтобы они обрабатывались не по номерам строк а по дате операции. | 
|  | |
| За это сообщение автора поблагодарили: Kaermo (1). | |
| Теги | 
| linenum, rhrmordertrans, журнал, нумерация, ax4.0 | 
|  | 
| 
 |