// Cashflow – načítanie dát z ABRA Flexi (REST API) // Výstup: jedna tabuľka so stĺpcami Datum | Typ | Zdroj | Evidencia | Doklad | Partner | Popis | Suma | Aktualizovane // Zdroj "Skutočnosť" = pohyby na bankových účtoch a v pokladni (Datum = dátum pohybu) // Zdroj "Otvorený doklad" = neuhradené faktúry, pohľadávky a záväzky (Datum = dátum splatnosti, Suma = zostáva uhradiť) // Sumy sú v domácej mene (polia sumCelkem / zbyvaUhradit). let // ===== NASTAVENIA – uprav ===== // ADRESU SERVERA uprav nižšie vo funkcii Nacitaj (riadok s Web.Contents) – musí tam byť priamo ako text, // inak Excel pre Mac / web hlási, že potrebuje lokálnu bránu údajov. Firma = "kod_firmy", // kód firmy z URL: .../c/KOD_FIRMY/... HistoriaDni = 120, // koľko dní dozadu načítať skutočné pohyby (musí pokryť Začiatok reportu) // ============================== Teraz = DateTime.LocalNow(), OdDatumu = Date.ToText(Date.AddDays(Date.From(Teraz), -HistoriaDni), "yyyy-MM-dd"), fnDatum = (v as any) as nullable date => if v = null then null else if not (v is text) then null else if Text.Length(v) < 10 then null else #date(Number.FromText(Text.Range(v, 0, 4)), Number.FromText(Text.Range(v, 5, 2)), Number.FromText(Text.Range(v, 8, 2))), fnCislo = (v as any) as number => if v = null or v = "" then 0 else if v is number then v else Number.FromText(Text.From(v), "en-US"), fnText = (r as record, pole as text) as text => let h = Record.FieldOrDefault(r, pole, null) in if h = null then "" else Text.From(h), Nacitaj = (evidencia as text, filter as text, polia as text) as list => let Odpoved = Json.Document( Web.Contents( "https://NAZOV-SERVERA.flexibee.eu:5434", // <<< ADRESA SERVERA FLEXI (bez lomky na konci) [ RelativePath = "c/" & Firma & "/" & evidencia & "/" & filter & ".json", Query = [limit = "0", detail = "custom:" & polia] ] ) ), Zoznam = Record.FieldOrDefault(Odpoved[winstrom], evidencia, {}) in Zoznam, Pohyby = (evidencia as text) as list => List.Transform( Nacitaj(evidencia, "(datVyst >= '" & OdDatumu & "' and storno = false)", "kod,datVyst,typPohybuK,sumCelkem,nazFirmy,popis"), each [ Datum = fnDatum(Record.FieldOrDefault(_, "datVyst", null)), Typ = if fnText(_, "typPohybuK") = "typPohybu.prijem" then "Príjem" else "Výdavok", Zdroj = "Skutočnosť", Evidencia = evidencia, Doklad = fnText(_, "kod"), Partner = fnText(_, "nazFirmy"), Popis = fnText(_, "popis"), Suma = fnCislo(Record.FieldOrDefault(_, "sumCelkem", 0)) ] ), Otvorene = (evidencia as text, typ as text) as list => List.Transform( Nacitaj(evidencia, "(zbyvaUhradit > 0 and storno = false)", "kod,datSplat,zbyvaUhradit,nazFirmy,popis"), each [ Datum = fnDatum(Record.FieldOrDefault(_, "datSplat", null)), Typ = typ, Zdroj = "Otvorený doklad", Evidencia = evidencia, Doklad = fnText(_, "kod"), Partner = fnText(_, "nazFirmy"), Popis = fnText(_, "popis"), Suma = fnCislo(Record.FieldOrDefault(_, "zbyvaUhradit", 0)) ] ), // Hlavné zdroje – chyba (napr. zlé heslo) sa zobrazí Banka = Pohyby("banka"), FaktVydane = Otvorene("faktura-vydana", "Príjem"), FaktPrijat = Otvorene("faktura-prijata", "Výdavok"), // Voliteľné zdroje – ak evidenciu nepoužívaš, preskočia sa Pokladna = try List.Buffer(Pohyby("pokladni-pohyb")) otherwise {}, Pohladavky = try List.Buffer(Otvorene("pohledavka", "Príjem")) otherwise {}, Zavazky = try List.Buffer(Otvorene("zavazek", "Výdavok")) otherwise {}, Vsetky = List.Combine({Banka, Pokladna, FaktVydane, Pohladavky, FaktPrijat, Zavazky}), Tabulka = Table.FromRecords( Vsetky, type table [Datum = date, Typ = text, Zdroj = text, Evidencia = text, Doklad = text, Partner = text, Popis = text, Suma = number] ), SCasom = Table.AddColumn(Tabulka, "Aktualizovane", each Teraz, type datetime), Zoradene = Table.Sort(SCasom, {{"Datum", Order.Ascending}}) in Zoradene