---
title: "Wolt API integracija"
url: "https://gidas.rivile.lt/integraciniai_sprendimai/kitos_integracijos/wolt_api"
updated: "2025-10-31"
parent: "https://gidas.rivile.lt/integraciniai_sprendimai/kitos_integracijos.md"
---

# Wolt API integracija

[Konsultantams ir atstovams](https://manorivile.sharepoint.com/:f:/r/sites/rivilefiles/Shared%20Documents/Downloads/Kitos%20integracijos/%2FWolt).

### Aprašymas

> **Informacija:** Wolt API integracija leidžia siųsti kainų (items update) ir prekių likučių (inventory update) informaciją. <br/>Siuntimo metu fiksuojami paskutiniai duomenys, o vėliau perduodami tik atnaujinimai, t. y. naujos kainos ir tik tos pozicijos, kurių likučiai pasikeitė.

Duomenys paimami naudojant Rivile Gama formules (*Servisas → Kortelės → Formulės*), todėl integracijos nereikia keisti keičiant konfigūraciją. 

Standartinės formulės importuojamos pirmą kartą paleidus integraciją. Vienas iš parametrų yra formulės kodas.

### Reikalavimai

- Rivile GAMA versija: nuo 119
- Rivile API

### Pasiruošimas

1. Gauti prisijungimo duomenis iš Wolt (**vartotojo vardas ir slaptažodis**) bei parduotuvių **Venue ID** (unikalūs parduotuvių identifikavimo kodai).
2. Prekių identifikavimo kodai tarp Wolt ir Rivile Gama sistemų turi sutapti:
   - Rivile Gama pusėje gali būti naudojamas prekės kodas, barkodas, kliento prekės kodas ar kita formulėje aprašyta reikšmė.
   - Wolt pusėje naudojami **gtin**, **sku** arba **external\_id**  laukai.
3. Prisijungimo vardas ir slaptažodis nurodomi parametre `WOLT_USER`.
4. **Venue ID** išsaugoma prie padalinio (laukas nurodomas formulėje).
5. Pataisoma formulė `WOLT1`, kurioje patikslinamas asortimento, kainos parinkimo ir likučių algoritmas

> **Dėmesio:** Pirmą kartą paleidus `wolt_api()` , susikuria reikalingi parametrai ir šabloninė formulė.

### Paleidimas

Paleidimui gali būti naudojamas papildomas klavišas:

```
m.wolt = wolt_api() && parametrų objektas
m.wolt.formule = "WOLT1"
m.wolt.field_kodas = "sku"
m.wolt.init() && Items + Inventory update
* m.wolt.init(1) && Items update - tik kainų siuntimas
* m.wolt.init(2) && Inventory update - tik likučių siuntimas
```

### Automatinis paleidimas naudojant *Task Scheduler*

*Task Scheduler* vartotojo sisteminio INIT'o pavyzdys:

```
public wolt
m.wolt = wolt_api() && parametrų objektas
m.wolt.formule = "WOLT1"
m.wolt.field_kodas = "sku"
m.wolt.debug = .t.
m.wolt.hide_log = .t.
Task Scheduler action: .F. .F. 1 VARDAS slaptažodis XXF m.wolt.init()
```

### Formulės prekių asortimento ir kainų valdymui

Šabloninė formulė **WOLT1** - "Wolt - kainos iš sutarties":

```
&& prekių asortimentas ir kainos pardavimo sutartyse
&& kainos vienodos visiems Wolt padaliniams
&& visuomet nuskaitoma visų pozicijų kainos ir kiekiai, o bus siunčiami tik pasikeitimai
&& kaina prieš nuolaidą vedama lauke N52_KAINA3

&& Wolt kliento kodas Rivilėje
private kodas_ks
m.kodas_ks = "WOLT"

&& prekei identifikuoti Wolt sistemoje naudojamas kodas
&& matavimo vienetas nesiunčiamas, todėl kodas turi būti unikalus
local kodo_laukas
m.kodo_laukas = "n37_bar_kodas" && "n37_bar_kodas", "kodas_ps", arba "n87_kodas"

&& Venue ID pirmame papildomame padalinio lauke
=f_select("select n07_kodas_is as kodas_is, dbo.pap(l11_laukas, 1, 1) as venue_id " + ;
	"from n07_imon inner join l11_pap1 on l11_kodas_nr = 'ISN07' and n07_kodas_is = l11_kodas1 where dbo.pap(l11_laukas, 1, 1) <> ''", "padaliniai")

&& Venue ID padalinio fakso lauke
*!*	=f_select("select n07_kodas_is as kodas_is, n07_fax as venue_id from n07_imon where n07_fax <> ''", "padaliniai")

&& sritis rezultato išsaugojimui
*!*	create cursor wolt (venue_id c(30), kodas c(30), kaina n(12, 4), kaina_pries_nuol n(12, 4), kiekis n(12, 3), isjungta n(1))

&& asortimentas ir kainos iš sutarčių
=f_select("select " + iif(m.kodo_laukas = "kodas_ps", "n52_kodas", m.kodo_laukas) + " as kodas, " + ;
	"n52_kaina as kaina, n52_kaina3 as kaina_pries_nuol, cast(0 as numeric(12, 3)) as kiekis, cast(0 as numeric(1)) as ijungta " + ;
	"from (select n52_kodas, n52_kodas_us2, n52_kaina, n52_kaina3, " + ;
	"row_number() over (partition by n52_kodas, n52_kodas_us2 order by n51_prioritetas, n52_prioritetas) as num_row " + ;
	"from n51_suth inner join n52_sutd on n51_kodas_kt = n52_kodas_kt " + ;
	"where n51_tipas = 2 and n52_rusis = 1 and n52_poz_kaina = 1 and n52_kodas_us2 <> '' and n52_kaina <> 0 and n51_kodas_ks=?m.kodas_ks " + ;
	"and n51_viskas = 0 and (n51_poz_date = 0 or convert(char(10), getdate(), 102) between n51_beg_date and n51_end_date) " + ;
	"and n52_viskas = 0 and (n52_poz_date = 0 or convert(char(10), getdate(), 102) between n52_beg_date and n52_end_date)) scr " + ;
	"inner join n37_pmat on n52_kodas = n37_kodas_ps and n52_kodas_us2 = n37_kodas_us " + ;
	"left join n87_tpre on n87_kodas_ks = ?m.kodas_ks and n52_kodas = n87_kodas_ps and n52_kodas_us2 = n87_kodas_us " + ;
	"where num_row = 1", "wolt_sut")

insert into wolt select nvl(venue_id, ""), nvl(kodas, ""), nvl(kaina, 0), nvl(kaina_pries_nuol, 0), 0, 0 from wolt_sut, padaliniai

&& kiekiai padaliniuose
=f_select("select " + iif(m.kodo_laukas = "kodas_ps", "i17_kodas_ps", m.kodo_laukas) + " as kodas, " + ;
	"i17_kodas_is, sum(i17_kiekis - i17_atiduota - i17_rezervas) / n37_koefici as kk " + ;
	"from i17_vpro inner join n37_pmat on i17_kodas_ps=n37_kodas_ps and i17_kodas_us_a=n37_kodas_us " + ;
	"left join n87_tpre on n87_kodas_ks = ?m.kodas_ks and i17_kodas_ps = n87_kodas_ps and i17_kodas_us_a = n87_kodas_us " + ;
	"group by " + iif(m.kodo_laukas = "kodas_ps", "", m.kodo_laukas + ", ") + "i17_kodas_is, i17_kodas_ps, i17_kodas_us, n37_koefici", "wolt_kiekiai")

update wolt set kiekis = kk from wolt_kiekiai inner join padaliniai on i17_kodas_is = kodas_is ;
	where wolt.venue_id = padaliniai.venue_id and wolt.kodas = wolt_kiekiai.kodas

&& išjungiamos prekės neturinčios likučio arba kainos
update wolt set isjungta = 1 where kiekis <= 0 or kaina <= 0

=bal_kadr_close("padaliniai", "wolt_sut", "wolt_kiekiai") && uždaromos sritys
```

Kitokia šabloninė formulė **WOLT2** - "Wolt - padalinių kainos":

```
&& padalinių prekių kainos (I33)
&& prekių asortimentas pagal likučius padaliniuose
&& visuomet nuskaitoma visų pozicijų kainos ir kiekiai, o bus siunčiami tik pasikeitimai

&& Wolt kliento kodas Rivilėje
private kodas_ks
m.kodas_ks = "WOLT"

&& prekei identifikuoti Wolt sistemoje naudojamas kodas
&& matavimo vienetas nesiunčiamas, todėl kodas turi būti unikalus
local kodo_laukas
m.kodo_laukas = "n37_bar_kodas" && "n37_bar_kodas", "kodas_ps", arba "n87_kodas"

&& Venue ID
local venue_id
m.venue_id = "dbo.pap(l11_laukas, 1, 1)" && pirmame papildomame padalinio lauke
*!*	m.venue_id = "n07_fax" && padalinio fakso lauke

=f_select("select n07_kodas_is as kodas_is, dbo.pap(l11_laukas, 1, 1) as venue_id " + ;
	"from n07_imon inner join l11_pap1 on l11_kodas_nr = 'ISN07' and n07_kodas_is = l11_kodas1 where dbo.pap(l11_laukas, 1, 1) <> ''", "padaliniai")

&& Venue ID padalinio fakso lauke
*!*	=f_select("select n07_kodas_is as kodas_is, n07_fax as venue_id from n07_imon where n07_fax <> ''", "padaliniai")

&& sritis rezultato išsaugojimui
*!*	create cursor wolt (venue_id c(30), kodas c(30), kaina n(12, 4), kaina_pries_nuol n(12, 4), kiekis n(12, 3), isjungta n(1))

&& asortimentas ir kiekiai iš likučių + padalinio kainos
=f_select("select " + m.venue_id + " as venue_id, " + iif(m.kodo_laukas = "kodas_ps", "i17_kodas_ps", m.kodo_laukas) + " as kodas, " + ;
	"max(isnull(i33_kaina, 0)) as kaina, cast(0 as numeric(12, 4)) as kaina_pries_nuol, " + ;
	"sum(i17_kiekis - i17_atiduota - i17_rezervas) / n37_koefici as kiekis, cast(0 as numeric(1)) as isjungta "+ ;
	"from i17_vpro inner join n37_pmat on i17_kodas_ps=n37_kodas_ps and i17_kodas_us_a=n37_kodas_us " + ;
	"left join n87_tpre on n87_kodas_ks = ?m.kodas_ks and i17_kodas_ps = n87_kodas_ps and i17_kodas_us_a = n87_kodas_us " + ;
	"left join i33_pkai on i17_kodas_ps = i33_kodas_ps and i17_kodas_is = i33_kodas_is and i17_kodas_us_a = i33_kodas_us " + ;
	"inner join n07_imon on i17_kodas_is = n07_kodas_is " + ;
	"left join l11_pap1 on l11_kodas_nr = 'ISN07' and n07_kodas_is = l11_kodas1 " + ;
	"where isnull(" + m.venue_id + ", '') <> '' " + ;
	"group by " + m.venue_id + ", " + iif(m.kodo_laukas = "kodas_ps", "", m.kodo_laukas + ", ") + ;
	"i17_kodas_is, i17_kodas_ps, i17_kodas_us, n37_koefici", "wolt_i33")

insert into wolt select nvl(venue_id, ""), nvl(kodas, ""), nvl(kaina, 0), nvl(kaina_pries_nuol, 0), nvl(kiekis, 0), nvl(isjungta, 0) from wolt_i33

&& išjungiamos prekės neturinčios likučio arba kainos
update wolt set isjungta = 1 where kiekis <= 0 or kaina <= 0

=bal_kadr_close("wolt_i33") && uždaromos sritys
```
