Hi all,
Today i came across with different type of requirement, Sometimes we need to populate/Create Journals thru codding.
Bellow are the whole codeunit with business logic.
OBJECT Codeunit 50081 Populate Journals
{
OBJECT-PROPERTIES
{
Date=10/05/16;
Time=[ 6:33:05 AM];
Modified=Yes;
Version List=Sbinesh;
}
PROPERTIES
{
OnRun=BEGIN
CLEARLASTERROR;
IF NOT PopulateSalesJournal THEN
ERROR('Not populated, for more info read bellow lines\\%1',GETLASTERRORTEXT);
IF NOT PopulatePurchaseJournal THEN
ERROR('Not populated, for more info read bellow lines\\%1',GETLASTERRORTEXT);
END;
}
CODE
{
[TryFunction]
PROCEDURE PopulateSalesJournal@1000000000();
VAR
GenJournalTemplate@1000000006 : Record 80;
GenJournalLine@1000000005 : Record 81;
GenJournalBatch@1000000004 : Record 232;
CustLedgerEntry@1000000003 : Record 21;
CustLedgerEntryBuffer@1000000002 : Record 80021;
GenJournalTemplateName@1000000001 : Text;
GenJournalBatchName@1000000000 : Text;
LineNo@1000000007 : Integer;
MyDialog@1000000008 : Dialog;
CountL@1000000009 : Integer;
BEGIN
IF GenJournalTemplate.GET('SALES') THEN
GenJournalTemplateName := GenJournalTemplate.Name;
IF GenJournalBatch.GET(GenJournalTemplateName,'DEFAULT') THEN
GenJournalBatchName := GenJournalBatch.Name;
CustLedgerEntryBuffer.RESET;
IF CustLedgerEntryBuffer.FINDSET THEN BEGIN
GenJournalLine.RESET;
GenJournalLine.SETRANGE(GenJournalLine."Journal Template Name",GenJournalTemplateName);
GenJournalLine.SETRANGE(GenJournalLine."Journal Batch Name",GenJournalBatchName);
IF GenJournalLine.FINDLAST THEN
LineNo := GenJournalLine."Line No."
ELSE
CLEAR(LineNo);
MyDialog.OPEN('Record populating... #1###############');
REPEAT
LineNo += 10000;
GenJournalLine.INIT;
GenJournalLine.VALIDATE(GenJournalLine."Journal Template Name",GenJournalTemplateName);
GenJournalLine.VALIDATE(GenJournalLine."Journal Batch Name",GenJournalBatchName);
GenJournalLine.VALIDATE("Line No.",LineNo);
GenJournalLine.VALIDATE(GenJournalLine."Posting Date",CustLedgerEntryBuffer."Posting Date");
GenJournalLine.VALIDATE(GenJournalLine."Document Type",CustLedgerEntryBuffer."Document Type");
GenJournalLine.VALIDATE(GenJournalLine."Document No.",CustLedgerEntryBuffer."Document No.");
GenJournalLine.VALIDATE(GenJournalLine."Account Type",GenJournalLine."Account Type"::Customer);//Bcoz in Buffer table 1 option is there.
GenJournalLine.VALIDATE(GenJournalLine."Account No.",CustLedgerEntryBuffer."Account No.");
GenJournalLine.VALIDATE(GenJournalLine.Description,CustLedgerEntryBuffer.Description);
GenJournalLine.VALIDATE(GenJournalLine.Amount,CustLedgerEntryBuffer."Remaining Amount");
GenJournalLine.VALIDATE(GenJournalLine."Bal. Account Type",GenJournalLine."Bal. Account Type"::"G/L Account");
GenJournalLine.VALIDATE(GenJournalLine."Bal. Account No.",'31040');
GenJournalLine.VALIDATE(GenJournalLine."External Document No.",CustLedgerEntryBuffer."External Document No.");
GenJournalLine.VALIDATE(GenJournalLine."Due Date",CustLedgerEntryBuffer."Due Date");
GenJournalLine.VALIDATE(GenJournalLine."Document Date",CustLedgerEntryBuffer."Document Date");
GenJournalLine.VALIDATE(GenJournalLine."Territory Code",CustLedgerEntryBuffer."Territory Code");
GenJournalLine.VALIDATE(GenJournalLine."Ship-to Territory Code",CustLedgerEntryBuffer."Ship-to Territory Code");
GenJournalLine.VALIDATE(GenJournalLine."Salespers./Purch. Code",CustLedgerEntryBuffer."Salesperson Code");
GenJournalLine.VALIDATE(GenJournalLine."Ship-to Salesperson Code",CustLedgerEntryBuffer."Ship-to Salesperson Code");
GenJournalLine.VALIDATE(GenJournalLine."Mark Text",CustLedgerEntryBuffer."Mark Text");
GenJournalLine.VALIDATE(GenJournalLine."Payment Terms Code",CustLedgerEntryBuffer."Payment Terms Code");
GenJournalLine.INSERT(TRUE);
CountL += 1;
MyDialog.UPDATE(1,CountL);
UNTIL CustLedgerEntryBuffer.NEXT = 0;
END;
MyDialog.CLOSE();
MESSAGE('[%1] record(s) populated!',CountL);
END;
[TryFunction]
PROCEDURE PopulatePurchaseJournal@1000000002();
VAR
GenJournalTemplate@1000000006 : Record 80;
GenJournalLine@1000000005 : Record 81;
GenJournalBatch@1000000004 : Record 232;
VendorLedgerEntry@1000000003 : Record 25;
VendorLedgerEntryBuffer@1000000002 : Record 80025;
GenJournalTemplateName@1000000001 : Text;
GenJournalBatchName@1000000000 : Text;
LineNo@1000000007 : Integer;
MyDialog@1000000008 : Dialog;
CountL@1000000009 : Integer;
BEGIN
IF GenJournalTemplate.GET('PURCHASES') THEN
GenJournalTemplateName := GenJournalTemplate.Name;
IF GenJournalBatch.GET(GenJournalTemplateName,'DEFAULT') THEN
GenJournalBatchName := GenJournalBatch.Name;
VendorLedgerEntryBuffer.RESET;
IF VendorLedgerEntryBuffer.FINDSET THEN BEGIN
GenJournalLine.RESET;
GenJournalLine.SETRANGE(GenJournalLine."Journal Template Name",GenJournalTemplateName);
GenJournalLine.SETRANGE(GenJournalLine."Journal Batch Name",GenJournalBatchName);
IF GenJournalLine.FINDLAST THEN
LineNo := GenJournalLine."Line No."
ELSE
CLEAR(LineNo);
MyDialog.OPEN('Record populating... #1###############');
REPEAT
LineNo += 10000;
GenJournalLine.INIT;
GenJournalLine.VALIDATE(GenJournalLine."Journal Template Name",GenJournalTemplateName);
GenJournalLine.VALIDATE(GenJournalLine."Journal Batch Name",GenJournalBatchName);
GenJournalLine.VALIDATE("Line No.",LineNo);
GenJournalLine.VALIDATE(GenJournalLine."Posting Date",VendorLedgerEntryBuffer."Posting Date");
GenJournalLine.VALIDATE(GenJournalLine."Document Type",VendorLedgerEntryBuffer."Document Type");
GenJournalLine.VALIDATE(GenJournalLine."Document No.",VendorLedgerEntryBuffer."Document No.");
GenJournalLine.VALIDATE(GenJournalLine."Account Type",GenJournalLine."Account Type"::Vendor);
GenJournalLine.VALIDATE(GenJournalLine."Account No.",VendorLedgerEntryBuffer."Account No.");
GenJournalLine.VALIDATE(GenJournalLine.Description,VendorLedgerEntryBuffer.Description);
GenJournalLine.VALIDATE(GenJournalLine.Amount,VendorLedgerEntryBuffer."Remaining Amount");
GenJournalLine.VALIDATE(GenJournalLine."Bal. Account Type",GenJournalLine."Bal. Account Type"::"G/L Account");
GenJournalLine.VALIDATE(GenJournalLine."Bal. Account No.",'31040');
GenJournalLine.VALIDATE(GenJournalLine."External Document No.",VendorLedgerEntryBuffer."External Document No.");
GenJournalLine.VALIDATE(GenJournalLine."Due Date",VendorLedgerEntryBuffer."Due Date");
GenJournalLine.VALIDATE(GenJournalLine."Document Date",VendorLedgerEntryBuffer."Document Date");
GenJournalLine.VALIDATE(GenJournalLine."Payment Terms Code",VendorLedgerEntryBuffer."Payment Terms Code");
GenJournalLine.VALIDATE(GenJournalLine."Salespers./Purch. Code",VendorLedgerEntryBuffer."Purchaser Code");
GenJournalLine.INSERT(TRUE);
CountL += 1;
MyDialog.UPDATE(1,CountL);
UNTIL VendorLedgerEntryBuffer.NEXT = 0;
END;
MyDialog.CLOSE();
MESSAGE('[%1] record(s) populated!',CountL);
END;
BEGIN
{
October, 05 2016 : This codeunit is developed for creating the Sales & Purchase Journal from buffer table.
Cust. Ledger Entry Buffer table contains the mandatory fields from Cust. Ledger Entry.
Vendor Ledger Entry Buffer table contains the mandatory fields from Vendor Ledger Entry.
Solution Developed by Binesh Singh Rajput
}
END.
}
}
You can download this solution from here.