|  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:18 | #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. | 
|  | 
|  14.08.2006, 14:30 | #6 | 
| Участник | 
			
			это понятно, есть еще, кстати \Classes\BMblock_CostJournalCreate\createJournals где используется LedgerJournalEngine напрямую. Но тогда не отработает код в LedgerJournalEngine_CustPayment | 
|  | 
|  14.08.2006, 14:39 | #7 | 
| Участник | Цитата: 
		
			Сообщение от belugin
			
			 в TutorialLedgerVoucher не вижу создание журнала платежей вообще. Главное меню \ Главная книга \ Журналы \ Общий журнал \ Строки \ Функции \ Импорт выписки по счету * Метод импорта настраивается здесь: Главное меню \ Главная книга \ Настройки \ Журналы \ Метод импорта выписки по счету. Посмотри как там сделано. Если работать напрямую с базой, то все очень просто. В ledgerJournalEngine не смотри. Насколько я помню, он сложный для того, чтобы корректно работать с многострочными проводками (изменение даты, контроль сальдо, контроль коррсчета, контроль одобрения и т.п.), а также чтобы корректно отображать сальдо по журналу и ваучеру в верхней части журнала. Не бери в голову.   | 
|  | 
|  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). | |