Kwoty pozostają w walucie faktury, a USD jest obliczane na podstawie wybranej datowanej migawki. Data, źródło, data_updated_at i kurs są przechowywane razem, więc zaksięgowane wiersze można odtworzyć.
- Skoroszyt zawiera migawki z datą, formuły i audyt.
- rate_per_usd oznacza jednostki waluty za 1 USD.
- Zachowaj source, session i data_updated_at dla zaksięgowanej pozycji.
- Power Query dodaje migawkę bez zastępowania zamrożonej wartości.
- Kursy są orientacyjne, nie są poradą podatkową ani księgową.
Pobierz skoroszyt
Pobierz rejestr faktur i otwórz go w Excelu. Zawiera przykładowe faktury, migawki EUR/GBP/JPY/IDR, kolumny USD i audyt.
Poznaj cztery arkusze
Invoice Tracker zawiera faktury i formuły, FX Snapshots obserwacje z datą, Audit Trail decyzje o zamrożeniu, a Read Me instrukcję i ograniczenia.
Dodaj fakturę w jej walucie
W niebieskich komórkach wpisz identyfikator, klienta, daty, walutę, netto, podatek, datę kursu i status. Net, Tax i Gross pozostają w walucie faktury.
Dodaj datowaną migawkę kursu
Dodaj dokładną obserwację historyczną i zachowaj datę, walutę, source, market_session, data_updated_at oraz kurs. Kurs oznacza jednostki waluty faktury za 1 USD. Użyj unikalnego Snapshot ID, na przykład EUR-20260602-v1. Sprawdź, że ID występuje dokładnie raz, a waluta migawki zgadza się z walutą faktury. Korektę dodaj jako v2 i nie nadpisuj v1. data_updated_at oznacza czas aktualizacji danych historycznych, nie effective_at.
{ "result": "success", "base": "USD", "date": "2026-06-02", "source": "ecb_daily", "sources": { "EUR": "ecb_daily" }, "market_session": "open", "timestamp": "2026-09-08T11:52:18Z", "data_updated_at": "2026-06-02T00:00:00Z", "is_forward_filled": false, "rates": { "EUR": 0.85844 }, "notice": "Indicative rates, not for settlement."}Sprawdź kolumny USD z formułami
Arkusz dopasowuje datę i walutę do FX Snapshots, a następnie dzieli kwotę przez FX Rate / USD. Brak migawki pozostawia kolumny USD puste. Formuły obejmują wiersz100 faktur i wiersz100 migawek; rozszerz oba zakresy razem. Posted to etykieta, nie blokada komórek ani automatyczne zamrożenie.
=IF(OR(F6<0,G6<0,H6<0,K6="",L6="Missing snapshot ID",L6="Duplicate snapshot ID",L6="Currency mismatch",L6="Invalid rate"),"",F6/K6)Zamroź zaksięgowane wartości
Po zaksięgowaniu nie zmieniaj migawki. Dla korekty dodaj nowy wiersz i zapisz powód w Audit Trail.
Dodaj nową migawkę przez Power Query
Skrypt Power Query pobiera jedną wskazaną datę i walutę. Nie zapisuj klucza API w udostępnionym skoroszycie. Power Query zwraca dokładnie dziewięć kolumn A:I. Najpierw załaduj wynik do arkusza staging, skopiuj wiersz danych bez nagłówków i wklej wartości od wiersza7. Refresh All zastępuje wynik zapytania, nie dopisuje niezmiennej historii. Windows: Data → Get Data → From Other Sources → Blank Query; obsługiwany Microsoft 365 Mac: Data → Get Data → Launch Power Query Editor. Wybierz Anonymous, a dla klucza użyj serwerowego proxy.
let SnapshotDate = "2026-06-02", Currency = Text.Upper(Text.Trim("EUR")), Revision = "v1", SelectedDate = Date.FromText(SnapshotDate, [Format = "yyyy-MM-dd", Culture = "en-US"]), RelativePath = "v1/" & Date.ToText(SelectedDate, "yyyy-MM-dd") & "/USD", Endpoint = "https://api.exchangerate.dev/" & RelativePath & "?symbols=" & Currency, Payload = Json.Document(Web.Contents("https://api.exchangerate.dev", [ RelativePath = RelativePath, Query = [symbols = Currency], Timeout = #duration(0, 0, 0, 10) ])), Source = if Payload[base] <> "USD" or Payload[date] <> SnapshotDate then error "Unexpected response base or date" else Payload, RawRate = Record.Field(Source[rates], Currency), Rate = if not Value.Is(RawRate, type number) or RawRate <= 0 then error "Expected a positive numeric rate" else RawRate, SnapshotId = Currency & "-" & Text.Replace(SnapshotDate, "-", "") & "-" & Revision, Notes = "Response timestamp=" & Source[timestamp] & "; is_forward_filled=" & (if Source[is_forward_filled] then "true" else "false"), Snapshot = #table( {"Snapshot ID", "Snapshot Date", "Currency", "Source", "Market Session", "Data Updated At (UTC)", "Rate / USD", "API Endpoint", "Notes"}, {{SnapshotId, SelectedDate, Currency, Record.Field(Source[sources], Currency), Source[market_session], Source[data_updated_at], Rate, Endpoint, Notes}} )in SnapshotZachowaj ślad audytowy
Zapisz datę księgowania, użyty snapshot, źródło/sesję i powód zamrożenia. W razie potrzeby przechowuj też odpowiedź źródłową. W Notes zachowaj timestamp odpowiedzi i is_forward_filled; zapisz też Snapshot ID, źródło, sesję i powód korekty.
Używaj wyniku tylko do raportowania
To przykład do raportowania i analizy. Nie określa podatków, zasad księgowych, zgodności ani rozliczenia. Przykład kończy się na wierszu100; rozszerz formuły i zakresy wyszukiwania razem.