|
|
#1 |
|
Участник
|
Программное создание журнала платежей покупателю
Как корректно прогрммно создать журнал платежей поставщику. Пока я вижу что LedgerJournalEngine кое-где испольуется без формы, а вот LedgerJournalEngine_CustPayment уже нет - и нельзя это сделать. Таким образом, бизнес логика тесно связана с формой. Делал ли кто-нибудь такое?
|
|
|
|
|
#2 |
|
Сенбернар
|
А вот так?
Код:
FormRun fr;
;
fr = classFactory::formRunClassOnClient(new Args('MyForm'));
fr.init();
fr.design().visible(false);
fr.run();
fr.wait();
//
// Использование методов формы
//
fr.close(); |
|
|
|
|
#3 |
|
Участник
|
Цитата:
Сообщение от belugin
Как корректно прогрммно создать журнал платежей поставщику. Пока я вижу что LedgerJournalEngine кое-где испольуется без формы, а вот LedgerJournalEngine_CustPayment уже нет - и нельзя это сделать. Таким образом, бизнес логика тесно связана с формой. Делал ли кто-нибудь такое?
Чем не устраивает подход, изложенный в TutorialLedgerVoucher? Здесь было несколько обсуждений - ссылки внизу страницы. Что-то не так? |
|
|
|
|
#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(); } По ссылкам внизху страницы ничего полезного не нашел. |
|
|
|
|
#5 |
|
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. |
|
|
|
|
#6 |
|
Участник
|
это понятно, есть еще, кстати \Classes\BMblock_CostJournalCreate\createJournals где используется LedgerJournalEngine напрямую.
Но тогда не отработает код в LedgerJournalEngine_CustPayment |
|
|
|
|
#7 |
|
Участник
|
Цитата:
Сообщение от belugin
в TutorialLedgerVoucher не вижу создание журнала платежей вообще.
Главное меню \ Главная книга \ Журналы \ Общий журнал \ Строки \ Функции \ Импорт выписки по счету * Метод импорта настраивается здесь: Главное меню \ Главная книга \ Настройки \ Журналы \ Метод импорта выписки по счету. Посмотри как там сделано. Если работать напрямую с базой, то все очень просто. В ledgerJournalEngine не смотри. Насколько я помню, он сложный для того, чтобы корректно работать с многострочными проводками (изменение даты, контроль сальдо, контроль коррсчета, контроль одобрения и т.п.), а также чтобы корректно отображать сальдо по журналу и ваучеру в верхней части журнала. Не бери в голову.
|
|
|
|
|
#8 |
|
Member
|
Цитата:
Сообщение от belugin
...
Пока я вижу что LedgerJournalEngine кое-где испольуется без формы, а вот LedgerJournalEngine_CustPayment уже нет - и нельзя это сделать. ... Пока я обходился тем, что инициализировал класс от LedgerJournalEngine, а не от LedgerJournalEngine_CustPayment. А вообще он стал "нерабочим" без формы только в локализованной версии, если вы заметили. Буржуи всегда пишут что-то вроде if (ledgerJournalTrans_ds) ledgerJournalTrans_ds.refresh(); а локализаторам до этого дела нет. Можете попробовать поправить класс в буржуйском стиле. PS. А вообще, IMHO, вы на правильном пути.
__________________
С уважением, glibs® |
|
|
|
|
#9 |
|
Участник
|
>>>PS. А вообще, IMHO, вы на правильном пути.
я пока сделал ручками некую неполную имитацию и жду пока консультант посмотрит.Я почти был готов на следующий наворот и частично его реализовал: 1. сделать джоб, который делает класс из методов modified датасурса формы (там тоже часть логики) 2. сделать так чтобы LedgerJournalEngine_CustPayment обращался к методам этого класса, если он установлен, а не к форме. Но там много еще всякого - работа с зависимыми датасурсами и прочее, причем 80% (правило пареты) в данных конкретных условиях никому не понадобится |
|
|
|
|
#10 |
|
Участник
|
Цитата:
Сообщение от belugin
>>>
я пока сделал ручками некую неполную имитацию и жду пока консультант посмотрит.
|
|
|
|
|
#11 |
|
Участник
|
И как успехи?
А функционал, разработанный позже, знает о том, что он работает без интерфейса пользователя? Например, что ему нельзя задвать вопросы. |
|
|
|
|
#12 |
|
Участник
|
По счасливой случайности, он не обращается к пользователю - перекрыта/дополнена функциональность инициализации зависимых полей.
По счастливой случайности, имопрт проходит через общий журнал ГК. Так что фатальных проблем нет. |
|
|
|
| За это сообщение автора поблагодарили: belugin (6). | |