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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.08.2006, 13:06   #1  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Программное создание журнала платежей покупателю
Как корректно прогрммно создать журнал платежей поставщику. Пока я вижу что LedgerJournalEngine кое-где испольуется без формы, а вот LedgerJournalEngine_CustPayment уже нет - и нельзя это сделать. Таким образом, бизнес логика тесно связана с формой. Делал ли кто-нибудь такое?
Старый 14.08.2006, 13:20   #2  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
А вот так?

Код:
 
FormRun fr;
;
fr = classFactory::formRunClassOnClient(new Args('MyForm'));
fr.init();
fr.design().visible(false);
fr.run();
fr.wait();
//
// Использование методов формы
// 
fr.close();
Старый 14.08.2006, 13:20   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от belugin
Как корректно прогрммно создать журнал платежей поставщику. Пока я вижу что LedgerJournalEngine кое-где испольуется без формы, а вот LedgerJournalEngine_CustPayment уже нет - и нельзя это сделать. Таким образом, бизнес логика тесно связана с формой. Делал ли кто-нибудь такое?
Эм... так кому платежи? поставщику или покупателю?
Чем не устраивает подход, изложенный в TutorialLedgerVoucher?
Здесь было несколько обсуждений - ссылки внизу страницы. Что-то не так?
__________________
полезное на axForum, github, vk, coub.
Старый 14.08.2006, 14:01   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от mazzy
Эм... так кому платежи? поставщику или покупателю?
и тому и другому.

Цитата:
Сообщение от mazzy
Чем не устраивает подход, изложенный в TutorialLedgerVoucher?
Здесь было несколько обсуждений - ссылки внизу страницы. Что-то не так?
в TutorialLedgerVoucher не вижу создание журнала платежей вообще.

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

вот например, что есть на форме:
\Forms\LedgerJournalTransCustPaym\Data Sources\LedgerJournalTrans\Fields\AccountNum\Methods\modified
X++:
void modified()
{

    super();
    debCredProposal = ledgerJournalEngine.accountModified(ledgerJournalTrans);
    element.setDebCredProposal(false);
    ledgerJournalEngine.initCustPostingProfile(ledgerJournalTrans);

    element.RContractDebitUpdate();
    element.setButtonAccess();
}
дальше можно посмотреть на вызываемый методы LedgerJournalEngine, чтобы увидить сколько там разной интересной логики. Не хотелось бы всю ее переписывать.

По ссылкам внизху страницы ничего полезного не нашел.
Старый 14.08.2006, 14:18   #5  
Jabberwocky is offline
Jabberwocky
Microsoft Dynamics
Аватар для Jabberwocky
Сотрудники Microsoft Dynamics
 
274 / 307 (11) ++++++
Регистрация: 02.09.2005
Адрес: Москва
Вот пример кода программного создания журнала:
Код:
void createIncomingJournal()
{

LedgerJournalNameId incomingName;
LedgerJournalTable incomingJournal;

ledgerJournalTrans incomingTrans;
ledgerJournalTrans ledgerJournalTrans;

LedgerJournalEngine ljeIn;
LedgerJournalEngine ledgerJournalEngine;

NumberSeq numSeq;
ProjTable projTable;
RContractTable rct;
RContractPartnerType rctType;

;

ttsbegin;
select forupdate incomingJournal;
incomingJournal.clear();
incomingJournal.initValue();
incomingJournal.JournalName=incomingName;
incomingJournal.insert();

// Такие вещи позволяет делать только BMLedgerJournalEngine, но не LedgerJournalEngine
ljeIn = new BMLedgerJournalEngine(null);
ljeIn.newJournalActive(incomingJournal);

if(ljeIn)
{
//Строки журнала - исходые данные в таблице, скажем, lines
while select lines
    {
        ledgerJournalTrans=incomingTrans;
        ledgerJournalEngine=ljeIn;
        select forupdate ledgerJournalTrans;
        ledgerJournalTrans.clear();

        ledgerJournalTrans.TransDate=lines.PaymDate;
        ledgerJournalTrans.currencyCode=lines.CurrencyID;
        ledgerJournalTrans.ExchRate=lines.ExchRate;

        ledgerJournalTrans.initValue();
        ledgerJournalTrans.JournalNum=incomingJournal.JournalNum;
        ledgerJournalEngine.numberSeqFormHandlerJournal().parmLedgerJournalTrans(ledgerJournalTrans);
        ledgerJournalEngine.formMethodDataSourceCreatePost();
        ledgerJournalEngine.initValue(ledgerJournalTrans);
    // Fill data

        ledgerJournalTrans.TransDate=lines.PaymDate;
        ledgerJournalTrans.currencyCode=lines.CurrencyID;
        ledgerJournalTrans.ExchRate=lines.ExchRate;

        ledgerJournalTrans.accountType=lines.AccountType;
        ledgerJournalTrans.AccountNum=lines.Account;
        ledgerJournalTrans.offsetAccountType=lines.offsetAccountType;
        ledgerJournalTrans.OffsetAccount=lines.offsetAccount;

        if(AmountDebit)
            ledgerJournalTrans.AmountCurDebit=lines.AmountDebit;
        else if(AmountCredit)
            ledgerJournalTrans.AmountCurCredit=lines.AmountCredit;

        ledgerJournalTrans.Txt=lines.TransTxt;
        ledgerJournalTrans.DocumentNum=lines.DocumentNum;
        ledgerJournalTrans.DocumentDate=lines.PaymDate;

    // uhh. Validate and write
        ledgerJournalTrans.validateWrite();
        ledgerJournalEngine.preWrite(ledgerJournalTrans);
        ledgerJournalEngine.formMethodDataSourceWritePre();
        ledgerJournalTrans.write();
        ledgerJournalEngine.write(ledgerJournalTrans);
    }//while select lines
}// if(ljeIn)
ttscommit;
if(ljeIn)
    info(strfmt("Создан журнал входящих платежей %1", incomingJournal.JournalNum));
}
__________________
You should use Bing before asking dumb questions.

Последний раз редактировалось Jabberwocky; 14.08.2006 в 14:26.
Старый 14.08.2006, 14:30   #6  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
это понятно, есть еще, кстати \Classes\BMblock_CostJournalCreate\createJournals где используется LedgerJournalEngine напрямую.

Но тогда не отработает код в LedgerJournalEngine_CustPayment
Старый 14.08.2006, 14:39   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от belugin
в TutorialLedgerVoucher не вижу создание журнала платежей вообще.
А... извини, протормозил.

Главное меню \ Главная книга \ Журналы \ Общий журнал \ Строки \ Функции \ Импорт выписки по счету *

Метод импорта настраивается здесь: Главное меню \ Главная книга \ Настройки \ Журналы \ Метод импорта выписки по счету.

Посмотри как там сделано.
Если работать напрямую с базой, то все очень просто.

В ledgerJournalEngine не смотри.
Насколько я помню, он сложный для того, чтобы корректно работать с многострочными проводками (изменение даты, контроль сальдо, контроль коррсчета, контроль одобрения и т.п.), а также чтобы корректно отображать сальдо по журналу и ваучеру в верхней части журнала.
Не бери в голову.
__________________
полезное на axForum, github, vk, coub.
Старый 16.08.2006, 10:17   #8  
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
Цитата:
Сообщение от belugin
...
Пока я вижу что LedgerJournalEngine кое-где испольуется без формы, а вот LedgerJournalEngine_CustPayment уже нет - и нельзя это сделать.
...
Меня в свое время приучили пользоваться этим классом, и с тех пор я с ним не расстаюсь.

Пока я обходился тем, что инициализировал класс от LedgerJournalEngine, а не от LedgerJournalEngine_CustPayment.

А вообще он стал "нерабочим" без формы только в локализованной версии, если вы заметили. Буржуи всегда пишут что-то вроде

if (ledgerJournalTrans_ds)
ledgerJournalTrans_ds.refresh();

а локализаторам до этого дела нет.

Можете попробовать поправить класс в буржуйском стиле.

PS. А вообще, IMHO, вы на правильном пути.
__________________
С уважением,
glibs®
Старый 16.08.2006, 10:46   #9  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
>>>PS. А вообще, IMHO, вы на правильном пути.

я пока сделал ручками некую неполную имитацию и жду пока консультант посмотрит.

Я почти был готов на следующий наворот и частично его реализовал:
1. сделать джоб, который делает класс из методов modified датасурса формы (там тоже часть логики)
2. сделать так чтобы LedgerJournalEngine_CustPayment обращался к методам этого класса, если он установлен, а не к форме.

Но там много еще всякого - работа с зависимыми датасурсами и прочее, причем 80% (правило пареты) в данных конкретных условиях никому не понадобится
Старый 17.08.2006, 14:50   #10  
mau is offline
mau
Участник
 
34 / 24 (1) +++
Регистрация: 12.03.2003
Адрес: Москва
Цитата:
Сообщение от belugin
>>> я пока сделал ручками некую неполную имитацию и жду пока консультант посмотрит.
У нас при импорте из клиент-банка тоже был сделана "неполная имитпция". Через полгода спохватились - при импорте не отрабатывает половина необходимого функционала, реализованная позже. Сейчас переделываем на LedgerJournalEngine.
Старый 17.08.2006, 14:56   #11  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
И как успехи?

А функционал, разработанный позже, знает о том, что он работает без интерфейса пользователя? Например, что ему нельзя задвать вопросы.
Старый 17.08.2006, 15:01   #12  
mau is offline
mau
Участник
 
34 / 24 (1) +++
Регистрация: 12.03.2003
Адрес: Москва
По счасливой случайности, он не обращается к пользователю - перекрыта/дополнена функциональность инициализации зависимых полей.
По счастливой случайности, имопрт проходит через общий журнал ГК.
Так что фатальных проблем нет.
За это сообщение автора поблагодарили: belugin (6).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Программное создание платежей по заказу murad DAX: Программирование 4 06.06.2006 18:29
Программное создание строк журнала переноса Freeangel DAX: Программирование 6 25.04.2006 18:31
Создание нового типа журнала в Управлении запасами vasiliy DAX: Программирование 2 03.11.2005 14:46
Создание журнала инвентаризации Sanya DAX: Функционал 6 19.08.2005 17:06
Экспорт журнала платежей ax_f DAX: Функционал 25 25.06.2004 11:08

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

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

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