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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.02.2007, 15:09   #1  
ATimTim is offline
ATimTim
Участник
 
395 / 13 (1) ++
Регистрация: 10.06.2004
Адрес: Питер
Вопрос к знатокам алгоритма периодического сопоставления
В классе CustVendAutoSettlement_Cust_RU в методе query
существует код инициализации query:
X++:
protected Query query()
{
    Query                   query = new Query();
    QueryBuildDatasource    qbds;
    QueryBuildRange         qr;

    // CustTransOpen -->
    qbds = query.addDataSource(tableNum(CustTransOpen));
    qbds.addRange(fieldNum(CustTransOpen, DueDate)).value(SysQuery::range(dateFrom, dateTo));
    qbds.addRange(fieldNum(CustTransOpen, AccountNum));

    qbds.addSortField(fieldNum(CustTransOpen, AccountNum));
    qbds.addSortField(fieldNum(CustTransOpen, DueDate));
    qbds.orderMode(OrderMode::ORDERBY);

    // CustTrans -->
    qbds = qbds.addDataSource(tableNum(CustTrans));
    qbds.relations(true);
    qbds.joinMode(JoinMode::INNERJOIN);

    qr = qbds.addRange(fieldNum(CustTrans, Invoice));
    qr.value(SysQuery::valueNotEmptyString());
    qr.status(RangeStatus::LOCKED);

    qr = qbds.addRange(fieldNum(CustTrans, RContractCode));
    qr.status(autoSettleType == AutoSettleType_RU::Contract ? RangeStatus::OPEN : RangeStatus::LOCKED);

    qr = qbds.addRange(fieldNum(CustTrans, RContractAccount));
    qr.status(autoSettleType == AutoSettleType_RU::Contract ? RangeStatus::OPEN : RangeStatus::LOCKED);

    qr = qbds.addRange(fieldNum(CustTrans, AccountNum));
    qr.status(RangeStatus::HIDDEN);

    return query;
}
у меня возник вопрос к условию :

X++:
  qr = qbds.addRange(fieldNum(CustTrans, Invoice));
    qr.value(SysQuery::valueNotEmptyString());
    qr.status(RangeStatus::LOCKED);
Ведь если не указывать номера накладных, к примеру в общих журналах ГК,
по поступлениям и выбытиям ДС по конкретному клиенту, то периодическое сопоставление никогда не сопоставит такие проводки.
Мне интересно, какой потаенный смысл был заложен в это условие.
Старый 14.02.2007, 15:58   #2  
Pavel Pustovalov is offline
Pavel Pustovalov
Участник
 
65 / 11 (1) +
Регистрация: 09.08.2004
Адрес: Omsk
Как мне кажется смысл был в том автоматически сопоставляются только накладные.
Если в общем журнале Вы не указали номера накладной, то сопоставление предоставляется на ваше усмотрение, кто знает что у вас там за проводка и с чем ее нужно сопоставлять и нужно ли.
Старый 14.02.2007, 16:04   #3  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,941 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от ATimTim Посмотреть сообщение
Мне интересно, какой потаенный смысл был заложен в это условие.
Потаенный смысл мне тоже неясен :-)
Похоже Аксапта считает, что если Invoice заполнен то это накладная, если пуст - то платеж и пытается сопоставлять накладные с платежами и другимим накладными, а просто на платежи забивает.

Мы решили проблему сопоставления платежей с платежами тем что заполняли при разноске поле Invoice для тех платежей кторые должны быть сопоставлены с платежами (обычно это сторно было)

Сопоставление заработало - ничего не поломалось.
Старый 14.02.2007, 16:21   #4  
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
Цитата:
Сообщение от Logger
...
Похоже Аксапта считает
...
Посмотрите

CustTrans.payment()
CustTrans.invoice()
CustTrans.exchAdjustment()

Правда, они "глючат". В оплаты попадают проводки по округлению и незначительному расхождению. Я как-то делал более "тонкие" методы для разбора полетов. Со скидками по оплате не работал, но там тоже не исключены нюансы подобного рода.
Цитата:
Сообщение от Logger
...
Мы решили проблему сопоставления платежей с платежами тем что заполняли при разноске поле Invoice для тех платежей кторые должны быть сопоставлены с платежами (обычно это сторно было)
...
Ну, так можно самому запутаться. Хотя я именно так делал в случае, когда нужно было сделать проводки по зачету задолженности (взаимозачет). Клиенту для учета по кассовому методу нужно было как-то находить оплаты (причем по сопоставлению, а сторно оплаты или возврат предоплаты оплатой не считались).
__________________
С уважением,
glibs®
Старый 14.02.2007, 18:19   #5  
zemlyn is offline
zemlyn
Участник
Аватар для zemlyn
 
146 / 44 (2) +++
Регистрация: 28.01.2004
Цитата:
Сообщение от Logger Посмотреть сообщение
Потаенный смысл мне тоже неясен :-)
Похоже Аксапта считает, что если Invoice заполнен то это накладная, .
Наткнулся недавно на такой же "алгоритм" в акте сверки RLedgerSheetServer_ActAdjust*
Старый 14.02.2007, 22:12   #6  
ATimTim is offline
ATimTim
Участник
 
395 / 13 (1) ++
Регистрация: 10.06.2004
Адрес: Питер
Друзья, огромное спасибо!

Термин:
Технический инвойс - инвойс "от балды", по произвольному алгоритму

Т.к. поле инвойс в общих журналах ГК у в наших бизнес-процессах НЕ ИСПОЛЬЗОВАЛОСЬ (а другие журналы для отражения ДДС мы не используем), я пробежался джобиком и проставил у всех строк общих журналов ГК и связанных с ними клиентских проводок (аналогично и у проводок по поставщику) с пустыми инвойсами технические инвойсы (сделал их равными номеру общего журнала ГК ).
Причем проставил технические инвойсы у всех строк (поступления или выбытия не различал - проставил у всех)

Сделал что- то вроде
X++:
update vt
  set vt.invoice = ljt.journalnum
  from VendTrans vt
            inner join
         LedgerJournalTrans ljt 
           on vt.transdate = ljt.transdate 
               and vt.voucher = ljt.voucher
  where ljt.invoice = ''

    

p.s. T-SQL   ,
После этой нехитрой процедуры периодическое сопоставление сработало на 5 баллов
Вот такие дела...

Вывод следующий - если планируете использовать периодическое сопоставление, добивайтесь заполнения инвойсов (VendTrans.invoice и CustTrans.invoice). Делайте это поле обязательным для заполнения или заполняйте его автоматически по своему алгоритму (номерная серия или просто запись в CustTrans.invoice VendTrans.invoice номер накладной (в моем случае, к примеру CustTrans.invoice = LedgerJournalTrans.journalnum ) или voucher.
Или ..... правьте алгоритм периодического сопоставления... я не рискнул и выбрал меньшее из зол, на мой взгляд
Старый 15.02.2007, 00:06   #7  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
Цитата:
Сообщение от ATimTim Посмотреть сообщение
Причем проставил технические инвойсы у всех строк (поступления или выбытия не различал - проставил у всех)
Мы сделали проще - убрали накладную из запроса, чтобы сторно платежей тоже сопоставлялись.
Старый 15.02.2007, 07:02   #8  
ATimTim is offline
ATimTim
Участник
 
395 / 13 (1) ++
Регистрация: 10.06.2004
Адрес: Питер
raz
Мы сделали проще - убрали накладную из запроса, чтобы сторно платежей тоже сопоставлялись.

Именно это я и подразумевал под правкой алгоритма сопоставления. Но для себя решил, что лучше "накормить" аксапту тем что она хочет, нежели "убеждать" ее в том что она этого не хочет
Старый 15.02.2007, 12:29   #9  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,941 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от ATimTim Посмотреть сообщение
я пробежался джобиком и проставил у всех строк общих журналов ГК и связанных с ними клиентских проводок (аналогично и у проводок по поставщику) с пустыми инвойсами технические инвойсы (сделал их равными номеру общего журнала ГК ).

Любопытно все таки аксапту на проектах пилят.
Мы вот тоже придумали проставлять Voucher в поле Invoice (прямо при разноске)

схожие модифы родятся...
Старый 15.02.2007, 12:36   #10  
ATimTim is offline
ATimTim
Участник
 
395 / 13 (1) ++
Регистрация: 10.06.2004
Адрес: Питер
Цитата:
Сообщение от Logger Посмотреть сообщение
Любопытно все таки аксапту на проектах пилят.
Мы вот тоже придумали проставлять Voucher в поле Invoice (прямо при разноске)

схожие модифы родятся...
Да.

Меня в этом варианте не устроило, что в модулях Клиентов и Поставщиков создаются накладные.. Они нам не нужны на проекте.
Старый 14.02.2007, 16:13   #11  
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®
Старый 15.02.2007, 09:14   #12  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
накормив, вы нарушили логическую целостность данных, т.е. данные теперь не соответсвуют реальности.
Старый 15.02.2007, 10:14   #13  
ATimTim is offline
ATimTim
Участник
 
395 / 13 (1) ++
Регистрация: 10.06.2004
Адрес: Питер
Цитата:
Сообщение от raz Посмотреть сообщение
накормив, вы нарушили логическую целостность данных, т.е. данные теперь не соответсвуют реальности.
Согласен.
Поэтому почесав затылок и покусав ногти решил поправить алгоритм, закомментировав условие с инвойсами. Благо, что тренировался я до этого на тестовой базе

Спасибо!
Старый 15.02.2007, 10:32   #14  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
Мы для большей точности допилили сопоставление по аналитикам.
Старый 15.02.2007, 10:52   #15  
ATimTim is offline
ATimTim
Участник
 
395 / 13 (1) ++
Регистрация: 10.06.2004
Адрес: Питер
У нас сопоставление происходит в разрезе договоров.

P.S.
Все уже довольны
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вопрос знатокам сиквела CDR DAX: Программирование 31 14.01.2008 14:30
Вопрос к знатокам Аксапты: Как завести заявку на покупку материалов? tav DAX: Функционал 19 25.07.2006 10:53
вопрос знатокам andreynikolai DAX: Программирование 7 18.11.2003 13:24
Вопрос знатокам о договоре по внедрению Pavel M DAX: Прочие вопросы 30 21.10.2003 10:11
Вопрос знатокам QBE и Query в AXAPTA Maxim Gorbunov DAX: Программирование 6 27.12.2002 13:19
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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