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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.03.2009, 04:12   #1  
Qaz Qwerty is offline
Qaz Qwerty
китайский стажер
 
152 / 37 (2) +++
Регистрация: 12.05.2008
Customer Aging Report / Отчет по срокам оплаты для клиента - неправильный баланс
Этот отчет не соответсвует GL. Показывает некорректный баланс, это как то связано с exchange adjustments ... Был хотфикс от Microsoft, загрузили... Ничего не изменилось. Может я хотфиксы не умею загружать? А чего там уметь вроде бы, импортировал проект и все. Может кто сталкивался с проблемой? Сутки уже голову ломаю...
__________________
Может быть выйдет, а может не-е-е-ет...
Новая песня вместо штиблет..
Старый 21.03.2009, 17:56   #2  
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
Напишите хоть версию. А РК он соответствует?
__________________
С уважением,
glibs®
Старый 22.03.2009, 06:13   #3  
Qaz Qwerty is offline
Qaz Qwerty
китайский стажер
 
152 / 37 (2) +++
Регистрация: 12.05.2008
Прошу прощения, DAX 4.0.2501.
РК - это что за зверь? У меня пробелы в русской терминологии...
Не соответствует оборотной ведомости по клиенту (customer balance list).
__________________
Может быть выйдет, а может не-е-е-ет...
Новая песня вместо штиблет..
Старый 22.03.2009, 12:04   #4  
Qaz Qwerty is offline
Qaz Qwerty
китайский стажер
 
152 / 37 (2) +++
Регистрация: 12.05.2008
Как я понимаю, разница возникает за счет двух моментов:
1. AR Aging report почему то берет не все exch. adj., сопоставленные против инвойсов., вошедших в отчет. Часть берет, а часть - не берет. Например, она не берет в отчет проводки по exch. adj, закрытые до даты отчета. И не только их, но сумма остальных проводок дает ноль, так как эти exch. adjustments закрываются следующим месяцем.

2. AR aging report берет открытые проводки из таблицы CustTransOpen. Я не понимаю зачем, ведь данные в отчете должны считаться на основании CustTrans?

Ничего не понимаю, каша в голове...
__________________
Может быть выйдет, а может не-е-е-ет...
Новая песня вместо штиблет..
Старый 02.04.2009, 04:14   #5  
Qaz Qwerty is offline
Qaz Qwerty
китайский стажер
 
152 / 37 (2) +++
Регистрация: 12.05.2008
:(
Время идет, а проблема остается.
Частью проблемы было, что Аксапта не брала часть проводок в расчет, например exchange adjustments.
В результате разнообразных игр с запросом, сейчас отчет совпадает с балансом по клиенту в большинстве случаев, зато выяснилось что проблема есть не только там, где есть exchange adjustments...
Неужели никто не сталкивался с этой проблемой?

Кстати, может кто-нибудь в курсе, почему в методе queryRunClosedTransactions класса условие выглядит как:

X++:
queryRun.query().dataSourceTable(tablenum(CustSettlement)).findRange(fieldnum(CustSettlement, TransDate)).value(queryRange(transactionDate, dateMax()));
...
X++:
queryRun.query().dataSourceTable(tablenum(CustSettlement)).findRange(fieldnum(CustSettlement, TransDate)).value(queryRange(transactionDate, dateMax()));
Мне кажется, что логично было бы использовать transactionDate+1 ....
__________________
Может быть выйдет, а может не-е-е-ет...
Новая песня вместо штиблет..
Старый 02.04.2009, 05:35   #6  
Qaz Qwerty is offline
Qaz Qwerty
китайский стажер
 
152 / 37 (2) +++
Регистрация: 12.05.2008
С ума сойти, обнаружился еще один источник проблемы:
Например, есть инвойс закрытый двумя платежами. Почему то Closing Date для инвойса - дата первого платежа, а не последнего. Такая проблема встречается "иногда".

Но почему!?
__________________
Может быть выйдет, а может не-е-е-ет...
Новая песня вместо штиблет..
Старый 02.04.2009, 08:26   #7  
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
Как вы определяете очередность платежей? По дате платежа или по очередности сопоставления?

С ума сойти не сложно. Сложнее вылечиться. Так что нервы стоит беречь.
__________________
С уважением,
glibs®
Старый 02.04.2009, 08:35   #8  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от Qaz Qwerty Посмотреть сообщение
Такая проблема встречается "иногда"
Отчего же, весьма устойчивый эффект
Цитата:
Но почему!?
см. CustVendSettle_Cust.postClosing()
__________________
-ТСЯ или -ТЬСЯ ?
Старый 03.04.2009, 05:53   #9  
Qaz Qwerty is offline
Qaz Qwerty
китайский стажер
 
152 / 37 (2) +++
Регистрация: 12.05.2008
Цитата:
Сообщение от glibs Посмотреть сообщение
Как вы определяете очередность платежей? По дате платежа или по очередности сопоставления?
Извините меня, Глеб, но я не понимаю вопроса Это вопрос о настройках аксапты? Я не знаю таких настроек...
Или это вопрос о том, как мы хотим сопоставлять? По бытовой логике дата закрытия инвойса должна быть равна дате последнего платежа, в каком бы порядке все это не сопоставлялось. Иначе это приводит к ошибкам в отчете.
__________________
Может быть выйдет, а может не-е-е-ет...
Новая песня вместо штиблет..
Старый 03.04.2009, 06:01   #10  
Qaz Qwerty is offline
Qaz Qwerty
китайский стажер
 
152 / 37 (2) +++
Регистрация: 12.05.2008
Цитата:
Сообщение от Vadik Посмотреть сообщение
Отчего же, весьма устойчивый эффект
см. CustVendSettle_Cust.postClosing()
Я не понимаю, в коде написано:
X++:
 _custTrans.Closed = CustVendTransData::construct(_custTrans).maxSettlementDate(_postingDate);
Смотрим дальше:
X++:
select maxof(TransDate) from custVendSettlement
            where custVendSettlement.TransRecId == custVendTrans.RecId;
...

return max(custVendSettlement.TransDate, _transDate);
Так по логике должно возвращать самую позднюю дату. У меня дата последнего платежа, она же дата сопоставления последнего платежа март 2008, а закрыт инвойс сентябрем 2007 - по дате первого платежа.
__________________
Может быть выйдет, а может не-е-е-ет...
Новая песня вместо штиблет..
Старый 06.04.2009, 08:17   #11  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Qaz Qwerty Посмотреть сообщение
2. AR aging report берет открытые проводки из таблицы CustTransOpen. Я не понимаю зачем, ведь данные в отчете должны считаться на основании CustTrans?
Оптимизация.

Просто записей в CustTransOpen должно быть существено меньше при правильном регламенте (платежи с отгрузками сопоставляются). А закрытые записи из CustTrans дают в сумме 0 баланс по определению.

Кроме того, при правильном ведении базы и, если программист не вмешивался в бездумно в таблицы, то сумма custTransOpen должна совпадать с суммой незакрытых проводок в CustTrans.

В общем, повышают производительность.
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: Qaz Qwerty (1).
Старый 06.04.2009, 11:40   #12  
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
Цитата:
Сообщение от Vadik
...
см. CustVendSettle_Cust.postClosing()
...
В буржуйской версии — может быть (и то не уверен, т.к. там вроде как условие на закрывающий профиль разноски и проверку того, что они различные, хотя я еще не проснулся, могло и померещиться). Но в русской сопоставление пере... гм-гм... пере... переписано. Под всякие там книжки покупок и продаж.

Действо в русской версии происходит тут.

АОТ\Classes\CustVendSettle.settleNow()

Место выглядит вот так

X++:
            if (custVendTransCredit.AmountCur == custVendTransCredit.SettleAmountCur)
            {
                if (maxClosingDate)
                {
                    custVendTransCredit.Closed   = CustVendTransData::construct(custVendTransDebet).maxSettlementDate_W(transactionDate);
                }
                else
                {
                    custVendTransCredit.Closed  = transactionDate;
                }
                settleAmountMSTCredit     = custVendTransCredit.AmountMST - (custVendTransCredit.SettleAmountMST - custVendTransCredit.ExchAdjustmentRealized);
                specTransCredit.Balance01 = 0;
            }
Параметр такой таки есть в настройках ГК.

Значит отчет, говорите, не работает? Очень хорошо . Привет локализаторам.

А у вас галка в параметрах стоит? Если нет, попробуйте поставить и проверить, какой будет эффект после ее проставления с т.з. корректности построения отчета.

PS. По-русски параметр называется "Максимальная дата закрытия.".
__________________
С уважением,
glibs®

Последний раз редактировалось glibs; 06.04.2009 в 11:43.
Старый 06.04.2009, 12:33   #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
Цитата:
Сообщение от Qaz Qwerty
...
По бытовой логике дата закрытия инвойса должна быть равна дате последнего платежа, в каком бы порядке все это не сопоставлялось. Иначе это приводит к ошибкам в отчете.
...
Хм...

Я посмотрел буржуйскую версию. Там в инвойсе проставляется дата оплаты, с которой он был сопоставлен физически последней (если она закрывает инвойс). Без вариантов.

В тексте подсказки к полю написано: "Date ot total settlement of the transaction". Это в принципе соответствует тому, что и происходит.

В тексте справки текст неоднозначно трактуемый.

"...
If the transaction has been settled, the date for the full settlement is displayed. This date corresponds to the transaction date of the final payment. If the field is empty, the transaction has not yet been fully settled.

For example, if a prepayment posted on January 1 is settled against an invoice posted on February 1, the invoice date is displayed.
..."

А ваша бытовая логика чем аргументирована?

Вы уверены, что от даты закрытия зависит корректность построения отчета?
__________________
С уважением,
glibs®
За это сообщение автора поблагодарили: Qaz Qwerty (1).
Старый 11.04.2009, 05:37   #14  
Qaz Qwerty is offline
Qaz Qwerty
китайский стажер
 
152 / 37 (2) +++
Регистрация: 12.05.2008
;)
glibs, спасибо огромной за наводку на параметр, он нашелся на закладке "Sales tax" в параметрах главной книги и называется "Settlement / Latest date for closing" .
И теперь дата закрытия всегда дата последнего платежа.

Работает действительно АОТ\Classes\CustVendSettle.settleNow() .

Mazzy, спасибо за объяснение по поводу использования CustTransOpen . Логично.

По поводу того, почему отчет не работает в случае, когда дата закрытия не равна дате последнего платежа.

Например, мы закрыли инвойс платежами от 10 октября и от 15 сентября и формируем отчет на 30 сентября. Для отчета выбираются все проводки по клиенту, проведенные ДО даты отчета, закрытые ПОСЛЕ даты отчета, сопоставленные ПОСЛЕ даты отчета. Смотрим CustBalanceList.queryRunClosedTransactions.

X++:
 queryRun.query().dataSourceTable(tablenum(CustTrans)).findRange(fieldnum(CustTrans, AccountNum)).value(queryValue(_custTable.AccountNum));
    queryRun.query().dataSourceTable(tablenum(CustTrans)).findRange(fieldnum(CustTrans, TransDate)) .value(queryRange(dateNull(),transactionDate));
    queryRun.query().dataSourceTable(tablenum(CustTrans)).findRange(fieldnum(CustTrans, Closed)).value(SysQuery::valueEmptyString() + ',' + queryRange(transactionDate, dateMax()));

    if (!printReversed)
    {
...
    }

    queryRun.query().dataSourceTable(tablenum(CustSettlement)).findRange(fieldnum(CustSettlement, TransDate)).value(queryRange(transactionDate, dateMax()));
Дата закрытия инвойса - 15 сентября, то есть он не попадает в выборку для отчета. Между тем, по нему по состоянию на 30 сентября еще есть задолженность, ведь платеж от 10 октября еще физически не пришел.

Таким образом, баланс по клиенту (простая сумма всех проводок до определенного числа) будет расходиться с Aging Report.

Так ведь?

Вторая проблема с exchange adjustments. Тоже пришлось корректировать ручками.
__________________
Может быть выйдет, а может не-е-е-ет...
Новая песня вместо штиблет..
Теги
aging report, ошибка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Customer Aging Report (DAX 4.0) Qaz Qwerty DAX: Программирование 4 31.10.2008 22:49
Dynamics AX: Dynamics AX project success - Customer Ownership & Expectations Blog bot DAX Blogs 0 07.08.2007 21:10
Report:можно ли избавиться от "Отчет не содежит данных" Arahnid DAX: Программирование 4 29.05.2007 10:04
Говорят вышел SP2 для Axapta 3. Кто нибуть что знает на эту тему? soin DAX: Прочие вопросы 10 13.10.2003 10:43
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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