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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.03.2009, 19:16   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,876 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Расщепление InventSplitTrans_Remain и коррекция в наличии
Привет всем
Хотел бы обсудить работу механизма расщепления проводок InventTrans в Аксапте 3.0 SP5
(класс \Classes\InventSplitTrans_Remain)
Выяснились некоторые неприятные моменты.
Суть баги в том, что если мы имеем частично закрытую приходную проводку то при её расщеплении, может оказаться так, что сумма сопоставления в проводке и сумма проводки не будут совпадать. (Причина этого в том что система некорректно обрабатывает ошибки округления) Из-за этого в дальнейшем проводка никогда не закрывается и ломается функция Коррекция-В наличии.

Рассмотрим пример.
1. 1-е марта делаем приход на 1080 штук, сумма 10983,05
2. 2-е марта делаем 2 расхода по 30 штук. (Для воспроизведения бага важно чтобы было именно 2 расхода по 30 а не 1 по 60)
3. Закрываем склад на 2-е марта (или позднее - это непринципиально)

Что получается:
В приходной проводке имеем Закрытое количество (QtySettled) 60
Рассчитанная сумма (CostAmountSettled) 610,16

Если сделать Коррекция-В наличии на процент -100 т.е. попытаться обнулить остаток, то система выдаст ошибку в момент расщепления, которое выполняется при такой коррекции.

Тогда сделаем просто расщепление проводки. Проводки - Функции - Разбиение
Укажем количество 1020, т.е. оставшаяся после расщепления проводка должна закрыться, так как для неё будет qtySettled == Qty
Но этого не происходит, потому что при расщеплении система записала в InventTrans.CostAmountPosted сумму 610,17 в то время как
CostAmountSettled == 610,16
(Проводка не закрывается потому что в методе InventTrans.setClosedOpen() не отрабатывает условие на закрытие проводки
X++:
        case this.isUpdatedFinancial()                                    &&
             abs(this.qty - this.qtySettled) < InventAdj::settleQtyDiff() &&
             Currency::amount(this.costValue() - this.costAmountSettled) == 0 :
Соответственно в открытой части проводки CostAmountPosted == 10372,88 Qty == 1020

Теперь понятно почему при выполнении функции Коррекция - В наличии была ошибка.
Ошибка происходит потому что сумма, которую надо сминусовать рассчитывается по нерасщепленной проводке (\Classes\InventAdj_SumUp\updateInvent) и равна 10372,89 а после расщепления из-за неправильных округлений сумма в открытой проводке равна 10372,88 поэтому при коррекции сумма положительной проводки загоняется в минус на 1 копейку и возникает ошибка.


Во вложении прилагается попытка исправления данной баги. Суть в том, что при расщеплении система проверяет полностью ли закрыта проводка по количеству и если да, то скидывает все округления в поле InventTrans.CostAmountPosted искусственно подгоняя себестоимость проводки под сумму (InventTrans.CostAmountSettled)

При этом не совсем понятно что делать с остальными полями себестоимости
costAmountStd
costAmountPhysical
costAmountOperations

Поскольку costAmountOperations обычно равен costAmountPosted то аналогичные исправления я делаю и в costAmountOperations.
Вложения
Тип файла: rar GRD_fixInventTransSplitAxForum_pkoz.rar (4.5 Кб, 93 просмотров)
За это сообщение автора поблагодарили: fed (3), gl00mie (7), Aquarius (1).
Теги
creditnote, inventsplittrans, inventsplittrans_remain, коррекция в наличии, коррекция себестоимости, немедленное получение, ошибка, расщепление проводок, сопоставление

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Коррекция себестоимости Лёlya DAX: Функционал 10 28.09.2007 14:48
Коррекция стоимости запасов в наличии paul_n DAX: Функционал 7 12.10.2005 22:33
Печать складских отчетов и коррекция себестоимости kvasia DAX: Функционал 23 05.10.2005 15:12
коррекция запасов в наличии Ser DAX: Функционал 2 09.03.2004 17:33
Номнклатура без запасов в запросе "В наличии" Van DAX: Функционал 2 03.03.2004 14:26

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:09.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.