|
24.10.2008, 14:32 | #1 |
Участник
|
Разноска накладной
Здравствуйте, такой вот вопрос
разношу накладную X++: purchFormLetter.update(purchTable,
"123",
systemDateGet(),
PurchUpdate::All,
AccountOrder::None,
NoYes::No,
NoYes::No); |
|
|
За это сообщение автора поблагодарили: Ganna (1). |
24.10.2008, 14:54 | #2 |
MCITP
|
Можно пойти "сложным" путём, типа как приведено в примере тут и соответсвенно проставить нужные кол-ва в ПурчПармТэйбл.
А можно сделать по другому, проставить немедленные получения на необходимое кол-во в строках закупки и обработать purchFormLetter.update уже с параметром PurchUpdate::ReceiveNow. Единственный момент - если поля "немедленного получения" могут уже содержать какую-то информацию и её нужно сохранить, то естественно придётся это сделать в каком-нибудь мапе и потом восстановить самому после обработки накладной.
__________________
Zhirenkov Vitaly Последний раз редактировалось ZVV; 24.10.2008 в 14:56. Причина: граматика :) |
|
24.10.2008, 15:30 | #3 |
Участник
|
Спасибо ZVV, что то я про немедленное получение не сообразил ))
|
|
29.10.2008, 07:33 | #4 |
Участник
|
X++: purchFormLetter = PurchFormLetter::construct(DocumentStatus::Invoice); select * from purchTable join purchLine where purchTable.PurchId == "10623" && (purchLine.PurchId==purchTable.PurchId); purchLine = PurchLine::findRecId(purchLine.RecId,true); purchLine.PurchReceivedNow=1; purchLine.update(); purchFormLetter.update(purchTable, "777", systemDateGet(), PurchUpdate::ReceiveNow, AccountOrder::None, NoYes::No, NoYes::No); |
|
29.10.2008, 10:31 | #5 |
Ищущий знания...
|
Нужно сделать обновление поля и разноску в разных транзакциях. Пока транзакция не закрыта, в базе старые данные. А при выполнении разноски, строки ищутся и находят нулевое количество.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
29.10.2008, 11:03 | #6 |
Участник
|
|
|
29.10.2008, 11:14 | #7 |
Ищущий знания...
|
Обновление данных в базе происходит при выполнении команды ttscommit. Если например проапдейтить поле в таблице. и не закрыть транзакцию, то из базы будет выбрана информация с ещё не изменённым полем.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
29.10.2008, 11:20 | #8 |
MCITP
|
Цитата:
Зачем дезинформировать людей? Upd: Даже не то что дезинформировать, а просто предлагать делать абсолютно неправильно, в обход всех известных BP, по сути провоцируя на создание кода, приводящего к неконсистентностым данным. Представьте что человек дальше напишет, руководствуясь Вашим таким советом? Человек получает сообщение "Физически обновляемое количество по складским единицам 'шт' должно быть отлично от нуля.", насколько я понимаю, потому что не указал InventReceivedNow, а указал PurchReceivedNow.
__________________
Zhirenkov Vitaly Последний раз редактировалось ZVV; 29.10.2008 в 11:27. |
|
|
За это сообщение автора поблагодарили: Lemming (1), kalex_a (1). |
29.10.2008, 11:13 | #9 |
MCITP
|
Цитата:
kalex_a как вариант, а не попробовать ли задать не только purchLine.PurchReceivedNow=1; но и purchLine.InventReceivedNow=1(с учётом пересчёта единиц); А на будущее, желательно приводить текст сообщения об ошибке, тогда гораздо больше шансов получить вменяемый ответ на вопрос.
__________________
Zhirenkov Vitaly Последний раз редактировалось ZVV; 29.10.2008 в 11:15. Причина: ошибка |
|
29.10.2008, 11:15 | #10 |
Ищущий знания...
|
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
За это сообщение автора поблагодарили: ZVV (-1). |
29.10.2008, 11:36 | #11 |
Участник
|
Спасибо ZVV, действително с InventReceivedNow помогло.
|
|
29.10.2008, 11:56 | #12 |
Участник
|
Про ttscommit Вы читали правильно - при выполнении этой команды база данных сохраняет данные (persists, commits, как хотите называйте)
Но, ессно, для корректной работы системы необязательно после каждого изменения это делать. |
|
|
За это сообщение автора поблагодарили: lev (1). |
29.10.2008, 12:33 | #13 |
----------------
|
немного оффтоп
после выполнения update() и до ttscommit вы можете увидеть измененные данные только на Акс3 с SQL2000 (2005 в режиме 80). В Оракле и Акс4 с SQL2005 вы не увидите изменений из внешнего процесса до выполнения ttscommit Последний раз редактировалось Wamr; 29.10.2008 в 12:39. |
|
29.10.2008, 12:45 | #14 |
Участник
|
Цитата:
Цитата:
The reason for not supporting NOLOCK on SQLServer 2005 is that RCSI (Read-Committed Snapshot Isolation) is turned on and therefore readers are not blocked behind writers and selecting with NOLOCK is no longer necessary
|
|
29.10.2008, 12:48 | #15 |
Участник
|
Красавцы.
Переноси после этого код с 3.0 на 4.0.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
29.10.2008, 12:49 | #16 |
Участник
|
Попробовал щас на 3.0 sp4 + Oracle изменённые данные нормально читаются.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
29.10.2008, 13:25 | #17 |
----------------
|
продолжая оффтоп
запретили не в Аксапте, а именно в бд установкой поумолчанию ее в режим Read-Committed Snapshot Isolation. В этом контексте совершенно не понятно зачем в find методы понапихали selectLocked(!_update) |
|
29.10.2008, 13:33 | #18 |
----------------
|
Миш, странно... по общему месту работы помню, что нельзя было в одной сессии отлаживать разноску документа, а во второй смотреть за обновлением данных.
|
|
29.10.2008, 13:43 | #19 |
Участник
|
Цитата:
Как я делаю. 1) Создал таблицу Table1 2) Создал string поле Field1 3) Забил строчку с "1" 4) Запускаю job X++: static void Job21(Args _args) { Table1 t; ; ttsbegin; while select forupdate t { t.Field1 = "3"; t.update(); } while select forupdate t { t.Field1 = "4"; t.update(); } ttscommit; }
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
29.10.2008, 13:38 | #20 |
Участник
|
2 Wamr
Так это для блокировки изменяемых данных сделано. Т.е. прочитать в другой транзации можно и изменений там не будет видно, но при попытке проапдейтить будет блокировка.
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|