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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.09.2012, 08:31   #1  
Fanygrom is offline
Fanygrom
Участник
MCBMSS
 
18 / 10 (1) +
Регистрация: 20.09.2012
Сопоставление VendTrans
Существует задача..
Есть конкретная сумма на которую необходимо сопоставить документы .
Все необходимо сделать программно.
Как я понял:
1) VendTrans - проводки
2) VendTransOpen - не сопоставленные, частично сопоставленные с оплатой документы
3) VendSettelement - инф. о сопоставлении оплаты и документа

Какие функции использовать для частичного сопоставление нужного документа с оплатой?
нужного документа с оплатой?

Последний раз редактировалось Fanygrom; 27.09.2012 в 08:36.
Старый 27.09.2012, 09:35   #2  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
Через перекрестные ссылки посмотрите, как используется VendTrans::settleTransact(..).
Старый 27.09.2012, 09:51   #3  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
X++:
void settleTrans(VendTrans  _vendTransDebit, VendTrans  _vendTransCredit, VendTable _vendTable, TransDate _transDate = systemDateGet())
{
    CustVendOpenTransManager    manager;
    VendTransOpen               vendTransOpenDebit;
    VendTransOpen               vendTransOpenCredit;
    SpecTransManager            specTransManager = SpecTransManager::construct(_vendTable);
    ;

    if(specTransManager.getSpecTransCount() > 0)
        specTransManager.deleteAll();

    manager = CustVendOpenTransManager::construct(_vendTable);

    vendTransOpenDebit      = _vendTransDebit.transOpen();
    vendTransOpenCredit     = _vendTransCredit.transOpen();

    manager.parmSettlePostingDate(_transDate);
    if (vendTransOpenDebit && vendTransOpenCredit)
    {
        manager.updateTransMarked(vendTransOpenDebit, NoYes::Yes);
        manager.updateTransMarked(vendTransOpenCredit, NoYes::Yes);
        manager.settleMarkedTrans();
    }
Старый 28.09.2012, 05:58   #4  
Fanygrom is offline
Fanygrom
Участник
MCBMSS
 
18 / 10 (1) +
Регистрация: 20.09.2012
Забыл написать Axapta 3.0
И CustVendOpenTransManager найти не могу.
Цитата:
Сообщение от Sada Посмотреть сообщение
X++:
void settleTrans(VendTrans  _vendTransDebit, VendTrans  _vendTransCredit, VendTable _vendTable, TransDate _transDate = systemDateGet())
{
    CustVendOpenTransManager    manager;
    VendTransOpen               vendTransOpenDebit;
    VendTransOpen               vendTransOpenCredit;
    SpecTransManager            specTransManager = SpecTransManager::construct(_vendTable);
    ;

    if(specTransManager.getSpecTransCount() > 0)
        specTransManager.deleteAll();

    manager = CustVendOpenTransManager::construct(_vendTable);

    vendTransOpenDebit      = _vendTransDebit.transOpen();
    vendTransOpenCredit     = _vendTransCredit.transOpen();

    manager.parmSettlePostingDate(_transDate);
    if (vendTransOpenDebit && vendTransOpenCredit)
    {
        manager.updateTransMarked(vendTransOpenDebit, NoYes::Yes);
        manager.updateTransMarked(vendTransOpenCredit, NoYes::Yes);
        manager.settleMarkedTrans();
    }
Объясните пожалуйста, где указывать сумму сопоставления?
Допустим документ на сумму 1000 руб, а необходимо сопоставить только на 500 рублей.

Последний раз редактировалось Fanygrom; 28.09.2012 в 07:20.
Старый 28.09.2012, 10:31   #5  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Ну как вариант разбить проводку на две

X++:
void splitVendTransOpen(VendTrans    _vendTrans)
{
    VendTransOpen       vendTransOpen;
    VendTransOpen       newVendTransOpen;
    ;
    if (this.dutyamount())
    {
        vendTransOpen       = _vendTrans.transOpen(dateNull(), true);
        vendTransOpen.AmountCur = -(taxAmount + this.chargeAmount());
        vendTransOpen.AmountMST = vendTransOpen.AmountCur;
        vendTransOpen.NV_Txt    = this.txtTaxAdminCharge();
        vendTransOpen.doUpdate();

        newVendTransOpen.data(vendTransOpen);
        newVendTransOpen.AmountCur  = -this.dutyamount();
        newVendTransOpen.AmountMST  = newVendTransOpen.AmountCur;
        newVendTransOpen.NV_Txt     = this.txtDuty();
        newVendTransOpen.DueDate    = newVendTransOpen.DueDate + 1;
        newVendTransOpen.doInsert();
    }
}

Последний раз редактировалось Sada; 28.09.2012 в 10:40.
Старый 28.09.2012, 11:08   #6  
Fanygrom is offline
Fanygrom
Участник
MCBMSS
 
18 / 10 (1) +
Регистрация: 20.09.2012
Цитата:
Сообщение от Sada Посмотреть сообщение
X++:
void settleTrans(VendTrans  _vendTransDebit, VendTrans  _vendTransCredit, VendTable _vendTable, TransDate _transDate = systemDateGet())
{
    CustVendOpenTransManager    manager;
    VendTransOpen               vendTransOpenDebit;
    VendTransOpen               vendTransOpenCredit;
    SpecTransManager            specTransManager = SpecTransManager::construct(_vendTable);
    ;

    if(specTransManager.getSpecTransCount() > 0)
        specTransManager.deleteAll();

    manager = CustVendOpenTransManager::construct(_vendTable);

    vendTransOpenDebit      = _vendTransDebit.transOpen();
    vendTransOpenCredit     = _vendTransCredit.transOpen();

    manager.parmSettlePostingDate(_transDate);
    if (vendTransOpenDebit && vendTransOpenCredit)
    {
        manager.updateTransMarked(vendTransOpenDebit, NoYes::Yes);
        manager.updateTransMarked(vendTransOpenCredit, NoYes::Yes);
        manager.settleMarkedTrans();
    }
CustVendOpenTransManager,SpecTransManager таких классов нет в Axapta 3.0
Что делать?
Старый 28.09.2012, 11:21   #7  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
теперь не знаю трёшки под рукой нету

Последний раз редактировалось Sada; 28.09.2012 в 11:28.
Старый 28.09.2012, 11:34   #8  
Krasher is offline
Krasher
Участник
Аватар для Krasher
 
48 / 37 (2) +++
Регистрация: 14.05.2005
автоматическое сопоставление в трёшке реализовано вроде тут:
CustVendAutoSettlement_Vend_RU
CustVendAutoSettlement_RU
CustVendAutoDialog_RU
копать, что бы понять логику и оценить затраты на переделку, можно начать отсюда.
а дальше, наверное, кривая доведёт Вас до таблички SpecTrans, и интересных методов её заполнения, типа OffsetVoucher.updateNow()
Вроде нормально написано, разобраться по коду можно. Удачи!
За это сообщение автора поблагодарили: Fanygrom (1).
Старый 03.10.2012, 14:32   #9  
Fanygrom is offline
Fanygrom
Участник
MCBMSS
 
18 / 10 (1) +
Регистрация: 20.09.2012
Использовал класс Specification и метод create для создания "очереди" на сопоставления в таблице SpecTrans
Затем для сопоставления использовал метод VendTrans::settleTransact();
Вот так задача решена)
Теги
vendtransopen, проводки по сопоставлению, сопоставление

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
kranthiax: Updating The vendTrans Table Blog bot DAX Blogs 0 23.04.2011 07:11
Как для ГК операции в LedgerTrans найти соответствующую операцию в VendTrans? romulis DAX: Программирование 20 29.08.2006 14:10
Сопоставление фактур с оплатами tolstjak DAX: Функционал 3 27.09.2004 18:40
"Сопоставление фактур с оплатами" и "Сопоставление открытых проводок" chel DAX: Функционал 2 16.09.2004 12:03
сопоставление открытых проводок - 'коррекция' в основной валюте фирмы sguryev DAX: База знаний и проекты 0 18.12.2001 15:14
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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