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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.09.2008, 20:45   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,987 / 3273 (117) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Сразу оговорюсь что у меня Ax3.0 SP5
Поэтому у вас возможны отличия. Но если в 4-ке код несильно поменялся, то

скорее всего работают методы
\Classes\InventUpd_Physical\updatePhysicalReturnedReceipt
или
\Classes\InventUpd_Physical\updatePhysicalReturnedIssue


На примере
\Classes\InventUpd_Physical\updatePhysicalReturnedReceipt
Там вначале ищется расход (физическое или финансовое движение) по аналитике из строки. Если найден, то на основе него делается возврат, подхватывается аналитика и все такое.

X++:
            while select forupdate inventTrans
                Index hint TransIdIdx
                order by inventDimId Desc
                where inventTrans.inventTransId         == movement.transId()       &&
                      inventTrans.statusIssue           == statusIssue              &&
                      inventTrans.statusReceipt         == StatusReceipt::None      &&
                      inventTrans.packingSlipReturned   == 0
                #InventDimJoin(InventTrans.inventDimId,InventDim,inventDimCriteria,inventDimFlags)
            {
                if (inventTrans.InventTransIdReturn)
                    continue;

                addQty = this.updateTransPhysicalReturnedReceipt(_ledgerVoucher, inventTrans, addQty);


Если что-то не получилось. (Скорее всего это и есть ваш случай) В силу каких то причин не нашлась проводка. (Например, проставлен Номер возвращенного лота inventTrans.InventTransIdReturn - т.е. этот лот кто то уже использовал) то тогда она продолжает поиск без учета аналитик, работает такой код :
X++:
        while select forupdate inventTrans
            Index hint TransIdIdx
            order by inventDimId desc
            where inventTrans.inventTransId         == movement.transId()       &&
                  inventTrans.statusIssue           == statusIssue              &&
                  inventTrans.statusReceipt         == StatusReceipt::None      &&
                  inventTrans.packingSlipReturned   == 0
        {
            if (inventTrans.InventTransIdReturn)
                continue;

            addQty = this.updateTransPhysicalReturnedReceipt(_ledgerVoucher, inventTrans, addQty);
            if (!addQty)
                break;
и тут может произойти "перескок" аналитик.

Ставьте точки останова и смотрите что реально там у вас происходит.

Последний раз редактировалось Logger; 12.09.2008 в 21:09.
За это сообщение автора поблагодарили: evv (1).
Старый 15.09.2008, 23:22   #2  
evv is offline
evv
Участник
 
18 / 10 (1) +
Регистрация: 01.08.2003
Адрес: Санкт-Петербург
Цитата:
Сообщение от Logger Посмотреть сообщение
Сразу оговорюсь что у меня Ax3.0 SP5
Поэтому у вас возможны отличия. Но если в 4-ке код несильно поменялся, то

скорее всего работают методы
\Classes\InventUpd_Physical\updatePhysicalReturnedReceipt
или
\Classes\InventUpd_Physical\updatePhysicalReturnedIssue

тут может произойти "перескок" аналитик.
Спасибо за дельный совет, в четверке действительно все несильно поменялось. Я самостоятельно вышел на эти методы по точкам останова, как Вы и предположили. А поняв эту логику, я понял и то, что информация о строке отборочной накладной, вернее, об использованной в ней аналитике, формируется методом самой таблицы InventJournalBOM. там есть такой метод
X++:
InventMovement inventMovementChild(Common _buffer)
{
//    if (!this.InventReturnFlag && _buffer.TableId == tablenum(ProdBOM))
    if (_buffer.TableId == tablenum(ProdBOM))
    {
        return new InventMov_ProdLine_JournalBOM(_buffer,this);
    }

    return null;
}
который собственно выдает курсор с текущей аналитикой. В случае, если речь идет о возврате (количество < 0), метод возвращает null, и указанные Вами методы выбирают последнюю отгруженную номенклатуру для возврата. После того, как я закомментировал анализ InventReturnFlag, стала возвращаться на склад именно та номенклатура, которая указана в строках отгрузочной накладной на возврат.
Старый 16.09.2008, 09:53   #3  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,987 / 3273 (117) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от evv Посмотреть сообщение
После того, как я закомментировал анализ InventReturnFlag, стала возвращаться на склад именно та номенклатура, которая указана в строках отгрузочной накладной на возврат.
Вообще-то я бы не комментировал это место безусловно для всех случаев. Оно дергается из кучи мест. Мне кажется лучше сделать какой-нить управляющий параметр, который меняет поведение только для этого конкретного случая.
Старый 16.09.2008, 22:49   #4  
evv is offline
evv
Участник
 
18 / 10 (1) +
Регистрация: 01.08.2003
Адрес: Санкт-Петербург
Цитата:
Сообщение от Logger Посмотреть сообщение
Вообще-то я бы не комментировал это место безусловно для всех случаев. Оно дергается из кучи мест. Мне кажется лучше сделать какой-нить управляющий параметр, который меняет поведение только для этого конкретного случая.
Насколько я понимаю, этот метод вызывается только для отборочных накладных в модуле "Производство", а заказчик предпочитает точно указывать аналитику (в частности, серийный номер) при возврате на склад, поэтому в данной ситуации это не должно привести к криминальным последствиям. Но можно и параметр сделать, если кастомер не будет возражать...
Теги
ax3.0, ax4.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Бухгалтерские проводки по отборочной накладной PMS DAX: Функционал 12 24.04.2012 13:45
Проблемы при разноске отборочной накладной Ek@terin@ DAX: Функционал 7 11.12.2008 16:06
Повисание при разноски отборочной накладной Poleax DAX: Функционал 8 14.12.2007 12:46
Отчет по отборочной накладной Uma Turman DAX: Функционал 0 01.08.2006 12:57
Должностные лица в отборочной накладной Zveriok DAX: Функционал 4 27.01.2005 15:28
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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