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

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

Для одного клиента мы с mazzy в процедуру пересчета вставляли такой же кусок кода (чистящий ссылки), как и в закрытии.
Чистятся то они чистятся, для закрытия, как я и написал. Но почему-то не для контрактов. Приведу код, на который дал ссылку в первом посте:
Это из метода, который вызывается при пересчете себестоимости и закрытии склада.

X++:
    // clear unused references

    if (inventClosing.AdjustmentType == inventAdjustmentType::Closing && (mapQtyIssue || mapQtyReceipt))
    {
        while select forupdate inventTrans
            index hint openItemIdx
            where inventTrans.ValueOpen         == inventTransOpen::Yes &&
                  inventTrans.ItemId            == _itemId              &&
                  inventTrans.InventRefTransId  != ''
        {
            if (! setPhysicalMarked.in(inventTrans.inventTransId) && this.financialOpenQty(inventTrans))
            {
                if ((inventTrans.Qty > 0 && (! mapQtyIssue   || ! mapQtyIssue.exists(inventTrans.InventTransId)    || abs(mapQtyIssue.lookup(inventTrans.InventTransId)) <  inventAdj::settleQtyDiff())) ||
                    (inventTrans.Qty < 0 && (! mapQtyReceipt || ! mapQtyReceipt.exists(inventTrans.InventTransId)  || abs(mapQtyReceipt.lookup(inventTrans.InventTransId)) <  inventAdj::settleQtyDiff())))
                {
                    if (inventTrans.QtySettled)
                        inventTrans.updateSplit(this.financialOpenQty(inventTrans));

                    if (!InventCostItemDim::isBlanketOrderReference(inventTrans))
                    {
                        inventTrans.InventRefTransId = '';
                        inventTrans.doUpdate();

                        if (! inventTrans.isUpdatedFinancial())
                        {
                            movement = inventTrans.inventMovement(true);
                            if (movement && movement.inventRefTransId() != '')
                            {
                                movement.setInventRefFields(inventRefType::None,'','');
                                movement.updateDoBuffer();
                            }
                        }
                    }
                }
            }
        }
    }
Обратите внимание на строку:
X++:
if (!InventCostItemDim::isBlanketOrderReference(inventTrans))
Вот из-за нее пропускаются строки, ссылающиеся на строки заказов типа Контракт
Старый 30.08.2007, 13:07   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Посмотрел только что всю эту функциональность в 4.0 SP2

При создании заказа из контракта они связываются уже по новому полю - BlanketRefTransId. То есть для контрактов InventRefTransId не заполняется.
А соответственно при пересчете уже все нормально отрабатывает.
Кстати, класс для создания заказа такого уже по другому называется - SalesAutoCreate_ReleaseOrder (был SalesAutoCreate_tmpSalesLine).
Приведенный код для пересчета в 4.0 тоже немного подкорректировали.

Кстати, опять же про 3.0. Не проверял, но скорее всего так:
Проверка
X++:
if (!InventCostItemDim::isBlanketOrderReference(inventTrans))
вообще некорректной получается, если стоит галка "Удаление строк заказа после отгрузки" в параметрах Расчетов с Клиентами.
В методе делается поиск строки контракта по номеру лота. И этой строки может уже не существовать.
Теги
ax3.0, faq, себестоимость

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Пересчет склада в Ax 4.0 mir_ks1 DAX: Функционал 2 24.09.2008 05:56
Denis Fedotenko: Новые поля в складских проводках Blog bot DAX: База знаний и проекты 10 24.05.2007 11:57
Пересчет складских запасов VadimVN DAX: Функционал 5 21.01.2005 09:15
Ошибка при закрытии склада, при закрытии более ранней датой, чем пересчет Berkoff DAX: Функционал 2 25.10.2004 17:52
Ошибка округления в печатной форме и проводках по Заказу при использовании налогов Rafael DAX: Функционал 16 29.01.2002 15:08

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

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

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