Keyboard Shortcuts in TallyPrime
This topic lists the different shortcut keys that can be used in TallyPrime – for faster data entry.
.highlight { font-weight: bold; background-color: rgb(248, 233, 150); } #searchInput { border: 2px solid #CCE0F4; border-radius: 5px; font-size: 14px; width: 50%; } .searchContainerScroll { background-color: white; position: fixed; top: 70px; box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.1); padding: 15px 15px 5px 15px; transition: top 1s; } .searchContainer { width: 100%; min-width: 300px; background-color: white; padding: 15px 15px 5px 0px; top: -10px; }
| Action | Shortcut in TallyPrime | Location in TallyPrime | Shortcut in Tally.ERP 9 |
|---|---|---|---|
|
To find the Help article from any screen in TallyPrime. |
Ctrl+F1 |
Any screen |
Alt+H |
| To open Notifications report | Ctrl+Alt+N | Top menu | NA |
| To go back to the previous screen by closing the currently open screen To remove inputs that is provided/selected for a field |
Esc | NA | Esc |
| To move to the first/last menu in a section | Ctrl+Up/Down | NA | Ctrl+Up/Down |
| To move to the left-most/right-most drop-down top menu | Ctrl+Left/Right | NA | None |
|
To move from any line to the first line in a list |
Home & PgUp |
NA |
Home & PgUp |
|
To from any point in a field to the beginning of the text in that field |
Home |
NA |
Home |
|
To move from any line to the last line in a list |
End & PgDn |
NA |
End & PgDn |
|
To move from any point in a field to the end of the text in that field |
End |
NA |
End |
|
To move one line up in a list To move to the previous field |
Up arrow |
NA |
Up arrow |
|
To move one line down in a list To move to the next field |
Down arrow |
NA |
Down arrow |
|
To move:
|
Left arrow | NA | Left arrow |
|
To move:
|
Right arrow | NA | Right arrow |
| To rewrite data | Ctrl+Alt+R | NA | Ctrl+Alt+R |
| To quit the application | Alt+F4 | NA | None |
| To view the build information | Ctrl+Alt+B | NA | Ctrl+Alt+B |
| To view TDL/Add-on details | Ctrl+Alt+T | NA | Ctrl+Alt+T |
| To accept or save a screen | Ctrl+A | NA | Ctrl+A |
| To expand or collapse a group in a table | Alt+Enter | NA | Alt+Enter |
| To move to the last field or last line | Ctrl+End | NA | Ctrl+End |
| To move to the first field or first line | Ctrl+Home | NA | Ctrl+Home |
| To open or hide calculator panel | Ctrl+N | NA | Ctrl+N (to Open) Ctrl+M (to Hide) |
| To hide or show the details in a table | Alt+T | NA | Alt+T |
| To open Company Features screen | F11 | Top menu | F11 |
| To primarily open a report, and create masters and vouchers in the flow of work. | Alt+G | Top menu | None |
| To switch to a different report, and create masters and vouchers in the flow of work. | Ctrl+G | Top menu | None |
| To open TallyHelp topic based on the context of the screen that is open | Ctrl+F1 | Top menu | Alt+H |
| To open the company menu with the list of actions related to managing your company | Alt+K | Top menu | None |
| To open the list of actions applicable to managing the company data | Alt+Y | Top menu | None |
| To open the list of actions applicable to sending or exchanging your company data | Alt+Z | Top menu | None |
| To open the import menu for importing masters, transaction, and bank statements | Alt+O | Top menu | None |
| To open the Share menu for sharing transactions or reports through e-mail or WhatsApp | Alt+M | Top menu | None |
| To open the print menu for printing transactions or reports. | Alt+P | Top menu | None |
| To open the export menu for exporting masters, transactions, or reports | Alt+E | Top menu | None |
| To select the display language that is applicable across all screens | Ctrl+K | Top menu | Alt+G |
| To select the data entry language that is applicable to all screens | Ctrl+W | Top menu | Alt+K |
| To export the current voucher or report | Ctrl+E | Top menu | Alt+E |
| To e-mail the current voucher or report | Ctrl+M | Top menu | Alt+M |
| To WhatsApp the current voucher or report | Ctrl+Alt+W | Top menu | Alt+M |
| To print the current voucher or report | Ctrl+P | Top menu | Alt+P |
| To open the Help menu | F1 | Top menu | None |
| To change the date of voucher entry or date/period for reports | F2 | Right button | F2 |
|
To change the date of voucher entry or period for reports To change the period of the company |
Alt+F2 | Right button | Alt+F2 |
| To switch to another company from the list of open companies | F3 | Right button | F3 |
| To select and open another company located in the same folder or other data paths | Alt+F3 | Right button | Alt+F3 |
| To shut the currently loaded companies | Ctrl+F3 | Right button | Alt+F1 |
| To open the list of configurations applicable for the report/view | F12 | Right button | F12 |
| To exit a screen or the application | Ctrl+Q | Bottom bar | Ctrl+Q |
| To activate find bar and initiate finding for user-entered information in masters and transactions | Alt+F | None |
Keyboard Shortcuts – Reports
| Actions | Shortcuts in TallyPrime | Location in TallyPrime | Shortcuts in Tally.ERP 9 |
| To insert a voucher in a report | Alt+I | Bottom bar | Alt+I |
| To create an entry in the report, by duplicating a voucher | Alt+2 | Bottom bar | Alt+2 |
| To delete an entry from a report | Alt+D | Bottom bar | Alt+D |
| To add a voucher in a report | Alt+A | Bottom bar | Alt+A |
| To cancel a voucher from a report | Alt+X | Bottom bar | Alt+X |
| To remove a line entry from a report | Ctrl+R | Bottom bar | Alt+R |
| To display all hidden line entries, if they were removed | Alt+U | Bottom bar | Ctrl+U |
| To display the last hidden line (If multiple lines were hidden, pressing this shortcut repeatedly will restore the last hidden line first and follow the sequence) | Ctrl+U | Bottom bar | Alt+U |
| To drill-down and open a voucher or master from the last level details of a report | Enter | Bottom bar | Enter |
| To drill-down and open a voucher for display | Ctrl+Enter | Bottom bar | Enter |
| To alter a master during voucher entry or from drill-down of a report | Ctrl+Enter | Bottom bar | Ctrl+Enter |
| To select/deselect a line in a report | Spacebar | Bottom bar | Space bar |
| To select or deselect a line in a report | Shift+Spacebar | Bottom bar | Shift+Spacebar |
| To continuously select/deselect multiple rows in a report | Shift+Spacebar+PgUp/PgDn | Bottom bar | Ctrl+Spacebar |
| To view the report in detailed or condensed format |
Alt+F1 |
Right button | Alt+F1 |
| To open the GST Portal from GSTR-1 report | Alt+V | Right button | Ctrl+O |
|
To add a new column (except in Day Book and GST Returns) |
Alt+C | Right button | Alt+C |
|
To alter a column (except in Day Book and GST Returns) |
Alt+A | Right button | Alt+A |
|
To delete a column (except in Day Book and GST Returns) |
Alt+D | Right button | Alt+D |
|
To auto repeat columns (except in Day Book and GST Returns) |
Alt+N | Right button | Alt+N |
|
To filter data in a report, with a selected range of conditions
|
|
Right button | Alt+F12 |
|
After applying filter, to know the field where matches were found, press Filter Details
|
|
Right button | |
|
To calculate balances using vouchers that satisfy the selected conditions
|
|
Right button | Ctrl+F12 |
| To views values in different ways in a report | Ctrl+B | Right button | None |
| To change view – display report details in different views To navigate to different views of the report without changing the context |
Ctrl+H | Right button | F7/F8/F9 Alt+T |
| To view the exceptions related to a report | Ctrl+J | Right button | None |
| To expand or collapse information in a report | Shift+Enter | NA | Shift+Enter |
| To select or deselect lines till the end | Ctrl+Shift+End | NA | Ctrl+Shift+End |
| To select or deselect lines till the top | Ctrl+Shift+Home | NA | Ctrl+Shift+Home |
| To invert selection of line items in a report | Ctrl+Alt+I | NA | Ctrl+Alt+I |
| To perform linear selection/deselection multiple lines in a report | Shift+Up/Down | NA | None |
|
To navigate to the next artifact in the context To increment the Report date or next report in a sequence of reports displayed |
+ | NA | + |
|
To navigate to the previous artifact in the context To decrement Report date or previous report in a sequence of reports displayed |
– | NA | – |
Keyboard Shortcuts – Vouchers & Masters
| Action | Shortcut in TallyPrime | Location in TallyPrime | Shortcut in Tally.ERP 9 |
|---|---|---|---|
| To delete a voucher | Alt+D | Bottom bar | Alt+D |
| To cancel a voucher | Alt+X | Bottom bar | Alt+X |
| To remove item/ledger line in a voucher | Ctrl+D | Bottom bar | Ctrl+D |
| To mark a voucher as Post-Dated | Ctrl+T | Right button | Ctrl+T |
| To autofill details in stat vouchers | Ctrl+F | Right button | Ctrl+A |
| To change mode – open vouchers in different modes | Ctrl+H | Right button | Ctrl+V (As Voucher mode) Alt+I (As Invoice mode) |
| To open the Stock Query report for the selected stock item | Alt+S | Right button | Alt+S |
| To mark a voucher as Optional | Ctrl+L | Right button | Ctrl+L |
| To add more details to a master or voucher for the current instance | Ctrl+I | Right button | None |
| To define stat adjustments during voucher entry | Alt+J | Right button | Alt+J |
| To view list of all vouchers or masters | F10 | Right button | None |
| To retrieve Narration for the same party from the previous voucher entry | Alt+R | NA | Alt+R |
| To open the calculator panel from Amount field during voucher entry | Alt+C | NA | Alt+C |
| To open a manufacturing journal from the Quantity field of a journal voucher | Alt+V | NA | Alt+V |
| To retrieve the Narration from the previous voucher, for the same voucher type | Ctrl+R | NA | Ctrl+R |
| To go to the next input field | Tab | NA | Tab |
| To go to the previous input field | Shift+Tab | NA | Shift+Tab |
| To remove the value typed | Backspace | NA | Backspace |
| To create another master on the fly while creating masters and vouchers | Alt+C | NA | Alt+C |
| To open the calculator panel | Alt+C | NA | Alt+C |
| To insert the base currency symbol in an input field. |
Alt+4 Ctrl+4 |
NA |
Ctrl+4 |
| To open the previously saved master or voucher To scroll up in reports |
Page Up | NA | Page Up |
| To open the next master or voucher To scroll down in reports |
Page Down | NA | Page Down |
| To copy text from an input field |
Ctrl+C Ctrl+Alt+C |
NA |
Ctrl+Alt+C |
| To paste input copied from a text field. |
Ctrl+V Ctrl+Alt+V |
NA |
Ctrl+Alt+V |
|
To create party using GSTIN/UIN, you can import GSTIN/UIN from Excel
|
|
Right button |
Keyboard Shortcuts for Currency Symbol
| Currency Symbol | Keyboard Shortcut – Laptop | Keyboard Shortcut – Desktop |
|---|---|---|
| UAE Dirham | Ctrl+Shift+6 | Ctrl+Shift+6 (Does not work with the grey keys on the extended keyboard) |
| Saudi Riyal | Ctrl+Shift+7 | Ctrl+Shift+7 (Does not work with the grey keys on the extended keyboard) |
| Indian ₹ | Ctrl+4 | Ctrl+4 |
| Pound Sterling £ | Copy and paste the symbol | Alt+0163 (Only works with the grey keys on the extended keyboard) |
| Euro € | Copy and paste the symbol | Alt+0128 (Only works with the grey keys on the extended keyboard) |
| Japanese Yen ¥ | Copy and paste the symbol | Alt+0165 (Only works with the grey keys on the extended keyboard) |
Keyboard Shortcuts to Open Vouchers
| Action | Shortcut in TallyPrime | Location in TallyPrime | Shortcut in Tally.ERP 9 |
|---|---|---|---|
| To open Contra voucher | F4 | F10 > Accounting Vouchers | F4 |
| To open Payment voucher | F5 | F10 > Accounting Vouchers | F5 |
| To open Receipt voucher | F6 | F10 > Accounting Vouchers | F6 |
| To open Journal voucher | F7 | F10 > Accounting Vouchers | F7 |
| To open Stock Journal voucher | Alt+F7 | F10 > Inventory Vouchers | Alt+F7 |
| To open Physical Stock | Ctrl+F7 | F10 > Inventory Vouchers | Alt+F10 |
| To open Sales voucher | F8 | F10 > Accounting Vouchers | F8 |
| To open Delivery Note | Alt+F8 | F10 > Inventory Vouchers | Alt+F8 |
| To open Sales Order | Ctrl+F8 | F10 > Order Vouchers | None |
| To open Purchase voucher | F9 | F10 > Accounting Vouchers | F9 |
| To open Receipt Note | Alt+F9 | F10 > Inventory Vouchers | Alt+F9 |
| To open Purchase Order | Ctrl+F9 | F10 > Order Vouchers | None |
| To open Credit Note | Alt+F6 | F10 > Accounting Vouchers | Ctrl+F8 |
| To open Debit Note | Alt+F5 | F10 > Accounting Vouchers | Ctrl+F9 |
| To open Payroll voucher | Ctrl+F4 | F10 > Payroll Vouchers | None |
| To open Rejection In voucher | Ctrl+F6 | F10 > Inventory Vouchers | Ctrl+F6 |
| To open Rejection Out voucher | Ctrl+F5 | F10 > Inventory Vouchers | Alt+F6 |
const searchInput = document.getElementById(“searchInput”); const searchContainer = document.getElementById(“searchContainer”); const searchRect = searchInput.getBoundingClientRect(); searchInput.addEventListener(“keyup”, searchShortcut); const brTag = “”; document.addEventListener(‘scroll’, scrollFunction); window.addEventListener(“resize”, scrollFunction); //function to make the searchbox stick to the top when scrolled function scrollFunction() { const tables = document.getElementsByClassName(“TallyGreen”); const heightAdjust = document.getElementById(“heightAdjust”); let tableWidth = 0; //loopthrough all the tables and find out which is the widest to set the width of the search box for (table of tables) { if (table.clientWidth > tableWidth) tableWidth = table.clientWidth; } //if all the table width is 0 that means no table is visible or else set the width to the visible one. if (tableWidth > 0) tableWidth = tableWidth + ‘px’; else if (tableWidth == 0) tableWidth = ‘100%’; //detect for the change in the header class which occurs after the scroll and apply the changes if (document.getElementsByClassName(“after-scroll-wrap”).length > 0) { // if (document.documentElement.scrollTop > 150) { searchContainer.className = ‘searchContainerScroll’; searchContainer.style.width = tableWidth; heightAdjust.style.height = “150px” } else { searchContainer.className = ‘searchContainer’; searchContainer.style.width = tableWidth; heightAdjust.style.height = “0px”; } } function searchShortcut(e) { const inputTag = e.target; const filter = inputTag.value.toUpperCase(); const filterArray = filter.split(‘ ‘); const canvas = inputTag.parentElement.parentElement; const tables = canvas.getElementsByTagName(“tbody”); const rightNav = document.getElementsByClassName(“ez-toc-list ez-toc-list-level-1”)[0]; let resultsCount = 0; // Loop through all the tables for (const table of tables) { tableRows = table.getElementsByTagName(“tr”); const tParent = table.parentElement; let matchFoundInTable = false; // set the table height to auto and capture the height attribute to set it back later if (filter.length > 0) { if (tParent.style.height != “auto”) tParent.setAttribute(“height-data”, tParent.style.height); tParent.style.height = “auto”; } else { tParent.style.height = tParent.getAttribute(“height-data”); } // Loop through the Rows of each Table for (const tableRow of tableRows) { let matchFound = false; let notHeader; // get the value of each cells in the table const tableCells = tableRow.getElementsByTagName(“td”); let content = “”; // put the entire content of the row into one string to check if the row has any match for (const tableCell of tableCells) { content = content + ” ” + (tableCell.innerText || tableCell.textContent); } //check for any matches in the entire row using “AND” logic to make sure the row has all the words let matchFoundInRow = (checkForMatches(filter, content).And) ? true : false; if (content.split(‘ ‘).length > 1) { // find out if it is not a header row notHeader = (content.split(‘ ‘)[1].slice(0, 6) != “Action”) ? true : false; // make sure there is a match and it is not a header if (matchFoundInRow && notHeader) { // if it is a single cell description in a row then hide it else make it visible if (tableCells.length == 1 && filter.length > 0) { tableRow.style.display = “none”; } else if (tableCells.length > 1) { tableRow.style.display = “”; } // loop through each cell in a row for (const tableCell of tableCells) { const cellValue = tableCell.innerText || tableCell.textContent; const cellIndex = cellValue.toUpperCase().indexOf(filter); // find out if the cell has matching value with the input and it is not a single cell description if (matchFoundInRow && tableCells.length > 1) { // if (tableCells.length > 1) { // check if the cell has more sub elements checkForChildren(tableCell, filter); // use the below variables later below, which determine whether there is a match in the row matchFoundInTable = true; matchFound = true; } else { // run the below function anyways. check the function for more details if (tableCells.length > 1) checkForChildren(tableCell, filter) } } } } // if a match is found inside one of the cells then make the row visible if (matchFound && tableCells.length > 1) { tableRow.style.display = “”; // count the number of times a match is found to display at the top resultsCount++; // else hide the row unless its not a header } else if (notHeader) { tableRow.style.display = “none”; } if (filter.length == 0 && tableCells.length == 1) tableRow.style.display = “”; } // if no results are found in the entire table then hide the table if (!matchFoundInTable) { tParent.style.display = “none”; tParent.previousElementSibling.style.display = “none”; // rightNav.style.display = “none”; } else { tParent.style.display = “”; tParent.previousElementSibling.style.display = “”; // rightNav.style.display = “”; } } // check if there is an element exists which displays the number of results let checkNoOfResults = document.getElementById(“noOfResults”); if (!checkNoOfResults) { // if it doesn’t exist then create one const noOfResults = document.createElement(“p”); noOfResults.id = “noOfResults”; noOfResults.style = “font-size: 14px; font-weight: 400″; checkNoOfResults = noOfResults; } // show the number of results found if (resultsCount > 1) checkNoOfResults.innerText = resultsCount + ” results found.”; else if (resultsCount == 1) checkNoOfResults.innerText = resultsCount + ” result found.”; else if (resultsCount == 0) checkNoOfResults.innerText = “No results found.”; // checkNoOfResults.innerText = (resultsCount > 1) ? resultsCount + ” results found.” : resultsCount + ” result found.”; inputTag.parentElement.insertBefore(checkNoOfResults, inputTag.nextElementSibling); // if everything from the input is deleted then remove the no of results if (filter.length == 0) checkNoOfResults.remove(); scrollFunction(); } // function to check for sub-elements if there are any (this is to handle the cells which has bullet points and multiple lines with br tag) function checkForChildren(element, filter) { const count = element.childElementCount; let brExists = false, bulletList = false, multiplePTag = false; //check for specific tags to determine the how to handle the content for (const child of element.children) { if (child.nodeName == “BR”) brExists = true; if (child.nodeName == “UL”) bulletList = true; if (child.nodeName == “P”) multiplePTag = true; } if (brExists) highlightWithBR(element, filter) //if there is bullet list then loop through each list item and highlight the text else if (bulletList) { for (const child of element.children) { if (child.nodeName == “P”) highlightText(child, filter) if (child.nodeName == “UL”) { for (const item of child.children) { highlightText(item, filter) } } } } else if (multiplePTag) { for (const child of element.children) { highlightText(child, filter) } } else highlightText(element, filter) } function highlightWithBR(element, filter) { // split the HTML with br tags const highlightable = element.innerHTML.split(brTag); let cellParts = []; for (child of highlightable) { const dummyTag = document.createElement(“p”); dummyTag.innerHTML = child; // highlight the elements seperatly and put them together into an array cellParts.push(highlightText(dummyTag, filter)); } // combine the array by adding a br tag back and then put that inside the elements HTML element.innerHTML = cellParts.join(brTag); } function generateID() { return Math.random().toString(36).replace(/[^a-z]+/g, ”).substr(2, 10); } function highlightText(tableCell, filter) { const cellValue = tableCell.innerText || tableCell.textContent; const cellIndex = cellValue.toUpperCase().indexOf(filter); const splitStrings = filter.split(‘ ‘); // remove if there is any duplication of words to avoid errors const filterStrings = splitStrings.filter((c, index) => { return splitStrings.indexOf(c) === index; }); let returnHTML; // check for matches in the cell with the “OR” logic since we have already filtered the row with “AND” logic. const matchFound = (checkForMatches(filter, cellValue).Or) ? true : false; let breakPoints = {}; let newPoints = []; if (matchFound) { breakPoints = {}; let stringCount = 0; // check for breakpoints wherever every match for every word starts and ends for (const filterString of filterStrings) { if (filterString.length > 0) { breakPoints[filterString] = findAllMatches(cellValue, filterString); stringCount++; } } // use the breakpoints to ignore any repeatition of highlight action to avoid errors for (let i = stringCount – 1; i >= 1; i–) { const validateStrings = breakPoints[filterStrings[i]] for (let k = 0; k = 0; j–) { const interruptStrings = breakPoints[filterStrings[j]] for (const interruptString of interruptStrings) { try { // capture the places wherever there is an overlap of matches if (validateStrings[k].firstIndex >= interruptString.firstIndex && validateStrings[k].firstIndex { return y.firstIndex – x.firstIndex; }) // returnHTML = tableCell.innerHTML returnHTML = divideAndHighlight(tableCell, pointsArray) tableCell.innerHTML = returnHTML; } else { // if there is no match found then get the plain text and put it inside as HTML (this will remove any existing highlight from it) returnHTML = cellValue; tableCell.innerHTML = cellValue; } // return the html (this is used in highlightWithBR function) return returnHTML; } function findAllMatches(content, filter) { const index = content.toUpperCase().indexOf(filter); let breakPoints = []; if (index > -1) { let firstIndex = index; let secondIndex = index + filter.length; let secondMatch; let count = 0; do { breakPoints.push({ ‘firstIndex’: firstIndex, ‘secondIndex’: filter.length, ‘stringID’: generateID() }); const secondPart = content.slice(secondIndex, content.length); secondMatch = secondPart.toUpperCase().indexOf(filter); count++; if (secondMatch > -1) { secondMatch = secondMatch + secondIndex; firstIndex = secondMatch; secondIndex = secondMatch + filter.length; } } while (secondMatch > -1); } return breakPoints; } function checkForMatches(filterString, content) { let matchCount = 0; let filterIndexArray = []; const filterArray = filterString.split(‘ ‘); let matchFound = { ‘And’: false, ‘Or’: false } for (const filterString of filterArray) { const index = content.toUpperCase().indexOf(filterString); filterIndexArray.push(index); if (index > -1) { matchCount++; } } if (filterArray.length == matchCount) matchFound.And = true; if (matchCount > 0) matchFound.Or = true; return matchFound; } function divideAndHighlight(tableCell, breakPoints) { const textContent = tableCell.innerText || tableCell.textContent; let htmlContent = textContent; i = 0; for (const breakPoint of breakPoints) { const first = breakPoint.firstIndex, second = breakPoint.secondIndex, index = breakPoint.stringCount; const part1 = htmlContent.slice(0, first); const part2 = htmlContent.slice(first, first + second); const part3 = htmlContent.slice(first + second, htmlContent.length); const highlightTag = (part2.length > 0) ? “” + part2 + “” : “”; htmlContent = part1 + highlightTag + part3; i++; } return htmlContent; }
