Tutorial/Rejestr faktur wielowalutowych

Zbuduj rejestr faktur wielowalutowych w Excelu

Pobierz skoroszyt dla faktur w EUR, GBP, JPY i IDR z datowanymi migawkami kursów, formułami USD i rejestrem audytowym.

ERexchangerate.dev·Aktualizacja 8 września 2026·8 min czytania

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ć.

Key points
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.

Representative historical responsecopy
{
  "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.

Excel formula · Net USDcopy
=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.

Power Query M · explicit snapshotcopy
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
    Snapshot

Zachowaj ś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.

ER
exchangerate.dev
exchangerate.dev

Czytaj dalej

ReferenceDodaj datowaną migawkę kursuCzytaj TutorialDodaj nową migawkę przez Power QueryCzytaj TutorialKursy walut w PythonieCzytaj
Więcej porównańFixer vs exchangerate.devOpen Exchange Rates vs exchangerate.devCurrencylayer vs exchangerate.dev
PoradnikiReading source and market_session in your pipelineIndicative vs executable FX rates: what a rates API actually gives youECB reference rates, explained
Kursy na żywoEUR/USDGBP/USDUSD/JPY