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:13 | #7 |
MCITP
|
Цитата:
kalex_a как вариант, а не попробовать ли задать не только purchLine.PurchReceivedNow=1; но и purchLine.InventReceivedNow=1(с учётом пересчёта единиц); А на будущее, желательно приводить текст сообщения об ошибке, тогда гораздо больше шансов получить вменяемый ответ на вопрос.
__________________
Zhirenkov Vitaly Последний раз редактировалось ZVV; 29.10.2008 в 11:15. Причина: ошибка |
|
29.10.2008, 11:14 | #8 |
Ищущий знания...
|
Обновление данных в базе происходит при выполнении команды ttscommit. Если например проапдейтить поле в таблице. и не закрыть транзакцию, то из базы будет выбрана информация с ещё не изменённым полем.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
29.10.2008, 11:15 | #9 |
Ищущий знания...
|
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
За это сообщение автора поблагодарили: ZVV (-1). |
29.10.2008, 11:20 | #10 |
MCITP
|
Цитата:
Зачем дезинформировать людей? Upd: Даже не то что дезинформировать, а просто предлагать делать абсолютно неправильно, в обход всех известных BP, по сути провоцируя на создание кода, приводящего к неконсистентностым данным. Представьте что человек дальше напишет, руководствуясь Вашим таким советом? Человек получает сообщение "Физически обновляемое количество по складским единицам 'шт' должно быть отлично от нуля.", насколько я понимаю, потому что не указал InventReceivedNow, а указал PurchReceivedNow.
__________________
Zhirenkov Vitaly Последний раз редактировалось ZVV; 29.10.2008 в 11:27. |
|
|
За это сообщение автора поблагодарили: Lemming (1), kalex_a (1). |
29.10.2008, 11:25 | #11 |
Участник
|
Однажды столкнулся с такой ситуациией, что действительно InventTrans обновился, а данные выбирались старые. При этом посмотрел InventTrans не входил в список кэшируемых таблиц.
Поставил X++: inventTrans.disableCache(true);
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
29.10.2008, 11:36 | #12 |
Участник
|
Спасибо ZVV, действително с InventReceivedNow помогло.
|
|
29.10.2008, 11:41 | #13 |
MCITP
|
Ага, с таким багом я тоже помойму как-то сталкивался, тоже были какие-то проблемы с кешированием вроде, точно не помню. Но это всё-таки баг, а не стандартное поведение.
__________________
Zhirenkov Vitaly |
|
29.10.2008, 11:49 | #14 |
Ищущий знания...
|
Цитата:
Сообщение от ZVV
Лев, Вы бы попробовали сначала сами сделать что-то подобное, или хотя бы подумали о том что говорите с точки зрения транзакций реляционной СУБД!
Зачем дезинформировать людей? Upd: Даже не то что дезинформировать, а просто предлагать делать абсолютно неправильно, в обход всех известных BP, по сути провоцируя на создание кода, приводящего к неконсистентностым данным. Представьте что человек дальше напишет, руководствуясь Вашим таким советом? По поводу информации про ttscommit - так я её тоже вычитал где то в интернете если это работает не так, то значит был дезинформирован
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
29.10.2008, 11:56 | #15 |
Участник
|
Про ttscommit Вы читали правильно - при выполнении этой команды база данных сохраняет данные (persists, commits, как хотите называйте)
Но, ессно, для корректной работы системы необязательно после каждого изменения это делать. |
|
|
За это сообщение автора поблагодарили: lev (1). |
29.10.2008, 12:33 | #16 |
----------------
|
немного оффтоп
после выполнения update() и до ttscommit вы можете увидеть измененные данные только на Акс3 с SQL2000 (2005 в режиме 80). В Оракле и Акс4 с SQL2005 вы не увидите изменений из внешнего процесса до выполнения ttscommit Последний раз редактировалось Wamr; 29.10.2008 в 12:39. |
|
29.10.2008, 12:45 | #17 |
Участник
|
Цитата:
Цитата:
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 | #18 |
Участник
|
Красавцы.
Переноси после этого код с 3.0 на 4.0.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
29.10.2008, 12:49 | #19 |
Участник
|
Попробовал щас на 3.0 sp4 + Oracle изменённые данные нормально читаются.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
29.10.2008, 13:25 | #20 |
----------------
|
продолжая оффтоп
запретили не в Аксапте, а именно в бд установкой поумолчанию ее в режим Read-Committed Snapshot Isolation. В этом контексте совершенно не понятно зачем в find методы понапихали selectLocked(!_update) |
|
|
|