Trending November 2023 # What Is Profit And Loss Statement? P&L Statement Examples # Suggested December 2023 # Top 19 Popular

You are reading the article What Is Profit And Loss Statement? P&L Statement Examples updated in November 2023 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 December 2023 What Is Profit And Loss Statement? P&L Statement Examples

What is Profit and Loss Statement?

A Profit and Loss Statement illustrates how much profit you made in any given period. Usually, it is one year. A Profit and Loss Statement is important because it illustrates whether or not we have made a profit – one of the most important objectives of being in business.

This is also important to various other parties – the bank would like to know we made a profit so they can be sure we can continue to repay their loan, and the government would like to know the size of our profit To calculate our tax. It also summarises our revenue and expenses for the year, which is important for analyzing how money has come in and out of our business.

On our Trial Balance, we have six sections – Assets, Liabilities, Expenses, Revenue, Drawings and Owner’s Equity. Take another look:

Why P&L Statement is Importance?

The Profit and Loss Statement is a very important report. It’s the report you’ll submit to the bank next time you apply for a loan. They’ll use it to see whether or not your business makes enough money to pay it back.

It’s the report you’ll submit to investors who want to invest in your bakery. They’ll use it to determine whether your business is profitable and will give them a good return on their investment.

It’s the report you’ll submit to the government. They’ll use it to work out how much money you made and how much tax you need to pay.

Anyone who needs information about your business’s profitability will use this report. Good job! Now let’s take care of the Profit and Loss Statement’s big brother – the Balance Sheet.

How to Create a Profit and Loss Statement





Bank $21,650

Loan $9,000

Computer $1,500

John’s Car Shop $3,000

Car $3,000

Accumulated depreciation $400

iPhone $500

Oven $500



Cake mix $3,000

Sales $7,000

Interest expense $1,000

Telephone expense $300

Repairs expense $50

Depreciation $400


Owners’ Equity

Drawings $1,000

Owner’s Equity $15,000

Balance $34,400

Balance $34,400

To check our Profit and Loss, we’re going to have the figures from two of these sections – Revenue and Expenses.

Let’s have a look at these numbers:


Sales $7,000


Cake Mix $3,000

Telephone $300

Repairs $50

Interest $1,000

Depreciation $400

This is all the information that we need to produce for our Profit and Loss Statement. Let’s get started.

The basic format of a Profit and Loss Statement is simply:

Revenue - Expenses = Profit

Using the figures from our trial balance, simply fill in the figures in the Profit and Loss Statement below to work out your profit!





Total Revenue

$7,000 (A)

Less: Expenses

Cake mix expense


Telephone expense


Repairs expense


Interest expense


Depreciation expense


Total Expenses

$4,750 (B)

Net Profit

$2,250 (C)

Congratulations. You made a profit! As we can see in our Profit and Loss Statement, your bakery made a profit of $2250

Now, before you get too excited, you need to remember that you don’t get to keep all that profit for yourself! There’s a very important man known as the taxman who takes his cut each year:

How to Calculate Tax

Now that we’ve worked out our profit, we can work out how much tax we need to pay.

Your profit is $2,250. Assuming 30% tax rate, you need to pay a tax of $675

Remember, this is just an example – every country has its tax rate!


Tax Expense



Accounts Payable


Tax Expense is an expense, so this causes our debit side to increase. The other side of the equation is accounts payable, which is a liability.

It’s a liability because it is still owing; it’s a bit like a bill that’s waiting to be paid. This liability will be carried forward on our balance sheet until we pay our tax the following year. At the time we finally pay it, we will credit our bank account by $675 and debit our accounts payable by $675. By now, you should be able to see that this will reduce our accounts payable to zero, and the liability will be eliminated from our accounts.

After that, we prepare our tax ledgers as per usual and add the balances to the trial balance.





Opening balance


Tax Payable








Opening balance


Tax expense




Profit and Loss Statement Example





Total Revenue

$7,000 (A)

Less: Expenses

Cake mix expense


Telephone expense


Repairs expense


Interest expense


Depreciation expense


Total Expenses

$4,750 (B)

Net Profit

$2,250 (C)

Less taxation (30%)


Net profit after tax




Cake mix expense


Telephone expense


Repairs expense


Interest expense


Depreciation expense


You're reading What Is Profit And Loss Statement? P&L Statement Examples

Payday 2 Packet Loss: What Is It And How To Fix It?

PAYDAY 2 packet loss: What is it and how to fix it?




PAYDAY 2 is a great game, loved by many, that can be enjoyed in both singleplayer and multiplayer modes.

Unfortunately, playing it online with others might put you against various connectivity issues, including high latency and packet loss.

Check out the best VPNs that can improve packet loss without great efforts.

Visit our VPN Gaming Hub to learn more about the benefits of using VPNs while gaming.



To fix Windows PC system issues, you will need a dedicated tool

Fortect is a tool that does not simply cleans up your PC, but has a repository with several millions of Windows System files stored in their initial version. When your PC encounters a problem, Fortect will fix it for you, by replacing bad files with fresh versions. To fix your current PC issue, here are the steps you need to take:

Download Fortect and install it on your PC.

Start the tool’s scanning process to look for corrupt files that are the source of your problem

Fortect has been downloaded by


readers this month.

PAYDAY 2 is an awesome game where you choose a character and posse up to pull a heist. Whether you plan on robbing a bank, a casino, or a safehouse with your peers, PAYDAY 2 can make you feel like a great heist artist.

However, and this is quite a big however, multiplayer means you’ll be facing certain connectivity issues from time to time. Especially if your connection is not exactly NASA-tier, which we have reasons to believe isn’t.

One of the most common connectivity issues you might encounter in PAYDAY 2 is packet loss. You’ll get to know exactly why it’s so common, and why many people hate it with a passion.

What is packet loss in PAYDAY 2

Packet loss is almost the same no matter where you encounter it. And just so you know, with PAYDAY 2 things aren’t wildly different. Therefore, you’ll probably be able to tell packet loss apart from other connectivity issues once you understand what it is.

To put it simply, packet loss means data packets never make it to their destination. It’s quite intuitive, don’t you think? Due to their similar symptoms, packet loss and high latency (lag) may be easily confused. But make no mistake, one’s more severe than the other.

Packet loss

Data packets get lost, therefore they never make it to their destination

High latency (lag)

Data packets need more time to reach their destination, but eventually, they get there

So it’s really no mystery why packet loss is deemed as the greater evil in this situation. Still not convinced? Here’s what packet loss can do to your PAYDAY 2 gaming session:


Causes you and/or other players to freeze for a few seconds, then suddenly teleport to another place on the map, which can be very frustrating when you’re about to take the perfect shot

Unresponsive commands

Shouting, using cable ties, marking guards, and yes, shooting can also be severely delayed or canceled out by packet loss

Sluggish movement

PAYDAY 2 is not a pray & spray type of game, it requires a lot of planning ahead, but that can get easily tenfold more difficult if your character can’t move or is suddenly ridiculously slow

Voice chat doesn’t work properly

In PAYDAY 2, you won’t have time to type text messages to your crew, but packet loss makes it impossible to use the voice chat, so you’ll have no options left

Sudden disconnections/game crash

By far the most annoying thing that could happen, especially if you’re just about to escape from a perfect score heist

What causes packet loss in PAYDAY 2

There are a lot of reasons why PAYDAY 2 packet loss may decide to spawn in your life. Incidentally, the wide variety of factors that play a role in packet loss incidence is also what makes it so difficult to conquer.

To put it shortly, if you have no idea what caused the problem, you may have a hard time figuring out a fix. That’s also why so many players treat packet loss using the trial and error method.

Poking in the dark can sometimes be effective, but it strictly depends on luck, there’s no science there.

With that in mind, let’s take a look at some of the potential causes for packet loss in PAYDAY 2:

Network congestion

This is the most common reason for packet loss, and it can occur anywhere between your PC and the game server host’s network

Using Wi-Fi instead of wired connections

It’s common knowledge that using a wired connection is faster and more stable than Wi-Fi due to the lack of interference

Running the game at maximum quality settings

Some connections have narrower bandwidths, so they might start dropping packets if they can’t accommodate your game’s quality settings

Subpar Ethernet cables

Using worn-out, damaged, or old Ethernet cables can seriously impact your PAYDAY 2 experience

Cheap, limited Internet plan

If your Internet plan isn’t designed for intense gaming sessions, you may experience packet loss in PAYDAY 2

Outdated software

Using outdated drivers, software, or firmware versions may lead to your early demise as a PAYDAY 2 player

ISP throttling

Maybe your plan is limited, or your ISP just decides to hack and slash your bandwidth as a measure to cut costs; either way, you’re in for some packet loss

Server-side issues

The game server host may have some of the issues we’ve presented above, in which case you’re all going to have a not-so-fun time in PAYDAY 2

As you can see, the list of reasons is not exactly clustered around a single culprit. You may notice that the packet loss issues can arise on either end of the connection, and sometimes even in the middle.

Just so you know, most of the times you’ll be able to fix packet loss depending on where it occurs (if it’s happening on your side or on your ISP’s turf). But we’ll get to that in a few.

How to detect packet loss in PAYDAY 2

If you want to run a packet loss test in PAYDAY 2, you’ll need the IP address of the server you’re playing on. This can be a bit difficult, considering that PAYDAY 2 doesn’t run on officially-hosted servers.

Instead, players can be hosts or clients, so it’s more like a P2P connection between players. Thus, you’ll need to figure a way out to get hold of the server’s IP address, and the way you decide to go with this strictly depends on you.

Once you know the address, go through the following steps:

Launch a CMD instance on your PC

Type pathping chúng tôi (replace chúng tôi with the server’s IP address)

Wait for the results

Check which node has high packet loss values

Like we said earlier, packet loss can happen anywhere on your connection. This test will tell you exactly where, but without being too descriptive.

The pathping test will indicate which nodes are leaking packets, and you’ll have to figure out which part of the connection is that node related to. Just use the screenshot below for clarification.

Once you’ve managed to identify the location of the packet loss, the battle is half won. You’ll at least know how to proceed.

How to fix packet loss in PAYDAY 2 1. Use a VPN

Buy a premium VPN plan (we recommend PIA)

Download and install the VPN on your PC

Launch the VPN and log into your account

Connect to a fast server of your choice (nearby servers are usually faster)

Launch PAYDAY 2

Check if you’re still leaking packets

More often than not, a VPN proves to be efficient in eliminating or at least curbing the nasty effects of packet loss. However, you must understand that this fix only works if your ISP is the one to blame for this problem, to begin with.

Whether it’s because they throttle your bandwidth or can’t seem to route network traffic in an efficient manner, these can lead to packet loss, and can subsequently be fixed by using a VPN.

Private Internet Access

Need a VPN to improve packet loss in PAYDAY 2? Why not give PIA a try?

$2.69/mo. Buy it now

Private Internet Access, for instance, is one of the VPNs that can fix packet loss in PAYDAY 2. It’s brought to you by Kape Technologies and is currently one of the few VPN providers that offer 24/7 live chat support.

Additionally, your connection and privacy will also be secured, and you’ll be able to unblock geo-restricted content using a VPN. It’s a world of fun features just waiting for you.

2. Flush your DNS

Launch an elevated CMD instance on your Windows 10 PC

Run the following commands, one by one:

Restart your PC just as soon as the last command is executed successfully. Re-launch PAYDAY 2 and check if there’s any improvement.

The reasoning behind performing this action is that sometimes cached data build-ups on your PC might mess with your connection, and flushing/renewing your DNS and reseting the winsock is one of the most simple ways to fix that.

Additionally, you may even want to try switching to public free DNS instead of your ISP-assigned one. Doing so could dramatically increase your connection speed. We’ve tried both Google and Cloudflare and we’re nothing short of satisfied with the results.

3. Perform a bit of manual troubleshooting

Restart the game and check if there’s any improvement

Replace, upgrade, or fix your Ethernet cables (upgrading from Cat 5 to Cat 6 could make a huge difference)

Always use wired connections instead of Wi-Fi, if possible (Wi-Fi packet loss happens way more often)

Restart your PC, router, and/or modem, as necessary

Update drivers on your system, especially network adapter ones

Make sure that your router runs on the latest firmware version

Switch the channel your wireless router broadcasts on to avoid interference

Avoid playing PAYDAY 2 during peak hours if you suspect network congestion (or use a VPN to bypass it)

Close any bandwidth-heavy background apps or services on your PC (torrenting clients, VoIP clients)

Call your ISP and ask them if they can look into the issue, maybe even fix it

Lower your in-game quality settings and see if there’s any improvement

Buy a better Internet plan if the one you’re on is extremely limiting

Please note that none of the suggestions listed above may fully eliminate packet loss in PAYDAY 2. However, performing as many of them as you can at least improve the overall quality of your connection.

And we all know that a well-maintained connection is less prone to connectivity issues such as packet loss, high ping, or jitter.

Final thoughts on PAYDAY 2 packet loss

In conclusion, if you’re experiencing packet loss in PAYDAY 2, waiting it out is often times the best sollution, albeit not the most agreeable one.

Using a VPN is, without a doubt, one of the easiest methods to eliminate packet loss in PAYDAY 2, but it must be caused by your ISP for this fix to work. That’s why running a pathping test is more often than not necessary.

Flushing your DNS also gives some pretty good results in curbing packet loss occurrence. Last, but not least, you can perform a bunch of manual troubleshooting operations to fix or improve packet loss.

Your connection is not secure – websites you visit can find out your details:

Use a VPN to protect your privacy and secure your connection.

We recommend Visit Private Internet Access

We recommend Private Internet Access , a VPN with a no-log policy, open source code, ad blocking and much more; now 79% off.

Was this page helpful?


Start a conversation

Difference Between Control Structure And Control Statement

Control structures and control statements are essential concepts in programming. A control structure could be a piece of code that controls the stream of execution of a program based on certain conditions. On the other hand, a control explanation could be a statement that performs a particular activity based on certain conditions. In this article, we’ll investigate the difference between control structures and control explanations, their utilization, and how they contribute to the general usefulness of a program. We’ll too talk about a few illustrations of commonly utilized control structures and articulations of completely different programming dialects.

Control Structure

A control structure may be a fundamental concept in programming that permits engineers to form coherent structures that control the stream of a program based on particular conditions. Control structures are categorized into three different types grouping, determination, and cycle. A grouping control structure could be a straightforward, direct structure that executes code successively, one after the other. A determination control structure is utilized to execute particular codes based on certain conditions. It incorporates if-else explanations and switches articulations. At long last, an emphasis control structure is utilized to rehash a chunk of code at different times based on particular conditions.

Features of Control Structure

Control structures give a way to control the stream of execution in a program.

Control structures can be utilized to form consistent structures that execute code based on particular conditions.

Control structures can make strides in the proficiency of a program by avoiding pointless computations.

Control structures can make programs less demanding to get and investigate by making coherent structures that are simpler to take after.

Advantages of Control Structure

The essential point of interest of control structures is that they can move forward the proficiency of a program. By controlling the stream of execution, control structures can avoid pointless computations and speed up the program’s execution.

Control structures can make programs less demanding to get and investigate by making consistent structures that are simpler to take after.

Control structures permit conditional execution, which suggests that code can be executed as it were when specific conditions are met. This could offer assistance to anticipate mistakes and make strides in the reliability of a program by guaranteeing that code is executed within the adjusted arrangement.

Drawbacks of Control Structure

Abuse of control structures can make code more complex and harder to get it. If as well numerous control structures are utilized, it can be troublesome to see the general structure of the program and get how the diverse parts of the code relate to each other.

Control structures can make code harder to preserve by making conditions between distinctive parts of the code.

Control structures can make code harder to investigate by making complex and complicated rationale structures. If there are bugs within the code, it can be troublesome to distinguish and settle them since of the complex interdependencies between diverse parts of the code.

Control Statement

A control statement could be a sort of statement that performs a particular activity based on certain conditions. Control articulations permit designers to alter the stream of execution of a program based on particular conditions. There are a few sorts of control statements, counting if-else, switch, and circle explanations. An if-else articulation is utilized to execute a particular code based on a particular condition. A switch statement is utilized to execute particular code based on different conditions. At last, a loop articulation is utilized to rehash a chunk of code at different times based on particular conditions.

Features of Control Statement

Control explanations permit the software engineer to indicate conditions beneath which certain pieces of code ought to be executed.

Control explanations can be utilized to make complex decision-making structures in a program.

They can be utilized to perform mistake dealing and other exception-handling errands.

Control statements can be utilized to form consistent structures in a program that make it less demanding to peruse and get it.

Control articulations can be used to make settled structures, which can be utilized to form more complex decision-making structures.

Control Statement Drawbacks Include

Control statements can make code more complex and harder to get, particularly if they are utilized unreasonably or improperly.

Control statements can make code harder to study and get, particularly if they are utilized unreasonably or improperly.

Control statements can increase the execution time of a program, particularly in case they are utilized too much or improperly. This may lead to slower program execution, which can be an issue for expansive or time-critical programs.

Differences between Control Structure and Control Statement

The differences are in the following table −

Basis Of Difference

Control Structure

Control Statement


Control structures are squares of code that control the stream of execution based on certain conditions.

Control structures are squares of code that control the stream of execution based on certain conditions.


They manage how the program streams and which segments of code are executed.

They execute particular activities or operations based on conditions.


Utilized to gather articulations together and make consistent arrangements of code.

Utilized to form choices, repeat over a set of values, or perform certain activities based on conditions.

Execution Control

Control structure can control the execution stream by changing the arrangement in which articulations are executed

The control statement executes a single activity or a square of articulations based on conditions.

Structure Adjustment

It can alter the structure of the code by including circles, conditional explanations, or branching explanations.

It does not adjust the structure of the code; it performs particular operations inside the existing structure.

Code Organization

It empowers the gathering and organization of related code squares.

It does not affect code organization; it is ordinarily utilized inside control structures to perform particular activities.


Parasound Halo P 7 Dual

Parasound Halo P 7 dual-mode analog preamp

High-end AV specialists Parasound have announced their latest preamp, the Halo P 7, which is intended to cater to multichannel music and surround sound from Blu-ray, DVD-Audio, and SACD players as well as to traditional stereo sources.  To do so, it incorporates both 2-channel and 7.1-channel analog preamps, with a range of balanced XLR and RCA stereo inputs and outputs.

Owners can adjust left-right / front-rear balance, give each input a custom name and carry out gain-matching across all 10 inputs, including a front panel PMP input. Parasound claim the Halo P 7’s noise floor is 10dB below that of a typical AV receiver, helped by a low-noise MM/MC phono input and remote tone control. It also has an RS-232 socket, discrete IR codes, IR repeater input/loop jacks and three DC triggers for use with a distributed audio or home automation system.

Best of all, perhaps, is the volume knob, which Parasound describe as having “an unusually solid, silky smooth operation”. You can’t ask for much more than that. The Halo P7 is available from dealers now, priced at around $2,000.

Press Release:

Parasound Delivers Purist Analog Preamp for Stereo and Multichannel Audio in its Halo Family of High End Products

SAN FRANCISCO (8/19/08) – Parasound, the preeminent manufacturer of high-end audio components, has introduced an audio preamplifier designed for sound purists seeking superior low-noise performance from classic stereo sources as well as multichannel music and movies from Blu-ray, DVD-Audio, and SACD players. It will be marketed in the company’s high-end Halo product line.

The Parasound Halo P 7 is both a two-channel and 7.1-channel analog preamplifier that is designed to combine outstanding audio performance while providing a flexible and easy-to-use interface. It will satisfy the most demanding two-channel audio purist who also enjoys multichannel music and movies. The Halo P 7 is also a lower-cost alternative to a surround processor if your TV can switch video inputs and you own multi-channel analog sources such as a DVD player, SACD player or Blu-ray player with multichannel analog outputs. The analog bass management for stereo sources makes subwoofer and small speaker integration easy. There is also a volume control bypass mode for users who wish to use their home theater receiver to decode digital sources. The Halo P 7 can also switch 1080p HDMI sources when it is linked to the optional Zhd HDMI switcher.

“With stereo or surround sound, silence is golden,” said Richard Schram, Parasound’s president and founder. “With its exceptional parts quality, heavy duty construction, outboard HDMI switching option, and balanced XLR input and output connections, Halo P 7’s noise floor is a full 10 dB below that of a typical AV receiver, and you don’t achieve performance like that with off-the-shelf parts. Our engineering team has worked miracles to keep this level of quality at an affordable price point.”

The Halo P 7 user can adjust left-right / front-rear balance, make custom input names and match the gain for all 10 inputs, including a front panel MP3 input. Versatility includes balanced XLR connections, a low-noise MM/MC phono input and remote tone control. It provides RS-232 control, discrete IR codes, IR repeater input/loop jacks and three DC triggers invite system integration.

The Parasound Halo P 7 has a very simple and elegant front panel operation and style, with just two buttons and one knob to control most of its functions. The controls are of extremely high quality, and the control knob has an unusually solid, silky smooth operation, comparable to the focus ring on a high quality camera.

The Parasound Halo P 7 is currently available from Parasound Halo dealers at a suggested retail price of $2000.

What Is Data Storage And How Is It Used?

As modern companies rely on data, establishing dependable, effective solutions for maintaining that data is a top task for each organization. The complexity of information storage technologies increases exponentially with the growth of data. From physical hard drives to cloud computing, unravel the captivating world of data storage and recognize its ever-evolving role in our daily lives.

What is Data Storage? 

Data storage, or data keeping, is storing information and making it as readily available as possible via technology designed particularly for that purpose. It constitutes a simple method of storing data in digital form on computer devices, and keeping data on hand makes many digital processes more effective.

Storage devices may use electromagnetic, optical, or other media to keep the data safe and recover it when necessary. File recovery and backup procedures become simple by data storage in the case of an unforeseen computer failure or cyberattack. 

While setting up data storage, every organization should consider these three factors: dependability, affordability of the storage structure and safety features. 

Source: vectorStock

Also Read: Understanding the Basics of Data Warehouse and its Structure

Why Do We Need Data Storage? 

Innovative technologies like data analysis, the Internet of Things, and AI produce and utilize enormous amounts of data. Therefore, data storage plays a major role in the growth of any organization now more than ever. Some of the benefits of data storage are as follows:

It is simple to gather large amounts of records for a longer time using electronic data storage.

Making duplicates of stored data makes it simple to back it up, enabling file loss or corruption recoverable more quickly and easily. 

With today’s cutting-edge security technologies and capabilities, plenty of techniques exist to store and safeguard particularly sensitive data digitally safely.

Every authorized individual has access to centralized stored data, which can be viewed and shared between teams whenever they collaborate. 

Digital data can be more easily categorized and organized, and the process can be accessed using a desktop computer or similar connected device. 

Digital data storage is faster than producing files that must be kept in file cabinets by printing out hard copies of data. 

Types of Data Storage

There are majorly three types of data storage as follows: 

Primary Storage

A computer system’s primary data storage serves as its primary storage. The primary storage is temporary memory, also referred to as cache memory. Primary memory is invariably smaller than secondary memory and comes with comparatively lesser storage. It is the only storage form readily available to the CPU, unlike RAM and ROM (Read-only Memory). The CPU always accesses primary storage-stored commands and processes them as needed. All data that is actively worked on is kept in an organized manner. 

Secondary Storage

A secondary storage system can keep data longer and has additional storage space. External or internal computer components include hard drives, USB drives, CDs, and other media. One computer typically accesses secondary storage through its input/output channels and transfers the needed data utilizing an intermediate space in primary storage.

Tertiary Storage

It is an extensive electronic storage system that is typically quite sluggish; hence, it stores components that are retrieved occasionally. This method often incorporates a robotic device that mounts and dismounts removable drives into computer storage units following the system requirements. It helps access extremely massive databases without the assistance of any human controllers.

Traditional Storage Technologies

The conventional data storage systems are as follows: 

Magnetic Storage

A magnetic memory, such as an HDD, comprises circular drives composed of non-magnetic components and coated using a thin film of magnetic material, where data is stored. The magnetized face of such disks go inside a rotary drive, with a read-write unit of a magnetic yoke and a magnetizing coil that spins in close range of the disks.

Optical Storage

An optical drive is a device that uses optical storage techniques for data processing functions such as read/write/access. Laser light helps in reading and storing data on an optical disk. An optical disk is a resin similar to polycarbonate, and the electronic data is maintained in tiny openings on the polycarbonate layer.

Modern Data Storage Technologies

The modern data storage systems are as follows: 

Flash Storage

Flash storage uses solid-state drives (SSDs) with flash memory for large-scale data or file archiving. It substitutes HDDs and other forms of storage. A multi-terabyte dataset can be kept “in memory” using an all-flash array, which offers read/write speeds four times faster than HDDs. Compared to HDDs, flash storage has a higher density. 

Cloud Storage

By replicating the capability of physical storage devices, cloud storage enables you to save or retrieve various content types whenever you need to from a virtual setting. Any data uploaded to the cloud is kept off-site in reliable data centers, and an on-site operator or an off-site third-party service often handles it. Users can access cloud storage using a computer with an internet connection, web portal, intranet, cloud storage apps, or additional application programming interfaces (APIs). 

Object Storage

Object storage is a technique that manages data storage in distinct components or objects. A framework on which data analytics software can run queries on objects is known as an object store. By adopting a flat address space, object storage removes the need for the hierarchical structure that different systems need. This enables easy scaling up or down to accommodate storage workload variations and accommodate quick expansions and contractions.

Software-Defined Storage

SDS is a storage system that separates the hardware and software used for storage. Unlike conventional NAS or SAN systems, SDS runs on any x86 or industry-standard system, eliminating the software’s reliance on specific hardware. Software-defined storage is a method of managing data that makes data storage resources more flexible by abstracting them from the supporting physical storage hardware. 

How Does Data Storage Work?

Whenever you upload digital data to a personal computer, it gets saved to a device, which stays there until it is damaged. Storage is fundamentally different from computer memory: While anyone can swiftly retrieve information from your computer’s RAM, such data is only accessible in RAM when your computer is off. 

Modern computers or devices may connect to storage devices directly or via a network connection. Users give computers instructions for accessing data stored on and retrieved from various storage devices. On a basic level, data storage depends on two principles: the form it takes and the hardware that it is captured and stored on.

Data Storage Architectures and Concepts

The distinct data storage architectures and concepts are as follows: 

RAID (Redundant Array of Independent Disks)

RAID is a method that uses several drives in tandem rather than just one to boost performance, provide data redundancy, or both. It is a method for securing data during a drive crash by maintaining the same data in different places on many hard drives or solid-state storage devices. It has two or more parallel-operating disks, and RAID level is how disks are arranged. 

A network-attached storage (NAS) server is a specific storage platform that links to devices over a LAN. The server’s connectivity features allow for the retrieval and storage of data from many external devices, and NAS storage also offers extensive sharing capabilities. The system utilizes the features of a file-storage technology and the clustering of a redundant array of drives (RAID). 

Source: Phonixnap

SAN (Storage Area Network)

A storage area network (SAN) is a network-based storage that can access data at the block level. This kind of storage consists of several data storage units connected by a network. The storage format is an amalgam of NAS and DAS. The storage type transfers data across a server and storage using specific networking protocols, like Fibre Channels.

The difference between object storage and block storage are as follows:

Object StorageBlock StorageData is held in flat-file systems as different, distinctive, and recognizable components called objects.Fixed-sized blocks divide the data into sections and rearrange it when necessary.Cost-effective ExpensiveUnlimited Scalability Limited ScalabilityA single central or decentralized system that maintains data in the private, public, hybrid, or cloud.A centralized system for on-site or private cloud data storage. If the program and its data storage are located far away from one another, latencies could pose a concern.Suitable for large amounts of raw data. Large files yield the greatest chúng tôi for storing databases and data related to transactions. It performs best with compact files.

Best Practices for Data Storage Management

Some of the best practices for data storage management are as follows:

Data Backup and Recovery

After you transfer your data from regular, operational systems for immediate and future storage, a reliable data backup and recovery plan will ensure it is constantly kept secure. Backup copies enable data to be recovered from an earlier date, enabling the organization to recover from unforeseen circumstances. Maintaining another copy of the data on another storage device is important for protecting against original data loss or corruption.

Data Deduplication

There are instances where similar data is produced due to repeated operations. You can improve data management and reduce storage costs by setting up a human or automated procedure that constantly evaluates data and eliminates duplicates. Your data will remain clean and prepared for evaluation and questions.

Data Compression

Data compression makes files take up less room on a hard drive and takes less time to transfer or download. The decrease in distance and time could lead to major savings in expenses. It makes it possible to transport data objects and files quickly through networks and the Internet while maximizing the use of physical storage space.

Data Security and Encryption

It measures enable you to identify sensitive data and essential assets, and establish robust security measures that monitor and protect every stage of data sorting, thereby maximizing your data security. Encryption converts the data you store into nonsensical codes; only the owner’s key can decode it. This ensures the data won’t be used, even when unauthorized people gain access to it.

Data Storage in Mobile Devices Internal Storage

The internal memory space of the device is the internal storage. The files you maintain here are restricted to the application itself, so no matter their permissions, other applications cannot access those. Android OEMs and app developers utilize internal storage to store private data, app data, user settings, and additional system files. 

External Storage

Any storage not part of the device’s internal memory, including an attached SD card, is called external storage. Any app with the appropriate permissions could have access to this region, which serves as a free-for-all area. There are two kinds of external storage: SD cards, commonly called memory cards, which represent the secondary external storage, and built-in external storage, which is the primary external storage. 

What’s Next? Frequently Asked Questions

Q1. What are some examples of tertiary storage?

A. Magnetic tape, optical discs, and optical tapes are a few examples of tertiary storage. These gadgets have distinctive portable storage components and are made up of fixed drivers.

Q2. What is the most popular type of storage?

A. A conventional hard disk (HDD) is one of the most widely used media storage systems.

Q3. Where is SDS used?

A. Software-defined storage (SDS) is a technique for managing data storage that carefully divides the operations responsible for allocating resources, securing data, and managing and placing data from the hardware needed to store data.


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 What Is Profit And Loss Statement? P&L Statement Examples 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!