> For the complete documentation index, see [llms.txt](https://kb.logicerp.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kb.logicerp.com/logic-erp-version-release-notes/october-2026/reports-queries/stock-reports/branch-+-company-group-wise-stock-and-sale-analysis.md).

# Branch + Company/Group Wise Stock And Sale Analysis

Logic ERP has corrected many figures and totals in the **Branch + Company/Group Wise Stock And Sale Analysis**, renamed two average columns, and made the report faster. Some figures will change on existing reports; each such change is noted below.

***

### **Step 1: Open the Report**

* Navigate to **Reports/Queries** and select **Stock Reports**.
* Open the **Branch + Company/Group Wise Stock And Sale Analysis**.

***

### **Step 2: Renamed columns**

* **AVERAGE PER PERIOD QTY BASE** is now called **AVG SALE QTY PER PERIOD IN STOCK PER BRANCH**.
* **AVERAGE PER PERIOD VALUE BASE** is now called **AVG SALE VALUE PER PERIOD IN STOCK PER BRANCH**.
* Renaming does not change the figures: they are still the sale for each period the item has been in stock, divided by the **BRANCH COUNT**. Some figures in these columns do change because of the corrections below.
* If you had given either column your own name, width or decimal places, they are reset to the defaults.

***

### **What's corrected**

**Pending orders**

* The sub-totals of **PENDING SO QUANTITY** and **PENDING PO QUANTITY** now add up at every total level. Earlier most total rows showed zero for these columns. Totals rise. This is intended.
* A row with no pending order no longer picks up the pending quantity of the row before it in the totals.
* These two columns are now also filled when **GOODS IN TRANSIT** is shown. They are filled when **Average Ageing Days As** is **From Last Purchase Date** or **GOODS IN TRANSIT** is shown, and the report is consolidated by **Item Code**, or by **Item Name** and **Pack / Size**.

**Opening stock and the period, with Months Count**

* With **Months Count** set, the opening stock now ends exactly where the months count period starts. Earlier, stock moved between the report's from date and the start of that period could be counted twice (in the opening stock and in the period) or not counted at all. **OPENING STOCK**, **CLOSING STOCK** and their values can rise or fall. This is intended.
* With **Months Count** set and the period starting in the previous financial year, the opening stock is now taken from that year. Earlier it came back empty.

**Opening and closing stock by period**

* With **Period** ticked under **Report Consolidation**, **Column As** not set to **Period**, and **Period** placed after **Branch**, **Company** or **Group** in the **Report Order**, each row now includes its items' opening stock, and **CLOSING STOCK** carries forward from one period to the next. Earlier, in some set-ups (for example **Period** before **Item Name** in the **Report Order**, or **Column As** set to **Group** with **Extra Item Groups**), each period showed only that period's movement, and the opening stock of one branch could be added to the first row of the next branch. **CLOSING STOCK** and its value will change on these reports. This is intended.
* With **Column As** set to **Group** or **Company + Group**, **Group** ticked under **Report Consolidation** and **Extra Item Groups** selected, the rows are now listed extra item group by extra item group, with one row for each in each period, and their closing stock carries forward. Earlier the same extra item group could appear in several rows within one period.
* With **Period** ticked under **Report Consolidation** and placed ahead of **Branch**, **Company** and **Group** in the **Report Order**, items that moved now get their opening stock, and **CLOSING STOCK** carries forward from one period to the next. Earlier **OPENING STOCK** was blank for them and **CLOSING STOCK** showed only each period's movement. **OPENING STOCK**, **CLOSING STOCK** and their values, and their totals, change on these reports. This is intended.
* When **Column As** is **Branch**, **Company**, **Group** or **Company + Group**, the opening and closing stock under each column now carry forward from one period to the next in every **Report Order**, and the opening stock of other items no longer appears in the first row of a period. A column's opening stock is added in the period in which that branch, company or group first moves the item; until then it shows 0. If it does not move the item at all, its opening stock shows on the item's opening row.
* With **Column As** set to **Period**, the opening and closing stock (and their values) in each period column now include the opening stock of every item in the row. Earlier they kept only one item's opening stock. The last period now agrees with **CLOSING STOCK**. This is intended.

**Rate ranges**

* A rate exactly equal to a **Rate Range** limit now falls in the band that ends at that limit. For example, with ranges 200 and 400, a rate of 200 now shows under **0-200** instead of **201-400**. Figures in each band may change. This is intended.
* A rate equal to the highest **Rate Range** limit no longer shows a blank **RATE RANGE**.
* **Rate Range Filter** now limits the report to the chosen band. Earlier it had no effect. A rate exactly equal to the band's lower limit is also included. Figures fall to those of the chosen band. This is intended.
* A **Rate Range** with only one limit is now used. Earlier it was treated as no rate range.

**Margin and other transaction type rows**

* With transaction types shown as rows, the **Margin** row now shows its **TOTAL**.
* **Margin(%)** now shows a true percentage: the margin divided by the **Net Sale Value**, times 100. Earlier it showed the margin amount divided by 100. Its **TOTAL** is left blank, the same as **Sell Through(%)**, because percentages cannot be added.
* With **Column As** set to **Period**, the **TOTAL** of the **Net Sale+Closing Stock** row now adds the sale of every period but the closing stock of the last period only. Earlier the stock of every period was added. The **TOTAL** falls. This is intended.
* With **Column As** set to **Period**, the **TOTAL** of the **Closing Stock Value** row now takes the last period, including the opening value, the same way **Closing Stock** does. Earlier it took the first period and left out the opening value.
* The **Total Items** row no longer shows a **TOTAL**, because the same item can appear in several periods.

**Ageing and averages**

* **AVERAGE AGEING DAYS** is never negative now. Where the receiving or purchase date is after the report's to date, it shows 0, and the two **AVG SALE ... PER PERIOD IN STOCK PER BRANCH** columns no longer turn negative because of it.
* **AVERAGE AGEING DAYS** and **RECEIVING DATE** are now worked out for each row's own branch. Earlier, with **Txn Type Totals > Closing Stock** ticked, the same figure could repeat across every branch of an item.
* The report no longer stops with an error when **AVERAGE AGEING DAYS** is worked out over many branches or items, or over very old purchases.
* **BRANCH COUNT** now shows on rows that have no closing stock as well. Earlier it was blank on those rows even when other branches held the item.
* The two **AVG SALE ... PER PERIOD IN STOCK PER BRANCH** columns no longer go blank when **BRANCH COUNT** is 0. The per-period figure is then shown without dividing by branches.
* With **Branch As** set to **Branch Group**, **BRANCH COUNT** is now counted for the branch group on each row.
* For some older saved configurations without **Months Count**, and for any configuration whose **Months Count** reaches back more than two financial years, **AVERAGE QUANTITY** was worked out as if **Months Count** applied. It is now the sale divided by the number of periods with sale or stock, and **SALE QUANTITY(HIGHEST)** is left blank, the same as for any configuration without **Months Count**. **AVERAGE QUANTITY** may change on these reports. This is intended.
* **AVERAGE VALUE** now also counts the periods in which the item held only opening stock, on the item rows as well as on the total rows, the same way **AVERAGE QUANTITY** does. **AVERAGE VALUE** may fall. This is intended.
* When **Show TXN Types As Columns** is ticked, **AVERAGE VALUE** and **AVERAGE QUANTITY** now count each period once. Earlier **AVERAGE VALUE** counted a period once for every transaction type shown, and **AVERAGE QUANTITY** (when **Months Count** is not set) counted every period, even those with no sale or stock. Both averages **rise** on these reports. This is intended.

**Total Items**

* **TOTAL ITEMS** now counts each different item once per row, across every date, rate and branch that makes up the row. Earlier an item could be counted more than once. **TOTAL ITEMS** falls and **CLOSING STOCK/TOTAL ITEMS** rises. This is intended.
* With **Total Items** ticked under **Txn Type Selection**, the item count shown on each item row under each period, branch, company or group column now also counts each different item once. Earlier it added up the counts of every transaction behind the cell. These figures fall. This is intended.
* **TOTAL ITEMS** now comes from the transactions of the period. The opening stock is used only when the row has no transactions.

**Other columns and totals**

* **GOODS IN TRANSIT** is now counted once for each branch and item. Earlier it could be added several times and carried on into the following rows. The column and its totals fall. This is intended.
* **NET SALE VALUE-1** and **BUDGET ITEM GROUP VALUE** no longer carry a figure over from one row to the next. Figures may fall. This is intended.
* With **Column As** set to **Period**, **CLOSING STOCK VALUE-1** totals now include **OPENING STOCK VALUE-1**. Earlier they added **OPENING STOCK VALUE**. When **Column As** is not **Period**, the **CLOSING STOCK VALUE-1** totals of each column are now filled; earlier they stayed 0.
* With **Extra Branch Groups**, the group total rows now show **OPENING STOCK**, **OPENING STOCK VALUE** and **OPENING STOCK VALUE-1**, and their closing figures include the opening. These totals rise. This is intended.
* **WEEK TO DATE(SOLD QTY)**, **MONTH TO DATE(SOLD QTY)** and **YEAR TO DATE(SOLD QTY)** now follow the user's item access rights in every set-up. Earlier they did so only when the report was consolidated by **Item Name**. For users limited to certain items these figures may fall. This is intended.
* **YEAR TO DATE(SOLD QTY)** now starts from 1 April of the financial year. Earlier, when the report's from date was between January and March, it showed nothing.
* **RECEIPTS** and **ISSUES** are net of returns. They now show a minus sign where returns are more than purchases or sales, on item rows and on total rows alike. Earlier the sign was dropped. **OPENING STOCK** plus **RECEIPTS** less **ISSUES** now equals **CLOSING STOCK** on every row.
* **Opening Stock Value** and **Closing Stock Value** under the branch, company, group or period columns now keep their minus sign, on item rows and on total rows alike. Earlier the sign was dropped on some of these cells.
* With **Group Wise** ticked under **Report Totals**, the **GROUP TOTALS** row at the end of the report, which only repeated the grand total, no longer prints when the rows have no group to total by: when **Group** is not ticked under **Report Consolidation**, when items are grouped through **Extra Item Groups**, or when **Column As** is **Group** or **Company + Group**.

**Transacted Items Only and serial numbers**

* With **Transacted Items Only** ticked, rows where every figure is zero are now left out even when **TOTAL ITEMS** is shown. Earlier such rows could still be printed. Fewer rows may appear. This is intended.
* With **Transacted Items Only** ticked and **Column As** in use, a row is now kept when any of its columns has a figure. Earlier only the row's **TOTAL** was checked, so a row was left out when that total was zero (for example a closing stock that ended at zero in the last period, or branch figures that cancel out), although its figures were included in the totals. More rows may appear, and the rows now add up to the totals. This is intended.
* With **Transacted Items Only** ticked, **SNO.** now numbers only the rows that are printed. Earlier the numbers had gaps and the last number was higher than the number of rows.

**Item images**

* When an item has more than one image, **ITEM IMAGE** now always picks the same one: a web link first, then an image file, then a stored picture, and the most recently added among images of the same kind. A different image from before may appear for such items.

**Errors and speed**

* The report no longer shows an error when **Do Not Reflect Damage Quantity** is ticked and **Sale Value As**, **Sale Value-1 As** or **Purchase Value As** is set to **Rate Masters**, with the matching stock transfer filter set to **None**.
* The report no longer shows an error in some set-ups with **Extra Item Groups** and the **BRANCH COUNT** column.
* The report is faster, especially with **BRANCH COUNT**, **MONTH COUNT(STOCK > 0)**, **MONTH COUNT(SALE > 0)**, the week, month and year to date columns, **BUDGET ITEM GROUP VALUE**, **TOTAL ITEMS**, **AVERAGE AGEING DAYS** and **RECEIVING DATE**.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://kb.logicerp.com/logic-erp-version-release-notes/october-2026/reports-queries/stock-reports/branch-+-company-group-wise-stock-and-sale-analysis.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
