Trending February 2024 # Vlan Trunking Protocol: What Is Vtp In Networking & Benefits # Suggested March 2024 # Top 2 Popular

You are reading the article Vlan Trunking Protocol: What Is Vtp In Networking & Benefits updated in February 2024 on the website We hope that the information we have shared is helpful to you. If you find the content interesting and meaningful, please share it with your friends and continue to follow and support us for the latest updates. Suggested March 2024 Vlan Trunking Protocol: What Is Vtp In Networking & Benefits

What is VLAN?

A VLAN is a custom network that is created from one or more Local Area Networks. It allows a group of devices available in multiple networks to be combined into one logical network. The result becomes a virtual LAN that is administered like a physical LAN. The full form of VLAN is Virtual Local Area Network.

In this Networking tutorial, you will learn:

What is VLAN Trunking Protocol (VTP)?

VTP is a Cisco proprietary protocol is used to exchange VLAN information. This type of protocol was developed to effectively manage the transfer of frames from different VLANs on a single physical line. The full form of VTP is the VLAN Trucking Protocol.

Using VTP, you can synchronize VLAN information (like VLAN name or VLAN ID) with switches into the same VTP domain.

For example, let us consider a large size network with 100 switches. Without VTP protocol, if you try to create a VLAN on each Switch, you need to enter VLAN configuration commands on every Switch!

Trunking protocol VTP allows you to create the VLAN only on a single switch. Similarly, if you want to delete a VLAN, you only require deleting it in one switch. After that, it will automatically circulate to every other switch inside the same VTP domain.

Two important VTP techniques are:

Frame Filtering: This method examines particular information about each frame (MAC address or layer 3 protocol.

Frame Tagging: This method places a unique identifier in each frame’s header as it is forwarded throughout the network backbone.

Requirements for VTP protocol:

Here are some requirements for VTP to communicate VLAN information between CISCO switches.

The VTP version needs to be the same on the switches that you want to configure.

The name of the VTP domain must be the same on the switches.

Authentication should match if applied.

VTP Components

Here are some important Components of VTP

VTP Domain:

VTP domain limits the extent to which configuration change are propagated in the network if an error occurs. At a time switch can be a member of only one VTP domain at a time. Until the VTP domain name is specified, you can’t create or modify VLANs on a VTP server mode. VLAN information is not propagated over the network. This component consists of single or multiple interconnected switches.

VTP Pruning:

This component prevents unnecessary flooding of broadcast information from one VLAN across all trunks in the VTP domain. It allows pruning on one VTP server switch in one domain is disabled by default. It is enabled by using the VTP pruning global configuration command.

VTP Advertisements:

The VTP domain name has been changed.

When the switch has been reset.

Summary Advertisement:

A VTP Server sends it every 5 minutes.

Notify VTP enables switches of the current VTP configuration revision number.

They are sent immediately after a configuration change.

Subnet Advertisement:

Creating/ deleting a VLAN

Suspending/ revoking a VLAN

Changing the name of a VLAN

Changing the MTU of a VLAN

VTP Modes

You can configure Switch in three modes: 1) Server, 2) Client, or 3) Transparent.

VTP Client: VTP clients function in the same way as VTP servers. A VTP client also enables you to store the VLAN information for the entire domain when the Switch is on.

VTP Transparent: Transparent switches help you to forward VTP to VTP clients and also to VTP servers. Whenever Switch is running in the transparent mode, you can create and modify VLANs on that Switch.

VTP Server VTP Client VTP Transparent

Create/Modify/Delete VLANs Yes No Only local

Synchronizes itself Yes Yes No

Yes Yes Yes

How VTP Works?

VTP Architecture

In the diagram above, you can see each switch has two VLANs.

Step 1) On the first switch, VLAN P and VLAN Q are sent through a single port (trunked) to the router and another port to the second switch.

Step 2) VLAN R and VLAN S are trunked from the second switch to the first switch and then the router’s first switch. This trunk can carry traffic from all four VLANs connections.

Step 3) The trunk link from the first switch to the router should be carried to all four VLANs.

Step 4) VLAN P that needs to get to a computer on VLAN Q (or VLAN R or VLAN S) must travel from the switch to the router and return to the switch.

Advantages of VTP

Here are the important pros/benefits of VTP:

Helps you to separate the network into smaller network VLAN management.

It allows you to track and monitoring of VLANs accurately.

Plug-and-play configuration when adding new VLANs.

VLAN configuration consistency across the network.

Accurate tracking and monitoring of VLANs.

Provide dynamic reporting of added VLANs across a network.

Offers simplify the management of the VLAN database across multiple switches.

VLAN management on switches like adding, deleting, and renaming VLANs.

Configurations are consistent and have fewer errors

Reduce VLAN management.

VTP Configuration Guidelines

Here are some important VTP Configuration Guidelines

You need to check for incompatible VTP versions and password related issues.

Incorrect name of VTP mode

All switches are set to VTP client mode.

VTP Versions

Three types of VTP versions are V1, V2, and V3.

Among the first two versions are similar except that V2 adds support for token ring VLANs.

V3 adds the following features:

Enhanced authentication

Support for extended VLANs (1006 to 4094).

VTP versions 1 and 2 helps you propagate only VLANs 1 to 1005.

Support for private VLAN

VTP primary server and VTP secondary servers

VTP mode off, which disables VTP.

V3 version offers backward compatibility.

VTP v3 version can be configured on a per-port basis.

Protection from unintended database overrides during the insertion of new switches.

Provide the option of clear text or hidden password protection.

Configuration option on a per-port which base instead of only a global scheme.

Optimized resource handling and a more efficient transfer of information.


A VLAN is a custom network that is created from one or more Local Area Networks.

VTP is a Cisco proprietary protocol which is used to exchange VLAN information.

Important VTP components are 1) VTP domain 2) VTP Pruning, 3) VTP Advertisements.

Three types of VTP modes are: 1) Server, 2) Client, or 3) Transparent.

It is important to check for incompatible VTP versions and password related issues.

V3 version offers backward compatibility and provides optimized resource handling and a more efficient transfer of information.

You're reading Vlan Trunking Protocol: What Is Vtp In Networking & Benefits

Powerline Vs Moca: Which Alternative Networking Technology Is The Best?

Ethernet cable (either CAT5e or CAT6) is the gold standard of home-networking technology. If you can string cable from your router to everywhere you need Internet access, do it. You’ll get out-of-this-world speed and impeccable reliability.

To answer that question, I compared the performance of one of the fastest powerline network adapter kits, ZyXel’s PLA5405KIT (based on the HomePlug AV2 MIMO standard) to one of the few MoCA adapter kits on the market: Actiontec’s Coax Network Adapter Kit (model number ECB2500CK01).

I have a network homerun in my equipment closet, meaning all of my home’s telephone, Ethernet, and coax cables terminate there. This is where my DSL modem, Wi-Fi router, Ethernet switches, six-way coax splitter, and uninterruptible power supply are all located, so this where I conducted my tests. I installed the second adapters in my home theater.

First up: Powerline adapters

I plugged one of ZyXel’s PLA5405 adapters directly into the wall at my homerun and connected it to my router using a CAT5e cable. I plugged a second PLA5405 into a receptacle in my home theater and connected it to my home-theater PC for measuring TCP throughput.

As with all the products in its class, ZyXel’s adapters require grounded electrical receptacles because they transmits data on any two pairs of wires on a three-wire electrical cable: Line/Neutral, Line/Ground, Neutral/Ground, and so on. Non-MIMO powerline adapters have just two-prong adapters, but they deliver much lower performance, as you’ll see in this product roundup, which also contains much more information on the technology.

ZyXel’s PLA5405 is one of the fastest HomePlug adapters on the market. It’s based on the latest HomePlug AV2 MIMO technology.

One of the other drawbacks of powerline adapters is that they shouldn’t be plugged into a surge suppressor (the surge suppressor will identify data traveling over the powerline as noise and try to filter it out). It’s easy enough to plug the adapter straight into the wall, versus a power strip, but I have a whole-house surge suppressor installed in my circuit-breaker panel. When I tested the PLA5405, I saw disappointingly slow performance: Where TechHive freelance reviewer Denny Arar saw TCP throughput of more than 100Mbps while benchmarking this adapter in her home, I got a miserly 27.4Mbps (and that dropped to just 22.7Mbps when I enabled encryption between the two adapters).

Anyway, when I plugged the PLA5405 adapters into my daughter’s router, I saw TCP throughput of 91.8Mbps with encryption enabled. Not having a whole-house surge protector at that location made a huge difference in powerline-networking performance.

Powerline proved to be slightly faster than MoCA, but MoCA could prove to be more reliable since powerline adapters need to compete with so many other devices that use the same wiring.

Let’s see what MoCA can do

Powerline doesn’t get a long with surge suppressors, but MoCA won’t coexist with satellite TV installations.

In my home theater, I disconnected the incoming coax cable from my satellite set-top box and connected it to the Coax-in F connector on the second MoCA adapter. I then ran an Ethernet cable from the adapter to my home-theater PC and verified that it was now connected to my network. But I got no signal from my satellite dish when I connected my set-top box to the MoCA adapter’s TV/STB Out F connector. Hmm.

Many service providers use MoCA technology, but it’s gained much less traction in the DIY market. That’s too bad, because it’s very powerful.

As for TCP throughput, Actiontec’s kit delivered 62.9Mbps when run through the second splitter in my home theater (the second splitter is needed for DirecTV’s whole-home DVR system). When I connected a laptop PC to other rooms with F connectors on the wall, TCP throughput increased to an average of 81.0Mbps.

So which is better? Powerline or MoCA?

Powerline and MoCA are both ingenious technologies that allow you to use your home’s existing wiring for a second purpose; namely, extending the range of your home network. They’re both very easy to install, and there’s no configuration required other than connecting cables. If your Wi-Fi router can’t deliver enough range, and you can’t string Ethernet cable, either powerline or MoCA might do the trick.

Deciding which is better will depend on your home’s infrastructure. HomePlug MIMO (and its powerline rival, chúng tôi require that your home have grounded wiring. That’s not a problem for newer homes, since that’s now part of the electrical code, but it could be an issue in older construction. If your home doesn’t have grounded wiring, you could fall back to one of the older HomePlug standards that don’t require a ground wire, but you’ll get much less performance (again, refer to this roundup for details). But if your home has a whole-house surge suppressor installed, be aware that it will put a major damper on any powerline adapter’s performance.

I think those factors render MoCA the superior alternative networking technology; but if you rely on satellite TV, versus cable or an over-the-air antenna, MoCA could be a no-go (any adapter kit you buy should be clearly labeled as to whether it’s suitable for use in a satellite home). The other drawback is that many older homes aren’t pre-wired with coax. You can be assured that almost any room in your home will have an electrical outlet; you can’t be as sure it will have an F connector for coax. 

Editor’s note: The MoCA Alliance asked me to clarify that we tested MoCA version 1.1, and that MoCA 2.0 adapter kits should be available soon. I’ll retest with a MoCA 2.0 kit as soon as we can get one in. I also added a note to the conclusion that some MoCA adapter kits are compatible with satellite TV installations. 

What Is Awt In Java?

Introduction to AWT in Java

Java AWT is also known as Abstract Window Toolkit is an API that is used to develop either GUI or window-based applications in Java. Java AWT components are platform-dependent which implies that they are displayed according to the view of the operating system. It is also heavyweight implying that its components are using the resources of the Operating System. java. awt package provides classes for AWT api. For example, TextField, CheckBox, Choice, Label, TextArea, Radio Button, List, etc.

AWT hierarchy

Following is AWT hierarchy:


The Container is one of the components in AWT that contains other components like buttons, text fields, labels, etc. The classes that extend the Container class are known as containers such as Frame, Dialog, and Panel as shown in the hierarchy.

Types of containers

As demonstrated above, container refers to the location where components can be added like text field, button, checkbox, etc. There are in total, four types of containers available in AW, that is, Window, Frame, Dialog, and Panel. As shown in the hierarchy above, Frame and Dialog are subclasses of the Window class.

1. Window: The window is a container that does not have borders and menu bars. In order to create a window, you can use frame, dialog or another window.

2. Panel: The Panel is the container/class that doesn’t contain the title bar and menu bars. It has other components like buttons, text fields, etc.

3. Dialog: The Dialog is the container or class having a border and title. We cannot create an instance of the Dialog class without an associated instance of the respective Frame class.

4. Trim: The Frame is the container or class containing the title bar and might also have menu bars. It can also have other components like text field, button, etc.

Why AWT is platform dependent?

Java Abstract Window Toolkit calls native platform I.e., Operating system’s subroutine in order to create components like text box, checkbox, button, etc. For example, an AWT GUI containing a button would be having varied look- and -feel in various platforms like Windows, Mac OS, and Unix, etc. since these platforms have different look and feel for their respective native buttons and then AWT would directly call their native subroutine that is going to create the button. In simple words, an application build on AWT would look more like a windows application when being run on Windows, however, that same application would look like a Mac application when being run on Mac Operating System.

Basic Methods of Component Class

public void add(Component c): This method would insert a component on this component.

public void setSize(int width, int height): This method would set the size (width and height ) of the particular component.

public void setVisible(boolean status): This method would change the visibility of the component, which is by default false.

public void setLayout(LayoutManager m): This method would define the layout manager for the particular component.

Java AWT Example

We can create a GUI using Frame in two ways:

Either by extending Frame class or by creating the instance of Frame class

Let’s show this by both examples, first extending Frame Class :

import java.awt.*;/* Extend the Frame class here, *thus our class "Example" would behave *like a Frame */public class Example extends Frame {Example() {Button b=new Button("Button!!"); b.setBounds(50,50,50,50); add(b); setSize(500,300); setTitle("This is First AWT example"); setLayout(new FlowLayout()); /*By default frame is not visible so *we are setting the visibility to true *to make it visible. */ setVisible(true); } public static void main(String args[]){ Example fr=new Example(); } }


import java.awt.*; public class Example { Example() { Frame f=new Frame(); Label l = new Label("User: "); f.add(l); TextField t = new TextField(); f.add(t); f.setSize(500, 300); f.setLayout(new FlowLayout()); f.setVisible(true); } public static void main(String args[]) {Example ex = new Example(); } } Layouts in AWT

There are 2 layouts in AWT which are as follows :

Flow layout is the default layout, which implies when you don’t set any layout in your code then the particular layout would be set to Flow by default. Flow layout would put components like text fields, buttons, labels, etc in a row form and if horizontal space is not long enough to hold all components then it would add them in the next row and cycle goes on. Few points about Flow Layout

All the rows in Flow layout are aligned center by default. But, if required we can set the alignment from left or right.

The horizontal and vertical gap between all components is 5 pixels by default.

By default, the orientation of the components is left to right, which implies that the components would be added from left to right as required, but we can change it from right to left when needed.

Border layout wherein we can add components like text fields, buttons, labels, etc to specific five These regions are known as PAGE_START, LINE_START, CENTER, LINE_END, PAGE_END.

Method for border layout is:

public BorderLayout(int hgap,int vgap)

Parameters are :

hgap: The horizontal gap.

vgap: The vertical gap.

We can also achieve the same by using setHgap(int hgap) method for the horizontal gap between components and setVgap(int vgap) method for the vertical gap.


Therefore, we can conclude that AWT was designed in order to provide a common set of tools for GUI design that could work on a variety of platforms. These tools preserved the look and feel of each platform.

Recommended Articles

This has been a guide to What is AWT in Java. Here we have discuss the hierarchy, basic method, example and layouts of AWT in Java. You may also look at the following articles to learn more –

What Is Prettier In React?

One of the many amazing things about React is that it’s more visually appealing than traditional web development frameworks like AngularJS. This might be because React favors a “simple” and “elastic” design over complex directives and components.

Other factors contributing to React’s visual appeal are the use of stateless components and declarative rendering. This means that instead of specifying how each component should look, you simply specify what data it needs and React will take care of the rest.

In the end, it really depends on your personal taste − some people might prefer AngularJS’ more polished look, while others might find React’s simpler design more pleasing.

So why should you use prettier in React? Prettier can help you avoid common errors in your codebase. By automatically formatting your code, prettier can help identify issues early on − before they become difficult to track down and fix.

What is Prettier?

Prettier is an opinionated code formatter that helps you maintain consistent code formatting across different editors and programming languages. It is a utility that formats code automatically to make it more readable.

It supports a wide number of coding scripts and languages, namely JavaScript, TypeScript, JSX, Vue, Angular, CSS & SCSS, JSON, HTML, GraphQL, Markdown, Flow, etc.

It can also be used as a stand−alone tool or as a plugin for various code editors. Prettier supports a wide range of programming languages and file formats, making it a versatile tool for code formatting.

It has two main goals −

To remove the need for manual code formatting,

To provide support for older browsers and legacy environments that do not support the latest JavaScript features.

Using a tool like prettier really makes it simpler to write code since you can format it immediately thereafter.

Having a shared style guide is widely acknowledged to be beneficial for a project and team, but getting there is a very difficult and frustrating process. When it comes to certain styles of creating code, people become quite emotional, and nobody enjoys spending time writing and hearing criticism.

The primary motivation for using Prettier is to put an end to the constant discussions regarding various coding chúng tôi primary motivation for using Prettier is to put an end to the constant discussions regarding various coding styles.

Benefits of Prettier Code Formatter

Prettier makes your code more readable. When you use prettier, all of your lines will be wrapped with either curly or straight brackets (as needed), and they will be indented by default. This makes it easier to follow the flow of the code and understand how each line works together.

There are a number of reasons why you might want to use prettier −

It can help you avoid common errors, such as forgetting to add a semicolon to the end of a code and improves the quality of your work. Ultimately, using prettier is a great way to improve the quality and readability of your codebase.

Prettier helps you maintain a consistent code style across your project. It can also be configured to automatically format your code as you type, which can save you a lot of time in the long run.

Enforcing a consistent style across your codebase is very important. Prettier can be used to format code in a wide variety of programming languages and is popular among developers who want to ensure that their code adheres to a consistent style.

Overall, using prettier can help to create a common easy-to-read and accessible coding environment for the entire team and any external entity to work with.

How does Prettier Works?

Prettier works by taking your source files and transforming them into minified versions that are smaller in size. This process makes the code easier to read and understand − especially when it’s deployed to a web server or run on a development environment.

Pretty also includes features like linting (checking for errors) and unit testing (enforcing quality standards). If you want an automated way to improve the quality of your codebase, prettier is definitely worth considering.

When you use prettier, all of your lines will be wrapped with relevant brackets, and they will be indented by default. This makes it easier to follow the flow of the code and understand how each line works together.

Prettier is considered as the most supporting code formatter, which imposes a regular style by re-printing and parsing your code with its rules considering the maximum line width. By default, prettier will wrap code when it reaches the end of the line. It can also print in multiple output styles, including:

Expanded − Each property is on its own line.

Compact − All properties are on the same line.

Compressed − All properties are on the same line, with no whitespace.

Prettier can also format your code according to a specific set of rules. For example, you can tell prettier to format only code that is wrapped in parentheses.

In addition to formatting code, Prettier can also format Markdown files. By default, it will wrap Markdown code blocks when they reach the end of the line. You can also tell Prettier to format only code blocks that are wrapped in parentheses.

Troubleshooting tips for React

If you’re having trouble getting your React code to look pretty, there are a few things you can try −

Make sure you’re using a code editor that supports syntax highlighting for React. This process will make it easier to spot errors in your code.

Try using a different code style. Some people prefer to use a “camel case” style, while others prefer a “kebab case” style.

Ensure using the latest version of React.

As the project evolves, new features are added, and old ones are deprecated. Keeping up−to−date with the latest version will help you avoid any potential problems.


Because it ignores the original styling by re-printing with its own rules that take the maximum line length into consideration, wrapping code when appropriate, Prettier ensures an uniform code style across your whole codebase.

It’s pretty obvious as to why “Prettier style guide” is favored over others as it’s the only style guide that is automatic and comes with pretty amazing & unique features

Near Protocol (Near), Chainlink (Link) And Orbeon Protocol (Orbn) – Three Must

NEAR Protocol (NEAR) Heavily ‘Discounted’ and Great Opportunity for 2023

Near Protocol (NEAR) has had a turbulent 2023 but managed to partner up with Google Cloud, set up a $40 million fund to bail out USN investors, and boosted Near Protocol (NEAR)’s DeFi presence with Tether (USDT) pairs on its blockchain network.

Although Near Protocol (NEAR) is currently only trading at $1.31, it is showing a Falling Wedge pattern as per technical analysis, and bulls seem to be waiting for a breakout. If Near Protocol (NEAR) manages to break its nearest support zone of $1.50, Near Protocol (NEAR) could surge all the way to $3.00, which makes for an interesting short-term play for data-driven swing traders. As well as this, Near Protocol (NEAR)’s long-term potential could prove to be a significant value driver.

Chainlink (LINK) Enabled $6.9 Trillion in Transaction Value in 2023 – Set to Increase in 2023

Chainlink (LINK) managed to enable more than $6,9 trillion in transaction value through its Chainlink Oracle Services in 2023 and is set to increase this number even further in 2023. Apart from this, Chainlink Data Feeds are also planned to expand across new blockchains and layer 2 non-EVM chains such as Solana (SOL).

Although Chainlink (LINK) is trading below its 200-day moving average in the last seven days, just below $7 per token, it is trading in a Descending Triangle pattern which shows us a breakout is imminent.

As for the long-term, we expect Chainlink (LINK) to increase steadily in price this year as Chainlink (LINK) only recently announced its staking services, which locks a big part of the circulating supply of tokens.

Other metrics that look healthy going into 2023 are Chainlink’s increase in data points delivered on-chain and developer activity (over 18,000+ public GitHub repos).

Orbeon Protocol (ORBN) – Up 805% in December and Set to Gain Over 6,000% in 2023

Orbeon Protocol (ORBN) is a relatively new cryptocurrency project that managed to break virtually all records this December, skyrocketing over 805% during its pre-sale. The reason for this sudden surge is actually quite understandable, given the fact of the project’s strong use case: changing the way crowdfunding and venture capital investing are done through the use of fractionalized NFTs.

Let’s say a start-up company wants to raise funds from the crypto community via Orbeon Protocol (ORBN). Orbeon Protocol (ORBN) then  mints equity-backed NFTs, each representing an investment in the start-up company. Users of the Orbeon Protocol (ORBN) ecosystem can then buy these for as low as $1.

Not only does Orbeon Protocol (ORBN) thereby allow small retail traders to invest in promising start-ups from as little as $1, but it also dramatically reduces fundraising costs for the start-ups involved and allow them to be in direct contact with their backers.

The total supply of Orbeon Protocol (ORBN) tokens is set at 888,000,000, and only 40% of these are available to the public through the pre-sale of the project. The developer’s tokens and liquidity pool of Orbeon Protocol (ORBN) are locked for one and ten years, respectively, ensuring early investors no rug pull can take place whatsoever.

Find Out More About The Orbeon Protocol Presale

What Is Reports And Printing In Tdl?


Watch this video to know about designing reports and customising invoice

Watch the below video for designing different types of reports such as tabular report, hierarchical reports and column based reports

Watch the below video for printing reports and invoices in different formats

In TallyPrime, financial statements are generated as Reports, based on the vouchers entered till date. Balance Sheet, Profit & Loss A/c, Trial Balance, etc., are some default reports in Tally.

Normally, a business requires reports in any of the following formats:

Tabular Report: A report with fixed number of columns, which can be configured.

Hierarchical Report: A report designed in successive levels or layers.

Columnar Reports: A report with multiple columns or dynamically varying number of columns. TallyPrime caters to generating all these types of Reports.

A tabular report is the simplest format of all the Report formats. A typical tabular report has the following components:

Report Title: It contains the name of the report, the title for each column, the day/period for which a report is generated, etc.

Report Details: It contains the actual information.

Report Total: It contains the total of the respective columns.

In a tabular report, the columns are fixed and interactive; an end user can change its appearance. The reports like Day Book, Stock Summary, Trial Balance, Group Summary, and so on are some default tabular reports in Tally. 

A typical tabular report will have the following sections:

a Title Line

a Details Line and

an optional Total Line

The details line will be repeated over the objects of a collection. A tabular report can be made interactive by adding the following features:

Adding buttons to change the period, to change the contents of the Report, etc. 

Adding explosions to the lines.

TallyPrime allows the user to display additional information about the current line object, when the key combination SHIFT + Enter is pressed. This functionality is called as explosion in Tally. Line attributes Explode and Indent, and the function $$KeyExplode, are used for the same.

Attribute – Explode

The attribute Explode refers to an attribute of the line, which is used to take the current data from the Line Object. A Part is displayed after the process of explosion is complete.



Example 1: Simple Tabular Report

Let us consider writing a simple Trial Balance.

[Part : My TB Part]

Lines   : My TB Title, My TB Details

Repeat  : My TB Details : My TB Groups

Scroll  : Vertical

Example 2: A Simple Interactive Tabular Report

A report showing all the Primary groups can be created and exploded by pressing Shift + Enter to view the sub groups. The ledgers can subsequently be viewed on the same screen with an indent for each level. The report is as shown in Figure 9.3

The following code snippet displays the exploded part:

[Line : My TB Details]

Fields       : My TB Name Field, My TB ParName Field

Right Fields : My TB Dr Amt Field, My TB Cr Amt Field

Explode       : My TB Group Explosion : $$IsGroup and $$KeyExplode

[Field : My TB Name Field]

Use          : Name Field

Set as       : $Name

Variable     : MyGroupName1

Simple Interactive Tabular Report. The code for the exploded part is as follows:

[Part : My TB Group Explosion]

Lines         : My TB Details Explosion

Repeat        : My TB Details Explosion : My TB GroupsLedgers

Scroll        : Vertical

[Line : My TB Details Explosion]

Fields        : My TB Name Field, My TB ParName Field

Right Fields  : My TB Dr Amt Field, My TB Cr Amt Field

Explode       : My TB Group Explosion : $$IsGroup and $$KeyExplode

Indent       : 2 * $$ExplodeLevel

Local : Field : Default : Delete : Border

The Collection My TB GroupLedgers is a union of collections of Type Group and Ledger, respectively.

[Collection : My TB GroupsLedgers]

Collection : My TB Groups, My TB Ledgers

The Variable MygroupName1 is used in Child Of attribute, under the collections My TB Groups and My TB Ledgers

[Collection : My TB Groups]

Type : Group

Child Of : #MyGroupName1

[Collection : My TB Ledgers]

Type : Ledger

Child Of : #MyGroupName1

When the user presses the Shift + Enter keys, then the exploded part shows the Sub-groups under the group in the current line.

When the keys Shift + Enter are pressed by the user, one more exploded part shows the Ledgers under the current Sub-group, as shown in Figure 9.5.

A Tally application provides a simple way of navigating from one report to another, which is commonly referred to as a drill down. A Drill Down facility moves from one report to the other to give a detailed view based on the selection in the current report. A user can return to the first Report from the detailed view. A typical drill down in TallyPrime starts from the Report and reaches the Voucher Alteration screen.

Hierarchical Reports can be designed by incorporating the following changes to a Tabular Report:

Variable attribute of Report definition

Child Of attribute of Collection definition

Display and Variable attributes of Field definitions

Variable Definition


The following code snippet demonstrates the Drill down action, which is based on the Group Name displayed in the field. The Drill down action is achieved by specifying the two attributes ‘Variable’ and ‘Display’ at the field level.

[Field : My TB Name]

Width    : 120 mms

Set as   : $Name

Variable : GroupVar

Display  : My Trial Balance : $$IsGroup

A Variable is defined as Volatile and is associated at Report. The attribute Variable of Report definition is used to associate the Variable with the report.

[Variable : Group Var]

Type     : String

Default  : “”

Volatile : Yes

[Report : My Trial Balance]

Form     : My Trial Balance

Variable : GroupVar

The same Variable is used in the Childof attribute of the Collection definition. When a line is repeated over this collection in the report; when the user presses the Enter key, the Report being displayed will have the objects whose Parent Name is stored in the variable.

[Collection : My Collection]

Type     : Group

Child of : ##GroupVar

The following screen is displayed when the user selects the option from the Menu:

When the key Enter is pressed by the user, the next screen displays the Sub Groups of the current Group.

The reports in which the number of columns added or deleted as per the user inputs are referred to as column-based reports. There are four types of column-based reports in Tally, namely Multi-Column Reports, Auto-Column Reports, Automatic Auto-Column Reports and Columnar Reports. All these types are explained with examples in this section.

In Multi-Column reports, a column is repeated based on the criteria specified by user. Trial Balance, Balance Sheet, Stock Summary, etc., are some default Reports in TallyPrime having Multi column feature. Normally, this feature is used to compare values across different periods.

Designing a Multi Column Report

In a Tabular Report, Lines are repeated over a collection. But in a multi-column Report, columns are repeated in addition to the repetition of the Lines over a Collection. Based on the user input, columns are repeated. The column Report is used to capture user inputs like Period, Company Name, Stock Valuation, etc., based on which columns are generated.

Following attributes are used at various components of a Report to incorporate the multi-column feature:

Attribute – Column Report

Attribute Column Report of the Report definition, facilitates the creation of multi-column reports.



Attribute – Repeat

Attribute Column Report is associated with a variable, which in turn is specified in ‘Repeat’ attribute of Report definition. Both attributes are specified in ‘Report’ definition to create a multi-column report.


Repeat : Variable

Example: Incorporating Multi Column Feature to Trial Balance report

Step 1 : Using Column Report & Repeat attribute at the Report

[Report: MulCol Trial Balance]

ColumnReport : MyMultiColumns

Repeat : SVCurrentCompany, SVFromDate, SVToDate

Step 2 : Modifying the System Variables in a multi-column Report

[Field : My MultiFromDate]

Use      : Uni Date Field

Modifies : SVFromDate

[Field : My MultiToDate]

Use      : Uni Date Field

Modifies : SVToDate

[Field : My MultiCompany]

Use      : Name Field

Modifies : SVCurrentCompany

Table    : Company

Step 3: Repeating Columns over a Variable and Lines over Objects of a Collection

To repeat columns over a Variable, which is captured in MyMultiColumns Report, following needs to be done at various components of the MulCol Trial Balance Report.

1. Report Definition: Repeating over the values of system variable which is captured in MyMultiColumns Report

[Report : MulCol Trial Balance]

Repeat : SVCurrentCompany, SVFromDate, SVToDate

2 . Part Definition: Repeating Lines over objects of a Collection.

[Part : MulCol TB Details]

Lines       : MulCol TB Details

BottomLines : MulCol TB Total

Repeat      : MulCol TB Details : MulCol TB GroupLed

3. Line Definition:- Repeating Field

[Line : MulCol TB Details]

Fields : MulCol TB Name Field, MulCol TB Amount Field

Repeat : MulCol TB Amount Field

Designing an Auto-Column Report

Auto column Report is similar to a Multi column Report, except that here, a set of columns are repeated, instead of one. User input will decide the criteria on which the columns are repeated.

Example: Incorporating Auto Column Feature to Trial Balance report

Step 1 : Adding the Configuration Screen to the Form

The Button MyAutoButton is added to Form. Through this Button, the configuration Report MyAutoColumns is arrived at through the Auto columns mode.

[Form : MulCol Trial Balance]

Bottom Button : MyAutoButton,

[Button : MyAutoButton]

Key    : Alt+N

Action : Auto Columns : MyAutoColumns

Title  : $$LocaleString:”Auto Column”

Step 2 : The Configuration Report MultiAutoColumns

In configuration Report, the user will be given options like ‘Days’,’ Monthly’, Yearly’, ‘Company’, etc., based on which the columns are repeated. In TDL, these options are external objects.

[Collection : MyAuto Columns]

Title       : $$LocaleString : “Column Details”

Object      : MyCurrentCompany, MyQuarterly, MyMonthly, MyYearly, MyHalfYearly

Filter      : Belongs

Format      : $$Name, 15

[Object : MyCurrentCompany]

Name        : $$LocaleString : “Company”

VarName     : “SVCurrentCompany”

CollName    : “List of Primary Companies”

IsAgeWise   : No

Periodicity : “”

[Object : MyQuarterly]

Name        : $$LocaleString : “Quarterly” 

VarName     : “SVFromDate, SVToDate”

CollName    : “Period Collection”

BelongsIf   : “Yes”

IsAgeWise   : No

Periodicity : “3 Month”

[Object : MyHalfYearly]

Name        : $$LocaleString:”Half-Yearly”

VarName     : “SVFromDate, SVToDate”

CollName    : “Period Collection”

BelongsIf   : “Yes”

IsAgeWise   : No

Periodicity : “6 Month”

[Object : MyMonthly]

Name        : $$LocaleString:”Monthly”

VarName     : “SVFromDate, SVToDate”

CollName    : “Period Collection”

BelongsIf   : “Yes”

IsAgeWise   : No

Periodicity : “Month”

[Object : MyYearly]

Name        : $$LocaleString:”Yearly”

VarName     : “SVFromDate, SVToDate”

CollName    : “Period Collection”

BelongsIf   : “Yes”

IsAgeWise   : No

Periodicity : “Year”

 Columns can be repeated over any collection. They are not restricted only to a Period.

[Field : My SelectAuto]

Use           : Short Name Field

Table         : MyAutoColumns

Show Table    : Always

[Field : My AutoColumns]

Use        : Short Name Field Invisible : Yes

Set as     : $$Table:MySelectAuto:$VarName

Set always : Yes

Skip       : Yes

[Field : My CollName]

Use        : Short Name Field

Invisible  : Yes

Set as     : $$Table:MySelectAuto:$CollName

Modifies   : DSPRepeatCollection

Set always : Yes

Skip       : Yes

[Field : My StartPeriod]

Use        : Short Date Field

Invisible  : Yes

Set as     : if $$IsEmpty:$$Table:MySelectAuto:$Periodicity then+

##SVFromDate else if $$Table:MySelectAuto:$Periodicity = “Day” then ##SVFromDate else +


Set always : Yes

Modifies   : SVFromDate Skip : Yes

[Field : My EndPeriod]

Use        : Short Date Field

Invisible  : Yes

Set as     : if $$IsEmpty : $$Table:MySelectAuto:$Periodicity then ##SVToDate else if $$Table:MySelectAuto: +

$Periodicity = “Day” then $$MonthEnd:#DSPStartPeriod else $$HighValue:SVToDate

Set always : Yes

Modifies   : SVToDate

Skip       : Yes

[Field : My SetPeriodicity]

Use        : Short Name Field

Invisible  : Yes

Set as     : if NOT $$IsEmpty:$$Table:MySelectAuto:$Periodicity then $$Table:MySelectAuto:$Periodicity else “Month”

Set always : Yes

Modifies   : SVPeriodicity

The generated values are sent to the Parent Report by using the Form attribute Output.

[Form : MyAutoColumns]

No Confirm : Yes

Parts : My AutoColumns

Output : My AutoColumns

Step 3 : Repeating Columns over a Variable and Lines over Objects of a Collection

To repeat columns over a Variable which are captured in an Auto Columns Report, the following needs to be done at various components of the ‘MulCol Trial Balance’ Report.

1. Report Definition: This involves repeating the Values of a System Variable which is captured in MyMultiColumns Report.

[Report : MulCol Trial Balance]

Repeat : SVCurrentCompany, SVFromDate, SVToDate

2. Part Definition: This involves repeating Lines over the Objects of a Collection.

[Part: MulCol TB Details]

Lines : MulCol TB Details

BottomLines : MulCol TB Total

Repeat : MulCol TB Details : MulCol TB GroupLed

3.Line Definition: This involves repeating a Field.

[Line : MulCol TB Details]

Fields : MulCol TB Name Field, MulCol TB Amount Field

Repeat : MulCol TB Amount Field

There may be situations when the columns are required; automatically without the intervention of the user when the report is opened. The Attendance Sheet is an example of the Automatic autocolumn Report in Tally.ERP9.

Designing an Automatic Auto Column Report

In order to design an Automatic Auto Column Report, the function $$SetAutoColumns, and the pre-defined variables DoSetAutocolumn and the DSPRepeatCollection are used.

The following points must be considered while creating the automatic auto-column reports:

The value of the variable DoSetAutoColumn must be set to YES.

The variable DSPRepeatCollection stores the Collection Name to be repeated.

The function $$SetAutoColumns accepts the name of a variable which is repeated over the value of variable DSPRepeatCollection.

The columns are displayed based on the values in the collection provided by variable DSPRepeatCollection.


Consider the example of creating an auto-column for a Trial Balance. The same report can be modified to have automatic Columns for Multiple selected companies. As mentioned earlier, the following should be resorted to:

The variable DoSetAutoColumn must be set to Yes .

[Report : MulCol Trial Balance]

Set : DSPRepeatCollection : “List of Primary Companies”

The variable DSPRepeatCollection has to be set to List of Primary Companies

[Form : MulCol Trial Balance]

Option : Set Auto Option : $$SetAutoColumns:SVCurrentCompany

Add a dummy option in the ‘Form’ Definition such that the condition of the same is $$SetAutoColumns:SVCurrentCompany . The variable SVCurrentCompany will be repeated automatically as soon as you enter the report, provided multiple companies are loaded.

Also add the following lines to the Form Definition MultiCol Trial Balance

Option : Set Auto Option : $$SetAutoColumns : SVCurrentCompany

[!Form : Set Auto Option]

Multiple companies should be loaded for this program. Now, when the user selects the Menu Item, the following screen is displayed:

All the Voucher Reports which contain Accounting Information (Ledger and/or Group Info) available in Vouchers, and can be displayed as Columns, are categorized as Columnar Reports. For example, Sales Register, Purchase Register, Journal Register, Ledger, etc., where the Voucher Registers can display multiple columns and respective values for each column, viz. the ledger, the parent of the ledger, etc., entered in the voucher, as opted by the user.

Note: These types of Reports also use the Auto Column concept for achieving disparate columns.

Stock Registers and Sales Registers are a classic example of Columnar Reports.

We have already understood the various types of reports and the techniques to generate them. An essential element of Reporting is printing. All the reports must be printable in one form or the other.

Printing Techniques : The techniques used for Printing are as follows:

Menu Action Print or Print Collection enters the final Report in Print mode.



[#Menu : Printing Menu]

Add : Key Item : My Ledgers : L : Print Collection : Ledger Vouchers

Add : Key Item : My Day Book : D : Print : Day Book

Here, we are adding the Item My Ledgers, which has an action Print Collection associated to it.

It displays a collection bearing the List of ledgers, which on user selection, enters the final report in ‘Print’ Mode. On accepting, it directly goes to the printer.

Another method of printing reports is by way of associating a Button with an action Print Report at the ‘Form’ definition. Action ‘Print Report’ prints the current report by default. This action accepts Report Name as its parameter. If any report other than current needs to be printed, an additional parameter containing Report Name needs to be specified. The current report can pass the user selection to the printing report through a default collection called Parameter Collection.



[Button : Print Selected Pay slips]

Key        : Alt + F11

Title      : “Print Selected Pay slips”

Action     : Print Report : Multi Pay Slip Print

Scope      : Selected Lines

[#Report : Multi Pay Slip Print]

Collection : Parameter Collection

Here, the Button Print Selected Pay slips is defined with the Action ‘Print Report’, which also has an action parameter, i.e., the Report Name to be printed. The scope of the Button is Selected Lines, which means that the final Report Multi Pay Slip Print must contain only the selected Objects from the current Report. The user selection is passed to the new Report through a Collection ‘Parameter Collection’, which must be used in the destination Report ‘Multi Pay Slip Print’. So, the Report ‘Multi Pay Slip Print’ can be modified and added to the collection ‘Parameter Collection’.

A Page Break is the point at which one page ends and another begins. Handling Page Breaks is important, as the current page should indicate continuation to the next page, while the next page must indicate that the current page is continued from the previous page. So, there must be a closing identifier, i.e., closing page break information and an opening identifier, i.e., opening page break information.

In other words, Page Breaks specify the headers and footers for every page, and are printed across multiple pages. Closing Page Break starts printing from the first page and prints on every page except the last page, e.g., Continued… to be printed at the bottom of each page. Opening Page Break starts printing from the second page till the last page. Closing Page Break is specified before Opening Page Break, since in any circumstance, closing page break is encountered first.

In TDL, Page Breaks can be handled vertically as well as horizontally .

Vertical Page Breaks

In cases where a report containing data cannot be printed in a single page, one needs to use vertical page breaks. Vertical Page Breaks can be specified at 2 levels, viz. Form and Part .

Form Level Page Break

Vertical Page Breaks can be specified at Form through the Form Attribute Page Break. It takes 2 parameters, viz. First Part for Closing Page Break and Second Part for Opening Page Break.



Consider a Trial Balance report of a company, which requires the title and address of the Company in the first page and the grand total in the last page. In the pages between the first and the last page, the text Continued…. may be required at the end of each page, and the Company Name and Address at the beginning of each page.

[Form : My Trial Balance]

Page Break : Cl Page Break, Op Page Break

[Part : Cl Page Break]

Lines      : Cont Line

[Line : Cont Line]

Fields     : Cont Field

Border     : Full Thin Top

[Field : Cont Field]

Set As     : “Continued…”

Full width : Yes

Align      : Right

[Part : Op Page Break]

Parts      : DSP OpCompanyName, DSP OpReportTitle

Vertical   : Yes

In this example, Closing Page Break is defined to print Continued… at the end of every continued page. Opening Page Break is defined to print the Company Name and Report Title at the beginning of all the continuing pages. Since more than one part is used within Part definition, specify the alignment as ‘Vertical’, if required.

Part Level Page Breaks

Vertical Page Breaks can be specified at Part through the Part Attribute Page Break. This is generally used when the Page Totals are to be printed for each closing and opening pages.

It takes 2 parameters, viz.1st Line for Closing Page Break and 2nd Line for Opening Page Break.



Consider a Trial Balance Report of a company, where we may require the running page totals to be printed at the end and beginning of each page.

[Part : My Trial Balance]

Page Break : Cl Page Break, Op Page Break

[Line : Cl Page Break]

Use    : Detail Line

Local  : Field : Particulars Fld : Set As: “Carried Forward”

Local  : Field : DrAmt Fld: Set As : $$Total:DrAmtFld

Local  : Field : CrAmt Fld: Set As : $$Total:CrAmtFld

Local  : Field : NetAmt Fld: Set As : $$Total:NetAmtFld

Border : Full Thin Top

[Line : Op Page Break]

Use    : Cl Page Break

Local  : Field : Particulars Fld : Set As : “Brought Forward”

Here, Line Cl Page Break is defined to use the pre-defined Detail Line and the relevant fields are modified locally to set the respective values. Similarly, the Line Op Page Break is defined to use the above defined line Cl Page Break, which locally modifies only the field Particulars Fld.

Horizontal Page Breaks

Horizontal Page Breaks are used if the number of columns run into multiple pages.

Line Level Page Breaks

Horizontal page breaks can be specified at Line through Line Attribute Page Break. It is generally used to repeat a closing column at every closing page and opening column at every opening page. It takes 2 parameters, viz. 1st Field for Closing Page Break & 2nd for Opening Page Break.



Consider a Columnar Sales Register Report of a company, where multiple columns are printed across pages. Some fixed columns are required in subsequent pages which makes it easy to map the columns in subsequent pages.

[#Line : DSP ColVchDetail]

Page Break : Cl Page Break, Op Page Break

[Field : Cl Page Break]

[Field : Op Page Break]

Fields : DBC Fixed, VCH No

In this example, the Field Cl Page Break is defined as Empty, since no Closing Column or Field is required and .Field Op Page Break is defined with further fields DBC Fixed and VCH No, which are available in default TDL

Form Level Page Break

Part Level Page Break Line Level Page Break

It is a Vertical Page Break

It is a Vertical Page Break

It is a Horizontal Page Break

Page Break attribute accepts Part Names as its value

Page Break attribute accepts Line Names as its value

Page Break attribute accepts Field Names as its value

Multiple Parts (parts within parts) can be printed both at closing and opening page breaks

Multiple lines (lines within lines) can be printed at both closing and opening page breaks

Multiple Fields (Fields within Fields) can be printed at both closing and opening page breaks

Form Level Page Breaks cannot handle running Page Totals

Running Page Totals can be handled with Part Level Page Break

Column Page Totals can be handled with Line Level Page Break

Data validation and controls in Tally can be done at two levels, either at the Platform level or at the TDL level. TDL Programmers do not have control over any of the Platform level validations. TDL Programmers can only add validation and controls at the TDL Level. Majorly there are a few Field level attributes and Form level attributes are used at the TDL Level for validation and control mechanisms. The field level attributes are: Notify, control, Validate and Unique. Similarly the Control attribute at Form level  and Menu level. Family attribute at Report level.

The differences between the field attributes Validate, Notify and Control are:

Field Attributes

Displays Message

Cursor Movement






Not Restricted




The attribute Control restricts the display of Menu Items, based on the given condition.



[!Menu: Gateway of Tally]

Key Item : @@locAccountsInfo : A : Menu : Accounts Info. : NOT $$IsEmpty:$$SelectedCmps

Control : @@locAccountsInfo : $$Allow:Create:AccountsMasters OR $$Allow:Alter:AccountsMasters

Here, the menu item Accounts Info will be displayed only if the condition is satisfied. $$Allow checks if the current user has the rights to access the report displayed under the current Menu item. The value AccountsMasters has been derived from attribute Family at ‘Report’ definition.

A matrix report looks like a grid. It contains a row of labels, a column of labels, and information in grid format that is related to both the row and column labels. In Tally, two dimensional matrix reports can be designed using the Auto column report approach (using Repeat Variables). Traditionally, these types of Reports are referred to as columnar Reports. In particular, Matrix report is a variant of automatic auto column reports, where the columns are repeated over a variable associated at the Report. The collection repeated with this variable is used to populate the repeated values into the variable. The method value in the detail line is extracted from a different collection, based on the corresponding row and column indexes.

The latest enhancements in the area of Columnar Reporting enables us to design the reports using a new approach altogether. A field within a line can display method values from multiple objects of the collection. Context Free repeat within the part and line enable repetition on simple as well as list variable values. These features give a better control in the hands of the programmer

These features give a better control in the hands of the programmer in designing such reports.

If we consider the above report layout, the labels in columns can now repeat over a collection of Parties. The data in the cells can be populated based on the combination of row and column label values across the dimensions. In the previous table, for example, the highlighted cell contains the value of total sales quantity corresponding to the party “Party 2” for the Stock Item “Stock Item 2”.

The following enhancements have been enabled to achieve this functionality:

‘Repeat’ Attribute for Part and Line over a Collection

Context Free Repeat for Part and Line, together with SET/Break On

Usage of the function


The Repeat Attribute has been enhanced consistently across Part and Line Definitions to support Context Based as well as Context Free Repeat.

The common syntax allows the repetition of a contained line, with or without a collection.



Context based Repeat – The Repeat attribute of the Part can repeat the contained line over a collection. Each line in this case is associated with each object of the collection. This was the earlier capability even before chúng tôi 9.

Context Free Repeat – From Release 1.8, the Collection parameter in the above syntax has been made optional. This allows the repetition of a contained line without a collection. Since the no. of times the line has to be repeated is not known, the usage of the attribute SET to specify the count becomes mandatory. In case of ‘Edit’ mode, the attribute ‘Break On’ can be used to specify the terminating condition for repetition.

So far, the Repeat attribute at Line definition has been accepting only a field name which internally uses the repeat behaviour of the Report and Variable for determining the no. of times it can be repeated. This attribute has now been enhanced to support the consistent syntax to enable “Context Based” and Context Free repetition of the same field horizontally.



Context based Repeat – The ‘Repeat’ attribute of the line can repeat the contained field over a collection. Each field in this case is associated with each object of the collection.

Context Free Repeat – The collection parameter in the above syntax is optional. This allows the repetition of a contained field without a collection. Since the no. of times the field is to be repeated is not known, the usage of the attribute SET to specify the count becomes mandatory. In case SET is not specified, the Field will be repeated as per the existing Columnar behaviour.

Example 1: Item-Wise Party-Wise sales quantity report using Context-Based Repeat of Field

Following is the code snippet to design the above report using enhanced columnar capability:

Collection definitions for Stock Item wise Party, sales quantity etc., are as follows:

[Collection : Smp CFBK Voucher]

Type : Voucher

Filter : Smp IsSalesVT

[Collection : Smp Stock Item]

Source Collection : Smp CFBK Voucher

Walk : Inventory Entries

By : IName : $StockItemName

Aggr Compute : BilledQty : SUM : $BilledQty

Keep Source : ().

Filter : SmpNonEmptyQty

[Collection : Smp CFBK Party]

Source Collection : Smp CFBK Voucher

Walk : Inventory Entries

By : PName : $PartyLedgerName

Aggr Compute : BilledQty : SUM : $BilledQty

Keep Source  : ().

Filter       : Smp NonEmptyQty

[Collection n : Smp CFBK Summ Voucher]

Source Collection : Smp CFBK Voucher

Walk : Inventory Entries

By   : PName : $PartyLedgerName

By   : IName : $StockItemName

Aggr Compute    : BilledQty : SUM : $BilledQty

Keep Source     : ().

Search Key      : $PName + $IName

[System : Formula]

Smp IsSalesVT   : $$IsSales:$VoucherTypeName

Smp NonEmptyQty : NOT $$IsEmpty:$BilledQty

From these Collections, following can be observed:

The Rows, i.e., Stock Items, are repeated over the Collection ‘Smp Stock Item’.

The Columns, i.e., Party Names, are repeated over the Collection ‘Smp CFBK Party’.

The Intersection values between these Rows and Columns, i.e., Item wise Party wise Sales Quantity, are set using the Collection ‘Smp CFBK Summ Voucher’. This Collection is indexed on Methods $PName + $IName using the Collection Attribute ‘Search Key’. Thus, the Collection is indexed on Party Name and Stock Item Name, which makes it unique across all the Objects within the Collection ‘Smp CFBK Summ Voucher’.

The Lines for Title and Details are repeated for the Party Names as shown below:

[Line : Smp CFBK Rep Title]

Use : Smp CFBK Rep Details

Local : Field : Default : Type : String

Local : Field : Default : Align : Center

Local : Field : Smp CFBK Rep Name : Set as : “Particular s ”

Local : Field : Smp CFBK Rep Name : Widespaced : Yes

Local : Field : Smp CFBK Rep Party : Set as : $PName

Local : Field : Smp CFBK Rep Party : Lines : 0

Local : Field : Smp CFBK Rep ColTotal : Set as : “Total”

[Line : Smp CFBK Rep Details]

Fields : Smp CFBK Rep Name , Smp CFBK Rep Party , S mp CFBK Rep Col Total

Repeat : Smp CFBK Rep Party : Smp CFBK Party

Title Line uses the detail line where the Field Smp CFBK Rep Party is repeated over the Collection “Smp CFBK Party”. In the Title Line, the Field “Smp CFBK Rep Party” is set with the value “$PName”, which sets the Party Names from the Collection “Smp CFBK Party”.

Retrieving the values in cells based on Party name available from context and stock item name available in the field as shown below:

[Field : Smp CFBK Rep Name]

Use : Name Field

Set as : $IName

Display : Stock Vouchers

Variable : StockItemName

[Field : Smp CFBK Rep Party]

Use : Qty Primary Field

Set as : $$ReportObject:$$CollectionFieldByKey:$BilledQty:@SKFormula:SmpCFBKSummVoucher

SKFormula : $PName + #SmpCFBKRepName

Format : “NoZero”

Border : Thin Left

In this code snippet, we can observe that the Field Smp CFBK Rep Party is the intersection between rows & columns. The value is gathered from the Collection Smp CFBK Summ Voucher using the function $$CollectionFieldByKey, where the Index Key in the current context is passed as a parameter. “$PName” in the current object context returns the Party Name. Similarly, the Field Value #SmpCFBKRepName in the current context returns the Stock Item Name. Hence, the Search Key Index “Party Name + Stock Item Name” for every Intersection point is passed to this function, which extracts and returns the corresponding Quantity from the Collection.

Calculating Field Level Totals, i.e., Stock Item Totals, across all Parties is done using the Line Attribute ‘ Total ’ and the Function $$Total , as shown below:

[Line : Smp CFBK Rep Details]

Total : Smp CFBK Rep Party

[Field : Smp CFBK Rep Col Total]

Use : Qty Primary Field

Set as : $$Total:SmpCFBKRepParty

Line Smp CFBK Rep Details contains an Attribute ‘Total’, which accepts Field Names as its value. In other words, we declare at the Line that the Fields are to be summed for later use. This sum gets accumulated and rendered in the Field “Smp CFBK Rep Col Total”, where the function

$$Total returns the accumulated Total for the given Field Name as the Parameter to this Function.

Currently, Tally supports printing of multiple forms within a single report in single orientation only, i.e., all the forms within a report can be printed either in Portrait or in Landscape format only, as specified in the report.

In order to support the printing of multiple forms within a single report in different orientations, the behaviour of Variable SVPrintOrientation has been enhanced.

To achieve this behaviour, the local declaration of the Variable SVPrintOrientation at Report level is mandatory, and its value must be set using the form level attribute ‘Set Always’ in individual forms.

This will be very useful in scenarios where multiple forms are being printed from a single report. For example, from a Payment Voucher, one needs to print both Voucher and Payment Advice. However, the Payment Voucher needs to be printed in ‘Portrait’ form, and the Payment Advice in Landscape.


[Report: TSPL Smp VarSVPrintOrientation Extended]

Form : TSPLSmpVarSVPrintOrientationFrm1,  TSPLSmpVarSVPrintOrientationFrm2

Variable : SV Print Orientation : String

[Form: TSPL Smp VarSVPrintOrientation Frm1]

Set Always : SV Print Orientation : “Portrait”

[Form : TSPL Smp VarSVPrintOrientation Frm2]

Use : TSPL Smp VarSVPrintOrientation Frm1

Set Always : SV Print Orientation : “Landscape”

In this example, the report TSPLSmpVarSVPrintOrientation Extended has two forms, viz. TSPLSmpVarSVPrintOrientationFrm1 and TSPLSmpVarSVPrintOrientationFrm2 .

Based on the value set to the variable SV Print Orientation, both the forms are being printed in the respective orientation.

Multiple-Column feature in chúng tôi 9 has till date been used by the Tally users for various reporting needs like Comparative Analysis of Data across Multiple Periods (Months, Quarters, Years, etc.), Multiple Companies, Multiple Godowns, etc. It can also be used for comparative study of various parameters like Budget vs. Actual Performance, by getting the same displayed in the form of a column-based report.

From Release 4.7 onwards, support for Multi Columns has been extended to Edit Mode too, to enable the developer to design and implement such functionalities in Tally, as per requirement.

To make this possible in TDL, the Horizontal Scrolling behaviour has been enhanced to work in Edit Mode, which will enable the developer to create a user friendly interface, thereby allowing the user to enter data conveniently in tabular format. To achieve the columnar scrolling behaviour; in TDL, fields within the required line can be repeated over either of the following:

Collection of Objects , OR

Sub-Collections under a Primary Object, provided the Sub-Collections contain Object(s)

In the absence of the above ‘Repeat’ specification, the only criterion to repeat the Fields/ Columns is that the number of Fields to be repeated must be known to the Line.

 With respect to Object context, Horizontal Scroll will only happen if Objects/Sub Objects, on which Columns are to be repeated, exist. In other words, in Create Mode with Object Context, Horizontal Scroll will not work as the number of fields to be repeated is not known.

Please note that In TDL, to make the programming simpler and to optimise the reporting and query area, we have introduced two definitions – Rule Set and Name Set, and two data types – Flag Set and Num Set.

Rule Set is a definition in TDL and can be used to define a set of rules. You can use this definition to evaluate the rules efficiently. Rule Set can be defined with a single dimension or multiple dimensions along with flow control. The attribute Rule Set and related functions help to evaluate the defined Rule Sets. The result of a Rule Set is always an Object method of Flag Set data type. The functions related to Flag Set data type allow you to access the Flag Set. Storing the Flag Set result in the database is currently not supported. For example, during voucher acceptance, the Rule Set can be used to check the correctness of data.

The definition Rule Set makes TDL programming simpler because of its ability to allow a developer to scope only one validation at a time and not all of them together. It reduces the code size. It also provides the named identity to access flag set values. Rule Set increases the efficiency of the programme, which is measured on performance and memory usage.



Various attributes and functions, which are related to Rule Set are explained below:

Break On is a single type attribute with constant value. You can use the attribute Break On in Rule Set definition to determine the continuation of evaluation in the current rule set. It provides vertical flow control to evaluate the rules. Break on can also be mentioned with Rule attribute.


While evaluating each rule,

If the value of Break On matches with the result of the rule, then the evaluation flow will break and further rules are not evaluated in the current Rule Set. The remaining rule values default to No .

If the attribute Break On is not specified, the evaluation flow continues, irrespective of the result of rule.

Walk On is a single type attribute with constant value. The attribute Walk On helps to determine whether the next dimension will be evaluated or not, for the current rule. It has diagonal flow control to evaluate the steps.


While evaluating each rule,

If the value of Walk On value matches with the result of the rule, then the evaluation flow continues to evaluate the next dimension in the current rule context. If the next dimensions are not evaluated, the rule values default to No.

If the attribute Walk On is not specified, the evaluation flow continues to evaluate the next dimension, irrespective of the result of the rule.

Rule is a Triple list attribute. You can use the attribute Rule to define a rule. It accepts three parameters.



Possible options are

True/Yes: When the result of the rule is True/Yes, it stops the evaluation further in the current rule set. The next dimension gets evaluated for the current rule.

False/No: When the result of the rule is False/No, it stops evaluating further.

Never: It continues the evaluation, irrespective of rule result.

Update the detailed information about Vlan Trunking Protocol: What Is Vtp In Networking & Benefits on the website. We hope the article's content will meet your needs, and we will regularly update the information to provide you with the fastest and most accurate information. Have a great day!