Pages

Wednesday, October 5, 2016

Creating/Populating the Sales & Purchase Journal from Ledger/Buffer Table in NAV

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.
 

No comments:

Post a Comment