|
14.08.2006, 13:06 | #1 |
Участник
|
Программное создание журнала платежей покупателю
Как корректно прогрммно создать журнал платежей поставщику. Пока я вижу что LedgerJournalEngine кое-где испольуется без формы, а вот LedgerJournalEngine_CustPayment уже нет - и нельзя это сделать. Таким образом, бизнес логика тесно связана с формой. Делал ли кто-нибудь такое?
|
|
14.08.2006, 13:20 | #2 |
Сенбернар
|
А вот так?
Код: 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 |
Участник
|
Цитата:
Сообщение от belugin
Как корректно прогрммно создать журнал платежей поставщику. Пока я вижу что LedgerJournalEngine кое-где испольуется без формы, а вот LedgerJournalEngine_CustPayment уже нет - и нельзя это сделать. Таким образом, бизнес логика тесно связана с формой. Делал ли кто-нибудь такое?
Чем не устраивает подход, изложенный в TutorialLedgerVoucher? Здесь было несколько обсуждений - ссылки внизу страницы. Что-то не так? |
|
14.08.2006, 14:01 | #4 |
Участник
|
Цитата:
Сообщение от mazzy
Эм... так кому платежи? поставщику или покупателю?
Цитата:
Сообщение от mazzy
Чем не устраивает подход, изложенный в 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(); } По ссылкам внизху страницы ничего полезного не нашел. |
|
14.08.2006, 14:39 | #5 |
Участник
|
Цитата:
Сообщение от belugin
в TutorialLedgerVoucher не вижу создание журнала платежей вообще.
Главное меню \ Главная книга \ Журналы \ Общий журнал \ Строки \ Функции \ Импорт выписки по счету * Метод импорта настраивается здесь: Главное меню \ Главная книга \ Настройки \ Журналы \ Метод импорта выписки по счету. Посмотри как там сделано. Если работать напрямую с базой, то все очень просто. В ledgerJournalEngine не смотри. Насколько я помню, он сложный для того, чтобы корректно работать с многострочными проводками (изменение даты, контроль сальдо, контроль коррсчета, контроль одобрения и т.п.), а также чтобы корректно отображать сальдо по журналу и ваучеру в верхней части журнала. Не бери в голову. |
|
14.08.2006, 14:18 | #6 |
Microsoft Dynamics
|
Вот пример кода программного создания журнала:
Код: 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 | #7 |
Участник
|
это понятно, есть еще, кстати \Classes\BMblock_CostJournalCreate\createJournals где используется LedgerJournalEngine напрямую.
Но тогда не отработает код в LedgerJournalEngine_CustPayment |
|
16.08.2006, 10:17 | #8 |
Member
|
Цитата:
Сообщение от belugin
...
Пока я вижу что LedgerJournalEngine кое-где испольуется без формы, а вот LedgerJournalEngine_CustPayment уже нет - и нельзя это сделать. ... Пока я обходился тем, что инициализировал класс от LedgerJournalEngine, а не от LedgerJournalEngine_CustPayment. А вообще он стал "нерабочим" без формы только в локализованной версии, если вы заметили. Буржуи всегда пишут что-то вроде if (ledgerJournalTrans_ds) ledgerJournalTrans_ds.refresh(); а локализаторам до этого дела нет. Можете попробовать поправить класс в буржуйском стиле. PS. А вообще, IMHO, вы на правильном пути.
__________________
С уважением, glibs® |
|
16.08.2006, 10:46 | #9 |
Участник
|
>>>PS. А вообще, IMHO, вы на правильном пути.
я пока сделал ручками некую неполную имитацию и жду пока консультант посмотрит. Я почти был готов на следующий наворот и частично его реализовал: 1. сделать джоб, который делает класс из методов modified датасурса формы (там тоже часть логики) 2. сделать так чтобы LedgerJournalEngine_CustPayment обращался к методам этого класса, если он установлен, а не к форме. Но там много еще всякого - работа с зависимыми датасурсами и прочее, причем 80% (правило пареты) в данных конкретных условиях никому не понадобится |
|
17.08.2006, 14:50 | #10 |
Участник
|
Цитата:
Сообщение от belugin
>>> я пока сделал ручками некую неполную имитацию и жду пока консультант посмотрит.
|
|
17.08.2006, 14:56 | #11 |
Участник
|
И как успехи?
А функционал, разработанный позже, знает о том, что он работает без интерфейса пользователя? Например, что ему нельзя задвать вопросы. |
|
17.08.2006, 15:01 | #12 |
Участник
|
По счасливой случайности, он не обращается к пользователю - перекрыта/дополнена функциональность инициализации зависимых полей.
По счастливой случайности, имопрт проходит через общий журнал ГК. Так что фатальных проблем нет. |
|
|
За это сообщение автора поблагодарили: belugin (6). |