Getting Started — For New Engineers¶
This page gets you from "I just cloned the repo" to "I understand the shape of the system and can find things." Budget about 30 minutes.
1. The mental model in five sentences¶
- The product is a VB.NET WinForms desktop app that runs on Windows tills and back-office PCs.
- The app itself (
smartsoft_inventory) is thin — mostly screens and per-transaction glue code. - The real work — data access, stock math, printing, closing — lives in a shared set of
DLLs, the SmartSoft FrameWork (
framework_smartsoft). - Everything reads and writes a single Microsoft SQL Server database whose tables use
Indonesian-derived names (
tbMaster_Barang= item master). - Global module variables hold the session (who is logged in, which branch, today's business date, the connection string) and are read directly all over the code.
flowchart LR
A["A user clicks<br/>a button on a form"] --> B["Form code<br/>(frmXxx.vb)"]
B --> C["Transaction class<br/>(INVENTORY/Class/*.vb)"]
C --> D["FrameWork BLL / Data Access<br/>(HAKDAC, cSTOK, tb* classes)"]
D --> E[("SQL Server")]
B -.reads.-> G["Globals<br/>(VariablePublic.vb)"]
C -.reads.-> G
style G fill:#fff3e0,stroke:#fb8c00
style E fill:#e0f2f1,stroke:#00897b
2. Where things live¶
Two sibling folders make up the codebase:
pos-system/
├── smartsoft_inventory/ # the application (screens + thin logic)
│ └── INVENTORY/
│ ├── Form/ # all WinForms screens, grouped by area
│ ├── Class/ # per-transaction posting logic
│ ├── Module/ # globals, Sub Main, helpers
│ └── MenuUtama.vb # the main menu shown after login
│
└── framework_smartsoft/ # the shared FrameWork DLLs (the heavy lifting)
├── FrameWork.SmartSoft.BLL/ # business logic (stock, promos, closing)
├── FrameWork.SmartSoft.General/ # data access, conversion, registry config
├── FrameWork.SmartSoft.GUI/ # base forms, controls, skinning
├── FrameWork.SmartSoft.Struk/ # receipt / label printing
├── FrameWork.SmartSoft.Closing/ # daily/monthly close, backup/restore
├── DataAccessControl/ # typed data-access classes (tb*, tv*)
├── SmartSoft.Parameter/ # company/parameter/config entities
└── MyLib/ # licensing, login, utilities
Reading order for the code
INVENTORY/Module/VariablePublic.vb— the globals andSub Mainbootstrap. Read this first; everything else assumes it.INVENTORY/MenuUtama.vb— the main menu; how screens are launched.- One transaction end-to-end:
INVENTORY/Class/PenerimaanBarang.vb(goods receipt) + its form underINVENTORY/Form/Transaksi/1 - Penerimaan/. framework_smartsoft/FrameWork.SmartSoft.BLL/BLL_STOCK.vb— the stock/costing brain.
3. Conventions you will see everywhere¶
| You will see… | It means… |
|---|---|
frmXxx |
A WinForms form (screen). |
tbMaster_Xxx |
A master-data table or its typed data-access class. |
tbTr_Xxx, tbRekap_Xxx, tbHist_Xxx |
Transaction / recap / history tables. |
tv_Xxx |
A SQL view. |
HAKDAC |
The global data-access gateway (runs SQL → DataTable). |
mem… (e.g. memUserID, memTanggal) |
A session global — current user, branch, business date. |
c… (e.g. cPRSH, cSTOK) |
A cached FrameWork object (company, stock BLL). |
| Indonesian words | Domain terms — see the Glossary. |
4. Things that will surprise you¶
Read these before you judge the code
- SQL is built by string concatenation, not parameters. This is the established pattern, not an accident — but it is also the system's biggest risk. See Data Access.
- Errors are often swallowed with
Try/Catch ex As Exceptionthat returnsNothing. Match the surrounding style; don't "fix" it in passing. CommandTimeout = 0(no timeout) is used deliberately on long queries.- Session lives in globals, not passed as parameters.
memUserID,memKodeCabang,memTanggalare read directly wherever needed. - Two superusers,
EDPandDLY, bypass permission checks by design.
5. What you cannot do (and why)¶
- You cannot build this outside Windows. It depends on Crystal Reports, COM interop
(SQLDMO), and skinning DLLs. There is no
dotnetCLI path. See Build & Deploy. - You cannot build without the FrameWork DLLs present. The app references them by relative paths pointing outside the repo. Missing DLLs → build fails.
6. Next steps¶
- Skim the Technology Stack to know exactly what you're dealing with.
- Read the Architecture Overview for the layer diagram.
- Keep the Glossary open in a tab.