21.02.2012, 11:38 | #1 |
Участник
|
Изменить modifiedDate
Доброго дня!
Подскажите, как можно изменить modifiedDate? X++: priceDiscTable.overwriteSystemfields(true); modifiedDate = str2date('05.10.2011',123); priceDiscTable.(fieldnum(PriceDiscTable, modifiedDate)) = modifiedDate; priceDiscTable.doUpdate(); |
|
21.02.2012, 11:55 | #2 |
северный Будда
|
А зачем вам нужно менять modifiedDate?
__________________
С уважением, Вячеслав |
|
21.02.2012, 12:03 | #3 |
Ищущий знания...
|
Цитата:
Сообщение от stgor
Доброго дня!
Подскажите, как можно изменить modifiedDate? X++: priceDiscTable.overwriteSystemfields(true); modifiedDate = str2date('05.10.2011',123); priceDiscTable.(fieldnum(PriceDiscTable, modifiedDate)) = modifiedDate; priceDiscTable.doUpdate(); X++: new OverwriteSystemfieldsPermission().assert(); priceDiscTable.overwriteSystemfields(true); modifiedDate = str2date('05.10.2011',123); priceDiscTable.(fieldnum(PriceDiscTable, modifiedDate)) = modifiedDate; priceDiscTable.doUpdate(); CodeAccessPermission::revertAssert(); З.Ы. поиск рулит
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
За это сообщение автора поблагодарили: alex55 (1). |
21.02.2012, 23:25 | #4 |
Участник
|
2 lev
Меняют ModifiedDate - наврядли это 2009-я. 2 stgor Надо поменять значение какого-либо несистемного поля, иначе Аксапта считает, что ничего не изменилось и не обновляет запись
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: lev (3). |
22.02.2012, 09:38 | #5 |
Ищущий знания...
|
точно, в 2009 уже ModifiedDateTime...
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
22.02.2012, 11:31 | #6 |
Участник
|
Проблема в том, что Axapta выполняет обновление данных только в том случае, если было изменено хотя бы одно из НЕ системных полей. В противном случае команда UPDATE на сервер просто не уходит, поскольку Axapta считает, что ничего не было изменено. Незачем лишний раз посылать на сервер "пустую" команду.
Другими словами, Вам надо добавить изменение какого-либо еще НЕ системного поля. Любого. X++: // Чтобы подействовало изменение системных полей необходимо изменить НЕ системное поле priceDiscTable.Amount += 0.01; priceDiscTable.doUpdate(); priceDiscTable.overwriteSystemfields(true); modifiedDate = str2date('05.10.2011',123); priceDiscTable.(fieldnum(PriceDiscTable, modifiedDate)) = modifiedDate; // Возвращаем значение НЕ системного поля в исходное значение priceDiscTable.Amount -= 0.01; priceDiscTable.doUpdate(); PS: Не заметил ответ AndyD. Он это уже написал
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
22.02.2012, 13:00 | #7 |
Участник
|
Не знаю, как в 3.0 (лень проверять ), а в 2009-й ядро никакими штатными средствами не позволяет менять createdDateTime/modifiedDateTime на обновлении записи - только на создании. Иначе, к примеру, такая фишка как аудиторский след (ГК/Запросы/Аудиторский след) потеряет смысл.
|
|
22.02.2012, 13:29 | #8 |
Участник
|
Это не панацея, кому нужно - тот и прямым SQL запросом данные подкорректировать сможет.
|
|
25.05.2012, 13:22 | #9 |
Участник
|
Цитата:
Логика думаю понятна - поля created* могут формироваться только при вставке, modified* - вставке\обновлении.
__________________
Sergey Nefedov |
|
25.05.2012, 13:40 | #10 |
Участник
|
Цитата:
PHP код:
|
|
25.05.2012, 13:58 | #11 |
Участник
|
Цитата:
X++: static void checkSystemFieldOverWrite(Args _args) { CustTable custTable; ; ttsbegin; custTable = CustTable::find('4000', true); new OverwriteSystemfieldsPermission().assert(); custTable.overwriteSystemfields(true); custTable.(fieldNum(CustTable, modifiedDateTime)) = DateTimeUtil::newDateTime(20\05\2012, 0); custTable.(fieldNum(CustTable, createdDateTime)) = DateTimeUtil::newDateTime(20\05\2012, 0); custTable.City = 'check'; custTable.update(); CodeAccessPermission::revertAssert(); ttscommit; info("done"); }
__________________
Sergey Nefedov |
|
|
За это сообщение автора поблагодарили: gl00mie (2). |
25.05.2012, 15:08 | #12 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: SRF (1). |
28.05.2012, 07:17 | #13 |
Участник
|
Насчет полей modifiedBy\modifiedTransactionId - у меня система ведет себя так :
Если обновлять поля из джоба\класса и перед обновлением запускать поиск, обновляемого курсора, как в примере ниже, то значения указанных полей просто затираются X++: static void checkSystemFieldOverWrite(Args _args) { CustTable custTable; ; ttsbegin; custTable = CustTable::find('4000', true); new OverwriteSystemfieldsPermission().assert(); custTable.overwriteSystemfields(true); //custTable.(fieldNum(CustTable, modifiedDateTime)) = DateTimeUtil::newDateTime(19\05\2012, 0); //custTable.(fieldNum(CustTable, createdDateTime)) = DateTimeUtil::newDateTime(19\05\2012, 0); custTable.(fieldNum(CustTable, modifiedBy)) = 'test'; custTable.(fieldNum(CustTable, ModifiedTransactionId)) = 444444; custTable.City = 'check'; custTable.update(); CodeAccessPermission::revertAssert(); ttscommit; info("done"); } X++: static void main(Args _args) { CustTable custTable; ; custTable = _args.record(); new OverwriteSystemfieldsPermission().assert(); custTable.overwriteSystemfields(true); //custTable.(fieldNum(CustTable, modifiedDateTime)) = DateTimeUtil::newDateTime(19\05\2012, 0); //custTable.(fieldNum(CustTable, createdDateTime)) = DateTimeUtil::newDateTime(19\05\2012, 0); custTable.(fieldNum(CustTable, modifiedBy)) = 'test'; custTable.(fieldNum(CustTable, ModifiedTransactionId)) = 444444; custTable.City = 'check'; custTable.update(); CodeAccessPermission::revertAssert(); }
__________________
Sergey Nefedov |
|
28.05.2012, 14:24 | #14 |
Участник
|
Цитата:
Цитата:
Сообщение от SRF
Насчет полей modifiedBy\modifiedTransactionId - у меня система ведет себя так :
Если обновлять поля из джоба\класса и перед обновлением запускать поиск, обновляемого курсора, как в примере ниже, то значения указанных полей просто затираются. Если обновить запись, которая находится непоcредственно на форме(при этом не разрывать связь с ДС), то значения полей меняются. Не работало, когда менял значение в поле Name на то же самое, но чтобы значения полей затирались... Последний раз редактировалось Dark Light; 28.05.2012 в 14:28. |
|
29.05.2012, 09:17 | #15 |
Участник
|
А можно нужную дату и время поставить на сервере и сделать update записи.
|
|
29.05.2012, 09:30 | #16 |
Участник
|
|
|
|
|