AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.10.2008, 14:32   #1  
kalex_a is offline
kalex_a
Участник
Аватар для kalex_a
Самостоятельные клиенты AX
MCBMSS
 
160 / 19 (1) ++
Регистрация: 26.11.2007
Адрес: Казахстан
? Разноска накладной
Здравствуйте, такой вот вопрос

разношу накладную
X++:
purchFormLetter.update(purchTable,
                           "123",
                           systemDateGet(),
                           PurchUpdate::All,
                           AccountOrder::None,
                           NoYes::No,
                           NoYes::No);
все бы хорошо но разносит на всю сумму и количество, а как программно указать количество, типа как в заказе на покупку когда нажимаем "Разноска" ->"Накладная" появляется форма PurchEditLines, на вкладке "Строки" в поле "Обновить" мы можем указать количество и на такое кол-во разнесется накладная, как это можно реализовать программно. Спасибо заранее.
За это сообщение автора поблагодарили: Ganna (1).
Старый 24.10.2008, 14:54   #2  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Можно пойти "сложным" путём, типа как приведено в примере тут и соответсвенно проставить нужные кол-ва в ПурчПармТэйбл.
А можно сделать по другому, проставить немедленные получения на необходимое кол-во в строках закупки и обработать purchFormLetter.update уже с параметром PurchUpdate::ReceiveNow.
Единственный момент - если поля "немедленного получения" могут уже содержать какую-то информацию и её нужно сохранить, то естественно придётся это сделать в каком-нибудь мапе и потом восстановить самому после обработки накладной.
__________________
Zhirenkov Vitaly

Последний раз редактировалось ZVV; 24.10.2008 в 14:56. Причина: граматика :)
Старый 24.10.2008, 15:30   #3  
kalex_a is offline
kalex_a
Участник
Аватар для kalex_a
Самостоятельные клиенты AX
MCBMSS
 
160 / 19 (1) ++
Регистрация: 26.11.2007
Адрес: Казахстан
Спасибо ZVV, что то я про немедленное получение не сообразил ))
Старый 29.10.2008, 07:33   #4  
kalex_a is offline
kalex_a
Участник
Аватар для kalex_a
Самостоятельные клиенты AX
MCBMSS
 
160 / 19 (1) ++
Регистрация: 26.11.2007
Адрес: Казахстан
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  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от kalex_a Посмотреть сообщение

Почему ругается на кол-во??? ((
Нужно сделать обновление поля и разноску в разных транзакциях. Пока транзакция не закрыта, в базе старые данные. А при выполнении разноски, строки ищутся и находят нулевое количество.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 29.10.2008, 11:03   #6  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
?
Цитата:
Сообщение от lev Посмотреть сообщение
Нужно сделать обновление поля и разноску в разных транзакциях. Пока транзакция не закрыта, в базе старые данные.
Эмм..а если не сложно, можно поподробней?
Старый 29.10.2008, 11:13   #7  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от lev Посмотреть сообщение
Нужно сделать обновление поля и разноску в разных транзакциях. Пока транзакция не закрыта, в базе старые данные. А при выполнении разноски, строки ищутся и находят нулевое количество.
Ну Вы загнули конечно.

kalex_a
как вариант, а не попробовать ли задать не только
purchLine.PurchReceivedNow=1;
но и
purchLine.InventReceivedNow=1(с учётом пересчёта единиц);

А на будущее, желательно приводить текст сообщения об ошибке, тогда гораздо больше шансов получить вменяемый ответ на вопрос.
__________________
Zhirenkov Vitaly

Последний раз редактировалось ZVV; 29.10.2008 в 11:15. Причина: ошибка
Старый 29.10.2008, 11:14   #8  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от Lemming Посмотреть сообщение
Эмм..а если не сложно, можно поподробней?
Обновление данных в базе происходит при выполнении команды ttscommit. Если например проапдейтить поле в таблице. и не закрыть транзакцию, то из базы будет выбрана информация с ещё не изменённым полем.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 29.10.2008, 11:15   #9  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от ZVV Посмотреть сообщение
Ну Вы загнули конечно.
Поправьте если не прав
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
За это сообщение автора поблагодарили: ZVV (-1).
Старый 29.10.2008, 11:20   #10  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от lev Посмотреть сообщение
Обновление данных в базе происходит при выполнении команды ttscommit. Если например проапдейтить поле в таблице. и не закрыть транзакцию, то из базы будет выбрана информация с ещё не изменённым полем.
Лев, Вы бы попробовали сначала сами сделать что-то подобное, или хотя бы подумали о том что говорите с точки зрения транзакций реляционной СУБД!
Зачем дезинформировать людей?

Upd: Даже не то что дезинформировать, а просто предлагать делать абсолютно неправильно, в обход всех известных BP, по сути провоцируя на создание кода, приводящего к неконсистентностым данным. Представьте что человек дальше напишет, руководствуясь Вашим таким советом?

Человек получает сообщение "Физически обновляемое количество по складским единицам 'шт' должно быть отлично от нуля.", насколько я понимаю, потому что не указал InventReceivedNow, а указал PurchReceivedNow.
__________________
Zhirenkov Vitaly

Последний раз редактировалось ZVV; 29.10.2008 в 11:27.
За это сообщение автора поблагодарили: Lemming (1), kalex_a (1).
Старый 29.10.2008, 11:25   #11  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Однажды столкнулся с такой ситуациией, что действительно InventTrans обновился, а данные выбирались старые. При этом посмотрел InventTrans не входил в список кэшируемых таблиц.
Поставил
X++:
 inventTrans.disableCache(true);
И всё стало нормально работать.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 29.10.2008, 11:36   #12  
kalex_a is offline
kalex_a
Участник
Аватар для kalex_a
Самостоятельные клиенты AX
MCBMSS
 
160 / 19 (1) ++
Регистрация: 26.11.2007
Адрес: Казахстан
Спасибо ZVV, действително с InventReceivedNow помогло.
Старый 29.10.2008, 11:41   #13  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от miklenew Посмотреть сообщение
Однажды столкнулся с такой ситуациией, что действительно InventTrans обновился, а данные выбирались старые. При этом посмотрел InventTrans не входил в список кэшируемых таблиц.
Поставил
X++:
 inventTrans.disableCache(true);
И всё стало нормально работать.
Ага, с таким багом я тоже помойму как-то сталкивался, тоже были какие-то проблемы с кешированием вроде, точно не помню. Но это всё-таки баг, а не стандартное поведение.
__________________
Zhirenkov Vitaly
Старый 29.10.2008, 11:49   #14  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от ZVV Посмотреть сообщение
Лев, Вы бы попробовали сначала сами сделать что-то подобное, или хотя бы подумали о том что говорите с точки зрения транзакций реляционной СУБД!
Зачем дезинформировать людей?

Upd: Даже не то что дезинформировать, а просто предлагать делать абсолютно неправильно, в обход всех известных BP, по сути провоцируя на создание кода, приводящего к неконсистентностым данным. Представьте что человек дальше напишет, руководствуясь Вашим таким советом?
Попробывал на элементарном примере. Действительно я был не прав. Приношу свои извинения! Видимо такое случается не всегда, а это частный случай.
По поводу информации про ttscommit - так я её тоже вычитал где то в интернете если это работает не так, то значит был дезинформирован
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 29.10.2008, 11:56   #15  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Про ttscommit Вы читали правильно - при выполнении этой команды база данных сохраняет данные (persists, commits, как хотите называйте)

Но, ессно, для корректной работы системы необязательно после каждого изменения это делать.
За это сообщение автора поблагодарили: lev (1).
Старый 29.10.2008, 12:33   #16  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
немного оффтоп

после выполнения update() и до ttscommit вы можете увидеть измененные данные только на Акс3 с SQL2000 (2005 в режиме 80).
В Оракле и Акс4 с SQL2005 вы не увидите изменений из внешнего процесса до выполнения ttscommit

Последний раз редактировалось Wamr; 29.10.2008 в 12:39.
Старый 29.10.2008, 12:45   #17  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от Wamr Посмотреть сообщение
немного оффтоп

после выполнения update() и до ttscommit вы можете увидеть измененые данные только на Акс3 с SQL2000 (2005 в режиме 80).
В Оракле и Акс4 с SQL2005 вы не увидите изменений до выполнения ttscommit
На всякий случай, поясню:
Цитата:
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
Соответственно, чтение "грязных" данных запретили после АХ3
Старый 29.10.2008, 12:48   #18  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Соответственно, чтение "грязных" данных запретили после АХ3
Красавцы.
Переноси после этого код с 3.0 на 4.0.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 29.10.2008, 12:49   #19  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от Wamr Посмотреть сообщение
немного оффтоп
после выполнения update() и до ttscommit вы можете увидеть измененные данные только на Акс3 с SQL2000 (2005 в режиме 80).
В Оракле и Акс4 с SQL2005 вы не увидите изменений из внешнего процесса до выполнения ttscommit
Попробовал щас на 3.0 sp4 + Oracle изменённые данные нормально читаются.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 29.10.2008, 13:25   #20  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
продолжая оффтоп

запретили не в Аксапте, а именно в бд установкой поумолчанию ее в режим Read-Committed Snapshot Isolation.
В этом контексте совершенно не понятно зачем в find методы понапихали selectLocked(!_update)
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Разноска накладной по проектам Ark DAX: Функционал 3 27.02.2009 13:16
Производство.Разноска отгрузочной накладной в главную книгу. AlexeyBP DAX: Функционал 1 10.04.2007 12:01
Разноска накладной при переходе с 2.5 на 3.0 sred DAX: Функционал 0 09.10.2006 10:51
разноска счета на оплату после разноски накладной OlegKocherga DAX: Функционал 14 12.03.2004 17:48
Разноска операций Закупка, Заказ по счетам ГК по отборочной накладной. Как настроить? May DAX: Функционал 5 01.08.2003 11:13
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 02:56.