# here's the shipping label we want - can you build this as a printable 4x6 label in Fishbowl?

> A real Claude session on a Fishbowl database (ILC's demo company, sample data), connected through ILC MCP for Fishbowl. The answer below is what the AI said; the queries are what it ran. Page: https://israellopezconsulting.com/fishbowl-mcp/questions/report-jasper

## Question

here's the shipping label we want - can you build this as a printable 4x6 label in Fishbowl?

### Answer

**Shipping Label 4x6** is installed in Fishbowl under Company › Labels and shows up in the Shipping module's print menu. It prints one 4x6 page per carton of the selected shipment. For now only admins can see it; an admin needs to grant your user groups access.

**Where each field comes from**

| Label | Fishbowl source |
|---|---|
| FROM | Default company name and its Main Office address |
| SHIP DATE | Date the shipment shipped, or today if it hasn't shipped yet |
| WEIGHT | The carton's freight weight and unit (defaults to lb) |
| SHIP TO | The shipment's ship-to name, address (multi-line), city, state and ZIP |
| Black bar | Carrier service name (e.g. GROUND); falls back to the carrier name |
| ROUTE | `420` + ship-to ZIP as a Code 128 barcode, e.g. 42080202 |
| TRACKING # | The carton's tracking number as a Code 128 barcode; shows "(no tracking number)" if blank |
| SO # / PO # | SO number and customer PO |
| CARTON | "1 of 3" style, per carton |
| PRIORITY | Black tag, shown only when the SO priority is 1-Highest or 2-High |

**Things to check on your first test print**

- **Addresses aren't verified yet.** My data access blocks reading ship-to and address fields, so I tested every other field against shipment S20564 but couldn't check those. Print one real shipment and confirm the FROM and SHIP TO blocks look right.
- **The star became a black tag.** Fishbowl's report font may not have a ★ character, so I used a black "PRIORITY" box instead.
- **Set the label size on the printer.** In the thermal printer's driver, set the media to 4×6 in. The report is laid out at exactly that size with ⅛" margins.

To change the layout or what any field shows, ask me to edit report 212.

## Behind the scenes

Every step the AI took, as recorded in the query log. All queries are read-only and row-capped.

1. Read Fishbowl notes (JASPERREPORTS.md)
2. Read the Fishbowl notes index — 64 topic notes
3. Read Fishbowl notes (SHIPPING.md)
4. Read Fishbowl notes (REPORTING.md)
5. Ran a read-only query: See the data behind the sample shipping label (SO 20564) to map label fields to Fishbowl columns — ? rows, ? ms

   ```sql
   
   ```

6. Ran a read-only query: Check non-address shipment data for the sample SO (carrier, carton, tracking, weight, PO, priority) — 1 row, 192 ms

   ```sql
   SELECT so.id AS soId, so.num AS soNum, so.customerPO, so.priorityId, s.id AS shipId, s.num AS shipNum, s.statusId, c.name AS carrier, cs.name AS service, s.cartonCount, CAST(s.dateShipped as CHAR) AS dateShipped, CAST(s.dateCreated as CHAR) AS shipCreated, sc.cartonNum, sc.trackingNum, sc.freightWeight, sc.weightUOM
   FROM so
   LEFT JOIN ship AS s ON s.soId = so.id AND s.orderTypeId = 20
   LEFT JOIN shipcarton AS sc ON sc.shipId = s.id
   LEFT JOIN carrier AS c ON c.id = s.carrierId
   LEFT JOIN carrierservice AS cs ON cs.id = s.carrierServiceId
   WHERE so.num = @soNum
   LIMIT 101
   ```

7. Looked up a table (ship) — 30 columns
8. Looked up a table (so) — 66 columns
9. Ran a read-only query: Find stock shipping/label reports to learn the parameter Fishbowl passes from the Shipping module — 8 rows, 342 ms

   ```sql
   SELECT r.id, r.name, r.path, m.name AS module
   FROM report AS r
   JOIN reporttomodule AS rm ON rm.reportId = r.id
   JOIN module AS m ON m.id = rm.moduleId
   WHERE m.name IN ('Shipping', 'Ship') OR r.name LIKE '%Label%'
   ORDER BY m.name, r.name
   LIMIT 101
   ```

10. Opened it in the Jasper editor
11. Ran a read-only query: Learn SO priority codes to decide when the label shows the PRIORITY star — 5 rows, 208 ms

   ```sql
   SELECT id, name
   FROM priority
   ORDER BY id
   LIMIT 101
   ```

12. Looked up a table (company)
13. Looked up a table (shipcarton) — 19 columns
14. Looked up a table (company) — 13 columns
15. Looked up a table (address) — 13 columns
16. Ran a read-only query: Find the address type for the company's main office (label FROM block) — 5 rows, 213 ms

   ```sql
   SELECT id, name
   FROM addresstype
   ORDER BY id
   LIMIT 101
   ```

17. Looked up a table (state)
18. Ran a read-only query: Test the label report query (non-address fields) for shipment S20564 — 1 row, 224 ms

   ```sql
   SELECT co.name AS FROMNAME, COALESCE(s.dateShipped, NOW()) AS SHIPDATE, sc.freightWeight AS WEIGHT, COALESCE(NULLIF(sc.weightUOM, ''), 'lb') AS WEIGHTUOM, UPPER(COALESCE(cs.name, car.name)) AS SERVICE, sc.trackingNum AS TRACKINGNUM, so.num AS SONUM, so.customerPO AS PONUM, CONCAT(sc.cartonNum, ' of ', (SELECT COUNT(*)
   FROM shipcarton AS x
   WHERE x.shipId = s.id)) AS CARTONLABEL, so.priorityId AS PRIORITYID
   FROM ship AS s
   JOIN shipcarton AS sc ON sc.shipId = s.id
   LEFT JOIN so ON so.id = s.soId AND s.orderTypeId = 20
   LEFT JOIN carrier AS car ON car.id = s.carrierId
   LEFT JOIN carrierservice AS cs ON cs.id = s.carrierServiceId
   LEFT JOIN company AS co ON co.defaultFlag = 1
   WHERE s.id = @shipId
   ORDER BY sc.cartonNum
   LIMIT 101
   ```

19. Drafted the report layout — jasper draft (v1)
20. Adjusted the layout
21. Compiled the report — compiled — Jasper has no live preview
22. Looked up the report folders — 29 report folders
23. Installed the report — installed as report 212

Learn more: https://israellopezconsulting.com/fishbowl-mcp · More examples: https://israellopezconsulting.com/fishbowl-mcp/questions
