26.02.2016, 12:11 | #1 |
Участник
|
Создание новых записей и номерные серии
Проблема жива и в Ax2012, хотя тянется еще с ранних версий
Форма, источником данных которой является таблица, одно из полей которой формируется из номерной серии. Записи отображены списком в Grid и создание новой записи происходит там же в Grid без вызова дополнительной формы. Выполняем следующие действия 1. Создаем новую запись, заполняем все поля, обязательные к заполнению 2. Не сохраняя запись, пытаемся создать новую запись Получаем исключение с сообщением об ошибке Цитата:
Не удается назначить новый номер журнала, так как %1 не был сохранен или удален.
Причина ошибки очевидная. При создании новой записи сначала выполняется метод DataSource.create(), и только внутри этого метода (внутри super()) выполняются все остальные методы по сохранению текущей записи. Но! Стандартный код метода DataSource.create() на форме, если используется номерная серия имеет вид X++: // Form\DataSource\MyTable\create void create(boolean append = false) { ; element.numberSeqFormHandler().formMethodDataSourceCreatePre(); super(append); element.numberSeqFormHandler().formMethodDataSourceCreate(); } X++: void formMethodDataSourceCreatePre() { ; validateWriteCalled = false; validateWriteFailed = false; if (lastNumber) { throw(error(strfmt("@SYS85169", lastNumber))); } } В качестве решения проблемы напрашивается перемещение вызова formMethodDataSourceCreatePre() после вызова super() X++: void create(boolean append = false) { ; // Переносим после super() // element.numberSeqFormHandler().formMethodDataSourceCreatePre(); super(append); element.numberSeqFormHandler().formMethodDataSourceCreatePre(); element.numberSeqFormHandler().formMethodDataSourceCreate(); } Насколько данное решение корректно? Есть ли другие варианты решения проблемы, кроме "забить"?
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
За это сообщение автора поблагодарили: Logger (3). |