|  20.11.2008, 11:50 | #1 | 
| Участник | Нельзя изменить изменено другим пользователем 
			
			Есть такая проблема в одной строке закупки(может и не одной, но покрайней мере в одной) не получается сменить поле подтверждено(дата). Пишет, Цитата: 
		
			Сообщение (11:49:18) Значение, введенное в поле "Подтверждено" таблицы "Строки закупки" ("18.11.2008") нельзя сохранить, поскольку оно изменено другим пользователем (новое значение - ""). Используйте функцию "Восстановить", чтобы подставить новое значение. Невозможно отредактировать запись в "Строки закупки" ("PurchLine"). Одно или более полей в записи изменено другим пользователем, или в форме выбраны не все поля. Воспользуйтесь функцией "Восстановить". В этой закупке одна строка. На таблице PurchLine изменил update. Вынес doupdate() повыше X++: public void update(boolean dropInvent = false) { PurchLineType purchLineType; ; this.doupdate(); //purchLineType = this.type(); //purchLineType.update(dropInvent); } AOC перезагружал. Мож кто сталкивался с подобным. 
				__________________ Энергия молодых и неравнодушных способна изменить мир к лучшему. Последний раз редактировалось miklenew; 20.11.2008 в 11:53. | 
|  | 
|  20.11.2008, 12:03 | #2 | 
| Участник | 
			
			А функция "Восстановить" (тобишь, F5) не помогает?
		 
				__________________ Ivanhoe as is.. | 
|  | 
|  20.11.2008, 12:34 | #3 | 
| Участник | 
			
			Посмотрите для этой записи значение поля RecVersion.  Если оно равно 0, то попробуйте изменить его на любое другое (в оснастке sql сервера) 
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | 
|  20.11.2008, 12:35 | #4 | 
| Участник | 
			
			Да, забыл написать: Ошибка появляется как раз на doupdate(). Пробовал. Но дело то не в этом. Я знаю я работаю один с этой записью. Код остался только в upadate(). Всё остальное что могло вызваться закоментировал. 
				__________________ Энергия молодых и неравнодушных способна изменить мир к лучшему. | 
|  | 
|  20.11.2008, 12:49 | #5 | 
| MCTS | Цитата: Наиболее распространенная ошибка следующая: Пользователь пытается сохранить изменения -> при сохранении записи запускается цепочка методов write, update и т.д. -> в одном из методов есть find текущей записи и ее update() с использованием отдельной переменной -> соответственно, когда очередь доходит до сохранения курсора формы, запись уже была изменена в коде. -> Ядро считает, что запись изменена другим пользователем и выдает ошибку. Резюме: внимательно смотрите Ваш код, с 99% вероятностью ошибка аналогична описанной. 
				__________________ Dynamics AX Experience | 
|  | 
|  20.11.2008, 12:53 | #6 | 
| Участник | Цитата: Но на этой ошибка воспроизводиться, а на других нет. У нас Oracle. 
				__________________ Энергия молодых и неравнодушных способна изменить мир к лучшему. | 
|  | 
|  20.11.2008, 13:01 | #7 | 
| Участник | 
			
			А если не через интерфейс, а в коде поменять дату - получится?
		 
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | 
|  20.11.2008, 13:17 | #8 | 
| Участник | Цитата: А форму я писал, создал новую(чистую). 
				__________________ Энергия молодых и неравнодушных способна изменить мир к лучшему. | 
|  | 
|  20.11.2008, 13:22 | #9 | 
| Участник | 
			
			Кодом получилось. Ситуация ушла. Теперь всё нормально меняется. Но интересно что же это было. 
				__________________ Энергия молодых и неравнодушных способна изменить мир к лучшему. | 
|  | 
|  20.11.2008, 13:22 | #10 | 
| MCTS | 
			
			Для чистоты эксперемента лучше все-таки посмотреть со стороны Oracle, обновляется ли запись таблицы PurchLine до возникновения ошибки, или нет.
		 
				__________________ Dynamics AX Experience | 
|  | 
|  20.11.2008, 13:25 | #11 | 
| MCTS | 
			
			А на методах modifiedField() на таблице и датасоурсе никакого кода не было?
		 
				__________________ Dynamics AX Experience | 
|  | 
|  20.11.2008, 13:28 | #12 | 
| Участник | Цитата:   
				__________________ Энергия молодых и неравнодушных способна изменить мир к лучшему. | 
|  | 
|  20.11.2008, 15:13 | #13 | 
| Участник | 
			
			Вообщем чё оказалось. В систему был добавлен новый тип документа по закупке. При разноске была написана такая штука. X++: _purchLine.ConfirmedDlv = priceDisc.deliveryDays() + _ReadyDate; priceDisc.deliveryDays() тип Days На входе date = 0, days = 14. Через отладчик и через Axapt-у ConfirmedDlv = 0 или пусто соответственно. Захожу в базу Oracle вижу там где дата действительно пустая 01.01.1900, а в нашей испорченой 15.01.1900. Поправил код X++: _purchLine.ConfirmedDlv = _ReadyDate ? priceDisc.deliveryDays() + _ReadyDate : _ReadyDate; Вот такой механизм ломания табличных строк. Странно что захотел воспроизвести пример на новой таблице. Создал таблицу с датой(тип PurchLineDlvDate) и job. X++: static void Job27(Args _args) { Table1 t1; date d; Days d1; ; d1 = 14; ttsbegin; t1.selectForUpdate(true); while select firstonly t1 { t1.TransDate = d1 + d; t1.update(); } ttscommit; } ... какая-то   
				__________________ Энергия молодых и неравнодушных способна изменить мир к лучшему. Последний раз редактировалось miklenew; 20.11.2008 в 15:28. | 
|  | 
|  20.11.2008, 15:24 | #14 | 
| Участник | 
			
			Можно воспроизвести эту ошибку (изменена другим пользователем). Создать таблицу. Создать строку с пустой датой. Зайти в оракл исправить 01.01.1900 на 15.01.1900, и в Axapt-e попытаться сменить дату руками. Наслаждаемся ошибкой 
				__________________ Энергия молодых и неравнодушных способна изменить мир к лучшему. | 
|  | 
|  20.11.2008, 15:43 | #15 | 
| Участник | 
			
			А можете посмотреть, какие запросы на сервер уходят?
		 
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | 
|  20.11.2008, 16:13 | #16 | 
| Участник | 
			
			Вот такой X++: UPDATE PURCHLINE SET 
CONFIRMEDDLV=:in1,
MODIFIEDDATE=:in2,
MODIFIEDTIME=:in3,
MODIFIEDBY=:in4,
RECVERSION=:in5 
WHERE ((SUBSTR(NLS_LOWER(DATAAREAID),1,3)=NLS_LOWER(:in6)) AND (RECID=:in7))
				__________________ Энергия молодых и неравнодушных способна изменить мир к лучшему. | 
|  | 
|  | 
| 
 |