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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.08.2007, 11:47   #1  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Пересчет с/с в проводках с заполненным InventRefTransId
AX 3.0 SP5 KR2

В процессе анализа расчета себестоимости по проводкам расхода определенной товарной позиции была обнаружена след. особенность:

Система не корректирует себестоимость в проводках с заполненным InventRefTransId (Ссылка на лот). Очевидно, такие проводки система считает промаркированными с какими-либо проводками прихода -- это нормально.

Однако, в проводках расхода, сформированных по заказу, который создан из контракта (базовая функциональность создания заказа на отпуск), в поле InventRefTransId система заносит ссылку на номер лота исходной строки контракта. При этом такие проводки не являются промаркированными (для строк контракта проводки не создаются вообще). Таким образом, себестоимость списания в таких проводках вычисляется как мгновенная и не пересчитывается в процессе выполнения базовой функциональности пересчета себестоимости.

Процедура закрытия склада также не корректирует себестоимость в таких проводках - вот это условие пропускает проводки, которые ссылаются на строки заказа

Вопрос №1: Почему так сделано? Это "by design"?

Мы изменили функциональность создания проводок по строкам заказа, не заполняя поле "Ссылка на лот" в проводках для строк заказа, созданных из контракта.

Вопрос №2: Чревато ли это какими-либо последствиями? Какими?
За это сообщение автора поблагодарили: Logger (8).
Старый 30.08.2007, 11:53   #2  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Мне кажется, баг.
По вопросу 2: чревато тем, что система не найдет исходную строку Blanket Order и при доставке Release Order не уменьшит остаток и не сменит статус в строке Blanket Order.
За это сообщение автора поблагодарили: kashperuk (3).
Старый 30.08.2007, 11:57   #3  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от EVGL Посмотреть сообщение
Мне кажется, баг.
По вопросу 2: чревато тем, что система не найдет исходную строку Blanket Order и при доставке Release Order не уменьшит остаток и не сменит статус в строке Blanket Order.
Спасибо.
По количеству мы, конечно же, проверили - пересчет кол-ва по контракту отталкивается от ссылки на лот в самой строке заказа. Тут все ОК.

Пересчет при этом выполняется правильно - себестоимость меняется в зависимости от выбранного метода (у нас - FIFO)
Старый 30.08.2007, 12:02   #4  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Цитата:
Сообщение от kashperuk Посмотреть сообщение
По количеству мы, конечно же, проверили - пересчет кол-ва по контракту отталкивается от ссылки на лот в самой строке заказа. Тут все ОК.
А, правильно, речь ведь идет о InventTrans, а не о SalesLine. Тогда все в порядке будет. Коллеги тут для одного клиента вообще всю маркировку во всей системе истребили - и ничего.
Старый 30.08.2007, 12:21   #5  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Есть такое в 3.0. Если запустить закрытие, то такие ссылки чистятся.

Для одного клиента мы с mazzy в процедуру пересчета вставляли такой же кусок кода (чистящий ссылки), как и в закрытии.
__________________
С уважением,
glibs®
Старый 30.08.2007, 12:26   #6  
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   #7  
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))
вообще некорректной получается, если стоит галка "Удаление строк заказа после отгрузки" в параметрах Расчетов с Клиентами.
В методе делается поиск строки контракта по номеру лота. И этой строки может уже не существовать.
Старый 30.08.2007, 13:08   #8  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Хм... Мы над сп3 издевались. Там это как-то работало. Теперь уже не помню.

Поглядел. В сп3 такого условия не было...

Интересненько.

Проблему с маркировкой и ссылками Микрософт обещал побороть в 4.0. В 3.0 вроде как уже не собирался тогда. Смотрите...
__________________
С уважением,
glibs®
Старый 30.08.2007, 13:17   #9  
petr is offline
petr
Участник
Соотечественники
 
557 / 201 (8) ++++++
Регистрация: 30.05.2005
Адрес: Швейцария
Цитата:
Однако, в проводках расхода, сформированных по заказу, который создан из контракта (базовая функциональность создания заказа на отпуск), в поле InventRefTransId система заносит ссылку на номер лота исходной строки контракта. При этом такие проводки не являются промаркированными (для строк контракта проводки не создаются вообще). Таким образом, себестоимость списания в таких проводках вычисляется как мгновенная и не пересчитывается в процессе выполнения базовой функциональности пересчета себестоимости.
Если я вас правильно понял, вы создаете заказ (release order) из контракта (blanket order), и при этом в складской проводке заказа в поле InventRefTransId у вас проставлен лот из строки контракта. Я этого у себя не наблюдаю. Мне кажется так и не может быть в принципе в стандарном функционале.
Старый 30.08.2007, 13:19   #10  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от petr Посмотреть сообщение
Если я вас правильно понял, вы создаете заказ (release order) из контракта (blanket order), и при этом в складской проводке заказа в поле InventRefTransId у вас проставлен лот из строки контракта. Я этого у себя не наблюдаю. Мне кажется так и не может быть в принципе в стандарном функционале.
Это Вы, Петр, уже наверное в АХ 4.0 работаете.
См. тогда пред. сообщение мое
Старый 30.08.2007, 13:27   #11  
petr is offline
petr
Участник
Соотечественники
 
557 / 201 (8) ++++++
Регистрация: 30.05.2005
Адрес: Швейцария
Не, я пробовал и в 3.0 SP4, насколько я понимаю. Но зачем им понадобилось заполнять поле ссылкой на несуществующий лот я не понимаю. (по контракту складские проводки не создаются). Притом ссылка всегда должна быть на противоположную проводку (приход на расход и наоборот). Вообще непонятно, если такое было раньше, то зачем?
Старый 30.08.2007, 13:32   #12  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от petr Посмотреть сообщение
Не, я пробовал и в 3.0 SP4, насколько я понимаю. Но зачем им понадобилось заполнять поле ссылкой на несуществующий лот я не понимаю. (по контракту складские проводки не создаются). Притом ссылка всегда должна быть на противоположную проводку (приход на расход и наоборот). Вообще непонятно, если такое было раньше, то зачем?
Хм. Странно. Должно заполняться и у вас. Потому что заполняется в SP3 и в SP5 - возможно у вас модифицированно как-то?
(1 этап - SalesAutoCreate_tmpSalesLine.setSalesLine - копируется в строку заказа
2 этап - InventMovement.initInventTransFromBuffer - копируется из строки заказа в проводку (используется метод InventMov_Sales.inventRefTransId)

А вот зачем - мне как раз тоже непонятно
За это сообщение автора поблагодарили: aidsua (1).
Старый 30.08.2007, 13:42   #13  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Цитата:
Сообщение от petr
...
Но зачем им понадобилось заполнять поле ссылкой на несуществующий лот я не понимаю.
...
Это не несуществующий лот. Он очень даже существующий.

Просто в контракте не создается складских проводок.

Поэтому лот существует, а вот ссылка на складскую проводку с таким номером лота не существует.
__________________
С уважением,
glibs®
Старый 30.08.2007, 13: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
Случайно обратил внимание.
20000 - номер этой темы.

Юбилейная!
Старый 30.08.2007, 13:56   #15  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
kashperuk, вы маньяк.

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

На всякий случай. Если вы обидчивый, то постарайтесь воспринять это как комплимент.

Стараюсь, стараюсь, не получается
Старый 30.08.2007, 13:57   #17  
petr is offline
petr
Участник
Соотечественники
 
557 / 201 (8) ++++++
Регистрация: 30.05.2005
Адрес: Швейцария
Цитата:
Это не несуществующий лот. Он очень даже существующий.
Номенклатурный номер всегда ссылается на номенклатурный справочник. Если вы создадите складскую проводку с номенклатурным номером, которого нет в номенклатурном справочнике, то можно сказать, что номенклатура в вашей проводке не существует в системе (к ней нельзя перейти как к основной таблице и т.п.) При проверке ссылочной целостноси система выдаст ошибку, что такой номенклатуры нет.

Тоже самое и с номером лота. Ссылка на него есть в строке заказа, но в "справочнике" лотов таблице inventTrans этого лота нет. Поэтому проверка ссылочной целостности должна тут выдавать ошибку "такого номера лота не существует".

P.S. Правдя я никогда этого не делал. Надо будет на досуге попробовать.
Старый 30.08.2007, 14:10   #18  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
petr, вы не правы. Лот — это не складская проводка. Это источник складской проводки (строка складского журнала, заказа, закупки. производственного заказа, журнала в проектах...).

Так что все с точностью до наоборот.

Складских проводок с одинаковым номером лота может быть множество. А вот строк журналов и заказов/закупок с одинаковым номером лота быть не может.

Как может идти речь о ссылке на запись в таблице, если поле-ключ не уникально?
__________________
С уважением,
glibs®
Старый 30.08.2007, 14:23   #19  
petr is offline
petr
Участник
Соотечественники
 
557 / 201 (8) ++++++
Регистрация: 30.05.2005
Адрес: Швейцария
Да, действительно не прав. Спасибо
Теги
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, время: 12:29.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.