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:14   #7  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от Lemming Посмотреть сообщение
Эмм..а если не сложно, можно поподробней?
Обновление данных в базе происходит при выполнении команды ttscommit. Если например проапдейтить поле в таблице. и не закрыть транзакцию, то из базы будет выбрана информация с ещё не изменённым полем.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 29.10.2008, 11:20   #8  
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:13   #9  
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:15   #10  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от ZVV Посмотреть сообщение
Ну Вы загнули конечно.
Поправьте если не прав
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
За это сообщение автора поблагодарили: ZVV (-1).
Старый 29.10.2008, 11:36   #11  
kalex_a is offline
kalex_a
Участник
Аватар для kalex_a
Самостоятельные клиенты AX
MCBMSS
 
160 / 19 (1) ++
Регистрация: 26.11.2007
Адрес: Казахстан
Спасибо ZVV, действително с InventReceivedNow помогло.
Старый 29.10.2008, 11:56   #12  
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   #13  
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   #14  
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   #15  
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   #16  
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   #17  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
продолжая оффтоп

запретили не в Аксапте, а именно в бд установкой поумолчанию ее в режим Read-Committed Snapshot Isolation.
В этом контексте совершенно не понятно зачем в find методы понапихали selectLocked(!_update)
Старый 29.10.2008, 13:33   #18  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Миш, странно... по общему месту работы помню, что нельзя было в одной сессии отлаживать разноску документа, а во второй смотреть за обновлением данных.
Старый 29.10.2008, 13:43   #19  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от Wamr Посмотреть сообщение
Миш, странно... по общему месту работы помню, что нельзя было в одной сессии отлаживать разноску документа, а во второй смотреть за обновлением данных.
Я не знал об этом и никогда не обращал на это внимание.
Как я делаю.
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;
}
На втором select смотрю t.Field1 = "3". Значит обновилось.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 29.10.2008, 13:38   #20  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
2 Wamr
Так это для блокировки изменяемых данных сделано.
Т.е. прочитать в другой транзации можно и изменений там не будет видно, но при попытке проапдейтить будет блокировка.
__________________
Axapta v.3.0 sp5 kr2
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Разноска накладной по проектам 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, время: 01:41.