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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.05.2009, 09:36   #1  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
! Сопоставление, авансовая и курсовая разницы в DAX 4.0
DAX 4.0 SP2 FP1 EE + проект PS_37376_39274.

Этот проект - дополнения по отмене суммовой разницы и добавлению авансовых разниц.

В процедуре сопоставлений появился следующий алгоритм:

Если (не передан первый параметр или в этом параметре поле "Накладная" заполнено) и в одной из проводок сопоставления отмечена галка "Предоплата", то работаем с авансовой разницей, иначе - с курсовой (см. CustVendExchAdjustment_W::isAdvanceAdjustment).

При сопоставлении первый параметр передается, при рассопоставлении - нет.

Получаем следующую проблему:
1. При сопоставлении поле "накладная" не заполнено, получаем курсовую разницу.
2. При рассопоставлении по факту анализируем только галку "Предоплата", получаем тип разницы - авансовая и пытаемся отсторнировать только ее.
3. В итоге в таблице "Журнал разноски по клиентам и поставщикам" (не безызвестная CustVendTransPostingLog_RU, см., например, Баг на форме "Проводки по сопоставлению") остается строка по курсовой разнице, хотя проводки рассопоставлены.
4. При попытке сопоставить проводку заново - выдается ошибка, причина которой - наличие строки из п.3.

Мне кажется, что это - баг. Прошу совета - как лучше поправить? Предложение всегда заполнять поле "Накладная" будет рассматриваться в самую последнюю очередь.
__________________
Ivanhoe as is..

Последний раз редактировалось Ivanhoe; 13.05.2009 в 09:43. Причина: опечатки
Старый 13.05.2009, 13:06   #2  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Поясню, указанный проект выложен вот здесь: https://mbs.microsoft.com/partnersou...rintpage=false (партнерсорс, нужен доступ).
__________________
Ivanhoe as is..
Старый 15.05.2009, 10:59   #3  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
UP!

Никто что ли не ведет в 4.0 учет по РСБУ??
__________________
Ivanhoe as is..
Старый 26.05.2009, 17:29   #4  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
up, что же делать?
__________________
Ivanhoe as is..
Старый 26.05.2009, 19:42   #5  
Jabberwocky is offline
Jabberwocky
Microsoft Dynamics
Аватар для Jabberwocky
Сотрудники Microsoft Dynamics
 
274 / 307 (11) ++++++
Регистрация: 02.09.2005
Адрес: Москва
Если хотите, чтобы Вам помогли, опишите пожалуйста входные условия в терминах операций (напр. операции какого типа сопоставляются, даты и пр.), а не фрагментов кода, которые Вы возможно истолковали неверно.
Авансовая разница возникает при сопоставлении накладных с предоплатами и является по сути "продолжением" накладной.
__________________
You should use Bing before asking dumb questions.
Старый 26.05.2009, 20:25   #6  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Делаю фильтр по первому посту =)

0.Настраиваем авансовые разницы, как описано в руководстве по хот-фиксу.
1. Сопоставляем начисление (поле накладная не заполнено) и предоплату (галка "Предоплата" стоит).
2. Формируется курсовая разница (можем посмотреть ее по кнопке "Проводки по сопоставлению" в форме "Операции" по поставщику).
3. Рассопоставляем операции, в проводках по сопоставлению ОСТАЛАСЬ строка с курсовой разницей.
4. При попытке сопоставить исходные операции заново - ошибка про книги покупок (на самом деле ругается на ОСТАВШУЮСЯ строку).
__________________
Ivanhoe as is..

Последний раз редактировалось Ivanhoe; 26.05.2009 в 20:31.
За это сообщение автора поблагодарили: sukhanchik (3).
Старый 26.05.2009, 20:28   #7  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Цитата:
Сообщение от Jabberwocky Посмотреть сообщение
Авансовая разница возникает при сопоставлении накладных с предоплатами и является по сути "продолжением" накладной.
Согласен! Так и происходит - нет накладной, нет авансовой разницы. НО! При рассопоставлении почему-то ищеться именно авансовая (а не курсовая). Рассопоставление до "исправлений" от МС №PS_37376_39274 работает, после - не работает.

Мне кажется что это ошибка, и про это просто не подумали.
__________________
Ivanhoe as is..
Старый 27.05.2009, 01:00   #8  
Jabberwocky is offline
Jabberwocky
Microsoft Dynamics
Аватар для Jabberwocky
Сотрудники Microsoft Dynamics
 
274 / 307 (11) ++++++
Регистрация: 02.09.2005
Адрес: Москва
Ну, во-первых, проводки из таблицы "Проводки по сопоставлению" (CustVendTransPostingLog_RU) не всегда удаляются при реверсе, - например при рассопоставлении на другую дату они не удаляются, а помечаются признаком "Отменено". Во-вторых, не совсем понятно, что Вы подразумеваете под термином "начисление", - какая это конкретно операция и каким образом формируется?

И наконец, почему Вы решили что при рассопоставлении ищется именно авансовая разница? Отмена сопоставления по постинг логу выполняется в методе CustVendReversePostingLog_RU.doReverse(), условие выглядит следующим образом:

X++:
if ((transPostingLog.AccountNum                    ||
             transPostingLog.AccountNumOffset   ||
             transPostingLog.TaxRefId                  ||
            (transPostingLog.PostingLogType == CustVendTransPostingLogType_RU::AdvanceAdjustment &&
             moduleCustVend                        == ModuleCustVend::Vend)) &&
           (transPostingLog.PostingLogType == CustVendTransPostingLogType_RU::VATTransit ? _postVATTransit : true))
        {
__________________
You should use Bing before asking dumb questions.
Старый 27.05.2009, 10:20   #9  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
!
Для начала, благодарю, что проявили активность, остальные молчат

Цитата:
Сообщение от Jabberwocky Посмотреть сообщение
Ну, во-первых, проводки из таблицы "Проводки по сопоставлению" (CustVendTransPostingLog_RU) не всегда удаляются при реверсе, - например при рассопоставлении на другую дату они не удаляются, а помечаются признаком "Отменено". Во-вторых, не совсем понятно, что Вы подразумеваете под термином "начисление", - какая это конкретно операция и каким образом формируется?
Ну вы же знаете, когда они удаляются, а когда нет? Новички в любом случае помочь мне не смогут (изначально постилось в надежде на людей, которые пользуются авансовыми разницами и понимают что это такое).
Начисление - проводка в общем журнале ГК с типом счета "Поставщик"/"Клиент", поле "накладная" НЕ заполнено.

Цитата:
Сообщение от Jabberwocky Посмотреть сообщение
И наконец, почему Вы решили что при рассопоставлении ищется именно авансовая разница? Отмена сопоставления по постинг логу выполняется в методе CustVendReversePostingLog_RU.doReverse(), условие выглядит следующим образом:

X++:
if ((transPostingLog.AccountNum                    ||
             transPostingLog.AccountNumOffset   ||
             transPostingLog.TaxRefId                  ||
            (transPostingLog.PostingLogType == CustVendTransPostingLogType_RU::AdvanceAdjustment &&
             moduleCustVend                        == ModuleCustVend::Vend)) &&
           (transPostingLog.PostingLogType == CustVendTransPostingLogType_RU::VATTransit ? _postVATTransit : true))
        {
Ну если уже опять вернулись к коду, то могу привести такой лог событий:

\Classes\CustVendExchAdjustment_W\isAdvanceAdjustment
\Classes\CustVendReversePosting\reverseExchAdjustment_RU
\Classes\CustVendReversePosting\restoreCustVendTrans
\Classes\CustVendReversePosting\updateNow
\Data Dictionary\Tables\VendTrans\Methods\reverseTransact
\Classes\FormButtonControl\Clicked

Обратите внимание на последний метод - в нем все дело. А тот код, который вы привели - он ничего не делает, так как туда передается ПУСТАЯ выборка, потому что система "не знает", что нужно сторнировать КУРСОВУЮ.
__________________
Ivanhoe as is..
Старый 27.05.2009, 21:05   #10  
Jabberwocky is offline
Jabberwocky
Microsoft Dynamics
Аватар для Jabberwocky
Сотрудники Microsoft Dynamics
 
274 / 307 (11) ++++++
Регистрация: 02.09.2005
Адрес: Москва
Ок, привожу полный код метода CustVendExchAdjustment_W.isAdvanceAdjustment():

X++:
public static boolean isAdvanceAdjustment(CustVendTrans _firstCustVendTrans,
                                          CustVendTrans _custVendTransDebet,
                                          CustVendTrans _custVendTransCredit)
{
    boolean isAmountDiff = _custVendTransDebet.CurrencyCode  != CompanyInfo::standardCurrency() && _custVendTransDebet.Invoice &&
                           _custVendTransCredit.CurrencyCode == CompanyInfo::standardCurrency() && ! _custVendTransCredit.Invoice;

    if (isAmountDiff && AmountDiffParameters_RU::find().Active)
    {
        return false;
    }

    if (((! _firstCustVendTrans && (_custVendTransDebet.Invoice || _custVendTransCredit.Invoice)) || _firstCustVendTrans.Invoice) &&
        (_custVendTransDebet.Prepayment || _custVendTransCredit.Prepayment)                                                       &&
        LedgerParameters::find().AdvanceAdjustment_W)
    {
        return true;
    }

    return false;
}
Нетрудно заметить, что метод возращает true, если поле Invoice заполнено ХОТЯ БЫ В ОДНОЙ из сопоставляемых проводок - в Вашем случае это поле в обеих проводках пустое и метод вернет false, - что верно, т.к. накладной для переоценки нет и авансовой разницы у нас не было (была курсовая).

А насчет doReverse() - Вы не правы, не буду спорить, просто пройдитесь дебаггером.
__________________
You should use Bing before asking dumb questions.
За это сообщение автора поблагодарили: Ivanhoe (2).
Старый 28.05.2009, 10:50   #11  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Замечательно!
Спасибо за код метода. У меня не так:
X++:
public static boolean isAdvanceAdjustment(CustVendTrans _firstCustVendTrans,
                                          CustVendTrans _custVendTransDebet,
                                          CustVendTrans _custVendTransCredit)
{
    boolean isAmountDiff = _custVendTransDebet.CurrencyCode  != CompanyInfo::standardCurrency() && _custVendTransDebet.Invoice &&
                           _custVendTransCredit.CurrencyCode == CompanyInfo::standardCurrency() && ! _custVendTransCredit.Invoice;

    if (isAmountDiff && AmountDiffParameters_RU::find().Active)
    {
        return false;
    }

    // ОТЛИЧИЯ В УСЛОВИЯХ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
    if ((! _firstCustVendTrans          || _firstCustVendTrans.Invoice)     &&
        (_custVendTransDebet.Prepayment || _custVendTransCredit.Prepayment) &&
        LedgerParameters::find().AdvanceAdjustment_W)   {
        return true;
    }

    return false;
}
Не подскажете, какие хот-фиксы у вас стоят? У меня на тему авансовой разницы только вот эти:
PS_37376_39274
PS_46620
__________________
Ivanhoe as is..
Старый 28.05.2009, 15:41   #12  
Jabberwocky is offline
Jabberwocky
Microsoft Dynamics
Аватар для Jabberwocky
Сотрудники Microsoft Dynamics
 
274 / 307 (11) ++++++
Регистрация: 02.09.2005
Адрес: Москва
Этот хотфикс еще не вышел
__________________
You should use Bing before asking dumb questions.
Старый 28.05.2009, 23:39   #13  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,318 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
А в этом хотфиксе кроме данного метода еще что-то есть и он выйдет? Или этот хотфикс является "личным" ?
__________________
Возможно сделать все. Вопрос времени
Старый 29.05.2009, 11:26   #14  
Jabberwocky is offline
Jabberwocky
Microsoft Dynamics
Аватар для Jabberwocky
Сотрудники Microsoft Dynamics
 
274 / 307 (11) ++++++
Регистрация: 02.09.2005
Адрес: Москва
Выйдет в составе DAX 2009 Eastern Europe. Для решения проблемы автора поста, полагаю, приведенных изменений будет достаточно.
__________________
You should use Bing before asking dumb questions.
Теги
авансовая разница, курсовая разница, ошибка, сопоставление, ax4.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
msdynamicsax: DAX 2009 and MS SQL 2008 Blog bot DAX Blogs 0 09.08.2008 14:05
dax-lessons: Generate XML Documentation Files for a project - DAX 2009 Blog bot DAX Blogs 0 08.08.2008 19:06
dax-lessons: Active directory in Axapta Blog bot DAX Blogs 0 27.08.2007 23:00
Kashperuk Ivan: AxPaint - make your DAX look cool :) Blog bot DAX Blogs 0 26.06.2007 21:00
Kashperuk Ivan: (DAX 3.0) SysExportDialog form extension Blog bot DAX Blogs 1 15.05.2007 19:16

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

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

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