Po įvado ir mokymų formato sutariame bendrą kalbą apie ERP objektą kaip JSON: kokios reikšmės būna laukuose, kaip užrašomos datos ir laikas, kur naršyklėje rasite objektų sąrašą, RQL įrankį ir GraphQL schemą (Apollo Sandbox) bandymams ir paieškai. Toliau Temoje 3 sutariame duomenų išvedimą iš ERP (ataskaitos, RQL scenarijuje, failai) ir ryšį su GraphQL bei rql užklausomis.
ERP objektas čia suprantame kaip vieną verslo įrašą ar struktūrą (pvz. dokumentą, kontrahentą, eilutę), kurį sistema gali pateikti ar priimti kaip hierarchinį JSON objektą: raktai (laukų vardai), reikšmės, įdėtiniai objektai ir masyvai.
JSON dokumentą sudaro objektai ({ … }), masyvai ([ … ]), tekstai kabutėse, skaičiai, logikos reikšmės ir null. Rivile ERP kontekste dažnai sutiksite šiuos laukų tipus (pavadinimai gali skirtis nuo diegimo, bet formatų esmė lieka):
| Tipas | JSON pavyzdys | Pastaba |
|---|---|---|
| Sveikasis skaičius (integer / number be trupmeninės dalies) | 42, 0, -15 |
Dažnai kiekiai, būsenų kodai ir kiti skaitiniai laukai (ne pagrindinių objektų id — žr. eilutę apie UUID). |
| Slankusis kablelis (float / number) | 19.99, 0.5 |
Suma, kursas, koeficientas — tikslumas priklauso nuo lauko apibrėžimo. |
| Tekstas (string) | "ABC-001" |
Kodai, pavadinimai, pastabos; kabutės JSON sintaksėje privalomos. |
| Identifikatorius (ID) — UUID v4 kaip tekstas | "a1b2c3d4-e5f6-4789-a012-3456789abcde" |
Rivile ERP sistemoje objektų ir ryšių ID dažniausiai yra UUID versija 4 (atsitiktinai generuojamas 128 bitų unikalus identifikatorius). JSON perduodamas kaip string (kabutėse). Tai padidina apsaugą, nes atspėti įrašo ID tampa beveik neįmanoma. Ir nesimato kiek įrašų yra sistemoje ir kiek jų atsiranda per laikotarpį. |
| Logikos reikšmė (boolean) | true, false |
Vėliavėlės („užrakinta“, „patvirtinta“ ir pan.). |
| Data (date — dažnai kaip tekstas sutartu formatu) | "2026-05-11" |
Pilnas datos formatas: YYYY-MM-DD (ISO 8601 kalendorinė data). |
| Data ir laikas (datetime — dažnai kaip tekstas su laiko juosta) | "2026-05-11T13:30:00.000Z" |
ISO 8601 su laiko zona: YYYY-MM-DDTHH:MM:SS.SSSZ — čia T skiria datą nuo laiko, Z reiškia UTC (arba vietoje Z būna poslinkis, pvz. +03:00). |
Konkretūs laukų vardai ir ar data ateina kaip tekstas ar skaičius — visada derinkite su GraphQL tipais ir žinynu savo aplinkoje; čia fiksuojame bendrą skaitymo kultūrą, kad vėliau RQL ir API skyriai būtų lengvesni.
Išskleiskite pavyzdį ir pabandykite atpažinti kiekvieną reikšmės tipą: tekstą, skaičius, boolean, null, objektą, masyvą, UUID, datą ir datą su laiku.
{
"id": "a1b2c3d4-e5f6-4789-a012-3456789abcde",
"documentNo": "PI-000123",
"docDate": "2026-05-12",
"createdAt": "2026-05-12T08:56:45.129552Z",
"active": true,
"statusId": 0,
"exchangeRate": 1.0,
"notes": null,
"supplier": {
"id": "40ab5f61-1785-4bd0-a587-482738398a83",
"code": "TIEK-001",
"name": "UAB Pavyzdinis tiekėjas",
"isSupplier": true
},
"totals": {
"amount": 2289.26,
"taxAmount": 480.74,
"amountWithTax": 2770.0
},
"lines": [
{
"lineNo": 1,
"itemId": "12a5f3b7-9e55-441f-a50b-f1259272b153",
"itemCode": "PREK-001",
"itemName": "Kompiuteris",
"qtyBase": 1,
"price": 2400.0,
"amount": 1983.47
},
{
"lineNo": 2,
"itemId": "7dd893a1-8fae-4327-b4f8-c04f51cf457a",
"itemCode": "PREK-002",
"itemName": "Monitorius",
"qtyBase": 1,
"price": 350.0,
"amount": 289.26
}
],
"ext": {
"dimVP": "mokymai"
}
}
Hierarchija: viršutinis objektas turi įdėtus objektus (supplier, totals, ext) ir masyvą lines, kuriame kiekvienas elementas yra atskiras eilutės objektas.
Kurėjų meniu (kelias ERP → Kurėjų meniu) kai kuriuose diegimuose ar naudotojo profiliuose gali būti paslėptas. Tuomet Lentelių tipų ir RQL įrankio per įprastą meniu nepamatysite.
Įjungti arba išjungti kūrėjų įrankius galima naršyklėje atvėrus Developer Tools (pvz. F12) ir skiltyje Console įvykdžius komandą (kol aktyvus Rivile ERP skirtukas):
erp.devTools(true); // įjungti kūrėjų įrankius (rodyti Kurėjų meniu ir pan.) erp.devTools(false); // išjungtiKomentaras anglų kalba dažnai paliekamas kaip
// Enable/Disable dev tools— esmė ta pati: boolean parametras valdo būseną.
Naršyklėje Rivile ERP vykdykite kelią: Kurėjų meniu → Lentelių tipai. Ten matote objektų / lentelių sąrašą, kuris padeda susieti domenų pavadinimus su tuo, ką vėliau naudosite RQL ar schemoje.

Kelias Kūrėjų meniu → Lentelių tipai (tas pats poslinkis rodo ir RQL įrankį — žr. skyrių 3).
Atvėrus Lentelių tipus, viršuje matote naršymo kelią Kūrėjų meniu > Lentelių tipai. Paieškos laukas leidžia filtruoti objektus pagal vardą — pavyzdyje įrašyta Client, kad būtų matomi visi susiję tipai (Client, ClientGroup, ClientType ir kt.).
Stulpelyje NAME rodomas techninis lentelės vardas — jį naudojate RQL po raktažodžio FROM, pvz. SELECT … FROM Client. Kiti stulpeliai (COUNTABLE, EXTENDABLE, TRANSLATABLE, IS MASTERDATA, IS ENUM, ACTIVE, ALLOW WORKFLOW) trumpai apibūdina objekto savybes (ar skaičiuojami įrašai, ar galima plėtra, ar tai žinynas / enum, ar galimi darbo procesai ir pan.).

Filtruotas sąrašas: stulpelis NAME atitinka RQL FROM šaltinio pavadinimą.
Paspaudus ant eilutės (pavyzdyje Client), atveriamas išsamus vaizdas su skiltimis Lentelė ir Laukai. Skiltyje Lentelė matote Name ir Id — pastarasis yra UUID (objekto tipo identifikatorius sistemoje; JSON kontekste UUID dažnai perduodamas kaip string — žr. skyriaus 1 lentelę). Pažymėtos vėliavėlės (Countable, Extendable, Master data, Active, Allow workflow ir kt.) atitinka sąrašo stulpelius.
Skiltyje Laukai pateikiami visi lauko vardai ir tipai (String, Boolean, Date, Many2One, Many2Many ir kt.) — tai tiesioginė atrama rašant SELECT laukų sąrašą ir WHERE sąlygas bei skaitant JSON rezultatą.

Pavyzdys Client: lentelės Id ir laukų sąrašas su tipais.
Pasirinkus konkretų lauką (dialogas Edit field), matote jo tipą (Type), ar laukas sisteminis, ar verčiamas (Translatable), apribojimus, numatytąją reikšmę ir etiketes kalbomis (pvz. lietuviškas „Pavadinimas“). Tai padeda susieti JSON lauką su formos elgsena ir lokalizacija.

Lauko name ypatybės: tipas String, vertimas į lietuvių kalbą.
Prieš pereinant prie skyriaus 3. RQL įrankis, salėje atlikite šią užduotį TEST aplinkoje (ir tik su tomis teisėmis, kurias leidžia mokymų organizatorius). Tą pačią sesiją papildykite pradiniais duomenimis tiekėjui ir prekei, jei dar nepadarėte — RQL pavyzdžiai remiasi tais įrašais. Lauko techninis vardas turi būti unikalus: naudokite prefiksą dim ir savo inicialus (pvz. Vardas Pavardė → dimVP).
erp.devTools(true);).Pridėkite naują lauką: tipas String, techninis vardas lauke Name — dim + jūsų inicialai (vienas žodis be tarpų, pradėti mažosiomis kaip įprasta papildomam laukui):
dim ir savo inicialus (pvz. dimVP).Jei lauko vardas sutampa su kito mokinio — pakoreguokite inicialus arba trumpą unikalų sufiksą.
Prieš bandant RQL įrankį (žemiau), salėje TEST aplinkoje paruoškite bent minimalius pirkimų katalogo įrašus — taip užklausų rezultatus galėsite sieti su savo sukurtais duomenimis, o ne su atsitiktiniais sąrašo įrašais. Tiekėjo kortelė sistemoje priklauso bendram klientų objektui su pažymėtu požymiu tiekėjas — RQL užklausose ieškosite per clients ir isSupplier, o ne per atskirą suppliers lentelę.
jdMOK1).Norėdami išbandyti užklausą be pilno scenarijaus, naudokite: Kurėjų meniu → RQL įrankis. Tai atskiras įrankis sąrašų ir filtrų eksperimentams; jo rezultatas padeda suprasti, kokius laukus grąžinsite į scenarijų per rql (žr. Temą 3).

Kurėjų meniu → RQL įrankis: pavyzdinė užklausa į clients su addresses, contacts, ext; žemiau — Data skilties JSON (vienas atitinkantis tiekėjo įrašas).
Žemiau — SELECT šablonai, skirti rasti būtent jūsų ką tik sukurtą tiekėją ir prekę (pagal organizacijos kontekstą, size ir filtrus). Tiekėjas šiame modelyje nėra atskiros RQL lentelės: tai tie patys clients, atskirti požymiu isSupplier = true (pardavimų klientas — isCustomer, abu požymiai gali būti true toje pačioje kortelėje). Bendresnę sintaksę ir ryšį su scenarijumi žr. Temą 3 bei praktiką (dokumentai, eksportas / prekės, integracijos).
RQL įrankyje vietoje
<jūsų_companyId>įrašykite organizacijos ID iš savo konteksto (TEST), jei jūsų sesijoje reikia aiškausWITH companyId = …(kai kur kontekstas perduodamas automatiškai). Tiekėjui visada naudokite lentelęclientsir filtrąisSupplier = true. Prekėms —products(patikrinkite Lentelių tipųNAME, jei diegime kitas vardas).
Tik įrašai, kurie gali būti tiekėjais pirkimuose. Jei sąrašas didelis, siaurinkite size ir vėliau filtruokite pagal kodą ar pavadinimą.
SELECT id, code, name, isSupplier, isCustomer FROM clients
WITH companyId = <j> size = 50
WHERE isSupplier = true
Įrašykite tą patį kodą, kurį nurodėte tiekėjo kortelėje skyriuje „Pradiniai duomenys“, ir palikite isSupplier = true, kad nepaimtumėte kito kliento tipo įrašo.
SELECT id, code, name, isSupplier FROM clients
WITH companyId = <j> size = 10
WHERE isSupplier = true AND code = 'jdMOK1'
Kai žinote id iš sąrašo ar kortelės. UUID — kabutėse. Pridėkite isSupplier = true, jei norite įsitikinti, kad tai tiekėjo kontekstas.
SELECT id, code, name, isSupplier FROM clients
WITH companyId = <j> size = 5
WHERE isSupplier = true AND id = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
Pilnesnis pasirinkimas — panašiai kaip realiame bandyme: vienu kartu grąžinami pagrindiniai laukai, adresų ir kontaktų masyvai bei papildomi laukai. Filtras pagal ext naudingas, jei skyriuje „Papildomas laukas ant Client“ sukūrėte savo lauką (pvz. dimVP) ir jį užpildėte tiekėjo kortelėje.
SELECT id, code, name, isSupplier, addresses, contacts, ext FROM clients
WITH companyId = <j> size = 5
WHERE isSupplier = true
AND name = 'UAB Mano pavyzdys'
AND ext.dimVP = 'žymė_kurią_suvedėte_kortelėje'
Galima ir platesnis SELECT * (kaip eksperimente), bet mokymuose geriau aiškiai išvardinti laukus, jei rezultatas labai didelis.
Repozitorijos scenarijuose prekėms naudojama lentelė products (žr. pvz. eksportas, integracijos).
SELECT id, code, name FROM products
WITH companyId = <j> size = 50
Įrašykite kodą, kurį suvedėte kurdami prekę skyriuje „Pradiniai duomenys“.
SELECT id, code, name FROM products
WITH companyId = <j> size = 10
WHERE code = 'PREK-JD-1'
Pagal ID — tos pačios pastabos dėl UUID ar skaitinio formato kaip ir tiekėjo (clients) užklausoje aukščiau.
SELECT id, code, name FROM products
WITH companyId = <j> size = 5
WHERE id = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
Pagal pavadinimą (lygybė, jei pavadinimas unikalus jūsų bandymui):
SELECT id, code, name FROM products
WITH companyId = <j> size = 10
WHERE name = 'Mokymų prekė 1'
Šiame įrankyje galite susirasti norimą ERP objektą (GraphQL objekto tipą) ir peržiūrėti jo atributus: laukus, įterptus tipus, argumentus užklausoms ir mutacijoms. Tai papildo Lentelių tipus ir RQL įrankį — ypač kai reikia greitai palyginti Query / Mutation paviršių su vidiniu duomenų modeliu; plačiau apie klausimus ir mutacijas žr. Temą 3.
Schemą TEST aplinkoje pasiekiate adresu: https://erp.test.rivile.cloud/graphql-gen3. Atvėrus Apollo Sandbox, kairėje pasirinkite Schema reference, tada skyrių Objects — čia rodomi objektų tipai; viršuje esančioje paieškoje įveskite tipą (pvz. Client, Product), kad filtruotumėte sąrašą ir atvertumėte lauko aprašus.

Schema reference → Objects: paieška pagal tipą (pavyzdyje Client) ir sutampančių laukų santrauka.
Pastaba. Rivile ERP naršyklės lange paspauskite F12, tada Developer Tools skiltyje Network stebėkite POST užklausas į
https://erp.test.rivile.cloud/graphql-gen3— tai alternatyvus būdas pamatyti, kokius ERP objektus ir GraphQL operacijas forma ar sąrašas siunčia serveriui, ir susieti atsakymą su konkrečia ERP forma ar veiksmu, kurį ką tik atlikote.
Savarankiškai TEST aplinkoje atlikite šiuos žingsnius ir užfiksuokite rezultatą (užklausos tekstas + ar JSON pavyko gauti).
FROM: atverkite Lentelių tipus ir paieškoje suraskite sąskaitai atitinkantį tipą, tada stulpelyje NAME persirašykite vardą; papildomai galite patikrinti Apollo schemą (Schema reference → Objects, paieška pagal pvz. PurchaseInvoice) ir palyginti su GraphQL tipų vardu.lines ar analogą — neatspėkite iš galvos, patikrinkite metaduomenyse).SELECT sąrašą arba įterptų laukų vardus pagal Lentelių tipų laukų sąrašą; ribokite size, kad atsakymas būtų skaitomas.RQL šaltinio vardas dažnai būna daugiskaitos forma, sutampanti su mokymų medžiagoje naudojamu purchaseInvoices (žr. Tema 3, P03). Eilutėms pabandykite įtraukti į SELECT įterptą kolekciją lines (arba laukus per tašką, pvz. lines.id).
SELECT id, documentNo, lines
FROM purchaseInvoices
WITH companyId = <j> size = 5
Jei lines nepriimamas — atverkite tos lentelės laukų sąrašą ir naudokite tikslų techninį eilučių ryšio vardą iš obejkto modelio.